一 环境以及软件版本:
1)VMware Workstation 12 Pro
2)Ubuntu 16.04 desktop
3)以太坊geth go语言客户端(Version: 1.8.2-unstable)
4)go语言版本 1.9.4(geth 需要1.7或以上的版本)
二 以太坊geth客户端安装:
1)安装git apt-get install git
2)安装go环境:
1.解压tar -zxf go1.9.4.linux-amd64.tar.gz -C /usr/local
2./etc/profile文件中添加环境变量 export PATH=$PATH:/usr/local/go/bin
3.重新加载一下 source /etc/profile
2)git clone https://github.com/ethereum/go-ethereum
3)cd go-ethereum && make geth //执行安装
三 开始创建以太坊私有链
1)首先创建一个私有链目录以及配置文件:
genesis.json:
{ "config":
{ "chainId": 10, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 },
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc" : {},
}
参数说明:
参数名称 参数描述
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
nonce nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度alloc用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase 矿工的账号,随便填
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash值,因为是创世块,所以这个值是0
extraData 附加信息,随便填,可以填你的个性信息
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。
2)geth init ./genesis.json --datadir "./chain" //创世区块初始化, chain目录是保存区块链网络数据存放的位置
当执行完初始化后,在当前的chain目录下回生成两个目录:
geth中保存的是区块链的相关数据
keystore中保存的是该链条中的用户信息
3)启用私有链:/eth/go-ethereum/build/bin/geth --datadir "./chain" --nodiscover console 2 >> eth_output.log
参数说明: datadir 区块数据存放位置 nodiscover 私有链地址不会被网络上看到 console启用命令行模式
4)查看账户:(默认是没有账户,图片里是后建的)
5)创建账户:(图片括号中的test是密码,这个方法返回的结果是账户地址)
6)查看矿工账户以及设置矿工账号(如没有设置矿工账号,系统默认设置eth.accounts中的第一个账户)
7)采矿以及查看区块数和账户中币的数量
8)交易:eth.sendTransaction({from:eth.coinbase, to:eth.accounts[1], value:web3.toWei(3,"ether")});
从矿工账号转账3个以太币到第二个账户,返回结果是账户被锁,需要解锁。
ps:以太坊的一个保护机制,每隔一段时间账户就会自动锁定,这个时候任何以太币在账户之间的转换都会被拒绝,除非把该账户解锁.
账户解锁:
personal.unlockAccount 解锁转账的账号
重新使用转账命令,转账需要矿工挖矿才能转账成功,可以通过txpool.status来验证,如看到pending:1,pending表示已提交但还未被处理的交易;
最后一条命令就是表示转账成功了,账户下有3个以太币。