Alert Source Discuss
⚠️ Draft Standards Track: ERC

ERC-7621: 篮子代币

抵押的、代币化的资金,具有可调整的权重和储备,以及 LP 代币的铸造/销毁功能。

Authors Dominic Ryder <dom@alvaraprotocol.io>, Callum Mitchell-Clark (@AlvaraProtocol) <callum@alvaraprotocol.io>, Joey van Etten <joe@alvaraprotocol.io>, Michael Ryder <mike@alvaraprotocol.io>
Created 2024-02-11
Discussion Link https://ethereum-magicians.org/t/proposal-for-a-new-eip-erc-the-erc-bts-basket-token-standard/18598
Requires EIP-20, EIP-721

摘要

篮子代币标准(BTS)允许实现多资产代币化基金。该标准为任何人部署独特的、不可替代的 BTS 代币提供了基本功能,这些代币可以包含无限数量的底层 ERC-20 代币。

部署者收到代表其基金所有权的 BTS 代币,以及代表其基金份额百分比的流动性提供者(LP)代币(部署时为 100%,但随着其他钱包的贡献/提取而变化)。每当向 BTS 做出贡献时,就会铸造 BTS LP 代币并将其分发到贡献者的钱包(代表他们在基金中的份额);当从 BTS 中提取资金时,BTS LP 代币将被销毁,资金将返回到提款人的钱包。

BTS 具有重新平衡功能,允许 BTS 所有者更改每个底层代币在基金中所占的百分比份额。在 BTS 被铸造后,可以通过此功能完全删除或添加代币。

通过利用 ERC-721 标准作为铸造 BTS 时所有权的代表性代币,代币化基金也可以在链上进行完全管理和转移。

动机

动机是提供基础设施,以实现在链上创建和管理资产支持的代币化投资基金,因为目前不存在这种标准化的基础设施。提供必要的基础设施将有助于促进传统基金管理向区块链的转移。没有现有的标准能够实现这一点,因为它们缺乏第三方贡献所需的必要功能,即在做出贡献时铸造 LP 代币。ERC-7621 是唯一通过重新平衡功能(有效基金管理所必需),以及 LP 代币分配和销毁(第三方参与所必需)来实现这一点的代币标准。

规范

BTS

BTS 是一个智能合约,能够创建由资产支持的链上代币化基金,允许用户通过初始化、贡献、提取、重新平衡和代币分配等功能来管理资产和流动性。

目的

BTS 的目的是允许任何人构建一个完全由链上流动性支持的链上代币化基金。

主要功能

initialize:使用名称、符号、创建者、代币、权重、代币 URI 和可选的自动重新平衡设置来初始化新的 BTS。

contribute():允许用户向篮子中添加 ETH,根据预定义的权重购买相应比例的包含代币。

withdraw(uint256 _liquidity):允许 BTS LP 持有者从篮子中提取资金,接收相应的代币。

withdrawETH(uint256 _liquidity):允许 BTS LP 持有者从篮子中提取 ETH,相当于其 BTS LP 代币的价值。

rebalance(address[] memory _newTokens, uint256[] memory _newWeights):所有者可以手动调整篮子中代币的类型和权重。

getTokenDetails:返回给定索引处代币的详细信息(地址和权重)。

totalTokens:返回篮子中代币的总数。

BTS 代币的分配

BTS 代币的分配发生在铸造函数期间。创建者将 ETH 发送到合约,然后合约根据预定义的权重将 ETH 兑换为用户指定的 ERC-20 代币。交换之后,它使用 BTS 合约的初始化函数为发送者铸造一个 BTS 代币 (NFT) 以及 BTS LP 代币。此 BTS 代币代表所有权,并允许管理 BTS。

BTS LP 代币的分配

BTS LP 代币的分配发生在铸造和贡献函数期间。在将 ETH 兑换为相关的 ERC-20 代币后,合约会铸造 BTS LP 代币(代表用户在 BTS 总额中的份额),然后使用 BTSPair 合约的铸造函数铸造 BTS LP 代币。BTS LP 代币代表用户向指定的 BTS 对 (btsPair) 提供的流动性。分配通过 ContributedToBTS 事件记录。

销毁 BTS LP 代币

BTS LP 代币的销毁发生在 withdraw 函数期间。用户可以调用此函数,指定他们想要提取的 BTS LP 代币数量。然后,合约将指定数量的 BTS LP 代币从用户转移到 BTS 对合约 (btsPair)。调用 IBTSPair 合约的销毁函数,这会减少用户的 BTS LP 代币余额,并返回一个表示提取的底层代币数量的数组。这个数量数组通过 WithdrawnFromBTS 事件记录。

事件

ContributedToBTS(address indexed bts, uint256 amount):当有人向篮子添加 ETH 时的事件。

WithdrawnFromBTS(address indexed bts, uint256[] amounts):当 BTS LP 持有者从篮子中提取代币时的事件。

WithdrawnETHFromBTS(address indexed bts, uint256 amount):当 BTS LP 持有者从篮子中提取 ETH 时的事件。

RebalanceBTS(address indexed bts, uint256[] oldWeights, uint256[] newWeights):当所有者手动重新平衡篮子时的事件。

BTSPair

目的

ERC-20 代币,代表 BTS 中的流动性。

主要功能

initialize:使用名称和代币初始化新的 BTSPair

rebalance():允许所有者手动调整对中代币的类型和权重。

updateTokens(...):允许所有者更改对中代币的类型。

mint(...):创建新的 BTS LP 代币并调整代币储备。

burn(...):销毁 BTS LP 代币并调整代币储备。

理由

向后兼容性

未发现向后兼容性问题。

参考实现

BTS:使用 OpenZeppelin 的 ERC-721 URIStorageOwnable 合约以及用于代币管理和重新平衡的自定义逻辑来实现。

Factory:使用 ClonesUpgradeable 来部署新的 BTSBTSPair 合约。

BTSPair:使用 ERC-20 UpgradeableOwnable 合约以及用于流动性跟踪和重新平衡的自定义逻辑来实现。

IUniswap:未实现,因为它只定义了外部合约的接口。

安全考虑

版权

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

Citation

Please cite this document as:

Dominic Ryder <dom@alvaraprotocol.io>, Callum Mitchell-Clark (@AlvaraProtocol) <callum@alvaraprotocol.io>, Joey van Etten <joe@alvaraprotocol.io>, Michael Ryder <mike@alvaraprotocol.io>, "ERC-7621: 篮子代币 [DRAFT]," Ethereum Improvement Proposals, no. 7621, February 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7621.