Estoy tratando de obtener todas las transacciones de un contrato, pero en todos los casos solo obtuve []
o undefined
.
Estoy siguiendo estas publicaciones:
Y también leo otras publicaciones, pero no puedo resolver mi problema.
Intento usar esto:
var filter=web3.eth.filter({fromBlock: 866705, toBlock: 909023, address: contractAddress});
filter.get(function(error, log) {
console.log(JSON.stringify(log));
});
filter.stopWatching();
Con diferentes valores de fromblock, to block y las demás opciones ('latest',fromblock: 0 , ...). Pero no obtengo ningún resultado.
Estoy tratando de hacer esto:
var filter = web3.eth.filter({fromBlock:9000, toBlock: 'latest', address: contractAddress});
filter.get(function(error, result) {
if(!error){
var info = web3.eth.getBlock(result , function(error, result){
if(!error){
var trans = web3.eth.getTransaction(result.transactions[1], function(error,result){
if(!error){
var str = web3.toAscii(result.input,);
console.log(str);
}else{
console.log(error);
}
});
}else{
console.log(error);
}
});
}else{
console.log(error);
}
})
(Si olvido alguna ficha lo siento)
Todo esto solo para obtener los datos de una transacción como "desde", "hasta" y "entrada". ¿Dónde está el problema?
Más información:
web3.eth.getBlock
con un número de bloque correcto puedo obtener todos los datos, el problema es el filtro y cómo lo uso.Otra forma (quizás mucho más simple) de obtener una lista de transacciones en una cuenta es usar una API de un extractor de bloques como http://etherscan.io . El problema con esto es que es totalmente centralized
.
Una forma totalmente descentralizada es ir contra el nodo (como lo está haciendo). El problema aquí es que, aunque está descentralizado, es lento. Especialmente si su contrato inteligente tiene un historial de transacciones muy largo.
Un problema aún más profundo de ir en contra del nodo es que simplemente obtener las transacciones no es suficiente. También deberá obtener los recibos de la transacción. Los necesita para determinar si las transacciones se completaron con un error o no.
Peor aún que eso son las llamadas de mensajes entrantes (lo que solía llamarse transacciones internas). Estas son "transacciones" iniciadas por un contrato inteligente externo directamente en su dirección. Estas "transacciones" no aparecen directamente en la cadena de bloques, sino que están enterradas en un rastro interno de la transacción inicial. Si solo está mirando su dirección, estos se perderán.
Las matrices se indexan a partir de '0'. Estás indexando desde '1'. Prueba transacciones[0].
Rob Hitchens
filter.stopWatching
se ejecuta antes de que la devolución de llamada tenga la oportunidad de funcionar. La forma en que está diseñado sugiere la expectativa de que esos comandos se ejecutarán en orden, pero no es el caso con JavaScript. Consideraría comentarfilter.stopWatching
y comenzar desde el bloque 0, luego aumentar la complejidad después de ver que funciona. Espero eso ayude.Gawey