¿Se garantiza que se mantenga el orden de la transacción cuando se utilizan devoluciones de llamada?

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.

No estoy seguro de entender esto correctamente, pero si activa varias transacciones y espera sus eventos, no hay garantía de qué transacción se procesa primero en una red pública. Los mineros deciden el orden de las transacciones. Pero si no le importa este orden, asumiría que el primer evento que proviene del nodo es del primer tx procesado.

Respuestas (1)

Actualmente, casi toda la lógica de filtrado reside en el nodo. Entonces, la respuesta exacta depende de si está usando getho parityo 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.

Estoy ejecutando el nodo usando geth --rpc