php-node-client
7 лет назадОтправка транзакций в блокчейн 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
установка расширений
- secp256k1 (как установить (secp256k1-php)[https://github.com/Bit-Wasp/secp256k1-php])
- gmp
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
С каждым коммитом мир становится лучше!