Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
php-node-client
6 лет назад

PHP Graphene Node Client [v4.0.4 - v4.0.9]

php-graphene-node-client

Это PHP API клиент для Steem/GOLOS блокчейнов

Код доступен на Github или packagist под MIT лицензией. Автор @t3ran13, активный контрибьютор @semasping

In Release v4.0.4

  • фикс бага с серелизацией строк с длинной между 128-256

В релизе v4.0.6

  • фикс бага с серелизацией строк
  • новая команда GetConfig

В релизе v4.0.7

  • добавлен параметр expiration time для транзакции в init

В релизе v4.0.8

  • обновлен алгоритм сортировки нод в коннекторе по таймауту
  • обновлены списки нод для WS/HttpJsonRpc коннекторов

В релизе v4.0.9

  • добавлен класс для расчета bandwidth аккаунтов
  • добавлена возможность на лету менять таймаут и число попыток реконнекта для коннекторов

Фикс бага с серелизацией строк

Для строк длинной до 11к серелизация теперь работает корректно.
До этого вы могли видеть ошибку 3030000 tx_missing_posting_auth: missing required posting authority в ответе ноды из-за неверной серелизации

Новая команда GetConfig

Можно использовать новую комманду двумя путями


use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Commands\Commands;
use GrapheneNodeClient\Commands\Single\GetConfig;

//одиночный класс команды
$command = new GetConfig($connector);
$commandQueryData = new CommandQueryData();
$answer = $command->execute(
    $commandQueryData
);

//или класс-агрегатор комманд
$commands = new Commands($connector);
$commands->get_config();
$commandQueryData = new CommandQueryData();
$answer = $commands->execute(
    $commandQueryData
);

Добавлен параметр expiration time для транзакции в init

Теперь доступна возможность задать любое expiration time (2 мин по умолчанию) для транзакций в формате DateInterval, как показано ниже.
Если транзакция не попадает в блокчейн в течении expiration time, то транзакция будет отменена.

<?php

use GrapheneNodeClient\Tools\Transaction;
use GrapheneNodeClient\Connectors\Http\SteemitHttpConnector;
use GrapheneNodeClient\Connectors\WebSocket\GolosWSConnector;

$connector = new SteemitHttpConnector();

/** @var CommandQueryData $tx */
$tx = Transaction::init($connector, 'PT4M');// expiration time 4 мин в формате DateInterval 
$tx->setParamByKey(
    '0:operations:0',
    [
        'vote',
        [
            'voter'    => $voter,
            'author'   => $author,
            'permlink' => $permlink,
            'weight'   => $weight
        ]
    ]
);

$command = new BroadcastTransactionSynchronousCommand($connector);
Transaction::sign($chainName, $tx, ['posting' => $publicWif]);

$answer = $command->execute(
    $tx
);

Обновлен алгоритм сортировки нод в коннекторе по таймауту

Идея этой фичи - сортировка нод в коннекторе по таймауту.

Все "отвалившиеся" или "медленные" ноды будут выкинуты из списка и быстрые ноды будут в верху списка. Достаточно запустить сортировку 1 раз в течении жизни каждого php процесса. Каждой команде будет известно состояния коннектора от предыдущей. Это крутая фича для кроновский скриптов с множеством вызовов к апи.

Сейчас алгоритм делает 2 запроса get_discussions_by_created к каждой ноде и это дает более лучшую сортировку чем ранее.

Обновлены списки нод для WS/HttpJsonRpc коннекторов

В процессе работы заметил, что некоторые ноды плохие по ряду причит

Актуальный список нод в коннекторах

добавлен класс для расчета bandwidth аккаунтов

Временами невозможно отправить в блокчейн транзакцию, потому что Ваш аккаунт не имеет достаточно bandwidth. Теперь есть возможность перед отправкой транзакции проверить bandwidth, как показано ниже

<?php


use GrapheneNodeClient\Connectors\Http\SteemitHttpConnector;
use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Tools\Bandwidth;
use GrapheneNodeClient\Tools\Transaction;


$connector = new SteemitHttpConnector();
/** @var CommandQueryData $tx */
$tx = Transaction::init($connector, 'PT4M');
$tx->setParamByKey(
    '0:operations:0',
    [
        'vote',
        [
            'voter'    => $voter,
            'author'   => $author,
            'permlink' => $permlink,
            'weight'   => $weight
        ]
    ]
);
$command = new BroadcastTransactionSynchronousCommand($connector);
Transaction::sign($chainName, $tx, ['posting' => $publicWif]);

$bandwidth = Bandwidth::getBandwidthByAccountName($this->rewardPoolName, 'market', $connector);

//Array
//(
//    [used] => 3120016
//    [available] => 148362781
//)

$trxString = mb_strlen(json_encode($tx->getParams()), '8bit');

if ($trxString * 10 + $bandwidth['used'] < $bandwidth['available']) {
    $answer = $command->execute(
        $tx
    );
}


Добавлена возможность на лету менять таймаут и число попыток реконнекта для коннекторов

Смотрите пример ниже

<?php

use GrapheneNodeClient\Connectors\Http\SteemitHttpConnector;
use GrapheneNodeClient\Commands\CommandQueryData;
use GrapheneNodeClient\Commands\Single\GetConfig;
use GrapheneNodeClient\Tools\Bandwidth;
use GrapheneNodeClient\Tools\Transaction;


$connector = new SteemitHttpConnector();
$connector->setConnectionTimeoutSeconds(3); //таймаут
$connector->setMaxNumberOfTriesToReconnect(1); //попытки реконнекта

$command = new GetConfig($connector);
$commandQueryData = new CommandQueryData();
$answer = $command->execute(
    $commandQueryData
);

/** @var CommandQueryData $tx */
$tx = Transaction::init($connector, 'PT4M');
$tx->setParamByKey(
    '0:operations:0',
    [
        'vote',
        [
            'voter'    => $voter,
            'author'   => $author,
            'permlink' => $permlink,
            'weight'   => $weight
        ]
    ]
);

$command = new BroadcastTransactionSynchronousCommand($connector);
Transaction::sign($chainName, $tx, ['posting' => $publicWif]);

$connector->setConnectionTimeoutSeconds(20); //таймаут
$connector->setMaxNumberOfTriesToReconnect(3); //попытки реконнекта

$answer = $command->execute(
    $tx
);


Код доступен на Github или packagist под MIT лицензией. Автор @t3ran13, активный помочник @semasping

С каждым коммитом мир становится лучше!
Сравнение измененений https://github.com/t3ran13/php-graphene-node-client/compare/v4.0.3...v4.0.9

Поддержите меня как делегата

перейдите на страницу
https://golos.io/~witnesses
и сделайте апвот рядом со мной @t3ran13

!!!Голосуйте за активных делегатов и голос быстро пойдет в гору! Нам нужны те, кто несет пользу для голоса!!!

0
9.504 GOLOS
На Golos с March 2017
Комментарии (1)
Сортировать по:
Сначала старые