Bytom BIP-32協議和BIP-44協議解讀

咱們知道HD(分層肯定性)錢包,基於 BIP-32;多幣種和多賬戶錢包,基於 BIP-44;最近比原社區的錢包開發者對比原的BIP-32和BIP-44協議有疑問,因此我今天就專門整理了一下該協議的內容以及在比原中涉及的代碼。來作一個詳細的介紹!git

BIP-32協議

BIP32協議原英文地址:

地址: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 找到下面的方法。研究代碼實現過程.安全

比原鏈中BIP32協議的代碼實現:

avatar

BIP-44協議

BIP-44原英文協議地址

地址: 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個預約義樹狀層級的結構:開發

第一層的 purpose 老是被設定爲 44’。
第二層的「coin_type」特指幣種而且容許多元貨幣 HD 錢包中的貨幣在第二個層級下有本身的亞樹狀結構。常見的數字資產定義:Bitcoin is m/44’/0’、Ethereum Testnet is m/44’/1’,以及 Bytom is m/44’/99’。

完整註冊數字資產類型列表: https://github.com/satoshilabs/slips/blob/master/slip-0044.md文檔

第三層級是「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/bytom/blob/master/blockchain/signers/signers.go 找到下面的方法。能夠研究具體的代碼實現過程。

比原鏈中BIP44協議的實現:

avatar

比原中用BIP-44生成錢包地址

在項目中找到 CreateAddress 方法,這個方法會用到BIP-44協議來建立地址:

avatar

avatar

比原如今會默認使用BIP-44協議,因此在下面的switch語句中,會默認到BIP0044.

avatar

avatar

到此BIP-32協議和BIP-44協議已經介紹完,而且在比原的代碼中的實現也已經列出來了。感興趣的小夥伴能夠讀代碼研究詳細的實現過程,若是有什麼問題,歡迎在比原技術社區提問!

比原項目倉庫:

Github地址:https://github.com/Bytom/bytom

Gitee地址:https://gitee.com/BytomBlockchain/bytom

相關文章
相關標籤/搜索