《精通比特幣》(Mastering Bitcoin)前四章摘要

精通比特幣

作者:Andreas M Antonopoulos


Andreas M. Antonopoulos 是一位著名的技術(shù)專家和連續(xù)創(chuàng)業(yè)企業(yè)家,比特幣界最著名和倍受尊敬的?人物之一。著名的的公共演說家、教師和作家,他善于把復(fù)雜的問題變得簡單和易于理解。

封面故事


1、群落中的每一只螞蟻個(gè)體僅僅遵循一些社會互動和化學(xué)氣味交換的簡單規(guī)則就變現(xiàn)出了高度復(fù)雜行為,形成了地球上僅次于人類的最為龐大且復(fù)雜的動物社會。

2、蟻群里不存在中央集權(quán)體制或領(lǐng)導(dǎo)人,大自然向我們證明去中心化體制具有彈性并且能創(chuàng)造出意想不到的復(fù)雜性和難以想象的精妙。

3、比特幣就是這樣一個(gè)高度復(fù)雜的去中心化的可信網(wǎng)絡(luò),真正意義上的世界銀行。


術(shù)語解釋


BIP?

比特幣改進(jìn)協(xié)議(Bitcoin Improvement proposals 的縮寫),指比特幣社區(qū)成員所提交的一系列改進(jìn)比特幣的提議。

第一章 介紹


1.1 什么是比特幣?


比特幣是由一系列概念和技術(shù)作為基礎(chǔ)構(gòu)建的數(shù)字貨幣生態(tài)系統(tǒng)。狹義的“比特幣”代表系統(tǒng)中的貨幣單位,用于存儲和傳輸價(jià)值。是一個(gè)通過分布式計(jì)算來傳播價(jià)值和保障數(shù)字資產(chǎn)所有權(quán)的網(wǎng)絡(luò)。

比特幣可以做傳統(tǒng)貨幣能做的所有事,在一定意義上,比特幣才是互聯(lián)網(wǎng)貨幣的完美形態(tài),具有快捷、安全、無國界的特性。

比特幣隱含在收發(fā)幣的轉(zhuǎn)賬記錄中。用戶只要有證明其控制權(quán)的密鑰,用密鑰解鎖,就可以發(fā)送比特幣,擁有密鑰是使用比特幣的唯一條件,控制權(quán)完全掌握在每個(gè)人說中。(這可能是人類歷史上第一次通過數(shù)學(xué)的方式保護(hù)私有財(cái)產(chǎn)不可侵犯)

比特幣是一個(gè)分布式的點(diǎn)對點(diǎn)(peer to peer)網(wǎng)絡(luò)系統(tǒng)。沒有中央服務(wù)器,也沒有中央發(fā)行機(jī)構(gòu)。是通過“挖礦”產(chǎn)生的,挖礦就是驗(yàn)證比特幣交易的同時(shí)參與競爭來解決一個(gè)數(shù)學(xué)問題。任何一個(gè)節(jié)點(diǎn)都可以參與做礦工。平均每10分鐘就有人能驗(yàn)證過去10分鐘發(fā)生的交易,獲得新幣作為工作回報(bào)。本質(zhì)上,挖礦把央行的貨幣發(fā)行和結(jié)算功能進(jìn)行分布式,用全球化的算力來取代了中央發(fā)行機(jī)構(gòu)。

比特幣系統(tǒng)包含調(diào)節(jié)挖礦難度的協(xié)議,保證挖礦的難度是動態(tài)調(diào)整的,不管多少礦工參與挖礦,平均10分鐘只有一個(gè)成功。并且,每四年開采量減半,最終總量為2100萬。預(yù)計(jì)在2140年達(dá)到上限。

比特幣代表了數(shù)十年的密碼學(xué)和分布式系統(tǒng)的巔峰之作,這是一個(gè)獨(dú)特而強(qiáng)大的組合,匯集了四個(gè)關(guān)鍵的創(chuàng)新點(diǎn)。

比特幣由這些構(gòu)成:

? 一個(gè)去中心化的點(diǎn)對點(diǎn)網(wǎng)絡(luò)(比特幣協(xié)議)

? 一個(gè)公共的交易賬簿(區(qū)塊鏈)

? 一個(gè)去中心化的數(shù)學(xué)的和確定性的貨幣發(fā)行(分布式挖礦)

? 一個(gè)去中心化的交易驗(yàn)證系統(tǒng)(交易腳本)

1.2 比特幣的產(chǎn)生


2008年,中本聰發(fā)表一篇《比特幣:一個(gè)點(diǎn)對點(diǎn)的電子現(xiàn)金系統(tǒng)》論文,宣告比特幣產(chǎn)生。從此,人類進(jìn)入一個(gè)新的世界。

1.3 入門


三種比特幣客戶端

完整客戶端(全節(jié)點(diǎn))包含比特幣交易的整個(gè)歷史,類似于一個(gè)獨(dú)立的email服務(wù)器。

輕量級客戶端?

在線客戶端

?第二章 比特幣的原理


在本章中,我們將通過追蹤在網(wǎng)絡(luò)上傳輸?shù)囊还P交易,從整個(gè)比特幣系統(tǒng)的的視?檢視各個(gè)部分之間的交互。

比特幣概述

2.1 比特幣交易



Alice 用比特幣支付買了一杯咖啡,咖啡店老板Bob收到比特幣。

每一筆交易包含一個(gè)或多個(gè)輸入,輸入是針對一個(gè)比特幣賬號的負(fù)債。同時(shí),有一個(gè)或多個(gè)輸出,被當(dāng)成信用點(diǎn)計(jì)入到比特幣賬戶中。

2.2 常見的交易形式:


一般交易:一個(gè)輸入和兩個(gè)輸出

從一個(gè)地址到另一個(gè)地址的簡單支付,一般是一個(gè)輸入和兩個(gè)輸出(包含找零)

集合型交易:多個(gè)輸入,一個(gè)輸出

一般由錢包應(yīng)用產(chǎn)生來清理許多在支付過程中的小數(shù)額的找零。

分散型交易:一個(gè)輸出,多個(gè)輸出

商業(yè)實(shí)體用作分配資金,例如給多個(gè)雇員發(fā)工資。


2.3 交易的構(gòu)建


錢包知道如何選取合適的輸入和輸出以建立交易。我們只需要指定目標(biāo)地址和金額,其他操作錢包會在后臺自動完成,甚至可以在完全離線的情況下建立交易。只有在執(zhí)行交易的時(shí)候才需要將交易發(fā)送到網(wǎng)絡(luò)。

交易的輸出會被創(chuàng)建成為一個(gè)包含這筆數(shù)額的腳本的形式,只能被引入這個(gè)腳本的一個(gè)解答后才能兌換。簡單點(diǎn)說就是,Alice的交易輸出會包含?個(gè)腳本,這個(gè)腳本說 “這個(gè)輸出誰能拿出一個(gè)簽名和Bob的公開地址匹配上,就支付給誰”。因此,Alice會用Bob 的簽名來包裝一個(gè)輸出。

第二個(gè)輸出就是找零,給自己的輸出。

交易的大小是如何測算的?


一個(gè)交易的完整信息

這個(gè)交易包含處理所需的所有信息,錢包將新的交易給任意一個(gè)已連接到互聯(lián)網(wǎng)的比特幣客戶端,節(jié)點(diǎn)就會立刻將它轉(zhuǎn)發(fā)給連接到自身的其他節(jié)點(diǎn)、迅速傳播,幾秒鐘就能到達(dá)大多數(shù)節(jié)點(diǎn)。

這個(gè)交易在比特幣網(wǎng)絡(luò)上傳播開來,但必須要經(jīng)過挖礦驗(yàn)證且加到一個(gè)區(qū)塊之中,這個(gè)交易才會成為區(qū)塊鏈的一部分。該系統(tǒng)的信任是建立在計(jì)算的基礎(chǔ)上的。交易被抱在一起放進(jìn)區(qū)塊需要極大的計(jì)算量來證明,但是只需要少量計(jì)算就能驗(yàn)證它們已被i證明。(一個(gè)很棒的類比就是 多人數(shù)獨(dú)游戲,做出來很難,判斷做對了沒有卻很簡單,我很喜歡這個(gè)類比)

挖礦有兩個(gè)作用:(1)發(fā)行貨幣,每個(gè)區(qū)塊創(chuàng)造的區(qū)塊是固定的,慢慢減少。

(2)結(jié)算系統(tǒng),創(chuàng)建信任。區(qū)塊越多,花費(fèi)的計(jì)算量越大,以為著更多的信任。

挖礦做的計(jì)算稱為工作量證明,指的是用SHA256加密算法不斷對區(qū)塊頭和一個(gè)隨機(jī)數(shù)字進(jìn)行哈希計(jì)算,直到出現(xiàn)一個(gè)和預(yù)設(shè)值相匹配的解。第一個(gè)找到這個(gè)解的礦工會贏得這局競賽并將這個(gè)區(qū)塊發(fā)布到區(qū)塊鏈上。

新的交易被加入新區(qū)快時(shí),以交易費(fèi)高的優(yōu)先以及其他的一些規(guī)則進(jìn)行排序。新的一輪競爭開始的時(shí)候,會立刻將一些交易和這個(gè)新區(qū)快的數(shù)字指紋放在一起開始構(gòu)建一個(gè)新區(qū)塊,并開始給它計(jì)算工作量證明。每個(gè)礦工會在他的區(qū)塊包含一個(gè)特殊的交易,自己挖礦所得的12.5個(gè)到自己的地址里。

一個(gè)區(qū)塊信息

第四章 密鑰、地址、錢包


4.1 簡介


比特幣的所有權(quán)通過數(shù)字密鑰、比特幣地址和數(shù)字簽名來確定。數(shù)字密鑰放在橋暴利,獨(dú)立于比特幣協(xié)議,無需區(qū)塊鏈和網(wǎng)絡(luò)連接。在交易環(huán)節(jié),收件人的公鑰是通過數(shù)字指紋表示的,稱為比特幣地址(一般用公鑰生成并對應(yīng)于這個(gè)公鑰,腳本也可以表示地址)

4.1.1 公鑰加密和加密貨幣


在比特幣系統(tǒng)中,我們?公鑰加密創(chuàng)建一個(gè)密鑰對,用于控制比特幣的獲取。密鑰對包括一個(gè)私鑰,和由其衍生出的唯一的公鑰。公鑰用于接收?特幣,而私鑰用于比特幣支付時(shí)的交易簽名。

公鑰和私鑰之間的數(shù)學(xué)關(guān)系,使得私鑰可用于生成特定消息的簽名。此簽名可以在不泄露私鑰的同時(shí)對公鑰進(jìn)行驗(yàn)證。

關(guān)系圖


私鑰


本質(zhì)上就是一個(gè)隨機(jī)選擇的數(shù)字。是比特幣的控制權(quán)和所有權(quán)憑證。所以,必須要注意備份,保持機(jī)密。

如何生成私鑰:找到足夠的熵源,即隨機(jī)性來源。可以是1和n-1之間的任何數(shù)字,其中n是一個(gè)常數(shù)(n=1.158*10的77次方),并由比特幣所使用的橢圓曲線的階所定義。

在編程的角度來看,一般是通過一個(gè)密碼學(xué)安全的隨機(jī)源中取出一長串隨機(jī)字節(jié),對其進(jìn)行SHA256哈希算法進(jìn)行計(jì)算。這樣就產(chǎn)生了一位256位的數(shù)字。如果運(yùn)算結(jié)果小于n-1,就可以了,如果不行再來一次。

公鑰


通過橢圓算法可以從私鑰計(jì)算得到公鑰,不可逆的過程

?K = k * G

其中 k 是私鑰, G 是被稱為生成點(diǎn)的常數(shù)點(diǎn), K 是所得公鑰。

而反向運(yùn)算,即給定公鑰k 求私鑰K的過程稱為“尋找離散對數(shù)”,非常困難,只能用窮盡的辦法暴力搜索。

橢圓曲線密碼學(xué)解釋


橢圓曲線加密法是一種基于離散對數(shù)問題的非對稱(或公鑰)加密法,可以用對橢圓曲線上的點(diǎn)進(jìn)行加法或乘法運(yùn)算來表達(dá)。

橢圓曲線上的點(diǎn)的加法或減法。給定橢圓曲線上的兩個(gè)點(diǎn)P1和P2,則橢圓曲線必定有第三點(diǎn) P3 = P1 + P2。幾何圖形中,該第三點(diǎn)P3可以在P1和P2之間畫?條線來確定。這條直線恰好與橢圓曲線上的一點(diǎn)相交。此點(diǎn)記為 P3'=(x,y)。然后,在x軸做映射獲得 P3=(x,-y)。

至此,我們已經(jīng)定義了橢圓加法,為擴(kuò)展加法下?我們對乘法進(jìn)?標(biāo)準(zhǔn)定義。給定橢圓曲線上的點(diǎn)P,如果k是整數(shù),則 kP =P + P + P + …+ P(k次)。注意,k被有時(shí)被混淆而稱為“指數(shù)”。

如何生成公鑰


以一個(gè)隨機(jī)生成的私鑰k為起點(diǎn),我們將其與曲線上已定義的 ?成點(diǎn)G相乘以獲得曲線上的另一點(diǎn),也就是相應(yīng)的公鑰K。生成點(diǎn)是secp256k1標(biāo)準(zhǔn)的一部分,比特幣密鑰的生成點(diǎn)都是相同的:

{K = k * G}

其中k是私鑰,G是?成點(diǎn),在該曲線上所得的點(diǎn)K是公鑰。

因?yàn)樗斜忍貛庞脩舻纳牲c(diǎn)是相同的,一個(gè)私鑰k乘以G將得到相同的公鑰K。k和K之間的關(guān)系是固定的,但只能單向運(yùn)算,即從k得到K。這就是可以把比特幣地址(K的衍生)與任何人共享而不會泄露私鑰(k)的原因。

比特幣地址


比特幣地址是由一個(gè)數(shù)字和字母組成的字符串,可以與任何想給你比特幣的人分享。由公鑰生成的比特幣地址以數(shù)字“1”開頭。

比特幣地址可以由公鑰經(jīng)過單向的加密哈希算法得到,哈希算法是一種單向函數(shù),接受任意長度的輸入產(chǎn)生指紋摘要。由公鑰生成比特幣地址時(shí)使用的算法是Secure Hash Algorithm (SHA)和the RACE Integrity Primitives Evaluation Message Digest (RIPEMD),特別是SHA256和RIPEMD160。

A = RIPEMD160(SHA256(K))

其中 K 為公鑰,A 為比特幣地址


通常見到的地址是經(jīng)過Base58Check 編碼的,這種編碼使用了58個(gè)字符和校驗(yàn)碼,提高了可讀性、避免歧義并有效防止了在地址轉(zhuǎn)錄和輸入中產(chǎn)生的錯(cuò)誤。簡而言之,Base58就是由不包括(0,O,l,I)的大小寫字母和數(shù)字組成。Base58Check是一種常用在比特幣中的Base58編碼格式,增加了錯(cuò)誤校驗(yàn)碼來檢查數(shù)據(jù)在轉(zhuǎn)錄中出現(xiàn)的錯(cuò)誤。校驗(yàn)碼長4個(gè)字節(jié),添加到需要編碼的數(shù)據(jù)之后。校驗(yàn)碼是從需要編碼的數(shù)據(jù)的哈希值中得到的,所以可以用來檢測并避免轉(zhuǎn)錄和輸入中產(chǎn)生的錯(cuò)誤。



Base58示意

密鑰的格式


公鑰和私鑰的都可以有多種編碼格式。一個(gè)密鑰被不同的格式編碼后,雖然結(jié)果看起來可能不同,但是密鑰所編碼數(shù)字并沒有改變。這些不同的編碼格式主要是用來方便人們無誤地使用和識別密鑰。

私鑰格式
不同的格式

公鑰的格式:分為非壓縮和壓縮格式兩種。前綴04是用來區(qū)分非壓縮格式公鑰,壓縮格式公鑰是以02或者03開頭。引入壓縮格式公鑰是為了減少比特幣交易的字節(jié)數(shù),節(jié)省空間。

壓縮式公鑰漸漸成為了各種不同的比特幣客戶端的默認(rèn)格式,大大減少交易所需的字節(jié)數(shù),也讓區(qū)塊鏈所需的磁盤空間變小。

比特幣錢包


錢包是私鑰的容器,通常通過有序文件或者簡單的數(shù)據(jù)庫實(shí)現(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文出自于金馬老師課程——“金馬帶你定投區(qū)塊鏈”的課程,還有“白話區(qū)塊鏈”公眾號中的概念,我的目的就是把對同一個(gè)概...
    丁昆朋閱讀 2,469評論 5 8
  • 〇、序言 貨幣由于其天然屬性決定了其與安全不可分割的聯(lián)系,從最早的金庫、保險(xiǎn)柜、鏢局到后來的ATM機(jī)、運(yùn)鈔車;從存...
    怒馬2048閱讀 39,874評論 4 79
  • 「自那件事以來,已經(jīng)過了一年了?!固ь^看天,我不禁感嘆道。選在這個(gè)遠(yuǎn)離城市、人跡罕至的后山空地果然是對的,輕而易舉...
    季候鳥閱讀 2,857評論 3 4
  • 前些日子,因?yàn)槁?lián)合國的一紙聲明,92年出生的孩子們就莫名其妙的踏入了中年。 25歲的中年,又該是什么模樣。 一、何...
    0度成霜閱讀 813評論 0 1
  • 為什么到這里玩? 要玩什么? 怎么玩? 誰能說來聽聽?謝謝!
    歐KK閱讀 332評論 0 0

友情鏈接更多精彩內(nèi)容