Cadena privada: ¿Extracción de los "datos" de una cuenta?

He iniciado y extraído una transacción entre dos cuentas. También incluí un campo de datos en esta transacción. Estos son solo datos hexadecimales aleatorios. Aquí está el comando:

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether"),data:"4e4f"})

Ahora, desde el hash de la transacción, puedo obtener estos datos (está en el campo de entrada):

eth.getTransaction("<transaction hash>")
{
  blockHash: "0xfa62730b0f9e310cd07d615b78857e338e845b9098c26f861e2713c5f690497d",
  blockNumber: 15,
  from: "0x37e5a459dbd48d4d9874e13cc334dab30373cece",
  gas: 90000,
  gasPrice: 20000000000,
  hash: "0x2beef248d7d690d95cd1da22c8bf12937d323b197430e5a384cf4259db290bef",
  input: "0x4e4f",
  nonce: 2,
  to: "0xe1e09a6f9504d42e2e63e1b21447f4410159cf24",
  transactionIndex: 0,
  value: 1000000000000000000
}

Pero quiero recuperar estos datos usando la dirección de la cuenta del destinatario .

0xe1e09a6f9504d42e2e63e1b21447f4410159cf24

Podemos obtener el saldo de esta cuenta usando eth.getBalance(account_address) . Junto con el éter, también envío los datos a esta cuenta (¿no es así como funciona?). Entonces, ¿hay una función eth.getData/eth.getInput similar a esta para encontrar los datos recibidos por una cuenta?
¿Dónde se almacenan realmente estos datos en mi cadena de bloques privada?

Respuestas (1)

Los datos que está enviando son parte de la transacción, pero no se "agregan" a la cuenta. Hay almacenamiento asociado con las cuentas (al que se accede a través de eth.getStorageAt(address,location)), pero estará vacío a menos que un contrato almacene datos allí.

Dado que los datos están asociados solo con la transacción, no con la cuenta, la mejor manera de acceder a ellos es usar filtros.

var filter = eth.filter({fromBlock:0,toBlock:"latest", address:eth.accounts[1]});
var data = [];
filter.get(function(error,result){
    data.append(eth.getTransaction(result.transactionHash).data);
});

console.log(data)

Alternativamente, puede crear un contrato que simplemente registre todos los datos que se le envían:

contract Store {

    bytes[] public data;

    function(){
        data.push(msg.data);
    }
}

Luego solo busque los datos constore.data(index);

Esta línea "var filter = eth.filter({fromBlock:0,toBlock:"latest", dirección:eth.accounts[1]);" tal vez necesite un "}" no?