Remitente no válido al enviar Transacción sin procesar, firmado con ethereum-tx en PHP

Estoy usando PHP y la biblioteca ethereum-tx https://github.com/web3p/ethereum-tx para firmar transacciones, pero cuando intento enviarlas al nodo, aparece el error "remitente no válido". Además, exactamente la misma transacción firmada por myEtherWallet https://www.myetherwallet.com/#offline-transaction produce un resultado diferente. Así que supongo que la biblioteca ethereum-tx está aplicando un estándar diferente al de myEtherWallet o estoy haciendo algo mal al firmar la transacción.

La transacción es muy simple, simplemente enviando 0.1 ether desde una billetera a un contrato:

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

Este es el código PHP para firmar la transacción:

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

$transaction = ... <the code above>

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

Y la transacción firmada resultante es:

0xf8671480825208947665822efbd0fde3a4f3f57eccaecdc99b8a64a488016345785d8a00008023a0b21679034fd6304c1058a5d7505e284630fec38a0f8d3551261e9c45f056859aa041b397f49f566ce12fec2de93934987d119ab7ced2b0916ddb993b0879707d05

Mientras tanto, el mismo tx firmado a través de myEtherWallet regresa:

0xf8671480825208947665822efbd0fde3a4f3f57eccaecdc99b8a64a488016345785d8a0000802aa0f0dd7d6e244b43b2ca138fef989c38f40bac304f50f4c052ef0c4175eaffeac3a038cb792e21016c171355afefc821fe9ec3b7accce9a094e7a6f5a9129c34b5ac

¿Cómo puedo averiguar por qué la primera transacción firmada no es válida y cómo solucionarlo? ¿Algunas ideas? ¡Gracias!

intente modificar el gasPrice: 'gasPrice' => '0x9184e72a000'(10 gwei)
modificado, pero mismo resultado

Respuestas (1)

La transacción no es válida en Ropsten porque no se ha especificado chainId. Arreglar así:

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