BNB BSC 合约关系与方法梳理

Ethereum-新手教程 2025-11-27

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 验证者创建流程

  1. 用户调用 StakeHub.createValidator 创建验证者
  2. StakeHub 部署 StakeCredit 代理合约
  3. StakeHub 记录验证者信息
  4. 用户可以调用 delegate 进行委托

5.2 验证者惩罚流程

  1. 区块生产者调用 SlashIndicator.slash 惩罚未出块的验证者
  2. SlashIndicator 检查惩罚阈值
  3. 如果达到 misdemeanor 阈值,调用 BSCValidatorSet.misdemeanor
  4. 如果达到 felony 阈值,调用 BSCValidatorSet.felony 和 StakeHub.downtimeSlash

5.3 参数更新流程

  1. 治理提案通过后,GovernorTimelock 调用 GovHub.updateParam
  2. GovHub 调用目标合约的 updateParam 方法
  3. 目标合约更新参数并触发事件

6. 总结

该合约系统是一个完整的区块链验证者管理和治理系统,主要包括:

  • 验证者管理:BSCValidatorSet 负责验证者集合的更新和维护
  • 质押管理:StakeHub 负责验证者的质押、委托等操作
  • 惩罚机制:SlashIndicator 负责监控验证者行为并处理惩罚
  • 治理系统:GovHub 负责参数更新
  • 奖励管理:SystemReward 负责系统奖励的分配

合约之间通过明确的接口进行交互,形成了一个完整的生态系统,确保区块链网络的安全和稳定运行。


本文由 Surou 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论