區(qū)塊鏈系列教程之:比特幣中的網(wǎng)絡和區(qū)塊鏈

簡介

比特幣的底層就是區(qū)塊鏈技術螺男,區(qū)塊鏈也是因為比特幣而廣為人知的。和其他的區(qū)塊鏈技術相比粘秆,比特幣的區(qū)塊鏈有什么特征呢如迟?作為去區(qū)塊鏈的鼻祖,又有什么與眾不同的特性呢攻走?快來跟我們一起看看吧殷勘。

比特幣的網(wǎng)絡

比特幣使用的是P2P(peer-to-peer)網(wǎng)絡,此P2P非彼P2P昔搂,這里是點對點的網(wǎng)絡架構玲销,而不是人對人的借錢模式。

P2P是指位于同一網(wǎng)絡中的每臺計算機都彼此對等摘符,各個節(jié)點共同提供網(wǎng)絡服務贤斜,不存在任何“特殊”節(jié)點。每個網(wǎng)絡節(jié)點以“扁平(flat)”的拓撲結構相互連通逛裤。在P2P網(wǎng)絡中不存在任何服務端(server)瘩绒、中央化的服務、以及層級結構带族。

image

傳統(tǒng)的網(wǎng)絡結構是client-server的模式锁荔,所有的client都是和server交互獲取信息, 只要server掛掉了炉菲,client也就沒有用了堕战。

而在P2P網(wǎng)絡中,沒有server的概念拍霜,每個節(jié)點可以作為一個server嘱丢。對比起來P2P網(wǎng)絡在穩(wěn)定性方面要比C-S架構的系統(tǒng)要穩(wěn)定得多。

網(wǎng)絡發(fā)現(xiàn)與同步

既然是P2P網(wǎng)絡祠饺,那么問題來了越驻,這個P2P網(wǎng)絡是怎么建立起來的呢?節(jié)點之間是怎么發(fā)現(xiàn)的呢?

有做過P2P下載的同學應該都聽說過種子的概念缀旁,這個種子里面保存了其他活躍的節(jié)點的地址记劈。通過下載種子就可以連接對應的節(jié)點。

而每個節(jié)點又保存了最近連接或者活躍的節(jié)點并巍,這樣就形成了龐大的P2P網(wǎng)絡目木。

同樣的,比特幣的P2P網(wǎng)絡也是這樣的懊渡。

新節(jié)點是如何發(fā)現(xiàn)網(wǎng)絡中的對等節(jié)點的呢刽射?雖然比特幣網(wǎng)絡中沒有特殊節(jié)點,但是客戶端會維持一個列表剃执,那里列出了那些長期穩(wěn)定運行的節(jié)點誓禁。這樣的節(jié)點被稱為“種子節(jié)點(seed nodes)”

節(jié)點必須持續(xù)進行兩項工作:在失去已有連接時發(fā)現(xiàn)新節(jié)點,并在其他節(jié)點啟動時為其提供幫助肾档。

SPV節(jié)點

我們之前介紹了摹恰,在比特幣的世界里既沒有賬戶,也沒有余額怒见,只有分散到區(qū)塊鏈里的UTXO(Unspent Transaction Outputs)俗慈。

那么如果想要驗證交易的話,需要從歷史的交易中查找所有的和該交易有關的交易速种,從而進行完整姜盈,全面的驗證。

這樣做的問題就是配阵,如果下載所有的歷史記錄馏颂,那么需要上百G的硬盤空間,這對于手機或者其他輕量級的客戶端是無法想象的棋傍。

于是SPV出現(xiàn)了救拉。SPV的全稱是Simplified payment verification,叫做簡單認證支付瘫拣。

SPV保存的不是整個區(qū)塊鏈亿絮,而是區(qū)塊鏈的頭部,因為每個區(qū)塊鏈頭只有80字節(jié)麸拄,所以即使把所有的區(qū)塊頭都下載保存起來也不會很大派昧。

區(qū)塊鏈頭

區(qū)塊頭由三組區(qū)塊元數(shù)據(jù)組成。首先是一組引用父區(qū)塊哈希值的數(shù)據(jù)拢切,這組元數(shù)據(jù)用于將該區(qū)塊與區(qū)塊鏈中前一區(qū)塊相連接蒂萎。

第二組元數(shù)據(jù),即難度淮椰、時間戳和nonce五慈,與挖礦競爭相關纳寂。

第三組元數(shù)據(jù)是merkle樹根(一種用來有效地總結區(qū)塊中所有交易的數(shù)據(jù)結構)。

Nonce泻拦、難度目標和時間戳會用于挖礦過程毙芜,Merkle根用來索引和組織該區(qū)塊所有的交易信息。

image
image

上圖是一個區(qū)塊鏈頭組成的鏈争拐。

Merkle Tree

Merkle Tree腋粥,是一種樹(數(shù)據(jù)結構中所說的樹),網(wǎng)上大都稱為Merkle Hash Tree,這是因為 它所構造的Merkle Tree的所有節(jié)點都是Hash值架曹。Merkle Tree具有以下特點:

  1. 它是一種樹灯抛,可以是二叉樹,也可以多叉樹音瓷,無論是幾叉樹,它都具有樹結構的所有特點夹抗;

  2. Merkle樹的葉子節(jié)點上的value绳慎,是由你指定的,這主要看你的設計了漠烧,如Merkle Hash Tree會將數(shù)據(jù)的Hash值作為葉子節(jié)點的值杏愤;

  3. 非葉子節(jié)點的value是根據(jù)它下面所有的葉子節(jié)點值,然后按照一定的算法計算而得出的已脓。如Merkle Hash Tree的非葉子節(jié)點value的計算方法是將該節(jié)點的所有子節(jié)點進行組合珊楼,然后對組合結果進行hash計算所得出的hash value。

image

有了Merkle Tree度液,我們只需要知道和要驗證的交易相關的其他Merkle Tree中的信息厕宗,就可以計算出整個Merkle Tree的值,這樣就可以直接使用頭部信息進行驗證了堕担。這就是SPV的原理已慢。

比特幣中的區(qū)塊鏈

區(qū)塊鏈是由包含交易信息的區(qū)塊從后向前有序鏈接起來的數(shù)據(jù)結構。它可以被存儲為flat file(一種包含沒有相對關系記錄的文件)霹购,或是存儲在一個簡單數(shù)據(jù)庫中佑惠。

比特幣核心客戶端使用Google的LevelDB數(shù)據(jù)庫存儲區(qū)塊鏈元數(shù)據(jù)。

它由一個包含元數(shù)據(jù)的區(qū)塊頭和緊跟其后的構成區(qū)塊主體的一長串交易組成齐疙。區(qū)塊頭是80字節(jié)膜楷,而平均每個交易至少是250字節(jié),而且平均每個區(qū)塊至少包含超過500個交易贞奋。

image

區(qū)塊標識符

那怎么表示一個區(qū)塊呢赌厅?我們使用區(qū)塊標志符。

區(qū)塊主標識符是它的加密哈希值忆矛,一個通過SHA256算法對區(qū)塊頭進行二次哈希計算而得到的數(shù)字指紋察蹲。產生的32字節(jié)哈希值被稱為區(qū)塊哈希值请垛,但是更準確的名稱是:區(qū)塊頭哈希值,因為只有區(qū)塊頭被用于計算洽议。

第二種識別區(qū)塊的方式是通過該區(qū)塊在區(qū)塊鏈中的位置宗收,即“區(qū)塊高度(block height)”。第一個區(qū)塊亚兄,其區(qū)塊高度為0
和區(qū)塊哈希值不同的是混稽,區(qū)塊高度并不是唯一的標識符。雖然一個單一的區(qū)塊總是會有一個明確的审胚、固定的區(qū)塊高度匈勋,但反過來卻并不成立,一個區(qū)塊高度并不總是識別一個單一的區(qū)塊膳叨。兩個或兩個以上的區(qū)塊可能有相同的區(qū)塊高度托酸,在區(qū)塊鏈里爭奪同一位置。

創(chuàng)世區(qū)塊

區(qū)塊鏈里的第一個區(qū)塊創(chuàng)建于2009年艺智,被稱為創(chuàng)世區(qū)塊蚌吸。它是區(qū)塊鏈里面所有區(qū)塊的共同祖先,這意味著你從任一區(qū)塊龄坪,循鏈向后回溯昭雌,最終都將到達創(chuàng)世區(qū)塊。

因為創(chuàng)世區(qū)塊被編入到比特幣客戶端軟件里健田,所以每一個節(jié)點都始于至少包含一個區(qū)塊的區(qū)塊鏈烛卧,這能確保創(chuàng)世區(qū)塊不會被改變。每一個節(jié)點都“知道”創(chuàng)世區(qū)塊的哈希值妓局、結構总放、被創(chuàng)建的時間和里面的一個交易。因此好爬,每個節(jié)點都把該區(qū)塊作為區(qū)塊鏈的首區(qū)塊间聊,從而構建了一個安全的、可信的區(qū)塊鏈的根抵拘。

創(chuàng)世區(qū)塊的哈希值為:
0000000000 19d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

創(chuàng)世區(qū)塊包含一個隱藏的信息哎榴。在其Coinbase交易的輸入中包含這樣一句話“The Times 03/Jan/2009 Chancellor on brink of second bailout forbanks.”這句話是泰晤士報當天的頭版文章標題,引用這句話僵蛛,既是對該區(qū)塊產生時間的說明尚蝌,也可視為半開玩笑地提醒人們一個獨立的貨幣制度的重要性,同時告訴人們隨著比特幣的發(fā)展充尉,一場前所未有的世界性貨幣革命將要發(fā)生飘言。該消息是由比特幣的創(chuàng)立者中本聰嵌入創(chuàng)世區(qū)塊中。

image

coinbase的值是:04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73

解碼方法如下:

在python shell下:

"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73".decode('hex')

輸出:

'\x04\xff\xff\x00\x1d\x01\x04EThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks'

總結

本文介紹了比特幣的網(wǎng)絡和比特幣中的區(qū)塊鏈的相關概念驼侠,希望大家能夠喜歡姿鸿。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/bitcoin-blockchain-network/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事谆吴,更多精彩等著您!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末苛预,一起剝皮案震驚了整個濱河市句狼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌热某,老刑警劉巖腻菇,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昔馋,居然都是意外死亡筹吐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門秘遏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丘薛,“玉大人,你說我怎么就攤上這事邦危±拼” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵铡俐,是天一觀的道長。 經(jīng)常有香客問我妥粟,道長审丘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任勾给,我火速辦了婚禮滩报,結果婚禮上,老公的妹妹穿的比我還像新娘播急。我一直安慰自己脓钾,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布桩警。 她就那樣靜靜地躺著可训,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捶枢。 梳的紋絲不亂的頭發(fā)上握截,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音烂叔,去河邊找鬼谨胞。 笑死,一個胖子當著我的面吹牛蒜鸡,可吹牛的內容都是我干的胯努。 我是一名探鬼主播牢裳,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叶沛!你這毒婦竟也來了蒲讯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤恬汁,失蹤者是張志新(化名)和其女友劉穎伶椿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氓侧,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡脊另,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了约巷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偎痛。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖独郎,靈堂內的尸體忽然破棺而出踩麦,到底是詐尸還是另有隱情,我是刑警寧澤氓癌,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布谓谦,位于F島的核電站,受9級特大地震影響贪婉,放射性物質發(fā)生泄漏反粥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一疲迂、第九天 我趴在偏房一處隱蔽的房頂上張望才顿。 院中可真熱鬧,春花似錦尤蒿、人聲如沸郑气。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尾组。三九已至,卻和暖如春示弓,著一層夾襖步出監(jiān)牢的瞬間演怎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工避乏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爷耀,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓拍皮,卻偏偏與公主長得像歹叮,于是被迫代替她去往敵國和親跑杭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348