集成 Comptroller
介绍
Comptroller 是 JustLend DAO 协议的风险管理模块。 它决定了用户应该保留多少抵押品以避免清算。
Comptroller 作为一个可升级的合约来实现。 入口是 Unitroller; 实施是 Comptroller。
相关方法
市场
enterMarkets()
调用此方法会进入一个或多个市场进行抵押或借贷。
参数 | 类型 | 描述 |
---|---|---|
cTokens | address[] | 待加入市场的地址列表 |
返回值:对于每个市场,返回 0 即为成功加入,否则返回相应错误码
exitMarket()
调用这个方法将退出后一个当前加入的市场。
参数 | 类型 | 描述 |
---|---|---|
cTokenAddress | address | 待退出市场的地址 |
返回值:成功时返回 0,否则返回相应错误码
getAssetsIn()
调用这个方法将返回已加入的市场列表。
参数 | 类型 | 描述 |
---|---|---|
account | address | 待查询加入市场信息的地址 |
返回值:已加入的市场列表
markets()
调用这个方法将返回指定市场的状态(isListed, collateralFactorMantissa, comped)
参数 | 类型 | 描述 |
---|---|---|
cTokenAddress | address | 市场地址 |
返回值 | 类型 | 描述 |
---|---|---|
isListed | bool | 是否能被 comptroller 识别 |
collateralFactorMantissa | uint | 可借的数目(乘以 1e18) |
comped | bool | 借款和抵押人是否能获得 JST 分红 |
抵押和清算
getAccountLiquidity()
调用这个方法将返回用户的流动性及短缺数(由于comptroller选用无符号的 uint,用 shortfall 来体现短缺)。
参数 | 类型 | 描述 |
---|---|---|
account | address | 待查询的地址 |
返回值 | 类型 | 描述 |
---|---|---|
error | uint | 0 时即为成功,否则返回相应错误码 |
liquidity | uint | 当前的流动性 |
shortfall | uint | 流动性短缺。该值不为 0 时表示当前用户可能会被清算 |
closeFactorMantissa()
调用此方法获取可清算账户应在单次清算中偿还的百分比。范围为 0%-100%。该方法的计算结果适用于单一资产。
返回值:close factor, 乘以 1e18
liquidationIncentiveMantissa()
调用这种方法可以获得清算人的激励,这个激励是针对水下账户的。其中一部分将根据抵押份额分配给 jToken 储备金。
返回值:清算激励,乘以 1e18
重要事件
事件 | 描述 |
---|---|
MarketEntered(address cToken, address account) | 成功加入市场时发出 |
MarketExited(address cToken, address account) | 成功退出市场时发出 |
错误码
序号 | 值 | 描述 |
---|---|---|
0 | NO_ERROR | 成功 |
1 | UNAUTHORIZED | 调用者无权限 |
2 | COMPTROLLER_MISMATCH | 清算不能由不同的 comptroller执行 |
3 | INSUFFICIENT_SHORTFALL | 账户余额不足 |
4 | INSUFFICIENT_LIQUIDITY | 账户流动性不足 |
5 | INVALID_CLOSE_FACTOR | close factor 非法 |
6 | INVALID_COLLATERAL_FACTOR | collateral factor 非法 |
7 | INVALID_LIQUIDATION_INCENTIVE | 清算激励非法 |
8 | MARKET_NOT_ENTERED | 账户尚未加入该市场 |
9 | MARKET_NOT_LISTED | 该市场尚未被 comtroller 列出 |
10 | MARKET_ALREADY_LISTED | 该市场已被列出 |
11 | MATH_ERROR | 数学计算错误 |
12 | NONZERO_BORROW_BALANCE | 已有借入余额,无法完成操作 |
13 | PRICE_ERROR | comptroller 无法获取价格 |
14 | REJECTION | comptroller 拒绝了请求 |
15 | SNAPSHOT_ERROR | comptroller 无法从市场上获得账户借款和汇率。 |
16 | TOO_MANY_ASSETS | 加入的市场数目超过限制 |
17 | TOO_MUCH_REPAY | 偿还数额超过限制 |
失败信息
序号 | 值 |
---|---|
0 | ACCEPT_ADMIN_PENDING_ADMIN_CHECK |
1 | ACCEPT_PENDING_IMPLEMENTATION_ADDRESS_CHECK |
2 | EXIT_MARKET_BALANCE_OWED |
3 | EXIT_MARKET_REJECTION |
4 | SET_CLOSE_FACTOR_OWNER_CHECK |
5 | SET_CLOSE_FACTOR_VALIDATION |
6 | SET_COLLATERAL_FACTOR_OWNER_CHECK |
7 | SET_COLLATERAL_FACTOR_NO_EXISTS |
8 | SET_COLLATERAL_FACTOR_VALIDATION |
9 | SET_COLLATERAL_FACTOR_WITHOUT_PRICE |
10 | SET_IMPLEMENTATION_OWNER_CHECK |
11 | SET_LIQUIDATION_INCENTIVE_OWNER_CHECK |
12 | SET_LIQUIDATION_INCENTIVE_VALIDATION |
13 | SET_MAX_ASSETS_OWNER_CHECK |
14 | SET_PENDING_ADMIN_OWNER_CHECK |
15 | SET_PENDING_IMPLEMENTATION_OWNER_CHECK |
16 | SET_PRICE_ORACLE_OWNER_CHECK |
17 | SUPPORT_MARKET_EXISTS |
18 | SUPPORT_MARKET_OWNER_CHECK |
Last updated