位元幣的原理
一、位元幣交易
交易是將錢從交易輸入移至輸出,輸入是指錢幣的來源,通常是之前 一筆交易的輸出,交易的輸出則是通過關聯一個密鑰的方式將錢賦予一個 新的所有者,目的密鑰被稱為是安全鎖(Encumbrance),這樣就給資 金強加了一個要求:有簽名才能在以后的交易中贖回資金,一筆交易的輸 - 27 -
出可以被當做另一筆新交易的輸入,這樣隨著錢從一個地址被移動到另一 個地址的同時形成了一條所有權鏈

二、常見的交易形式
形式一
最常見的交易形式是從一個地址到另一個地址的簡單支付,這種交易也常常 包含給支付者的“找零”,一般交易有一個輸入和兩個輸出

形式二
集合多個輸入到一個輸出,這 相當于現實生活中將很多硬幣和紙幣零錢兌換為一個大額面鈔,像這樣的交易有 時由錢包應用產生來清理許多在支付程序收到的小數額的找零,

形式三
一個輸入分配給多個輸 出,即多個接收者的交易,這類交易有時被商業物體用作分配資金, 例如給多個雇員發工資的情形

三、交易的構建
位元幣交易建立和簽名時不用連接位元幣網路, 只有在執行交易時才需要將交易發送到網路
獲取正確的輸入
查找 Alice 的位元幣地址所有的未消費的輸出
https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwB ttQcwXYCpvK8h7FK
這個 URL 會回傳一個地址的所有未消費交易輸出,以提供給需要這些資訊的任何應用作為建立新交易的輸入而進行消費,
通過未消費輸入資料就可以創建新的交易將錢轉賬到新地址,
在單個未消費的輸出中有足夠的位元幣支付一杯咖啡,假如不夠的話,Alice 的錢包應用就不得不搜尋一些小的未消費輸出,像是 從一個存錢罐里找硬幣一樣,直到找到足夠支付咖啡的數量
UTXO(未花費的交易輸出)
創建交易輸出
Alice 的錢包將她的金額分成了兩個支付:一個給 Bob,一個給自己,她可以在 以后的交易里消費這筆零錢輸出,
最后,為了讓這筆交易盡快地被網路處理,Alice 的錢包會多付一小筆費用, 這個不是明顯地包含在交易中的;而是通過輸入和輸出的差值所隱含的,就是交易費
四、位元幣挖礦
這個交易現在在位元幣網路上傳播開來,但只有被一個稱為挖礦的程序驗證 且加到一個區塊中之后,這個交易才會成為這個共享賬簿(區塊鏈)的一部分
挖礦在位元幣系統中起著兩個作用:
? 挖礦在構建區塊時會創造新的位元幣,和一個中央銀行印發新的紙幣很類似, 每個區塊創造的位元幣數量是固定的,隨時間會漸漸減少,
? 挖礦創建信任,挖礦確保只有在包含交易的區塊上貢獻了足夠的計算量后, 這些交易才被 確認,區塊越多,花費的計算量越大,意味著更多的信任,
將挖礦類比為一個巨大的多人數獨謎題游戲,一旦有人發現正解之后,這個數 獨游戲會自動調整困難度以使游戲每次需要大約 10 分鐘解決,
如果給你一個已經完成的數獨,你可以很快地驗證它, 然而,如果這個數獨只有幾個方格里有數字其余方格都為空的話,就會花費非常 長的時間來解決,
這個數獨游戲的困難度可以通過改變其大小(更多或更少行列) 來調整,但即使它非常大時驗證它也是相當容易的
五、區塊中的挖礦交易記錄
網路中產生的一筆交易直到成為整個位元幣大賬簿——區塊鏈的一部分時 才會被確認有效
平均每 10 分鐘,礦工會將自上一個區塊以來發生的所有交易 生成一個新的區塊,
礦工一旦從網路上收到一個新區塊時,會意識到在這個區塊上的解題競賽已經輸 掉了,會馬上開始下一個新區塊的挖掘作業,
Alice 的交易被網路拿到后放進未驗證交易池中,因為包含足夠的交易費, 它被 Jing 的礦池放到了生成的新區塊中,大約在 Alice 的錢包第一次將這個交 易發送出來五分鐘后,Jing 的 ASIC 礦機發現了新區塊的正解并將之發布為第 277,316 號區塊,包含 419 個其它交易,Jing 的 ASIC 礦機將這個新區塊發布 到網路上后,其它礦機就會驗證它,并投身到構建新區塊的競賽中,
幾分鐘后,第 277,317 號新區塊誕生在另一個挖礦節點中,因為這個新區塊是 基于包含 Alice 交易的第 277,316 號區塊的,在這個區塊的基礎上增加了更多的 計算,因此就加強了這些交易的可信度,包含 Alice 交易的區塊對這個交易來說 算一次"證明",基于這個區塊每產生一個新區塊,對這個交易來說就會增加了一 次"證明",當區塊一個個堆上來時,這個交易變得指數級地越來越難被推翻,因 此它在網路中得到更多信任,

區塊鏈的高度增長, 每個區塊和整個鏈的計算復雜度也隨之增加
一個區塊獲得6次以上證明,就不可撤銷了,因為撤銷和重建6個區塊需要巨量計算,
六、消費這筆交易
既然 Alice 的這筆交易已經成為區塊的一部分被嵌入到了區塊鏈中,它就成 為了整個分布式位元幣賬簿的一部分并對所有位元幣客戶端應用可見,每個位元 幣客戶端都能獨立地驗證這筆交易是有效且可消費的,全索引客戶端可以追錢款 的來源,
從第一次有位元幣在區塊里生成的那一刻開始,按交易與交易間的關系 順藤摸瓜,直到 Bob 的交易地址,輕量級客戶端通過確認一個交易在區塊鏈中 且在它后面有幾個新區塊來確認一個支付的合法性,這種方式叫做簡易支付驗證
Bob 現在可以將此交易和其它交易的結果資訊作為輸入,創建新的所有權為 其他人的交易,這樣就實作了對此交易的消費
位元幣客戶端
我們用 createrawtransaction 命令去建立一筆交易,我們將交易的收入(50 已 確認未支出的 mBTC)和兩筆交易的輸出(送往新地址的位元幣和從原先賬戶找 回的零錢)作為 createrawtransaction 的引數
我們的交易“消耗了”從我們已確認的交易中未花費的輸出,然后將 它變成兩筆輸出,一個是走向了新地址的 25mBTC,另一個是從原來地址回傳 的 24.5mBTC 零錢,這之間 0.5mBTC 的差額作為交易費,以獎勵挖出包含我們 這筆交易區塊的礦工
我們使用 signrawtransaction 命令去簽名交易,它需要原 始十六進制的字串作為引數,
(一個加密的錢包在簽名之前必須解密,因為簽名需要利用錢包中的秘鑰)
簽名后,交易中的收入包含了 scritSig,一串證明錢包地址 1hvz…所有權的數字簽 名,同時移除了支出上的障礙,然后我們可以對錢包中的錢進行消費,簽名可以 讓這筆交易被位元幣交易網路中的任何節點驗證,使他們變得可靠,
當使用 sendrawtransaction 命令發布交易到位元幣網路時,它會回傳交易 的哈希值,
一筆交易的三個步驟:
構造交易
val createrawtransaction = createrawtransaction(未支出的btc,兩筆交易的輸出)
簽名交易
val signrawtransaction = signrawtransaction(createrawtransaction )
發送交易
val hash = sendrawtransaction (signrawtransaction)
其他替代客戶端、資料庫、工具包
除了參考客戶端(bitcoind),還可以使用其他的客戶端和資料庫去連接比 特幣網路和資料結構,這些工具都由一系列的編程語言執行,用他們各自的語言 為位元幣程式提供原生的互動, 其他的執行方式包括:
? libbitcoin 和 sx tools 一款 C++,通過命令列完成的全節點多執行緒客戶端與程式庫
? bitcoinj 一款全節點 java 客戶端和程式庫
? btcd 一款全節點 GO 語言的位元幣客戶端
? Bits of Proof(BOP) 一款 Java 企業級平臺的位元幣工具
? picocoin 一款輕量級位元幣執行客戶端
? pybitcointools 一款 Python 語言的位元幣程式庫
? pycoin 另一款 Python 語言的位元幣程式庫 在其他的編程語言中,還有許多形式的位元幣(程式)庫,開發者也盡其所能, 一直在盡力創造新的位元幣工具,
密鑰、地址、錢包
一、密鑰
密鑰是成對出現的,由一個私鑰和一個公鑰所組成,公鑰就像 銀行的帳號,而私鑰就像控制賬戶的 PIN 碼或支票的簽名,位元幣的用戶很少會直接看到數字密鑰,一般情況下,它們被存盤在錢包檔案內,由位元幣錢包軟體進行管理
收件人的公鑰是通過其數字指紋表示的,稱為比 特幣地址,就像支票上的支付物件的名字(即“收款方”),一般情況下,位元 幣 地址由一個公鑰生成并對應于這個公鑰,然而,并非所有位元幣地址都是公鑰
在位元幣系統中,我們用公鑰加密創建一個密鑰對,用于控制位元幣的獲取,密 鑰對包括一個私鑰,和由其衍生出的唯一的公鑰,公鑰用于接收位元幣,而私鑰 用于位元幣支付時的交易簽名,
公鑰可以由私鑰計算得到,所以只存盤私鑰也是可以的
一個位元幣錢包中包含一系列的密鑰對,每個密鑰對包括一個私鑰和一個公 鑰,私鑰(k)是一個數字,通常是隨機選出的,有了私鑰,我們就可以使用橢 圓 曲線乘法這個單向加密函式產生一個公鑰(K),有了公鑰(K),我們就可 以使用一個單向加密哈希函式生成位元幣地址(A)

私鑰必須始終保持機密,因為一旦被泄露給 第三方,相當于該私鑰保護之下的位元幣也拱手相讓了,
私鑰還必須進行備份,以防意外 丟失,因為私鑰一旦丟失就難以復原,其所保護的位元幣也將永遠丟 失
錢包匯入格式(WIF,Wallet Import Format)
通過橢圓曲線乘法可以從私鑰計算得到公鑰,這是不可逆轉的程序,其反向運 算,被稱為“尋找離散對數”——已知公鑰 K 來求出私鑰 k——是非常困難的,
橢圓曲線密碼學解釋
橢圓曲線加密法是一種基于離散對數問題的非對稱(或公鑰)加密法,可以 用對橢圓曲線上的點進行加法或乘法運算來表達
位元幣使用了 secp256k1 標準所定義的一條特殊的橢圓曲線和一系列數學常 數,
因為其中的數學運算是單向的,所以私鑰可以轉換為公鑰,但公鑰不能轉換回私鑰
大多數位元幣程式使用 OpenSSL 加密庫進行橢圓曲線計算,例如, 呼叫 EC_POINT_mul() 函式,可計算得到公鑰
二、地址
位元幣地址是一個由數字和字母組成的字串,可以與任何想給你位元幣的 人分享,由公鑰(一個同樣由數字和字母組成的字串)生成的位元幣地址以數 字“1”開頭,
位元幣地址可以代表一對公鑰和私鑰的所有者
位元幣地址可由公鑰經過單向的加密哈希演算法得到,哈希演算法是一種單向函 數,接收任意長度的輸入產生指紋摘要,加密哈希函式在位元幣中被廣泛使用: 比 特幣地址、腳本地址以及在挖礦中的作業量證明演算法,由公鑰生成位元幣地 址時使用的演算法是 Secure Hash Algorithm (SHA)和 the RACE Integrity Primitives Evaluation Message Digest (RIPEMD),特別是 SHA256 和 RIPEMD160
通常用戶見到的位元幣地址是經過“Base58Check”編碼的,這種編碼使用 了 58 個字符(一種 Base58 數字系統)和校驗碼,提高了可讀性、避免歧義并有效防止了在地址轉 錄和輸入中產生的錯誤

Base58 和 Base58Check 編碼
Base58 是一種基于文本的 二進制編碼格式,用在位元幣和其它的加密貨幣中,這種編碼格式不僅實作了資料壓縮,保持了易讀性,還具有錯誤診斷功能,
Base58 是 Base64 編碼格 式的子集,同樣使用大小寫字母和 10 個數字, 但舍棄了一些容易錯讀和在特定字體中容易混淆的字符,Base58 不含 Base64 中的 0(數字 0)、O(大寫字母 o)、l(小寫字母 L)、I(大寫字母
i),以及“+”和“/”兩個字符,簡而言之,Base58 就是由不包括(0,O,l, I)的大 小寫字母和數字組成,
位元幣的 Base58 字母表 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxy z
Base58Check 編碼:一種 Base58 格式的、有版本的、經過校驗的 格式,可以明確的對位元幣資料編碼的編碼格式,在位元幣中,大多數需 要向用戶展示的資料都使用 Base58Check 編碼,可以實作資料壓縮,易 讀而且有錯誤檢驗,


公鑰的格式 公鑰也可以用多種不同格式來表示,最重要的是它們分為非壓縮格式或壓縮格式 公鑰這兩種形式
壓縮格式公鑰 引入壓縮格式公鑰是為了減少位元幣交易的位元組數,從而可以節省那些運行 區塊鏈資料庫的節點磁盤空間,大部分位元幣交易包含了公鑰,用于驗證用戶的 憑據和支付位元幣
未壓縮格式公鑰使用 04 作為前綴,而壓縮格式公鑰是以 02 或 03 作為前綴

一個私鑰可以生成兩種不同格式的公鑰——壓縮格式和非壓縮格式,而這兩 種格式的公鑰可以生成兩個不同的位元幣地址,
但是,這兩個不同的位元幣地址的私鑰是一樣的, 壓縮格式公鑰漸漸成為了各種不同的位元幣客戶端的默認格式,它可以大大 減少交易所需的位元組數,同時也讓存盤區塊鏈所需的磁盤空間變小
完全不同的位元幣地址, 為了解決這個問題,當私鑰從錢包中被匯出時,較新的位元幣客戶端將使用一種 不同的錢包匯入格式(Wallet Import Format),這種新的錢包匯入格式可以 用來表明該私鑰已經被用來生成壓縮的公鑰,同時生成的位元幣地址也是基于該 壓縮的公鑰,這個方案可以解決匯入私 鑰來自于老錢包還是新錢包的問題,同 時也解決了通過公鑰生成的位元幣地址是來自于壓縮格式公鑰還是非壓縮格式 公鑰的問題
壓縮格式私鑰
實際上“壓縮格式私鑰”是一種名稱上的誤導,因為當一個私鑰被使用 WIF 壓縮格式匯出時,不但沒有壓縮,而且比“非壓縮格式”私鑰長出一個位元組,這 個多出來的一個位元組是私鑰被加了后綴 01,用以表明該私鑰是來自于一個較新 的錢包,只能被用來生成壓縮的公鑰,私鑰是非壓縮的,也不能被壓縮,“壓縮 的私 鑰”實際上只是表示“用于生成壓縮格式公鑰的私鑰”,而“非壓縮格式 私鑰”用來表明“用于生成非壓縮格式公鑰的私鑰”,為避免更多誤解,應該只 可以說匯出 格式是“WIF 壓縮格式”或者“WIF”,而不能說這個私鑰是“壓 縮”的,
“WIF 壓 縮”編碼的私鑰還多出一個位元組,因為這種私鑰多了后 綴“01”,該后綴是用來區分“非壓縮格式”私鑰和“壓縮格式”私鑰,

位元幣是以交易 輸出的形式來儲存在區塊鏈中(通常記為 vout 或 txout)
三、錢包
BIP0039 定義助記碼和種子的創建程序如下:
1.創造一個 128 到 256 位的隨機順序(熵),
2.提出 SHA256 哈希前幾位,就可以創造一個隨機序列的校驗和,
3.把校驗和加在隨機順序的后面,
4.把順序分解成 11 位的不同集合,并用這些集合去和一個預先已經定義的 2048 個單詞字典做對應,
- 5.生成一個 12 至 24 個詞的助記碼
分層確定性錢包(BIP0032/BIP0044)
如果你想安裝運行一個位元幣錢包,你需要建造一個符合 BIP0032 和 BIP0044 標準的 HD 錢包, HD 錢包提供了隨機(不確定性)鑰匙有兩個主要的優勢,第一,樹狀結構 可以被用來表達額外的組織含義,比如當一個特定分支的子密鑰被用來接收交易 收 入并且有另一個分支的子密鑰用來負責支付花費,不同分支的密鑰都可以被
用在企業環境中,這就可以支配不同的分支部門,子公司,具體功能以及會計類 別,
HD 錢包的第二個好處就是它可以允許讓使用者去建立一個公共密鑰的序列 而不需要訪問相對應的私鑰,這可允許 HD 錢包在不安全的服務器中使用或者在 每筆交易中發行不同的公共鑰匙,公共鑰匙不需要被預先加載或者提前衍生,但 是在服務器中不具有可用來支付的私鑰
HD 錢包密鑰識別符(路徑)
HD 錢包中的密鑰是用“路徑”命名的,且每個級別之間用斜杠(/)字符來 表示(見表 4-8),由主私鑰衍生出的私鑰起始以“m”打頭,因此,第一個母 密鑰生成的子私鑰是 m/0,第一個公共鑰匙是 M/0,第一個子密鑰的子密鑰就 是 m/0/1,以此類推, 密鑰的“祖先”是從右向左讀,直到你達到了衍生出的它的主密鑰,舉個例 子,識別符號 m/x/y/z 描述的是子密鑰 m/x/y 的第 z 個子密鑰,而子密鑰 m/x/y 又是 m/x 的第 y 個子密鑰,m/x 又是 m 的第 x 個子密鑰

所有遵循 BIP0044 的 HD 錢包依據只使用樹的第一個分支的 要求而被定義:m/44’/, BIP0044 指定了包含 5 個預定義樹狀層級的結構: m / purpose’ / coin_type’ / account’ / change / address_index 第一層的目的地總是被設定為 44’,第二層的“coin_type”特指密碼貨幣硬幣 的種類并且允許多元貨幣 HD 錢包中 的貨幣在第二個層級下有自己的亞樹狀結 構,目前有三種貨幣被定義:Bitcoin is m/44’/0’、Bitcoin Testnet is m/44’/1’, 以及 Litecoin is m/44’/2’, 樹的第三層級是“account”,這可以允許使用者為了會計或者組織目的,而去 再細分他們的錢包到獨立的邏輯性亞賬戶,舉個例子,一個 HD 錢包可能包含兩 個位元幣“賬戶”:m/44’/0’/0’ 和 m/44’/0’/1’,每個賬戶都是它自己亞樹的 根,第四層級就是“change”,每一個 HD 錢包有兩個亞樹,一個是用來接收 地址一個是用來創造變更地址,注意無論先前的層級是否使用是否使用強化衍 生,這一層級使用的都是常規衍生,這是為了允許這一層級的樹可以在可供不安全環境下,輸出擴展的公共鑰匙,被 HD 錢包衍生的可用的地址是第四層級的子 級, 就是第五層級的樹的“address_index”,比如,第三個層級的主賬戶收 到位元幣支付的地址就是 M/44’/0’/0’/0/2,表 4-9 展示了更多的例子,

加密私鑰(BIP0038)
私鑰必須保密,私鑰的機密性需求事實情況是,在實踐中相當難以實作,因 為該需求與同樣重要的安全物件可用性相互矛盾,當你需要為了避免私鑰丟失而 存盤備份時,會發現維護私鑰私密性是一件相當困難的事情,通過密碼加密內有 私鑰的錢包可能要安全一點,但那個錢包也需要備份,有時,例如用戶因為要升 級或重裝錢包軟體,而需要把密鑰從一個錢包轉移到另一個,私鑰備份也可能需 要存盤在紙張上(參見“4.5.4 紙錢包”一節)或者外部存盤介質里,比如 U 盤, 但如果一旦備份檔案失竊或丟失呢?這些矛盾的安全目標推進了便攜、方便、可 以被眾多不同錢包和位元幣客戶端理解的加密私鑰標準 BIP0038 的出臺, BIP0038 提出了一個通用標準,使用一個口令加密私鑰并使用 Base58Check 對 加密的私鑰進行編碼,這樣加密的私鑰就可以安全地保存在備份介質里,安全地
在錢包間傳輸,保持密鑰在任何可能被暴露情況下的安全性,這個加密標準使用 了 AES,這個標準由 NIST 建立,并廣泛應用于商業和軍事應用的資料加密, BIP0038 加密方案是:輸入一個位元幣私鑰,通常使用 WIF 編碼過,base58chek 字串的前綴“5”,此外 BIP0038 加密方案需要一個長密碼作為口令,通常由 多個單詞或一段復雜的數字字母字串組成,BIP0038 加密方案的結果是一個 由 base58check 編碼過的加密私鑰,前綴為 6P,如果你看到一個 6P 開頭的的 密鑰,這就意味著該密鑰是被加密過,并需要一個口令來轉換(解碼)該密鑰回 到可被用在任何錢包 WIT 格式的私鑰(前綴為 5),許多錢包 APP 現在能夠識 別 BIP0038 加密過的私鑰,會要求用戶提供口令解碼并匯入密鑰,第三方 APP, 諸如非常好用基于瀏覽器的 Bit Address,可以被用來解碼 BIP00038 的密鑰, 最通常使用 BIP0038 加密的密鑰用例是紙錢包——一張紙張上備份私鑰,只要 用戶選擇了強口令,使用 BIP0038 加密的私鑰紙錢包就無比的安全,是一種很 棒的線下位元幣存盤途徑(也被稱作“冷庫”)

P2SH (Pay-to-Script Hash)和多重簽名地址
以數字 3 開頭的位元幣地址是 P2SH 地址,有時被錯誤的稱謂多重簽名或多重 簽名地址
P2SH 不一定是多重簽名的交易,雖然 P2SH 地址通常都是代表多重簽 名,但也可能是其他型別的交易腳本
目前,P2SH 函式最常見的實作是用于多重簽名地址腳本,顧名思義,底層 腳本需要多個簽名來證明所有權,此后才能消費資金,設計位元幣多重簽名特性 是需要從總共 N 個密鑰中需要 M 個簽名(也被稱為“閾值”),被稱為 M-的 -N 的多簽名,其中 M 是等于或小于 N,例如,第一章中提到的咖啡店主鮑勃使 用多重簽名地址需要 1-2 簽名,一個是屬于他的密鑰和一個屬于他同伴的密鑰, 以確保其中一方可以簽署度過一個事務鎖定輸出到這個地址,這類似于傳統的銀 行中的一個“聯合賬戶”,其中任何一方配偶可以憑借單一簽名消費,或 Gopesh, Bob 雇傭的網頁設計師創立一個網站,可能為他的業務需要一個 2-3 的多簽名 地址,確保沒有資金會被花費除非至少兩個業務合作伙伴簽署這筆交易, 我們將會在第五章節探索如何使用 P2SH 地址創建事務用來消費資金
位元幣靚號地址
靚號地址包含了可讀資訊的有效位元幣地址,例如, 1LoveBPzzD72PUXLzCkYAtGFYmK5vYNR33 就是包含了 Base-58 字母 love 的,靚號地址需要生成并通過數十億的候選私鑰測驗,直到一個私鑰能生成具有 所需圖案的位元幣地址,雖然有一些優化過的靚號生成演算法,該方法必須涉及隨 機上選擇一個私鑰,生成公鑰,再生成位元幣地址,并檢查是否與所要的靚號圖 案相匹配,重復數十億次,直到找到一個匹配, 一旦找到一個匹配所要圖案的靚號地址,來自這個靚號地址的私鑰可以和其 他地址相同的方式被擁有者消費位元幣,靚號地址不比其他地址具有更多安全性,它們依靠和其他地址相同的 ECC 和 SHA,你無法比任何別的地址更容易的 獲得一個靚號圖案開頭的私鑰
生成靚號地址
我們必須認識到使用來自 Base58 字母表中簡單符號來代表位元幣地址是非 常重要的,搜索“1kids”開頭的圖案我們會發現從 1Kids11111111111111111111111111111 到 1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz 的地址,這些以“1kid”開頭的地址范 圍中大約有 58 的 29 次方地址,表 4-11 顯示了這些有“1kids”前綴的地址, 表 4-11 “1Kids”靚號的范圍 From1Kids11111111111111111111111111111 To 1Kidszzzzzzzzzzzzzzzzzzzzzzzzzzzzz 我們把“1Kids”這個前綴當作數字,我們可以看看位元幣地址中這個前綴出現 的頻率,如果是一臺普通性能的桌面電腦,沒有任何特殊的硬體,可以每秒發現 大約 10 萬個密鑰,表 4-12 靚號的出現的頻率(1KidsCharity)以及生成所需時間 長度地址前綴 概率 平均生成時間 1 1K 1/58 < 1 毫秒
- 145 - 長度地址前綴 概率 平均生成時間 2 1Ki 1/3,364 50 毫秒 3 1Kid 1/(195103) < 2 秒 4 1Kids 1/(11106) 1 分鐘 5 1KidsC 1/(656106) 1 小時 6 1KidsCh 1/(38109) 2 天 7 1KidsCha 1/(2.21012) 3–4 月 8 1KidsChar 1/(1281012)13–18 年 9 1KidsChari 1/(71015) 800 年 10 1KidsCharit 1/(4001015)46,000 年 11 1KidsCharity1/(23*1018) 250 萬年 正如你所見,Eugenia 將不會很快地創建出以“1KidsCharity”開頭的靚號 地址,即使她有數千臺的電腦同時進行運算,每增加一個字符就會增加 58 倍的 計算難度,超過七個字符的搜索模式通常需要專用的硬體才能被找出,譬如用戶 定制的具有多圖形處理單元(GPU)的桌面級設備,那些通常是無法繼續在位元 幣挖礦中盈利的鉆機,被重新賦予了尋找靚號地址的任務,用 GPU 系統搜索靚 號的速度比用通用 CPU 要快很多個量級, 另一種尋找靚號地址的方法是將作業外包給一個礦池里的靚號礦工們,如靚 號礦池中的礦池,一個礦池是一種允許那些 GPU 硬體通過為他人尋找靚號地址 來獲得位元幣的服務,對小額的賬單,Eugenia 可以外包搜索模式為 7 個字符 靚號地址尋找作業,在幾個小時內就可以得到結果,而不必用一個 CPU 搜索上 幾個月才得到結果
紙錢包
紙錢包是列印在紙張上的位元幣私鑰,有時紙錢包為了方面起見也包括對應 的位元幣地址,但這并非是必要的,因為地址可以從私鑰中匯出,紙錢包是一個 非常有效簡歷備份或者線下位元幣存盤方式,也是被稱為“冷錢包”,作為備份 機制,一個紙錢包可以提供安全性,以防在電腦硬碟損壞、失竊或意外洗掉的情 況下造成密鑰的的丟失,作為一個冷存盤的機制,如果紙錢包密鑰在線下生成并
永久不在電腦系統中存盤,他們在應對黑客攻擊,鍵盤記錄器,或其他在線電腦 欺騙更有安全性
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/298425.html
標籤:區塊鏈
上一篇:Goland下使用chaincode-docker-devmode除錯鏈碼
下一篇:以太網發幣攻略
