比特幣相關資源

TuxedoLinux發表於2018-05-19
分叉問題聽誰的?
  在這一段的論述中,我們引用了知乎使用者“汪樂–LaiW3n”的說法。在這個廣闊的小城市裡,一定還會存在這樣的問題,B和C幾乎同時記錄完了,於是同時向天空大喊了一聲,“這個編號89757的巴拉拉能量歸我了”。但是,由於這個城市太廣闊了,有的人會認為這個編號89757的巴拉拉能量歸B,也有的人認為這個編號89757的巴拉拉能量歸C,但是編號89757的巴拉拉能量只有一個啊,只有一個人能得到,怎麼辦呢?一人一半?當然是不可能的,這個時候我們會採用更原始簡單的規則來解決,誰長聽誰的。
  在不加任何限制條件的情況下,這件事件會發展成這樣:一部分人認為這句話是B說的,在聽到這句話之後開始記賬,之後他們所做的所有事情都是基於B有了編號89757的巴拉拉能量這個事實,並且隨著這個資訊一次次地傳下去,這條資訊鏈會越來越長;而另外一群認為C先說這句話的人,也會按照這樣的趨勢發展。
分叉問題聽誰的?

  這下事情嚴重了,原本是一條唯一的、編號順序嚴謹的總資訊鏈,在B和C喊出“這個編號89757的巴拉拉能量歸我了”這句話之後,硬生生地分叉了!這還得了,要是這種情況延續下去,每個人手裡的賬本都變得不一樣了,而且根本沒法確定哪個是真的!
  為了解決這個問題,小城市又追加了新的區塊鏈規則,記錄的時候必須頂格寫,而且要保證,中心在離田字格上邊緣0.89757毫米的位置上,於是,每個人寫字的時候都要拿刻度尺量好之後再寫,這非常困難,每個人的記錄需要5分鐘才能完成,因此,寫這句話所用的時間變得不同了。於是,只要有人高喊“我寫完了!那句話是某某某寫的”,其他正在寫這句話的人便會停筆,然後在小本子上重新開始寫“那句話是某某某寫的,上一句的編號是×××”。
每次記賬的規則都很複雜

問題三:雙花問題
  雙花問題是指一筆數字現金在交易中被重複使用的現象。
  如果我同時向B和C都喊了一句,我給你一個巴拉拉能量,怎麼辦呢?巴拉拉能量只有一個,如何保證一個巴拉拉能量在實際的交易中只被支付了一次呢?
  我們以比特幣為例,中本聰在《比特幣白皮書》第五小節中是這樣說的,執行比特幣網路的步驟如下:
  1.新的交易向全網進行廣播;
  2.每一個節點都將收到的交易資訊納入一個區塊中;
  3.每個節點都嘗試在自己的區塊中找到一個具有足夠難度的工作量證明;
  4.當一個節點找到了一個工作量證明,它就向全網進行廣播;
  5.當且僅當包含在該區塊中的所有交易都是有效的且之前未存在過的,其他節點才認同該區塊的有效性;
  6.其他節點表示他們接受該區塊,而接受的方法則是跟隨在該區塊的末尾,製造新的區塊以延長該鏈條,並將該區塊的隨機雜湊值視為新區塊的隨機雜湊值。
  也就是說,交易發生的一刻起,比特幣的交易資料就被蓋上了時間戳;而當這筆交易資料被打包到一個區塊中後,就算完成了一次確認;在連續進行6次確認之後,這筆交易就不可逆轉了;在比特幣中,每一次確認都需要“解決一個複雜的難題”,也就是說每一次確認都需要一定的時間。

.資料區塊

  比特幣的交易記錄會儲存在資料區塊之中,比特幣系統中大約每10分鐘會產生一個區塊,每個資料區塊一般包含區塊頭(Header)和區塊體(Body)兩部分,如圖所示:


區塊結構

  區塊頭包含的資訊就像我們寫日記的時候每頁的頁碼、日期等等資訊類似。區塊體中則主要包含交易計數和交易詳情,就相當於我們日記本中的內容一樣。我們平常下載的資料主要就是區塊體的資料。

2.挖礦與分叉問題

  區塊在挖礦過程中產生。所謂挖礦,實際上是窮舉隨機數演算法,把上個區塊的雜湊值加上10分鐘內的全部交易單打包,再加上一個隨機數,算出一個256位的字串雜湊值,輸入的隨機數Nonce使雜湊值滿足一定條件就獲得這個區塊的交易記賬權。新產生的區塊需要快速廣播出去,以便其他節點進行對其驗證,以防造假。

  每個區塊存著上一個區塊的雜湊值,可以溯源到源頭,只有經過驗證後才最終獲得區塊的交易記賬權。比特幣系統會讓挖礦的礦工競爭記賬權(在主鏈上鍊接區塊的權利),這個競爭機制就是工作量證明機制。挖礦需要付出大量的能源和時間,誰付出的工作量多就能以更大的概率獲得一個區塊的記賬權。獲取記賬權的礦工會將當前區塊連結到前一區塊,形成最新的區塊主鏈,該礦工也會得到系統獎勵的一定數量(2009~2013年每10鍾產生50個比特幣,2014年至今每10分鐘產生的比特幣將減半成25個)的比特幣。所有的區塊連結在一起形成了區塊鏈的主鏈,從創世區塊到當前區塊,在區塊鏈之上的所有資料歷史都可以被追溯和查詢。

  需要說明的是,可能會出現不同地區的兩個礦工同時“挖出”兩個新區塊加以連結的情況,這時主鏈上就會出現“分叉”。系統並不會馬上確認哪個區塊不合理,而是約定後續礦工總是選擇累計工作量證明最大的區塊鏈。因此,當主鏈分叉以後,後續區塊的礦工將通過計算和比較,將其區塊連結到當前累計工作量證明最大化的備選鏈上,形成更長的新主鏈,並自動拋棄分叉處的短鏈,從而解決分叉問題。

3.時間戳和不可篡改性

  時間戳是指從格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數,通常是一個字元序列,唯一地標識某一刻的時間。在比特幣系統中,獲得記賬權的節點在連結區塊時需要在區塊頭中加蓋時間戳,用於記錄當前區塊資料的寫入時間。每一個隨後區塊中的時間戳都會對前一個時間戳進行增強,形成一個時間遞增的鏈條。時間戳技術本身並沒有多複雜,但在區塊鏈技術中應用時間戳卻是一個重大創新,時間戳為未來基於區塊鏈的網際網路和大資料增加了一個時間維度,使得資料更容易追溯,重現歷史也成為可能。同時,時間戳可以作為存在性證明(Proof ofExistence)的重要引數,它能夠證實特定資料必然在某特定時刻是的確存在的,這保證了區塊鏈資料庫是不可篡改和不可偽造的,這也為區塊鏈技術應用於公證、智慧財產權註冊等時間敏感領域提供了可能。


針對以上技術棧,蒐羅收錄了一些相關的資料整理如下:

一、比特幣相關資源

1.《比特幣白皮書》網址瀏覽
2.【比特幣原始碼下載】《比特幣白皮書下載》
3.《精通比特幣》
講比特幣很詳細的一本書,看完基本對比特幣的認識就清楚了。
4.《TheProof-of-Work Concept》PoW機制理論介紹,英文
5.《比特幣的原理及運作機制》適合向圈外人介紹什麼是比特幣什麼是區塊鏈。
6.《比特幣pow難度調節機制》PoW的難度調節是一個要點,一篇簡介

二、區塊鏈

1.《區塊鏈技術指南》網頁線上電子書,對區塊鏈技術講解得非常全面
2.【csdn的blockchain知識庫】
3.【區塊鏈可應用場景】應用場景探討,布萌社群下的一篇帖子
4.【汪曉明對區塊鏈、以太坊的思考】
汪曉明作為朝夕網路CEO,區塊鏈技術的推廣者和佈道者,參與並製作了區塊鏈視訊節目《明說》,向開源技術大牛學習。

三、以太坊

1.《以太坊白皮書英文版》
2.《以太坊黃皮書》介紹以太坊原理的論文,文長慎入
3.【以太坊常見問題】以上三篇都是外文資源
4.【Solidity語言】Solidity語言的文件,還是英文。極客學院翻譯了一檔勉強湊合的doc,http://wiki.jikexueyuan.com/project/solidity-zh/
7.《以太坊智慧合約程式設計之菜鳥教程》以太坊中文網站出的
8.通過truffle部署以太坊智慧合約
9.Truffle 3.0部署智慧合約至Ethereum節點
10.以太坊智慧合約編寫例項
11.以太坊智慧合約編寫例項2
12.在CentOS6.5上搭建以太坊私有鏈

四、Hyperledger fabric

1.《Hyperledger Fabric V1.0– 開發者快速入門》萬達網路研究中心副總季宙棟寫的開發者入門指南,這檔知乎專欄可以訂閱。
2.【Hyperledger 原始碼分析之 Fabric】原始碼分析,感興趣研究的同學可以看看
3.【Hyperledgerfablic 1.0 在centos7環境下的安裝與部署和動態增加節點】csdn上的一篇技術帖
4.【fabric原始碼搭建】託管在github上的doc說明,純英文。
5.《Hyperledger Fabric1.0架構概覽》
6.《fabric中文文件》
7.【Ubuntu中使用 Docker 部署 HyperledgerFabric】學好docker很重要

五、布萌

1.布萌接入指南
布萌官方的指南有些模糊,個人整理了一版出來僅供參考
2.布萌API文件
3.布萌SDK文件
兩個官方文件,其實官網就有,順手列在這了:D
4.布萌PHP SDK
今天看到有朋友放出的PHP的SDK,膜拜大神

六、其他

1.《Nodejs開發加密貨幣》基於Ebookcoin(億書幣)的開發教程,有一定參考價值
2.《建立自己的私有比特幣測試鏈》比特幣私鏈搭建教程





相關文章