- 预编译合约(Precompiled Contracts):直接编译在客户端中的原生函数
- 智能合约(Smart Contracts):部署在链上的合约代码
- 预编译合约
- 核心实现:core/vm/contracts.go
- 轻客户端相关:core/vm/contracts_lightclient.go
- 测试文件:core/vm/contracts_test.go
- 参数配置:params/protocol_params.go
- 智能合约
- 合约地址定义:core/systemcontracts/const.go
- 合约升级逻辑:core/systemcontracts/upgrade.go
- 合约实现:core/systemcontracts/目录下的各个子目录
- 创世配置:core/genesis.go中的DefaultBSCGenesisBlock函数
- 标准以太坊预编译合约(0x01-0x0a)
- 0x01 - ECRecover: 椭圆曲线签名恢复
- 0x02 - SHA256: SHA256哈希计算
- 0x03 - RIPEMD160: RIPEMD160哈希计算
- 0x04 - Identity: 数据复制
- 0x05 - BigModExp: 大数模幂运算
- 0x06 - BN256Add: 椭圆曲线点加法
- 0x07 - BN256ScalarMul: 椭圆曲线标量乘法
- 0x08 - BN256Pairing: 椭圆曲线配对运算
- 0x09 - Blake2F: Blake2b哈希函数
- 0x0a - KZGPointEvaluation: EIP-4844点评估
- BLS12-381曲线运算(0x0b-0x11,Prague版本)
- 0x0b - BLS12381G1Add: G1群点加法
- 0x0c - BLS12381G1MultiExp: G1群多点指数运算
- 0x0d - BLS12381G2Add: G2群点加法
- 0x0e - BLS12381G2MultiExp: G2群多点指数运算
- 0x0f - BLS12381Pairing: BLS12-381配对运算
- 0x10 - BLS12381MapG1: 域元素到G1的映射
- 0x11 - BLS12381MapG2: 域元素到G2的映射
- BSC特有预编译合约(0x64-0x69)
- 0x64 - TendermintHeaderValidate: Tendermint共识状态验证
- 0x65 - IAVLMerkleProofValidate: IAVL默克尔证明验证
- 0x66 - BLSSignatureVerify: BLS签名验证
- 0x67 - CometBFTLightBlockValidate: CometBFT轻客户端验证
- 0x68 - VerifyDoubleSignEvidence: 双重签名证据验证
- 0x69 - Secp256k1SignatureRecover: Secp256k1签名恢复
- 其他预编译合约
- 0x0100 - P256Verify: Secp256r1签名验证
- 验证者相关合约
- ValidatorContract (0x1000): 验证者管理合约
- SlashContract (0x1001): 惩罚合约
- 跨链桥相关合约
- TokenHubContract (0x1004): 代币跨链桥合约
- RelayerHubContract (0x1006): 中继者管理合约
- RelayerIncentivizeContract (0x1005): 中继者激励合约
- CrossChainContract (0x2000): 跨链通信合约
- 治理相关合约
- GovHubContract (0x1007): 治理中心合约
- GovernorContract (0x2004): 治理者合约
- GovTokenContract (0x2005): 治理代币合约
- TimelockContract (0x2006): 时间锁合约
- 质押相关合约
- StakingContract (0x2001): 质押合约
- StakeHubContract (0x2002): 质押中心合约
- StakeCreditContract (0x2003): 质押信用合约
- 系统功能合约
- SystemRewardContract (0x1002): 系统奖励合约
- LightClientContract (0x1003): 轻客户端合约
- TokenManagerContract (0x1008): 代币管理合约
- TokenRecoverPortalContract (0x3000): 代币恢复门户合约
- 直接调用
- 通过合约接口调用
- 标准合约调用
- 跨链调用
- Istanbul: 引入0x64, 0x65(Tendermint验证)
- Luban: 引入0x66(BLS签名验证)
- Plato: 引入0x67(CometBFT验证)
- Feynman: 引入0x68, 0x69(安全验证)
- Cancun: 引入0x0a(KZG点评估)
- Haber: 引入0x0100(P256验证)
- Prague: 引入完整的BLS12-381曲线支持
- Bohr版本:优化验证者管理
- Pascal版本:全面升级所有系统合约
- 后续版本:持续优化和功能增强
- 预编译合约权限
- 大部分预编译合约无权限限制
- 某些验证功能需要特定格式的输入
- 智能合约权限
- 验证者权限:质押和奖励相关功能
- 治理权限:提案和投票功能
- 中继者权限:跨链消息处理
- 系统权限:紧急操作和升级
- 预编译合约安全
- 输入验证:严格验证输入格式和长度
- 错误处理:失败时返回revert
- Gas限制:防止DoS攻击
- 智能合约安全
- 权限控制:多重签名和权限验证
- 审计机制:定期安全审计
- 紧急机制:紧急暂停和快速响应
- 预编译合约应用
- 跨链验证:Tendermint头部验证、IAVL证明验证
- 签名验证:BLS聚合签名、Secp256k1签名恢复
- 密码学运算:椭圆曲线运算、哈希计算
- 智能合约应用
- 验证者管理:注册、退出、轮换
- 跨链桥:代币跨链、消息传递
- 治理:提案、投票、参数调整
- 质押经济:用户质押、收益分配