0

I'm trying to make an ethereum raw transaction by php and these libraries:

https://github.com/simplito/elliptic-php

https://github.com/kornrunner/php-keccak

https://github.com/web3p/rlp

this is my code:

use Elliptic\EC;
use kornrunner\Keccak;
use Web3p\RLP\RLP;

$privateKeyHex = '.....'; // wallet private key
$toWallet = '118086be6247fBDa3BC64B4A11F07F3894aA1fAF';

$ec = new EC('secp256k1');
$key = $ec->keyFromPrivate($privateKeyHex );
$publicKeyHex = $key->getPublic('hex');
// $publicKeyHex => 0445e2caf0f227247dfa10440765812492e4d4c9df7b4e74d0d5cd3279fa80f5ef987a70e061ca20c06f09690957c9ba365cf06541181d1291e14c847d0d826583

$nonce= 0;
$gasPrice = 1e10;
$gasLimit = 21000;
$to = hex2bin($toWallet);
$value = 1e15-($gasLimit*$gasPrice)-1;
$inputData = 0;
//*********** EIP_155 *********
$chain_id = 1;
$r = 0;
$s = 0;
//*****************************

$SignData = [$nonce,$gasPrice,$gasLimit,$to,$value,$inputData,$chain_id,$r,$s];
$SignRlpData = rlpEncode($SignData);
$signHash = Keccak::hash(hex2bin($SignRlpData), 256);

$signature = $ec->sign($signHash ,$key);
$r = $signature->r->toString('hex');
$s = $signature->s->toString('hex');
$v = $chain_id*2 + ($signature->recoveryParam +35);

$trxData = [$nonce,$gasPrice,$gasLimit,$to,$value,$inputData,$v,hex2bin($r),hex2bin($s)];
$trxRlpData = rlpEncode($trxData );
// trxRlpData => f86b808502540be40082520894118086be6247fbda3bc64b4a11f07f3894aa1faf8702ce80355f5fff8026a0d879bd4319788f5e75fba039f879f7b38f25a80d1b6768f8c80d2e0dec7dc11aa0d952e26360e25f95821fc7f92d231925cd0cd1c412fc1d4b5bbdb439fbf0f19b




function rlpEncode($a){
    $rlp = new RLP;
    $encodedBuffer = $rlp->encode($a);
    return $encodedBuffer->toString('hex');
}

now after I send value of $trxRlpData to the ethereum network by https://etherscan.io/pushTx, show me this error message:

Error! Unable to broadcast Tx : {"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"invalid sender"}}

but where is problem ?

0

finally I found that problem was from wrong values for $gasPrice,$gasLimit and $value variables.

After making these changes, the current problem has been fixed:

$gasPrice = 1e9;
$value = 1e14-($gasLimit*$gasPrice);

But I came across another error called transaction underpriced. finally I solved this problem with increasing a little $gasLimit.

$gasLimit = 21001;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.