In Web3-APIs konnte ich keine Option zum Angeben eines privaten Schlüssels zum Senden einer Transaktion in doc sehen . Wie wird das denn gemacht? Meines Wissens nach benötigen wir den privaten Schlüssel eines bestimmten Kontos, um die Transaktion zu senden.
web3 sendet Transaktionen mit entsperrten Brieftaschen, was erfordert, dass Sie Ihr Konto mit der Schlüsseldatei und dem Passwort entsperren, bevor Sie eine Transaktion senden. web3 kann dann auf den privaten Schlüssel aus der entsperrten Brieftasche zugreifen und die Transaktion signieren.
Wenn Sie das Entsperren der Brieftasche vermeiden möchten, müssen Sie die Transaktion selbst signieren und eine Rohtransaktion mit eth.sendRawTransaction senden.
Leider unterstützt web3 das Signieren von Transaktionen nicht. Sie können jedoch eine Transaktion mit ethereumjs-tx signieren . Um eine Hex-Zeichenfolge zu erhalten serializedTx
, die die signierte Transaktion enthält, verwenden Sie
const tx = new EthereumTx(txParams);
tx.sign(privateKey);
let serializedTx = "0x" + tx.serialize().toString('hex');
serializedTx
kann mit eth.sendRawTransaction verwendet werden.
Zum Signieren der Transaktionen wird der Private Key privateKey
benötigt. Wenn Sie den privaten Schlüssel nicht haben, können Sie myetherwallet.com verwenden , um ihn aus einer Schlüsseldatei und der Passphrase zu erhalten, oder Sie können den privaten Schlüssel programmgesteuert aus einer Schlüsseldatei und dem Passwort mit abrufen
let privateKey = keythereum.recover(password, keyObject);
von keyethereum . keyObject
ist der Inhalt der Schlüsseldatei, die eine JSON-Zeichenfolge ist.
Das Signieren der Transaktion wird von dem Provider durchgeführt, der auf dem web3-Objekt festgelegt ist.
Wenn der Benutzer beispielsweise über einen Browser mit einer DApp interagiert, ist es wahrscheinlich, dass der Anbieter MetaMask ist und dies den Benutzer behandelt, der die Transaktionen autorisiert.
medwedew1088