以太坊地址和公鑰_以太坊的私鑰、公鑰、地址、賬戶
阿新 • • 發佈:2021-01-16
技術標籤:以太坊地址和公鑰
私鑰、公鑰、地址
以太坊的私鑰、公鑰、地址之間的關係是,隨機生成私鑰、根據私鑰計算出公鑰、根據公鑰計算出地址。
私鑰是256bit,相當於32位元組;用16進製表示的話,就是64個字元。
私鑰的生成,本質上和選取一個1到2^256之間的數字幾乎一致,其中一種方法就是在很大的空間中選擇一個隨機數,然後使用SHA256計算其雜湊,作為私鑰。
通過私鑰,可以生成一個64位元組的公鑰,生成辦法是通過橢圓曲線演算法,這個演算法是確定性的。
私鑰進行Keccak-256計算之後,用16進製表示,保留最後20位,就是地址了。
舉例:
第一步:私鑰 (private key) 偽隨機數產生的256bit私鑰示例(256bit 16進位制32位元組) 18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725 第二步:公鑰 (public key) 1. 採用橢圓曲線數字簽名演算法ECDSA-secp256k1將私鑰(32位元組)對映成公鑰(65位元組)(字首04+X公鑰+Y公鑰): 04 50863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352 2cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6 2. 拿公鑰(非壓縮公鑰)來hash,計算公鑰的 Keccak-256 雜湊值(32bytes): fc12ad814631ba689f7abe671016f75c54c607f082ae6b0881fac0abeda21781 3. 取上一步結果取後20bytes即以太坊地址: 1016f75c54c607f082ae6b0881fac0abeda21781 第三步:地址 (address) 0x1016f75c54c607f082ae6b0881fac0abeda21781
每一個地址,指向一個賬戶。
賬戶
賬戶是一個物件,它包含地址、餘額、nonce,並且儲存了狀態和程式碼(皆可為空)。
以太坊的賬戶,分為兩種。
第一種是外部賬戶,也就是我們常說的EOA,Externally Owned Accounts。
另一種是合約賬戶,就是Contracts Accounts。
跟隨賬戶的屬性,我們叫做狀態物件(state objects)。對於外部賬戶,狀態物件主要是餘額;對於合約賬戶,既會有餘額,也會有合約內容。
參考
《以太坊賬戶私鑰、公鑰、地址的生成》 https://www.cnblogs.com/kumata/p/10591394.html
《【Ethereum基礎】:賬戶、地址、私鑰和公鑰》http://blog.luoyuanhang.com/2018/04/17/eth-basis-accounts-address-pubkey-prikey