如果你是DeFi深度用户,你肯定被这个繁琐的流程折磨过无数次了。每当你使用一个新的dApp,你都需要授权这个dApp花费你的代币。
-?Metamask?上的授权界面-
跟传统金融行业类比一下,这个流程有点类似于办理直接借记,授权你的供电商每月从你的银行账户上扣除电费。
但是,与密码学货币行业不同的是,传统金融行业的直接借记业务只面向少数可信公司。这类公司不太会消费者,即使偶尔发生消费者的行为,消费者也可以提出异议,由银行充当调停者。密码学货币行业没有这类工具。一些dApp是由匿名开发者构建的,没有为受用户设立的争议机制。一旦在区块链上完成付款,就无法撤销。
代币授权是什么?它是如何运作的?
以太坊区块链上的大多数代币,如USDC和DAI,都采用ERC20标准。ERC20代币实际上是智能合约,包含不同的方法,如transferFrom和burn。用户调用这些方法,应用就会对代币做相应的操作。
其中一种方法是approve。任何你想要使用的dApp都需要访问你的ERC20代币才能对其进行操作。例如,如果你想要在Aave中存入USDC,你首先需要授予AavedApp的智能合约访问USDC的权限,然后才能通过第二笔交易将USDC存入Aave。你可以在你的以太坊钱包用户界面上看到该授权。虽然授权可用量从理论上来说是灵活的,但是大多数dApp会默认要求无限量授权,以此简化用户体验,并尽可能减少用户使用该应用所需进行的交易次数。
这里存在的一个安全问题是,大多数用户认为他们的授权是针对某个交易,而且是限量的,但是在大多数情况下,用户实际上授予了dApp永久访问他们持有的某种代币的权限,而且是不限量的。因此,如果dApp出现安全问题或从一开始就是恶意的,攻击者就可以将滥用这种授权来盗取dApp用户持有的全部已授权代币,而无需经过用户同意。这种攻击可以在将来的任意时刻发起,即使是在用户使用过dApp的若干年后。
如何保护自己?好消息是,你可以保护自己免受这类威胁。在下一节中,我们将探讨的是,当你使用Metamask等标准以太坊钱包时,如何保障你的代币的安全性,并介绍了一些可以通过定制方法与dApp交互的钱包。
1.如何手动撤销代币授权
如果你想手动撤销授权,你需要使用TokenAllowanceChecker之类的工具。这类工具可以连接到你的钱包,并扫描整个区块链来寻找所有与你的以太坊地址有关的dApp授权。然后,你就可以编辑授权:将授权可用量设定为0从而取消授权,或者设定为你能接受的量。授权修改是通过与各个ERC20代币合约交互来实现的。
最好能够定期执行这一流程,取消你不打算再使用的dApp的授权。虽然这会花费你一点成本,因为每笔交易都需要在链上结算,但是从长期来看,你的钱包会给你应有的回报。
建议:如果你想要节省gas成本,可以下载GasStationNetwork扩展程序插件来在你的浏览器上追踪gas价格。你可以等到gas成本较低时再编辑你的授权可用量。
2.下一代以太坊钱包如何保护用户资金
一些已经推出的智能合约钱包也具备防护功能。智能合约钱包具有很强的灵活性,可以为用户提供定制化的智能合约交互方式。因此,许多智能合约钱包已实现定制化的授权方式,提高了用户体验和安全性。
原生整合:以Argent为例
例如,Argent是移动端以太坊钱包,已经将一些核心DeFi应用原生整合到应用中,以便用户进行借贷、赚取收益和交易。
这类钱包从智能合约层面整合了这些dApp,并确保用户在与这些dApp进行交互时,这些dApp只能得到实际请求量的授权。这一切都是在后台自动进行的,因此Argent用户甚至不知道授权交易的存在。
ArgentxWalletConnect
原生整合的一个缺点是不具备可扩展性,就像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,000gas。如果用户一次性打包10个交易,总共可以节省189,000gas。另外,用户可以尝试通过发送连续交易来节省时间。
批处理交易的唯一问题是,dApp需要增加一些定制化的逻辑和UI流程来适当地处理交易。目前为止,只有1inch和Erasure等少数dApp支持这种交易模式,但是我们预期后续将有更多dApp支持该交易模式。
结论
代币授权存在很大的安全隐患。如果我们想要改善密码学货币应用的用户体验和安全性,我们显然需要改进代币授权功能。Authereum和Argent之类的钱包可以通过创新的方式让dApp交互更加安全。遗憾的是,在很多情况下,这类交易模式需要dApp开发者进行额外的工作,因此用户需要耐心等待一段时间。
无法采用上述解决方案的标准以太坊钱包至少应该让用户可以查看并编辑其dApp代币授权可用额。代币授权检查程序等工具很方便,但不是每个用户都知道它们。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。