Bytom BIP-32協議和BIP-44協議
我們知道HD(分層確定性)錢包,基於 BIP-32;多幣種和多帳戶錢包,基於 BIP-44;最近比原社群的錢包開發者對比原的BIP-32和BIP-44協議有疑問,所以我今天就專門整理了一下該協議的內容以及在比原中涉及的程式碼。來做一個詳細的介紹!
BIP-32協議
BIP32協議原英文地址:
地址: https://github.com/bitcoin/bi...
BIP32:定義 Hierarchical Deterministic wallet (簡稱 “HD Wallet”),是一個系統可以從單一個 seed 產生一樹狀結構儲存多組 keypairs(私鑰和公鑰)。好處是可以方便的備份、轉移到其他相容裝置(因為都只需要 seed),以及分層的許可權控制等。具體的內容細節可以翻閱文件。
那麼下面我列出了在比原鏈中BIP-32協議的具體實現,具體的實現的程式碼邏輯可以在: https://github.com/Bytom/byto... 找到下面的方法。研究程式碼實現過程.
比原鏈中BIP32協議的程式碼實現:
BIP-44協議
BIP-44原英文協議地址
地址: https://github.com/bitcoin/bi...
BIP-44協議是基於BIP-0032和BIP-0043中描述的目的方案中描述的演算法定義確定性錢包的邏輯層級。賦予樹狀結構中的各層特殊的意義。讓同一個 seed 可以支援多幣種、多帳戶等。各層定義如下:
m / purpose' / coin_type' / account' / change / address_index //purporse': 固定值44', 代表是BIP44 //coin_type': 這個代表的是幣種, 可以相容很多種幣, 比如BTC是0', ETH是60,BTM是99' //btc一般是 m/44'/0'/0'/0 //eth一般是 m/44'/60'/0'/0 //btm一般是 m/44'/99'/0'/0
HD(分層確定性)錢包樹狀結構提供了極大的靈活性。每一個母擴充套件金鑰有 40 億個子金鑰:20 億個常規子金鑰和 20 億個強化子金鑰。而每個子金鑰又會有 40 億個子金鑰並 且以此類推。只要你願意,這個樹結構可以無限類推到無窮代。但是,又由於有了這個靈活性,對無限的樹狀結構進行導航就變得異常困難。尤其是對於在不同的HD錢包之間進行轉移交易,因為內部組織到內部分支以及亞分支的可能性是無窮的.
BIP-43 提出使用第一個強化子索引作為特殊的識別符號表示 樹狀結構的“purpose”。基於BIP-43,HD(分層確定性)錢包應該使用且只用第一層級的樹的分 支,而且有索引號碼去識別結構並且有名稱空間來定義剩餘的樹的目的地。舉個例子,HD(分層確定性)錢包只使用分支 m/i’/是為了表明那個被索引號“i”定義的特殊為目地。
在BIP-43 標準下,為了延長的那個特殊規範,BIP-44提議了多賬戶結構作為 “purpose”。所有遵循BIP-44的HD(分層確定性)錢包依據只使用樹的第一個分支的要求而被定 義:m/44’/。 BIP-44 指定了包含5個預定義樹狀層級的結構:
第一層的 purpose 總是被設定為 44’。
第二層的“coin_type”特指幣種並且允許多元貨幣 HD 錢包中的貨幣在第二個層級下有自己的亞樹狀結構。常見的數字資產定義:Bitcoin is m/44’/0’、Ethereum Testnet is m/44’/1’,以及 Bytom is m/44’/99’。
完整註冊數字資產型別列表: https://github.com/satoshilab...
第三層級是“account”,這可以允許使用者為了會計或者組織目的,而去再細 分他們的錢包到獨立的邏輯性亞賬戶。 舉個例子,一個HD錢包可能包含兩個比 特幣“賬戶”:m/44’/0’/0’ 和 m/44’/0’/1’。每個賬戶都是它自己亞樹的根。
第四層級就是“change”。每一個HD錢包有兩個亞樹,一個是用來接收地址一個是用來創造找零地址。注意無論先前的層級是否使用強化衍生,這一層級使用的都 是常規衍生。這是為了允許這一層級的樹可以在不安全環境下,輸出擴充套件公鑰。
被HD(分層確定性)錢包衍生的可用的地址是第四層級的子級,就是第五層級的樹的“address_index”。比如,第三個層級的主賬戶收到比原支付的地址就是 M/44’/99’/0’/0/2。
下面介紹一下比原鏈中BIP-44協議的實現,我們在 : https://github.com/Bytom/byto... 找到下面的方法。可以研究具體的程式碼實現過程。
比原鏈中BIP44協議的實現:
比原中用BIP-44生成錢包地址
在專案中找到 CreateAddress 方法,這個方法會用到BIP-44協議來建立地址:
比原現在會預設使用BIP-44協議,所以在下面的switch語句中,會預設到BIP0044.
到此BIP-32協議和BIP-44協議已經介紹完,並且在比原的程式碼中的實現也已經列出來了。感興趣的小夥伴可以讀程式碼研究詳細的實現過程,如果有什麼問題,歡迎在比原技術社群提問!
比原專案倉庫:
Github地址: https://github.com/Bytom/bytom
Gitee地址: https://gitee.com/BytomBlockc...