比特幣教程之?dāng)?shù)據(jù)一致性問題

比特幣區(qū)塊鏈?zhǔn)且粋€(gè)分布式的數(shù)據(jù)庫(kù),它的數(shù)據(jù)可以存在于任何人的電腦中恩袱,只要你的電腦接入了互聯(lián)網(wǎng),有足夠大的磁盤空間可以裝下胶哲。關(guān)于數(shù)據(jù)庫(kù)的體積畔塔,我們可以計(jì)算一下,目前的區(qū)塊高度大約是50w鸯屿,每個(gè)區(qū)塊的大小上限是1M澈吨,那數(shù)據(jù)庫(kù)的體積上限也就是500G,一個(gè)普通的移動(dòng)硬盤就夠了寄摆。而實(shí)際數(shù)據(jù)庫(kù)的體積比這個(gè)數(shù)還要小太多谅辣,因?yàn)楸忍貛旁缙趲缀鯖]有人進(jìn)行交易,區(qū)塊的大小僅215個(gè)字節(jié)左右婶恼。目前這個(gè)體積大概是70個(gè)G左右桑阶。

既然數(shù)據(jù)有這么多份拷貝,那算法又是如何保證這些數(shù)據(jù)是完全一致的呢勾邦,如果有人要篡改數(shù)據(jù)蚣录,會(huì)不會(huì)就不那么安全了?

比特幣為了解決數(shù)據(jù)庫(kù)的安全性和一致性眷篇,使用了兩個(gè)重要機(jī)制萎河。數(shù)據(jù)的安全性機(jī)制可以用一句簡(jiǎn)單的成語(yǔ)來(lái)描述就是【牽一發(fā)而動(dòng)全身】,數(shù)據(jù)一致性機(jī)制也可以用一個(gè)簡(jiǎn)單的原理概括那就是【大多數(shù)人都是好的】蕉饼。

挖礦很難

區(qū)塊鏈?zhǔn)且粋€(gè)分布式數(shù)據(jù)庫(kù)虐杯,全世界的人都在查詢這個(gè)數(shù)據(jù)庫(kù),但是負(fù)責(zé)往數(shù)據(jù)庫(kù)里寫數(shù)據(jù)的角色則只有礦工椎椰。礦工的操作就是構(gòu)造一個(gè)區(qū)塊厦幅,使得這個(gè)區(qū)塊能滿足一定的算法條件沾鳄,就可以加入到全局的區(qū)塊鏈數(shù)據(jù)庫(kù)中慨飘,然后礦工就可以獲得巨額回報(bào)。

那問題是礦工在自己的挖礦機(jī)上構(gòu)造出了一個(gè)區(qū)塊译荞,這個(gè)區(qū)塊是如何同步到全世界的呢瓤的?它使用的是P2P的廣播機(jī)制,可以理解為【擊花傳鼓】吞歼。首先礦工將這個(gè)區(qū)塊加入到本地的區(qū)塊鏈中圈膏,然后將區(qū)塊的信息通過路由器傳遞到互聯(lián)網(wǎng)上,在網(wǎng)路上監(jiān)聽的所有設(shè)備都可以讀取到這個(gè)區(qū)塊的信息篙骡,然后對(duì)這個(gè)區(qū)塊的信息進(jìn)行校驗(yàn)稽坤,看看這個(gè)區(qū)塊是否滿足算法限定的苛刻條件丈甸。如果滿足了算法條件,就將這個(gè)區(qū)塊加入到自己的區(qū)塊鏈中尿褪,并且繼續(xù)對(duì)外傳播新區(qū)塊信息睦擂。

如果挖礦很容易,不但挖礦掙不到錢杖玲,互聯(lián)網(wǎng)網(wǎng)路上還會(huì)引起P2P廣播風(fēng)暴顿仇。那算法究竟對(duì)區(qū)塊限定了什么條件使得挖礦如此艱難呢?

我們來(lái)看一個(gè)區(qū)塊頭

圖中的hash字段就是當(dāng)前區(qū)塊的hash值摆马,prev_block是前一個(gè)區(qū)塊的hash值臼闻。區(qū)塊正是通過hash值串起來(lái)形成了一個(gè)區(qū)塊鏈。hash值是將上一個(gè)塊的hash值和當(dāng)前區(qū)塊頭內(nèi)容信息拼接起來(lái)進(jìn)行兩次sha256哈希得到的16進(jìn)制字符串囤采。

我們發(fā)現(xiàn)這些hash值前面都有很多個(gè)零述呐,那為什么會(huì)有這么多零呢?還有就是sha256哈希算法得到的hash值應(yīng)該是非常隨機(jī)的才對(duì)蕉毯,那如何hash的前綴會(huì)有這么多零呢市埋?

正是這些零造就了挖礦如此艱難。

礦工要隨機(jī)出合適的nonce值恕刘,使得兩次sha256哈希出來(lái)的值前綴至少包含N個(gè)零才可以被算法接受缤谎。假設(shè)使得前綴的第一位冒出一個(gè)零的概率是1/16,那使得N個(gè)位都要為零就必須平均進(jìn)行隨機(jī)16的N次方次nonce值才可以哈希出滿足條件的hash值褐着。圖中有17個(gè)零坷澡,16的17次方是一個(gè)非常可怕的數(shù)字含蓉。

算法還規(guī)定隨著區(qū)塊的高度增加频敛,需要的N值越大。

我們看創(chuàng)世區(qū)塊馅扣,也就是中本聰先生挖的第一個(gè)區(qū)塊

這個(gè)區(qū)塊的hash值前綴才10個(gè)零斟赚,如今挖礦難度已經(jīng)足足上升了16的7次方倍。礦工們?nèi)绻胍掷m(xù)獲得挖礦收益就必須擴(kuò)大礦場(chǎng)升級(jí)計(jì)算硬件差油。這也是為什么比特幣被環(huán)保人士詬病的原因之一拗军,因?yàn)樗馁M(fèi)了太多的能源去做這些【無(wú)意義】的計(jì)算。

未來(lái)挖礦的難度繼續(xù)增大蓄喇,計(jì)算機(jī)的算力會(huì)不會(huì)遇到瓶頸发侵,挖礦的收益會(huì)不會(huì)難以填平能量費(fèi)用,我們不知道妆偏,只能繼續(xù)觀察刃鳄。

區(qū)塊鏈分叉

有這樣一種可能,兩個(gè)礦工幾乎同一時(shí)間挖出了一個(gè)區(qū)塊钱骂,然后廣播到互聯(lián)網(wǎng)建議其它節(jié)點(diǎn)接受自己的區(qū)塊叔锐。節(jié)點(diǎn)收到這兩個(gè)區(qū)塊時(shí)會(huì)感到迷惑挪鹏,該接受哪個(gè)區(qū)塊呢,它很矛盾怎么辦愉烙?能不能隨機(jī)接受一個(gè)呢狰住?不可以,如果每個(gè)節(jié)點(diǎn)都隨機(jī)的話齿梁,全球區(qū)塊鏈數(shù)據(jù)庫(kù)就不一致了催植。

于是區(qū)塊鏈干脆就分叉,分成兩個(gè)支鏈勺择,然后就等著這兩個(gè)支鏈發(fā)展壯大创南,看誰(shuí)的支鏈發(fā)展的越長(zhǎng),最終就選擇誰(shuí)省核。算法規(guī)定優(yōu)先保留長(zhǎng)度較長(zhǎng)的鏈條稿辙。隨著區(qū)塊鏈的繼續(xù)發(fā)展,相對(duì)較短的弱小的分支鏈條將會(huì)被拋棄掉气忠,于是全球數(shù)據(jù)庫(kù)仍將繼續(xù)保持一致邻储。那會(huì)不會(huì)永遠(yuǎn)這兩個(gè)分支鏈條一樣長(zhǎng)呢,有這個(gè)可能旧噪,只是概率太小吨娜,小到幾乎沒可能發(fā)生。正所謂一山不容二虎淘钟,最終只有一個(gè)霸王宦赠。那些因?yàn)榉种чL(zhǎng)度太短被淘汰掉的區(qū)塊是作廢了的,辛苦挖出這些分支塊的礦工也不會(huì)有任何獎(jiǎng)勵(lì)米母,因?yàn)檫@些分支塊上的內(nèi)容不會(huì)被承認(rèn)勾扭。

偽造區(qū)塊

區(qū)塊鏈上登記的BTC很誘人,能不能把鏈條上的UTXO記錄改成自己的賬戶地址铁瞒,這樣不就可以毫不費(fèi)力拿到很多BTC直接成為世界首富了么妙色?

前文提到區(qū)塊的hash串是根據(jù)前驅(qū)區(qū)塊的hash串加上當(dāng)前區(qū)塊的內(nèi)容整體hash出來(lái)的結(jié)果。如果前驅(qū)區(qū)塊的內(nèi)容如果變了慧耍,前驅(qū)區(qū)塊的hash也得變身辨,然后后續(xù)區(qū)塊節(jié)點(diǎn)的hash串也會(huì)跟著變,一直傳遞下去蜂绎,就需要改變指定區(qū)塊的后續(xù)所有區(qū)塊節(jié)點(diǎn)栅表。

假定你在本地的數(shù)據(jù)庫(kù)里把這個(gè)區(qū)塊鏈給修改了笋鄙,還需要將這些修改的區(qū)塊通過互聯(lián)網(wǎng)廣播出去师枣,讓其它的節(jié)點(diǎn)也能接受,這就是個(gè)問題了萧落。收到區(qū)塊的節(jié)點(diǎn)干的第一件事就是校驗(yàn)區(qū)塊是否合法践美,也就是區(qū)塊的hash值是否滿足前置N個(gè)零的苛刻條件洗贰。待合法后,它會(huì)將區(qū)塊接到合適的位置引出一個(gè)分支來(lái)陨倡,這個(gè)位置不會(huì)比當(dāng)前最長(zhǎng)鏈的位置還低6層敛滋,因?yàn)樗惴ㄒ?guī)定落后6層的分支鏈?zhǔn)菚?huì)被拋棄的。這意味著你不可能篡改6層之前的任何區(qū)塊兴革,因?yàn)?層之前的區(qū)塊已經(jīng)塵埃落定了绎晃。

如果算力足夠強(qiáng)大到找到后6層區(qū)塊的目標(biāo)nonce值,確是可以達(dá)到串改數(shù)據(jù)庫(kù)的目的杂曲。但是這樣的篡改行為實(shí)際上是和挖礦行為等價(jià)的庶艾。你所做的不過就是爭(zhēng)取最長(zhǎng)的區(qū)塊鏈,在分支競(jìng)爭(zhēng)長(zhǎng)度時(shí)盡可能取勝而已擎勘。

日本【虛擬貨幣少女】偶像團(tuán)體

閱讀相關(guān)文章咱揍,關(guān)注微信公眾號(hào)/知乎專欄/頭條號(hào)【碼洞】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市棚饵,隨后出現(xiàn)的幾起案子煤裙,更是在濱河造成了極大的恐慌,老刑警劉巖噪漾,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼砰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡欣硼,警方通過查閱死者的電腦和手機(jī)夺刑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)分别,“玉大人遍愿,你說(shuō)我怎么就攤上這事≡耪叮” “怎么了沼填?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)括授。 經(jīng)常有香客問我坞笙,道長(zhǎng),這世上最難降的妖魔是什么荚虚? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任薛夜,我火速辦了婚禮,結(jié)果婚禮上版述,老公的妹妹穿的比我還像新娘梯澜。我一直安慰自己,他們只是感情好渴析,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布晚伙。 她就那樣靜靜地躺著吮龄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咆疗。 梳的紋絲不亂的頭發(fā)上漓帚,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音午磁,去河邊找鬼尝抖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迅皇,可吹牛的內(nèi)容都是我干的牵署。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼喧半,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奴迅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挺据,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤取具,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扁耐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暇检,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年婉称,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了块仆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡王暗,死狀恐怖悔据,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俗壹,我是刑警寧澤科汗,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站绷雏,受9級(jí)特大地震影響头滔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涎显,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一坤检、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧期吓,春花似錦早歇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛀醉。三九已至悬襟,卻和暖如春衅码,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脊岳。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工逝段, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人割捅。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓奶躯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親亿驾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嘹黔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 原文地址 https://mbinary.coding.me/introduction-to-bitcoin.ht...
    mbinary閱讀 5,096評(píng)論 0 4
  • 8.1 簡(jiǎn)介 挖礦是增加比特幣貨幣供應(yīng)的一個(gè)過程。挖礦同時(shí)還保護(hù)著比特幣系統(tǒng)的安全莫瞬,防止欺詐交易儡蔓,避免“雙重支付”...
    冉冉升起的沙丁魚閱讀 1,595評(píng)論 0 1
  • 很多人知道比特幣,區(qū)塊鏈疼邀。但是整個(gè)網(wǎng)絡(luò)是怎么保證這個(gè)去中心化的喂江?可能很多人并不了解,或者說(shuō)想了解但是不知道從何入手...
    Carykive閱讀 60,662評(píng)論 10 79
  • 大家好,歡迎打開我的晨讀感想拐袜。愿你睜眼的之后的世界充滿溫柔的光芒吉嚣,擁有不悔的一生。 兵家常說(shuō)蹬铺,知己知彼瓦戚,百戰(zhàn)不殆。...
    布了了閱讀 164評(píng)論 0 3
  • 在寒冷的的北極丛塌,有一位沉睡了很久的冰美人较解,被厚厚的冰層覆蓋著她的身體,不能呼吸赴邻,也無(wú)法醒來(lái)印衔。 忽然有一天,海面上駛...
    夏楠閱讀 481評(píng)論 1 6