Ausführen einer privaten PoA-Kette mit Parität unter Verwendung des neuesten Paritätsclients + nodejs + web3.js 1.0
Wenn ich versuche, eine Transaktion zu signieren und sie dann gemäß der web3.js 1.0-Dokumentation ( sendTransaction und sendSignedTransaction ) zu senden, erhalte ich die folgende Fehlermeldung:
Unbehandelter Ablehnungsfehler: Zurückgegebener Fehler: Ungültiges RLP. bei Object.ErrorResponse (/home/simoh/node_modules/web3-core-helpers/src/errors.js:29:16) bei /home/simoh/node_modules/web3-core-requestmanager/src/index.js:137: 36 unter XMLHttpRequest.request.onreadystatechange (/home/simoh/node_modules/web3-providers-http/src/index.js:64:13) unter XMLHttpRequestEventTarget.dispatchEvent (/home/simoh/node_modules/xhr2/lib/xhr2.js :64:18) bei XMLHttpRequest._setReadyState (/home/simoh/node_modules/xhr2/lib/xhr2.js:354:12) bei XMLHttpRequest._onHttpResponseEnd (/home/simoh/node_modules/xhr2/lib/xhr2.js:509 :12) bei IncomingMessage. (/home/simoh/node_modules/xhr2/lib/xhr2.js:469:24) bei emitNone (events.js:110:20) bei IncomingMessage.emit (events.js:207:7) bei endReadableNT (_stream_readable.js :1059:12) bei _combinedTickCallback (internal/process/next_tick.js:138:11) bei process.
Das ist mein Code:
web3.eth.accounts.signTransaction({
nonce: 11377,
gasPrice: '0x00',
gasLimit: '0x2DC6C0',
to: '0x00d4dc44dfbbcb7d8369ddcd261bdaad1872d652',
from: account.address,
value: '0x16345785D8A0000',
data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057'
}, account.privateKey)
.then(function(result) {
console.log("Results: ", result)
web3.eth.sendSignedTransaction(result.rawTransaction)
.on('receipt', console.log);
})
Das Konto ist wie folgt definiert:
var account = web3.eth.accounts.privateKeyToAccount(privateKey);
Ich kann nicht herausfinden, was ich falsch mache.
Außerdem ist mir nicht ganz klar, warum als Beispiel für sendSignedTransaction eine Methode gezeigt wird, die 'ethereumjs-tx' verwendet, die sich von der in der Dokumentation vorgeschlagenen unterscheidet. Mit dieser zweiten Methode mit 'ethereumjs-tx' wird dieselbe Transaktion wie der obige Code erfolgreich signiert und gesendet.
var Tx = require('ethereumjs-tx');
var privateKey = new Buffer('private key', 'hex');
var rawTx = {
nonce: 11376,
gasPrice: '0x00',
gasLimit: '0x2DC6C0',
to: '0x00d4dc44dfbbcb7d8369ddcd261bdaad1872d652',
from: '0x0013a861865d784d97c57e70814b13ba94713d4e',
value: '0x16345785D8A0000',
data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057'
}
var tx = new Tx(rawTx);
tx.sign(privateKey);
var myString = "0x"
var serializedTx = (tx.serialize()).toString('hex');
myString += serializedTx
console.log(myString);
web3.eth.sendSignedTransaction(myString)
.on('receipt', console.log);
Auch wenn ich web3.eth.accounts.recoverTransaction(result.rawTransaction)
es benutze, zeigt es einen anderen öffentlichen Schlüssel als erwartet ...
let send_add = send_public_address;
let recv_add = rec_public_address;
let transfer_amount = web3.toWei(data.amount, 'ether');
let nonce = web3.toHex(web3.eth.getTransactionCount(send_public_address));
var private_key = privatekey_sender.slice(2);
let gas = web3.toHex(data.gas_limit);
let gasPrice = web3.toHex(data.gas_price);
var rawTx = {
from: send_add,
nonce: nonce,
gasLimit: gas,
gasPrice: gasPrice,
value: web3.toHex(transfer_amount),
to: recv_add,
};
var transaction = new tx(rawTx);
var txData = new Buffer(private_key, 'hex');
transaction.sign(txData);
var serializedTx = transaction.serialize().toString('hex');
web3.eth.sendRawTransaction('0x' + serializedTx, function (err, txHash) {
if (txHash) {
next(null, txHash);
}
else if (err && err.message) {
next(err.message, null);
}
else {
next('Unable to sendRawTransaction', null);
}
});
Naddison