Private Kette: Die "Daten" aus einem Konto extrahieren?

Ich habe eine Transaktion zwischen zwei Konten initiiert und abgebaut. Ich habe auch ein Datenfeld in diese Transaktion aufgenommen. Dies sind nur zufällige Hex-Daten. Hier ist der Befehl:

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

Jetzt kann ich aus dem Transaktionshash diese Daten abrufen (sie befinden sich im Eingabefeld):

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
}

Ich möchte diese Daten jedoch mithilfe der Empfängerkontoadresse abrufen

0xe1e09a6f9504d42e2e63e1b21447f4410159cf24

Wir können den Saldo dieses Kontos mit eth.getBalance(account_address) abrufen . Zusammen mit dem Ether sende ich auch die Daten an dieses Konto (Funktioniert das nicht so?). Gibt es also eine ähnliche eth.getData/eth.getInput- Funktion, um die von einem Konto empfangenen Daten zu finden?
Wo werden diese Daten eigentlich in meiner privaten Blockchain gespeichert?

Antworten (1)

Die von Ihnen gesendeten Daten sind Teil der Transaktion, werden jedoch nicht dem Konto „hinzugefügt“. Es gibt Speicher, der mit Konten verknüpft ist (auf die über zugegriffen wird eth.getStorageAt(address,location)), aber er ist leer, es sei denn, ein Vertrag speichert dort Daten.

Da die Daten nur mit der Transaktion und nicht mit dem Konto verknüpft sind, ist der beste Weg, darauf zuzugreifen, die Verwendung von Filtern

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)

Alternativ könnten Sie einen Vertrag erstellen, der einfach alle gesendeten Daten aufzeichnet:

contract Store {

    bytes[] public data;

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

Dann einfach die Daten mit holenstore.data(index);

Diese Zeile "var filter = eth.filter({fromBlock:0,toBlock:"latest", address:eth.accounts[1]);" vielleicht brauchen Sie ein "}" nein?