搭建区块链技术开发和运⾏环境(⼀)
最近在研究区块链。打算先搭建⼀个测试环境开始运⾏。这⾥记录整个搭建过程,供后来⼈参考。 整体上,分为三个步骤,安装相关软件,初始化系统,建⽴集,以及最后⼀步,挖矿。 我们采⽤的是以太坊,相对其他区块链,这是⼀个成熟的环境。 虽然近期有硬分⽀的事件,对企业应⽤来说,功能上还算是⽐较完善的。
安装部署
1.安装 Go 环境
如果机器⽆法上外⽹,还得配置⼀下代理。 Ubuntu配置代理的⽅式⽹上很多,这⾥不介绍。
curl -O leapis/golang/go1.5.1.
tar -C /usr/local -xzf go1.5.1.
mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
2.安装 ethereum
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
在执⾏ sudo add-apt-repository -y ppa:ethereum/ethereum的时候碰到这个问题:
root@ubuntu-KVM:~# sudo add-apt-repository -y ppa:ethereum/ethereum
Cannot add PPA: 'ppa:ethereum/ethereum'.
Please check that the PPA name or format is correct.
按照 的意见,修改为:
sudo apt-get install software-properties-common
sudo -E add-apt-repository -y ppa:ethereum/ethereum
sudo -E add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
3.安装 solc 编译器
sudo add-apt-repository ppa:ethereum/ethereum-qt
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install cpp-ethereum
同样的,如果碰到PPA Name错误的警⽰,则执⾏如下操作:
sudo -E add-apt-repository ppa:ethereum/ethereum-qt
sudo -E add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install cpp-ethereum
这样相关软件已经安装完毕。
搭建私链
1.启动geth服务
geth --datadir "/root/chain" console
其中 datadir⽤于指定数据⽬录。这个⽬录不能够预先创建,否则命令会失败。 执⾏结果如下:
2.创建账号
执⾏之后,进⼊geth的交互模式。 接着建⽴⼀个账号,然后退出。 这个账号⽤于执⾏创世操作。 然后exit退出
> wAccount("密码");
"0xea5c99831c2e4a0e094facdbac1befcf6c92e543"
> exit
3.创建创世区块
编译创建创世区块所需要的脚本, 注意alloc下的key需要和上述的账号保持⼀致。
{
"alloc": {
"0xea5c99831c2e4a0e094facdbac1befcf6c92e543": {
"balance": "1000"
}
},
"nonce": "0x0000000000000042",
"difficulty": "0x020000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "CNNMoney Jack Ma interview: Wars start when trade stops, 20160902",
"gasLimit": "0xffffffff"
}
各个参数的含义如下:
创建数据存放地址并初始化创世块
curl是什么命令geth --datadir "/root/chain" init genesis.json
4.启动私链
执⾏如下脚本
geth --identity "phoenix" --rpc --rpccorsdomain "*" --datadir "/root/chain" --port "30303" --rpcapi "db,eth,net,web3" --networkid 98888 console 各参数说明如下:
此外,还可以使⽤如下参数:
启动后界⾯如下,光标停留在最后的命令⾏上,可以执⾏以太坊命令。 可以看到Listening on [::]:30303和Welcome to the Geth JavaScript
console!的提⽰,说明已经启动成功
注意:如果想将Ubuntu作为永久区块链节点使⽤,当使⽤nohup命令时,Geth启动参数console必须去掉,否则Geth会⾃动停⽌。
5.查看节点信息
常⽤命令:
执⾏:
> deInfo
得到当前节点信息如下:
{
enode: "enode://dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e7a6d9605ec6e77164515f6f09d979999ca3ef91eebcd2a6c91eb id: "dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e7a6d9605ec6e77164515f6f09d979999ca3ef91eebcd2a6c91ebdfe167de094 ip: "::",
listenAddr: "[::]:30303",
name: "Geth/v1.5.0-unstable/linux/go1.5.1/phoenix",
ports: {
discovery: 30303,
listener: 30303
},
protocols: {
eth: {
difficulty: 131072,
genesis: "0xaab381212b8108c488c8d21c06042a9081b94bfb87665110520d3c295626e79b",
head: "0xaab381212b8108c488c8d21c06042a9081b94bfb87665110520d3c295626e79b",
network: 98888
}
}
}
注意enode节点,这是当前节点的标识。 后续会⽤到这个值。
6.查看账户信息
在创建创世节点时,我们创建了个默认账户。可以通过如下命令查看账户余额。
> eth.accounts
["0x4b691e86c622127ed8e1d49899ad8c1d19834327"]
> primary=eth.accounts[0]
"0x4b691e86c622127ed8e1d49899ad8c1d19834327"
> balance = web3.Balance(primary), "ether");
20
配置第⼆台私链服务器
第⼆台私链服务器,需要把第⼀台的步骤基本都要重复⼀遍。两台服务器配置⼀样才可以通讯。 需要改变的地⽅是:
1. 第三步创建genesis.json的时候,完全使⽤第⼀台服务器的配置,不要⽤新建的account来创建。
2. 需要将第⼀台服务器添加到静态节点列表中。
7.添加静态节点列表
在{datadir}下添加⽂件 static-nodes.json,内容如下:
[
"enode://dfd047d64a3d8c9d9c2834bc8c3bbf41a79e6797956fa99469b872d97a7978e4e7a6d9605ec6e77164515f6f09d979999ca3ef91eebcd2a6c91ebdfe167de ]
执⾏如下脚本启动节点:
geth --identity "phoenix" --rpc --rpccorsdomain "*" --datadir "/root/chain" --port "30303" --rpcapi "db,
eth,net,web3" --networkid 98888 console
启动成功后,查看当前连接的节点:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论