Obtener el historial de transacciones de una cuenta en particular

Quiero obtener la lista de todas las transacciones realizadas por/en una cuenta en mi cadena de bloques privada. Intenté usar la función

getTransactionsByAccount(accountAddress, startBlockNumber, endBlockNumber)

dado en este enlace . El problema con este método es que para las transacciones que incluyen la transferencia (de la cantidad) de una cuenta a otra, da la dirección correcta en el campo "de", pero incorrecta para el campo "a".

Entonces, me gustaría preguntar si hay algún otro método por el cual podamos obtener el historial de transacciones.

Respuestas (2)

contractAddress = "0x00.."
web3.eth.filter({
address: contractAddress
from: 1,
to: 'latest'
}).get(function (err, result) {
// callback code here
})

Puedes leer los documentos aquí

Esto funciona para la dirección del contrato, no funcionará para cuentas de propiedad externa.
No sé qué diferencia hace, pero almacenar la dirección del contrato en una variable y luego pasarla al filtro no funciona, mientras que pasar la dirección del contrato directamente al filtro produce el resultado correcto. Además, 'from' y 'to' deben reemplazarse por 'fromBlock' y 'toBlock'.
¿Puede alguien actualizar esta respuesta para web3.js 1.x? web3.eth.filterya no está disponible y no pude encontrar nada en los documentos para lograr lo que se solicitó originalmente.
Además esto solo funciona si el contrato ha generado un evento.
El enlace al documento no existe. ¿Funciona para el web3 actual?

Sí, el enfoque mencionado anteriormente funciona para direcciones de contrato. Desafortunadamente, no hay ningún método en Web3js que nos ayude a lograr esta tarea. Pero, la forma en que lo hice fue desde el número de bloque 0 hasta el último. Mientras revisaba, obtuve todas las transacciones que ocurrieron en el bloque junto con los detalles de la transacción.

A continuación se muestra el código:

He usado web3.eth.getBlock para obtener todas las transacciones del bloque.

function getAccountTransactions(accAddress, startBlockNumber, endBlockNumber) {
  // You can do a NULL check for the start/end blockNumber

  console.log("Searching for transactions to/from account \"" + accAddress + "\" within blocks "  + startBlockNumber + " and " + endBlockNumber);

  for (var i = startBlockNumber; i <= endBlockNumber; i++) {
    var block = eth.getBlock(i, true);

    if (block != null && block.transactions != null) {
      block.transactions.forEach( function(e) {
        if (accAddress == "*" || accAddress == e.from || accAddress == e.to) {
          console.log("  tx hash          : " + e.hash + "\n"
            + "   nonce           : " + e.nonce + "\n"
            + "   blockHash       : " + e.blockHash + "\n"
            + "   blockNumber     : " + e.blockNumber + "\n"
            + "   transactionIndex: " + e.transactionIndex + "\n"
            + "   from            : " + e.from + "\n" 
            + "   to              : " + e.to + "\n"
            + "   value           : " + e.value + "\n"
            + "   gasPrice        : " + e.gasPrice + "\n"
            + "   gas             : " + e.gas + "\n"
            + "   input           : " + e.input);
        }
      })
    }
  }
}

Ejemplo de detalles de transacción en Ropsten Etherscan

Encuentre transacciones hacia/desde la dirección eth.accounts[0]:

getTransactionsByAccount(eth.accounts[0])
endBlockNumber: 1575620
startBlockNumber: 1575619
Searching for transactions to/from account "0x87bae5d55603cfe2703062cea8bf76263fa0ca95" within blocks 1575619 and 1575620

  tx hash          : 0xd55f196cd4a41f518c84804ac6286972db1d0fa8e51d137e00299fb4906a51ab
   nonce           : 12044
   blockHash       : 0xdac37667bca025e8107cea79b6b9bc5c1d86ddbec5a8b13615a2ce70bec63e60
   blockNumber     : 1575620
   transactionIndex: 0
   from            : 0x87bae5d55603cfe2703062cea8bf76263fa0ca95
   to              : 0x60b634cf459c6e88dfb2a52311199a8473ed85b5
   value           : 0.000909211685644988
   gasPrice        : 20000000000
   gas             : 21000
   input           : 0x