在geth安装完成的情况下,我们就可以利用geth来创建我们的私有链或是同步公链上的数据。具体如何操作请看下文:
目录
创建私有链
准备工作
创建创世区块所需的JSON脚本文件:genesis.json
{
"config" : {
"chainId" : 168,
"homesteadBlock": 0,
"eip150Block" : 0,
"eip155Block" : 0,
"eip158Block" : 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc" : { }
}
参数 | 说明 |
---|---|
chainId | 私有链的ID,不要和公链的ID重复即可,后期启动稀有链需要使用,只有当chainId、network、创世区块配置相同时,才是同一条链。 |
homesteadBlock | 升级区块所在的高度,签名算法是homesteadBlock->eip150Block->eip155Block->eip158Block,从homesteadBlock之前的区块都通过homestead相关算法来验证,homesteadBlock到eip150Block之间的用eip150Block算法来验证,以此类推。 |
coinbase | 初始的挖矿奖励地址,一般我们在挖矿开始之前都会自己指定地址,所以这个参数随便填。 |
difficulty | 挖矿的难度,值越大难度越大,出块的时间越长,根据自己的需要设置。 |
extraData | 附加说明,根据自己的需求可填可不填。 |
gasLimit | 预定此区块链中gas的上限。 |
nonce | 64位的随机数,初始设置成0x0000000000000042 即可。 |
mixhash | 配合nonce用于挖矿,由上一个区块的一部分生成的hash |
parentHash | 上一个区块的hash,由于是创世区块,所以填0即可。 |
timestamp | 时间信息,设置创世区块的开始时间。 |
alloc | 预置资产,可以在创世时就给某此区块预置一些资产。 |
初始化
1、创建存放区块链的目录(目录名自己定义即可,这里用“privateChain”来做演示,datas1用来存放私有链的数据文件):
cd 自定义的数据目录
mkdir privateChain
cd privateChain
mkdir datas1
2、将genesis.json 放入到privateChain目录下
3、执行命令:
geth --datadir datas1 init genesis.json
得到如下图的返回信息,最后有“Successfully wrote genesis state”则表示初始化成功:
常用参数说明
geth init 是初始化的主体命令,上文初始化命令中还有一个 --datadir 是命令的可选参数,如果不带此参数则默认的数据目录是在geth主目录下。geth初始化命令或启动命令还有一些可选参数如下表:
参数 | 说明 |
---|---|
datadir | 当前区块链数据文件存放的目录。 |
identity | 当前区块链的标识,即可以给它设置名字。 |
rpc | 用于开启RPC通信,此功能主要是提供给智能合约通信(http的形式)。方便后面使用钱包软件进行连接。 注意:这个参数在1.10的版本里已废弃,使用http来代替 |
http | geth 1.10版本将rpc换成了http,功能相同 |
rpcport | RPC通信的端口,默认端口是8545,可以通过此参数更改端口。 |
rpcapi | 通过此参数可以设置连接区块链的客户端,默认情况下只有eth、net、web3可以连接。 |
rpccorsdomain | 设置通过域名访问RPC的白名单,多个域名中间用逗号隔开【如果是使用浏览器访问,推荐配置此参数】。 |
console | 带此参数可以直接进入命令行模式,此模式下可以直接输入命令操作区块链上的数据,是javascrip的可执行环境。 |
networkid | 设置要访问的区块链网络ID,一般与初始化的chanId一致。 |
dev | 如果是开发者的话,可以使用此参数,直接在启动的时候就会创建一个开发者账户。不需要指定networkid |
启动私链
启动私链:
geth --datadir datas1 --networkid 168 console
如下图则成功启动并进入console环境:
控制台有时会打印特别多的日志,所以为了第一时间看到我们命令的返回结果,我们需要将多余的日志信息打印到日志文件中,使用如下命令即可:
geth --datadir datas1 --networkid 168 console 2>output.log
开发者模式
私链之间相互转账每次都需要输入密码,而且初始情况下无币,还需要启动矿工进行挖矿,这样耽误太多的时间,这时我们就需要启动开发者模式,此模式下默认会创建一个开发者账号,此账号拥有巨额货币
使用如下命令新开一个数据文件目录,创建开发环境私链:
geth --datadir datas2 --dev console 2>output.log
到此私链创建成功,并成功运行。