使用geth搭建以太坊私链

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
以太坊区块链浏览器:以太坊区块浏览器如何安装
以太坊区块链浏览器的搭建
以太坊区块链浏览器搭建(解决网页无法显示区块信息)

你可能感兴趣的:(以太坊)