windows 系统下搭建以太坊私有链环境

参考: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账户少了一个


猜你喜欢

转载自blog.csdn.net/luhuiwan1314/article/details/79623998