8

docker 部署BSC v1.0.7-ht.3版本开发网

 3 years ago
source link: https://learnblockchain.cn/article/2819
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
docker 部署BSC v1.0.7-ht.3版本开发网

docker 部署BSC v1.0.7-ht.3版本开发网

其实上次已经和大家分享过一篇关于BSC(币安智能链)开发网的部署《BSC(币安智能链)开发网部署》,今天这篇同样也是关于BSC开发...

其实上次已经和大家分享过一篇关于BSC(币安智能链)开发网的部署《BSC(币安智能链)开发网部署》,今天这篇同样也是关于BSC开发网部署的文档,但是也稍微的有一些不一样,共有以下几点:

  1. 部署版本的变化
    本次使用v1.0.7-ht.3版本进行部署BSC私有链
    开始是想用v1.1.0版本,结果发现有以下报错:
Fatal: Failed to register the Ethereum service: unsupported fork ordering: mirrorSyncBlock not enabled, but berlinBlock enabled at 0

然后就发现v1.1.0及以上版本都有这个问题,官方的issues中暂时也没有回应这个问题,如果哪位大佬解决了这个问题,也可以一起沟通一下。

  1. 区块初始化创世文件(genesis.json):
  • 增加了相关协议机制的升级区块所在的高度;
  • 增加了出块的共识参数;
  • 自定义设置了coinbase地址、初始化余额地址,这样我们初始化整条链以后,就拥有了大量的BSC,以供测试使用。
  1. 配置文件(config.toml ):
    增加了配置文件,这样我们可以定义的参数项就会更多,可定义的东西也会强大。

一. 编写说明

1.1 文档说明

通过本文档对BSC币安智能链使用docker进行单节点部署过程进行描述

服务器 程序 默认端口 127.0.0.1 BSC开发网节点(BSC) rpc接口:8545
p2p接口:30303

1.2 配置信息

服务器系统:Centos7+
CPU:8核
内存:16GB
硬盘:1024 GB
网络:千兆网卡
Docker:19.03.11

注意:软件使用版本不强制使用与上面一样的版本

1.3 部署文档信息

二.BSC开发网镜像生成

  • 下载bsc基础镜像
docker pull buildpack-deps:jessie-curl
  • 编写Dockerfile
FROM buildpack-deps:jessie-curl
RUN wget -P /usr/local/bin/ https://github.com/binance-chain/bsc/releases/download/v1.0.7-ht.3/geth_linux && mv /usr/local/bin/geth_linux /usr/local/bin/geth && chmod +x /usr/local/bin/geth
EXPOSE 8545 8546 30303 30303/udp
WORKDIR /data
ENTRYPOINT ["geth"]
  • 生成heco主链镜像
docker build . -t private_bsc:v1.0.7-ht.3

注:需要在与Dockerfile同一级目录下执行此命令

  • 查看是否生成镜像
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
private_bsc         v1.0.7-ht.3         1e35739486c3        8 minutes ago       214MB

三.BSC开发网容器生成

3.1 配置文件编写

参考: https://github.com/binance-chain/bsc/releases/download/v1.0.7-ht.3/mainnet.zip

[Eth]
NetworkId = 1024
NoPruning = false
NoPrefetch = false
LightPeers = 100
UltraLightFraction = 75
TrieTimeout = 100000000000
EnablePreimageRecording = false
EWASMInterpreter = ""
EVMInterpreter = ""

[Eth.Miner]
GasFloor = 30000000
GasCeil = 40000000
GasPrice = 1000000000
Recommit = 10000000000
Noverify = false

[Eth.TxPool]
Locals = []
NoLocals = true
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1000000000
PriceBump = 10
AccountSlots = 512
GlobalSlots = 10000
AccountQueue = 256
GlobalQueue = 5000
Lifetime = 10800000000000

[Eth.GPO]
Blocks = 20
Percentile = 60
OracleThreshold = 20

[Node]
IPCPath = "geth.ipc"
HTTPHost = "0.0.0.0"
NoUSB = true
InsecureUnlockAllowed = false
HTTPPort = 8545
HTTPVirtualHosts = ["*"]
HTTPModules = ["eth", "net", "web3", "txpool", "parlia"]
WSPort = 8546
WSModules = ["net", "web3", "eth"]

[Node.P2P]
MaxPeers = 30
NoDiscovery = false
ListenAddr = ":30311"
EnableMsgEvents = false

[Node.HTTPTimeouts]
ReadTimeout = 30000000000
WriteTimeout = 30000000000
IdleTimeout = 120000000000

[Node.LogConfig]
FilePath = "bsc.log"
MaxBytesSize = 10485760
Level = "info"
FileRoot = ""

geth.tpml 文件可创建在/opt/docker/bsc-private

3.2 预先创建一个账户地址

使用MetaMask或者其他工具预先创建一个账户地址,并保存好私钥,后面这个地址会配置在genesis文件中,并用做挖矿coinbase地址及初始化地址

3.3 创建genesis.json

参考: https://github.com/binance-chain/bsc/releases/download/v1.0.7-ht.3/mainnet.zip

根据需要修改特定的字段,常规的比如

  • chainId 修改为自己的独有链id
  • coinbase 修改为预先创建的地址
  • alloc中的0x6e60F5243e1a3F0Be3F407b5AFE9e5395ee82aa2修改为初始资金接收地址,balance根据业务需要,计算相应预先发行数量(精度18位)的16进制

对于共识参数,可以根据需要再做修改

"congress": {
    "period": 3, // 出块间隔(秒)
    "epoch": 200 // 出块顺序刷新间隔(块数),epoch为一个周期设定,单位是block,每个epoch结束的时候,会对验证人进行相应调整;
}

genesis.json 文件创建

{
  "config": {
    "chainId": 1024,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "muirGlacierBlock": 0,
    "congress": {
     "period": 20,
      "epoch": 20000
    }
  },     
     "nonce": "0x0000000000000061",
     "timestamp": "0x0",
     "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
     "gasLimit": "0x2625a00",
     "difficulty": "0x100",
     "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
     "coinbase": "0x6e60F5243e1a3F0Be3F407b5AFE9e5395ee82aa2",
     "alloc": {
       "0x6e60F5243e1a3F0Be3F407b5AFE9e5395ee82aa2":{
       "balance": "6660010000000000000000000000"
   	      }	
     }
}

注:genesis.json 应创建在/opt/docker/bsc-private

3.4 初始化geth

将上面修改好的geth.tomlgenesis.json及预生成的账户地址keystore文件放到规划好的位置,我们此时放在 /opt/docker/heco-private

  • 初始化geth
cd /opt/docker/bsc-private

docker run --rm -v $(pwd):/data private_bsc:v1.0.7-ht.3 init /data/genesis.json --datadir /data/bsc
  • 将预生成的账户地址keystore文件拷贝至初始数据文件中
cp UTC--2017-11-21T05-46-23.555205600Z--6e60f5243e1a3f0be3f407b5afe9e5395ee82aa2 bsc/keystore/

或者可以将以上步骤编写为一个脚本,例如:

# vim /opt/docker/bsc-private/genesis.sh 

#!/bin/bash

docker run --rm -v $(pwd):/data private_bsc:v1.0.7-ht.3 init /data/genesis.json --datadir /data/bsc
cp UTC--* ./bsc/keystore/

3.5 启动bsc

  • 启动bsc
docker run -itd --restart=unless-stopped -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --name private-bsc -v /opt/docker/bsc-private:/data -p 30303:30303 -p 8545:8545 private_bsc:v1.0.7-ht.3 --config config.toml --datadir /data/bsc  --nodiscover
  • 查看bsc启动日志
# tail -100 /opt/docker/bsc-private/bsc/bsc.log.2021-08-04_16

t=2021-08-04T16:20:45+0800 lvl=info msg="Starting peer-to-peer node" instance=Geth/v1.0.7-hf.3-5bc1d30b/linux-amd64/go1.16.3
t=2021-08-04T16:20:45+0800 lvl=info msg="Allocated trie memory caches" clean="614.00 MiB" dirty="1024.00 MiB"

注意:此时heco私链并没有开启挖矿

3.6 启动挖矿

启动后,进入ipc,解锁我们预先生成的地址,作为此节点的coinbase

  • 从另一个终端进入geth控制台
# docker exec -it private-bsc bash
root@3366708929de:/data# geth attach /data/bsc/geth.ipc
  • 查看当前的的coinbase地址
> eth
{
  accounts: ["0x6e60f5243e1a3f0be3f407b5afe9e5395ee82aa2"],
  blockNumber: 0,
  coinbase: "0x6e60f5243e1a3f0be3f407b5afe9e5395ee82aa2",

accounts和coinbase都为以上步骤预先生成的地址

  • 设置该地址为无限期解锁,因为后面需要使用该私钥进行出块签名。0为无限期
> personal.unlockAccount("0x6e60f5243e1a3f0be3f407b5afe9e5395ee82aa2","123456",0)
true
>  miner.start(1)
null

注:开启一个线程进行挖矿

  • 此时查看容器日志
# docker logs -f private_heco --tail 10
// 生成DAG数据
t=2021-08-04T16:26:50+0800 lvl=info msg="Generating DAG in progress"             epoch=0 percentage=0 elapsed=356.389ms
t=2021-08-04T16:26:50+0800 lvl=info msg="Generating DAG in progress"             epoch=0 percentage=1 elapsed=708.495ms
t=2021-08-04T16:26:50+0800 lvl=info msg="Generating DAG in progress"             epoch=0 percentage=2 elapsed=1.058s
t=2021-08-04T16:26:51+0800 lvl=info msg="Generating DAG in progress"             epoch=0 percentage=3 elapsed=1.404s
t=2021-08-04T16:26:51+0800 lvl=info msg="Generating DAG in progress"             epoch=0 percentage=4 elapsed=1.762s

// 开始出块
t=2021-08-04T16:27:29+0800 lvl=info msg="Successfully sealed new block"          number=1 sealhash=0x57d0cdcc353de2b1b2d99b455efc0dce14f6e204434d362bed005ea5f003dcaf hash=0x89cdece36c95746fd82fbb65b994f8ea3db5f4953570737459c6f2673cebdf50 elapsed=40.576s
t=2021-08-04T16:27:29+0800 lvl=info msg=" mined potential block"                number=1 hash=0x89cdece36c95746fd82fbb65b994f8ea3db5f4953570737459c6f2673cebdf50
t=2021-08-04T16:27:29+0800 lvl=info msg="Commit new mining work"                 number=2 sealhash=0xdf92768fb682d0c811c0637d2431478731b06c49070f54824c164ef1988175fd uncles=0 txs=0 gas=0 fees=0 elapsed=172.97µs

节点出块主要是以下日志

// 成功封存新的区块
t=2021-08-04T16:33:22+0800 lvl=info msg="Successfully sealed new block"          number=119 sealhash=0x944e47c25deb67219e80af398b21a0c9b55a5eef4a61e22c78376a5118c46189 hash=0xd8cdbdcc9e8cc513866125dbd372deb65cecf0fa618fbd09dc0d01cd14b952e2 elapsed=1.737s

// 区块进行上链
t=2021-08-04T16:33:22+0800 lvl=info msg=" block reached canonical chain"        number=108 hash=0xf8a65a6468625c14b4d195963460ffd413f9f9f9d3cf7e0a6b1cf77d6b16f40c

// 挖掘可能的区块
t=2021-08-04T16:33:22+0800 lvl=info msg=" mined potential block"                number=119 hash=0xd8cdbdcc9e8cc513866125dbd372deb65cecf0fa618fbd09dc0d01cd14b952e2


// 进行新的挖矿工作
t=2021-08-04T16:33:22+0800 lvl=info msg="Commit new mining work"                 number=120 sealhash=0xaf151731361f37ff932f905e9af6b05b25557ace82c670fd6abe42abd455fb8c uncles=0 txs=0 gas=0 fees=0 elapsed=166.462µs

四.控制台指令使用

  • 地址余额查询

查看前面预先设置的初始资金接收地址余额

> web3.fromWei(eth.getBalance(eth.accounts[0]))
6660010300
  • 当前最新区块号
> eth.blockNumber
153
> miner.stop()
null

以上,就是今天分享的全部内容了。

希望大家通过以上方式可以解决自己的实际需求,解决自己目前所遇到的问题。

如果在部署过程中有任何疑问,可以扫描下面的二维码,添加我的个人微信,备注:地区-职业方向-昵称,欢迎来撩,加入区块链技术交流群,与更多的区块链技术大佬学习交流。
.jpg

原创不易,码字不易。 觉得这篇文章对你有点用的话,麻烦你为本文点个赞,留言或转发一下,因为这将是我输出更多优质文章的动力,感谢!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK