最近bitcoin很火,我也是最先從云風那里了解到的,,后來發(fā)現(xiàn)李笑來&霍炬對其都有涉及,。不過他們對其具體技術(shù)原理的描述還是不夠細致,,所以我自己把bitcoin wiki又重新看了一遍。 看完之后,,疑惑挺多,,我對這個體系遠沒有前面三位這么樂觀。誠然,,它會成為"Geeks "手中的玩物甚至灰色交易的工具,,但要說的達到「一出天下反」的程度,那還需要解決一些技術(shù)和金融方面的問題,。 這里先談技術(shù)原理,,技術(shù)和金融缺陷見下一篇bitcoin的技術(shù)和金融缺陷。要想了解bitcoin的技術(shù)原理,,首先需要了解兩個重要的密碼技術(shù):
和現(xiàn)金,、銀行賬戶的區(qū)別? bitcoin為電子貨幣,,單位為BTC,。在這篇文章里也用來指代整個bitcoin系統(tǒng)。 和在銀行開立賬戶一樣,,bitcoin里的對應(yīng)概念為地址,。每個人都可以有1個或若干個bitcoin地址,該地址用來付賬和收錢,。每個地址都是一串以1開頭的字符串,比如我有兩個bitcoin賬戶,1911HhKdLbnsffT5cRSiHgK3mdzMiyspXf和1JSUzrzMk7f6iymfVkvqLBJDBZXBopyfZK,。一個bitcoin賬戶由一對公鑰和私鑰唯一確定,,要保存賬戶,只需要保存好私鑰文件即可,。 和銀行賬戶不一樣的地方在于,,銀行會保存所有的交易記錄和維護各個賬戶的賬面余額,而bitcoin的交易記錄則由整個P2P網(wǎng)絡(luò)通過事先約定的協(xié)議共同維護,。 我的賬戶地址里到底有多少錢,? 雖然使用bitcoin的軟件可以看到當前賬戶的余額,但和銀行不一樣,,并沒有一個地方維護每個地址的賬面余額,。它只能通過所有歷史交易記錄去實時推算賬戶余額。 我如何付賬,? 當我從地址A向?qū)Ψ降牡刂稡付賬時,,付賬額為e,此時雙方將向各個網(wǎng)絡(luò)節(jié)點公告交易信息,,告訴地址A向地址B付賬,,付賬額為e。為了防止有第三方偽造該交易信息,,該交易信息將使用地址A的私鑰進行加密,,此時接受到該交易信息的網(wǎng)絡(luò)節(jié)點可以使用地址A的公鑰進行驗證該交易信息的確由A發(fā)出。當然交易軟件會幫我們做這些事情,,我們只需要在軟件中輸入相關(guān)參數(shù)即可,。 網(wǎng)絡(luò)節(jié)點后收到交易信息后會做什么? 這個是整個bitcoin系統(tǒng)里最重要的部分,,需要詳細闡述,。為了簡單起見,這里只使用目前已經(jīng)實現(xiàn)的bitcoin協(xié)議,,在當前版本中,,每個網(wǎng)絡(luò)節(jié)點都會通過同步保存所有的交易信息。 歷史上發(fā)生過的所有交易信息分為兩類,,一類為"驗證過"的交易信息,,即已經(jīng)被驗證過的交易信息,它保存在一連串的「blocks」里面,。每個"block"的信息為前一個"bock"的ID(每個block的ID為該block的HASH碼的HASH碼)和新增的交易信息(參見一個實際的block),。另外一類指那些還"未驗證"的交易信息,上面剛剛付賬的交易信息就屬于此類,。 當一個網(wǎng)絡(luò)節(jié)點接收到新的未驗證的交易信息之后(可能不止一條),,由于該節(jié)點保存了歷史上所有的交易信息,,它可以推算中在當時每個地址的賬面余額,從而可以推算出該交易信息是否有效,,即付款的賬戶里是否有足夠余額,。在剔除掉無效的交易信息后,它首先取出最后一個"block"的ID,,然后將這些未驗證的交易信息和該ID組合在一起,,再加上一個驗證碼,形成一個新的「block」,。 上面構(gòu)建一個新的block需要大量的計算工作,,因為它需要計算驗證碼,使得上面的組合成為一個block,,即該block的HASH碼的HASH碼的前若干位為1,。目前需要前13位為1(大致如此,不確定具體方式),,此意味著如果通過枚舉法生成block的話,,平均枚舉次數(shù)為16^13次。使用CPU資源生成block被稱為「挖金礦」,,因為生產(chǎn)該block將得到一定的獎勵,,該獎勵信息已經(jīng)被包含在這個block里面。 當一個網(wǎng)絡(luò)節(jié)點生成一個新的block時,,它將廣播給其它的網(wǎng)絡(luò)節(jié)點,。但這個網(wǎng)絡(luò)block并不一定會被網(wǎng)絡(luò)接受,因為有可能有別的網(wǎng)絡(luò)節(jié)點更早生產(chǎn)出了block,,只有最早產(chǎn)生的那個block或者后續(xù)block最多的那個block有效,,其余block不再作為下一個block的初始block。 對方如何確認支付成功,? 當該筆支付信息分發(fā)到網(wǎng)絡(luò)節(jié)點后,,網(wǎng)絡(luò)節(jié)點開始計算該交易是否有效(即賬戶余額是否足夠支付),并試圖生成包含該筆交易信息的blocks,。當累計有6個blocks(1個直接blocks和5個后續(xù)blocks)包含該筆交易信息時,,該交易信息被認為「驗證過」,從而該交易被正式確認,,對方可確認支付成功,。 一個可能的問題為,我將地址A里面的余額都支付給地址B,,同時又支付給地址C,,如果只驗證單比交易都是有效的。此時,,我的作弊的方式為在真相大白之前產(chǎn)生6個僅包括B的block發(fā)給B,,以及產(chǎn)生6個僅包含C的block發(fā)給C,。由于我產(chǎn)生block所需要的CPU時間非常長,與全網(wǎng)絡(luò)相比,,我這樣作弊成功的概率微乎其微,。 網(wǎng)絡(luò)節(jié)點生產(chǎn)block的動機是什么? 從上面描述可以看出,,為了讓交易信息有效,需要網(wǎng)絡(luò)節(jié)點生成1個和5個后續(xù)block包含該交易信息,,并且這樣的block生成非常耗費CPU,。那怎么樣讓其它網(wǎng)絡(luò)節(jié)點盡快幫忙生產(chǎn)block呢?答案很簡單,,協(xié)議規(guī)定對生產(chǎn)出block的地址獎勵BTC,,以及交易雙方承諾的手續(xù)費。目前生產(chǎn)出一個block的獎勵為50BTC,,未來每隔四年減半,,比如2013年到2016年之間獎勵為25BTC。 交易是匿名的嗎,? 是,,也不是。所有BITCOIN的交易都是可見的,,我們可以查到每個賬戶的所有交易記錄,,比如我的。但與銀行貨幣體系不一樣的地方在于,,每個人的賬戶本身是匿名的,,并且每個人可以開很多個賬戶??偟恼f來,,所謂的匿名性沒有宣稱的那么好。 但bitcoin用來做黑市交易的還有一個好處,,它無法凍結(jié),。即便警方追蹤到了某個bitcoin地址,除非根據(jù)網(wǎng)絡(luò)地址追蹤到交易所使用的電腦,,否則還是毫無辦法,。 如何保證bitcoin不貶值? 一般來說,,在交易活動相當?shù)那闆r下,,貨幣的價值反比于貨幣的發(fā)行量。不像傳統(tǒng)貨幣市場,,央行可以決定貨幣發(fā)行量,,bitcoin里沒有一個中央的發(fā)行機構(gòu),。只有通過生產(chǎn)block,才能獲得一定數(shù)量的BTC貨幣,。所以bitcoin貨幣新增量決定于: 1,、生產(chǎn)block的速度:bitcoin的協(xié)議里規(guī)定了生產(chǎn)block的難度固定在平均2016個每兩個星期,大約10分鐘生產(chǎn)一個,。CPU速度每18個月速度加倍的摩爾定律,,并不會加快生產(chǎn)block的速度。 2,、生產(chǎn)block的獎勵數(shù)量:目前每生產(chǎn)一個block獎勵50BTC,,每四年減半,2013年開始獎勵25BTC,,2017年開始獎勵額為12.5BTC,。 綜合上面兩個因素,bitcoin貨幣發(fā)行速度并不由網(wǎng)絡(luò)節(jié)點中任何單個節(jié)點所控制,,其協(xié)議使得貨幣的存量是事先已知的,,并且最高存量只有2100萬BTC(目前每周增加約5萬BTC) 更多信息可參考bitcoin wiki。 |
|