搭建私链关键是 编写创始区块配置文件,主要包含以下几个步骤。
为了保持目录结构清晰,搭建过程中新建了工作目录以及存放区块数据和账户数据的目录。
1、创建工作目录
mkdir geth
cd geth
touch gensis.json
2、配置创世区块配置文件
{
"config": {
"chainId": 123123,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
}
}
注:chainid 为区块链网络id,对应启动时的networkid
3、创建存储目录及初始化创世区块
创建目录用于存放区块链数据
cd geth
mkdir blockdb
执行初始化命令
geth --datadir "./blockdb" init gensis.json
==error:==
Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix into Go struct field Genesis.extraData of type hexutil.Bytes
若执行过程中出现以上错误提示,请检查==gensis.json==文件。
其中 chaindata 中存放的时 区块数据,keystore 中存放的是 账户数据。
4、启动私链初始节点
执行以下命令启动私链
geth --datadir "./blockdb" --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 123123 --port 30303 --verbosity 4 console
- rpccorsdomain 这里配置 “ * ”是允许通过任意域名访问,也可以指定具体的域名。
- verbosity 日志等级:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)。
==error==
Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified
出现场景,gensis.json中节点alloc未配置账号,而启动私链时需指定一个矿工账号,否则回出现该错误。
Error: etherbase missing: etherbase address must be explicitly specified
原因是当前环境没有账户,需要建立一个账户
5、常用命令
以太坊的JavaScript控制台中内置了一些对象,通过这些对象我们可以很方便的和以太坊进行交互,这些内置对象包括:
- eth:提供了操作区块链项目的方法*
- net:提供了查看p2p网络状态的相关方法
- admin:提供了管理节点相关方法
- miner:提供了启动和停止挖矿的方法
- personal:提供了管理账户的方法
- txpool:提供了查看交易内存池的方法
- web3:除了包含以上对象中有的方法外,还包含一些单位换算的方法。
下面几个步骤以一个完整的流程介绍一些常用命令,即创建用户->查看用户->挖矿->交易。
创建账户
personal.newAccount('123456')
查看账户
eth.accounts
eth.accounts[0]
查看余额
eth.getBalance(eth.accounts[0])
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
此时账户数据为0
挖矿
先启动(start)挖矿,待出现小🔨的图标(开始挖矿),过一分钟后,停止挖矿,然后查看余额,可以看到账户已存在数据 (在没有设置挖矿奖励地址时,系统默认第一个账户的地址为奖励地址)。
挖矿命令:
miner.start()
miner.stop()
交易
首先交易需2个账户,所以使用newAccount命令再创建一个账户;
其次交易之前需先解锁,否则会报错。
解锁命令:
personal.unlockAccount(eth.accounts[0],'123456')
转账命令:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether")})
此时查看另一个账户,可以看到已存在1eth。
若转账时若未开启挖矿,此时交易处于待打包交易,所以另一个账户查不到转账的数据,可以通过==txpool.status== 查看状态。
网友评论