1. 创世区块初始化
1)创建私有链专用文件夹
@ubuntu:~$ mkdir Project
@ubuntu:~$ mkdir myChain
2)创建创始区块文件
创建网络的“创世”(genesis)状态,这写在一个小小的 JSON 文件里(例如,我们将其命名为 genesis.json),并将其保存在myChain目录下
{
"config": {
"chainId": 150
},
"difficulty": "200",
"gasLimit": "2100000",
"alloc": {
"2847cd3B0df63d08f112A1ce658d82F5D85d9Ad0": { "balance": "3000000000000000000" }
}
}
创世区块解析
名称 | 含义 |
---|---|
chainId | 区块链网络id,在连接到其它网络节点时会用到,以太坊公网id是1,不同id的网络节点之间无法互相连接 |
homesteadBlock | Homestead是以太坊的第二个主要版本,第一个是Frontier,这个值设置为“0”表示目前正在使用Homestead版本 |
eip155Block | eip(ethereum improvement proposal),设置为“0”即可 |
eip158Block | eip(ethereum improvement proposal),设置为“0”即可 |
alloc | 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以不需要预置有币的账号,需要的时候再创建即可 |
coinbase | 矿工的账号,随意填写即可 |
difficulty | 设置当前区块的难度,如果难度过大,则挖矿时间会比较长,为节省算力和等待时间可设置较小值 |
extraData | 随意填写,可以填写你的个性信息,但必须为十六进制的字符串 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为创建的是私有链,所以填最大 |
nonce | 一个用于挖矿的64位随机数,可以随便填写。nonce和mixhash的设置需要满足以太坊黄皮书,4.3.4. Block Header Validity,(44)章节所描述的条件 |
mixhash | 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意它和nonce的设置需要满足以太坊黄皮书,4.3.4. Block Header Validity, (44)章节所描述的条件 |
parentHash | 上一个区块的哈希值,因为是创世区块,所以这个值是0 |
timestamp | 时间戳 |
3)创世区块初始化
@ubuntu:~/Project/myChain$ geth --datadir . init genesis.json
初始化完成后目录下多了geth和keystore两个文件夹:
- geth:保存该链上的区块数据
- keystore:保存该链上的账户信息
2.启动私有链节点
在当前目录下运行 geth,就会启动这条私链。
注意:要将 networked 设置为与创世块配置里的 chainId 一致
简单开启
@ubuntu:~/Project/myChain$ geth --datadir . --networkid 150 --nodiscover console
更一般的形式
@ubuntu:~/Project/myChain$ geth --networkid 150 --datadir "." --identity "kexin" --rpc --rpcport "8545" --rpcaddr "localhost" --port "30303" --nodiscover --allow-insecure-unlock --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" console
参数 | 含义 |
---|---|
networkid | 网络ID,具有同一网络标识的区块原则上可以连接,id为1为以太坊主网络,1-4网络已经被以太坊自行占用,因此不能使用1-4作为自己的私有链网络ID |
datadir | 指定区块链数据的存储位置 |
identity | 区块链的标示,用于标示目前网络的名字 |
rpc | 启动rpc通信 |
rpcport | 指定 HTTP-RPC 服务监听端口号,默认为 8545 |
rpcaddr | HTTP-RPC 服务ip地址,默认为"localhost" |
port | 指定和其他节点连接所用的端口号(默认为30303) |
nodiscover | 关闭节点发现机制,防止加入有同样初始配置的陌生节点 |
rpcapi | 设置允许连接的rpc的客户端,一般为db,eth,net,web3 |
console | 启动命令行模式,可以在Geth中执行命令 |
3.geth控制台简单操作
具体geth控制台命令可以跳转我的这条博客
传送门:geth控制台命令
Geth Console 是一个交互式的 JavaScript 执行环境,里面内置了一些用来操作以太坊的 JavaScript对象,我们可以直接调用这些对象来获取区块链上的相关信息。这些对象主要包括:
- eth:主要包含对区块链进行访问和交互相关的方法;
- net:主要包含查看 p2p 网络状态的方法;
- admin:主要包含与管理节点相关的方法;
- miner:主要包含挖矿相关的一些方法;
- personal:包含账户管理的方法;
- txpool:包含查看交易内存池的方法;
- web3:包含以上所有对象,还包含一些通用方法。
常用命令:
- personal.newAccount(‘账户密码’):创建账户;
- personal.unlockAccount():解锁账户;
- eth.accounts:列出系统中的账户;
- eth.getBalance(eth.accounts[0]):查看账户余额,返回值的单位是 Wei;
- eth.blockNumber:列出当前区块高度;
- eth.getTransaction():获取交易信息;
- eth.getBlock():获取区块信息;
- eth.coinbase:第一种查看矿工账户地址的方式,矿工账户默认是第一个账户
- web3.eth.coinbase:第二种查看矿工账户地址的方式
- miner.setEtherbase(eth.accounts[1]):设置eth.accounts[1]为矿工账户地址
- miner.start():开始挖矿;
- miner.stop():停止挖矿;
- web3.fromWei():Wei 换算成以太币;
- web3.toWei():以太币换算成 Wei;
- txpool.status:交易池中的状态;
- eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(4,‘ether’)}):第一个账户向转第二个账户转4ether;
相关链接:
安装node.js
以太坊区块链浏览器:以太坊区块浏览器如何安装
以太坊区块链浏览器的搭建
以太坊区块链浏览器搭建(解决网页无法显示区块信息)