小白也能懂的比特幣及區(qū)塊鏈原理

小白也能懂的比特幣及區(qū)塊鏈原理

文中盡量以大白話講解比特幣及區(qū)塊鏈的基本原理藕溅,一步一步的畫出區(qū)塊鏈的鳥瞰圖棚壁。
1亍!袖外!相關(guān)概念描述并不嚴謹史隆,僅是面向于小白的小白化說明。

查看原文

初探

比特幣

一種加密數(shù)字貨幣(也叫加密貨幣)在刺。
什么是數(shù)字貨幣逆害?比如:Q幣、游戲幣.....蚣驼。哦魄幕,原來這么簡單,那加密貨幣就是加密了的數(shù)字貨幣颖杏,這有什么好玩的纯陨?嗯......,咱們繼續(xù)看......

區(qū)塊鏈

......留储,這個名詞翼抠,看起來很深奧,先繞過......

比特幣和區(qū)塊鏈的關(guān)系

  • 先講個故事
    某宿舍有六個人获讳,大家經(jīng)常出去吃喝玩耍阴颖,每次吃喝玩耍結(jié)束都需要付款,每次都AA很麻煩丐膝,所以約定大家輪流付款并記賬量愧,每月月底按賬本結(jié)算平攤钾菊。
    這個賬本使用先進的防篡改技術(shù)(比如花色底紋:-) ),由專人記賬偎肃。在每筆付款記錄之后都有一個簽名欄煞烫,由付款人簽名確認。這個賬本裝訂良好累颂,每一頁都有先后順序滞详,任何人都無法抽取替換其中任何一頁來作假。
    你可能會說紊馏,不能篡改料饥,那另做一個賬本,把原來那個賬本替換掉不就可以了瘦棋。好吧稀火,你很聰明,為了防止這種居心不良的人赌朋,咱們建立六個內(nèi)容相同的賬本,每人都保存一個篇裁,這叫分布式保存沛慢,哈哈!

  • 再看比特幣和區(qū)塊鏈
    比特幣和區(qū)塊鏈類似于上面故事中的付款記錄和賬本达布,故事中的賬本對應區(qū)塊鏈团甲,如下圖:

    區(qū)塊鏈對應賬本

賬本中的每一頁對應區(qū)塊鏈中的一個區(qū)塊(區(qū)塊,就是記錄了很多條比特幣交易記錄的數(shù)據(jù)塊)黍聂,賬本中的付款記錄對應區(qū)塊中交易記錄:

記錄對應

故事中我們?yōu)榱税踩?建立了六個相同的賬本躺苦,每人保管一份:

賬本分布存放

而區(qū)塊鏈中,每一份完整的區(qū)塊鏈數(shù)據(jù)分布保存在世界各地的計算機中产还,這些計算機通過通信網(wǎng)絡(luò)相連接匹厘,每臺計算機都被稱為網(wǎng)絡(luò)中的一個節(jié)點:

區(qū)塊鏈網(wǎng)絡(luò)

區(qū)塊鏈的安全性遠比賬本要高:賬本中的簽名是可以模仿的;有六個帳本也可能被全部替換掉脐区。而在比特幣的運行機制中這種情況幾乎不可能發(fā)生愈诚,而這個[幾乎不可能]基本等于[不可能]。為什么這么說牛隅,咱們繼續(xù)分解......

數(shù)字簽名

在前面故事中炕柔,每個付款人都要對自己的付款記錄進行簽字,以確認這條付款記錄是正確的媒佣,并且這筆錢是自己付的匕累。比特幣在交易過程中也會產(chǎn)生很多交易記錄,而這些記錄都是通過數(shù)字簽名來確認的默伍。
數(shù)字簽名廣泛應用于電子商務欢嘿、在線支付等業(yè)務場景中,由一個私鑰和一個公鑰組成授霸。

  • 私鑰
    其實就是一個隨機數(shù),通過一定的算法际插,使得每次產(chǎn)生的這個隨機數(shù)不同碘耳。
  • 公鑰
    是通過私鑰推算(橢圓曲線算法)出來的。但是框弛,不能通過公鑰反推出私鑰辛辨。
  • 用法
    使用私鑰對某個信息簽名,將得到的數(shù)字簽名瑟枫、公鑰斗搞、信息發(fā)送給其他人,那么其他人就可以通過公鑰和數(shù)字簽名就能驗證信息慷妙,確認信息是否正確僻焚。如果信息在傳輸過程被修改過,那怕是被修改過一個標點符號膝擂,或添加了一個空格虑啤,對信息的驗證都會失敗。
    • 簽名函數(shù)(交易記錄架馋,私鑰)=>數(shù)字簽名
    • 驗證函數(shù)(交易記錄狞山,公鑰,數(shù)字簽名)=>驗證通過

數(shù)字簽名是無法偽造的叉寂,一個私鑰對一個消息只能的產(chǎn)生一個數(shù)字簽名萍启。在比特幣交易中,有兩個地方使用了數(shù)字簽名:

  • 對交易記錄簽名
    交易付款人付款時屏鳍,會用付款人的私鑰對交易記錄簽名勘纯,以證明這筆錢是付款人支付的。
  • 證明對比特幣的所有權(quán)
    付款人通過數(shù)字簽名钓瞭,證明支出的這些比特幣是他自己的(通過解鎖腳本驳遵,欲了解詳情,請參考本文后附的鏈接)降淮。

數(shù)據(jù)特征碼

比特幣是通過哈希算法(SHA-256和RipeMD160)計算數(shù)據(jù)的哈希值的超埋,哈希值有什么用呢?我們可以理解為哈希值是數(shù)據(jù)特征碼佳鳖,這個特征碼能夠唯一代表這塊數(shù)據(jù)霍殴。數(shù)據(jù)不同產(chǎn)生的特征碼不同,對數(shù)據(jù)的任何細小改動系吩,都會使得最終得到的數(shù)據(jù)特征碼不同来庭。
那么,這個特征碼有什么用呢?
先看看區(qū)塊的結(jié)構(gòu):

區(qū)塊結(jié)構(gòu)

從上圖中我們看到區(qū)塊有兩部分組成穿挨,hash值組成的區(qū)塊頭和交易記錄組成的區(qū)塊體(為了便于理解此處區(qū)塊頭和交易記錄都做了簡化)月弛。

  • 區(qū)塊頭
    區(qū)塊頭中有兩個Hash值肴盏,分別是父區(qū)塊Hash和Merkle Hash。

    • 父區(qū)塊Hash
      父區(qū)塊Hash保存的是上一個區(qū)塊的特征碼帽衙。
      區(qū)塊鏈中就是通過在子區(qū)塊中保存父區(qū)塊特征碼菜皂,使得子區(qū)塊與父區(qū)塊建立連接,最終建立一個完整區(qū)塊鏈條厉萝。在比特幣中這個鏈條就是比特幣賬本恍飘。
      說到這里,我們就需要修正之前一個的“錯誤”:那個“賬本對應區(qū)塊鏈”的描述是不準確的谴垫,現(xiàn)修改如下:

      賬本對應比特幣賬本

    • Merkle Hash
      Merkle Hash是對區(qū)塊中所有交易記錄計算出的一個總的特征碼章母。
      這個特征碼是怎么算出來的?
      我們以一個區(qū)塊中有四筆交易記錄為例:

      Merkle Hash的計算

      • 分別算出交易記錄1和交易記錄2的特征碼(特征碼1和特征碼2)翩剪,將特征碼2接到特征碼1的后面組成一個新的數(shù)據(jù)乳怎,算出這個新數(shù)據(jù)的特征碼A;
      • 分別算出交易記錄3和交易記錄4的特征碼(特征碼3和特征碼4),將特征碼4接到特征碼3的后面組成一個新的數(shù)據(jù)前弯,以新數(shù)據(jù)算出特征碼B;
      • 將特征碼B接到特征碼A后面蚪缀,算出所有交易記錄的總特征碼,即Merkle Hash

      對上面的步驟我們做進一步的整理:

      • 除了交易記錄博杖,其他都是對特征碼進行計算,即下面圈出的部分:

        Merkle樹

      • 圈出的這部分像一棵倒置的樹椿胯,專業(yè)叫法是Merkle樹(Merkle Tree)

      • 生成總特征碼的基本規(guī)則:兩個特征碼按生成的先后順序連接到一起組成新數(shù)據(jù),來生成新特征碼

      • 總特征碼位于樹的根部剃根,也就是樹的根節(jié)點,因而總特征碼的專業(yè)叫法是Merkle根

      • 如此算出來的總特征碼才能代表區(qū)塊中的所有交易記錄前方,區(qū)塊中的任何信息包括交易記錄的先后順序都不能變動狈醉,只要有變動就無法對應上已經(jīng)算出來的總特征碼,說明數(shù)據(jù)被改動過惠险。

    • 區(qū)塊Hash
      對區(qū)塊頭計算Hash得到的特征碼即區(qū)塊Hash苗傅。因為區(qū)塊頭中包含了代表所有交易記錄Merke Hash,所以僅對區(qū)塊頭計算出的特征碼就可以代表整個區(qū)塊班巩。
      需要注意的是渣慕,區(qū)塊中并不會保存區(qū)塊自己的區(qū)塊Hash,而是在子區(qū)塊保存“父區(qū)塊的Hash”。

    有人說偶數(shù)條記錄可能兩兩組合生成逐級生成特征碼抱慌,那我有奇數(shù)條記錄怎么辦呢逊桦?有了前面的知識,再參考下圖應該就能明白了抑进,這里就不多做解釋了强经。

    奇數(shù)條交易記錄的Merkle樹

不可篡改

讀到這里細心的你可能已經(jīng)對區(qū)塊鏈的不可篡改原理有了一些了解:對區(qū)塊中的任意交易記錄任何修改都會引起數(shù)據(jù)驗證無法通過。

引申一下前面的內(nèi)容

如果你想修改一條了交易記錄寺渗,為了這條修改后的記錄合法匿情,你需要:

  • 修改區(qū)塊
    計算這條記錄在Merkle樹上所經(jīng)路徑的所有特征碼兰迫,以5條記錄中第1條記錄被修改為例:
    修改路徑

上圖中紅色字體部分是修改【交易記錄1】而引起重算的所有特征碼。這里只是以5條記錄為例炬称,實際上汁果,目前一個區(qū)塊(1M)中依交易記錄大小的不同有可能會存放3000~4000條記錄。

  • 修改鏈
    上面只是區(qū)塊內(nèi)的變化玲躯,由于總特征碼(Merkle Hash)變了据德,這會使得區(qū)塊Hash變化,而區(qū)塊Hash變化府蔗,意味著子區(qū)塊中的“父區(qū)塊Hash”的值變化晋控,導致子區(qū)塊的區(qū)塊Hash變化,如此產(chǎn)生級聯(lián)效應姓赤,引起這條鏈上被修改區(qū)塊之后的所有區(qū)塊Hash都需要重算并改寫:

    級聯(lián)修改

  • 全網(wǎng)認可
    前面的修改成本就已經(jīng)很大了赡译,但是想要你的修改被全網(wǎng)認可,那么你需要擁有全網(wǎng)51%以上的算力才可能實現(xiàn)不铆。

挖礦

挖礦蝌焚,這個名詞用在軟件系統(tǒng)中似乎讓人有些摸不著頭腦。其實它是指按照比特幣特定規(guī)則計算出指定區(qū)塊的區(qū)塊Hash的過程誓斥,新的區(qū)塊只有在計算出區(qū)塊Hash才能放上鏈并被全網(wǎng)認可只洒。但是,這個過程跟挖礦有什么關(guān)系呢劳坑?為什么會被稱為“挖礦”呢毕谴?這得從區(qū)塊Hash的計算過程說起。

  • 區(qū)塊頭結(jié)構(gòu)
    之前為了便于理解距芬,區(qū)塊頭我只給出了[父區(qū)塊Hash]和[Merkle Hash],下面我們看一下完整的區(qū)塊頭結(jié)構(gòu):
    區(qū)塊頭結(jié)構(gòu)
  • 難度目標和Nonce
    我們已經(jīng)知道涝开,區(qū)塊Hash就是計算出的區(qū)塊頭的Hash。但是在比特幣的設(shè)計中人為的為區(qū)塊Hash的計算設(shè)置了難度框仔,使得區(qū)塊Hash必須通過千百萬次的反復計算才能得到舀武。只有了解了這個計算過程,才會對比特幣的不可篡改性有更清楚的了解离斩。

    • 難度目標银舱,其實是一個數(shù)值,把它轉(zhuǎn)換為16進制時跛梗,應該像下面這樣:
      00000000000000000285ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
      而我們計算出的區(qū)塊Hash往往是這樣:
      c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e
      注意:這兩個數(shù)值長度相同寻馏,而難度目標是以17個0開始的,意味著它遠比前面這個區(qū)塊Hash要小茄袖,而難度目標的意思是操软,你算出的區(qū)塊Hash值必須小于難度目標。區(qū)塊頭中的各項數(shù)據(jù)的值都是固定的(除了Nonce)宪祥,而相同的數(shù)據(jù)只能得到同一個Hash,那么聰明的你可能已經(jīng)意識到聂薪,要使得區(qū)塊Hash變化家乘,就需要改變Nonce的值。
    • Nonce藏澳,是一個計數(shù)器仁锯。我們不斷的變化Nonce,使得計算出的區(qū)塊Hash不斷變化翔悠,直到有一個區(qū)塊Hash小于難度目標业崖。想要得到一個以17個0開始的Hash值可能需要千萬次甚至億萬次的試錯,而要得到小于難度目標的值更是難上加難蓄愁。這就好像挖金礦一樣双炕,不斷挖不斷挖,直到挖出你想要的那粒金子來撮抓。

    難度目標也不是一塵不變的妇斤,它會根據(jù)全網(wǎng)算力,將算出一個區(qū)塊Hash的平均時間控制在10分鐘左右丹拯。隨著時間推移站超,挖礦人數(shù)和計算機性能都會不斷的提高,為了把新區(qū)塊的產(chǎn)生時間控制在10分鐘左右乖酬,相應的挖礦難度也會不斷增加死相,也就是不斷減小難度目標,增加難度目標前面的0咬像。

修改交易記錄的巨大成本+挖礦難度的限制算撮,想要篡改數(shù)據(jù)?呵呵县昂,你試試看……钮惠,:-)

礦工、挖礦獎勵及交易費

  • 礦工
    在區(qū)塊鏈中挖礦確實是會挖到“金子”的七芭,這“金子”就是挖礦獎勵和交易費。所以才會有那么那么多人爭先恐后的在區(qū)塊鏈上挖礦蔑赘,這些探礦的人被稱為礦工狸驳。
    礦工工作是驗證每一筆新創(chuàng)建的交易記錄,并把它們打包進區(qū)塊缩赛,然后計算出符合難度目標的區(qū)塊Hash值耙箍。這個過程有所有礦工在同時進行的,第一個計算出區(qū)塊Hash礦工會將新區(qū)塊添加到區(qū)塊鏈上并全網(wǎng)廣播酥馍,同時也將獲得挖礦獎勵和交易費辩昆。
  • 挖礦獎勵
    系統(tǒng)獎勵給礦工的比特幣,這也是比特幣產(chǎn)生的來源旨袒,比特幣就是通過挖礦獎勵進入比特幣市場流通的汁针。
    比特幣總量被限制為約2100萬個比特幣术辐,初始挖礦獎勵為每個區(qū)塊50個比特幣,以后每4年減半,現(xiàn)在(2018年施无,自2016始)挖礦獎勵為每個區(qū)塊12.5個比特幣辉词。最終所有比特幣發(fā)完后,礦工將只能通過交易費獲取收益猾骡。
  • 交易費
    相當于比特幣交易者給礦工的小費瑞躺,交易費高的交易記錄往往會被礦工優(yōu)先打包進區(qū)塊。交易費低的或者沒有交易費的會被推遲打包兴想,甚至有可能不會被打包幢哨,交易信息也就不會得到確認,也就意味著這筆交易不被認可嫂便。

重申

本文僅是面向于小白的對比特幣和區(qū)塊鏈基本概念和原理的小白化說明捞镰,很多描述并不嚴謹,如果你想了解更專業(yè)的相關(guān)知識顽悼,可以參考精通比特幣這本書曼振。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔚龙,隨后出現(xiàn)的幾起案子冰评,更是在濱河造成了極大的恐慌,老刑警劉巖木羹,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甲雅,死亡現(xiàn)場離奇詭異,居然都是意外死亡坑填,警方通過查閱死者的電腦和手機抛人,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脐瑰,“玉大人妖枚,你說我怎么就攤上這事〔栽冢” “怎么了绝页?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寂恬。 經(jīng)常有香客問我续誉,道長,這世上最難降的妖魔是什么初肉? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任酷鸦,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臼隔。我一直安慰自己嘹裂,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布躬翁。 她就那樣靜靜地躺著焦蘑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盒发。 梳的紋絲不亂的頭發(fā)上例嘱,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音宁舰,去河邊找鬼拼卵。 笑死,一個胖子當著我的面吹牛蛮艰,可吹牛的內(nèi)容都是我干的腋腮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼壤蚜,長吁一口氣:“原來是場噩夢啊……” “哼即寡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袜刷,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤聪富,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后著蟹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墩蔓,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年萧豆,在試婚紗的時候發(fā)現(xiàn)自己被綠了奸披。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡涮雷,死狀恐怖阵面,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洪鸭,我是刑警寧澤膜钓,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站卿嘲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夫壁。R本人自食惡果不足惜拾枣,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梅肤,春花似錦司蔬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至左医,卻和暖如春授帕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浮梢。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工跛十, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秕硝。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓芥映,卻偏偏與公主長得像,于是被迫代替她去往敵國和親远豺。 傳聞我的和親對象是個殘疾皇子奈偏,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 一、快速術(shù)語檢索 比特幣地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如閱讀 15,887評論 4 88
  • 1 貨幣的演變——從貝殼到比特幣 當社會分工產(chǎn)生之后躯护,人類就產(chǎn)生了商品交換的需求惊来。在貨幣被發(fā)明之前,人類是以以物換...
    longlee閱讀 7,607評論 1 23
  • 足夠冷的肅殺 不識途的嘈雜 畢竟相愛一場 何必離開 帶著傷 聽人說 你有了新的愛人 足夠甜蜜 我擁你 還我深深的吻...
    信言不美閱讀 161評論 0 1
  • 屏幕旋轉(zhuǎn)在播放器全屏榛做,轉(zhuǎn)屏的時候再次遇到唁盏。其實一些很簡單的意思一開始有點糊涂,再總結(jié)下检眯。網(wǎng)上的講解也很多:iOS屏...
    Liusr閱讀 3,883評論 0 2
  • 陽朔 小龍女 2017.10.24 下午3:04 發(fā)現(xiàn) 昨晚寫完給航航的認可五段論就睡不著了厘擂!怎么寫了那么多那么長...
    龍之蹊閱讀 119評論 0 0