【区块链实战】如何搭建以太网智能合约私网
目录
一、简介
二、知识点
智能合约
以太坊私网
创世区块
部署以太坊私网
启动以太坊节点
三、菜鸟实战
1、配置创世区块
2、数据初始化
3、启动节点
一、简介
私网是由开发者自行组建的网络,不与主网和测试网相通,独立存在,主要用于个人测试或企业项目使用。
二、知识点
智能合约
以太坊私网
创世区块
部署以太坊私网
启动以太坊节点
三、菜鸟实战
实战场景:搭建以太坊智能合约私网。
1、配置创世区块
{ "config": { "chainId": 15, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc" : {}, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x2", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00"}
参数说明如下:
参数 | 说明 |
config |
项是定义链配置,会影响共识协议,虽然链配置对创世影响不大,但新区块的出块规则均依赖链配置 |
config.chainId |
网络ID,私网任意配置 |
coinbase |
挖矿后获得奖励的账户地址 |
difficulty | 挖矿难度 |
gasLimit |
一个区块所能容纳的 gas 上限 |
nonce | 随机值 |
mixhash | 256位哈希证明,与 nonce 结合,验证当前区块的有效性 |
extraData | 自定义附加信息 |
parentHash |
前一块的 hash 值,因为是创世区块,所以为 0 |
timestamp | UTC时间戳 |
alloc | 创世中初始账户资产配置。在生成创世区块时,将此数据集中的账户资产写入区块中。 |
2、数据初始化
geth init genesis.json --datadir ./data
初始化成功后 data 目录会有一些文件生成,具体如下:
data├── geth│ ├── chaindata│ │ ├── 000001.log│ │ ├── ancient│ │ │ ├── bodies.0000.cdat│ │ │ ├── bodies.cidx│ │ │ ├── bodies.meta│ │ │ ├── diffs.0000.rdat│ │ │ ├── diffs.meta│ │ │ ├── diffs.ridx│ │ │ ├── FLOCK│ │ │ ├── hashes.0000.rdat│ │ │ ├── hashes.meta│ │ │ ├── hashes.ridx│ │ │ ├── headers.0000.cdat│ │ │ ├── headers.cidx│ │ │ ├── headers.meta│ │ │ ├── receipts.0000.cdat│ │ │ ├── receipts.cidx│ │ │ └── receipts.meta│ │ ├── CURRENT│ │ ├── LOCK│ │ ├── LOG│ │ └── MANIFEST-000000│ ├── lightchaindata│ │ ├── 000001.log│ │ ├── ancient│ │ │ ├── bodies.0000.cdat│ │ │ ├── bodies.cidx│ │ │ ├── bodies.meta│ │ │ ├── diffs.0000.rdat│ │ │ ├── diffs.meta│ │ │ ├── diffs.ridx│ │ │ ├── FLOCK│ │ │ ├── hashes.0000.rdat│ │ │ ├── hashes.meta│ │ │ ├── hashes.ridx│ │ │ ├── headers.0000.cdat│ │ │ ├── headers.cidx│ │ │ ├── headers.meta│ │ │ ├── receipts.0000.cdat│ │ │ ├── receipts.cidx│ │ │ └── receipts.meta│ │ ├── CURRENT│ │ ├── LOCK│ │ ├── LOG│ │ └── MANIFEST-000000│ ├── LOCK│ └── nodekey└── keystore6 directories, 44 files
3、启动节点
geth --datadir ./data --networkid 15 --http --http.addr 0.0.0.0 --http.vhosts "*" --http.api "db,net,eth,web3,personal" --http.corsdomain "*" --snapshot --allow-insecure-unlock console 2> 1.log
参数 | 说明 |
datadir |
初始化的数据目录文件 |
networkid |
加入的网络ID, 与 config.chainId 值相同 |
port |
节点之间 P2P 通信端口 |
http |
开启远程调用 |
httpport |
rpc 端口,默认 8545 |
httpcorsdomain |
可接受请求来源的域名列表 |
console |
进入管理台 |
至此,节点启动成功,后续就可以准备智能合约的开发了。