Недействительный отправитель при отправке необработанной транзакции, подписанной с помощью ethereum-tx на PHP

Я использую PHP и библиотеку ethereum-tx https://github.com/web3p/ethereum-tx для подписи транзакций, но при попытке отправить их на узел я получил ошибку «неверный отправитель». Кроме того, точно такая же транзакция, подписанная myEtherWallet https://www.myetherwallet.com/#offline-transaction , дает другой результат. Поэтому я предполагаю, что библиотека ethereum-tx применяет другой стандарт, чем myEtherWallet, или я делаю что-то неправильно при подписании транзакции.

Транзакция очень простая, достаточно отправить 0,1 эфира с кошелька на контракт:

$fromAddress = '0x0a2E9bBA44b58841174115b4859297D86d6e8eB0'; // My wallet
$fromPassword = '0x...'; // My pkey
$toAddress = '0x7665822efbd0fde3a4f3f57eccaecdc99b8a64a4'; // A contract address

$transaction = new Transaction([
     'nonce' => '0x14',
     'from' => $fromAddress,
     'to' => $toAddress,
     'gas' => '0x5208',
     'gasPrice' => '0x00',
     'value' => '0x016345785d8a0000' // 0.1 eth
]);

Это PHP-код для подписи транзакции:

<?
require_once('vendor/autoload.php');
use Web3p\EthereumTx\Transaction;

$transaction = ... <the code above>

$signedTransaction = $transaction->sign($fromPassword);
?>

И результирующая подписанная транзакция:

0xf8671480825208947665822efbd0fde3a4f3f57eccaecdc99b8a64a488016345785d8a00008023a0b21679034fd6304c1058a5d7505e284630fec38a0f8d3551261e9c45f056859aa041b397f49f566ce12fec2de93934987d119ab7ced2b0916ddb993b0879707d05

Тем временем тот же tx, подписанный через myEtherWallet, возвращает:

0xf8671480825208947665822efbd0fde3a4f3f57eccaecdc99b8a64a488016345785d8a0000802aa0f0dd7d6e244b43b2ca138fef989c38f40bac304f50f4c052ef0c4175eaffeac3a038cb792e21016c171355afefc821fe9ec3b7accce9a094e7a6f5a9129c34b5ac

Как я могу узнать, почему первая подписанная транзакция недействительна и как это исправить? Есть идеи? Спасибо!

попробуйте изменить gasPrice: 'gasPrice' => '0x9184e72a000'(10 gwei)
изменено, но тот же результат

Ответы (1)

Транзакция недействительна в Ropsten, поскольку не указан chainId. Исправить так:

$transaction = new Transaction([
     'nonce' => $nextNonce,
     'from' => $fromAddress,
     'to' => $toAddress,
     'gas' => $gas,
     'gasPrice' => $gasPrice,
     'value' => $amountWeis,
     'chainId' => 3,
]);