web3.js 准备账号
接下来,我们将创建交易,签署交易,然后广播交易。
app.js
创建一个简单的app.js代码文件,而不是在控制台中执行代码。
在app.js文件中,导入新安装的库:
var Tx = require('ethereumjs-tx').Transaction
建立一个Web3连接:
const Web3 = require('web3') const web3 = new Web3('https://ropsten.infura.io/YOUR_INFURA_API_KEY')
创建账号
注意,我们使用的是Ropsten测试网络,它与我们在前面章节使用的Ethereum主网不同,测试网络使用的是伪以太币,不花钱。
在本例中,我们将伪以太币从一个帐户发送到另一个帐户,因此,需要准备2个帐户和及其私钥。
创建2个账号
可以在node控制台,使用Web3.js创建新账户,如下所示:
Kevin@QIKEGU g:\qikegu\ethereum\web3js > node > web3.eth.accounts.create() Thrown: ReferenceError: web3 is not defined > const Web3 = require('web3') undefined > const web3 = new Web3('https://ropsten.infura.io/v3/YOUR_INFURA_API_KEY') undefined > web3.eth.accounts.create() { address: '0xf4Ab5314ee8d7AA0eB00b366c52cEEccC62d6B4B', privateKey: '0xb75e2bcaec74857cf9bb6636d66a04784d4c0fcfd908f4a2bc213428eba5af0d', signTransaction: [Function: signTransaction], sign: [Function: sign], encrypt: [Function: encrypt] } > web3.eth.accounts.create() { address: '0xff96B8B43ECd6C49805747F94747bFfa3A960b69', privateKey: '0xac0adfdbaeb0770a479e79aac78779d82fdc2f9262e0c8f751ae70fb63ef6196', signTransaction: [Function: signTransaction], sign: [Function: sign], encrypt: [Function: encrypt] } >
获取测试以太币
创建好账号后,可以从下面网址获取伪以太币:
ipfs.io
注意 如果上面地址失效,可以在google/bing中,搜索 “ropsten faucet”,查找能获取测试以太币的地方。
把私钥设为环境变量
把私钥设为环境变量,然后从代码中读取环境变量。这样就可以避免把私钥硬编码到源文件中,私钥是禁止公开的。
在Windows下设置环境变量:
> SET PRIVATE_KEY_1='b75e2bcaec74857cf9bb6636d66a04784d4c0fcfd908f4a2bc213428eba5af0d' > SET PRIVATE_KEY_2='ac0adfdbaeb0770a479e79aac78779d82fdc2f9262e0c8f751ae70fb63ef6196'
在linux下设置环境变量:
$ export PRIVATE_KEY_1='b75e2bcaec74857cf9bb6636d66a04784d4c0fcfd908f4a2bc213428eba5af0d' $ export PRIVATE_KEY_2='ac0adfdbaeb0770a479e79aac78779d82fdc2f9262e0c8f751ae70fb63ef6196'
app.js中声明账号变量,读取私钥
声明2个账号变量,请务必使用你自己的帐户:
const account1 = '0xf4Ab5314ee8d7AA0eB00b366c52cEEccC62d6B4B' const account2 = '0xff96B8B43ECd6C49805747F94747bFfa3A960b69'
现在,在app.js文件中,读取这些私钥环境变量,并将它们存储到变量中:
const privateKey1 = process.env.PRIVATE_KEY_1 const privateKey2 = process.env.PRIVATE_KEY_2
为了使用私钥对交易进行签名,必须使用缓冲区将它们转换成二进制数据字符串,缓冲区是NodeJS中的全局模块。
const privateKey1 = Buffer.from(process.env.PRIVATE_KEY_1) const privateKey1 = Buffer.from(process.env.PRIVATE_KEY_2)
好了,现在我们已经设置好了需要的变量!