自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

區(qū)塊鏈
和其他的區(qū)塊鏈技術(shù)相比,比特幣的區(qū)塊鏈有什么特征呢?作為去區(qū)塊鏈的鼻祖,又有什么與眾不同的特性呢?快來跟我們一起看看吧。

 簡介

比特幣的底層就是區(qū)塊鏈技術(shù),區(qū)塊鏈也是因?yàn)楸忍貛哦鴱V為人知的。和其他的區(qū)塊鏈技術(shù)相比,比特幣的區(qū)塊鏈有什么特征呢?作為去區(qū)塊鏈的鼻祖,又有什么與眾不同的特性呢?快來跟我們一起看看吧。

比特幣的網(wǎng)絡(luò)

比特幣使用的是P2P(peer-to-peer)網(wǎng)絡(luò),此P2P非彼P2P,這里是點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)架構(gòu),而不是人對(duì)人的借錢模式。

P2P是指位于同一網(wǎng)絡(luò)中的每臺(tái)計(jì)算機(jī)都彼此對(duì)等,各個(gè)節(jié)點(diǎn)共同提供網(wǎng)絡(luò)服務(wù),不存在任何“特殊”節(jié)點(diǎn)。每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)以“扁平(flat)”的拓?fù)浣Y(jié)構(gòu)相互連通。在P2P網(wǎng)絡(luò)中不存在任何服務(wù)端(server)、中央化的服務(wù)、以及層級(jí)結(jié)構(gòu)。

傳統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)是client-server的模式,所有的client都是和server交互獲取信息, 只要server掛掉了,client也就沒有用了。

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

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

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

有做過P2P下載的同學(xué)應(yīng)該都聽說過種子的概念,這個(gè)種子里面保存了其他活躍的節(jié)點(diǎn)的地址。通過下載種子就可以連接對(duì)應(yīng)的節(jié)點(diǎn)。

而每個(gè)節(jié)點(diǎn)又保存了最近連接或者活躍的節(jié)點(diǎn),這樣就形成了龐大的P2P網(wǎng)絡(luò)。

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

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

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

SPV節(jié)點(diǎn)

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

那么如果想要驗(yàn)證交易的話,需要從歷史的交易中查找所有的和該交易有關(guān)的交易,從而進(jìn)行完整,全面的驗(yàn)證。

這樣做的問題就是,如果下載所有的歷史記錄,那么需要上百G的硬盤空間,這對(duì)于手機(jī)或者其他輕量級(jí)的客戶端是無法想象的。

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

SPV保存的不是整個(gè)區(qū)塊鏈,而是區(qū)塊鏈的頭部,因?yàn)槊總€(gè)區(qū)塊鏈頭只有80字節(jié),所以即使把所有的區(qū)塊頭都下載保存起來也不會(huì)很大。

區(qū)塊鏈頭

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

第二組元數(shù)據(jù),即難度、時(shí)間戳和nonce,與挖礦競爭相關(guān)。

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

Nonce、難度目標(biāo)和時(shí)間戳?xí)糜谕诘V過程,Merkle根用來索引和組織該區(qū)塊所有的交易信息。

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

Merkle Tree

Merkle Tree,是一種樹(數(shù)據(jù)結(jié)構(gòu)中所說的樹),網(wǎng)上大都稱為Merkle Hash Tree,這是因?yàn)?它所構(gòu)造的Merkle Tree的所有節(jié)點(diǎn)都是Hash值。Merkle Tree具有以下特點(diǎn):

  1.  它是一種樹,可以是二叉樹,也可以多叉樹,無論是幾叉樹,它都具有樹結(jié)構(gòu)的所有特點(diǎn);
  2.  Merkle樹的葉子節(jié)點(diǎn)上的value,是由你指定的,這主要看你的設(shè)計(jì)了,如Merkle Hash Tree會(huì)將數(shù)據(jù)的Hash值作為葉子節(jié)點(diǎn)的值;
  3.  非葉子節(jié)點(diǎn)的value是根據(jù)它下面所有的葉子節(jié)點(diǎn)值,然后按照一定的算法計(jì)算而得出的。如Merkle Hash Tree的非葉子節(jié)點(diǎn)value的計(jì)算方法是將該節(jié)點(diǎn)的所有子節(jié)點(diǎn)進(jìn)行組合,然后對(duì)組合結(jié)果進(jìn)行hash計(jì)算所得出的hash value。

有了Merkle Tree,我們只需要知道和要驗(yàn)證的交易相關(guān)的其他Merkle Tree中的信息,就可以計(jì)算出整個(gè)Merkle Tree的值,這樣就可以直接使用頭部信息進(jìn)行驗(yàn)證了。這就是SPV的原理。

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

區(qū)塊鏈?zhǔn)怯砂灰仔畔⒌膮^(qū)塊從后向前有序鏈接起來的數(shù)據(jù)結(jié)構(gòu)。它可以被存儲(chǔ)為flat file(一種包含沒有相對(duì)關(guān)系記錄的文件),或是存儲(chǔ)在一個(gè)簡單數(shù)據(jù)庫中。

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

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

區(qū)塊標(biāo)識(shí)符

那怎么表示一個(gè)區(qū)塊呢?我們使用區(qū)塊標(biāo)志符。

區(qū)塊主標(biāo)識(shí)符是它的加密哈希值,一個(gè)通過SHA256算法對(duì)區(qū)塊頭進(jìn)行二次哈希計(jì)算而得到的數(shù)字指紋。產(chǎn)生的32字節(jié)哈希值被稱為區(qū)塊哈希值,但是更準(zhǔn)確的名稱是:區(qū)塊頭哈希值,因?yàn)橹挥袇^(qū)塊頭被用于計(jì)算。

第二種識(shí)別區(qū)塊的方式是通過該區(qū)塊在區(qū)塊鏈中的位置,即“區(qū)塊高度(block height)”。第一個(gè)區(qū)塊,其區(qū)塊高度為0

和區(qū)塊哈希值不同的是,區(qū)塊高度并不是唯一的標(biāo)識(shí)符。雖然一個(gè)單一的區(qū)塊總是會(huì)有一個(gè)明確的、固定的區(qū)塊高度,但反過來卻并不成立,一個(gè)區(qū)塊高度并不總是識(shí)別一個(gè)單一的區(qū)塊。兩個(gè)或兩個(gè)以上的區(qū)塊可能有相同的區(qū)塊高度,在區(qū)塊鏈里爭奪同一位置。

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

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

因?yàn)閯?chuàng)世區(qū)塊被編入到比特幣客戶端軟件里,所以每一個(gè)節(jié)點(diǎn)都始于至少包含一個(gè)區(qū)塊的區(qū)塊鏈,這能確保創(chuàng)世區(qū)塊不會(huì)被改變。每一個(gè)節(jié)點(diǎn)都“知道”創(chuàng)世區(qū)塊的哈希值、結(jié)構(gòu)、被創(chuàng)建的時(shí)間和里面的一個(gè)交易。因此,每個(gè)節(jié)點(diǎn)都把該區(qū)塊作為區(qū)塊鏈的首區(qū)塊,從而構(gòu)建了一個(gè)安全的、可信的區(qū)塊鏈的根。

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

0000000000 19d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

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

coinbase的值是:04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73

解碼方法如下:

在python shell下:

"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73".decode('hex')

輸出:

'x04xffxffx00x1dx01x04EThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks'

總結(jié)

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

 

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2017-12-25 23:32:23

2021-01-11 22:43:14

區(qū)塊鏈比特幣貨幣

2018-04-02 15:06:53

比特幣區(qū)塊鏈ICO

2020-08-04 14:39:06

比特幣區(qū)塊鏈數(shù)字貨幣

2021-08-06 12:50:43

區(qū)塊鏈比特幣虛擬貨幣

2019-09-29 19:28:13

區(qū)塊鏈比特幣加密貨幣

2022-01-14 11:23:57

區(qū)塊鏈比特幣加密貨幣

2021-01-18 11:09:42

區(qū)塊鏈比特幣工具

2019-04-02 15:00:53

2021-03-08 11:17:44

區(qū)塊鏈比特幣安全

2018-04-20 16:43:23

2020-12-24 14:45:42

比特幣加密貨幣區(qū)塊鏈

2018-08-23 10:33:03

區(qū)塊鏈比特幣數(shù)字貨幣

2021-03-02 10:20:31

僵尸網(wǎng)絡(luò)攻擊加密貨幣

2018-12-12 15:25:33

比特幣數(shù)字貨幣區(qū)塊鏈

2019-11-26 09:21:49

區(qū)塊鏈比特幣虛擬貨幣

2018-02-06 17:50:55

區(qū)塊鏈比特幣

2022-09-05 14:18:55

比特幣以太坊區(qū)塊鏈

2021-02-20 12:04:51

比特幣區(qū)塊鏈美元

2018-04-02 16:35:57

區(qū)塊鏈數(shù)字貨幣比特幣
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)