Я использую 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
Как я могу узнать, почему первая подписанная транзакция недействительна и как это исправить? Есть идеи? Спасибо!
Транзакция недействительна в Ropsten, поскольку не указан chainId. Исправить так:
$transaction = new Transaction([
'nonce' => $nextNonce,
'from' => $fromAddress,
'to' => $toAddress,
'gas' => $gas,
'gasPrice' => $gasPrice,
'value' => $amountWeis,
'chainId' => 3,
]);
Тюдор Константин
gasPrice
:'gasPrice' => '0x9184e72a000'
(10 gwei)Хуан Игнасио Перес Сакристан