第一章 介紹
1.1 什么是比特幣
在?定意義上,?特幣才是互聯(lián)?貨幣的完美形態(tài)。因?yàn)樗哂锌旖荨踩?國界的特性。(比特幣不一定能夠取代法幣有梆,畢竟紙質(zhì)的法幣在生活中使用的便利程度上目前來看還是不可替代的,比特幣和法幣同時(shí)共存意系,互不影響泥耀,可以相互兌換。但如作者所說蛔添,比特幣可能會(huì)成為互聯(lián)網(wǎng)上通行的貨幣痰催,且可能會(huì)成為“唯一”的貨幣,比特幣一哥的地位估計(jì)別的幣難以撼動(dòng))
任何接受數(shù)字貨幣的?都?臨的兩個(gè)基本問題是:
1. 我能相信這錢是真實(shí)可信的迎瞧,?不是偽造的嗎夸溶?
2. 我能確定沒?說這筆錢是他們的,?不是我的嗎凶硅?(?名“雙重?付”問題)
?特幣代表了數(shù)?年的密碼學(xué)和分布式系統(tǒng)的巔峰之作缝裁,這是?個(gè)獨(dú)特?強(qiáng)?的組合,匯集了四個(gè)關(guān)鍵的創(chuàng)新點(diǎn)足绅。?
特幣由這些構(gòu)成:
? ?個(gè)去中?化的點(diǎn)對點(diǎn)?絡(luò)(?特幣協(xié)議)
? ?個(gè)公共的交易賬簿(區(qū)塊鏈)
? ?個(gè)去中?化的數(shù)學(xué)的和確定性的貨幣發(fā)?(分布式挖礦)
? ?個(gè)去中?化的交易驗(yàn)證系統(tǒng)(交易腳本)
1.4 入門
?特幣客?端的三種主要形式是:
完整客戶端
?個(gè)完整客?端捷绑,或稱“全節(jié)點(diǎn)”,是存儲所有?特幣交易的整個(gè)交易歷史(每?個(gè)??的每?筆交易)的客?端氢妈,管理??的錢包粹污,并可以在?特幣?絡(luò)上直接開始交易。
輕量級客?端
?個(gè)輕量級客?端存儲??的錢包首量,但需要依賴第三?服務(wù)器才能接入比特幣網(wǎng)絡(luò)壮吩,進(jìn)??特幣交易进苍。
在線客?端
在線客?端通過??瀏覽器在第三?服務(wù)器上訪問和儲存該??的錢包。
?特幣地址以數(shù)字1或3開頭鸭叙。類似于電?郵件地址觉啊,可用來接收比特幣。
不同于電郵地址的是递雀,你可以任意地創(chuàng)建新的?特幣地址,這些地址都能成功地將資?轉(zhuǎn)
到你的錢包蚀浆。
錢包是多個(gè)地址和解鎖資?密鑰的簡單集合缀程。每筆交易你都可以使?不同的地址,這有利于提?隱私的安全
性市俊。??可創(chuàng)建地址的數(shù)量?乎不受限制杨凑。
HD錢包
HD是分層確定性(Hierarchical Deterministic)的縮寫 。
原理本身很簡單:
首先摆昧,要用一個(gè)隨機(jī)數(shù)來生成主(根)私鑰撩满,這和任何一個(gè)比特幣錢包生成任何一個(gè)私鑰沒任何區(qū)別;
然后绅你,再用一個(gè)確定的伺帘、不可逆的算法,基于主私鑰生成任意數(shù)量的子私鑰忌锯;
那為什么要用“確定伪嫁、不可逆”的算法呢?因?yàn)椤按_定”才能保證從一個(gè)主私鑰可以生成出全部的子私鑰偶垮,而“不可逆”則是為了確保不能通過子私鑰反推出主私鑰张咳。
HD 模型在數(shù)學(xué)上有一個(gè)非常“好”的特性:只需要主公鑰似舵,就可以生成出任意數(shù)量的子公鑰脚猾。也就是說,無需私鑰介入(主私鑰和子私鑰)砚哗,就能基于主公鑰生成新(公鑰)地址龙助,而這些地址其實(shí)都能被主私鑰所控制。所以蛛芥,HD錢包泌参,每次收款都會(huì)有一個(gè)新的收款地址。
但HD錢包有一個(gè)“致命”的缺陷常空,一旦泄露子私鑰沽一,那么子私鑰可以和主公鑰逆推出主私鑰來!
(參考 以太錢包的博客http://blog.sina.com.cn/s/articlelist_5048306243_0_1.html)
第二章 比特幣的原理
2.2 比特幣交易
比特幣的交易信息向全網(wǎng)廣播漓糙。
交易可以有多個(gè)輸入铣缠,多個(gè)輸出,總輸出小于總輸入的部分是礦工費(fèi)(將交易打包進(jìn)區(qū)塊添加到區(qū)塊鏈上,支付給礦工的費(fèi)用)蝗蛙。
一筆交易的輸入來自之前交易的輸出蝇庭,一筆交易的輸出只有該所有者的私鑰才能使用該筆輸出。
找零即將輸出地址設(shè)置為自己的收款地址捡硅。
2.3 交易的構(gòu)建
?特幣交易建?和簽名時(shí)不?連接?特幣?絡(luò)哮内。只有在執(zhí)?交易時(shí)才需要將交易發(fā)送到?絡(luò)。
用戶在交易比特幣時(shí)壮韭,只需要設(shè)置交易的目的地址和金額北发,其他的由錢包程序完成。
2.4 比特幣挖礦
挖礦在?特幣系統(tǒng)中起著兩個(gè)作?:
? 挖礦在構(gòu)建區(qū)塊時(shí)會(huì)創(chuàng)造新的?特幣喷屋,和?個(gè)中央銀?印發(fā)新的紙幣很類似琳拨。每個(gè)區(qū)塊創(chuàng)造的?特幣數(shù)量是固定的,隨時(shí)
間會(huì)漸漸減少屯曹。
? 挖礦創(chuàng)建信任狱庇。挖礦確保只有在包含交易的區(qū)塊上貢獻(xiàn)了?夠的計(jì)算量后,這些交易才被確認(rèn)恶耽。區(qū)塊越多密任,花費(fèi)的計(jì)算量
越?,意味著更多的信任偷俭。
第三章 比特幣客戶端
3.1.1 下載安裝比特幣核心客戶端
3.1.2 編譯比特幣核心客戶端的源碼并安裝
3.2?通過命令?使??特幣核?的JSON-RPC API接?
RPC: Remote Protocol Call 遠(yuǎn)程調(diào)用協(xié)議批什,json rpc 是一種以json為消息格式的遠(yuǎn)程調(diào)用服務(wù)。
通過 bitcoin-cli 命令調(diào)用 bitcoind 的 JSON-RPC API接口社搅,從創(chuàng)建交易驻债,簽名,到發(fā)送至比特幣網(wǎng)絡(luò)完成交易形葬,經(jīng)歷了一個(gè)可視化的錢包程序在后臺所做的事情合呐。
3.3 其他替代客?端、資料庫笙以、?具包
? libbitcoin和sx tools
?款C++淌实,通過命令?完成的全節(jié)點(diǎn)多線程客?端與程序庫
? bitcoinj
?款全節(jié)點(diǎn)java客?端和程序庫
? btcd
?款全節(jié)點(diǎn)GO 語?的?特幣客?端
? Bits of Proof(BOP)
?款Java企業(yè)級平臺的?特幣?具
? picocoin
?款輕量級?特幣執(zhí)?客?端
? pybitcointools
?款Python語?的?特幣程序庫
? pycoin
另?款Python語?的?特幣程序庫