Cuando veo un contrato para eventos de transacción en web3.py o web3.js,
En web3.js
var contract = web3.eth.contract(abi);
var cInstance = contract.at(address);
var transferEvent = cInstance .Transfer({}, {fromBlock: 0, toBlock: 'latest'});
transferEvent.watch((error, event) => {});
En web3.py
contract = w3.eth.contract(abi=contract_interface['abi'], address='0x....')
tfilter = contract.on('Transfer',{'fromBlock':0,'toBlock':'latest'})
def transfer_callback(tnx):
print(tnx)
tfilter.watch(transfer_callback)
¿Está garantizado que la devolución de llamada se realizará de acuerdo con el orden de las transacciones? incluso para transacciones pasadas . por ejemplo, la primera transacción se activará primero, la segunda transacción se activará en segundo lugar y así sucesivamente.
Tenga en cuenta que estoy filtrando el bloque 0 al último. Entonces, el código anterior también debería obtener todos los eventos de transacciones pasadas.
Actualmente, casi toda la lógica de filtrado reside en el nodo. Entonces, la respuesta exacta depende de si está usando geth
o parity
o algo más. Nunca he visto nada más que eventos en orden en mi experimentación de eventos limitados en los diferentes nodos.
Actualización para geth : en mi experiencia, siempre regresan en orden. No pude encontrar ninguna documentación para confirmarlo, y no tuve la oportunidad de encontrarlo en el código go. No asumiría que siempre es así. Siempre puede agregar una afirmación que arroje o advierta si el número de bloque disminuye en cualquiera de los registros.
Lauri Peltonen