查看原文
其他

InfinitySwap 的 IS20 代币标准:去中心化和可互操作

DFINITY 2022-07-07


代币标准一直是互联网计算机社区的热门话题,每个人都同意它们的重要性,但是由于它们的设计有如此多的可能性,生态系统要达成共识并实现共识一直是一场斗争。


InfinitySwap 的使命一直是将核心 DeFi 功能带入互联网计算机,我们很自豪地详细介绍了 InfinitySwap 代币标准 (IS20) 规范以及它如何在互联网计算机上彻底改变 DeFi 的潜力,在互操作性、模块化和去中心化领域引入了新颖和基本的功能。


下面我们详细介绍 IS20 的规格及其独特之处,请查看我们的 repo,因为我们很想听听您的想法和建议,并尽可能多地与开发人员集成,如果您想在互联网计算机上发行代币,我们有一支称职的团队随时准备支持您的项目。



跨容器调用


目前,IC 上的跨容器调用是不安全的,可能会导致被调用容器阻止调用容器升级的情况,这实际上发生在 IC 的账本代币标准上,导致运行 IC 共识的节点副本紧急升级。


在 InfinitySwap,我们竭尽全力通过使用支持互联网身份的相同容器签名作为跨容器调用的替代品来解决该问题,从而防止了这种攻击。



Cycles 消耗和 DOS 攻击


某些不同标准的交易会产生费用,用于阻止垃圾邮件发送者,尽管如此,不幸的是,仅此一项并不能阻止垃圾邮件发送者耗尽您的令牌 Cycles(用于运行令牌容器的燃料),其他令牌标准不处理 DOS 攻击。


在 IS20 之前,即使攻击者或垃圾邮件发送者没有您的令牌,他们也有可能通过重复的转移调用耗尽容器的 Cycles,当然,这些调用会被拒绝,但它们的调用仍会按照互联网计算机规范消耗 Cycles。


如果攻击者得逞,他们可能会在 IC 上没有任何障碍的情况下产生网络和计算费用,除了容器的交易吞吐量,目前大约每秒 200 条消息。


我们的令牌标准是第一个完全阻止垃圾邮件交易的标准,它使用互联网计算机的 inspect_message 拒绝来自没有足够余额支付最低交易费用的用户的更新调用,使用互联网计算机的 inspect_message 可确保令牌容器不必为这些调用支付费用。


通过以这种方式保护更新调用,我们可以防止令牌容器耗尽 Cycles、脱机以及让攻击者窃取您的 Cycles,与 IS20 一样,无论更新调用被拒绝还是接受,都需要付费。



去中心化 Cycles 充值


IS20 代币标准使社区能够以去中心化的方式为容器的 Cycles 充值,使社区能够支持代币容器的运行,这个运作方式如下。


费用在被转移的原生代币中收取,但这些费用必须转换为 Cycles 来为代币容器提供燃料,在 IS20 中,我们实施了一个去中心化的 Cycles 竞价市场,在定期托管的拍卖中,用户可以为代币容器贡献 Cycles。


他们随后会根据他们贡献的 Cycles 份额获得代币容器累积的费用作为奖励,这确保了代币容器具有去中心化的方式来资助计算并保持容器运行。


从责任的角度以及监管和法律的角度来看,只有一个人负责为容器充值是有问题的,Cycles 市场为社区提供了一种参与和激励充值容器的方式。



互操作性


我们希望我们的代币标准的实施能够被尽可能广泛地使用,因此使其与 ERC20 标准以及基于 IC 的化身(如 DIP20)以及互联网计算机的原生代币(如分类账容器)兼容。


IS20 将包括 IC-ledger 容器的部分接口作为其接口的一部分,该接口将包括一种通过分类账的通知办法验证交易是否已完成的方法。


当通过分类账进行交易时,此信息会被记录下来,并可用作向其他容器和下游 DeFi 应用程序付款的收据,从本质上讲,无论您是想遵循 ERC20 路线还是分类账容器的付款方式,这将由您自行决定使用 IS20。


IS20 存储库包含一个类似于注册表的实用程序,称为工厂,它可以生成其他令牌并维护通过工厂启动的所有令牌的注册表。


注册表对钱包非常有用,因为如果他们希望使用自己的工厂,它们将增强通过我们的平台和通过其他人发布的代币的可发现性,问题是:令牌在哪里,在哪里可以找到它们?我们的答案是类似工厂的注册表。



IC_CDK 存储错误修复


IS20 修复了在之前的令牌标准实现中发现的另外两个漏洞,常用的 ic_cdk 存储中存在一个错误,该错误可能会通过悬空引用导致内存损坏,请参阅附录了解更多详情。



交易费用


在其他标准中,如果下游容器在费用更改时处于执行中期,则下游容器无法知道代币所有者是否更改了费用,虽然相对较少,但这可能导致下游 DeFi 应用程序(例如 AMM)向一方支付的费用超过其公平份额的代币的异常情况。


在 IS20 中,我们在转账中包含了一个限制参数,以确保即使在执行过程中费用发生变化,转账的成本也不会超过预期的限额,其中 limit > transfer amount + original fee。



久经考验


我们的代币实现已经通过了一套单元和功能测试,并由我们的核心开发人员积极维护。



结论


作为 DeFi 特定标准,IS20 并非针对互联网计算机上的所有代币用例而设计,例如治理和社交应用程序,为此,最好在 IC 的 SNS 可用时使用它。


然而,IS20 将使应用程序能够自动与现有的 DeFi 服务套件集成,例如 InfinitySwap AMM,并且不会强迫用户在 ERC20 或类似分类账的 API 之间进行选择。


我们的代币标准在设计时考虑了安全性、去中心化和互操作性这三大支柱,安全性来自于拥有一支优秀的开发团队,该团队成功地修补了漏洞 —— DOS 攻击、内部错误和转移费用流。


去中心化将来自于容器的所有者将不对其充值负责这一事实,这可能由于监管原因而成为采用的障碍,通过创建一个去中心化的 Cycles 市场,我们鼓励社区参与运行代币。


作为我们计划的预览 —— 您将能够在接下来的几周内在我们的测试网上从我们的平台上推出 IS20 代币,这是钱包应用程序,先睹为快。



技术附录


IC_CDK 存储错误修复


更详细地说,ic_cdk 存储在内部使用静态可变二叉树来存储其所有值,通过实现,可以获得对相同值的两个可变引用。这是有问题的,因为:


  • 当从两个单独的函数调用加载值时,对其值的引用可能会被第一个函数调用破坏(如链接 bug 的错误报告中所示);


  • 在更新方法中等待异步调用将切换执行上下文,这意味着在我们等待第一个调用时,另一个调用可以访问和修改存储的值。


为了防止无意中创建悬空引用和其他与内存相关的漏洞,我们编写了自己的容器状态存储实现。


它使用 RefCell 来控制对存储值的访问,无需静态可变进行存储,因此我们不依赖不安全的 Rust 代码,可以充分利用 Rust 的安全保证。



实施


我们的实施遵循干净和模块化的方法,使构建者可以轻松升级令牌标准以满足他们的需求。这些包括:


  • 包含所有外部方法的 API 模块根据方法的原始来源(DIP20 或 IS20)及其执行的功能分为子模块;


  • dip20_transactoins.rs 包含 ERC20 传输的核心功能;


  • dip20_meta.rs 包含设置和检索有关令牌的元信息(名称、符号、徽标等)的方法;


  • is20_notify.rs 包含与账本交易通知相关的方法;


  • is20_auction.rs 包含 Cycles 竞标的方法;


  • is20_manageement.rs 包含一些用于容器元数据管理的附加方法;


  • state.rs 包含容器状态和允许容器升级的方法;


  • ledger.rs 包含用于存储交易历史的辅助方法;


  • types.rs 包含核心类型以及 API 方法的输出类型。


更多信息,请点击




联系渠道


官网

infinityswap.one


Twitter

@infinity_swap


Discord

discord.com/invite/zrsZzR635r


Telegram

t.me/infinityswapofficial


Medium

medium.com/@infinityswap



来源:InfinitySwap

翻译:Catherine



-              -


互联网计算机基础 - 第 1 部分:主体和身份

ORIGYN 基金会与欧足联儿童基金会达成合作

如何对 DeFi 和 NFT 进行“自己的研究”





你关心的 DFINITY 内容
技术进展 | 项目信息 | 全球活动


长按关注 DFINITY 微信公众号

随时答疑解惑


*添加小助手微信 comiocn 进交流社群


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存