tcUSD
了解 tcUSD 的铸造、还款、清算、治理方式,以及如何将它用于价格市场抵押品。
tcUSD(Taco USD)是支持 EIP-2612 permit 的 18 位小数 ERC-20 代币。在部署启用该路径时,Timu 合约可以把它作为价格市场共享结算抵押品。
当前 TcUSDCollateralMinterV24 允许你存入治理配置的超额抵押资产,并据此铸造 tcUSD。Minter 会按每种支撑资产分别记录你的抵押品和债务。
tcUSD 不是任何持有人都能对 Minter 抵押品执行 1:1 赎回的凭证。代币持有人不能任选一种底层资产直接赎回。借款人需要偿还自己账本中的债务,并在账户保持健康时提取自己的抵押品。tcUSD 的市场价格可能偏离 1 USD。
可用性
合约已经实现不代表当前应用一定提供完整的 tcUSD 铸造流程。支持网络、Token 与 Minter 地址、已启用支撑资产、预言机、容量上限和暂停状态都取决于具体部署。
交易前请确认当前有效的部署 manifest 或产品配置,并读取最新链上设置。只有 Token 或 Minter 地址,不能证明 Minter 已激活,也不能证明某种支撑资产当前可以铸造新 tcUSD。
两层合约
TcUSD是代币和发行权限层。只有已经激活并获得授权的 Minter 才能创建 tcUSD。Active 和 Frozen 状态的 Minter 都可以销毁 Minter 合约自身持有的 tcUSD,用于还款和恢复。TcUSDCollateralMinterV24是抵押品与债务层。它保管支撑资产,通过已配置的 USD 预言机估值,并处理债务铸造、还款、清算和坏账。
迁移期间,一个 tcUSD Token 可以同时授权多个 Minter。每个 Minter 都有独立的债务账本和风险设置。
借款与还款
除非当前产品提供受支持的封装流程,否则你需要直接与 Active TcUSDCollateralMinterV24 交互。
每个承担风险的调用都带有你签名时显式设定的防护参数:maxDebtAfter 限制铸造后你接受的债务上限,minHealthFactorAfter 限制提取后的健康度下限,expectedOracleDigest 锁定交易必须观察到的预言机读数,deadline 拒绝过期提交。预言机摘要变化、截止时间过期或防护边界被突破时,调用会直接回滚,而不是按意外条件成交。
| 操作 | 结果 | 主要检查 |
|---|---|---|
deposit(collateral, amount) | 向你的账户增加支撑抵押品 | 合约必须收到精确数量;已退役抵押品会被拒绝 |
mint(collateral, amount, maxDebtAfter, expectedOracleDigest, deadline) | 增加债务并向你发送 tcUSD | 铸造已启用、抵押品处于 Active、预言机摘要符合预期、账户健康且全部发行上限允许 |
repay(collateral, amount) | 拉取并销毁 tcUSD,然后减少你的债务 | 金额必须大于零,且不能超过已记录债务 |
withdraw(collateral, amount, minHealthFactorAfter, expectedOracleDigest, deadline) | 返还支撑抵押品 | 提取后健康度、预言机摘要和截止时间 |
repayAndWithdraw(collateral, repayAmount, withdrawAmount, minHealthFactorAfter, expectedOracleDigest, deadline) | 原子完成还款和提取 | 两个金额都必须大于零;提取失败时还款也会一起回滚 |
depositAndMint 在一次调用中组合存款和铸造,并同时接收两组参数。铸造失败时,存款也会一起回滚。
repayFor(account, collateral, amount) 允许第三方提供 tcUSD 偿还他人账本中的债务。付款方不会获得任何抵押品或补偿,借款人的抵押品仍留在 Minter 中。它与 repay 一样从不读取预言机,并且在所有已配置模式下都可用。
存入前,请把支撑代币授权给 TcUSDCollateralMinterV24。还款前,请把 tcUSD 授权给同一个 Minter。TcUSD.permit 可以通过 EIP-2612 签名设置 tcUSD allowance,但调用方仍需通过受支持的交易流程提交 permit 和还款调用。
每个 (account, collateral) 债务账本相互独立。以一种资产存入的抵押品不能支撑另一种资产下的债务,Minter 也不会跨支撑资产合并健康度。
生命周期模式与脱锚门禁
每种支撑资产在其 backing config 中都有一个生命周期模式:
ACTIVE允许对该资产铸造新债务。REDUCE_ONLY和FROZEN禁止新铸造。降低风险的路径仍然可用:你可以增加抵押品、还款、在保持健康的情况下提取,账户也仍可被清算。RETIRED还会禁止新增存款。还款、清算和坏账覆盖仍然可用,但你不能向已退役资产继续追加支撑。
Minter 还可以绑定共享的脱锚监控器。当已绑定的监控器报告脱锚事件进行中时:
- 新铸造会回滚。
- 在仍有未清债务的情况下提取抵押品会回滚,因为在负债时移除支撑属于新增风险。当你在该资产下的已记录债务清零后,提取不再经过脱锚门禁,但仍然需要有效的预言机读数。
- 接受会引入新配置、放宽风险条款或更换已固定预言机身份的待决提案会回滚。纯收紧操作(例如提高模式或降低上限)仍然可用。
观察到资不抵债后铸造也会保持暂停。resumeMinting 仅限 Owner 调用,只要仍存在已记录坏账,或已绑定的脱锚监控器仍报告事件进行中,调用就会回滚。
健康度与发行上限
Minter 根据已配置预言机和代币小数位,把抵押品换算为 USD 价值。预言机必须返回按 1e18 缩放的抵押品 USD 价格。债务使用 18 位小数的 tcUSD/USD 单位。
collateralFactorBps决定初始借款上限:maxDebt = collateralValue × collateralFactorBps / 10,000。liquidationThresholdBps决定清算起点。只有满足debt > liquidationDebt时账户才可被清算,其中liquidationDebt = collateralValue × liquidationThresholdBps / 10,000。liquidationIncentiveBps会提高支付给清算人的抵押品数量。配置校验会限制激励,并要求账户在配置的清算阈值处仍能被完整清算。
可以使用 getAccountHealth(account, collateral) 读取抵押品价值、最大债务、清算债务、当前债务、账户的 healthFactorWad、初始健康状态和可清算状态。
新增发行必须同时满足三层容量限制:
backingConfig中该支撑资产的mintCap限制该资产对应的活跃债务与已记录坏账总和。globalDebtCeiling限制该 Minter 在所有支撑资产下的活跃债务与已记录坏账总和。默认值为零,因此发行初始采用默认拒绝机制。TcUSD.minterMintCap(minter)限制该授权 Minter 在 Token 层记录的净发行量。
把上限或债务天花板降低到当前使用量以下,会阻止继续发行,但不会阻止还款、增加抵押品、保持健康的提取、清算或坏账覆盖。
这些合约不会累计借款利息。已记录债务只会因铸造、还款、清算和坏账覆盖而变化。
预言机检查
Minter 不会信任单纯的非零 getPrice() 返回值。每个依赖价格的操作都会通过绑定读取访问已配置的 backing oracle,并检查:
- 预言机适配器绑定的 base token 必须正是该抵押品代币,且报价单位为 USD。
- 适配器的来源身份(source id、config hash 和运行时代码哈希)必须与排期 backing config 时固定的身份一致。
- 预言机状态为
LIVE,sequencer 报告为健康,价格非零且与风险快照内部一致。 - 观测值仍处于有效窗口内。携带
expectedOracleDigest的交易还要求预期摘要匹配当前结果;健康度读取不接收该交易保护参数。
绑定失败可能返回 BackingConfigInvalid,规范价格无效返回 OraclePriceUnavailable,交易摘要不匹配返回 OracleDigestMismatch。适配器失败也可能传递其自身错误。存入抵押品、还款、替他人还款和坏账覆盖从不读取预言机。
清算与坏账
清算是无许可操作。清算人先把 tcUSD 授权给 Minter,再携带 TcUsdLiquidationRequestV24 调用 liquidate:
account和collateral标识借款人的债务账本。maxDebtToRepay是最大值。Minter 最多偿还该数量,且不超过未清债务。minCollateralSeized和maxBadDebtCreated分别限制可扣押的抵押品数量和该次清算可产生的坏账数量。expectedOracleDigest和deadline锁定预言机读数和截止时间。
调用会返回一张回执,包含实际还款额、扣押的抵押品、产生的坏账,以及账户与系统的后续状态。
Minter 销毁实际用于还款的 tcUSD,并把按配置激励计算的支撑抵押品转给清算人。实际销毁和扣押数量都会受剩余债务与抵押品限制。
如果价格跳空导致债务超过剩余抵押品可以支撑的还款额:
- 任何观察到该缺口的成功清算都会立即暂停新增铸造。
- 部分清算可以让缺口继续保留为借款人的活跃债务。
- 剩余抵押品耗尽时,Minter 会关闭该借款人债务,并把未覆盖金额记录到
badDebtByCollateral和totalBadDebt。
Minter 可以向成功的清算人支付配置的补贴,补贴受储备金、每日预算和每借款人预算约束。补贴取决于部署配置,可能为零或已暂停;资格、储备或预算条件不满足时会跳过补贴;实际补贴转账失败仍会使清算回滚。
任何持有现有 tcUSD 的账户都可以先授权 Minter,再调用 coverBadDebt(collateral, amount)。该调用会销毁 tcUSD,并减少已记录坏账和总债务。它不是获得补偿的申领操作,也不会铸造新的支撑资产。
全部坏账覆盖完成后,系统不会自动恢复发行。systemRiskStatus() 返回总债务、坏账、债务天花板、全局天花板剩余容量、暂停状态,以及链上坏账与脱锚条件是否允许恢复。其中 remainingMintCapacity 只反映 globalDebtCeiling,抵押品级和 Token 级上限可能进一步降低实际容量。治理在调用 resumeMinting 前仍需另行评估实时抵押品和预言机状态。
时间锁治理的配置变更
TcUSDCollateralMinterV24 的 backing config 和全局债务天花板变更都遵循两步提案流程:
scheduleBackingConfig(collateral, config)记录待决配置及其生效时间,acceptBackingConfig(collateral)在延迟结束后应用它。scheduleGlobalDebtCeiling(newCeiling)与acceptGlobalDebtCeiling()遵循相同模式。
延迟时长为部署 Minter 时设置的 CONFIG_DELAY。它是部署参数,不是固定的一天常量。
固定的一天 MINTER_AUTHORIZATION_DELAY 适用于 Token 层的 TcUSD Minter 授权和已排期的 Minter 上限变更。抵押 Minter 的提案延迟与它相互独立。
Owner 或 Emergency Guardian 可以无需提案立即收紧:downgradeBackingMode 把支撑资产切换到更严格的模式,pauseMinting 暂停发行。这些操作是单向的,恢复需要 Owner 执行。
有界 Minter 授权
TcUSD 把新增发行权限与恢复销毁权限分开:
- 治理调用
scheduleMinter并设置每个 Minter 的上限。排期本身不会授予权限。 - 固定的一天
MINTER_AUTHORIZATION_DELAY结束后,治理调用activateMinter。激活时会重新校验 Minter 运行时代码哈希、tcUSD 绑定关系和债务报告接口。 - 治理或 Emergency Guardian 可以立即调用
freezeMinter。Frozen Minter 不能继续铸造,但会保留 Burner 权限,使原有账本仍可接受还款、执行清算和覆盖坏账。 - 只有在 Frozen Minter 报告的债务和坏债均为零,且记录的净发行量为零后,治理才能移除它。重新激活需要再次经过延迟授权。
Emergency Guardian 可以立即降低发行风险,包括暂停抵押铸造、冻结 Active Token Minter,以及取消待激活的新 Minter 或待执行的上限提高。Guardian 不能激活 Minter、恢复抵押铸造、提高全局债务天花板或轮换 Guardian 权限。
Token 的 Minter 授权与抵押 Minter 的 mintingPaused 是两个独立门禁。只有两者都允许时才能新增发行。
在价格市场中使用 tcUSD
pvpAMM 池以 tcUSD 作为 ERC-20 抵押代币结算。部署绑定共享脱锚监控时,开放事件也可能禁止池中新开仓、增加流动性及其他新增风险操作。即使 tcUSD 铸造层可以接受多种支撑资产,每个池仍然只使用一种抵押品代币结算。
两套偿付能力相互独立:
- 把借来的 tcUSD 锁入价格仓位、LP 批次或保证金账户,不会减少你的
TcUSDCollateralMinterV24债务。 - 支撑资产下跌时,Minter 可以清算该支撑抵押品,但不会触碰池中已经持有的 tcUSD。
- 关闭池仓位可以取回 tcUSD,但赔付不会自动偿还 Minter 债务。你需要另行还款。
- 池不会读取你的 Minter 健康度,Minter 也不会把你的池仓位或 LP 价值当作支撑资产。
请保留足够的流动 tcUSD 来管理债务。如果全部 tcUSD 都投入交易或流动性,你可能无法在支撑抵押品账户进入可清算状态前及时还款。
部署支持 Cross 交易时,一个 tcUSD 保证金账户可以汇总多个受支持池中的仓位,但这些池的抵押品必须是同一个 tcUSD 地址。详情请参阅仓位模式与保证金账户。
签名前检查
- 从当前有效的部署来源确认
TcUSD与TcUSDCollateralMinterV24地址。 - 检查
TcUSD.minterStatus(minter)、minterMintCap(minter)和minterNetIssued(minter)。 - 检查
backingConfig(collateral),包括mode、预言机、抵押因子、清算阈值、激励和铸造上限,并用pendingBackingConfig(collateral)查看已排期的变更。 - 检查
systemRiskStatus()中的全局天花板容量、坏账和铸造暂停状态,并分别检查另外两层发行上限。 - 在预言机价格可用时,检查你的
collateralOf(account, collateral)、debtOf(account, collateral)和getAccountHealth(account, collateral)结果(含healthFactorWad)。 - 确认本次操作使用了正确的代币 allowance。