私链上用web3js发送签名交易

in #ethereum7 years ago (edited)

私链上用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 的帖子,期待您能留言交流!

Coin Marketplace

STEEM 0.28
TRX 0.21
JST 0.039
BTC 96371.79
ETH 3682.82
SBD 3.84