Cuando realizo una llamada de función de contrato a través de Truffle y luego resuelvo la promesa devuelta, obtengo algo como esto:
{
"tx": "0x...",
"receipt": {
"transactionHash": "0x...",
"transactionIndex": 0,
"blockHash": "0x...",
"blockNumber": 24,
"gasUsed": 42860,
"cumulativeGasUsed": 42860,
"contractAddress": null,
"logs": [
{
"logIndex": 0,
"transactionIndex": 0,
"transactionHash": "0x...",
"blockHash": "0x...",
"blockNumber": 24,
"address": "0x...",
"data": "0x...",
"topics": [
"0x...",
"0x...",
"0x..."
],
"type": "mined"
}
],
"status": "0x1",
"logsBloom": "0x..."
},
"logs": [
{
"logIndex": 0,
"transactionIndex": 0,
"transactionHash": "0x...",
"blockHash": "0x...",
"blockNumber": 24,
"address": "0x...",
"type": "mined",
"event": "Transfer",
"args": {
"from": "0x...",
"to": "0x...",
"value": "0"
}
}
]
}
No estoy muy seguro de cómo Truffle ajusta exactamente web3.js para invocar funciones de contrato, por lo que no estoy muy seguro de dónde buscar en la documentación de web3.js. Pero estoy usando Truffle v4.1.14, que se basa en web3.js v0.18.4, y los documentos para web3.js v0.x son un poco difíciles de leer, así que busqué en los documentos web3.js v1.x en su lugar.
Ahora, supongo que debería buscar en web3.eth.sendSignedTransaction , que devuelve:
Un emisor de eventos combinados prometedor. Se resolverá cuando se disponga del comprobante de la transacción .
Entonces parece que Truffle toma este recibo y lo incrusta en un objeto JSON que contiene los siguientes campos adicionales :
tx
, que es el hash de la transacción, supongologs
, que contiene algunos o todos los receipt.logs
, pero decodificadosEntonces, ¿qué está pasando aquí exactamente?
Este nuevo objeto ciertamente no es el recibo descrito en los documentos.
¿Existe una terminología oficial para esto, o es solo un "truco de trufas" designado para facilitarme la vida al decodificar eventos?
Gracias.
Claramente, la trufa devuelve su propio objeto. Seguramente contendrá el recibo web3 original que está etiquetado receipt
porque truffle usa web3 0.x como mencionaste. Entonces, los atributos agregados no son más que una forma de trufa tratando de mejorar su marco y mantener la capa por encima de web3.
No creo que haya una terminología determinada para ese objeto, o al menos siempre quedará eclipsada por la transactionReceipt
de Web3, de ahí que tomen el mismo nombre para ambos.
buena vibración
kaki maestro del tiempo
buena vibración
response
sería lo suficientemente adecuado. Entonces puedo referirme aresponse.tx
,response.logs
,response.receipt
,response.receipt.logs
, etc.buena vibración
response.logs[0].event
.