Gnosis Safe 多簽錢包使用教學

Johnny Chuang
13 min readNov 20, 2022

--

過去兩週相信對許多人來說都相當不好受,FTX 的崩塌以及其伴隨而來各種造市商、中心化交易所開始 insolvent 的新聞對大部分人來說,除了個人財產上的短期影響外,長期來看,影響更深遠的是人們對於把資產放在中心化交易所,或甚至是持有 crypto asset 的隱憂。

很幸運,從個人角度來看我在這次事件中並沒有受傷,但也讓我意識到許多用戶實際上對掌管自己資產的方式,並沒有太多理解,網路上也還沒有太多好的教學文章。因此,這篇文章想要介紹一個最被廣泛使用的多簽錢包 — Gnosis Safe 的 Multi-sig Wallet,並透過手把手創建一個 Gnosis Safe Wallet 來帶大家認識這個存放資產的選項。

什麼是 Multi-sig Wallet

Multi-sig Wallet(多簽錢包)為一種需要 2 個,或更多重簽名才能將交易送到鏈上的錢包。一般我們使用的熱錢包為單點驗證,只需要使用自己的私鑰驗證完交易後即上鏈,在使用者體驗上很順暢,但這衍生了如果私鑰被盜走,則資產亦能輕易被盜取。反觀多簽錢包,雖然使用者體驗較差(交易需要多個錢包的簽章),但即使單點故障我們仍能確保資金是安全的。

Multi-sig Wallet 的用途

多簽錢包能用於個人資產的管控、各類型 Protocol Treasury 的管理,以及合約中重要的角色(如 owner)也能透過使用 Multi-sig Wallet 來確保重要 function 不會因為重要角色私鑰外流而被亂呼叫。

什麼是 Gnosis Safe

Gnosis Safe 是支援多條 EVM chains,也是目前市佔率最大,最受信任的一款智能合約錢包。

Gnosis Safe 錢包的一大核心功能便是其為一個多簽錢包,並與多種硬件錢包、熱錢包相容,因此安全性高是 Gnosis Safe 的一大特點。以常見的 2/3 的簽名機制來說,在 3 個錢包中含入 1–2 個冷錢包能夠大幅增加錢包本身的安全性。原因是交易只有在提供了多個簽名後才會實際上到鏈上被執行,以轉移資金來說,即使其中一個熱錢包的私鑰被掌握,駭客仍至少需要再取得一個冷錢包的私鑰才有辦法執行交易,對於攻擊的難度會大幅提升。

除此之外,Gnosis Safe可以與 DeFi 協議輕鬆交互,並支援符合 ERC-721、ERC-1155 的 NFT tokens,讓用戶在有高安全性的同時,仍能順暢地完成大部分在鏈上所需要進行的交互功能及資產儲存功能。

目前發展

即使市場走熊,在今年 7 月份,Gnosis Safe 仍完成了一筆由 1kx 領投,$100M 的 funding round。

此外,從 Dune 的數據看來,目前 Gnosis Safe 總共管理資產約 200 億美金,並可以看到在 FTX 出事之後,Gnosis Safe 的 inflow 金額明顯增加。

實際創建 Gnosis Safe Wallet

在這次教程中,我會使用 Metamask 創建一個在 Arbitrum 上的 Gnosis Safe 錢包。實際上也可以透過 WalletConnect 來連結其他各種類型的錢包來進行下方步驟。

首先,先到 Gnosis Safe 的網站,右上角連結錢包後,我們可以看到畫面中有個斗大的 Create Safe,Create new Safe 點下去。

接下來會有五個步驟

  1. 確認是否要在 Arbitrum 上建立錢包

2. 幫你的錢包取個名字

3. 新增擁有多簽錢包簽名權限的錢包,這邊只需要先輸入多個錢包的地址即可,數量可以根據自己的需求進行調整,一般常見會使用奇數個錢包。在最下面可以設定一筆交易需要多少個 confirmation 才會上到鏈上,一般常採用多數決的方式,如 2/3 (2 out of the 3 owners),或 3/5 (3 out of the 5 owners) 的方式來決定 confirmation 的數量

4. 確認剛才設定的資訊都無誤,便可按下 Create

5. 按下 Create 後,便會跳出創建錢包的 tx,付 gas fee 按下確認即可完成創建錢包

That’s it! 創建 Gnosis Safe 錢包只需要五個步驟即可完成!

使用 Gnosis Safe 完成鏈上操作

完成創建錢包後,在前端我們可以看到這個 Safe 錢包的 Dashboard:

值得一提的是,我們創建出的 Gnosis Safe 其實是一個 Smart Contract Wallet,和我們平常使用的 Metamask (EOA, Externally Owned Account) 有一些本質上的不同,但這不是本篇文章的重點,詳細可以看 Argent 整理的這篇文章,裡面對 Smart Contract Wallet 和 EOA 有蠻詳細的介紹。

接下來,我會 demo 一些鏈上操作來幫助大家理解 Gnosis Safe 的運作機制。

轉帳

Transfer In

目前我們這個 Safe 錢包是沒有任何資產的,因此第一步是先轉帳給這個錢包一些 USDC。轉帳給 Safe 錢包和一般轉帳給 EOA 錢包並無不同,將資產直接轉給 Safe 錢包的地址即可。

在 Dashboard 的左上角可以看到這個 Safe 錢包的地址,複製後,我們使用自己的熱錢包轉 1 USDC 給 Safe 錢包的地址,便可在 “Assets” 的 page 看到 Safe 錢包資產多了 1 USDC。

Transfer Out

將資產 Transfer 出去也很簡單,只需要在 Dashboard 的左手邊按下 New transaction -> Send tokens -> 輸入 Recipient 及想要 transfer 的資產、數量即可。最後會有一個 Review Transaction,確認交易資訊沒問題後便可以按下 Submit。在下方交易中,我們試著把 1 USDC 轉給我們的熱錢包。

按下 Submit 後,Metamask 會跳出需要我們 sign 這個交易的 request。sign 完之後我們可以切到 “Transactions” 的頁面,會發現這筆轉帳交易現在在 Queue 裡。

由於我們這個錢包設定是 2/3,意思是 3 個有權限簽名的錢包中,至少要有兩個錢包完成簽名交易才會上到鏈上。假設有權限簽名的錢包分別叫 A, B, C,剛才我們使用 A 錢包發起交易並完成簽署,那在這個機制下,我們還需要 B, C 其中一個錢包完成簽名才能夠讓交易上鏈。因此,下一步我們將 B 錢包連接 Gnosis Safe,並按下這筆 Queue 中交易的 Confirm。

值得注意的是,在 Safe 錢包的機制中,Gas Fee 會由最後一個 Confirm 的錢包來支付,因此以我們的例子來說,B 錢包在按下 Confirm 後會跳出付 Gas Fee 的 Transaction。而當我們確認之後,回到 Transactions Page 可以發現交易已經發送,我們 Safe 裡的資產也確實轉移出去給熱錢包了(被清台)。

取消交易

在上面的例子中,我們透過一筆轉帳交易來示範在 Gnosis Safe 中用戶要如何驗證並送出交易,在這部分我們將示範如何取消一筆送錯的交易。

同樣以轉帳為例,假設我們送了一筆轉帳交易想要將錢轉出 Gnosis Safe 錢包,但發現收款人的地址填錯了我們想要取消,好消息是交易並還沒有真正被送到鏈上。

我們到 Queue 中選擇這筆交易,並先使用其中一個錢包簽署 Reject 的訊息。

A 錢包簽署完 Reject 訊息後,我們切到 B 錢包找到這筆交易,同意 Rejection 那筆交易來把原本的 nounce 蓋過去,並付出 Reject 的 gas fee 後,便能成功取消這筆交易。

題外話:一開始在使用 Gnosis Safe 時我有點困惑為什麼取消交易明明可以是 Off-Chain 的,
卻仍需要付 gas fee。Gnosis Safe 其實有針對這個議題進行解釋,詳細可看下面這篇文:

和支援的 Dapp 互動

下一步是和 Gnosis Safe 有支援的 Dapp 直接從 Safe 的前端互動。在 Safe 前端的左手邊我們能看到有個 Apps,點下去後會看到 Gnosis Safe 在 Arbitrum 上支援原生互動的 Dapp。其中包含 Aave, Uniswap 等等。我們以在 Uniswap 上換幣為例進行 demo。

首先透過 Safe 的前端,在 Apps 中點取 Uniswap。點完之後就可以看到熟悉的 Uniswap 前端出現在 Safe 裡面。

我們試著用 1 USDC 換 ETH,接下來的步驟和單純去 Uniswap 換幣基本上完全相同,差別只是在每個需要上到鏈上的交易,我們都必須透過 Safe 完成 2/3 confirmation 才能讓交易上鏈。

以 Uniswap 這筆換幣交易來說,我們需要做的有兩筆交易:approve + multicall,因此,如果要透過 Gnosis Safe 完成這樣的交易,會需要兩次 2/3 confirmation 才能完成。完成後,到 Transactions 的頁面我們便能看到交易已經上鏈,換幣完成的結果。

需要注意在 mutlicall 的步驟,因為 Uniswap 預設的滑點是 0.5%,在前端送出後,
如果和最後確認交易時間間隔太久價格可能會超過這個滑點導致被 revert。

和合約互動

對於較進階的使用者來說,Gnosis Safe 也支援和各種合約互動,但會根據合約本身在瀏覽器上有沒有 verify 而有兩種方法可以使用 Safe 錢包和合約互動。

和有 verify 的合約互動

在 Etherscan, Arbiscan 上有 verify 過的合約,我們也能透過 WalletConnect 串接 Gnosis Safe,來達到使用多簽錢包直接和合約互動的效果。

首先,我們到想要交互的合約地址下,點選 Write Contract,並 Connect to Web3。之後在選擇錢包時,選擇 Wallet Connect,並點選下方的「複製到剪貼簿」將 Wallet Connect 的二維碼複製下來。

回到 Gnosis Safe 的前端,在 Apps 中找到 Wallet Connect,並將剛剛複製的二維碼貼到欄位中,便可看到我們的 Gnosis Safe 錢包已經和 Arbiscan 連結上了。之後,便可以透過 Arbiscan 的前端來呼叫我們想要 call 的任意 function。

和沒有 verify 的合約互動

Gnosis Safe 也支援和沒有 verify 過的合約互動,使用方法為進到 Safe 前端後按下 New Transaction -> Contract interaction 後,便可透過輸入合約地址及 ABI 便可讀取到合約內含的 functions。

結語

在這篇文章中,我們實際走過了一次 Gnosis Safe 的創建過程,以及分析了不同的使用場景及方式,可以看出 Gnosis Safe 對於大部分我們在鏈上需要使用到的功能都有很好的相容性。整體來說,我認為使用 Gnosis Safe 雖然會需要一些 extra steps,但在提升安全性的基礎上,整體使用體驗還是挺好的。

在這個動盪的時期,最重要的事是將自己的資產保存好,不一定要使用 Gnosis Safe,但無論我們打算將資產存放在哪,無論是 CEX, DeFi, Cold Wallet,一定清楚研究後了解相關的風險再選擇這個選項。總之,stay safe, stay positive.

--

--

No responses yet