咱們知道HD(分層肯定性)錢包,基於 BIP-32;多幣種和多賬戶錢包,基於 BIP-44;最近比原社區的錢包開發者對比原的BIP-32和BIP-44協議有疑問,因此我今天就專門整理了一下該協議的內容以及在比原中涉及的代碼。來作一個詳細的介紹!git
地址:https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keysgithub
BIP32:定義 Hierarchical Deterministic wallet (簡稱 「HD Wallet」),是一個系統能夠從單一個 seed 產生一樹狀結構儲存多組 keypairs(私鑰和公鑰)。好處是能夠方便的備份、轉移到其餘相容裝置(由於都只須要 seed),以及分層的權限控制等。具體的內容細節能夠翻閱文檔。算法
那麼下面我列出了在比原鏈中BIP-32協議的具體實現,具體的實現的代碼邏輯能夠在:https://github.com/Bytom/bytom/blob/master/blockchain/signers/signers.go 找到下面的方法。研究代碼實現過程.安全
地址: https://github.com/bitcoin/bips/blob/master/bip-0044.mediawikicode
BIP-44協議是基於BIP-0032和BIP-0043中描述的目的方案中描述的算法定義肯定性錢包的邏輯層級。賦予樹狀結構中的各層特殊的意義。讓同一個 seed 能夠支援多幣種、多賬戶等。各層定義以下:blog
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」定義的特殊爲目地。ip
在BIP-43 標準下,爲了延長的那個特殊規範,BIP-44提議了多帳戶結構做爲 「purpose」。全部遵循BIP-44的HD(分層肯定性)錢包依據只使用樹的第一個分支的要求而被定 義:m/44’/。 BIP-44 指定了包含5個預約義樹狀層級的結構:開發
完整註冊數字資產類型列表: https://github.com/satoshilabs/slips/blob/master/slip-0044.md文檔
被HD(分層肯定性)錢包衍生的可用的地址是第四層級的子級,就是第五層級的樹的「address_index」。好比,第三個層級的主帳戶收到比原支付的地址就是 M/44’/99’/0’/0/2。
下面介紹一下比原鏈中BIP-44協議的實現,咱們在 :https://github.com/Bytom/bytom/blob/master/blockchain/signers/signers.go 找到下面的方法。能夠研究具體的代碼實現過程。
在項目中找到 CreateAddress 方法,這個方法會用到BIP-44協議來建立地址:
比原如今會默認使用BIP-44協議,因此在下面的switch語句中,會默認到BIP0044.
到此BIP-32協議和BIP-44協議已經介紹完,而且在比原的代碼中的實現也已經列出來了。感興趣的小夥伴能夠讀代碼研究詳細的實現過程,若是有什麼問題,歡迎在比原技術社區提問!
比原項目倉庫:
Github地址:https://github.com/Bytom/bytom