Почему транзакция вызывает 12 или 24 события подтверждения?

В документах Web3.js указано, что будет запущено событие подтверждения :

  • 12 раз при звонке web3.eth.sendTransaction(см. здесь )
  • 24 раза при звонке myContract.methods.myMethod.send(см. здесь )

Почему разница в количестве запусков события в каждом случае?

Что еще более важно, для чего именно я должен использовать эти события?

В настоящее время я просто awaitвыполняю функцию, а затем использую возвращаемое значение, которое является разрешением Promise, содержащим квитанцию ​​транзакции (если мы не имеем дело с развертыванием контракта, и в этом случае он будет содержать экземпляр нового контракта).

Насколько я понимаю, эту квитанцию ​​также можно получить, используя:

myContract.methods.myMethod().send().on('receipt', function(receipt){...});

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

Нужно ли мне подсчитывать 12 (или 24) события, чтобы быть уверенным, что получение информации отражает блокчейн?

Спасибо!

Когда ваша транзакция будет добыта, квитанция станет доступной... это подтверждение 0, поскольку в блокчейн добавляется больше блоков.... увеличивается уверенность в том, что ваша транзакция находится в самой длинной цепочке и не может быть отменена...
@kherwa: Спасибо. И достигает ли эта достоверность 100 % после 12 (или 24) событий подтверждения? Или, в более общем плане, можно ли измерить уровень достоверности в зависимости от числа подтверждений? Если да, то какая именно функция? Кроме того, соответствует ли каждое событие подтверждения добавлению в цепочку 1 блока?
Да, каждое подтверждение — это новый блок... вы должны дождаться определенного количества подтверждений в зависимости от характера и конфиденциальности транзакции...
@goodvibration, так как вы придумываете решение, как вы убеждаетесь, что транзакция завершена.

Ответы (2)

Когда транзакция добыта, квитанция доступна для использования, в этот момент номер подтверждения равен 0, поскольку в блокчейн добавляется больше блоков, номер подтверждения увеличивается. С более высоким номером подтверждения у нас будет больше уверенности в том, что транзакция находится на самом длинном пути и не может быть отменена.

Предположим, вы принимаете транзакции с определенным количеством подтверждений, вы можете отфильтровать этот номер подтверждения в событии подтверждения.

.on('confirmation', function(confirmationNumber,receipt){})

По поводу того, почему событие выдает до 12 и 24 подтверждений в разных сценариях, я не очень представляю.

Событие подтверждения запускается 24 раза в обоих случаях (я проверял). "12" - это ошибка в документах. Спасибо!

Извините, что наткнулся на очень старый пост, как когда-то наткнулся на него в поисках чего-то другого.

Для тех, кто заинтересован, 24 события подтверждения выдаются из-за того, что 24 являются внутренней настройкой Web3 по умолчанию для количества приемлемых подтверждений. Для этого параметра можно установить меньшее или большее количество подтверждений.

Чтобы прочитать текущую настройку:

web3.eth.transactionConfirmationBlocks

Чтобы изменить настройку:

web3.eth.transactionConfirmationBlocks = <new number>

См. официальную документацию Web3 для получения дополнительной информации здесь Web3