之前了解了比特幣的私鑰留夜、公鑰和地址谋减。簡單地說岂傲,私鑰是256位的隨機數(shù)麦向,公鑰是私鑰通過橢圓曲線算法計算出來,而地址是公鑰經(jīng)過哈希算法得出浴韭。
而比特幣錢包丘喻,廣義上是指為用戶管理私鑰和地址、跟蹤余額和創(chuàng)建交易的應(yīng)用程序念颈。狹義上仓犬,是指管理密鑰的容器。不同與現(xiàn)實中的錢包舍肠,比特幣錢包里面存放的只是密鑰搀继,好比放的只是保險柜鑰匙。
比特幣有兩種類型的錢包:
第一種類型是非確定性錢包(nondeterministic wallet)翠语,其中每個密鑰都是從隨機數(shù)獨立生成的叽躯。密鑰彼此無關(guān)。
第二種類型是確定性錢包(deterministic wallet)肌括,其中所有的密鑰都是從一個主密鑰派生出來点骑,這個主密鑰即為種子(seed)酣难。該類型錢包中所有密鑰都相互關(guān)聯(lián),如果有原始種子黑滴,則可以再次生成全部密鑰憨募。確定性錢包中使用了許多不同的密鑰推導方法。最常用的推導方法是使用樹狀結(jié)構(gòu)袁辈,稱為分級確定性錢包或HD錢包菜谣。
非確定性錢包是指錢包里各個私鑰之間互不關(guān)聯(lián)。
確定性錢包是指錢包里所有的私鑰是從一個主密鑰計算派生出來晚缩,這個主密鑰即為種子Seed尾膊。最常用的派生推導方法是樹狀結(jié)構(gòu),稱為分級確定性錢包或HD錢包荞彼。而為了方便使用冈敛,種子Seed又會被編碼成英文單詞,即助記詞鸣皂。
而現(xiàn)在的比特幣錢包是確定性錢包抓谴,HD錢包是基于BIP-32。在wallet.cpp寞缝,GenerateNewKey會生成新的比特幣地址癌压,其中會判斷是否HD錢包模式。
1.將種子Seed通過HMAC-SHA512生成主私鑰master private key和一個鏈碼chain code第租,主私鑰再計算出主公鑰master public key措拇。
2.用master private key + chain code可以得到指定的子私鑰sub private key我纪;
3.用 master public key + chain code可以得到指定的子公鑰sub-public key慎宾;
作者:區(qū)塊鏈研習社比特幣源碼研讀班,caiklaus