Bug Of spec256k1-php Was Fixed With PHP-hack And UPDs[php-graphene-node-client v3.1.0]

Words
233
Reading
2 min
Listen
Play
9y

php-graphene-node-client

It is PHP API client for Steem/GOLOS blockchain

Github or packagist with MIT license. Author t3ran13@t3ran13 and active helper semasping@semasping

In Release v3.1.0

  • spec256k1-php bug fix
  • upd Transaction:init()
  • brodcast operations classes Op*.php were updated
  • readme was updated

spec256k1-php bug fix

Transactions are signing with spec256k1-php with function secp256k1_ecdsa_sign_recoverable($context, $signatureRec, $msg32, $privateKey) and if it is not canonical from first time, you have to make transaction for other block. For searching canonical sign function have to implement two more parameters, but spec256k1-php library does not have it.

It is was solved with php-hack in Transaction::sign() - we will add 1 sec to tx expiration time and try to get canonical signing for new msg. Up to 200 tries.

...
//becouse spec256k1-php canonical sign trouble will use php hack.
//If sign is not canonical, we have to chang msg () and try to sign again
$nTries = 0;
while (true) {
    $nTries++;
    $msg = self::getTxMsg($chainName, $trxData);
    echo '
'
. print_r($trxData->getParams(), true) . '
'
; //FIXME delete it try { foreach ($privateWIFs as $keyName => $privateWif) { $index = count($trxData->getParams()[0]['signatures']); /** @var CommandQueryData $trxData */ $trxData->setParamByKey('0:signatures:' . $index, self::signOperation($msg, $privateWif)); } break; } catch (TransactionSignException $e) { if ($nTries > 200) { //stop tries to find canonical sign throw $e; break; } else { /** @var CommandQueryData $trxData */ $params = $trxData->getParams(); foreach ($params as $key => $tx) { $tx['expiration'] = (new \DateTime($tx['expiration'])) ->add(new \DateInterval('PT0M1S')) ->format('Y-m-d\TH:i:s\.000'); $params[$key] = $tx; } $trxData->setParams($params); } } ...

Transaction:init()

We have to transfer connector(it have to implements ConnectorInterface) instead ChainName param to function now like in example below

<?php

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

$connector = new SteemitHttpConnector();
//$connector = new GolosWSConnector();

/** @var CommandQueryData $tx */
$tx = Transaction::init($connector);
$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
);

brodcast operations classes Op*.php were updated

We have to transfer connector(it have to implements ConnectorInterface) instead ChainName param to function now like in example below

<?php

use GrapheneNodeClient\Tools\ChainOperations\OpVote;
use GrapheneNodeClient\Connectors\Http\SteemitHttpConnector;
use GrapheneNodeClient\Connectors\WebSocket\GolosWSConnector;

$connector = new SteemitHttpConnector();
//$connector = new GolosWSConnector();

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

// example of answer
//Array
//(
//    [id] => 5
//    [result] => Array
//        (
//            [id] => a2c52988ea870e446480782ff046994de2666e0d
//            [block_num] => 17852337
//            [trx_num] => 1
//            [expired] =>
//        )
//
//)

Do not forget to make pull request and post about it on utopian


It is better with each commit

Commits were done by me for release v3.1.0

  • TransactionSignException.php was added
  • Transaction.php php hack for fix bug of spec256k1-php and tx init upd
  • OpComment.php was updated
  • OpTransfer.php was updated
  • OpVote.php was updated
  • README.md was updated
  • clear staff



Posted on Utopian.io - Rewarding Open Source Contributors

Bug Of spec256k1-php Was Fixed With PHP-hack And UPDs[php-graphene-... | Ecency