主页 > 下载imtoken钱包app中国版 > 以太坊私链DApp开发环境搭建(二)
以太坊私链DApp开发环境搭建(二)
3. 运行私有链节点 3.1 创世块配置
创建节点目录node1,并在其中创建私有链的创世块配置文件:
~$ mkdir node1
~$ cd node1
~/node1$ touch private.json
然后编辑内容如下:
{
"config": {
"chainId": 7878,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "200",
"gasLimit": "2100000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
3.2 初始化私有链节点
执行geth的init命令初始化私有链节点:
~/node1$ geth --datadir ./data init private.json
这将在当前目录下创建一个数据目录,用于存储区块数据和账户信息:
~/node1$ ls
data private.json
上面的命令可以写成一个脚本init.sh,这样可以避免每次输入太多记不住的东西:
~/node1$ touch init.sh
~node1$ chmod +x init.sh
编辑后的内容如下:
#!/bin/bash
geth --datadir ./data init private.json
在部署下一个节点时,可以直接执行这个脚本进行初始化。 例如,在另一台机器上:
~/node1$ ./init.sh
3.3 启动私链节点
从指定的私链数据目录启动,设置不同的网络号启动节点:
~/node1$ geth --rpc --datadir ./data --networkid 7878 console
此外,您可以使用脚本 console.sh 来简化启动节点时的输入:
~/node1$ touch console.sh
~/node1$ chmod +x console.sh
编辑后的内容如下:
#!/bin/bash
geth --rpc \
--rpcaddr 0.0.0.0 \
--rpccorsdomain "*" \
--datadir ./data \
--networkid 7878 \
console
~/node1$ ./console.sh
3.4 账户管理 3.4.1 查看账户列表
在geth控制台,使用eth对象的accounts属性查看当前账户列表:
> eth.accounts
[]
由于我们还没有创建帐户,因此列表仍然是空的。
3.4.2 创建新账户
在 geth 控制台中,使用个人对象的 newAccount() 方法使用您选择的密码创建一个新帐户:
> personal.newAccount('78787878')
0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49
输出的是新创建的账户地址(公钥),你的输出不会和上面的例子一样。 geth 将被保存到数据目录中的密钥库文件中。 自己记住密码,稍后您将需要它。
3.4.3 查询账户余额
在geth控制台使用personal对象的getBalance()方法获取指定账户的余额,参数为账户地址:
> eth.getBalance(eth.accounts[0])
0
> eth.getBalance('0xd8bcf1324d566cbec5d3b67e6e14485b06a41d49')
0
新创建的账户余额为 0。
3.4.4 挖矿
没有钱的账户什么也做不了,需要挖矿赚点钱。
在geth控制台执行miner对象的start()方法开始挖矿:
> miner.start(1)
几分钟后,查看账户余额:
> eth.getBalance(eth.accounts[0])
2.695e+21
钱不少,2695个ETH以太坊是私有链,目前市值近500万元,哈。
执行miner对象的stop()方法停止挖矿:
> miner.stop()
3.4.5 解锁账户
部署合约需要解锁帐户。 在geth控制台,使用personal对象的unlockAccount()方法解锁指定账号。 参数为账户地址和账户密码(创建账户时指定的密码):
> eth.unlockAccount(eth.accounts[0],'78787878')
true
4.1 创建一个新的DApp项目
执行以下命令创建项目目录并进入该目录:
~$ mkdir demo
~$ cd demo
然后用webpack模板初始化项目骨架结构:
~/demo$ truffle unbox webpack
Downloading…
Unpacking…
Setting up…
Unbox successful. Sweet!
4.2 安装项目依赖的npm包
执行以下命令安装nmp包:
~/demo$ npm install
4.3 修改truffle配置
在truffle.js中修改端口为8545,因为geth默认监听8545端口:
module.exports = {
networks:{
development: {
…
port: 8545
…
}
}
}
4.4 启动节点
在另一个终端中,执行以下命令启动节点软件以部署合约并执行交易:
~$ cd node1
~/node1$ ./console.sh
>
> personal.unlockAcount(eth.accounts[0],'78787878')
true
4.5 编译合约
执行以下命令编译项目合约:
~/demo$ truffle compile
4.6 部署合约
执行以下命令部署合约:
~/demo$ truffle migrate
如果之前忘记在geth控制台解锁账号,会看到如下错误,按照之前的说明解锁即可:
Error: authentication needed: password or unlock
如果帐户已正确解锁,您将看到部署过程停止在以下状态:
Replacing Migrations…
… 0x3088762a5bc9…
这是因为truffle在等待部署交易提交,但是我们还没有开始在私有链上挖矿。
现在切换回 geth 终端窗口并检查交易池的状态:
> txpool.status
{
pending:1,
queued:0
}
> miner.start(1)
稍等片刻,然后查看交易池的状态:
> txpool.status
{
pending:0,
queued:0
}
交易已成功提交。 我们可以停止挖矿,因为它太占用 CPU:
> miner.stop()
现在切换回truffle终端以太坊是私有链,部署过程正确执行。
4.7 启动DApp
执行以下命令启动 DApp:
~/demo$ npm run dev
最后在浏览器中访问:8080。
如果你想从其他机器访问你的 DApp 应用程序,修改 package.json:
{
scripts:{
"dev": "webpack-dev-server –-host 0.0.0.0"
}
}
推荐一个以太坊DApp教程:
最后在浏览器中访问:8080。
如果你想从其他机器访问你的 DApp 应用程序,修改 package.json:
{
scripts:{
"dev": "webpack-dev-server –-host 0.0.0.0"
}
}