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
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
}
v
Um also in ein einzelnes Byte zu passen , chainId
muss Ihr Wert kleiner als 0x6d
(109 dez) sein.
Ropsten hat chainId = 3
, Mainnet hat chainId = 1
.
var privateKey = new Buffer('0xe331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109', 'hex')
..Sie müssen das 0x
Hex-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 privateKey
zum Signieren verwendet wurde
Himanshu Sharma
max taldykin
chainId
kann in genesis.json angegeben werden. ZBnetworkID
Option in Parität: github.com/ethcore/parity/wiki/Chain-specification und--networkid
Befehlszeilenoption in geth.Himanshu Sharma
Himanshu Sharma
max taldykin