paint-brush
Radix的资产导向交易:让交易变得有意义经过@RadixDLT
9,832 讀數
9,832 讀數

Radix的资产导向交易:让交易变得有意义

经过 Radix Publishing12m2023/06/28
Read on Terminal Reader

太長; 讀書

Radix 的智能合约架构将平台上的一切赋予了一切。 Radix 交易包含面向资产的指令的“清单”,使交易易于理解、可组合且非常强大。 Radix 交易的设计始于直观的用户期望和控制的首要原则。
featured image - Radix的资产导向交易:让交易变得有意义
Radix Publishing HackerNoon profile picture


上一篇文章中,我们讨论了当今区块链交易的概念如何使得无法解决 DeFi 用户和开发者遇到的几个严重问题——阻碍 DeFi 和 Web3 主流潜力的问题。


大多数智能合约 L-1 平台的设计将交易限制为发送到黑盒智能合约的简单消息,而这种限制意味着交易根本不够灵活、强大或透明


真正解决问题的唯一方法是重新定义区块链上交易的含义,而这正是 Radix 所做的。 Radix 交易(在巴比伦网络上,包括Radix独特的智能合约能力)包含面向资产的指令的“清单”,使交易易于理解、可组合且非常强大。


让我们来谈谈 Radix 交易是什么,以及它们为用户和开发人员带来的一些令人惊奇的事情。

重新定义“交易”

暂时忘掉技术,理想的交易应该是什么样的?


应该包含什么,以便它足够灵活,可以完成所有使 Web3 和 DeFi 令人兴奋、并且对用户而言易于理解和安全的事情?


作为起点,让我们看一下现实世界中的交易,它做了一些有用的事情,并且对任何人来说都已经很容易理解。以使用 DEX 的现实版本为例:货币兑换亭。


想象一下我是顾客,走到机场的兑换柜台兑换货币。我可以这样描述交易:


  • 我从钱包里拿出20美元放在柜台上。

  • 我通知外汇柜员我想用20 美元兑换英镑

  • 出纳员拿走了我的美元,在电脑上敲了一下,然后把16.08 英镑放在柜台上。

  • 我对得到的汇率很满意,拿走了英镑,然后把它放进了我的钱包里。


在这个典型的现实场景中,虽然我无法控制交易所内部如何开展业务,但完全可以控制对我来说重要的事情:从我的钱包中取出资产,将资产提供给交易所并附上我的指示。想要,接受(或拒绝)他们回馈给我的东西,并将资产放回我的钱包。


每当我与某人互动并且涉及我的资产时,对对我来说重要的事情的了解和控制是一种自然而明显的期望。我控制哪些资产离开我的钱包,我指定将它们交给谁以及我想要什么,并且我可以看到什么返回给我并批准。从根本上来说,这就是“交易”这个词对我在现实世界中的意义。如果区块链交易也能这样运作岂不是很好?


在 Radix 上,他们做到了。 Radix 交易的设计始于直观用户期望和控制的首要原则,并以同样的方式在 Radix 网络上建模交易。

让交易变得有意义

对我来说,上述现实世界交易最重要的是,它直接描述了我的钱包和交易所之间的资产流动。为了让 Radix 交易能够像这样工作,平台设计必须从资产开始。幸运的是,Radix 平台设计的决定性特征之一(来自Radix引擎虚拟机Scrypto 智能合约语言)是网络对资产和资产行为有原生的理解


当涉及到数字所有权时,这种“以资产为导向”的架构为平台上的所有内容提供了直观的行为。代币和 NFT 不是智能合约中的余额;而是智能合约中的余额。它们就像物理物体一样从一个地方移动到另一个地方。用户帐户不仅仅是密钥对;它们是资产的容器,用户有权提取或管理其接受存款类型的规则。智能合约不仅限于接受消息;他们可以接受“桶”的资产作为投入——就像在交易柜台上推钱一样。


这些平台功能提供了在 Radix 上重新制定交易定义所需的工具,以便它们直观且可预测地工作,类似于现实世界的交易。


Radix 交易是指令的“清单”,直接描述账户和组件之间的资产移动(Radix 的智能合约形式)。


这是一个真实的交易清单(为了清楚起见,没有地址)描述了像我们现实世界的交易示例一样的交易:



请注意,您查看的不是摘要 - 这实际上是真实 Radix 交易的内容!与用户描述现实世界交易的方式类似,清单根据对用户重要的资产移动来描述交易。


以下是此清单的 4 条指令中发生的情况:


  1. 我告诉我的一个账户提取 20 美元代币。 (我预计 20 美元代币会返回到所谓的“交易工作台”,您可以将其视为兑换柜台。这只是资产在交易期间移动时放置的临时位置。)
  2. 我把工作台上的 20 美元扫掉,放进一个“桶”里。 (存储桶只是我可以传递给其他事物的资产容器。)
  3. 我直接将美元桶传递给交换组件的“交易”方法。 (我预计交易所会计算出汇率并将一些英镑代币返回到操作台上。)
  4. 我把工作台上的东西扫回钱包里。


我签署了这笔交易——这就是我的账户知道我可以提取 20 美元代币的方式——并将其提交到网络。


就像现实世界的场景一样,虽然我可能无法控制交易所的内部运作,但我确实可以直接控制对我来说重要的事情:进出我的账户的代币,以及我想要与之交互的内容。


与仅向智能合约发送消息的交易相比,这已经是一个巨大的改进。但还缺少一些东西……

让用户掌控

在现实世界的示例中,在接受交易之前,我确保20 美元能获得16.08 英镑(可能基于当前汇率和预期费用)。难道我不应该期望在签署并提交之前能够对 Radix 交易执行同样的操作吗?


事实上,我(在钱包软件的帮助下)可以通过向交易清单添加指令来完成同样的事情。这是这里倒数第二条“ASSERT_WORKTOP_CONTAINS_BY_AMOUNT”指令:



清单中的说明是“断言”工作台至少包含16.08 英镑代币,然后我才能将存款存回我的帐户。这意味着,当网络处理此交易时,如果该断言不成立(例如,如果交易所仅返回15 GBP ,或者完全返回了错误类型的代币),则该交易将被网络拒绝。整件事不会发生,因为我没有得到我所期望的。


这是可行的,因为事务清单是原子的。这只是一种奇特的说法,即事务清单中的所有内容都必须成功运行而没有问题,否则什么都不会发生。


这是非常强大的。就像现实世界的交换一样,我根本不需要关心内部交换逻辑。我得到了保护,免受诸如滑点或抢先遇到我不想要的结果之类的情况的影响,这种方式完全在我的控制之下,而不依赖于智能合约逻辑。


Radix 钱包可以直接将我作为用户的期望添加到我的交易清单中,并且网络将保证所有这些期望得到尊重 - 否则我的资金永远不会离开我的口袋。

修复交易用户体验

以这种方式构建交易也正是让 Radix Wallet 为用户提供 Web3 资产交易主流就绪所需的用户体验所需的。


要了解这意味着什么,我们的交换交易将如何在 Radix 钱包中呈现给用户:



该视图不是由交易所 dApp 创建的。这是 Radix 钱包本身通过直接读取交易本身的内容来安全地总结对我来说重要的事情。如果您再次查看上面的交易清单,您可能会看到 Radix Wallet 如何自动将其转换为用户的摘要 UI:


  • 提现:账户提现直接显示,钱包可以看到钱包用户拥有哪些账户。
  • 使用 dApp:交易中涉及的其他组件被列为用户可理解的 dApp。 (要了解 Radix 钱包如何做到这一点,请查看 Radix 的dApp定义系统允许开发人员将组件与其 dApp 的清晰账本描述相关联。)
  • 存款:用户账户的存款也会直接显示。交易清单中没有指定数量的任何存款都会通过交易预览运行进行“估算”,并根据用户偏好自动添加“保证”(我们之前描述的“断言”指令)。
  • 交易费:当然,钱包会显示所需的交易费(更多信息见下文)。


结果是对用户有意义且相关的交易摘要,保证准确且完全无需信任。用户确切地知道如果他们签名,他们的帐户和资产将会发生什么——正如他们所期望的那样。当堆栈的每个部分都被设计为协同工作以实现主流产品时,您不必为了去中心化而放弃良好的用户体验。

清晰、灵活的身份验证

我们来谈谈Radix交易工具箱中的另一个工具。


Radix Engine 虚拟机包括一个强大的内置身份验证系统,用于使用“徽章”的组件。就像钱包里的会员卡一样,徽章是您拥有的资产,您可以在交易中“出示”证明。组件可以检查您是否已提供给定的证据作为执行某些操作的先决条件。


出示徽章证明只是交易清单中的另一条指令,该指令要求持有徽章的账户提供该证明。这就像从我真正的钱包里拿出一张会员卡给别人看一样。


这意味着 Radix 钱包可以再次向用户准确显示正在发生的情况。想象一下,我们的交易所 dApp 需要查看我持有徽章的证据,表明我已经完成了第三方的一些 KYC 检查。结果是一个如下所示的交易:



我再次清楚地看到正在出示给定的徽章,并且可以在签名之前决定我是否对此感到满意。

无代码、按需原子可组合性

现在我们来谈谈 Radix 交易的灵活性和强大功能。交易清单的超能力之一是能够在单个原子交易中“组合”多个 dApp,而无需智能合约代码。


想象一下,我想从借贷 dApp 智能合约中获取一笔贷款,然后使用该贷款通过 DEX 智能合约进行特定交易。我可能想确保只有在我确实能够进行该交易的情况下才可以获得贷款。


在其他网络上,您只有一个选择:编写并部署一个特殊的智能合约,您可以调用它来烘焙此逻辑。部署后,该智能合约将在交易中接收您的请求,调用贷款智能合约,尝试调用 DEX(假设我已收到贷款资金),并确保检查 DEX 交换是否成功。这是一个多步骤的过程,需要智能合约专业知识、需要时间、目的单一,而且网络费用通常非常昂贵。


在 Radix 上,它只是一些指令的交易清单


  • 调用贷款组件取出贷款
  • 将借出的代币放入桶中并传递给DEX
  • 断言DEX 返回了您期望的结果(如果不是这样,则交易失败)
  • 将结果存入您的帐户


您可以在简单的 Web 前端中按需构建这个简单的交易清单。无需智能合约代码或提前部署,无需对智能合约结果进行详细检查;您只需描述您希望资产如何在您的账户和 dApp 组件之间移动并提交。


这开辟了许多新的可能性。帮助用户找到最佳交易路线的 DeFi dApp 的整个部分可以纯粹作为网站前端,由从未接触过智能合约代码的开发人员构建。高度复杂的金融协议组合可以实时拼接在一起,以利用短暂的机会。在事务中使用“断言”护栏,可以对所需的最终结果进行明确和直接的限制,而无需关心被调用组件的内部工作原理。

dApp 支付的网络费用

对于开发者来说,这是 Radix 交易的另一个重要功能。许多 dApp 开发者希望将网络费用视为他们为用户承担的基础设施成本,因此用户永远不必考虑它们。例如:也许他们的用户只想用 USDC 进行交易而从不接触 ETH,或者他们只是想将其作为一种无形的好处提供给用户,就像商家在运行客户的借记卡时支付 Visa 交易费一样。


当前的交易使这成为不可能——签名者必须是费用支付者。在Radix上,费用支付更加灵活;任何东西都可以在交易过程中支付。


事实上,当我早些时候向您展示交易清单时,我有点作弊了。在用户支付交易费用的典型情况下,用户的帐户之一会收到一条额外的明显指令,以“锁定”交易的网络费用。但是,如果其他人愿意在交易过程中锁定费用,则不需要用户锁定该费用。


例如:假设我是一个交易所 dApp 的已知注册用户,他们希望在我使用他们的系统时为我支付网络费用。他们向我发放了我在一个帐户中持有的代表我注册的用户徽章资产。现在在交易中,我可以将该徽章呈现给交易所组件(就像我们之前看到的 KYC 徽章一样),交易所可以检查该证明,然后锁定交易费用。如果这样做,我的 Radix 钱包会发现不需要额外的费用锁定,就好像网络费用神奇地为零。

关于分片的最后说明

对于那些喜欢深入研究技术的人来说,Radix 的交易模型还有另一个奇妙的好处:它的分片能力很好。


展望西安网络升级时Radix大规模并行化Cerberus共识协议(最近经过同行评审)将推出以提供无限的可扩展性,因此交易模型的适合至关重要。


为了实现大规模并行性, Cerberus 依赖于能够分离帐户和组件的状态跨越几乎无限数量的分片(或者“线程”可能是一个更具描述性的术语),同时能够具体知道哪些分片必须聚集在一起以达成每笔交易的共识。


从表面上看,这可能有点像 Cardano,它将其状态分散到称为“eUTXO”的状态位中。然后,卡尔达诺交易(类似于比特币)包括直接指定使用哪些 eUTXO 来创建给定交易的结果。这样做的问题是它会产生争用。给定的智能合约(例如 DEX)可能有一个许多人同时尝试与之交互的代币池。如果交易从该池中选择单个代币 eUTXO 来使用,则几乎可以保证客户经常会选择相同的 eUTXO,从而导致许多交易失败,即使池中有大量代币可以满足每个人的需求。


相反,在 Radix 上,交易清单中的指令列表是意图的表达。我不需要指定要使用的各个状态;我只需要指定我想要与之交互的帐户和组件 - 正如我自然想要做的那样。


然后,当交易实际由 Radix 网络处理时,该意图可以确定性地转化为需要更新的状态的定义,以及哪些分片必须参与共识。这意味着与同一个智能合约交互的两笔交易不会自动产生一场只有一个交易能够成功的竞赛。 10 个人可以可靠地提交一笔交易,从 50 个代币池中同时提取 5 个代币,而且他们都会顺利地完成一个又一个的操作。

底线

通过重新定义 Radix 上所有交易的工作方式,利用 Radix 原生的面向资产的功能,多个开发人员和用户的问题就迎刃而解了。这种解决方案无法修补到现有网络上 - 有关智能合约、资产和交易如何工作的所有假设都已融入其协议和虚拟机设计中。


Radix 的新交易形式与 Scrypto 智能合约功能以及 Radix 主网上的全新 Radix 钱包一起在“Babylon”版本中推出。