menu-icon
anue logo
熱門時事鉅亨號鉅亨買幣
search icon

區塊鏈

「不授權」到底安全嗎:Move背後的設計思想

BlockBeats 律動財經 2022-10-21 12:31

cover image of news article
律動財經圖片

最近關於用戶和 Move 智能合約交互,不需要授權 (Approve) 是更安全還是更不安全的爭論很多,這裡嘗試用通俗的方式來解釋一下二者背後的區別以及 Move 這樣設計背後的思想。  

我們先理解一下用戶和智能合約交互的方式。當我們簽了一個交易,去調用一個鏈上的智能合約,就好比從物理世界進入了一個智能合約的數字世界,我們在這個數字世界有一個分身,而這個分身做什麼,是智能合約定義的。  

在 EVM 中,每個合約都相當於一個獨立的小世界,分身進入這個世界後,只能操作用戶在當前合約世界中的狀態(資產)。  

比如進入 swap 世界,想用自己的 usdt 交換其他資產,而 usdt 存在定義 usdt 的那個合約世界,沒辦法直接在 swap 中以自己的身份從 usdt 合約里提取資產。於是用戶只能先去 usdt 的合約世界執行 approve,告訴 usdt 的合約,swap 可以代自己提取自己的資產,然後再進入 swap 世界進行操作。  


操作完成之後,再去 usdt 那邊取消授權(revoke)。但這裡的 approve 和 revoke 操作都需要獨立的交易,用戶往往為了節省 gas 費用,不進行 revoke,結果如果 swap 合約出安全問題,用戶的資產就可能在不知情的情況下被盜取。  

而在 Move 中,所有的合約都在一個大的數字世界運行。用戶的數字分身可以自由的在合約間行動,執行任何操作,同時用戶的狀態(資產)存在用戶自己的儲存空間。  

用戶從 swap 入口進入,從自己的餘額提取 usdt,交換,儲存可以在同一個交易里原子化完成。這種模式給合約帶來更自由的組合模式,可以玩出很多 EVM 上很難實現的組合玩法,這也是 EVM 上的帳戶抽象方案想實現的模式。當然,這也帶來了新的安全挑戰。  

那 EVM 中能否直接增加一個特性,讓合約間的調用可以把用戶身份直接帶過去?這個技術上是可以實現的,但 EVM 中支持動態調用,可以調用任意地址的合約,讓這種操作的風險變的很難度量,同時 EVM 的狀態變更對用戶和錢包都不友好,錢包很難通過狀態變化對用戶進行提示。  

而 Move 中解決這個安全挑戰有兩個方法: 

1. 在預執行合約的時候把合約執行後的狀態變更提示給用戶,讓用戶可以知道這個交易操作了自己的哪些重要資產,以及執行後的結果。這個方法 StarMask 中已經實現,參看鏈接以及附圖 https://starcoin.medium.com/starmask-v4-6-



2. 可能有部分合約可以通過設置條件,讓一部分用戶預執行的時候無法發現狀態變更。@0xmetazen 的分析 https://twitter.com/0xmetazen/status/1582581013972414465 ,但 Move 中沒有動態調用,合約在部署時,它的執行邏輯就是確定的。可以通過靜態分析字節碼,得到合約所有可能路徑上操作的狀態,在區塊瀏覽器或錢包里提示給用戶。  



EVM 和 Move 的兩種方案,帶來的安全風險是不一樣的。Approve 方案的安全風險是把一個即時的授權變為長期授權,它的風險不是立刻發生的,比如合約漏洞未被發現或者惡意合約放長線釣大魚。而一旦發生,用戶往往很被動,很多用戶可能都忘記授權過哪些合約了。 



而 Move 的方案給了合約更大的自由權,遇到惡意合約會有較大風險,但這種風險是即刻發生的,是可以通過技術手段來檢測的。最壞的情況,至少前面沖的快到人趟坑了,可以給後面的人警示,惡意合約會快速暴露出來。



最後,世上沒有銀彈,不可能靠用了某種技術就解決了所有安全問題,需要鏈,工具,用戶一起努力。 



對 Move 用戶的安全建議: 



1. 選用狀態變更提示更完備的錢包,並嘗試理解錢包的提示。 

2. 不要隨意和來源未知或未開源的 DApp 交互。 

3. 如果做不到上面兩點,可以等別人先趟一下坑。



Move 在安全方面的挑戰以及改進方案不僅僅是這些,我會在《為什麼是 Move》系列的安全篇里詳述,想了解的朋友可以關注一下。  



原文鏈接

原文連結

暢行幣圈交易全攻略,專家駐群實戰交流

▌立即加入鉅亨買幣實戰交流 LINE 社群(點此入群
不管是新手發問,還是老手交流,只要你想參與虛擬貨幣現貨交易、合約跟單、合約網格、量化交易、理財產品的投資,都歡迎入群討論學習!

前往鉅亨買幣找交易所優惠

文章標籤


Empty