BNB BSC 合约关系与方法梳理
1. 合约架构概述
核心合约
- System.sol / SystemV2.sol:基础合约,定义系统常量、地址和修饰符
- BSCValidatorSet.sol:验证者集合管理
- StakeHub.sol:验证者质押管理
- GovHub.sol:治理参数更新
- SlashIndicator.sol:验证者行为监控与惩罚
- SystemReward.sol:系统奖励管理
合约关系图
2. 各合约主要功能与方法
2.1 System.sol / SystemV2.sol
- 功能:定义系统常量、地址和修饰符
- 核心常量:各系统合约地址(VALIDATOR_CONTRACT_ADDR、SLASH_CONTRACT_ADDR等)
- 修饰符:onlyCoinbase、onlyZeroGasPrice、onlyGov等
2.2 BSCValidatorSet.sol
- 功能:管理验证者集合,处理惩罚和维护
对外方法:
initializeFromGenesis:从创世块初始化验证者集合updateValidatorSetV2:更新验证者集合deposit:收集交易费用并分配distributeFinalityReward:分配最终性奖励getLivingValidators:获取活跃验证者getMiningValidators:获取挖矿验证者enterMaintenance:进入维护模式exitMaintenance:退出维护模式
被链代码调用的方法:
updateValidatorSetV2:由共识引擎调用deposit:由区块生产者调用distributeFinalityReward:由区块生产者调用
2.3 StakeHub.sol
- 功能:验证者质押管理,包括创建验证者、委托等
对外方法:
createValidator:创建验证者editConsensusAddress:编辑共识地址editCommissionRate:编辑佣金率editDescription:编辑描述editVoteAddress:编辑投票地址unjail:解锁验证者delegate:委托undelegate:取消委托redelegate:重新委托claim:领取取消委托的BNB
被链代码调用的方法:
distributeReward:由验证者合约调用downtimeSlash:由惩罚合约调用maliciousVoteSlash:由惩罚合约调用doubleSignSlash:由惩罚合约调用
2.4 GovHub.sol
- 功能:治理参数更新
对外方法:
updateParam:更新参数,只能由治理时间锁合约调用
2.5 SlashIndicator.sol
- 功能:监控验证者行为,处理惩罚
对外方法:
slash:惩罚未出块的验证者clean:清理惩罚记录submitFinalityViolationEvidence:提交最终性违规证据submitDoubleSignEvidence:提交双重签名证据
被链代码调用的方法:
slash:由区块生产者调用clean:由验证者合约调用
2.6 SystemReward.sol
- 功能:系统奖励管理
对外方法:
claimRewards:领取奖励,只能由操作员调用
被链代码调用的方法:
claimRewards:由轻客户端、激励合约等调用
3. 合约调用关系
3.1 链代码调用合约
- 共识引擎 → BSCValidatorSet.updateValidatorSetV2
- 区块生产者 → BSCValidatorSet.deposit
- 区块生产者 → BSCValidatorSet.distributeFinalityReward
- 区块生产者 → SlashIndicator.slash
3.2 合约间调用
- BSCValidatorSet → StakeHub.distributeReward
- BSCValidatorSet → SlashIndicator.clean
- SlashIndicator → BSCValidatorSet.felony
- SlashIndicator → BSCValidatorSet.misdemeanor
- SlashIndicator → StakeHub.downtimeSlash
- SlashIndicator → StakeHub.maliciousVoteSlash
- SlashIndicator → StakeHub.doubleSignSlash
- GovHub → BSCValidatorSet.updateParam
- GovHub → StakeHub.updateParam
- GovHub → SlashIndicator.updateParam
- GovHub → SystemReward.updateParam
4. 接口定义
4.1 0.6.x 接口
- IBSCValidatorSet:验证者集合接口
- ISlashIndicator:惩罚接口
- IStakeHub:质押管理接口
- IParamSubscriber:参数订阅接口
- ISystemReward:系统奖励接口
4.2 0.8.x 接口
- IBSCValidatorSet:验证者集合接口
- IGovToken:治理代币接口
- IStakeCredit:质押信用接口
- IStakeHub:质押管理接口
5. 系统流程
5.1 验证者创建流程
- 用户调用 StakeHub.createValidator 创建验证者
- StakeHub 部署 StakeCredit 代理合约
- StakeHub 记录验证者信息
- 用户可以调用 delegate 进行委托
5.2 验证者惩罚流程
- 区块生产者调用 SlashIndicator.slash 惩罚未出块的验证者
- SlashIndicator 检查惩罚阈值
- 如果达到 misdemeanor 阈值,调用 BSCValidatorSet.misdemeanor
- 如果达到 felony 阈值,调用 BSCValidatorSet.felony 和 StakeHub.downtimeSlash
5.3 参数更新流程
- 治理提案通过后,GovernorTimelock 调用 GovHub.updateParam
- GovHub 调用目标合约的 updateParam 方法
- 目标合约更新参数并触发事件
6. 总结
该合约系统是一个完整的区块链验证者管理和治理系统,主要包括:
- 验证者管理:BSCValidatorSet 负责验证者集合的更新和维护
- 质押管理:StakeHub 负责验证者的质押、委托等操作
- 惩罚机制:SlashIndicator 负责监控验证者行为并处理惩罚
- 治理系统:GovHub 负责参数更新
- 奖励管理:SystemReward 负责系统奖励的分配
合约之间通过明确的接口进行交互,形成了一个完整的生态系统,确保区块链网络的安全和稳定运行。