文/ Alex R. Mead & Kyle Waters,Coin Metrics加密分析師;譯/金色财經xiaozou
1、前言
我們将推出(Out)名爲(For)“Foundations”(基礎)的(Of)新系列。這(This)個(Indivual)新系列将以(By)淺顯易懂的(Of)方式介紹區塊鏈技術的(Of)各“技術”維度。本文,我們會從地址概念出(Out)發。首先我們将進行地址的(Of)基本介紹,然後深入研究以(By)太坊和(And)比特币地址的(Of)詳細内容。公鑰--私鑰、EOA、智能合約,以(By)及“not your keys, not your crypto”(不(No)是(Yes)你的(Of)私鑰,也不(No)是(Yes)你的(Of)加密貨币)都将在(Exist)本文得到詳盡解釋。像往常一(One)樣,我們将使用(Use)鏈上(Superior)數據來突出(Out)關鍵概念,并提供重要(Want)背景幫助你更好理解。
2、加密貨币地址
地址的(Of)概念可能是(Yes)加密貨币世界最基本的(Of)概念。不(No)管是(Yes)哪個(Indivual)區塊鏈,地址都是(Yes)區塊鏈上(Superior)的(Of)“身份”單位,所有的(Of)交互都以(By)地址開始,以(By)地址結束。無論是(Yes)執行簡單的(Of)轉賬還是(Yes)使用(Use)DeFi協議進行複雜的(Of)交易,地址都是(Yes)至關重要(Want)的(Of)。雖然不(No)同鏈之間的(Of)地址存在(Exist)着細微差異,但它們都可以(By)用(Use)于(At)鏈上(Superior)資産唯一(One)标識和(And)分組。
接下來,我們将詳細讨論以(By)太坊地址。以(By)太坊地址有哪些不(No)同的(Of)類型,它們是(Yes)如何生成的(Of),如何使用(Use)的(Of)。然後我們将闡述比特币地址和(And)比特币網絡上(Superior)最重要(Want)的(Of)四種地址類型。
但首先要(Want)搞清楚,“擁有”地址的(Of)是(Yes)誰?
我們先來澄清一(One)些模糊的(Of)認知:單個(Indivual)地址并不(No)一(One)定意味着單個(Indivual)用(Use)戶。一(One)個(Indivual)地址背後可能有一(One)群人(People),一(One)個(Indivual)人(People)也可能有多個(Indivual)地址。一(One)個(Indivual)地址甚至可以(By)是(Yes)一(One)個(Indivual)智能合約,不(No)被任何單個(Indivual)用(Use)戶“擁有”。然而,地址是(Yes)區塊鏈中身份的(Of)原子單位,與地址所有者或操作(Do)者無關。但我們很快就會知道,真正的(Of)所有權屬于(At)地址私鑰的(Of)管理者。
3、以(By)太坊地址
以(By)太坊地址是(Yes)一(One)個(Indivual)20字節的(Of)唯一(One)序列,1字節爲(For)8 bit,所以(By)以(By)太坊有28*20 = 2160種可能的(Of)地址。雖然地址長度隻有20個(Indivual)字節,但以(By)太坊的(Of)地址空間比IPv6 2128大(Big)得多,當然,“猜測”某個(Indivual)現有賬戶的(Of)私鑰的(Of)成功概率是(Yes)非常小的(Of)。通常,地址顯示爲(For)以(By)“0x”開頭的(Of)字符串,後面是(Yes)40個(Indivual)十六進制字符(0-9,A-F)。在(Exist)以(By)太坊系統中,每個(Indivual)地址都對應着相關的(Of)原生加密貨币(Ether或ETH)餘額。餘額多少不(No)等,從略高于(At)0 ETH到最大(Big)超過1900萬ETH(信标鏈質押合約)。然而,除了(Got it)最大(Big)的(Of)地址餘額之外,ETH分布在(Exist)數百萬個(Indivual)地址上(Superior),如下所示。在(Exist)下圖,我們可以(By)看到,在(Exist)總共1.2億個(Indivual)ETH中,有近1億個(Indivual)被餘額至少爲(For)100 ETH的(Of)地址所持有。
以(By)太坊地址有兩類:外部擁有賬戶(EOA)和(And)智能合約賬戶。二者區别在(Exist)于(At)EOA關聯私鑰,而智能合約則關聯合約代碼。這(This)意味着隻有EOA可以(By)簽署交易并在(Exist)以(By)太坊系統内啓動計算,而智能合約必須由源自EOA的(Of)交易“激活”。
例如,0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045是(Yes)V神的(Of)已知個(Indivual)人(People)EOA賬戶,而0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48是(Yes)穩定币USDC的(Of)智能合約地址。對于(At)像V神這(This)樣的(Of)EOA賬戶來說,私鑰通常由商業化“錢包”管理,如MetaMask。但也可以(By)使用(Use)其他(He)方法進行管理,比如Python腳本或硬件錢包等。
以(By)太坊地址從何而來?
外部擁有賬戶(EOA)地址和(And)智能合約地址都有不(No)同的(Of)生成方式,涉及到一(One)系列加密操作(Do)。事實上(Superior),這(This)就是(Yes)加密貨币之所以(By)叫做“加密貨币”的(Of)一(One)個(Indivual)關鍵原因。
(1)EOA地址
帳戶生成過程首先是(Yes)生成私鑰,這(This)是(Yes)一(One)組256 bit(32字節)的(Of)随機數。這(This)組随機數必須保密,因爲(For)僅私鑰自身就可以(By)完全控制地址了(Got it)。這(This)個(Indivual)随機數就是(Yes)“not your keys, not your crypto”這(This)句話的(Of)根源。因爲(For)如果沒有這(This)組随機數,或者如果其他(He)人(People)得到了(Got it)這(This)組随機數,他(He)們就可以(By)訪問你的(Of)地址,獲取與你的(Of)地址綁定的(Of)身份信息,甚至竊取你留在(Exist)那裏的(Of)全部的(Of)錢和(And)藏品。
接下來,私鑰(實際上(Superior)隻是(Yes)一(One)組數字)用(Use)于(At)橢圓曲線數字簽名算法(簡稱ECDSA)的(Of)輸入。顧名思義,該算法使用(Use)橢圓曲線生成另一(One)組長度爲(For)512 bit(64字節)的(Of)數字,稱爲(For)公鑰。這(This)兩組數字統稱爲(For)公鑰/私鑰對。
最後,使用(Use)Keccak256函數計算公鑰的(Of)哈希值,産生另一(One)個(Indivual)256 bit序列(32字節)。然後截取保留該序列的(Of)最後20字節或160 bit,這(This)就是(Yes)以(By)太坊使用(Use)的(Of)地址。下圖圖解了(Got it)這(This)個(Indivual)過程。
這(This)個(Indivual)過程可以(By)通過多種方式完成,但是(Yes),大(Big)多數用(Use)戶選擇廣泛适用(Use)的(Of)“錢包軟件”(如MetaMask)或開源軟件(如web3.py)來生成和(And)管理他(He)們的(Of)私鑰。從技術上(Superior)講,除了(Got it)生成和(And)管理私鑰和(And)地址之外,EOA通常由一(One)個(Indivual)人(People)、一(One)群人(People)或具有關聯私鑰訪問權限的(Of)專業保管人(People)控制。該私鑰用(Use)于(At)簽署交易,這(This)是(Yes)将ETH發送到另一(One)個(Indivual)EOA賬戶或智能合約的(Of)關鍵步驟,私鑰必須保密并進行高度安全的(Of)妥善保管。我們在(Exist)下文講到冷錢包時(Hour)會進行更多相關探讨。
(2)智能合約地址
EOA是(Yes)在(Exist)以(By)太坊上(Superior)使用(Use)區塊鏈的(Of)第一(One)步,無論是(Yes)在(Exist)簡單的(Of)轉賬交易中發送ETH,還是(Yes)與智能合約進行交互。然而,EOA還執行一(One)個(Indivual)特殊功能,那就是(Yes)智能合約部署。在(Exist)智能合約的(Of)部署過程中,産生了(Got it)第二種以(By)太坊地址類型。
該過程首先将一(One)些編譯後的(Of)EVM兼容字節碼插入到一(One)個(Indivual)交易中,該交易被發送到“特殊”部署地址0x0。然後,以(By)太坊協議本身使用(Use)一(One)種結合EOA部署公鑰及其nonce(即地址在(Exist)其生命周期内發送的(Of)交易總數)的(Of)算法。
更具體地說,将地址(20字節)和(And)nonce(64字節)連接起來,然後将遞歸長度前綴(RLP)序列化。生成的(Of)字節序列再通過Keccak256計算得出(Out)哈希值,取最後的(Of)20個(Indivual)字節作(Do)爲(For)智能合約地址。
智能合約地址是(Yes)非常重要(Want)的(Of)信息,因爲(For)它們是(Yes)交易與合約交互的(Of)入口。例如,如果想要(Want)在(Exist)UniswapV2上(Superior)進行代币互換,那麽工廠合約(Factory Contract)地址将非常重要(Want),0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f。
量化以(By)太坊地址
如上(Superior)所述,以(By)太坊有2160種可能的(Of)地址總數,下圖顯示了(Got it)這(This)些地址中目前鏈上(Superior)所見數量。圖中,地址按類型分組,顯示了(Got it)近1億個(Indivual)EOA賬戶的(Of)ETH餘額非零,智能合約賬戶超過3000萬個(Indivual)。雖然這(This)些都是(Yes)相當大(Big)的(Of)數字,但與可能的(Of)總數相比,是(Yes)微不(No)足道的(Of),這(This)對以(By)太坊用(Use)戶來說是(Yes)個(Indivual)好消息,可以(By)放心,我們離耗盡地址還遠着呢。
4、比特币地址
相較以(By)太坊,比特币地址有更多的(Of)細節需要(Want)解決。首先來看地址類型,比特地地址類型其實主要(Want)有四種:Legacy、Pay-to-Script-Hash、Segwit和(And)Taproot。盡管比特币使用(Use)不(No)同的(Of)會計方法——未消費交易輸出(Out)(UTXO)模型——來跟蹤鏈上(Superior)的(Of)加密貨币,但我們将重點關注下面幾種不(No)同的(Of)地址類型。
(1)Legacy(P2PKH)地址
這(This)些地址包括比特币系統原始部署中使用(Use)的(Of)地址,并且很容易識别,這(This)些地址是(Yes)以(By)“1”開頭的(Of)。它們的(Of)生成方式與以(By)太坊地址的(Of)生成方式非常相似,從公鑰/私鑰對的(Of)生成開始。
然後像以(By)太坊一(One)樣,計算公鑰的(Of)哈希值,但使用(Use)的(Of)是(Yes)SHA-256算法。所得的(Of)256 bit序列随後使用(Use)RACE原始完整性校驗消息摘要(Want)(RIPEMD-160)再次計算哈希值,得到20字節(160 bit)的(Of)序列。回過頭看,這(This)個(Indivual)過程與以(By)太坊非常相似,但是(Yes),顯示爲(For)文本形式時(Hour),比特币通常使用(Use)的(Of)是(Yes)Base58CheckEncoding。這(This)意味着20字節序列使用(Use)58個(Indivual)字符(1-9,A-H,J-N,P-Z,a-k,m-z)編碼,而非十六進制編碼中使用(Use)的(Of)16個(Indivual)字符。基本上(Superior),存儲在(Exist)計算機内存中的(Of)相同的(Of)160 bit的(Of)0、1序列會通過一(One)組16字符或58字符呈現到屏幕上(Superior)。當然還有很多其他(He)編碼,但這(This)是(Yes)特别爲(For)比特币選擇的(Of)編碼。
(2)Pay-to-Script-Hash(P2SH)地址
P2SH地址以(By)“3”開頭,從技術上(Superior)來說屬于(At)腳本,可用(Use)于(At)要(Want)求多重簽名的(Of)轉賬事宜等。比特币的(Of)“Pay-to-Script-Hash”的(Of)真實性質超出(Out)了(Got it)我們的(Of)探讨範圍,但簡單來說,P2SH地址是(Yes)使用(Use)Base58Check對腳本代碼哈希進行編碼。因此,可以(By)将P2SH地址概念化爲(For)腳本的(Of)20個(Indivual)字節哈希的(Of)編碼,類似于(At)公鑰的(Of)20個(Indivual)字節哈希的(Of)編碼。
(3)SegWit和(And)Taproot 地址
爲(For)了(Got it)提高區塊空間的(Of)效率并改善費用(Use),SegWit在(Exist)地址的(Of)構造方式上(Superior)引入了(Got it)一(One)些變化。具體的(Of)算法細節計較乏味,因此我們在(Exist)這(This)裏跳過細節,但是(Yes)人(People)們可以(By)輕松地一(One)眼看到這(This)些以(By)“bc1”開頭的(Of)新地址。除了(Got it)SegWit之外,以(By)“bc1p”開頭的(Of)Taproot地址進一(One)步提高了(Got it)交易效率,并提供了(Got it)更好的(Of)隐私性。
與以(By)太坊類似,下圖顯示了(Got it)按地址的(Of)總餘額大(Big)小彙總的(Of)比特币總餘額。與以(By)太坊類似,絕大(Big)多數比特币由價值最高的(Of)那些地址持有。然而,仔細檢查數據以(By)更好地理解分布結構是(Yes)非常重要(Want)的(Of)。
5、關于(At)加密地址的(Of)更多内容
除了(Got it)地址生成機制外,還有一(One)些關于(At)地址的(Of)其他(He)概念我們應該理解,包括:熱/冷錢包,以(By)及Vanity Address和(And)ENS。
(1)熱錢包和(And)冷錢包
加密貨币資産“存活”在(Exist)區塊鏈本身上(Superior),或被存儲爲(For)原生第一(One)層貨币(例如ETH或比特币),或被存儲于(At)智能合約餘額賬本(例如USDC、Dai、WETH)。區塊鏈本身可以(By)被視爲(For)存儲在(Exist)各自網絡節點中的(Of)分布式數據庫。這(This)意味着用(Use)戶并不(No)托管加密貨币,而是(Yes)托管與各個(Indivual)區塊鏈上(Superior)各自地址關聯的(Of)私鑰。因此,真正的(Of)私有信息必須保證安全,因爲(For)這(This)些私有信息就是(Yes)與地址相對應的(Of)私鑰。
在(Exist)加密世界中,存儲私鑰的(Of)方法主要(Want)有兩種:熱錢包和(And)冷錢包。二者很容易區别:熱錢包是(Yes)連接互聯網的(Of)私鑰存儲系統,而冷錢包是(Yes)沒有連接互聯網的(Of)系統。完全斷開與互聯網的(Of)連接使私鑰得到更安全的(Of)保護。想要(Want)獲取私鑰,必須先獲取冷錢包設備。總而言之,存儲在(Exist)錢包中的(Of)不(No)是(Yes)加密貨币本身,而是(Yes)與區塊鏈上(Superior)餘額地址相關聯的(Of)私鑰。私鑰管理越來越複雜,現在(Exist)越來越流行一(One)種數字資産安全方法,那就是(Yes)多方計算(MPC),多方計算将私鑰分解爲(For)加密共享數據分配給多個(Indivual)參與者。
(2)Vanity Address和(And)ENS
Vanity Address和(And)其他(He)地址一(One)樣,但是(Yes),該地址的(Of)某部分将超出(Out)意料中的(Of)随機性。前幾個(Indivual)字符可能會拼出(Out)一(One)個(Indivual)英文單詞、短語或名稱,比如Legacy比特币地址:1googLemzFVj8ALj6mfBsbifRoD4miY36v。這(This)些地址可用(Use)于(At)更輕松地識别交易對手方,并可用(Use)于(At)品牌宣傳和(And)營銷。這(This)些地址的(Of)生成過程得到了(Got it)幾個(Indivual)開源項目的(Of)支持,例如Vanitygen。然而,應該注意的(Of)是(Yes),這(This)個(Indivual)過程可能需要(Want)非常密集的(Of)計算資源,因爲(For)它需要(Want)一(One)個(Indivual)“guess-and-check”(猜測和(And)檢查)類型的(Of)算法。謹慎的(Of)做法是(Yes),不(No)要(Want)輕信在(Exist)線工具去獲取vanity address,因爲(For)它們也會獲取你的(Of)私鑰副本,正如那句話所說的(Of),“Not your keys, not your crypto.”。事實上(Superior),去年在(Exist)“Profanity”以(By)太坊vanity address地址生成器中就有一(One)個(Indivual)漏洞被利用(Use)了(Got it)。
作(Do)爲(For)一(One)個(Indivual)正式的(Of)系統,爲(For)了(Got it)不(No)必須生成容易記憶的(Of)vanity address,以(By)太坊有一(One)個(Indivual)叫做以(By)太坊域名服務(ENS)的(Of)應用(Use)程序,就像域名系統(DNS)簡化了(Got it)傳統互聯網的(Of)訪問一(One)樣。與URL非常相似,用(Use)戶可以(By)購買以(By)“.eth”結尾的(Of)自定義名稱,智能合約創建這(This)些标簽的(Of)記錄,這(This)些記錄在(Exist)鏈上(Superior)公開可用(Use)。借用(Use)上(Superior)文提到的(Of)V神的(Of)例子,我們可以(By)看到他(He)的(Of)ENS名稱是(Yes)vtalik .eth。ENS名稱,就像URL一(One)樣,讓以(By)太坊區塊鏈更加用(Use)戶友好,因爲(For)字母數字組合比20字節序列更容易記住,這(This)增強了(Got it)網絡的(Of)便利性和(And)安全性。
微信咨詢