以太坊私有链配置过程
一. 环境配置和程序安装
基于macOS High Sierra安装,系统版本 10.13.2
1.1 安装geth
- 确认安装过homebrew, 执行
brew -v
即可检查,如果没有安装,则去官网查看如何安装 - 命令行中执行
brew tap ethereum/ethereum
- 命令行中执行
brew install ethereum
- 命令行中输入
geth -h
,如果显示如下内容说明安装成功
1.2 安装solc
- 确认安装过npm,执行
npm -v
即可检查,如果没有安装,通过brew intall node
安装完成node之后,npm也安装成功 - 命令行中执行
npm install -g solc
安装solc - 执行
solc --help
检查是否安装成功,如果提示找不到命令,可尝试使用npm install -g solc solc-cli --save-dev
来取代上一条命令安装solc,如果显示如下内容,代表安装成功
二. 配置私有链节点
2.1 创世块设置
新建文件夹,命名为TedEth(随意命名),在文件夹下创建genesis.json和data文件夹。genesis.json文件内容如下:
1 | { |
解释一下各个参数的含义:
字段 | 含义 |
---|---|
mixhash | 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意他和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。 |
nonce | nonce就是一个64位随机数,用于挖矿 |
difficulty | 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度 |
alloc | 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。 |
coinbase | 矿工的账号,随便填 |
timestamp | 设置创世块的时间戳 |
parentHash | 上一个区块的hash值,因为是创世块,所以这个值是0 |
extraData | 附加信息,随便填,可以填你的个性信息,内容必须0x开头,16进制内容 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大 |
2.2 初始化
在命令行中进入刚才创建的TedEth文件夹,然后执行如下命令:geth --datadir data init genesis.json
各参数代表的含义如下:
字段 | 含义 |
---|---|
init | 表示初始化区块,后面跟着创世块的配置文件genesis.json |
datadir | 数据存放的位置 |
命令执行之后输出如下结果:
2.3 启动节点
geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover console
各参数代表的含义如下:
字段 | 含义 |
---|---|
identity | 区块链的标示,随便填写,用于标示目前网络的名字 |
port | 网络监听端口 |
rpc | 启动rpc通信,可以进行智能合约的部署和调试 |
rpcapi | 设置允许连接的rpc的客户端,一般为db,eth,net,web3,默认情况下,Geth允许web3 |
networkid | 设置当前区块链的网络ID,用于区分不同的网络,是一个数字 |
console | 启动命令行模式,可以在Geth中执行命令 |
rpccorsdomain | 设置请求ip白名单 * 为所有 |
nodiscover | 使用这个参数,你的节点就不会被其他人发现,除非手动添加你的节点。否则,就只有一个被无意添加到一个陌生区块链上的机会,那就是跟你有相同的genesis文件和networkID。 |
执行成功后将进入区块链的JavaScript控制台环境
2.4 Geth JavaScript控制台使用说明
创建新账号
personal.newAccount()
或者personal.newAccount("123456")
查看节点信息
admin.nodeInfo
挖矿 开始挖矿
miner.start(1)
停止挖矿miner.stop()
查看当前矿工账号
eth.coinbase
默认为第一个账户修改矿工账号
miner.setEtherbase(eth.accounts[1])
查看账户信息
eth.accounts[0]
查看账户余额
eth.getBalance(eth.accounts[0])
或者web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
解锁账号
personal.unlockAccount(eth.accounts[0])
使用账户资金前都需要先解锁账号转账
eth.sendTransaction({from:eth.accounts[0],to:"0x587e57a516730381958f86703b1f8e970ff445d9",value:web3.toWei(3,"ether")})
使用txpool.status
可以看到交易状态查看区块数据
eth.blockNumber
eth.getTransaction("0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825")
eth.getBlock(1)
通过区块号查看区块
2.5 挖矿记录
1 | > personal.newAccount() //创建A账户 |