nodejs转账eth

2021-10-8

nodejs转账ETH

继上次的web3的学习,咱们这次学习nodejs来转账eth交易。

安装依赖

最基本的eth转账,只需要

yarn add web3 ethereumjs-tx --dev

方便和大家同步,我这里报一下版本号。

"devDependencies": {
  "web3": "^1.6.0"
  "ethereumjs-tx": "^2.1.2"
}

初始化web3

和之前一样,申请infura的测试以太坊url。和前面的页面使用web3差不多,这里不多说了,直接看代码。

const Web3 = require('web3')
// const EthereumTx = require('ethereumjs-tx').Transaction

const rpcUrl = "https://goerli.infura.io/v3/你申请的infura地址"

const web3Provider = new Web3.providers.HttpProvider(rpcUrl)

const web3 = new Web3(web3Provider)

转账ETH

const EthereumTx = require('ethereumjs-tx').Transaction

let currentAddress = '0x3EcAa09DD6B8828607bba4B1d7055Ea1143f8B94'	// 当前用的eth地址

const start = async () => {
  // 可以试试查询余额
  const balance = await web3.eth.getBalance(currentAddress)
  console.log({balance})
  
  const toAddress = '0xe208D2fB37df02061B78848B83F02b4AD33540e1'
  const privateKey = Buffer.from('你的钱包私钥', 'hex')
  // 转账数量 单位 Wei,web3.utils.toWei 可将 1 个 Ether 转换为 Wei
  const amount = web3.utils.toHex(web3.utils.toWei('1', 'ether'))
  const count = await web3.eth.getTransactionCount(currentAddress)
  
  const txParams = {
    from: currentAddress,
    to: toAddress,
    gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), // 10 Gwei
    gasLimit: web3.utils.toHex(21000),
    value: amount,
    nonce: web3.utils.toHex(count)
  }
  
  const tx = new EthereumTx(txParams, {
    chain: 'goerli'	// ethereumjs-tx这版本的要写好chain,不然会报 invalid sender 的错误
  })
  
  tx.sign(privateKey)	// 签名
  
  // 对已签名的进行交易
  web3.eth.sendSignedTransaction('0x' + tx.serialize().toString('hex'))
        .on('transactionHash', console.log)
        .catch(err => console.log({err}))
}
start()

以上ethereumjs-tx的签名方案,使用的是ethereumjs-common,默认有:

  • mainnet
  • ropsten
  • rinkeby
  • kovan
  • goerli (final configuration since v1.1.0)
    这些链的话可以直接签。其他链的话需要自己requireethereumjs-common
const  Common = require('ethereumjs-common').default
const blockchain = Common.forCustomChain(
    'mainnet', {
        name: 'Fantom Opera',
        networkId: 250,
        chainId: 250
    },
    'petersburg'
)

const tx = new EthereumTx(txParams, {
    common: blockchain
})

tx.sign(privateKey)

执行完,如果成功的话的,监听事件transactionHash会返回一段hash。去链上查这段交易是否成功。

遇到问题了? 可以直接联系我

评论区