概述
本文主要介绍在阿里云的服务器上搭建一条以太坊私有链
为了避免因为环境因素造成的异常,如果是老的机器,所以这里建议重新格式化,选择公共镜像里面的系统版本
系统版本是:公共镜像,Ubuntu,16.04 64位
Geth的版本号是:1.7.3-stable
如果你执行的过程和下面有差异,先确认上面两个版本是否一致
一.阿里云服务器的准备
机器配置:我的机器配置是,CPU 1核,网络1M, 内存2G
镜像选择:公共镜像,Ubuntu,16.04 64位
等待系统重启
内存至少2G,如果不够,可以通过映射虚拟内存来扩充
二.安装ethereum
登录系统后,依次执行
apt-get update有的时候会很慢,耐心等待...
#更新软件包信息
apt-get update
#添加 ppa 到当前的库中并且自动导入公钥
apt-get install software-properties-common
add-apt-repository -y ppa:ethereum/ethereum
add-apt-repository -y ppa:ethereum/ethereum-dev
apt-get update
#安装ethereum
apt-get install ethereum
#安装完成后,查看版本号
geth version
这里大家再次确认下geth version 返回的版本号是否是1.7.3-stable,如果不一致后面的操作可能有不一致的地方
三.启动ethereum
3.1 创始区块信息准备
在工作目录(我的是/root/eth)下新建一个文件test_genesis.json,把下面内容复制进去
{
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x1",
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x20180112",
"gasLimit":"0x0000ffff",
"coinbase": "0x660a107ee034Cb54bb05a22B5ecDdF050C8A2c90",
"alloc": {},
"config": {
"chainId": 20180113,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
3.2 创始区块初始化
执行下面命令,忽略WARN,如果打印Fatal,确认是否复制的时候有特殊字符插入
geth init /root/eth/test_genesis.json
3.3 启动测试链
geth --identity "test etherum" --rpc --rpccorsdomain "*" --datadir "/root/eth/data" --port "30303" --rpcapi "db,eth,net,web3" --networkid 20181013 console --dev
启动之后会打印启动信息,胡月,WARN,然后停留在命令行输入的地方
注意,如果一直在刷屏,显示在连接节点并同步区块,ctrl+c中断,回去确认3.2是否执行成功,出现节点不停在同步区块,是因为测试创始区块创建失败,导致连接到ETH网络上了
这里可以注意下最后一个WARN的信息
WARN [01-13|16:10:50] Block sealing failed err="waiting for transactions"
Geth启动后,自动开启挖矿,但是因为没有交易所以执行失败,这个时候执行miner.start()会一直返回null,这是正常的。
3.4 Geth命令测试
用户命令测试
#返回钱包管理的账户地址列表
#返回示例:["0x3138e3722fb4280cb67f6e858108136bfa1c9160"]
eth.accounts
#创建账户地址,参数为账户锁定密码,在转账前需要先解锁账户
#我们把这个命令运行两次,创建两个地址,加上默认的,一共有了三个账户地址
personal.newAccount('111111')
personal.newAccount('111111')
#为账户设置别名,方便命令输入
user1=eth.accounts[0]
user2=eth.accounts[1]
user3=eth.accounts[2]
#查看地址user1余额,这个地址是测试链默认开通的一个地址,里面初始化有很多币
#我们创建的另外两个地址余额未0
eth.getBalance(user1)
#查看区块高度,现在为0
eth.blockNumber
#转账测试,首先解锁账号user1
#命令运行后要求输入解锁密码,直接回车,默认账号锁定密码为空,返回true成功
personal.unlockAccount(user1)
#从user1向user2转账3个以太币
#命令运行后,提交交易立马回出发挖矿
eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})
#查看区块高度,这时高度为1
eth.blockNumber
挖矿测试
geth启动后,自动启动挖矿,这时运行miner.start(),返回为null
无交易的时候不挖矿,当有交易时自动会触发挖矿流程
#我们可以先停止挖矿
miner.stop()
#提交交易,这时候只提交,查看账户余额,但是未确认
eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})
#启动挖矿,确认交易,再次查看账户余额
miner.start()
#那么挖矿奖励去哪儿了?查看矿工地址
eth.coinbase
#设置矿工地址
miner.setEtherbase(eth.coinbase)