Signing Raw Transaction AssertionError: Das Feld v muss eine Bytelänge von 1 haben

Ich habe jede im Netz vorhandene Option befolgt, um Raw-Transaktionen durchzuführen, denen ich gefolgt bin

ethereumjs-tx

let resData = {};
var Tx = require('ethereumjs-tx')
var privateKey = new Buffer('0xe331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')
var gasPrice = privateWeb3.eth.gasPrice;
var gasPriceHex = privateWeb3.toHex(gasPrice);
var nonce = privateWeb3.eth.getTransactionCount(req.body.fromAddress);
var nonceHex = privateWeb3.toHex(nonce);
var rawTx = {
    nonce: nonceHex,
    gasPrice: gasPriceHex,
    gasLimit: '0x2710000000',
    to: req.body.toAddress,
    from: req.body.fromAddress,
    data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057',
    chainId: req.body.chain
}

var tx = new Tx(rawTx)
console.log(tx.v);
tx.sign(privateKey)

var serializedTx = tx.serialize()
console.log(serializedTx.toString('hex'))

privateWeb3.eth.sendRawTransaction(serializedTx.toString('hex'), function(err, hash) {
    //  if (!err)
        console.log("hiii", err, hash); // "0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385"
});

Dieser Ansatz gibt mir einen Fehlertx.sign(privateKey)

AssertionError: Das Feld v muss bei Transaction.setter [as v] (node_modules/ethereumjs-util/index.js:609:9) eine Bytelänge von 1 haben

Antworten (2)

Dies kann durch unerwartet große verursacht werden chainId. Es wird zum Rechnen verwendet tx.v.

Siehe EIP155 :

v = CHAIN_ID * 2 + 35 oder v = CHAIN_ID * 2 + 36

Und ethereumjs-tx-Quelle :

// sig.v = 28

if (this._chainId > 0) {
  sig.v += this._chainId * 2 + 8
}

vUm also in ein einzelnes Byte zu passen , chainIdmuss Ihr Wert kleiner als 0x6d(109 dez) sein.

Ropsten hat chainId = 3, Mainnet hat chainId = 1.

Ich habe ChainId 1300 verwendet, da 1300 meine Netzwerk-ID für die Ethereum-Blockchain im privaten Netzwerk ist. @max Wie kann ich eine ChainId für ein privates Netz erhalten?
chainIdkann in genesis.json angegeben werden. ZB networkIDOption in Parität: github.com/ethcore/parity/wiki/Chain-specification und --networkidBefehlszeilenoption in geth.
Ich denke @max du hast recht. Lass es mich versuchen
es sagt Error: Invalid sender at Object.InvalidResponse error . Können Sie etwas zu diesem Fehler sagen?
Es ist schwer zu sagen. Kannst du bitte dein komplettes Setup zeigen? Vielleicht lohnt es sich, eine neue Frage mit Ihrer privaten Netzkonfiguration und minimalem reproduzierbaren Code zu stellen.

var privateKey = new Buffer('0xe331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')

..Sie müssen das 0xHex-Präfix entfernen:
new Buffer('e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')

ps) kann man auch loswerden rawTx.from.. es hat keine bedeutung und wird ignoriert. Die Rohtransaktion wird "von" der Adresse gesendet, die der Adresse entspricht, die privateKeyzum Signieren verwendet wurde