Когда я выполняю вызов функции контракта через Truffle, а затем разрешаю возвращенное обещание, я получаю что-то вроде этого:
{
"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"
}
}
]
}
Я не совсем уверен, как именно Truffle оборачивает web3.js, чтобы вызывать функции контракта, поэтому я не совсем уверен, где искать документацию web3.js. Но я использую Truffle v4.1.14, который опирается на web3.js v0.18.4, а документы для web3.js v0.x довольно трудно читать, поэтому вместо этого я искал в документации web3.js v1.x.
Теперь, я думаю, мне следует изучить web3.eth.sendSignedTransaction , который возвращает:
Генератор комбинированных событий обещаний. Будет решено, когда будет доступна квитанция о транзакции.
Таким образом, похоже, что Truffle берет этот чек и встраивает его в объект JSON, который содержит следующие дополнительные поля:
tx
, который, я полагаю, является хэшем транзакцииlogs
, который содержит некоторые или все receipt.logs
, но декодированныеТак что же именно здесь происходит?
Этот новый объект, безусловно, не является квитанцией, описанной в документации.
Есть ли для этого официальная терминология, или это просто «трюфельный хак», предназначенный для облегчения моей жизни при расшифровке событий?
Спасибо.
Ясно, что трюфель возвращает свой собственный объект. Он обязательно будет содержать исходную квитанцию web3, которая помечена, receipt
потому что трюфель использует web3 0.x, как вы упомянули. Таким образом, добавленные атрибуты — не более чем способ трюфеля, пытающегося улучшить свою структуру и сохранить уровень выше web3.
Я не думаю, что для этого объекта существует определенная терминология, или, по крайней мере, он всегда будет затмеваться transactionReceipt
Web3, поэтому для обоих используется одно и то же имя.
хорошая вибрация
Каки Мастер Времени
хорошая вибрация
response
будет достаточно подходящим. Тогда я могу обратиться кresponse.tx
,response.logs
,response.receipt
,response.receipt.logs
и т.д.хорошая вибрация
response.logs[0].event
.