請問區塊鏈的技術路線是怎麼樣的,如何系統學習區塊鏈?


基本同意 @maxdeath 的觀點。

隨著區塊鏈逐漸火起來,相關的資料,尤其是翻譯的中文資料已經比以前多很多了。

但是還是遠遠不夠,且很多是應用層面,觀念之爭,真正講技術的很少。

從我們公司招人的經驗來看,聽說過比特幣的不少,聽說過以太坊的不多。僅僅是聽說過哦,這還是願意來一家初創的區塊鏈公司面試的人當中的情況。

所以區塊鏈技術人才這塊,確實不容樂觀。

所以我們公司招的都是區塊鏈素人。

入門資料我一般安排的是:

看比特幣白皮書;看以太坊白皮書

聽如下兩個音頻節目

聊聊比特幣背後的技術和Blockchain - Teahour.fm這次我們聊聊超酷的Ethereum - Teahour.fm

泛讀《精通比特幣》

以太坊初體驗:https://github.com/cryptape/ethereum-bootstrap

實際效果嘛,那是相當的。。。。。。不怎麼樣

我也一直在總結反思。

我覺得一方面是各種總結概述的文章太多了,導致大家有點疲了,造成一種區塊鏈不過如此的錯覺。

比如很多文章總是強調區塊鏈沒有新東西,只是已有東西的組合。話是沒錯,但是得看是誰說的。對於學術圈來說,是沒多少新東西。但是對於程序員來說,區塊鏈用到的東西之前是很少見的。

比如拜占庭容錯演算法,這個在分散式系統課程裡面都是打星號的章節,一般只是講講二階段提交什麼的。分散式資料庫裡面用個paxos,都難倒一片。PBFT比paxos還要難一個等級。

比如智能合約的實現。分散式資料庫現在流行底層用kv,然後上層支持部分SQL操作。但是區塊鏈卻是以kv為內存模型,之上定義一個圖靈完備的語言。

還有用經濟激勵來維持系統,這個也是很小眾的做法。

更不用提還用了很多密碼學很前沿的東西。我接觸區塊鏈之前,能跟密碼學扯上關係的,也就下載大的東西算下MD5了。

另外一方面就是區塊鏈涉及的東西實在是太多了。而且構思非常精巧,環環相扣。有一個環節沒弄明白,就會給別的地方的理解造成困擾。

新人經常問的問題就是,這個地方明明有簡單的方案,為什麼區塊鏈非要選一個複雜的?

討論經常是,單看這個地方,用簡單的方案也行,但是另外一個地方會怎麼怎麼樣,導致再另外一個地方怎麼怎麼樣,最後發現有問題。倒回來再捋一遍,才發現還真的只能是區塊鏈的方案,到最後才能剛好卡上,就像拼圖遊戲一樣。

我建議,好好學一下分散式系統這門課;把拜占庭將軍問題相關的論文研究一下;中本聰的論文仔細研究一下;以太坊的wiki好好看一下;博弈論了解一下。

還有最重要的一點

[杭州] Cryptape 尋找 Rust/ Python 工程師 | 我們是一家研究與發展區塊鏈技術的初創公司

鳴謝

那兩期音頻節目是以太坊核心開發人員,我們公司創始人錄製的

ethereum-bootstrap 項目的作者,也是我的同事 @張亞寧


網上關於區塊鏈的東西很少,所以系統學習確實很難。而且,不同人對於區塊鏈的需求也不一樣,學習側重點也有所不同。

但是,不管是技術開發者,其他領域想要應用區塊鏈的人,還是像我這樣的研究者,我覺得基礎都是得理解的。我建議從學這些開始:

1,花一個星期通過網上公開課,科普,出版書籍之類的東西學習比特幣。

2,花一個星期通過網上公開課和科普之類的學拜占庭將軍問題和PBFT。

3,花一個星期的時間搞懂分別什麼是比特幣和BFT的可擴展性的問題。

4,持續關注專欄區塊鏈演義 - 知乎專欄


區塊鏈技術在未來的3-10年內必定會大行其道,相應所需的人才也會增加。

不論是計算機專業或信息專業的學生、還是已經從事開發的人員,都可以從以下幾個方面去學習和了解區塊鏈:

1、網路通信方面,目前的區塊鏈主要涉及無結構化的點對點通信(P2P);未來不排除會在聯盟鏈中衍生為結構化的P2P通信。點對點通信其實是建立起一條虛擬鏈路,底層對應的物理鏈路可能隨著網路時延抖動的變化(與網路狀況、區塊大小、區塊中交易數量等因素有關)而改變相應的路徑。因此,建議夯實網路通信的基礎知識。

2、數據存儲方面,以前的數據存儲方式很多都是基於面向高吞吐量的鍵值資料庫(例如levelDB、rocksDB),現在隨著區塊鏈技術的發展,傳統的關係型資料庫(例如Mysql、Oracle)也可以成為存儲介質,甚至有的公司開始使用大數據平台(Hadoop+Habse)來構建底層的存儲機制。下一代分散式版本文件系統(IPFS)也是一個需要跟蹤的重要方向;

3、加密技術方面,主要需要了解哈希函數和非對稱加密的基本原理和數字簽名的運行機制,更重要的,目前金融系統中使用的都是國密演算法,與區塊鏈技術對應SM2、SM3和SM9國密演算法需要重點了解;

4、共識機制方面,最開始流行的是可信任環境中分散式系統的共識機制(例如PaxOS和Raft),主要涉及CAP理論,在保留分區容錯性(Partition tolerance)的基礎上,數據最終一致性(Consistency)和系統可用性(Availability)之間會存在一個權衡。區塊鏈技術主要強調的是,在一個「去信任」環境中的共識機制,包括比特幣的工作量證明機制(PoW)、點點幣的權益證明機制(PoS)、比特股的股份授權證明機制(DPoS),以及後期發展的實用拜占庭容錯演算法(PBFT)和相關共識演算法的持續演進,需要一個長期的跟蹤和實踐。

5、隱私保護,區塊鏈本身就是基於非對稱加密的安全通信。但是,可以根據交易末尾的「特定數字」查詢到相應的交易關係,通過核心路由器的路由表、網卡的物理地址(MAC地址)和手機的國際移動設備識別碼(IMEI號)等信息追蹤交易者的身份信息,破解基於洋蔥路由(Tor)的暗網對信息的隱藏。後來,逐步出現基於環簽名的門羅幣(Monero)、基於零知識證明的ZCash和同態加密技術。不論是環簽名、零知識證明,還是同態加密技術,都有些艱深晦澀,屬於一個較大的門類。一般來說,掌握了隱私保護技術,也算是一個區塊鏈專家了。

6、安全技術,主要涉及私鑰安全,如何產生私鑰的保密演算法或者基於身份的新私鑰生成演算法,後期還要跟蹤研究智能合約的安全性,以太坊區塊鏈會遭受的脆弱性攻擊。智能合約的安全性可能還需要熟悉相應的編譯原理和虛擬化等技術。

7、最最最重要的,區塊鏈只是一門技術,真正的要完成區塊鏈的學習,離不開專業垂直領域的深度學習,懂區塊鏈只是懂個皮毛,懂行業+懂區塊鏈才是真正的區塊鏈專家。

上面提供的這些只是學習區塊鏈的思路,如果確實想快速從事這個行業,最好可以考慮以下方法。

1. 有前輩老司機帶著一起走;

2. 通過讀書、看視頻、逛網站、刷經驗、培訓班、

第一種方法自帶光環,老司機言傳身教,坐在副駕駛上告訴你怎麼啟動掛檔拉手剎踩離合,你只需要提著腦子聽著指揮然後動手去做就好,但這樣的機會少之又少。

第二種方法比較貼合大多數的人,看書,看視頻有用,但是成長比較慢,等自己學會了,也怕區塊鏈的熱度過去了。

有必要的話可以報個輔導班,現在針對0基礎的區塊鏈培訓班不多,我費了很大的勁打打聽一下幾家:

1、海綿學堂 http://www.51haimian.cn

這家機構主要針對零基礎,想學習區塊鏈技術的新人進行學習,老師都是中科院,阿里巴巴,OKcoin、美團網、樂視的,資歷還是比較深的。據說是全國首家做系統性區塊鏈培訓的機構。

2、朵朵學院http://www.wanbizu.com/p/37467.html,

老蘑菇獨撐的朵朵學院,在淘寶可以買到系列教程,課程不貴,對大家還是比較有用的。

3、小螞蟻開發學院https://www.antsh.org/school

技術出身的可以去小蟻開發學院,適合有一定基礎的開發工作者去學習。


說看白皮書的都是扯淡,白皮書扯的都是概念性東西,對於具體開發意義太低。

建議看看fabric,ethereum,這些在github上面都有詳細技術資料和源碼。

技術性教材的話 精通比特幣,幫助理解比特幣源碼

還有幾份關於比特幣源碼詳細分析的文案材料,我手頭上有,分別祥述比特幣網路,骨幹協議,交易,挖礦源碼的。

還有騰訊的trustsql也可以參詳一下。

其實大家對於區塊鏈不需要太過於恐懼,或者覺得高端。目前區塊鏈核心技術就兩塊:

底層區塊鏈,核心技術就是網路協議設計,共識演算法設計,區塊存儲設計。

再上面就是可編程虛擬機層(或者叫智能合約層),就是在區塊鏈上嵌入一層可編程中間件,便於程序員在上面開發應用,俗稱編寫智能合約。

其實基於區塊鏈編寫一個簡單的lua虛擬機,對於知乎大牛不會太困難。

再往上可以設計一些服務層,比如各類自定義服務介面,各類底層監測工具等等,不一而足。可以參考傳統領域基礎架構設計。其實這一層設計比較缺乏和粗陋,目前,一般都是直接面向智能合約層進行編程。

再往上一般是應用層,就是基於應用場景和業務邏輯開發應用。

普通小白程序員現在一般都是使用成熟區塊鏈系統,比如以太坊,在上面寫合約邏輯。大牛的話可以考慮區塊層和智能合約層進行優化修改,甚至自己去重構。

ps:不要被幣圈這些炒幣的人寫的文章給嚇住了,莫名覺得區塊鏈好像高科技。畢竟幣圈這些人懂技術的少,吹牛的多,很多人可以說是不學無術。

關注公眾號 比特說 ,裡面有一些介紹性資料。


區塊鏈起源於比特幣,建議先看比特幣的白皮書 bitcoinwhitepaper

然後看比特幣開發者指南官網英文版 Developer Guide - Bitcoin 或完整的中文翻譯 developer-guide

再看比特幣源代碼,目前版本0.14+, https://github.com/bitcoin/bitcoin

簡單畫了個啟動流程(不完善只求明白大意)

其他的都是基於比特幣這個基礎修改或擴展的。


區塊鏈的技術路線是怎麼樣的,首先要知道什麼是區塊鏈,區塊鏈是一種全新的計算模式,雖然基於區塊鏈的技術都並非新的

一是概念太技術,國內有不少區塊鏈的書籍,但是寫的都不是特別好,說真的區塊鏈現有的問題最重要的並非不技術,而是太技術,大部分人都被繞暈了,技術人員的自娛自樂,業務人員一臉懵逼,這種狀態影響了區塊鏈的發展,其實業務人員從來不需要知道TCP/IP是什麼?

二是定義不權威,什麼是區塊鏈,這個定義特別複雜,是原生的比特幣還是升級的以太坊或者其他區塊鏈平台,我覺得實在是有必要認真看看比特幣 以太坊和fabric的白皮書,然後的然後才是源代碼,100個人就有100個定義太難

三是區塊鏈的發展正在開始,此時沒有對錯,但是鼓勵爭議,保留意見,區塊鏈還缺乏屬於區塊鏈這個時代的語言和工具,正如JAVA屬於互聯網一樣,區塊鏈的語言,工具,開發環境也需要進一步發展,技術還在發展中


建議結合自己熟悉的編程語言,直接去開學習一個開源項目、cpp我推薦libbitcoin、模塊化做的很好、切忌不要東搞一下、西弄一下、停留在表面


先對最原版的區塊鏈技術有個系統的理解----精通比特幣。然後拿以太坊的白皮書看看,理解了以太坊的基本情況以後,看Ethereum-homestead paper ,按照上面的過程搭建一個私有鏈玩一玩。如果要搞基於以太坊的web開發看看web3的介面介紹,玩智能合約就看看solidity,模仿一下別人的智能合約寫寫。基本上到這個程度,就知道這些是什麼個情況。往後的學習方向自己就有比較清晰的認識了,我覺得比特幣可以稱為第一代區塊鏈技術平台,或者說源頭。以太坊是第二代平台,超級賬本是第三代。超級賬本的fabric最晚出現,架構組成目標應用情景啥的和前面的都很不一樣,也會比前面的複雜得多。


直接去讀各種區塊鏈的白皮書和源代碼。


《精通比特幣》不錯,外網上還有一套普林斯頓的課程也不錯,國內有些知名的公號也有系列公開課程。


建議看聯盟鏈hyperledger一fabric,資料全,資料應有盡有,mailing list和各種chat都很方便,就是代碼還在完善中。ps:不太看好公有鏈


推薦閱讀:

如何學習區塊鏈技術?
什麼是比特幣的閃電網路?
如果全世界的貨幣都被比特幣取代,會對經濟造成怎樣的影響?經濟模型會是怎樣的?
比特幣改變了我的三觀,請問這正常嗎?

TAG:區塊鏈Blockchain |