创世区块
创世区块的json文件内容如下:
{
"config": {
"chainId": 10086,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x1dcd65000",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
其中各个参数的含义如下表所示:
参数名 | 含义 |
---|---|
chainId | 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。 |
HomesteadBlock | 当设置为0表示使用Homestead发布该链。 |
nonce | nonce就是一个64位随机数,用于挖矿。 |
mixhash | 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。 |
difficulty | 设置设置当前区块的难度,越大挖矿就越难。 |
alloc | 用来预置账号以及账号的以太币数量。 |
coinbase | 矿工账号 |
timestamp | 设置创世块的时间戳 |
parentHash | 上一个区块的hash,创世块就为0 |
extraData | 附加信息 |
gasLimit | 限制GAS的消耗总量 |
初始化创世区块
需要将上述内容保存为文件genesis.json,然后将其放入自己的文件夹中。
在终端cd进入放置genesis.json的文件夹中,输入代码:
## --datadir后面的路径表示当前区块链网络数据存放的位置
geth --datadir ./data/00 init ./genesis.json
这时候会发现指定的目录下多了geth和keystore两个文件,其中geth保存的该链上的区块数据,keystore保存的该链上的用户信息。
启动节点
geth --datadir ./data/00 --networkid 10086 --port 30303 --nodiscover --rpc --rpcaddr 192.168.119.129 --rpcport 8545 -allow-insecure-unlock --rpc.allow-unprotected-txs --rpccorsdomain "*" --rpcapi "db,eth,net,web3,personal,miner" console
其中各个参数的含义如下表所示:
参数名 | 含义 |
---|---|
datadir | 当前区块数据存放的位置 |
networkid | 设置当前区块链的网络ID,用于区分不同的网络,必须和创世区块的chainId相同 |
port | 网络监听端口,默认30303 |
nodiscover | 关闭p2p网络的自动发现,需要手动添加节点,这样有利于我们隐藏私有网络 |
rpc | 启动rpc通信 |
rpcaddr | 连接rpc的地址,默认为localhost |
rpcport | 连接rpc的端口,默认为8545 |
-allow-insecure-unlock | 新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户,如果想要解锁账户进行转账的话,需要启动节点时添加这一参数 |
–rpc.allow-unprotected-txs | 允许通过 RPC 提交不受保护的(非 EIP155 签名)交易 |
rpccorsdomain | 指定什么url能连接到你的节点执行rpc定制端任务,如果输入的是“*”,则任何url都可以连接到你的rpc实例 |
rpcapi | 设置允许连接rpc的客户端,一般为db,eth,net,web3 |
console | 启动命令行模式,可以在Geth中执行命令 |
在这里我的–rpcaddr选择的是我的虚拟机的ip地址,查询虚拟机的IP地址需要在Ubuntu中安装一个工具,具体步骤可以参考:安装网络工具。
安装成功后,按ctrl+alt+t打开终端,输入如下代码查询虚拟机ip地址:
ifconfig
返回的inet值即为虚拟机的IP地址。