¿Podré obtener eventos de contratos pasados ​​a través de rpc si uso geth --fast?

O en otras palabras, ¿ geth --fastdescargará los registros de eventos?

Respuestas (1)

Sí. Pero no obtendrá debug.traceTransaction(...)la parte de la cadena de bloques que se sincroniza rápidamente.

Aquí está el tamaño de la cadena de datos de mi cadena de bloques sincronizada rápidamente:

Iota:Ethereum bok$ du -hs chaindata/
 16G    chaindata/

Y aquí está el tamaño de la cadena de datos de mi cadena de bloques no sincronizada rápidamente:

bok@Rasterbator:~/.ethereum$ du -hs chaindata/
79G     chaindata/

Verificando que puedo obtener los eventos de la cadena de sincronización rápida al recuperar un evento de creación de token de The DAO temprano :

var theDAOABIFragment = [{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"CreatedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"}];
var theDAOAddress = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413";
var theDAOStartingBlock = 1428757;
var theDAO = web3.eth.contract(theDAOABIFragment).at(theDAOAddress);
var theDAOCreatedTokenEvent = theDAO.CreatedToken({}, {fromBlock: theDAOStartingBlock, toBlock: theDAOStartingBlock + 2000});
console.log("address\tamount\tto\tblockHash\tblockNumber\tevent\tlogIndex\ttransactionHash\ttransactionIndex");
theDAOCreatedTokenEvent.watch(function(error, result){
  console.log(result.address + "\t" + result.args.amount / 1e16 + "\t" + result.args.to + "\t" +
    result.blockHash + "\t" + result.blockNumber + "\t" + result.event + "\t" + result.logIndex + "\t" +
    result.transactionHash + "\t" + result.transactionIndex);

});

0xbb9bc244d798123fde783fcc1c72d3bb8c189413  3   0xb504e60998c6f354a0794abd91d85e8bc8436211  0x031d5bac6154ca7616ac62e966da2b50a0aaa1b3bc24958ed9cb52d8c8fc1e2f  1429038 CreatedToken    3 0xc96b0f95a1e7e8c07cd488a05f20f9e8d4003fe8eea0ec7f7f4bf199af3198e1    9
0xbb9bc244d798123fde783fcc1c72d3bb8c189413  50  0x53024f875bc85709af41d1c65c01fb4cc92d5c1c  0x48cf967fc94c2f808d82906c1a56e3e09abc99bb8279266fbace13963dc30a1f  1429053 CreatedToken    0 0x1e9ec3974b89653961cbd996d4f6cfc2845db977a3385761b99ed459c2464740    1
0xbb9bc244d798123fde783fcc1c72d3bb8c189413  50  0x2680a6fe5957d177a9279450d2c040818a1949a8  0x40d4235ceb2da6c0288016596d7b55223afd4efce70ba3369e915c0d8a5aa0b1  1429085 CreatedToken     0 0xcea9c261931268d55e695449794bc73a1d614b069051cdd437c1db3d2b31ae0a   0
...

Pero los debug.traceTransaction(...)fallos:

> debug.traceTransaction("0xc96b0f95a1e7e8c07cd488a05f20f9e8d4003fe8eea0ec7f7f4bf199af3198e1")
Missing trie node 07e43e11d98fc497ae7b888933c409580e593ecbeeed34865f65a4c2c9f4cd98
    at web3.js:3119:20
    at web3.js:6023:15
    at web3.js:4995:36
    at <anonymous>:1:1
¡Gracias! Pero, ¿cómo se relacionan los eventos y debug.traceTransaction()? ¿Cuáles son las consecuencias para mí de que debug.traceTransaction() no funcione si solo quiero obtener eventos?
Agregué la debug.traceTransaction(...)información solo para mostrar lo que faltará en sus datos cuando ejecute una sincronización rápida. Y también para demostrar que los eventos se pueden extraer mientras debug.traceTransaction(...)fallarán para el mismo evento, cuando los datos se sincronizan rápidamente.
Los eventos que ocurrieron antes de --fast sync requerirán que el nodo vuelva a ejecutar el bloque en cuestión. Por ejemplo, si ocurrió un evento en el bloque 100 y empiezo la sincronización rápida en el bloque 200, el nodo sabrá que el evento ocurrió en el bloque 100 pero no podrá acceder a los registros hasta que ejecute el bloque 100. Si tiene 50 eventos en 50 bloques antes de una sincronización rápida que debe verificar, el nodo debe ejecutar 50 bloques.
Hola, tengo un objetivo similar: ¿puede aconsejarme cómo recuperar todos los eventos de transferencia en un bloque determinado usando json rpc? Me imagino que tengo que usar eth_getLogs pero no sé cuáles serían los parámetros. Gracias