10分钟完成阿里云环境搭建以太坊私有链

概述

本文主要介绍在阿里云的服务器上搭建一条以太坊私有链
为了避免因为环境因素造成的异常,如果是老的机器,所以这里建议重新格式化,选择公共镜像里面的系统版本

系统版本是:公共镜像,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)
原文地址:https://www.cnblogs.com/twodog/p/12137703.html