MetaMask 錢包的剖析

語言: CN / TW / HK

自 2016 年推出以來,截至 2022 年 3 月, MetaMask (小狐狸錢包)已獲得 3000 萬月活躍使用者。 它擁有全球使用者群,其中美國、菲律賓、巴西、德國和奈及利亞的參與度較高。

MetaMask 是 以太坊 社群不可或缺的應用程式之一,在Web3世界,MetaMask無人不知曉,吸引了人們通過MetaMask開啟了加密之旅。隨著 NFT、遊戲和 DAO 為 web3 帶來大量新使用者,錢包仍然是生態系統中的基礎組成部分——它們是使用者與區塊鏈之間所有互動的核心和中心。

這篇文章將側重於區塊鏈賬戶和 MetaMask 的機制,偏向於以太坊。但如果你對它的起源和商業方面感興趣,The Generalist 有一個非常詳盡的故事。這篇文章中的資訊是從 Mastering Ethereum 書籍、MetaMask 支援文章和 Ethereum Homestead 文件等來源收集的。因此,如果您有興趣可以深入瞭解,這些地方充滿了珍貴的細節。

它們也可能對某些人感到恐懼。但實際上,當今(傳統金融錢包)的大多數錢包應用程式都是圍繞一個簡單的中心元件構建的擴充套件:一個由公鑰(賬號)/私鑰(密碼)對組成的賬戶。

從原則開始

在我們談論 MetaMask 本身之前,讓我們先深入瞭解一些支撐它的基本概念。

地址(賬戶)

地址是區塊鏈的核心原語。在以太坊中,有兩種型別的地址:外部擁有地址(external Owned accounts)和合約地址(Contract accounts)。

每個地址都由一個公鑰和一個私鑰定義。公鑰由私鑰建立產生,區塊鏈上的所有地址都按其地址(公鑰)排序。

讓我們來分析一下這兩種型別的賬戶及其特徵:

外部擁有的地址

1. 有一個以太幣餘額

2. 可以傳送交易(即轉移或觸發智慧合約程式碼)

3. 由私鑰控制

4. 沒有關聯程式碼

合約地址

1. 帶有以太幣餘額的實際智慧合約

2. 有關聯程式碼

3. 程式碼執行由從其他合約或地址收到的交易或訊息觸發

以太坊上的每一個動作都是由一個外部擁有的賬戶觸發的。

如果這篇文章是關於錢包的,我們為什麼要談論地址 賬戶) ?好吧,從本質上講,錢包不過是客戶經理。

什麼是錢包?

如果我們把chrome擴充套件和移動應用程式的所有功能都去掉,那麼這個可愛的小狐狸背後就是一個用來儲存和管理使用者私鑰的軟體。

每個錢包都從一個私鑰管理元件開始。

一旦有了私鑰管理方面,錢包就變成了一個使用者介面,允許使用者與區塊鏈進行互動。它可以促進從一個賬戶到另一個賬戶的資金轉移、管理私鑰、跟蹤代幣餘額並幫助您簽署交易。但是如果沒有私鑰管理,這些事情都不會發生。

把它想象成一個鑰匙扣,以太坊錢包的主要工作是包含使用者的私鑰。它們實際上並不持有任何真正的代幣,它們僅反映在區塊鏈上為你的賬戶分別有多少代幣。

區塊鏈只是一個分散式賬本,它將您的賬戶與您擁有的代幣數量相關聯。錢包持有的鑰匙是將以太幣或代幣轉移給他人的唯一要求。使用您的私鑰,你可以通過使用你的私鑰簽名改變交易賬本,我們將在後面的部分詳細介紹這一點。

錢包的種類

區分錢包的一種方法是通過私鑰的生成方式。

錢包的私鑰生成主要有兩種型別:確定性和非確定性,它們的區別在於是否相互關聯。

非確定性錢包具有由隨機數生成的私鑰,並且這些私鑰彼此不相關。

這更像是傳統的以太坊錢包。它以錢包檔案的形式出現,其中儲存了一個隨機生成的私鑰。確定性錢包會為每個地址生成一個新的錢包檔案,備份和恢復可能會更加麻煩。

非確定性錢包被認為不如確定性錢包。

確定性錢包具有由單個主私鑰(稱為種子,也可以稱為助記詞)生成的私鑰。在確定性錢包中,私鑰是相互關聯的,並且始終可以使用相同的種子進行復制。這是我們比較熟悉的錢包型別,因為它被認為是一種標準並被 MetaMask 使用。

種子表示為您可以寫下的英語單詞列表(通常為 12 個單詞),以便在需要時恢復您的金鑰。這也是您在 MetaMask 中看到的“私鑰恢復短語”。它有時也被稱為你的“助記詞”。但是,如果有人抓住了他們,他們可以立即訪問您的錢包並使用您的資產做各種事情。這就是為什麼建議永遠不要分享您的助記詞,甚至不要以電子形式儲存它。

種子短語可以方便地匯出和匯入錢包,並輕鬆地將所有私鑰遷移到不同的錢包應用程式中。例如,如果您在 MetaMask 上有一個錢包,您仍然可以通過輸入助記詞將該錢包匯入您的 Rainbow 或 Argent 移動應用程式。

確定性錢包的最先進形式是分層確定性(HD)錢包,基於 比特幣 的 BIP-32 標準。鍵被稱為“分層”,因為它們代表樹結構。父金鑰可以派生一組子金鑰,然後子私鑰可以派生另一系列孫金鑰。

HD 錢包優於其他型別的確定性錢包,因為:

1. 樹形結構可以代表一種組織結構。分支機構可以被視為公司中的子團隊或子公司,這提供了相應的組織預算和付款的機會。

2. 無需訪問相應的私鑰即可生成公鑰。

種子短語(助記詞)是一組英語單詞,不過這只是對私鑰進行編碼的一種方式。它目前被廣泛使用,因為其他型別的表示(如十六進位制字串)在寫在紙上時可能會導致更高的錯誤率。在較高級別上,助記詞是由BIP-39定義的過程生成的,該過程涉及從一些資訊源開始,轉換資料,然後將其對映到單詞列表。

有一套行業標準(如助記詞和 HD 錢包)影響錢包的實現並導致錢包的互操作性。由於這些標準,您可以輕鬆地將錢包從不同的錢包應用程式匯出和匯入。

錢包型別

錢包可以有幾種不同的形式,最常見的:

  • 桌面錢包:MyCrypto, Gnosis Safe 。

  • 瀏覽器外掛錢包:MetaMask, MyEtherWallet, Web3Auth。

  • 手機錢包:Argent, Coinbase Wallet, MetaMask, Rainbow, Trust Wallet。

  • 硬體錢包(一種線上訪問資金的安全方法,因為它們在簽署交易時不會暴露私鑰):Ledger, Trezor, KeepKey, Bitbox, Lattice1。

智慧合約錢包

例如 Argent 和 Gnosis Safe 是智慧合約錢包,這些類似於本文開頭描述的“合約地址”。

這些錢包使用外部擁有賬戶的替代品,並建立在智慧合約之上。由於業務邏輯有更多的實現空間,它們可以提供無助記詞恢復、自動阻止某些對不可信合約的轉賬、社會恢復、轉賬限制、賬戶凍結等功能。

以下是一個非常簡單的智慧合同錢包的示例程式碼,基於Block Explorer的教程: (教程詳細,請閱讀原文)

進入 MetaMASK

我們一直在等待的主角,這隻幾何小狐狸告訴我們 “ 去中心化的網路在等待著 ” ——我們中的許多人與之有著愛恨交織的關係。

MetaMask 是一種非託管(或自託管)加密貨幣錢包。這意味著沒有第三方“保管人”持有您的私鑰。它讓你活出“不是你的鑰匙,就不是你的代幣”的精神。MetaMask 不儲存有關錢包的任何資料,您看到的所有內容都在本地級別的瀏覽器或移動應用程式中。

MetaMask 使用 3 種不同型別的“祕密”來保護您的錢包:

1.祕密恢復短語(助記詞):如前所述,此短語是基於您的主金鑰以數學方式生成的助記符。這些詞,當按特定順序放置時,可以重新生成你錢包中的所有賬戶。請記住,一個錢包中可以有多個賬戶。你的錢包是持有許多公鑰/私鑰的鑰匙串。每個金鑰對應於錢包中的一個賬戶。當 MetaMask 從 Secret Recovery Phrase 重新生成您的錢包時,它可能一開始只生成第一個賬戶,但由於錢包是確定性的,因此可以按照相同的順序重新建立其他賬戶。

2.私鑰:每個賬戶都有自己的公鑰和私鑰。通常,可以看到賬戶及其地址,即公鑰。個人私鑰可用於將該特定賬戶(並且僅該賬戶)匯入任何其他錢包應用程式。

3.密碼:這用於保護錢包應用程式本身。您只用它來解鎖應用程式。FaceID 適用於移動裝置。

Coinbase與MetaMask

值得注意的是,Coinbase(核心應用程式)是一個託管錢包,因此不同之處在於,Coinbase 不是您持有自己的私鑰,而是實際上為您儲存它們。所以你不能直接匯出你的 Coinbase 錢包,然後將其匯入另一個錢包,比如 MetaMask。但是,您可以從 Rainbow 錢包到 MetaMask(反之亦然)這樣做,因為兩者都是非託管的。

注意:Coinbase 還通過 Coinbase 錢包提供非託管解決方案。

MetaMask 如何連線到區塊鏈網路

MetaMask 等其他錢包也可以成為您通往公共區塊鏈網路的鑰匙。讓我們提醒自己web瀏覽器的工作:一個允許我們訪問全球資訊網的軟體程式。當用戶通過輸入URL地址請求網頁時,瀏覽器會從web伺服器獲取內容,並將其顯示在使用者的裝置上。

區塊鏈節點不斷同步網路狀態並觀察交易歷史。同樣,MetaMask 允許您訪問區塊鏈網路,因為您當前的瀏覽器無法做到這一點。

為了與區塊鏈節點通訊,有一個稱為 JSON-RPC 的標準,它允許從它們請求和提交資料。這些通過 JSON-RPC 的請求可以通過 HTTP 或 WebSocket 進行。

MetaMask 如何發現這些節點以傳送請求?它使用 Infura,它提供了一個高度可用、可擴充套件的區塊鏈 API,可以訪問區塊鏈網路。

交易的生命週期

區塊鏈是一個分散式賬本,就像賬戶及其資產的對映。設想一個電子表格,其中每一行都是一個賬戶(以太坊地址),且每一列都是它持有的加密資產。

假設Alice想要給Bob傳送1個Eth。這時Alice開啟她的MetaMask錢包,輸入Bob的錢包地址,然後點擊發送。當她點擊發送時,她也在使用她的私鑰來簽署這筆交易。

該筆交易將進入本地記憶體池(mempool),然後由乙太網絡中最近的節點獲取該記憶體池。

發起此交易時,Alice 的交易將根據她的 gas(手續費)設定進行優先順序排序,交易在網路中的節點間傳播。在處理交易後,節點還將在執行轉移之前檢查 Alice 是否有足夠的以太幣可以使用。

最後,轉賬只是對賬本的修改,從 Alice 的餘額中扣除 1 ETH,並在 Bob 的賬戶中增加 1 ETH。

核心功能

讓我們來總結一下MetaMask的主要特性——注意,它們中的許多都與私鑰管理相關或圍繞著金鑰(也叫私鑰)管理:

1. 賬戶管理(建立、匯入、匯出賬戶,對接硬體錢包)

2. 連線公共區塊鏈網路

3. 簽署交易(轉賬、智慧合約互動),允許使用者確定每筆交易的天然氣價格

4. 使用fiat購買加密貨幣(使用MoonPay, Transak, Wyre)

5. 交換標記

6. 顯示資產(ERC20代幣,nft)

7. 顯示活動(事務歷史記錄)

8. 連結dApp

錢包標準一直在發展,MetaMask 也是如此。我們可能會開始看到更多對社交恢復錢包、多因素身份驗證等功能的嘗試,以提高安全性,以及通過在連線到 dApp 時將功能注入 MetaMask 本身來實現新的使用者體驗。

錢包使用者體驗、dApp 互動和安全方面有許多創新的可能性。儘管 MetaMask 鋪平了道路,但錢包的工作還遠未完成。例如,我們還沒有完全弄清楚如何在移動裝置上籤署交易。由於行業標準,錢包可以組合和重新構建,以滿足使用者和應用程式的需求。

有人可能會爭辯說,錢包類似於數字身份/護照、銀行賬戶、瀏覽器等 web2 概念。可能是這些,也可能是其他東西。我們剛剛開始觸及表面——發展空間是巨大的。