Ein bisschen verwirrt. Wie sende ich Ether mit Web3j an eine Adresse (Android)

BEARBEITEN: Ich verwende die Android-Plattform

Ich glaube, ich bin konzeptionell etwas verwirrt. Ich würde es begrüßen, wenn mir jemand diese wenigen Fragen beantworten könnte, da ich versuche, eine App zu erstellen, damit ich genau weiß, was hier vor sich geht. Ich versuche, die Dokumentation gleichzeitig zu lesen und zu entschlüsseln.

-Ich habe meine Adresse und meinen privaten Schlüssel mit der Klasse web3j ECKeyPair generiert

Jetzt muss ich in der Lage sein, diesen Ether mit diesen Daten an eine Adresse zu senden, und ich bin mir nicht sicher, wie ich das machen soll

  • Ich denke, ich soll etwas verwenden, das als Rawtransaction bezeichnet wird, aber auch hier ist mein Verständnis verschwommen

  • Ich würde auch gerne meinen privaten Schlüssel verschlüsseln können, aber ich habe gesehen, dass er die Daten in eine Keystore-Datei verschlüsselt. Gibt es eine Möglichkeit, die unnötigen Daten hier zu löschen, da ich nur versuche, den privaten Schlüssel mit einem Passwort zu verschlüsseln.

Wenn ein sachkundigeres Mitglied als ich die Schritte zum "Unterzeichnen einer Transaktion" klären könnte, damit Ether von einer Adresse zur anderen gesendet werden können, wären Sie eine große Hilfe für mein Designprojekt.

Ich verstehe auch nicht, wie Transaktionen offline signiert werden können, da ich dachte, dass der Punkt beim Signieren einer Transaktion darin besteht, dass sie vom Netzwerk verifiziert werden kann

Danke schön.

Antworten (2)

Sie müssen im Wesentlichen drei Schritte ausführen:

  1. Transaktionsobjekt erstellen
  2. Signieren Sie es mit dem privaten Schlüssel
  3. Unterzeichnete Transaktion veröffentlichen

Für Schritt 1 gehst du so vor:

var from = "0x..."; // The address you are sending ether from
var tx = {
  nonce: web3.eth.getTransactionCount (from),
  chainId: 1, // 1 means Mainnet, more chain IDs here: https://chainid.network/
  to: "0x...", // The address you are sending ether to
  data: "",
  value: value, // The amount of ether to send (in Wei)
  gasPrice: web3.eth.getGasPrice(),
  gas: 21000 // Enough for simple transfer
};

Für Schritt 2 tun Sie:

var signedTx = web3.eth.accounts.signTransaction (tx, privateKey);

Für Schritt 3 tun Sie:

web3.eth.sendSignedTransaction(signedTx);

Weitere Informationen finden Sie in der Web3js-Dokumentation .

Entschuldigung, meine Antwort bezieht sich auf Web3js, nicht auf Web3j. Aber für Web3j sind die Schritte im Grunde gleich:

  1. Transaktionsobjekt vorbereiten ( RawTransaction )
  2. Unterschreiben ( TransactionEncoder )
  3. Veröffentlichen ( ethSendRawTransaction )

Einzelheiten finden Sie in der offiziellen Dokumentation .

Wenn ich Ihre Frage richtig verstehe, sollten Sie in der Lage sein, sie einfach zu verwenden web3.eth.sendTransaction, indem Sie ein Transaktionsobjekt übergeben.

var transactionObject = {
    from: web3.defaultAccount,
    to: addressToSendTo,
    value: web3.toWei(1.0, "ether"),
    gas: gasAmountInWei
};

web3.eth.sendTransaction(transactionObject, function(err, data) {
    // if no err, transaction was success
});

Für den Gaswert können Sie das benötigte Gas so abschätzen

// note that `transactionObject` is the same as above but without the gas value
web3.eth.estimateGas(transactionObject, function(err, estimate) {
    transactionObject.gas = estimate;
});

Wenn Sie Probleme damit haben, dass das Gas nicht ausreicht, experimentieren Sie mit dem Hinzufügen von mehr. Ich multipliziere im Allgemeinen mit 2, da nur das benötigt wird und nicht die gesamte Menge (da es sich nur um eine Schätzung handeln soll).

Ich arbeite an der Android-Plattform und Java. Ich entschuldige mich dafür, dass ich das oben nicht erwähnt habe