快速入門比特幣的最少必要知識(shí):協(xié)議吱肌、節(jié)點(diǎn)
協(xié)議:是計(jì)算機(jī)領(lǐng)域的專業(yè)術(shù)語(yǔ)(protocol),計(jì)算機(jī)領(lǐng)域有很多協(xié)議仰禽,如:http協(xié)議氮墨。協(xié)議是大家一起制定,共同遵守吐葵,的文件规揪,比如一些離婚協(xié)議,租房合同温峭;協(xié)議的內(nèi)容如果大家都認(rèn)可是可以擴(kuò)展的猛铅。
節(jié)點(diǎn):一般是指計(jì)算機(jī)網(wǎng)絡(luò)里面的單個(gè)計(jì)算機(jī)或者網(wǎng)絡(luò)設(shè)備。每個(gè)節(jié)點(diǎn)的功能可能各不相同凤藏,但在網(wǎng)絡(luò)中是一個(gè)一個(gè)獨(dú)立且相互連接的個(gè)體奸忽。在比特幣網(wǎng)絡(luò)里面,我們常常說(shuō)的節(jié)點(diǎn)揖庄,往往是帶有比特幣客戶端的計(jì)算機(jī)或者網(wǎng)絡(luò)設(shè)備栗菜。
6.1 p2p網(wǎng)絡(luò)架構(gòu)
P2P(peer to peer):點(diǎn)對(duì)點(diǎn);比特幣網(wǎng)絡(luò)架構(gòu)就是P2P蹄梢。比特幣網(wǎng)絡(luò)中的每一臺(tái)計(jì)算機(jī)都彼此對(duì)等 疙筹,每個(gè)節(jié)點(diǎn)共同提供網(wǎng)絡(luò)服務(wù),不存在任何“特殊”節(jié)點(diǎn)禁炒。每個(gè)節(jié)點(diǎn)完全平等的對(duì)外提供服務(wù)而咆,同時(shí)使用其他節(jié)點(diǎn)提供的服務(wù)。
比特幣網(wǎng)絡(luò)就是按照比特幣P2P協(xié)議運(yùn)行的一系列節(jié)點(diǎn)的集合齐苛。
6.2節(jié)點(diǎn)類型及分工(依據(jù)功能)
比特幣節(jié)點(diǎn)價(jià)值和地位一律平等翘盖,但是各個(gè)節(jié)點(diǎn)的功能卻不一樣桂塞,每個(gè)節(jié)點(diǎn)分工不同凹蜂。
一個(gè)全節(jié)點(diǎn)包括4個(gè)功能:1、錢包;2玛痊、礦工汰瘫;3、完整區(qū)塊鏈擂煞;4混弥、網(wǎng)絡(luò)路由節(jié)點(diǎn)。
对省?蝗拿??節(jié)點(diǎn)包含4個(gè)功能的是全節(jié)點(diǎn)蒿涎,還有不包含4個(gè)功能的節(jié)點(diǎn)嗎哀托?是天生不全,還是有意不全劳秋?
先是通過(guò)百度仓手,后來(lái)才想起來(lái)查證原文(只需要點(diǎn)一下直播中的鏈接)才知道節(jié)點(diǎn)有7種分類呢,
1玻淑、核心客戶端(全節(jié)點(diǎn))嗽冒;
2、完整區(qū)塊鏈節(jié)點(diǎn)(含:完整區(qū)塊鏈补履、網(wǎng)絡(luò)路由節(jié)點(diǎn))添坊;
3、獨(dú)立礦工(含:礦工箫锤、完整區(qū)塊鏈帅腌、網(wǎng)絡(luò)路由節(jié)點(diǎn));
4麻汰、輕量spv錢包(錢包速客、網(wǎng)絡(luò)路由節(jié)點(diǎn));
5五鲫、礦池協(xié)議服務(wù)器(如:pool溺职、stratum服務(wù)器。將運(yùn)行其他協(xié)議的節(jié)點(diǎn):如礦池挖礦節(jié)點(diǎn)位喂,stratum節(jié)點(diǎn)浪耘,連接至P2P網(wǎng)絡(luò)的網(wǎng)關(guān)路由器);
6塑崖、挖礦節(jié)點(diǎn)(包含不具有區(qū)塊鏈七冲、但具備stratum協(xié)議節(jié)點(diǎn)(s)或其他礦池挖礦協(xié)議節(jié)點(diǎn)(p)的挖礦功能);
7规婆、輕量(SPV)Stratum錢包(包含不具有區(qū)塊鏈的錢包澜躺、運(yùn)行stratum協(xié)議的網(wǎng)絡(luò)節(jié)點(diǎn)蝉稳。
7個(gè)葫蘆娃啊。
每個(gè)節(jié)點(diǎn)都參與全網(wǎng)絡(luò)的路由功能掘鄙,同時(shí)也可能包含其他功能耘戚。每個(gè)節(jié)點(diǎn)都參與驗(yàn)證并傳播交易及區(qū)塊信息,發(fā)現(xiàn)并維持與對(duì)等節(jié)點(diǎn)的連接
路由功能是指:每個(gè)節(jié)點(diǎn)都會(huì)主動(dòng)連接各自的鄰居節(jié)點(diǎn)操漠,從而為整個(gè)網(wǎng)絡(luò)服務(wù)收津。
4個(gè)功能任意組合,就會(huì)出現(xiàn)不同的節(jié)點(diǎn)浊伙,也就是說(shuō)撞秋,很多節(jié)點(diǎn)并不是全節(jié)點(diǎn):如錢包。
6.3擴(kuò)展比特幣網(wǎng)絡(luò)
比特幣網(wǎng)絡(luò)本身是遵守比特幣協(xié)議的各個(gè)節(jié)點(diǎn)組合嚣鄙。但是協(xié)議本身有些功能是無(wú)法實(shí)現(xiàn)的部服,比如:挖礦和錢包功能。如果要實(shí)現(xiàn)的話就需要去擴(kuò)展比特幣網(wǎng)絡(luò)協(xié)議拗慨。
比如:許多連接到比特幣網(wǎng)絡(luò)的大型公司運(yùn)行著基于Bitcoin核心客戶端的全節(jié)點(diǎn)客戶端廓八,它們具有區(qū)塊鏈的完整拷貝及網(wǎng)絡(luò)節(jié)點(diǎn),但不具備挖礦和錢包功能赵抢。
這些網(wǎng)絡(luò)公司為了擁有這些功能剧蹂,會(huì)在原來(lái)的比特幣網(wǎng)絡(luò)協(xié)議上,增補(bǔ)一些上述功能的特殊協(xié)議烦却。
協(xié)議:就是規(guī)則宠叼,但是一切可以商量著來(lái)。
擴(kuò)展之后的比特幣網(wǎng)絡(luò)其爵,它包含了多種類型的節(jié)點(diǎn)冒冬、網(wǎng)關(guān)路由器、邊緣路由器摩渺、錢包客戶端简烤、以及它們相互連接所需的各類協(xié)議。
這些擴(kuò)展協(xié)議的存在摇幻,使得整個(gè)比特幣網(wǎng)絡(luò)擁有了更多的功能横侦。
6.4網(wǎng)絡(luò)發(fā)現(xiàn)
比特幣網(wǎng)絡(luò)里面的節(jié)點(diǎn)是存在于復(fù)雜的網(wǎng)絡(luò)之中的。
每一個(gè)新的節(jié)點(diǎn)出現(xiàn)之后绰姻,為了可以和整個(gè)區(qū)塊鏈網(wǎng)絡(luò)里面的節(jié)點(diǎn)進(jìn)行協(xié)作枉侧,這個(gè)節(jié)點(diǎn)就必須要主動(dòng)去和已經(jīng)存在的節(jié)點(diǎn)聯(lián)系。這樣才能加入到比特幣網(wǎng)絡(luò)的大家庭里面狂芋。
這個(gè)新節(jié)點(diǎn)與已有節(jié)點(diǎn)建立聯(lián)系的過(guò)程榨馁,稱作:網(wǎng)絡(luò)發(fā)現(xiàn)。發(fā)現(xiàn)的目的是:找到自己的對(duì)等節(jié)點(diǎn)帜矾。
網(wǎng)絡(luò)發(fā)現(xiàn)的過(guò)程就像:搬家之后找鄰居翼虫。(家庭地址就是IP地址)
新節(jié)點(diǎn)是如何找到自己的對(duì)應(yīng)節(jié)點(diǎn)并產(chǎn)生聯(lián)系的呢屑柔?
區(qū)塊鏈里面網(wǎng)絡(luò)節(jié)點(diǎn)眾多,新節(jié)點(diǎn)剛開始找鄰居的時(shí)候蛙讥,是很難一下子就找到自己的對(duì)等節(jié)點(diǎn)的。
為了能夠提高網(wǎng)絡(luò)發(fā)現(xiàn)的效率灭衷,在整個(gè)網(wǎng)絡(luò)里面存在一種特殊的節(jié)點(diǎn)次慢,這類節(jié)點(diǎn)稱作:種子節(jié)點(diǎn)。
如果把新節(jié)點(diǎn)找到對(duì)應(yīng)節(jié)點(diǎn)的過(guò)程比做是搬家找鄰居翔曲,那么迫像,種子節(jié)點(diǎn)就是你將入住小區(qū)的居委會(huì)大媽。
居委會(huì)大媽的手里掌握著大把的小區(qū)鄰居的信息瞳遍。你把信息給大媽闻妓,大媽幫你尋找可以與你對(duì)應(yīng)的鄰居節(jié)點(diǎn)。
下一步就是你自己和鄰居產(chǎn)生深聯(lián)系掠械。你把自己的信息給鄰居由缆,鄰居還會(huì)幫你把你的信息再次傳遞給他的鄰居。鄰居的鄰居還會(huì)在傳播猾蒂,一次下去均唉,很快,整個(gè)小區(qū)都會(huì)知道你的地址肚菠,找到你將很容易了舔箭。
大媽們都很熱心的。
另外蚊逢,你還可以向你的鄰居節(jié)點(diǎn)發(fā)出請(qǐng)求层扶,獲取你鄰居所知道的其他鄰居節(jié)點(diǎn)的地址信息。
就這樣烙荷,全網(wǎng)節(jié)點(diǎn)就都彼此知道大家的節(jié)點(diǎn)地址了镜会。
你也可以找到與你對(duì)等的節(jié)點(diǎn)了,完成網(wǎng)絡(luò)發(fā)現(xiàn)的目標(biāo)终抽。
這個(gè)村兒太友愛了稚叹!
還有一種情況是:節(jié)點(diǎn)和整個(gè)比特幣網(wǎng)絡(luò)失去聯(lián)系,退出網(wǎng)絡(luò)了拿诸,就好像你有搬入和搬出小區(qū)的自由一樣扒袖。就好像你做了一段時(shí)間礦工,突然不想做了立刻比特幣網(wǎng)絡(luò)一樣亩码。
人搬入小區(qū)住別的地方季率,節(jié)點(diǎn)能搬哪里呢?是不是消耗了描沟。
這種情況下飒泻,節(jié)點(diǎn)之間的地址是不可靠的鞭光,比特幣網(wǎng)絡(luò)就發(fā)明了自己的一套機(jī)制來(lái)處理這種情況。
比特幣網(wǎng)絡(luò)里面每個(gè)節(jié)點(diǎn)必須不斷的做兩件事情:在失去的同時(shí)發(fā)現(xiàn)新的鄰居節(jié)點(diǎn)泞遗,找到并主動(dòng)提供幫助惰许。
網(wǎng)絡(luò)發(fā)現(xiàn)其實(shí)就是節(jié)點(diǎn)之間主動(dòng)幫忙的結(jié)果。
下面講解節(jié)點(diǎn)是怎么知道自己鄰居是否搬家的史辙。
原來(lái)節(jié)點(diǎn)之間是需要定期發(fā)送信息維護(hù)連接的汹买。和人一樣的社交規(guī)則。如果兩個(gè)節(jié)點(diǎn)之間持續(xù)90分鐘沒有發(fā)送信息了聊倔,節(jié)點(diǎn)的任何一方都可以認(rèn)定鄰居節(jié)點(diǎn)從網(wǎng)絡(luò)里離開了晦毙,這時(shí),就可以找新鄰居了耙蔑。
這樣的機(jī)制见妒,保證了整個(gè)比特幣網(wǎng)絡(luò)可以自動(dòng)調(diào)整節(jié)點(diǎn)規(guī)模的增減。
節(jié)點(diǎn)的規(guī)則和人之間的規(guī)則一樣的甸陌,節(jié)點(diǎn)不能獨(dú)處须揣,人之間沒有社交也是不可能的。
6.5全節(jié)點(diǎn)
抱有一份完整的钱豁、最新的區(qū)塊鏈拷貝的節(jié)點(diǎn)返敬,我們叫它全節(jié)點(diǎn)。
全節(jié)點(diǎn)可以獨(dú)立的進(jìn)行建立并校驗(yàn)整個(gè)區(qū)塊鏈寥院,也就是從第一塊創(chuàng)世區(qū)塊一直建立到網(wǎng)絡(luò)中最新的區(qū)塊的整個(gè)比特幣網(wǎng)絡(luò)劲赠。
由于全節(jié)點(diǎn)擁有全新的拷貝,所以全節(jié)點(diǎn)“不需借助或信任其他系統(tǒng)即可獨(dú)立地對(duì)所有信息進(jìn)行驗(yàn)證秸谢×菖欤”
由于全節(jié)點(diǎn)包含整個(gè)區(qū)塊鏈的完整信息,如果你的計(jì)算機(jī)想擁有一個(gè)全節(jié)點(diǎn)估蹄,你的硬盤至少需要20GB的存儲(chǔ)空間塑煎。
6.6庫(kù)存清單
庫(kù)存清單其實(shí)是一個(gè)比喻的說(shuō)法,意思是說(shuō):每個(gè)節(jié)點(diǎn)里面都有存儲(chǔ)一份與自己的相連接的節(jié)點(diǎn)的名單臭蚁。
當(dāng)網(wǎng)絡(luò)里面的兩個(gè)節(jié)點(diǎn)需要連接的時(shí)候最铁,這兩個(gè)節(jié)點(diǎn)會(huì)相互交換各自所存儲(chǔ)的節(jié)點(diǎn)清單信息,這樣可以保證垮兑,一個(gè)新的全節(jié)點(diǎn)可以構(gòu)建完整的區(qū)塊鏈信息冷尉。
這就是交換庫(kù)存清單的過(guò)程。
6.7SPV簡(jiǎn)易支付驗(yàn)證節(jié)點(diǎn)
上面說(shuō)過(guò)只有全節(jié)點(diǎn)擁有完整的全網(wǎng)區(qū)塊鏈拷貝系枪,也只有全節(jié)點(diǎn)具備獨(dú)立驗(yàn)證的能力雀哨。
很多節(jié)點(diǎn),是沒有全節(jié)點(diǎn)獨(dú)立驗(yàn)證能力的,所以會(huì)采用一種叫做SPV的驗(yàn)證方式雾棺。
采用SPV驗(yàn)證方式的節(jié)點(diǎn)叫做SPV節(jié)點(diǎn)膊夹。
SPV節(jié)點(diǎn)不會(huì)去下載所有的區(qū)塊鏈信息,而只是去下載每個(gè)區(qū)塊的頭部信息捌浩。(與就是區(qū)塊頭的信息)
SPV的驗(yàn)證方式放刨,是通過(guò)參考交易在區(qū)塊鏈的深度,而不是高度尸饺,來(lái)驗(yàn)證交易的进统。
簡(jiǎn)單來(lái)說(shuō),檢查一個(gè)區(qū)塊的上面是否疊加了6個(gè)區(qū)塊侵佃,如果有麻昼,證明這個(gè)交易是確實(shí)發(fā)生的奠支。
有6塊就可以證明確實(shí)交易了
第七章:區(qū)塊+鏈
區(qū)塊是區(qū)塊鏈最基本的組成單位馋辈。每一個(gè)區(qū)塊里面包含著眾多的交易信息,也包含一些與相鄰區(qū)塊聯(lián)系的信息倍谜,你可以簡(jiǎn)單的把區(qū)塊看作是一個(gè)帳本迈螟,帳本里包含著很多交易信息。
鏈:是一個(gè)比喻的說(shuō)法尔崔,鏈條關(guān)系是一種很穩(wěn)固的關(guān)系答毫,往往表示前后關(guān)系十分緊密,在區(qū)塊鏈里每個(gè)區(qū)塊都是前后連接的季春。
7.1區(qū)塊鏈
區(qū)塊鏈的意識(shí)是:由包含信息的區(qū)塊從后向前有序鏈接起來(lái)的數(shù)據(jù)結(jié)構(gòu)洗搂。
實(shí)際上區(qū)塊鏈并不是整個(gè)一條鏈條,而是一條斷開的鏈载弄。也可以看成是一根垂直的鏈耘拇。
最底部的區(qū)塊叫創(chuàng)世區(qū)塊。
區(qū)塊鏈里面的高度宇攻,指的就是區(qū)塊與創(chuàng)世區(qū)塊之間的距離惫叛,頂部或頂端的區(qū)塊是新加入的,新區(qū)塊離創(chuàng)世區(qū)塊最遠(yuǎn)逞刷。
還可以把垂直的區(qū)塊比成一個(gè)玻璃杯里面疊加的冰塊嘉涌。這個(gè)結(jié)構(gòu)就是編程領(lǐng)域常見的一種數(shù)據(jù)結(jié)構(gòu):棧。
SPV的驗(yàn)證方式看的是區(qū)塊所在的高度夸浅。
其實(shí)就是從垂直的角度來(lái)看仑最,這個(gè)區(qū)塊在從高到低的順序上有多少個(gè)區(qū)塊疊加在自己身上,只要自己的深度超過(guò)6個(gè)(也就是在自己的上面疊加了6個(gè)區(qū)塊)帆喇,就可以說(shuō)明自己所帶的交易信息是驗(yàn)證過(guò)的词身。
“從上往下看,超過(guò)6個(gè)后番枚,區(qū)塊在區(qū)塊鏈中的位置越深法严,被改變的可能性就越小损敷。在100個(gè)區(qū)塊之后,區(qū)塊鏈已經(jīng)足夠穩(wěn)定深啤,這時(shí)Coinbase交易(包含新挖出的比特幣的交易)拗馒,可以被支付。幾千個(gè)區(qū)塊(一個(gè)月)后的區(qū)塊鏈將變成歷史溯街,永遠(yuǎn)不可能被改變了诱桂。
7.2區(qū)塊結(jié)構(gòu)
單個(gè)區(qū)塊的結(jié)構(gòu),也就是單個(gè)帳本的內(nèi)部結(jié)構(gòu)呈昔。
單個(gè)區(qū)塊是有兩部分組成的:一個(gè)是區(qū)塊頭挥等,一個(gè)是區(qū)塊主體。
區(qū)塊頭里面有三組元數(shù)據(jù)組成:父區(qū)塊的哈希值堤尾,挖礦競(jìng)爭(zhēng)相關(guān)數(shù)據(jù)肝劲,merkle樹根(所有交易信息的數(shù)據(jù)結(jié)構(gòu))
7.3區(qū)塊頭標(biāo)示符
每一個(gè)區(qū)塊都有自己的標(biāo)示符,使自己易于查找和辨別郭宝。
第一種:識(shí)別方式是:區(qū)塊頭哈希值辞槐,相當(dāng)于每個(gè)區(qū)塊的身份證
通過(guò)SHA256加密算法,對(duì)區(qū)塊頭里面的信息進(jìn)行計(jì)算粘室,將可以得到一個(gè)區(qū)塊頭的唯一哈希值榄檬。
整個(gè)比特幣網(wǎng)絡(luò)里面的區(qū)塊,都有自己唯一的哈希值衔统,這個(gè)哈希值鹿榜,自己的區(qū)塊是沒有存儲(chǔ)的,整個(gè)網(wǎng)絡(luò)會(huì)有專門的存儲(chǔ)锦爵。就好像舱殿,你辦了身份證,但是身份證是放在派出所里保管的棉浸。
第二種識(shí)別方式:區(qū)塊鏈的高度怀薛。
相當(dāng)于區(qū)塊住的樓層高度。但是與區(qū)塊頭哈希值不同的是迷郑,區(qū)塊的高度枝恋,不是一個(gè)區(qū)塊的唯一標(biāo)示符,因?yàn)榇嬖趨^(qū)塊鏈分叉嗡害。
區(qū)塊鏈分叉可以理解為:兩個(gè)或者兩個(gè)以上的區(qū)塊可能有相同的區(qū)塊高度焚碌,在區(qū)塊鏈里爭(zhēng)奪相同的位置。
在整個(gè)區(qū)塊鏈網(wǎng)絡(luò)里面霸妹,每個(gè)礦工都有自己的區(qū)塊十电,同時(shí),只能有一個(gè)區(qū)塊獲勝,最后被加入到區(qū)塊鏈中鹃骂。
所以台盯,在區(qū)塊鏈的頂部位置,在某個(gè)時(shí)刻畏线,可能有多個(gè)區(qū)塊擁有完全相同的區(qū)塊高度静盅,此時(shí),即使你知道區(qū)塊的高度寝殴,但是就是無(wú)法確定到底具體是哪個(gè)區(qū)塊蒿叠。
所以,高度不是區(qū)塊的唯一識(shí)別蚣常。
7.4區(qū)塊的鏈接:區(qū)塊+鏈
鏈指的是區(qū)塊之間的聯(lián)系市咽,每一個(gè)區(qū)塊的頭部區(qū)塊里,會(huì)存儲(chǔ)自己的“父區(qū)塊”的區(qū)塊哈希值抵蚊。
有意思的是:區(qū)塊不存自己的哈希值而存它爹的身份證施绎,是想延續(xù)光榮?
父區(qū)塊:當(dāng)前區(qū)塊的前一個(gè)區(qū)塊泌射。從垂直的角度來(lái)看粘姜,就是壓在自己身下的最近距離的一個(gè)區(qū)塊鬓照。
以此類推熔酷,第二個(gè)區(qū)塊的父區(qū)塊就是創(chuàng)世區(qū)塊,也就是第一個(gè)區(qū)塊 豺裆。
這樣的機(jī)制拒秘,使得每個(gè)區(qū)塊都能根據(jù)自己的父區(qū)塊的唯一標(biāo)示符,一路查找到創(chuàng)世區(qū)塊臭猜。
這樣就形成了一個(gè)不間斷的鏈條結(jié)構(gòu)躺酒。
7.5Merkle樹
merkle樹,是一種獨(dú)特的數(shù)據(jù)結(jié)構(gòu)蔑歌。這個(gè)結(jié)構(gòu)主要用來(lái)表示每個(gè)區(qū)塊里面的所有交易記錄的羹应。這個(gè)樹存在的意義,是為了快速驗(yàn)證交易是否存在次屠。這里面涉及到二叉樹的算法园匹,二叉樹算法可以理解為一種提高計(jì)算效率的數(shù)學(xué)公式。
markle樹形結(jié)構(gòu)的應(yīng)用劫灶,使得驗(yàn)證一條交易信息是否存在的時(shí)間復(fù)雜度大大降低裸违。
markle樹的特點(diǎn)和作用具體表現(xiàn)為:當(dāng)區(qū)塊大小由16筆交易(4KB)急劇增加為65535筆交易(16MB)時(shí),為證明交易存在的Markle路徑長(zhǎng)度增長(zhǎng)極其緩慢本昏,僅僅從128字節(jié)到512字節(jié)
這樣的方式供汛,使得SPV的(簡(jiǎn)單支付驗(yàn)證)有了可能。
SPV節(jié)點(diǎn)不保存所有交易也不會(huì)下載整個(gè)區(qū)塊,僅僅保存區(qū)塊頭怔昨,它們使用認(rèn)證路徑或者M(jìn)erkle路徑來(lái)驗(yàn)證交易存在于區(qū)塊中雀久,而不必下載區(qū)塊中的所有交易。