Geth搭建私有链

以太坊官方网络(Official Network)

以太坊官方网络有两种:

  • 生产环境网络(又称主网络)
  • 测试网络TestNet

主网络是产生真正有价值的以太币的网络,是全球化,部署在Internet环境上的.智能合约的代码,执行,区块的调用,都可以清晰地查看到.而所有节点都是全球化的,速度较慢.
TestNet是专供用户来开发,调试和测试的.如果开发简单的智能合约的话,用测试网络就足够了,用户可以把更多的精力集中在智能合约的编写.但是由于网路是官方提供的,因此对于以太坊技术的底层实现,Geth的各种参数接口,整个以太坊技术真是性能的理解就会弱很多.所以从开发者的角度来说,一个更好的选择是Private Network,可以从技术的底层去深入理解以太坊.

以太坊私有网络(Private Network)

以太坊私有网络,就是由用户自己通过Geth创建的私有网络,是一个非常适合开发,调试和测试的网路.私有网路可以方便开发者深入理解以太坊的技术底层.

Geth搭建私有网络

Step1:定义私有genesis state

创建一个新的文件夹privateNetwork,用来存储genesis.json文件和之后的私有链

wesley@wesley-PC:~/Code/blockchain$ mkdir privateNetwork
wesley@wesley-PC:~/Code/blockchain$ cd privateNetwork
wesley@wesley-PC:~/Code/blockchain$ vim genesis.json

将下面的内容复制到genesis.json中:

{
  "config": {
        "chainId": 14,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x05000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

官方文档中的chainId为0,应该修改为非0的值,不然会导致 insufficient funds for gas * price + value
difficulty表示挖矿的难度值,官方文档中为0x20000,由于测试机器配置低,修改为0x05000。

Step2:建立创世区块

运行如下指令:

wesley@wesley-PC:~/Code/blockchain$ geth --datadir "./privateNetwork" init go-ethereum/genesis.json 

结果如下:

这里写图片描述

然后在privateNetwork中能发现geth和keystore两个新文件.

  • geth保存的是区块链的相关信息
  • keystore中保存的是该链条中的用户信息

这里写图片描述

Step3:创建自己的私有链条

运行如下命令:

wesley@wesley-PC:~/Code/blockchain/privateNetwork$geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhost console 2>>geth.log

nodiscover的意思是不被其他节点自动发现(可以手动添加节点)
console是启动geth控制台,不加该选项,geth启动之后成为一个后台进程不会自动结束
最后把geth中的log信息导入geth.log中,方便了解geth运行的情况。
注意路径要加引号,不然会出问题.

--nodiscover 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络
--datadir 区块链数据存储目录
--networkid 网络标识,私有链取一个大于4的随意的值
--rpc 启用ipc服务,默认端口号8545
--rpcapi 表示可以通过ipc调用的对象
--rpcaddr ipc监听地址,默认为127.0.0.1,只能本地访问
console 打开一个可交互的javascript环境
更多参数:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

这里写图片描述

Step4:在自己的私有链条上创建用户

查看私有链已有账户,会发现返回为[],此时还没有任何账户.

>eth.accounts

创建新用户,密码是”wesley”,地址是"0xe8280b532f5cc8d614e35fb5071d85250ccbd2a4"

>personal.newAccount("wesley")

这里写图片描述

Step5:尝试挖矿

继续在console中输入:

>miner.start()

开始挖矿,查看geth.log,如下:

这里写图片描述

过了一段时间之后,再停止挖矿,查看账户,只要不为0则挖矿成功

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yinanmo5569/article/details/80339031