作者 | Kevin Britz
在最近被 Coinbase 收购的 Astro Wallet 中,我们花费了过去两年内大部分时间来研究各种形式的经济抽象。我们希望与更多的区块链从业者分享我们的发现,希望它可以作为解决当今去中心化应用所面临的许多 UX 问题的指南。 尽管它不是一个新概念,但以前只有一小部分经济抽象用例在实践上是可行的。在本文中,我们将讨论如何实现针对于经济抽象较为普遍的实施办法。
我们已经看到了该术语较为宽泛的用法,因此,我们首先要给出一个明确的定义。 经济抽象 ——能够以原子的方式,用该区块链上的任意资产支付任何区块链的交易费用和因此产生的后续操作的能力。 让我们举几个例子,以进一步说明该定义:
用户想转账 USDC,但没有 ETH 来支付交易费用。
用户想在 0x v3 中继器上购买 CryptoKitty,其中继器要收取 ZRX 费用,而卖方要 DAI,但用户只有 USDC。
实际上,在大多数区块链上,经济抽象分为两个部分:费用抽象和代币抽象。如果我们能够同时启用这两种功能,那么我们将拥有完整的经济抽象。 费用抽象(fee abstraction) —— 能够以原子方式,用区块链上的任何资产来支付区块链交易费的能力。 协议通常必须具有特定的基础代币(如 Ether),以确保其网络的安全性。某些协议接受任何形式的代币以作为交易费,从而实现了费用抽象,但是这不适用于大多数协议。在我们实现的部分中,我们将讨论如何在以太坊等协议上构建费用抽象。 代币抽象(token abstraction) —— 能够以原子方式,用区块链上的任何资产支付因区块链交易产生的后续操作的能力。 一旦执行了交易,后续操作可能会涉及花费任何数量的资产,例如用 USDC 购买 CryptoKitty 或在 Compound 上借贷 DAI。借助代币抽象,我们将不仅限于支付特定的代币,而可以支付区块链上的任何资产。
要实现费用和代币抽象,我们需要两个核心的区块链功能:费用委托(fee delegation)和多操作交易(multi-op transaction)。大多数区块链都没有上述两个原生功能(以太坊都没有),因此需要额外的构造来实现我们的先决条件。在我们的构建中,我们将主要关注以太坊,但这适用于大多数智能合约平台。
在以太坊上启用这些核心功能的关键是智能合约钱包的使用。这些功能在传统地址上不存在,但是通过智能合约,我们可以添加其他逻辑以启用新的核心功能。 费用委托(fee delegation) —— 支付交易费用时,指定其他付款人而不是发送者的能力。 如今,大多数智能合约钱包都通过使用 Gas 中继器来使费用委托更加容易。用户可以直接签署一条消息以进行中继(打包成交易并代表他们发送),而不是直接向他们的智能合约钱包发送交易以支付自己的交易费用。由于用户的实际帐户是智能合约,因此两个入口点都是有效的,只需钱包可以验证调用即可。 多操作交易(multi-op operation transactions) —— 将多个原子函数调用打包到一个交易事务中的能力。 与费用委托不同,多操作交易尚未得到广泛利用。此功能对于促进单个原子事务中的多个操作来说是必需的。Wrapper contract 在一定程度上已被用来解决此问题,但是它们隐藏了诸如 msg.sender 之类的元数据,从而使它们无法用作通用解决方案。幸运的是,此功能非常容易包含在智能合约钱包中。但是,到目前为止,Dapper 是唯一支持此功能的智能合约钱包。
利用多操作交易,我们不但可以构建消息传递协议,还可以构建标准化 gas 中继器,以实现费用抽象。在这里,我们提供了一个简单的示例协议,并可以将其进一步扩展以提供其他的钱包功能。
步骤 0:客户钱包想发送包含操作 [1…n] 的交易。
步骤 1:客户钱包将其要发送的交易以及其要支付交易费用的资产种类通知 gas 中继器。
步骤 2:中继器以签名报价作为响应,该报价中指定了该资产报价的价格,以中继所请求的交易。
步骤 3:客户钱包附加一项额外操作,将该资产的指定值转移到中继器。
步骤 4:带有操作 [1…n + 1] 的已完成交易与签名报价一起发送到中继器。
步骤 5:中继器验证交易并报价,然后将交易发送到区块链。
此功能还为客户钱包提供了向 gas 中继器请求报价的机会,仅选择将已完成的交易发送给报价最低的交易者。
同样,在多操作交易的支持下,代币抽象则较为容易实现,其关键复杂点在于交易事务分析。客户钱包需要能够分析潜在的交易事务,以查看在执行交易操作时将花费(以及收到)哪些资产以及这些资产中的多少。 在 Astro 中,我们构建了一个可以运行此分析的自适应以太坊节点,但是由于这主要是工程挑战而不是算法挑战,因此我们将其作为习题留给读者。 一旦我们能够确定操作集的必需资产和最终资产,钱包就可以轻松地与任意数量的 DEX 接触,以构建与用户基础资产之间的一组交换。像 0x API 这样的聚合器非常适合收集这些必需的交换,但是钱包还可以使用更简单但滑移率较低的解决方案,例如 Uniswap。通过这组交换,钱包可以通过在用户操作之前和之后,分别附加所需资产和所得资产的交换操作,来构造最终交易。
现在,我们已经实现了费用和代币的抽象,我们可以将它们结合起来以实现完整的经济抽象。 我们还可以结合其他类似即时批准的简洁功能,因此我们不需要单独的交易即可批准诸如 0x 和 Uniswap 之类的协议来花费我们的资产。这也提高了用户安全性,因为我们只需要批准交易所需的内容而不是最大金额。
通过上图我们就可以说明引言中的那个相当复杂的例子。如我们所见,用户仅用 USDC 就能够支付 0x 协议的 ETH 费用,0x 中继器的 ZRX 费用,CryptoKitty 卖方的 DAI 要价以及用于传输交易的 gas 中继器。
Kevin Britz 作者 子铭 翻译
Roy Wang 编辑
内容仅供参考 不作为投资建议 风险自担
版权所有 未经允许 严禁转载
☟☟☟
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:分享区块链领域专业、前沿、有趣的内容
评论0条