BTTC层初始化配置
创世块包含配置网络的所有基本信息。它基本上是 Bor 链的配置文件。要启动 Bor 链,用户需要将文件的位置作为参数传递。
Borgenesis.json
用作创世块和参数。这是 Bor 创世纪的一个例子config
:
"config": {
"chainId": 15001,
"homesteadBlock": 1,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"bor": {
"period": 1,
"producerDelay": 4,
"sprint": 64,
"backupMultiplier": 2,
"validatorContract": "0x0000000000000000000000000000000000001000",
"stateReceiverContract": "0x0000000000000000000000000000000000001001"
}
}
bor配置参数解释
period:出块时间
producerDelay:两次sprint之间的时间
sprint:每次sprint的块数
backupMultiplier:确定摆动时间的备用乘数 「后加」
validatorContract:Bor验证者集创始合约地址
stateReceiverContract:状态接收者创世合约地址
bor初始验证者地址设置
bttc层bor共识第一个sprint周期内的验证者集合,是从初识化合约中硬编码的数据获取的,
对于genesis中alloc->0000000000000000000000000000000000001000->code
默认的验证者地址是在BorValidatorSet.sol合约中的getInitialValidators
设置的(查看代码)
/// Get current validator set (last enacted or initial if no changes ever made) with current stake.
function getInitialValidators() public view returns (address[] memory, uint256[] memory) {
address[] memory addrs = new address[](3);
addrs[0] = 0xfA841eAAcf03598bAadF0266eF6097C654DE5465;
addrs[1] = 0x80CFb197Be875eE45294AC31406E6483e3eAb02E;
addrs[2] = 0x0aB3ab4542ED5FA2A67B2B8DAbC82C42162853A6;
uint256[] memory powers = new uint256[](3);
powers[0] = 1;
powers[1] = 1;
powers[2] = 1;
return (addrs, powers);
}
对于私链的自定义可以通过提供的模版方式进行修改
首先clone https://github.com/bttcprotocol/genesis-contracts.git
然后修改初始化验证者列表,为自己需要的地址集合
https://github.com/bttcprotocol/genesis-contracts/blob/master/validators.json
然后就可以生成我们自己的初始合约
node generate-borvalidatorset.js --bttc-chain-id 9527 --delivery-chain-id delivery-9527
--bttc-chain-id:是对应bttc层的链id
--delivery-chain-id: 是设置delivery层的链id
重新创建后getInitialValidators中获取的就是我们自定义的初始话验证者地址集合了
使用genesis初始化bttc层启动后,第一个sprint周期内,会使用自定义的验证者集合进行出块,
查询此初始期间block的miner为0x0000000000000000000000000000000000000000
默认的话,下一周期开始与delivery层进行数据获取 // TODO
如果是为了单独测试bttc层,避免delivery层的干扰,可以禁用delivery层,也就是第一个sprint周期后,也不会向
delivery层获取验证者集合,一直消费合约初始化的验证者集合。
关闭delivery层链接的方式是,启动参数添加
--bor.withoutheimdall
需要注意,当前最新代码,该withoutheimdall参数目前只支持启动参数传入,config方式参数未支持。
如果添加参数后,将会执行WithoutHeimdall判断逻辑,相应的代码逻辑为
miner->commitNewWork->commit->FinalizeAndAssemble->(headerNumber%c.config.Sprint == 0)->checkAndCommitSpan->needToCommitSpan->fetchAndCommitSpan->WithoutHeimdall
getNextHeimdallSpanForTest / HeimdallClient.FetchWithRetry
周期验证者地址确认后,将和其他pos链一样,各个当前周期验证者进行依次出块,以及区块同步,这里就不多做解释了
bttc官方提供的脚本环境
主网:https://github.com/bttcprotocol/launch/tree/master/mainnet-v1/without-sentry/bttc
测试网:https://github.com/bttcprotocol/launch/tree/master/testnet-1029/without-sentry/bttc
"bor": {
"period": 2,
"producerDelay": 6,
"sprint": 64,
"backupMultiplier": 2,
"validatorContract": "0x0000000000000000000000000000000000001000",
"stateReceiverContract": "0x0000000000000000000000000000000000001001",
"overrideStateSyncRecords": {
},
版权属于:区块链中文技术社区 / 转载原创者
本文链接:https://bcskill.com/index.php/archives/1349.html
相关技术文章仅限于相关区块链底层技术研究,禁止用于非法用途,后果自负!本站严格遵守一切相关法律政策!