Ungültiger Absender beim Senden von Rohtransaktionen, signiert mit Ethereum-TX auf PHP

Ich verwende PHP und die Ethereum-tx-Bibliothek https://github.com/web3p/ethereum-tx , um Transaktionen zu signieren, aber als ich versuchte, sie an den Knoten zu senden, erhielt ich einen „ungültiger Absender“-Fehler. Außerdem führt genau dieselbe Transaktion, die von myEtherWallet https://www.myetherwallet.com/#offline-transaction signiert wurde, zu einem anderen Ergebnis. Ich vermute also, dass die Ethereum-tx-Bibliothek einen anderen Standard als myEtherWallet anwendet, oder ich mache beim Signieren der Transaktion etwas falsch.

Die Transaktion ist sehr einfach und sendet einfach 0,1 Ether von einer Brieftasche an einen Vertrag:

$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
]);

Dies ist der PHP-Code zum Signieren der Transaktion:

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

$transaction = ... <the code above>

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

Und die resultierende signierte Transaktion ist:

0xf8671480825208947665822efbd0fde3a4f3f57eccaecdc99b8a64a488016345785d8a00008023a0b21679034fd6304c1058a5d7505e284630fec38a0f8d3551261e9c45f056859aa041b397f49f566ce12fec2de93934987d119ab7ced2b0916ddb993b0879707d05

In der Zwischenzeit gibt derselbe tx, der durch myEtherWallet signiert wurde, zurück:

0xf8671480825208947665822efbd0fde3a4f3f57eccaecdc99b8a64a488016345785d8a0000802aa0f0dd7d6e244b43b2ca138fef989c38f40bac304f50f4c052ef0c4175eaffeac3a038cb792e21016c171355afefc821fe9ec3b7accce9a094e7a6f5a9129c34b5ac

Wie kann ich herausfinden, warum die erste signierte Transaktion ungültig ist, und wie kann ich das Problem beheben? Irgendwelche Ideen? Danke!

versuchen Sie, das zu ändern gasPrice: 'gasPrice' => '0x9184e72a000'(10 gwei)
geändert, aber gleiches Ergebnis

Antworten (1)

Die Transaktion ist in Ropsten ungültig, weil chainId nicht angegeben wurde. So fixieren:

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