用于铸造和赎回 FRAX 的合约,以及回购多余抵押品。
⚠️ 此池已被弃用,取而代之的是 FRAX V2 及更高版本的机制 ⚠️
Frax Pool 合约由治理系统部署和管理,这意味着在治理提案成功并执行后,可以随时添加新的抵押类型。当前池为 USDC,未来池将开放更多的抵押类型。
USDC: 0x3C2982CA260e870eee70c423818010DfeF212659
Frax Pool 是一个智能合约,通过抵押品向用户铸造 FRAX 代币,或通过赎回发送到合约中的 FRAX 代币来返回抵押品。每个 Frax Pool 接受不同类型的抵押品。Frax Pools 可以采用任何类型的加密货币,但由于其价格波动较小,稳定币的实现最为简单。Frax 旨在接受任何类型的加密货币作为抵押品,但在初始阶段优先选择低波动性的池,因为它们不会导致抵押比率剧烈变化。有一些有前景的新项目,如 Reflex Bonds,能够抑制其基础加密资产的波动性。未来,Reflex Bonds 可能成为理想的 FRAX 抵押品。新的 Frax Pools 可以通过 FXS 治理投票添加。
每个池合约都有一个池上限(可存储以铸造 FRAX 的最大抵押品)和资产的价格馈送。创世时的初始 Frax Pool 将是 USDC(美元硬币)和 USDT(泰达币),因为它们具有较大的市值、稳定性,并且在以太坊上可用。
这些池通过对 FRAX 稳定币(FRAX)和 FRAX 股份(FXS)合约的授权调用来铸造和赎回协议代币。
该合约有 3 个铸造功能:mint1t1FRAX()
、mintFractionalFRAX()
和 mintAlgorithmicFRAX()
。合约还具有与铸造功能对应的 3 个赎回功能:redeem1t1FRAX()
、redeemFractionalFRAX()
和 redeemAlgorithmicFRAX()
。
这些功能被分为 1 对 1、分数和算法三个阶段,以优化 Gas 使用。1 对 1 的铸造和赎回功能仅在抵押比率为 100% 时可用。分数铸造和赎回功能仅在抵押比率为 99.99% 到 0.01% 之间可用。算法铸造和赎回功能仅在抵押比率为 0% 时可用。
每个铸造和赎回功能都有一个 AMOUNT_out_min
参数,用于指定期望从交易中获得的最低代币单位。这在提交交易时作为滑点容忍度的限制,因为价格可能会在创建交易和被包含在区块中的时间之间更新。
https://docs.openzeppelin.com/contracts/3.x/api/access#AccessControl
池中抵押代币的实例。
抵押代币的地址。
池子的所有者列表。
预言机合约的地址。
FRAX 合约的地址。
FXS 合约的地址。
时间锁合约的地址。
FXS 合约的实例。
FRAX 合约的实例。
预言机合约的实例。
记录给定地址的赎回余额。赎回者不能在同一个区块中同时请求赎回和实际赎回他们的 FRAX。这是为了防止闪电贷攻击,可能导致 FRAX 和/或 FXS 价格崩溃。赎回者必须等到下一个区块。这一特定变量用于赎回的 FXS 部分。
记录给定地址的赎回余额。赎回者不能在同一个区块中同时请求赎回和实际赎回他们的 FRAX。这是为了防止闪电贷攻击,可能导致 FRAX 和/或 FXS 价格崩溃。赎回者必须等到下一个区块。这一特定变量用于赎回的抵押品部分。
redeemCollateralBalances
的总和。
redeemFXSBalances
的总和
记录给定地址最后一次赎回的区块。
池子可以接受的最大抵押品金额。
铸造暂停的 AccessControl
角色。
AccessControl
role for the redeem pauser.
赎回暂停的 AccessControl
角色。
铸造是否已暂停。
赎回是否已暂停。
回购是否已暂停。
unclaimedFXS
返回未领取的 FXS 总金额。
unclaimedCollateral
返回未领取的抵押品总金额。
collatDollarBalance
返回池中抵押代币的总余额(以美元计)。
availableExcessCollatDV
返回池中抵押代币的多余余额(超过抵押比率所需的部分,以美元计)。
getCollateralPrice
返回池中抵押品的价格(以美元计)。
mint1t1FRAX
从抵押品中铸造 FRAX。仅在抵押比率为 1 时有效。
mintFractionalFRAX
从抵押品和 FXS 中铸造 FRAX。仅在抵押比率介于 0 和 1 之间时有效。
mintAlgorithmicFRAX
从 FXS 中铸造 FRAX。仅在抵押比率为 0 时有效。
redeem1t1FRAX
从 FRAX 赎回抵押品。仅在抵押比率为 1 时有效。必须在之后调用 collectionRedemption()
以进行收集。
redeemFractionalFRAX
Redeem collateral and FXS from FRAX. Valid only when the collateral ratio is between 0 and 1. Must call collectionRedemption()
later to collect.
redeemAlgorithmicFRAX
Redeem FXS from FRAX. Valid only when the collateral ratio is 0. Must call collectionRedemption()
later to collect.
collectRedemption
After a redemption happens, transfer the newly minted FXS and owed collateral from this pool contract to the user. Redemption is split into two functions to prevent flash loans from being able to take out FRAX / collateral from the system, use an AMM to trade the new price, and then mint back into the system.
buyBackFXS
Function can be called by an FXS holder to have the protocol buy back FXS with excess collateral value from a desired collateral pool. This can also happen if the collateral ratio > 1
recollateralizeAmount
When the protocol is recollateralizing, we need to give a discount of FXS to hit the new CR target. Returns value of collateral that must increase to reach recollateralization target (if 0 means no recollateralization)
recollateralizeFrax
Thus, if the target collateral ratio is higher than the actual value of collateral, minters get FXS for adding collateral. This function simply rewards anyone that sends collateral to a pool with the same amount of FXS + .75%. Anyone can call this function to recollateralize the protocol and take the hardcoded .75% arb opportunity
toggleMinting
Toggle the ability to mint.
toggleRedeeming
Toggle the ability to redeem.
toggleBuyBack
Toggle the ability to buyback.
setPoolCeiling
Set the pool_ceiling
, which is the total units of collateral that the pool contract can hold.
setOracle
Set the oracle_address
.
setCollateralAdd
Set the collateral_address
.
addOwner
Add an address to the array of owners.
removeOwner
Remove an owner from the owners array.
onlyByOwnerOrGovernance
Restrict actions to the governance contract or the owner(s).
notRedeemPaused
Ensure redemption is not paused.
notMintPaused
Ensure minting is not paused.