合约结构划分
Compound 合约模块划分
Compound
默认合约目录结构如下:
/contracts
├── Governance
| ├── Comp.sol
| ├── GovernorAlpha.sol
| ├── GovernorBravoDelegate.sol
| ├── GovernorBravoDelegateG1.sol
| ├── GovernorBravoDelegateG2.sol
| ├── GovernorBravoDelegator.sol
| └── GovernorBravoInterfaces.sol
├── Lens
| └── CompoundLens.sol
├── BaseJumpRateModelV2.sol
├── CDaiDelegate.sol
├── CErc20.sol
├── CErc20Delegate.sol
├── CErc20Delegator.sol
├── CErc20Immutable.sol
├── CEther.sol
├── CToken.sol
├── CTokenInterfaces.sol
├── Comptroller.sol
├── ComptrollerG7.sol
├── ComptrollerInterface.sol
├── ComptrollerStorage.sol
├── DAIInterestRateModelV3.sol
├── EIP20Interface.sol
├── EIP20NonStandardInterface.sol
├── ErrorReporter.sol
├── ExponentialNoError.sol
├── InterestRateModel.sol
├── JumpRateModel.sol
├── JumpRateModelV2.sol
├── Maximillion.sol
├── PriceOracle.sol
├── Reservoir.sol
├── SafeMath.sol
├── SimplePriceOracle.sol
├── Timelock.sol
├── Unitroller.sol
└── WhitePaperInterestRateModel.sol
为了方便理解,我们根据模块划分将代码目录调整成如下结构
/contracts
├── CToken // CToken相关
| ├── CDaiDelegate.sol
| ├── CErc20.sol
| ├── CErc20Delegate.sol
| ├── CErc20Delegator.sol
| ├── CErc20Immutable.sol
| ├── CEther.sol
| ├── CToken.sol
| └── CTokenInterfaces.sol
├── Comptroller // 审计相关
| ├── Comptroller.sol
| ├── ComptrollerG7.sol
| ├── ComptrollerInterface.sol
| ├── ComptrollerStorage.sol
| └── Unitroller.sol
├── Governance // 治理相关
| ├── Comp.sol
| ├── GovernorAlpha.sol
| ├── GovernorBravoDelegate.sol
| ├── GovernorBravoDelegateG1.sol
| ├── GovernorBravoDelegateG2.sol
| ├── GovernorBravoDelegator.sol
| └── GovernorBravoInterfaces.sol
├── InterestRateModel // 利率模型
| ├── BaseJumpRateModelV2.sol
| ├── DAIInterestRateModelV3.sol
| ├── InterestRateModel.sol
| ├── JumpRateModel.sol
| ├── JumpRateModelV2.sol
| └── WhitePaperInterestRateModel.sol
├── Lens // 聚合查询
| └── CompoundLens.sol
├── PriceOracle // 价格预言机
| ├── PriceOracle.sol
| └── SimplePriceOracle.sol
├── interfaces // 接口
| ├── EIP20Interface.sol
| └── EIP20NonStandardInterface.sol
└── utils // 其他全局基础工具类
├── ErrorReporter.sol
├── ExponentialNoError.sol
├── Maximillion.sol
├── Reservoir.sol
├── SafeMath.sol
└── Timelock.sol
小插曲: 上面的目录结构生成使用了tree-cli工具,执行以下命令
tree --base contracts -a
模块功能
Compound
的主要核心模块有以下几点
- InterestRateModel: 利率模型抽象合约,分为 V1 和 V2 版本。V2 比 V1 增加了拐点型利率模型
- Comptroller: 审计合约,对存取借贷等核心业务进行审查和校验
- PriceOracle: 价格预言机,用来获取资产价格
- CToken: 也称为生息代币,是用户在 Compound 上存入资产的凭证
- Governance: 治理相关,不属于核心业务逻辑
- Lens: 聚合查询,方便前端调用接口。不属于核心业务逻辑