参考:https://github.com/ethereum/Go-ethereum
1.下载安装geth客户端
下载geth: https://geth.ethereum.org/downloads/
根据提示安装geth,安装完成后
2.初始化以太坊创世块
(1)新建存储私链文件夹,
(2)配置创世块genesis.json文件,genesis的文件内容如下:
{ "config": { "chainId": 0, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x20000", "extraData" : "", "gasLimit" : "0x2fefd8", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00" }
参数解释:
coinbase 矿工的账号
difficulty 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
extraData 附加信息,随便填
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和
nonce 就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
parentHash 上一个区块的hash值,因为是创世块,所以这个值是0
timestamp 设置创世块的时间戳
alloc 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号
打开cmd命令行,在命令行中输入:
geth --datadir "D:\Program Files\EthSpace\PrivateChain" init "D:\Program Files\EthSpace\genesis.json"
datadir 选项用来指定我们私链的数据目录
init 命令为创世命令,后面紧跟着我们的创世配置文件路径
3.进入geth的控制台,输入命令
geth --datadir "D:\Program Files\EthSpace\PrivateChain" --port 30303 --networkid 99 --nodiscover console
port:默认的端口为30303
4.创建账号
(1)输入命令: personal.listAccounts 会出现[],表示还没有账号
(2)输入密码创建账号
personal.newAccount("123")
在Ethereum Wallet客户端创建新的账号时,输入简单的密码会创建不成功,会要求输入复杂点的密码才能成功
再次输入 personal.listAccounts 会发现刚刚创建的账号
5.挖矿
(1)开始挖矿
miner.start();
挖矿时默认的是创建的第一个账号的地址
(2)停止挖矿
miner.stop()
停止成功后会返回 true
6.查询账户余额
输入命令
my=eth.accounts[0] 将创建的第一个账号赋值给my
eth.getBalance(my)
7.转账
(1)创建第二个账号
personal.newAccount('123456')
other=eth.accounts[1]
(2)转账
eth.sendTransaction({from:my, to:other, value:1})
此时会发现转账失败,原因是账号未解锁
(3)对转出账户进行解锁
personal.unlockAccount(my)
解锁时会要求输入密码,解锁成功后再次转账
eth.sendTransaction({from:my, to:other, value:1})
(4)挖矿
miner.start()
miner.stop()
转账的交易被确认
(5)查询账号的余额
eth.getBalance(other)
eth.getBalance(my)
other的账户多了一个,变成了4,my账户少了一个