Скажем, мы хотим подтвердить, что транзакция стоимости tx
достигла определенной завершенности, которую мы определяем как ожидание 12 подтверждений блока. Мы делаем это, чтобы снизить вероятность tx
потери из-за форка или его включения в блок uncle.
Примеры, которые я видел, используют getBlock
и/или getTransaction
сначала, чтобы убедиться, что они tx
были добыты в блоке.
Затем они ждут, пока не будет добыто 12 новых блоков, и, кажется, используют getTransactionReceipt
их для проверки того, находятся ли они tx
в блокчейне.
Есть ли какая-то функциональная разница в этом контексте между использованием и getTransaction
проверкой getTransactionReceipt
наличия ? Реализации, похоже, не используют какие-либо дополнительные возвращаемые данные, что немного сбивает с толку.tx
blockNumber
getTransactionReceipt
Допустим, произошел форк или tx
он попал в потерянный блок до 12 подтверждений. Означает ли это, что getTransaction
и getTransactionReceipt
вернет null для транзакции или как это отражено в этих вызовах?
Нет, в данном случае нет никакой разницы — они по существу эквивалентны. Если tx потерян, они должны вернуть null
, но вы все равно должны проверить номер блока, потому что он мог быть добавлен в новую цепочку позже, чем вы ожидаете, что снижает вероятность окончательности.
tx
чтобы заблудиться на развилке? Будут ли методы по-прежнему возвращаться null
или номер блока будет null
? Не уверен, tx
что осиротение покрывает случай с вилкой.tx
начальный номер блока может измениться между первым и последним вызовами (после 12 блоков)? И, кроме того, означает ли это, что рекомендуется ждать дополнительных блоков, чтобы покрыть разницу, чтобы достичь 12 подтверждений?(tx.blockNumber - eth.blockNumber) > 12
у вас есть 12 подтверждений.
Виктор Мезрин