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 来表示该代币。
balanceOf
和 totalSupply
返回所有代币的数量,而不仅仅是已成熟的可替代代币。
必须向 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 不是规范性的——它可以是数组中的索引,也可以通过其他方式生成。
transfer
和 transferFrom
方法可以被修改为在转移尚未成熟的代币时恢复。
类似地,任何销毁代币的方法都可以被修改为在销毁尚未成熟的代币时恢复。
所有潜在可替代代币必须实现 EIP-20 的可选元数据扩展。
name
和 symbol
函数必须以某种方式反映底层代币的 name
和 symbol
。
理由
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.