Инициируются ли события в контракте после майнинга этой конкретной транзакции?

Допустим, у меня есть событие notify() в функции с именем buy().

event notify();
   buy(){
   //...
   notify();
}

Проблема здесь в том, что мой дескриптор уведомления срабатывает только после того, как эта транзакция заминирована. Так работают события? Если да, то есть ли альтернатива, чтобы мгновенно узнать о транзакциях, происходящих в моем контракте? var filter = contractObject.notify();

filter.watch(function (error, log, data)
 {  console.log(data);  });

Ответы (1)

Используйте pendingпри построении вашего web3.eth.filter.

web3.eth.filterимеет один параметр:

String|Object — Строка «последняя» или «ожидающая» для отслеживания изменений в последнем блоке или ожидающих транзакциях соответственно. Или объект опций фильтра следующим образом: fromBlock: Number|String — номер самого раннего блока (последний может означать самый последний и ожидающий в данный момент майнинг блок). По умолчанию последний. toBlock: Number|String — номер последнего блока (последний может означать самый последний и ожидающий в данный момент блок майнинга). По умолчанию последний.

Некоторые вещи, которые следует знать об ожидающих транзакциях:

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

Это несколько причин, по которым по умолчанию прослушиваются только те события, которые были объединены в блок ( latest). Даже в этом случае имейте в виду, что вы можете захотеть провести реорганизацию сети .