代币授权:密码学货币行业用户体验的最大障碍

如果你是 DeFi 深度用户,你肯定被这个繁琐的流程折磨过无数次了。每当你使用一个新的 dApp,你都需要授权这个 dApp 花费你的代币。

跟传统金融行业类比一下,这个流程有点类似于办理直接借记,授权你的供电商每月从你的银行账户上扣除电费。
但是,与密码学货币行业不同的是,传统金融行业的直接借记业务只面向少数可信公司。这类公司不太会欺骗消费者,即使偶尔发生欺骗消费者的行为,消费者也可以提出异议,由银行充当调停者。密码学货币行业没有这类工具。一些 dApp 是由匿名开发者构建的,没有为受骗用户设立的争议机制。一旦在区块链上完成付款,就无法撤销。
代币授权是什么?它是如何运作的?
以太坊区块链上的大多数代币,如 USDC 和 DAI,都采用 ERC20 标准。ERC20 代币实际上是智能合约,包含不同的方法,如transferFrom和burn。用户调用这些方法,应用就会对代币做相应的操作。
其中一种方法是approve。任何你想要使用的 dApp 都需要访问你的 ERC20 代币才能对其进行操作。例如,如果你想要在 Aave 中存入 USDC,你首先需要授予 Aave dApp 的智能合约访问 USDC 的权限,然后才能通过第二笔交易将 USDC 存入 Aave。你可以在你的以太坊钱包用户界面上看到该授权。虽然授权可用量从理论上来说是灵活的,但是大多数 dApp 会默认要求无限量授权,以此简化用户体验,并尽可能减少用户使用该应用所需进行的交易次数。
这里存在的一个安全问题是,大多数用户认为他们的授权是针对某个交易,而且是限量的,但是在大多数情况下,用户实际上授予了 dApp 永久访问他们持有的某种代币的权限,而且是不限量的。因此,如果 dApp 出现安全问题或从一开始就是恶意的,攻击者就可以将滥用这种授权来盗取 dApp 用户持有的全部已授权代币,而无需经过用户同意。这种攻击可以在将来的任意时刻发起,即使是在用户使用过 dApp 的若干年后。
如何保护自己?好消息是,你可以保护自己免受这类威胁。在下一节中,我们将探讨的是,当你使用 Metamask 等标准以太坊钱包时,如何保障你的代币的安全性,并介绍了一些可以通过定制方法与 dApp 交互的钱包。
1. 如何手动撤销代币授权
如果你想手动撤销授权,你需要使用 Token Allowance Checker 之类的工具。这类工具可以连接到你的钱包,并扫描整个区块链来寻找所有与你的以太坊地址有关的 dApp 授权。然后,你就可以编辑授权:将授权可用量设定为 0 从而取消授权,或者设定为你能接受的量。授权修改是通过与各个 ERC20 代币合约交互来实现的。

最好能够定期执行这一流程,取消你不打算再使用的 dApp 的授权。虽然这会花费你一点成本,因为每笔交易都需要在链上结算,但是从长期来看,你的钱包会给你应有的回报。
建议:如果你想要节省 gas 成本,可以下载 Gas Station Network 扩展程序插件来在你的浏览器上追踪 gas 价格。你可以等到 gas 成本较低时再编辑你的授权可用量。
2. 下一代以太坊钱包如何保护用户资金
一些已经推出的智能合约钱包也具备防护功能。智能合约钱包具有很强的灵活性,可以为用户提供定制化的智能合约交互方式。因此,许多智能合约钱包已实现定制化的授权方式,提高了用户体验和安全性。
原生整合:以 Argent 为例
例如,Argent 是移动端以太坊钱包,已经将一些核心 DeFi 应用原生整合到应用中,以便用户进行借贷、赚取收益和交易。
这类钱包从智能合约层面整合了这些 dApp,并确保用户在与这些 dApp 进行交互时,这些 dApp 只能得到实际请求量的授权。这一切都是在后台自动进行的,因此 Argent 用户甚至不知道授权交易的存在。

Argent x Wallet Connect
原生整合的一个缺点是不具备可扩展性,就像 Argent 一样。应用程序不可能原生整合每一个 DeFi 协议。对于大多数用户来说,Argent 目前已经集成的应用可能足够了,但是重度 DeFi 用户使用每天都要使用十几个不同的 dApp,不想局限于少数几个 dApp。
一个名为 WalletConnect 的标准可以解决这个问题。WalletConnect 可以让用户将他们的移动钱包连接到 web 端应用,并通过移动钱包安全地签署交易。Argent 实现了 WalletConnect 整合定制化,让用户能够轻松设置授权可用量(从此告别无限量授权)。此外,如果 Argent 用户改变了想法,可以在 Argent 应用中一键取消对某个 dApp 应用的授权。由于大多数 dApp 都支持 WalletConnect,该功能可以让 Argent 用户在尽情探索整个 DeFi 领域时享受极高的安全性。

批量交易和 dApp 密钥:以 Authereum 为例
另一个能够优雅处理授权的智能合约钱包是 Authereum。Authereum 基于 web 端,而且大多数以太坊 dApp 应用都支持。另外,Authereum 采用传统的电子邮件和密码登录,因此可以在几秒内将你的钱包连接到 dApp,用户体验类似传统应用,而且不需要牺牲安全性。

当用户需要与 dApp 交互时,Authereum 会生成一个新的临时 dApp 密钥,用来签署特定 dApp 的交易。该 dApp 密钥只能执行有限的功能,另外 Authereum 会执行一些完整性检查。如果发起请求的域不是创建 dApp 密钥的域,Authereum 可以拦截该交易或通知用户。最后,这些 dApp 密钥可以随时从 Authereum 钱包中删除。

将多个交易打包到一个交易内还有很多其它优点。其中一个优点是高效 —— 批处理交易可以节约成本和时间。以太坊上的每个普通转账交易都需要消耗 21,000 gas。如果用户一次性打包 10 个交易,总共可以节省 189,000 gas。另外,用户可以尝试通过发送连续交易来节省时间。
批处理交易的唯一问题是,dApp 需要增加一些定制化的逻辑和 UI 流程来适当地处理交易。目前为止,只有 1inch 和 Erasure 等少数 dApp 支持这种交易模式,但是我们预期后续将有更多 dApp 支持该交易模式。
结论
代币授权存在很大的安全隐患。如果我们想要改善密码学货币应用的用户体验和安全性,我们显然需要改进代币授权功能。Authereum 和 Argent 之类的钱包可以通过创新的方式让 dApp 交互更加安全。遗憾的是,在很多情况下,这类交易模式需要 dApp 开发者进行额外的工作,因此用户需要耐心等待一段时间。
无法采用上述解决方案的标准以太坊钱包至少应该让用户可以查看并编辑其 dApp 代币授权可用额。代币授权检查程序等工具很方便,但不是每个用户都知道它们。