Quiero determinar el número de transacciones de un contrato en un período determinado. Mi pregunta es que en el recibo de la transacción, si queremos decir que el contrato A tiene x número de transacciones, estas serán solo las transacciones enviadas desde este contrato o serán también las que se envían a él, es decir, la suma de los números de transacciones que tienen esta dirección de contrato en los campos de origen y destino del recibo de la transacción.
Si el contrato emite registros para cada transacción recibida, solo necesita buscar los registros emitidos por el contrato.
Puede hacer esto con etherescan: https://etherscan.io/apis#logs
Por ejemplo: https://api.etherscan.io/api?module=logs&action=getLogs &fromBlock=379224 &toBlock=latest &address=0x33990122638b9132ca29c723bdf037f1a891a70c &apikey=YourApiKeyToken
devolverá una lista de todos los registros generados por el contrato (suponga un solo evento por transacción)
Tenga en cuenta que puede decidir a partir de qué intervalo (en bloques) buscar.
Las únicas advertencias posibles son:
Esto depende de qué entienda por "transacción" y qué entienda por "transacción de un contrato".
Para transacción podría haber al menos dos significados:
Los posibles significados de “transacción de un contrato” son:
Debe usar diferentes enfoques para detectar y contar diferentes tipos de transacciones relacionadas con el contrato de diferentes maneras. En algunos casos, la API Web3 será suficiente, pero en otros casos, deberá rastrear las transacciones, todas usan la API etherescan.io.
Si tiene un nodo geth en ejecución; puede usar este script para calcular el número de transacciones de un contrato en un rango de bloque dado.
function countNumberOfContractTxs(contractAddress, blockStart, blockEnd) {
var incominngCount = 0;
var outgoingCount = 0;
contractAddress = contractAddress.toLowerCase()
if(!blockEnd) blockEnd = eth.getBlock('latest').number
for(var blockNum=blockStart; blockNum<blockEnd; blockNum++) {
var txs = eth.getBlock(blockNum).transactions;
if(!txs.length) continue;
for(var j=0; j<txs.length; j++) {
var tx = txs[j]
var txDetail = eth.getTransactionReceipt(tx)
if(txDetail.status == '0x0') continue;
if(txDetail.from.toLowerCase() == contractAddress) outgoingCount++
if(txDetail.to.toLowerCase() == contractAddress) incominngCount++
}
}
console.log(incominngCount, outgoingCount)
}
Simplemente pegue esta función en la consola geth y llámela como una función de contrato normal. El último parámetro es opcional y la secuencia de comandos verifica solo los txs exitosos.countNumberOfContractTxs(<contractAddress>, startBlock, endBlock)
AVATAR
mzaidi
AVATAR
mzaidi
Jaime
AVATAR
mzaidi
mzaidi
Jaime