私链上用web3js发送签名交易
私链上用web3js发送签名交易
依赖安装
ethereumjs-tx
https://www.npmjs.com/package/ethereumjs-tx
(env3) localhost:web3eth Chaim$ npm install ethereumjs-tx
执行以下代码,可以把交易数据进行签名:
var Tx = require('ethereumjs-tx');
var privateKey = new Buffer('eb4e675d4adee4fa60cf82a681a7d192d7bd3ece7938e7e63ea06a5259eb0d0c', 'hex')
var rawTx = {
nonce: '0x00',
gasPrice: '0x09184e72a000',
gasLimit: '0x2710',
from: '54b865714068f5f03574ace39a1f3279c4e83e2c',
to: '0x469f07278600b1cb031448fd25f187f24a89ecb6',
value: '0x10000',
data: '0x'
}
var tx = new Tx(rawTx);
tx.sign(privateKey);
var serializedTx = tx.serialize();
console.log(serializedTx.toString('hex'));
以上代码需要帐号私钥,怎么读取geth中帐号的私钥传送门
web3js版本
发送交易数据如下:
web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
if (!err)
console.log(hash);
});
但这个出错了
TypeError: web3.eth.sendRawTransaction is not a function
at Object.<anonymous> (/Users/Chaim/Documents/workspace/ethereum/web3eth/transaction.js:29:10)
注意一下web3js有两个版本,而我用的是0.x的函数,web3js0.2 web3js1.0 1.0版本中sendRawTransaction函数改为eth.sendSignedTransaction了。
改为以下代码
web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
console.log(err);
console.log(hash);
})
.on('receipt', console.log);
代码能正常执行了,其实重点的在这个执行后面,nonce会出现很多问题,而我需要尽可能把这些问题找出来,单独再发文说明!
感谢您阅读 @chaimyu 的帖子,期待您能留言交流!