1. 程式人生 > >太極錢包地址的生成過程

太極錢包地址的生成過程

太極錢包的地址生成流程是:私鑰——公鑰——地址。

先囉嗦一點計算機知識:位,位元組,字,KB,MB

位:“位(bit)”是電子計算機中最小的資料單位。每一位的狀態只能是0或1。
位元組:8個二進位制位構成1個“位元組(Byte)”,它是儲存空間的基本計量單位。1個位元組用16進位制來表示是兩個字元,比如1011 1111可以表示為AF、1110 0000可以表示為E0。
字:“字”由若干個位元組構成,字的位數叫做字長,不同檔次的機器有不同的字長。例如一臺8位機,它的1個字就等於1個位元組,字長為8位。如果是一臺16位機,那麼,它的1個字就由2個位元組構成,字長為16位。字是計算機進行資料處理和運算的單位。
KB:K表示1024,也就是2的10次方。1KB表示1K個Byte,也就是1024個位元組。
MB:1MB = 220 Bytes = 1048576Bytes

1.私鑰是一個256位隨機數,根據上面的計算機知識,所謂256位就是256個0和1組成的數字,256除以8等於32,即32個位元組,用16進製表示這個數的範圍大小是介於0x0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之間的一個數。我們隨機生成一個合法的私鑰如下:
8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3

2.橢圓曲線算公鑰:

生成了私鑰之後,我們使用橢圓曲線加密演算法(ECDSA-secp256k1)計算私鑰所對應的非壓縮公鑰,生成的公鑰共65位元組, 其中一個位元組是0x04,非壓縮的公鑰如下:
0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB

3.對公鑰雜湊技術

對上面的公鑰進行SHA-256雜湊計算,得到結果:2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d
計算 RIPEMD-160雜湊值
取上一步結果,進行RIPEMD-160計算,得到結果:
0b14f003d63ab31aef5fedde2b504699547dd1f6

4.加入地址版本號

主網版本號“0x00”,取上一步結果,在前面加上16進位制的00,即:000b14f003d63ab31aef5fedde2b504699547dd1f6
計算 SHA-256 雜湊值
取上一步結果,進行SHA-256計算,可得:
ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536
然後,對以上結果再次計算 SHA-256 雜湊值,得到:
869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078
取上一步結果的前4個位元組(8位十六進位制)869ac57b
把這4個位元組加在第五步的結果後面作為校驗位,將這4個位元組載入第五步的結果後面,這就是地址的16進位制形態了:869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6

5.用Base58編碼變換地址

對上一步的結果進行Base58編碼,得到:
1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7

從上面的的地址生成流程來看,錢包的本質其實就是一個私鑰,它是一個隨機的雜湊值字串,擁有了私鑰就擁有了該錢包的使用權。但是為什麼在講太極錢包的時候,還有keystore,助記詞、冷錢包、熱錢包、硬體錢包等等相關的概念,讓人產生很多迷惑。