本文档介绍了 Bridged USDC 标准,这是一个在 EVM 区块链上部署 USDC 桥接形式的规范和流程,Circle 可选择在未来无缝升级到原生发行。它概述了桥接合约和 Token 部署的关键步骤,以及在第三方团队和 Circle 共同决定将桥接 USDC Token 合约的所有权安全转移给 Circle 并执行升级到原生 USDC 时所需的操作。
桥接 USDC 标准 是一种规范和流程,用于在 EVM 区块链上部署桥接形式的 USDC,并允许 Circle 在未来无缝升级到原生发行。<sup>1</sup>
其结果是一种安全且标准化的方式,供任何 EVM 区块链和 rollup 团队将桥接 USDC 代币合约的所有权转移给 Circle,以便在双方认为合适时促进升级到原生 USDC。<sup>2</sup>
本文档提供了该流程的高级概述。请注意,这也适用于桥接 EURC(Circle 的欧元支持的稳定币)的实现,因为它们遵循相同的实现。
第三方团队的桥接合约在该过程中起着不可或缺的作用,并且必须是可升级的,以便添加以下功能,这是支持升级过程所必需的。
Circle 建议在 Circle 和第三方团队共同同意进行升级后,通过合约升级将此功能推迟到稍后添加。
桥接合约必须能够暂停桥接,从而能够最终确定桥接代币的供应量,并且该供应量完全由源链上的原生 USDC 数量支持。如何实现这一点由第三方团队决定,但此功能必须在升级之前存在。
升级过程中的最后一步是销毁源区块链桥接合约中锁定的 USDC。为了支持这一点,Circle 将暂时将持有 USDC 余额的桥接合约分配为零授权 USDC 增发者 的角色。这意味着该桥可以销毁自己持有的余额,但不能 增发 新的供应量。
要执行销毁,桥接合约必须公开一个函数,该函数只能由 Circle 控制的帐户调用。此函数的签名将是:
function burnLockedUSDC() external;
具体的实现细节留给第三方团队决定,但至少,该函数必须:
transferUSDCRoles
的同一地址。第三方团队的桥接 USDC 代币合约预计与在其他 EVM 区块链上的原生 USDC 代币合约相同。USDC 使用代理模式,因此该标准适用于实现合约代码和代币代理。
使用相同的代码便于 Circle 进行无需信任的合约验证,并支持与现有 USDC 服务的无缝集成。为了促进这一点,第三方团队应:
从源代码构建 FiatToken 合约。为了确保字节码奇偶校验,使用的 Solidity 编译器配置应与以下设置匹配:
有关 Circle 使用的建议编译器设置,请参阅 foundry.toml。
部署本地编译的 FiatToken 合约。可以在此处找到部署过程的概述。
提取用于生成已部署合约字节码的编译器元数据,并将其提供给 Circle 以支持合约验证过程。 编译器元数据 是一个自动生成的 JSON 文件,通常可以在本地机器的构建目录中找到。
Circle 的存储库配备了构建工具和脚本,可以简化上述过程。第三方团队可以参考此处列出的步骤来运行部署。
Circle 推荐了 命名准则 用于桥接 USDC 或 EURC 代币合约的代币名称和代币符号属性,鼓励第三方团队遵循这些准则。通常 USDC 和 EURC 从 Ethereum 桥接到新的目标区块链,因此,通常使用以下内容:
USDC
EURC
请注意,上面括号中显示的文字将是第三方团队的公司名称。
存储库中有许多参考 部署脚本,这些脚本演示了部署 USDC/EURC 和配置实现的模式。例如,有一个 升级器模式,其中智能合约设置 FiatToken 实现合约并在单个交易中调用初始化函数。
FiatToken 使用 增发者 模式,其中可以通过主 增发者 角色配置 增发者 以 增发 最高允许的数量。将 增发者 模式适应于桥接 USDC 或 EURC 代币合约的一种方法是将目标桥配置为单独的 增发者。
各个 FiatToken 角色(所有者、暂停者、黑名单者、主 增发者)也可以分配给桥接或某些其他可升级合约,只要将来能够添加一个Hook以将角色转移给 Circle。
如果你希望在权限控制的 增发者 配置方面具有更大的灵活性,你可能需要探索 Controller 和 MinterController
合约,它们共同构成了 MasterMinter
模式。
在升级时,有几个 USDC 角色将被转移到 Circle 拥有的地址。具体来说,这些是:
由第三方团队决定如何保护和管理这些角色,作为其原始桥接 USDC 部署及其在潜在升级之前的持续使用的一部分。例如,这些角色可以分配给 EOA,或分配给智能合约(如桥接)。
智能合约所有权:如果角色分配给智能合约(如桥接),则该合约必须公开一个函数,Circle 可以通过智能合约交互来调用该函数,以便在升级时执行角色转移。
EOA 所有权:如果角色分配给 EOA,则合作伙伴必须计划将它们转移到公开相同所需函数的智能合约。
此函数必须具有以下签名:
function transferUSDCRoles(address owner) external;
函数实现细节由合作伙伴决定,但它必须:
burnLockedUSDC
的同一地址。owner
参数中指定的地址。如果 ProxyAdmin 角色未分配给桥接合约,则合作伙伴应将该角色转移到 Circle 在接近升级时指定的地址。
此外,合作伙伴应在将角色转移给 Circle 之前(或同时)删除所有配置的 增发者。
如果你有本文档中未解决的问题,请通过 我们的 Discord 联系我们。我们重视社区的反馈和建议,以改进我们的文档。
- 原文链接: github.com/circlefin/sta...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!