Compound 是部署在以太坊上的知名去中心化借贷协议,允许用户存入特定加密资产作为抵押品并借出其他资产。本文将详细介绍如何在 BSC 测试网上部署 Compound 协议的核心合约,搭建一个功能完整的去中心化借贷平台。
一、部署环境与工具准备
部署前需准备以下环境与工具:
- 操作系统:macOS 或兼容的 Linux 发行版
- 公链网络:BSC Testnet(需配置至 MetaMask)
- 开发工具:Remix IDE、MetaMask 钱包
- 合约源码:Compound 官方协议代码库
在 Remix 中编译时,请勾选“启用优化”选项以减小合约体积。
提示:Compound 合约体系较为复杂,包含 30 多个文件。建议先理解其模块化设计,特别是各合约间的关联与初始化参数,这将大幅降低部署难度。
二、核心模块部署步骤
2.1 COMP 激励代币部署
COMP 是协议的治理与激励代币,可使用标准 ERC20 合约部署:
- 部署 COMP 合约,记录地址:
0x1fe7FF222D59B6648D640090046661313A1CF0a2 - 在 Comptroller 合约中配置 COMP 地址
- 也可直接使用 Compound 自带的
Comp.sol,修改名称、符号和总供应量
2.2 Comptroller 管理模块部署
Comptroller 是协议的风险管理核心,采用代理模式:
- 部署 Unitroller(代理合约)
地址:0x268e3eF4380DA46e55B77a6263810910722a875E - 部署 ComptrollerG7(逻辑合约)
地址:0x67006E2110119Abfd40b2A743A85b4d3bF8967b9
2.3 PriceOracle 价格预言机部署
部署 SimplePriceOracle 作为初始价格来源:
地址:0x5991199a9aB1801A229a2E49a042471eDE997a21
2.4 代理合约绑定与参数设置
完成基础部署后,需进行合约绑定与参数配置:
代理绑定
- 在 Unitroller 调用
_setPendingImplementation,参数为 ComptrollerG7 地址 - 在 ComptrollerG7 调用
_become,参数为 Unitroller 地址
- 在 Unitroller 调用
关键参数设置
- 设置清算因子(closeFactor)为 50%(500000000000000000)
- 设置清算激励(liquidationIncentive)为 8%(1080000000000000000)
- 设置预言机地址为 SimplePriceOracle
注意:对外提供服务时,应使用 Unitroller 地址作为 Comptroller 地址。
三、利率模型与资产部署
3.1 拐点利率模型部署
JumpRateModelV2 是 Compound 使用的拐点利率模型:
- 参数设置:基础利率 0,乘数 7%,跳跃乘数 3,拐点 75%
- 部署两个实例,分别用于 ERC20 资产和主网币(ETH)
- 地址:
0x8A517DA790929D2aC3527210f9472E2822424180(ERC20)0x0cca4ccD1ED542B5D7F3Ebbcf49D92DCB0a8D04e(ETH)
3.2 ERC20 cToken 部署
- 部署测试 ERC20 代币
地址:0xBEA207ec294BCe7a866C3a598195A61Bb7E8D599 - 部署 CErc20Delegate(实现合约)
地址:0xc176eD65274b2a2d422126d597Be715fc97d2e98 部署 CErc20Delegator(代理合约)
- 参数:标的资产地址、Comptroller 地址、利率模型地址
- 初始汇率设置为 1:1(1000000000000000000)
- 名称:COMPOUND USD,符号:cUSD,小数位:18
- 地址:
0x209C9b6a0Ec37b91d0758514070A8439B14B9B3c
3.3 主网币 cToken 部署
部署 CEther 合约用于主网币存款:
- 参数:Comptroller 地址、利率模型地址
- 初始汇率 1:1,名称:COMPOUND ETHER,符号:cETH
- 地址:
0xf3feeab27E8B8b71ED92040be19E5aA80baf9B01
四、价格配置与市场激活
4.1 设置资产价格
在 SimplePriceOracle 中设置各类资产价格:
- cUSD 价格:1 * 10^18(1 美元)
- cETH 价格:2000 * 10^18(2000 美元)
4.2 cToken 参数配置
设置储备金因子
- cUSD:10%(100000000000000000)
- cETH:20%(200000000000000000)
- 激活市场
在 Comptroller 中调用_supportMarket,添加 cUSD 和 cETH - 设置抵押因子
设置 cUSD 抵押率为 60%(600000000000000000)
五、COMP 奖励机制
Compound 的独特之处在于存借双挖的 COMP 奖励机制:
5.1 设置奖励速度
- 通过
_setCompSpeed为每个市场设置 COMP 分配速度 - 速度值表示每个区块分配的 COMP 数量(wei 单位)
- 可设置为 0 禁用奖励,或根据需求调整
5.2 提取 COMP 奖励
用户可随时提取累积的 COMP 奖励:
// 提取所有市场中的 COMP
claimComp(address holder)
// 提取特定市场中的 COMP
claimComp(address holder, CToken[] memory cTokens)
// 高级提取选项
claimComp(address[] memory holders, CToken[] memory cTokens,
bool borrowers, bool suppliers)六、核心功能测试
完成部署后,应对以下核心功能进行测试:
6.1 存款(Mint)测试
用户存入资产获得 cToken:
- 调用
enterMarkets添加抵押资产 - 批准 cToken 合约使用代币
- 调用
mint存入资产并获得 cToken
6.2 借款(Borrow)测试
借用协议中的资产:
- 协议检查用户抵押品价值和账户流动性
- 根据当前利率计算借款利息
- 借款额必须小于可用流动性
6.3 还款(Repay)测试
偿还借款余额:
- 批准 cToken 合约使用还款代币
- 调用
repayBorrow或repayBorrowBehalf - 更新借款余额和利息指数
6.4 取款(Redeem)测试
取回抵押的资产:
- 调用
redeem(按 cToken 数量)或redeemUnderlying(按标的资产数量) - 协议检查账户流动性是否充足
- 根据当前汇率计算可提取数量
6.5 清算(Liquidation)测试
当用户抵押品价值低于清算阈值时:
- 清算者可代为偿还部分债务
- 获得折扣抵押品作为奖励
- 帮助协议减少坏账风险
七、前端集成指南
为部署的协议开发前端界面时,需集成以下核心功能:
- cToken 交互:使用 CErc20Delegator(ERC20 资产)和 CEther(主网币)
- Comptroller 集成:调用
enterMarkets管理用户抵押资产 - 价格查询:从 PriceOracle 获取资产价格
- 奖励查询:查询和提取 COMP 奖励
常见问题
Compound 协议的主要优势是什么?
Compound 通过算法利率模型实现自动化的借贷市场,无需传统中介机构。其核心优势包括实时利率调整、透明的资金利用率、以及通过 COMP 代币实现的社区治理。
部署过程中最常见的问题有哪些?
常见问题包括合约依赖关系配置错误、参数格式不正确(如忘记乘以 10^18)、以及代理合约绑定顺序错误。建议逐步验证每个部署步骤的结果。
如何调整协议的风险参数?
风险参数(如抵押因子、清算激励)由协议管理员通过 Comptroller 合约调整。建议通过时间锁合约进行更改,确保社区有足够时间反应。
利率模型参数如何影响用户体验?
利率模型参数直接影响存借利率。较高的基础利率和乘数会使借款成本更高,而较低的拐点值会使利率更早上升,影响大规模借款的可行性。
Compound 与其他借贷协议有何不同?
Compound 的创新在于其流动性挖矿机制(COMP 奖励),以及通过治理代币实现的去中心化治理。其算法利率模型也较为简单透明,易于理解集成。
部署完成后如何确保协议安全?
应进行全面的功能测试和安全审计,包括利率模型测试、极端市场条件模拟、以及权限控制检查。建议逐步启动协议,先以小规模测试运行。