Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-5744: 潜在可替代代币

一种代币接口,这种代币会在一段时间后变得可替代。

Authors Cozy Finance (@cozyfinance), Tony Sheng (@tonysheng), Matt Solomon (@mds1), David Laprade (@davidlaprade), Payom Dousti (@payomdousti), Chad Fleming (@chad-js), Franz Chen (@Dendrimer)
Created 2022-09-29
Discussion Link https://ethereum-magicians.org/t/eip-5744-latent-fungible-token/11111
Requires EIP-20, EIP-2612

摘要

以下标准是 EIP-20 的扩展,它使代币在一段初始的不可替代期后变为可替代。 一旦铸造,代币在达到成熟期之前是不可替代的。 到期后,它们将变得可替代,并且可以像标准 EIP-20 代币一样进行转移、交易和使用。

动机

用例示例包括:

  • 在特定日期或条件满足之前不会激活的收据代币。例如,这可以用于在借贷协议中强制执行最短存款期限。
  • 在归属期结束后才能转移或使用的归属代币。

规范

所有潜在可替代代币必须实现 EIP-20 来表示该代币。 balanceOftotalSupply 返回所有代币的数量,而不仅仅是已成熟的可替代代币。 必须向 ABI 添加一个名为 balanceOfMatured 的新方法。 此方法返回给定地址已成熟代币的余额:

function balanceOfMatured(address user) external view returns (uint256);

必须添加一个名为 getMints 的附加方法,该方法返回给定地址的所有铸币元数据的数组:

struct MintMetadata {
  // 铸造的代币数量。
  uint256 amount;
  // 铸造的时间戳,以秒为单位。
  uint256 time;
  // 在这些代币成熟并变得可替代之前的延迟(以秒为单位)。当延迟未知时(例如,如果它依赖于除了简单经过时间之外的其他因素),此值必须为 `type(uint256).max`。
  uint256 delay;
}

function getMints(address user) external view returns (MintMetadata[] memory);

请注意,该实现不要求上述每个元数据参数都存储为 uint256,只是它们作为 uint256 返回。

可以添加一个名为 mints 的附加方法。 此方法返回基于其 ID 的铸币的元数据:

function mints(address user, uint256 id) external view returns (MintMetadata memory);

ID 不是规范性的——它可以是数组中的索引,也可以通过其他方式生成。

transfertransferFrom 方法可以被修改为在转移尚未成熟的代币时恢复。 类似地,任何销毁代币的方法都可以被修改为在销毁尚未成熟的代币时恢复。

所有潜在可替代代币必须实现 EIP-20 的可选元数据扩展。 namesymbol 函数必须以某种方式反映底层代币的 namesymbol

理由

mints 方法是可选的,因为 ID 是可选的。在某些用例中,例如用户最多只有一个铸币的归属,则不需要 ID。

类似地,归属用例可能希望强制执行不可转让代币直到成熟,而具有最短存款期限的贷款收据代币可能希望始终支持转让。

用户持有的铸币数量可能非常大,以至于在单个 eth_call 中返回所有铸币是不切实际的。 这种情况不太可能发生,因此未包含在规范中。 如果对于给定的用例来说很可能出现这种情况,则实现者可以选择实现一种替代方法,该方法返回铸币的子集,例如 getMints(address user, uint256 startId, uint256 endId)。 但是,如果 ID 不是连续的,则可能需要不同的签名,因此未将其包含在规范中。

向后兼容性

此提案与 EIP-20 标准完全向后兼容,并且与其他标准没有已知的兼容性问题。

安全注意事项

不建议迭代大量的铸币数组,因为这非常昂贵,并且如果超出区块 gas 限制并恢复,可能会导致协议或仅仅是用户与其的交互陷入困境。有一些方法可以缓解这种情况,具体取决于实现。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Cozy Finance (@cozyfinance), Tony Sheng (@tonysheng), Matt Solomon (@mds1), David Laprade (@davidlaprade), Payom Dousti (@payomdousti), Chad Fleming (@chad-js), Franz Chen (@Dendrimer), "ERC-5744: 潜在可替代代币 [DRAFT]," Ethereum Improvement Proposals, no. 5744, September 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5744.