如果你是 DeFi 深度用戶,你肯定被這個繁瑣的流程折磨過無數次了。每當你使用一個新的 dApp,你都需要授權這個 dApp 花費你的代幣,
– Metamask 上的授權界面 –
跟傳統金融行業類比一下,這個流程有點類似于辦理直接借記,授權你的供電商每月從你的銀行賬戶上扣除電費。
但是,與密碼學貨幣行業不同的是,傳統金融行業的直接借記業務只面向少數可信公司,這類公司不太會欺騙消費者,即使偶爾發生欺騙消費者的行為,消費者也可以提出異議,由銀行充當調停者,密碼學貨幣行業沒有這類工具。一些 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 代幣授權可用額。代幣授權檢查程式等工具很方便,但不是每個用戶都知道它們。
原文鏈接:
https://cryptotesters.com/blog/token-allowances
作者: Emanuel Coen
翻譯&校對: 閔敏 & 阿劍