1. 程式人生 > 其它 >以太坊地址和公鑰_以太坊的私鑰、公鑰、地址、賬戶

以太坊地址和公鑰_以太坊的私鑰、公鑰、地址、賬戶

技術標籤:以太坊地址和公鑰

私鑰、公鑰、地址

f926d3ac2474dec9c563688d42d525bc.png

以太坊的私鑰、公鑰、地址之間的關係是,隨機生成私鑰、根據私鑰計算出公鑰、根據公鑰計算出地址。

私鑰是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