Transaktionssignierung schlägt fehl Ungültiges RLP.","data":"RlpExpectedToBeList"

Ich versuche, eine Transaktion mit ethereumjsund zu signieren und zu pushen Infura. Es scheint zu funktionieren und ich erhalte einen Transaktions-Hash zurück, aber die Transaktion ist auf Etherscan nicht sichtbar, und wenn ich versuche, den Hash durch einen Dienst wie diesen zu schieben, erhalte ich eine Fehlermeldung :

Error! Unable to broadcast Tx : {"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid RLP.","data":"RlpExpectedToBeList"},"id":1}

Dies ist der Code, den ich verwende:

var Web3 = require('web3');
var web3 = new Web3(new 
Web3.providers.HttpProvider('https://ropsten.infura.io/v3/my_api_key'));
var util = require('ethereumjs-util');
var tx = require('ethereumjs-tx');

var rawTx = {
    nonce: web3.toHex(1),
    gasPrice: web3.toHex(20000000000),
    gasLimit: web3.toHex(30000000000),
    to:... 
    value: web3.toHex(1000000),
    data: '0xc0de',
    networkId: 3
};

var privateKey = '0x...';
var p = new Buffer.from(privateKey.substring(2), 'hex');
var transaction = new tx(rawTx);
transaction.sign(p);
console.log("tx hash = " + util.bufferToHex(transaction.hash(true)));

Was vermisse ich?

Antworten (1)

Es ist

let p = new Buffer(privateKey, "hex");

und natürlich nicht vergessen zu serialisieren:

var serializedTx = "0x" + transaction.serialize().toString('hex'); 

und die serialisierte Transaktion ist das, was Sie in web3.eth.sendRawTransaction eingeben.

Danke. Sieht so aus, als würde die Transaktion weitergehen, Ropstenaber sie scheint seit über einer Stunde im Wartestatus zu stecken, und ich kann sie auch nicht in den Adresstransaktionen sehen. https://ropsten.etherscan.io/tx/0xd5b53084af1b76d38848630b52add44e3aaaaa52bfa790285615f909329567ce. Irgendeine Idee warum?
Für diesen speziellen scheint das Gaslimit etwas hoch zu sein: 9484321 sagt mir Etherscan.
Die Transaktion ist also nicht zustande gekommen? Welche Gasgrenze soll ich angeben?
Technisch gesehen wird es nicht abgebaut. Ich sehe, dass Ropsten höhere Gaslimits akzeptiert als Mainnet. So oder so, es ist immer noch etwas über dem Durchschnitt: „(Warnung: Das GAS für diesen Txn überschreitet das Avg GasLimit von 9.470.229 für die letzten 50 Blöcke)“, sagt etherscan. Also nimm 9000000 oder etwas Kleineres, aber groß genug, um auszuführen, was du vorhast ;)
Nun, ich denke, die Notwendigkeit, die Transaktion zu serialisieren, ist das, wonach ich gesucht habe, um den Code zum Laufen zu bringen, also habe ich die Antwort akzeptiert. (Es zeigt, wie klein die Community hier ist, dass ich ein Kopfgeld setzen musste, um das zu bekommen, was im Haupt-Stackoverflow eine einfache, schnelle Antwort wäre.)
Hätte dir auch ohne Kopfgeld geholfen ;) Es liegt eher daran, wie schlecht diese Dinge dokumentiert sind und wie wenige Leute da draußen sind, die mit diesen Dinger herumspielen.