比特幣概念由中本聰2009年提出,是一種P2P形式的數(shù)字貨幣朴艰,點對點的傳輸意味著一個去中心化的支付系統(tǒng)呵晚。
比特幣核心技術(shù)是區(qū)塊鏈技術(shù),這是一種全新的思想撮珠,這種技術(shù)建立于一個缺乏信任的通訊網(wǎng)絡(luò)當(dāng)中如何構(gòu)建一個去中心化的交易模式芯急。
現(xiàn)在我們社會交易都離不開貨幣驶俊,我國使用的是人民幣進(jìn)行交易饼酿,然后支付寶和微信支持電子貨幣,其中有一個共同特點就是想鹰,這些貨幣都會有一個中間的監(jiān)管平臺負(fù)責(zé)管理整個平臺的貨幣管理辑舷。比如支付寶后臺負(fù)責(zé)貨幣的消費槽片、充值以及轉(zhuǎn)賬还栓。試想一下,如果說一個沒有信任的環(huán)境下氓皱,人們是否會去相信這樣的一個中間的平臺來管理自己的財產(chǎn)。在支付寶剛剛上線的時候股淡,用戶量為0的時候唯灵,是什么讓用戶愿意把自己的錢投入到支付寶的平臺上的?其中最重的就是信任關(guān)系網(wǎng)絡(luò)垢揩,支付寶不僅僅是支付寶叁巨,它建立了一個人們普遍能接受的信用體系,以此為依托才有了淘寶和之后的其它產(chǎn)品蚀瘸。
那么對于在一個缺乏信任的網(wǎng)絡(luò)上的節(jié)點來說贮勃,如果某一個匿名告訴你苏章,它有一個安全的支付平臺枫绅,你可以把自己的資金轉(zhuǎn)入,然后能在任何一個地方消費棵譬,是否會相信订咸?注意重點在于網(wǎng)絡(luò)節(jié)點之間缺乏信任酬诀,這表現(xiàn)在你看到的ip可能并不是他的真實ip瞒御,你很難根據(jù)現(xiàn)有的信息找到這個節(jié)點的具體位置,對方提供的信息你也無法保證真實性趾唱√瘃可以想象宛乃,很難在這樣的環(huán)境中建立一個安全的中間平臺負(fù)責(zé)交易。
那么區(qū)塊鏈技術(shù)如何解決呢躬贡?區(qū)塊鏈技術(shù)利用了一個龐大的節(jié)點網(wǎng)絡(luò)的大部分節(jié)點的共同承認(rèn)某一個事件為真來承認(rèn)該事件來解決信任問題拂玻,也就是說空骚,如果對于某一個計算結(jié)果,如果網(wǎng)絡(luò)中的大部分節(jié)點都認(rèn)為這個結(jié)果為真熬甚,那么這個結(jié)果就被所有人承認(rèn)了乡括;那么接下來總結(jié)一下基于這種模式設(shè)計的比特幣更細(xì)節(jié)的原理:
區(qū)塊鏈?zhǔn)潜忍貛诺慕灰子涗浀馁~本诲泌,每一個想要使用比特幣交易網(wǎng)絡(luò)的用戶首先需要注冊一個賬戶铣鹏,這個賬戶是一個使用非對稱加密技術(shù)得到的兩把“鑰匙”,一個是公鑰葵第,類似于用戶名卒密,一個是私鑰棠赛,類似于密碼睛约,公鑰可以計算出賬戶的地址,私鑰可以計算出公鑰而芥,但是不能反過來棍丐,在一筆交易中需要有比特幣的轉(zhuǎn)出地址和轉(zhuǎn)入地址以及交易數(shù)量沧踏;
區(qū)塊鏈的鏈?zhǔn)侨绾涡纬傻哪厣倭海棵恳粔K區(qū)塊由區(qū)塊頭和交易信息組成褥芒,區(qū)塊頭中保存了上一個區(qū)塊的hash值捺宗,這樣就形成了一個鏈?zhǔn)降慕Y(jié)構(gòu)被因,在一個已經(jīng)形成的鏈里邊,如果要修改其中一個鏈的結(jié)果凰锡,那就需要修改這個區(qū)塊以及之后的所有區(qū)塊內(nèi)容掂为,并且還需要取得其他大部分節(jié)點的承認(rèn),在高額的計算成本之下昼扛,這種情況是不可能被實現(xiàn)的抄谐,因此可以實現(xiàn)數(shù)據(jù)的唯一性瞧栗。
注意這種情況的前提是前一塊區(qū)塊中任何一個數(shù)據(jù)的修改都會使其hash值發(fā)生變化,這表示如何設(shè)計一個hash函數(shù)讓區(qū)塊的數(shù)據(jù)具有“唯一性指紋”非常重要挣惰,并且這也是區(qū)塊鏈安全的前提保證憎茂。
比特幣采用的SHA256加密算法保證了數(shù)據(jù)的“唯一性”竖幔,并且不會被反向解析是偷,也就是說不能通過hash值計算出數(shù)據(jù)募逞。
在這樣的前提下,我們可以建立一個安全的鏈?zhǔn)浇Y(jié)構(gòu)留特,這個鏈?zhǔn)浇Y(jié)構(gòu)中后一個通過hash值指向前一個,并且基于hash值保證了結(jié)構(gòu)的唯一性苟蹈,那么右核,如何在這個結(jié)構(gòu)當(dāng)中存儲數(shù)據(jù)呢蒙兰?
區(qū)塊由區(qū)塊頭和交易信息組成,交易信息里保存的就是交易的數(shù)據(jù)搜变,包括每一筆交易的轉(zhuǎn)出轉(zhuǎn)入地址挠他,后邊討論更多的細(xì)節(jié)問題。
然后區(qū)塊鏈自身的hash值通過自身擁有的全部數(shù)據(jù)計算出來贸呢,也就是說包括前一個節(jié)點的hash拢军,本身的交易記錄等等,一旦有人想修改某一個節(jié)點的交易記錄就會導(dǎo)致該節(jié)點的hash值變化然后不被后邊的節(jié)點所承認(rèn)固蛾。
在上邊的描述中艾凯,建立了一個安全的可以保存交易數(shù)據(jù)的區(qū)塊鏈懂傀,那么交易由誰來負(fù)責(zé)記錄,交易的貨幣—比特幣又從何而來恃泪?
在上邊的描述中我們可以知道,如果我們需要加入一個新的節(jié)點杈笔,那么我們需要獲取最新的區(qū)塊鏈hash值糕非,這個很容易查到朽肥,然后是獲取當(dāng)前區(qū)塊鏈網(wǎng)絡(luò)中的交易記錄衡招,這個通過P2P網(wǎng)絡(luò)可以獲得每强,然后組裝出一個新的區(qū)塊,并在區(qū)塊鏈網(wǎng)絡(luò)中進(jìn)行廣播浪箭,然后其他的節(jié)點同步奶栖。這里就有很多的細(xì)節(jié)問題了门坷,為什么一個節(jié)點要幫助區(qū)塊鏈生成新的區(qū)塊?如何解決多個節(jié)點同時生成區(qū)塊的問題冻晤?
首先鼻弧,為什么一個節(jié)點需要消耗自己的資源去為區(qū)塊鏈計算新的節(jié)點温数?這就是獎勵機制蜻势,也是比特幣最初的來源的地方,比特幣剛剛發(fā)行的時候規(guī)定每個區(qū)塊的記錄者可以獲得50個比特幣的獎勵够傍,,在交易記錄的第一個記錄中保存這個特殊的交易寂诱,叫做coinbase交易安聘;然后是記錄網(wǎng)絡(luò)中尚未被記錄的其他交易,形成一個新的區(qū)塊丘喻,這里還需要保證的是每個區(qū)塊的大小不能超過1M泉粉,現(xiàn)在平均一個區(qū)塊中會保存500筆交易記錄榴芳。
第二個問題,如何解決多個節(jié)點同時生成的最新區(qū)塊讨彼?因為獎勵機制的存在肌括,很多節(jié)點都會去競爭這個記錄者,這就會導(dǎo)致可能會出現(xiàn)多個區(qū)塊黑滴;比特幣使用工作量證明的方式來解決問題袁辈,因為每個數(shù)據(jù)塊都會根據(jù)自己的數(shù)據(jù)生成自己的數(shù)據(jù)指紋珠漂,在區(qū)塊中加入一個nonce字段媳危,用來存放一個隨機數(shù),然后根據(jù)變化這個隨機數(shù)使得區(qū)塊可以生成不同的數(shù)字指紋鸣皂,然后再加入一個難度字段寞缝,表示生成的數(shù)字指紋必須滿足某種條件才算合理,這樣的話在難度設(shè)置合理的情況下滩届,就可以從概率上降低在同一時間同時出現(xiàn)兩個區(qū)塊的情況帜消。比特幣要求計算出來的數(shù)字指紋滿足前n個值為0券犁,可以想象在hash函數(shù)生成值沒有規(guī)律的情況下汹碱,n越大咳促,計算難度也就越大跪腹,這樣的話每個節(jié)點如果想要獲得獎勵冲茸,就需要去枚舉這個nonce值以生成滿足條件的hash值缅帘,然后組裝出新的區(qū)塊,并廣播逗栽,直到大部分人都承認(rèn)了之后這個節(jié)點就被加入了區(qū)塊中彼宠。
如今的區(qū)塊數(shù)據(jù)總量已經(jīng)有80多G弟塞,也就是說如果你要加入這個挖礦網(wǎng)絡(luò)中决记,你需要先下載一個80G的電子賬本。
那么節(jié)點之間如何解決廣播的問題呢惭适?由于區(qū)塊鏈網(wǎng)絡(luò)是一個P2P網(wǎng)絡(luò)癞志,因此沒有一個固定的中間轉(zhuǎn)發(fā)服務(wù)器來轉(zhuǎn)發(fā)數(shù)據(jù)凄杯;比特幣這里使用的是DNS服務(wù)器秉宿,通過向DNS服務(wù)器發(fā)起查詢可以得到ip地址然后實現(xiàn)數(shù)據(jù)廣播描睦。
1 #!/usr/bin/python
2
3 import socket
4 import json
5
6 if __name__ == '__main__':
7 nodes = socket.getaddrinfo("seed.bitcoin.sipa.be", None)
8 print json.dumps(nodes, indent=2)
這個代碼可以通過向DNS服務(wù)器發(fā)起查詢找到ip地址列表,在比特幣客戶端中隔崎,DNS服務(wù)器是寫死在代碼中并且有專門的人進(jìn)行維護(hù)的爵卒。
在比特幣最開始的設(shè)計當(dāng)中撵彻,最開始每一筆交易獎勵50個比特幣陌僵,然后每210000個區(qū)塊之后轴合,獎勵數(shù)額減半,可以計算出比特幣的總量是有限的拾弃,不會超過2100w值桩,這樣種總量上限不變的特性,導(dǎo)致比特幣有了一些特別的屬性豪椿,比如收藏屬性奔坟。那么在比特幣挖礦達(dá)到上限之后,挖礦沒有來收入來源搭盾,礦工退出導(dǎo)致網(wǎng)絡(luò)節(jié)點的下降咳秉,比特幣又怎么辦呢?其實礦工的收入不僅僅是記錄區(qū)塊時的獎勵鸯隅,還有為別人記錄賬單的手續(xù)費澜建;因為每一個區(qū)塊大小的限制導(dǎo)致不能保存過多的交易記錄向挖,那么如果交易記錄過多何之,記錄著如何選擇呢?這里交易對象可以在交易記錄中放置一份小費蒜危,記錄者根據(jù)小費選擇交易記錄進(jìn)行存儲,因此礦工會有一筆額外的收入,自然小費越高,就會越快地被保存在區(qū)塊中崔兴。
因為去中心化的緣故位谋,導(dǎo)致沒有任何機構(gòu)可以監(jiān)管貨幣的交易過程,因此很多不法分子利用比特幣作為交易貨幣,再加上比特幣通縮性的性質(zhì),導(dǎo)致比特幣在一段時間內(nèi)價值持續(xù)升高饱岸。但是當(dāng)獎勵趨近于零的時候百框,如何維持節(jié)點數(shù)量保持網(wǎng)絡(luò)的穩(wěn)定,我認(rèn)為這是一個需要考慮的問題聂抢,另外就是現(xiàn)在的賬本太大闸拿,導(dǎo)致一個普通用戶想要進(jìn)入網(wǎng)絡(luò)中需要承擔(dān)的成本也會比較大。
但是,比特幣給我們帶來的不僅僅是比特幣俐筋,我們應(yīng)該更多的在意區(qū)塊鏈這個技術(shù),它在一個復(fù)雜并且不受信的網(wǎng)絡(luò)環(huán)境中建立了一個去中心化的信用機制,我們?nèi)绾卫眠@個技術(shù)去實現(xiàn)更多的產(chǎn)品以及謀求更大的利益,這才是應(yīng)該考慮的屈留。