Как мне назвать объект, возвращаемый из функционального вызова контракта Truffle

Когда я выполняю вызов функции контракта через 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, который содержит следующие дополнительные поля:

  1. tx, который, я полагаю, является хэшем транзакции
  2. logs, который содержит некоторые или все receipt.logs, но декодированные

Так что же именно здесь происходит?

Этот новый объект, безусловно, не является квитанцией, описанной в документации.

Есть ли для этого официальная терминология, или это просто «трюфельный хак», предназначенный для облегчения моей жизни при расшифровке событий?

Спасибо.

Ответы (1)

Ясно, что трюфель возвращает свой собственный объект. Он обязательно будет содержать исходную квитанцию ​​web3, которая помечена, receiptпотому что трюфель использует web3 0.x, как вы упомянули. Таким образом, добавленные атрибуты — не более чем способ трюфеля, пытающегося улучшить свою структуру и сохранить уровень выше web3.

Я не думаю, что для этого объекта существует определенная терминология, или, по крайней мере, он всегда будет затмеваться transactionReceiptWeb3, поэтому для обоих используется одно и то же имя.

Но если бы я попытался сохранить совместимость своего тестового кода вне трюфеля (например, предположим, что у меня есть некоторые общие утилиты JS, которые я хочу использовать для взаимодействия «в реальном времени» с сетью Ethereum), то мне, вероятно, следует избегать полагаться на это. дополнительный слой, верно?
да, или можно было бы написать отдельные утилиты тестирования для трюфеля и для трюфеля снаружи. это не так сложно, учитывая, что это всего лишь атрибут json.
Я решил, что имя responseбудет достаточно подходящим. Тогда я могу обратиться к response.tx, response.logs, response.receipt, response.receipt.logsи т.д.
Кстати, вы знаете, как Truffle может извлечь название события из квитанции? В приведенном выше примере он находится в формате response.logs[0].event.