Veo que mi transacción está minada. Estoy tratando de almacenar algunos datos en una estructura. La minería es exitosa, sin embargo, en el recibo de la transacción veo que la dirección del contrato es nula. ¿Es eso un error? Además, cuando intento obtener los datos de la estructura nuevamente, no obtengo ningún dato.
transaction receipt :
{
blockHash: "0x6835e94160e4db15196bae0718fcec9ea5e3ae94aa83fa9a837d49b736155276",
blockNumber: 1135,
contractAddress: null,
cumulativeGasUsed: 52773,
from: "0x627263e6a7e435feb257f9f17032026635b6bb4e",
gasUsed: 52773,
logs: [],
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
root: "0x19a02c583d8855081cb16f2a3e5bded4b896f8c2db1e58aacb75738401f5cf9c",
to: "0x031bad0e974ee22016e4578ceec980c35fa19e1e",
transactionHash: "0x6420fba51c596055d917c8f7abb67164435c675b212188dd41efd9c8f334a9c7",
transactionIndex: 0
}
transaction receipt :
{
blockHash: "0x6835e94160e4db15196bae0718fcec9ea5e3ae94aa83fa9a837d49b736155276",
blockNumber: 1135,
from: "0x627263e6a7e435feb257f9f17032026635b6bb4e",
gas: 90000,
gasPrice: 20000000000,
hash: "0x6420fba51c596055d917c8f7abb67164435c675b212188dd41efd9c8f334a9c7",
input: "0x136bbb5b000000000000000000000000e52743fbbc67a95283c7c1fed1764275e484a9f900000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000063000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000647616e657368000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d616c6500000000000000000000000000000000000000000000000000000000",
nonce: 24,
r: "0x1b5086663b5f034731625e1b3894834bdef2e8fe1d4bef8fc674d601b55fa200",
s: "0x1b667db9dcc05a253d1b80812e85c8c07bab44226235f23f186b294c7161ace",
to: "0x031bad0e974ee22016e4578ceec980c35fa19e1e",
transactionIndex: 0,
v: "0x2a",
value: 0
}
Sin embargo, no estoy recuperando los datos que almacené en la estructura. No puedo entender lo que está mal.
Se crea un contrato (también llamado implementación) enviando el código de bytes del contrato a la dirección Ethereum 0x0 (es decir, el to
campo será 0x0).
Si la creación del contrato tiene éxito, entonces (y solo entonces) habrá un valor en el campo contractAddress del recibo de la transacción. Ese valor será la dirección del contrato recién creado. Las llamadas posteriores a la dirección de ese contrato siempre tendrán 'null' en el campo contractAddress de un recibo.
En otras palabras, el contractAddress
campo podría haberse llamado newlyCreateContractAddress
. Lea más aquí: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_gettransactionreceipt
Luché con este comportamiento también. En la implementación del contrato (para Rinkeby en mi caso), la dirección del contrato era nula. Utilizo la biblioteca web3.js en mi aplicación, que verifica esto en el recibo de la transacción (más específicamente, el paquete web3-core-methods lo verifica) y arroja un error en caso de que contractAddress sea nulo.
Este es un problema solo si ejecuta el cliente ligero (reproducible). Cuando ejecuta un nodo completo, contractAddress devuelve la dirección real.
Rob Hitchens