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

Отправка транзакций в блокчейн STEEM/GOLOS на PHP [php-graphene-node-client v3.0.0]

Все верно - транзакции на PHP!

В релизн

  • broadcast (пример для голосования)
  • тулзы для broadcast
  • фикс багов для команд broadcast

Установка

рид онли, без транзакций
composer require t3ran13/php-graphene-node-client
с транзакциями

(детали и dockerfile тут)

установка компонентов

  • automake
  • libtool
  • libgmp-dev

установка расширений

broadcast_api темплейты операций

  • vote
<?php

use GrapheneNodeClient\Tools\ChainOperations\OpVote;
use GrapheneNodeClient\Tools\Transaction;

$answer = OpVote::doSynchronous(
    Transaction::CHAIN_STEEM, //Transaction::CHAIN_GOLOS
    'guest123',
    '5JRaypasxMx1L97ZUX7YuC5Psb5EAbF821kkAGtBj7xCJFQcbLg',
    'firepower',
    'steemit-veni-vidi-vici-steemfest-2016-together-we-made-it-happen-thank-you-steemians',
    10000
);

//пример ответа
//Array
//(
//    [id] => 5
//    [result] => Array
//        (
//            [id] => a2c52988ea870e446480782ff046994de2666e0d
//            [block_num] => 17852337
//            [trx_num] => 1
//            [expired] =>
//        )
//
//)

Tools: Transaction для блокчейна (broadcast)

<?php

use GrapheneNodeClient\Tools\Transaction;

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

if (Transaction::CHAIN_GOLOS === $chainName) {
    $connector = new GolosWSConnector();
} elseif (Transaction::CHAIN_STEEM === $chainName) {
    $connector = new SteemitWSConnector();
}
$command = new BroadcastTransactionSynchronousCommand($connector);
Transaction::sign($chainName, $tx, ['posting' => $publicWif]);

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

WARNING

Транзакции подписываются spec256k1-php функцией secp256k1_ecdsa_sign_recoverable($context, $signatureRec, $msg32, $privateKey) и если подпись не каноничная с первого раза, вы должны создать транзакцию для другого блока. Для поиска канонической подписи функция должна поддерживать еще два параметра, но они не реализованы в либе spec256k1-php.


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

С каждым коммитом мир становится лучше!

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