0x财经| 比特幣、以太坊地址類型及其生成機制全解析

文/ Alex R. Mead & Kyle Waters,Coin Metrics加密分析師;譯/金色財經xiaozou

1、前言

我們將推出名為“Foundations”(基礎)的新系列。這個新系列將以淺顯易懂的方式介紹區塊鏈技術的各“技術”維度。本文,我們會從地址概念出發。首先我們將進行地址的基本介紹,然後深入研究以太坊和比特幣地址的詳細內容。公鑰–私鑰、EOA、智能合約,以及“not your keys, not your crypto”(不是你的私鑰,也不是你的加密貨幣)都將在本文得到詳盡解釋。像往常一樣,我們將使用鏈上數據來突出關鍵概念,並提供重要背景幫助你更好理解。

2、加密貨幣地址

地址的概念可能是加密貨幣世界最基本的概念。不管是哪個區塊鏈,地址都是區塊鏈上的“身份”單位,所有的交互都以地址開始,以地址結束。無論是執行簡單的轉賬還是使用DeFi協議進行複雜的交易,地址都是至關重要的。雖然不同鏈之間的地址存在著細微差異,但它們都可以用於鏈上資產唯一標識和分組。

接下來,我們將詳細討論以太坊地址。以太坊地址有哪些不同的類型,它們是如何生成的,如何使用的。然後我們將闡述比特幣地址和比特幣網絡上最重要的四種地址類型。

但首先要搞清楚,“擁有”地址的是誰?

我們先來澄清一些模糊的認知:單個地址並不一定意味著單個用戶。一個地址背後可能有一群人,一個人也可能有多個地址。一個地址甚至可以是一個智能合約,不被任何單個用戶“擁有”。然而,地址是區塊鏈中身份的原子單位,與地址所有者或操作者無關。但我們很快就會知道,真正的所有權屬於地址私鑰的管理者。

3、以太坊地址

以太坊地址是一個20字節的唯一序列,1字節為8 bit,所以以太坊有28*20 = 2160種可能的地址。雖然地址長度只有20個字節,但以太坊的地址空間比IPv6 2128大得多,當然,“猜測”某個現有賬戶的私鑰的成功概率是非常小的。通常,地址顯示為以“0x”開頭的字符串,後面是40個十六進製字符(0-9,AF)。在以太坊系統中,每個地址都對應著相關的原生加密貨幣(Ether或ETH)餘額。餘額多少不等,從略高於0 ETH到最大超過1900萬ETH(信標鏈質押合約)。然而,除了最大的地址餘額之外,ETH分佈在數百萬個地址上,如下所示。在下圖,我們可以看到,在總共1.2億個ETH中,有近1億個被餘額至少為100 ETH的地址所持有。

以太坊地址有兩類:外部擁有賬戶(EOA)和智能合約賬戶。二者區別在於EOA關聯私鑰,而智能合約則關聯合約代碼。這意味著只有EOA可以簽署交易並在以太坊系統內啟動計算,而智能合約必須由源自EOA的交易“激活”。

例如,0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045是V神的已知個人EOA賬戶,而0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48是穩定幣USDC的智能合約地址。對於像V神這樣的EOA賬戶來說,私鑰通常由商業化“錢包”管理,如MetaMask。但也可以使用其他方法進行管理,比如Python腳本或硬件錢包等。

以太坊地址從何而來?

外部擁有賬戶(EOA)地址和智能合約地址都有不同的生成方式,涉及到一系列加密操作。事實上,這就是加密貨幣之所以叫做“加密貨幣”的一個關鍵原因。

(1)EOA地址

帳戶生成過程首先是生成私鑰,這是一組256 bit(32字節)的隨機數。這組隨機數必須保密,因為僅私鑰自身就可以完全控制地址了。這個隨機數就是“not your keys, not your crypto”這句話的根源。因為如果沒有這組隨機數,或者如果其他人得到了這組隨機數,他們就可以訪問你的地址,獲取與你的地址綁定的身份信息,甚至竊取你留在那裡的全部的錢和藏品。

接下來,私鑰(實際上只是一組數字)用於橢圓曲線數字簽名算法(簡稱ECDSA)的輸入。顧名思義,該算法使用橢圓曲線生成另一組長度為512 bit(64字節)的數字,稱為公鑰。這兩組數字統稱為公鑰/私鑰對。

最後,使用Keccak256函數計算公鑰的哈希值,產生另一個256 bit序列(32字節)。然後截取保留該序列的最後20字節或160 bit,這就是以太坊使用的地址。下圖圖解了這個過程。

這個過程可以通過多種方式完成,但是,大多數用戶選擇廣泛適用的“錢包軟件”(如MetaMask)或開源軟件(如web3.py)來生成和管理他們的私鑰。從技術上講,除了生成和管理私鑰和地址之外,EOA通常由一個人、一群人或具有關聯私鑰訪問權限的專業保管人控制。該私鑰用於簽署交易,這是將ETH發送到另一個EOA賬戶或智能合約的關鍵步驟,私鑰必須保密並進行高度安全的妥善保管。我們在下文講到冷錢包時會進行更多相關探討。

(2)智能合約地址

EOA是在以太坊上使用區塊鏈的第一步,無論是在簡單的轉賬交易中發送ETH,還是與智能合約進行交互。然而,EOA還執行一個特殊功能,那就是智能合約部署。在智能合約的部署過程中,產生了第二種以太坊地址類型。

該過程首先將一些編譯後的EVM兼容字節碼插入到一個交易中,該交易被發送到“特殊”部署地址0x0。然後,以太坊協議本身使用一種結合EOA部署公鑰及其nonce(即地址在其生命週期內發送的交易總數)的算法。

更具體地說,將地址(20字節)和nonce(64字節)連接起來,然後將遞歸長度前綴(RLP)序列化。生成的字節序列再通過Keccak256計算得出哈希值,取最後的20個字節作為智能合約地址。

智能合約地址是非常重要的信息,因為它們是交易與合約交互的入口。例如,如果想要在UniswapV2上進行代幣互換,那麼工廠合約(Factory Contract)地址將非常重要,0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f。

量化以太坊地址

如上所述,以太坊有2160種可能的地址總數,下圖顯示了這些地址中目前鏈上所見數量。圖中,地址按類型分組,顯示了近1億個EOA賬戶的ETH餘額非零,智能合約賬戶超過3000萬個。雖然這些都是相當大的數字,但與可能的總數相比,是微不足道的,這對以太坊用戶來說是個好消息,可以放心,我們離耗盡地址還遠著呢。

4、比特幣地址

相較以太坊,比特幣地址有更多的細節需要解決。首先來看地址類型,比特地地址類型其實主要有四種:Legacy、Pay-to-Script-Hash、Segwit和Taproot。儘管比特幣使用不同的會計方法——未消費交易輸出(UTXO)模型——來跟踪鏈上的加密貨幣,但我們將重點關注下面幾種不同的地址類型。

(1)Legacy(P2PKH)地址

這些地址包括比特幣系統原始部署中使用的地址,並且很容易識別,這些地址是以“1”開頭的。它們的生成方式與以太坊地址的生成方式非常相似,從公鑰/私鑰對的生成開始。

然後像以太坊一樣,計算公鑰的哈希值,但使用的是SHA-256算法。所得的256 bit序列隨後使用RACE原始完整性校驗消息摘要(RIPEMD-160)再次計算哈希值,得到20字節(160 bit)的序列。回過頭看,這個過程與以太坊非常相似,但是,顯示為文本形式時,比特幣通常使用的是Base58CheckEncoding。這意味著20字節序列使用58個字符(1-9,AH,JN,PZ,ak,mz)編碼,而非十六進制編碼中使用的16個字符。基本上,存儲在計算機內存中的相同的160 bit的0、1序列會通過一組16字符或58字符呈現到屏幕上。當然還有很多其他編碼,但這是特別為比特幣選擇的編碼。

(2)Pay-to-Script-Hash(P2SH)地址

P2SH地址以“3”開頭,從技術上來說屬於腳本,可用於要求多重簽名的轉賬事宜等。比特幣的“Pay-to-Script-Hash”的真實性質超出了我們的探討範圍,但簡單來說,P2SH地址是使用Base58Check對腳本代碼哈希進行編碼。因此,可以將P2SH地址概念化為腳本的20個字節哈希的編碼,類似於公鑰的20個字節哈希的編碼。

(3)SegWit和Taproot 地址

為了提高區塊空間的效率並改善費用,SegWit在地址的構造方式上引入了一些變化。具體的算法細節計較乏味,因此我們在這裡跳過細節,但是人們可以輕鬆地一眼看到這些以“bc1”開頭的新地址。除了SegWit之外,以“bc1p”開頭的Taproot地址進一步提高了交易效率,並提供了更好的隱私性。

與以太坊類似,下圖顯示了按地址的總餘額大小匯總的比特幣總餘額。與以太坊類似,絕大多數比特幣由價值最高的那些地址持有。然而,仔細檢查數據以更好地理解分佈結構是非常重要的。

5、關於加密地址的更多內容

除了地址生成機制外,還有一些關於地址的其他概念我們應該理解,包括:熱/冷錢包,以及Vanity Address和ENS。

(1)熱錢包和冷錢包

加密貨幣資產“存活”在區塊鏈本身上,或被存儲為原生第一層貨幣(例如ETH或比特幣),或被存儲於智能合約餘額賬本(例如USDC、Dai、WETH)。區塊鏈本身可以被視為存儲在各自網絡節點中的分佈式數據庫。這意味著用戶並不託管加密貨幣,而是託管與各個區塊鏈上各自地址關聯的私鑰。因此,真正的私有信息必須保證安全,因為這些私有信息就是與地址相對應的私鑰。

在加密世界中,存儲私鑰的方法主要有兩種:熱錢包和冷錢包。二者很容易區別:熱錢包是連接互聯網的私鑰存儲系統,而冷錢包是沒有連接互聯網的系統。完全斷開與互聯網的連接使私鑰得到更安全的保護。想要獲取私鑰,必須先獲取冷錢包設備。總而言之,存儲在錢包中的不是加密貨幣本身,而是與區塊鏈上餘額地址相關聯的私鑰。私鑰管理越來越複雜,現在越來越流行一種數字資產安全方法,那就是多方計算(MPC),多方計算將私鑰分解為加密共享數據分配給多個參與者。

(2)Vanity Address和ENS

Vanity Address和其他地址一樣,但是,該地址的某部分將超出意料中的隨機性。前幾個字符可能會拼出一個英文單詞、短語或名稱,比如Legacy比特幣地址:1googLemzFVj8ALj6mfBsbifRoD4miY36v。這些地址可用於更輕鬆地識別交易對手方,並可用於品牌宣傳和營銷。這些地址的生成過程得到了幾個開源項目的支持,例如Vanitygen。然而,應該注意的是,這個過程可能需要非常密集的計算資源,因為它需要一個“guess-and-check”(猜測和檢查)類型的算法。謹慎的做法是,不要輕信在線工具去獲取vanity address,因為它們也會獲取你的私鑰副本,正如那句話所說的,“Not your keys, not your crypto.”。事實上,去年在“Profanity”以太坊vanity address地址生成器中就有一個漏洞被利用了。

作為一個正式的系統,為了不必須生成容易記憶的vanity address,以太坊有一個叫做以太坊域名服務(ENS)的應用程序,就像域名系統(DNS)簡化了傳統互聯網的訪問一樣。與URL非常相似,用戶可以購買以“.eth”結尾的自定義名稱,智能合約創建這些標籤的記錄,這些記錄在鏈上公開可用。借用上文提到的V神的例子,我們可以看到他的ENS名稱是vtalik .eth。 ENS名稱,就像URL一樣,讓以太坊區塊鏈更加用戶友好,因為字母數字組合比20字節序列更容易記住,這增強了網絡的便利性和安全性。

Total
0
Shares
Related Posts