1. 程式人生 > >深入淺出區塊鏈筆記

深入淺出區塊鏈筆記

整理自 :極客時間專欄<深入淺出區塊鏈>


0.開篇詞

0.1專欄結構

  • 淺說區塊鏈基礎
  • 深入區塊鏈技術
  • 數字貨幣與數字資產
  • 區塊鏈與當下網際網路
  • 如何從業區塊鏈

1.到底什麼才是區塊鏈

區塊鏈定義:

  • 區塊鏈是一個分散式網路
  • 區塊鏈可以幫助多個節點達成共識去記錄和Token相關的事情
  • 區塊鏈可以幫助所有人無門檻地構建屬於自己的小經濟系統

2.區塊鏈到底是怎樣執行的

此節講的一般;讀書比較好

3. 淺說區塊鏈共識機制

分散式系統的經典問題:拜占庭將軍問題

參考:
https://learnblockchain.cn/2018/02/05/bitcoin-byzantine/

拜占庭將軍問題是Leslie Lamport(2013年的圖靈講得住)用來為描述分散式系統一致性問題(Distributed Consensus)在論文中抽象出來一個著名的例子。
這個例子大意是這樣的:
拜占庭帝國想要進攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵禦5支常規拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態下同時攻擊。他們任一支軍隊單獨進攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通訊兵騎馬相互通訊來協商進攻意向及進攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進攻意向或者進攻時間。在這種狀態下,拜占庭將軍們才能保證有多於6支軍隊在同一時間一起發起進攻,從而贏取戰鬥?
拜占庭將軍問題中並不去考慮通訊兵是否會被截獲或無法傳達資訊等問題,即訊息傳遞的通道絕無問題。Lamport已經證明了在訊息可能丟失的不可靠通道上試圖通過訊息傳遞的方式達到一致性是不可能的。所以,在研究拜占庭將軍問題的時候,已經假定了通道是沒有問題的.

中心化記賬:大家信任記賬者即可
去中心化記賬:誰有權利記賬,如何避免記賬者作弊–>共識機制

最典型的入門型共識機制:PoW工作量證明 (它與一般分散式演算法的區別在於:PoW結合經濟學上的理性人的假說,發明了激勵機制,讓做好人的獎勵大於做壞人的獲利)

Pow工作量證明的補充:解決雙花攻擊

所有記賬節點都會遵循以下兩條規則:

  • 一個代幣如果已經被話費,那麼會被標記成已花費,如果再次接受到這個代幣被花費的請求,那麼記賬節點會拒絕打包這筆交易
  • 如果同時接受到兩個區塊,這兩個區塊中裝的兩筆交易中出現了一個代幣被花費兩次的情況,這種情況也就是我們所說的分叉(fork),那麼選擇挖礦難度比較大的那個區塊.

4.區塊鏈的應用型別

5.如何理解數字貨幣?它與區塊鏈又是怎麼樣的關係

數字貨幣:

  • 電子貨幣
  • 虛擬貨幣
  • 數字貨幣

6.體驗數字貨幣

7.區塊鏈常見誤區

如果說政府是法幣的背書;數字貨幣的背書可以認為是社群

分散式領域的CAP定理:
consistency:一致性,表示同樣資料在分散式系統中所有地方都是被複製成相同;
Availability:可用性,表示所有在分散式系統活躍的節點都能夠處理操作且能響應查詢
Parition tolerance:分割槽容錯性,表示不同節點之前資料同步有意外情況產生時,能夠容錯.

去中心化不是區塊鏈唯一的評價標準.

8. 最主流區塊鏈專案有哪些?

比特幣,以太坊,瑞波幣等

9.技術基礎

區塊鏈的技術定義:一個提供了拜占庭容錯,並保證在最終一致性的分散式資料庫.從資料結構上來看,它是基於時間序列的鏈式資料塊結構;從節點拓撲上看,它所有的節點互為冗餘備份;從操作上看,他提供了基於密碼學的公私鑰管理體系來管理賬戶

區塊鏈在技術上的7個特徵:
1.區塊鏈的儲存基於分散式資料庫;
2.資料庫是區塊鏈的資料載體,區塊鏈是交易的業務邏輯載體
3.區塊鏈按時間序列化區塊資料,整個網路有一個最終確定狀態
4.區塊鏈只對新增有效,對其他操作無效;
5.交易基於非對稱加密的公私鑰驗證;
6.區塊鏈要求拜占庭將軍容錯;
7.共識演算法能夠解決雙花問題.

區塊鏈型別:公有鏈,私有鏈;聯盟鏈,

區塊鏈的核心技術組成:

P2P網路協議:負責交易資料的網路傳輸和廣播,節點發現和維護
分散式一致性演算法(共識機制):
經典分散式計算領域:Raft與Paxos演算法家族代表的非拜占庭容錯演算法和具有拜占庭容錯特性的PBFT共識演算法
區塊鏈領域:PoW工作量證明演算法,POS權益證明演算法以及DPOS代理權益證明演算法
加密簽名演算法:雜湊演算法,Scrypt演算法等
賬戶與儲存模型:UTXO 為花費的交易輸入輸出

10.P2P網路

P2P網路協議很多,如:BitTorrent,ED2K等

P2P主要四個內容:

  • 網路連線和拓撲結構:(區塊鏈是基於TCP/IP協議的,與HTTP協議同屬一層-應用層)
  • 節點發現:初始節點發現(DNS-seed和程式碼中hardcode)和啟動後節點發現
  • 黑名單與長連線
  • 區域網穿透
  • 節點互動協議

11.共識演算法與分散式一致性演算法

分散式系統面臨的問題:
一致性問題:在某個分散式系統中,任意節點的提案能夠在約定的協議下被其他所有節點所認可;
可終止性問題:系統必須在有限的時間內給出一致性的結果
合法性問題:提案必須是系統內的節點提出的;

一致性主要體現在下面兩種型別的問題:
1.非人為惡意的意外投票過程
2.人為惡意篡改投票過程

發生人為惡意篡改投票過程可稱之為系統發生了拜占庭錯誤

如果可以容忍拜占庭錯誤而不至於崩潰,我們將這樣的系統稱之為拜占庭容錯系統.

有關分散式系統的定理:

  • FLP不可能性:不存在一個通用的共識演算法可以解決所有拜占庭錯誤
  • CAP定理:系統不能同時滿足CAP中的三個,選擇其中兩個作為主要強化的點,另外一個必然會被弱化

共識演算法與分散式一致性演算法:

1.經典的分散式一致性演算法
Raft協議,Paxos協議,PBFT(實用性拜占庭容錯系統,容錯閾值33%)
2.區塊鏈共識演算法
PoW共識演算法(容錯閾值是50%),PoS共識演算法,DPOS共識演算法.

區塊鏈並沒有跳出分散式系統的理論框架,只是給出一種不同於計算科學領域的解決方案.

12.PoW共識

1997年被提出,最早應用於如抵抗垃圾郵件等場景;
PoW挖礦演算法大致分為兩個大類:計算困難和記憶體困難;
計算困難->目前有專業礦機
記憶體困難->沒有專業礦機

Pow優缺點

優點:存在成本,可以穩定幣價,信任度高
缺點:耗費能源;自私挖礦(會形成礦霸,間接導致51%攻擊);51%算力攻擊問題(即攻擊者只要擁有超過全網51%的算力,既可以發起"雙花攻擊",甚至"重放攻擊"等高收益攻擊)

13.POS共識機制(proof of Stake)

為了解決PoW挖礦出現的大量資源浪費的問題;
幣齡:幣數量*天數 (如100個幣,在某地址上9天,則幣齡為900)
pos:節點所擁有的幣齡越多獲得記賬的概率就越大

Pow的基本邏輯和步驟:
先尋找一個nonce小於目標值,公式表示為:

Hash(block_header) <Target

pow下所有曠工的目標值是一樣的,只要計算結果hash小於目標值即可,簡化;來看就是前導0的個數

而在Pos中,這個公式變更為:

Hash(block_header) <Target* CoinAge

可見每個礦工的目標值是不一樣的,你的幣齡越大,獲得答案就越容易.

PoS相關問題

PoS解決了PoW挖礦資源浪費的問題,還解決了51% 攻擊的問題,因為若你能發起51%攻擊,意味著你擁有全網51%的幣或者幣齡,這樣發動攻擊,你的損失也會是最大的.

PoS的缺陷問題:
一是幣發行的問題,一開始只有創世塊上有幣,意味著只有一個節點可以挖礦,如何將幣分散出去是一個難題,所以早期的PoS挖礦都採用分階段挖礦:第一階段採用PoW挖礦,第二階段採用PoS挖礦.二是由於幣齡與時間掛鉤,以為這可以無限囤積一定的幣,等過了很久之後再一次性挖礦發起攻擊,解決是引入一個時間上限來控制時間因素的自熱增長.
三是即使有了時間上下限,使用者還是傾向於囤積代幣,解決是幣齡按時間衰減.
四是離線攻擊,即使引入了時間上下限,時間仍然是流動的,也就是不需要要求節點長時間線上.而離線挖礦是災難的.

14.DPOS共識機制(Delegated Proof of Stake)

DPOS共識演算法就是將Pos共識演算法中的記賬這轉換為指定節點數的小圈子,而不是所有人都可以參與記賬.這將極大的提高系統的吞吐量. DPoS的目的就是為了提高效能,縮短交易確認時間.

15. 雜湊與加密演算法

區塊鏈中主要應用了兩類密碼學演算法:雜湊演算法和非對稱加密演算法

雜湊演算法:

  • 原像不可逆
  • 難題友好性
  • 發散性
  • 抗碰撞性
    Hash演算法:MD5(破解),SHA-1(破解),SHA-2,SHA-3

默克爾樹(Merkle Tree):hash演算法的另一個重要應用,通常是一顆二叉樹,也可能是多叉樹.

非對稱加密演算法

常見對稱加密演算法:DES,3DES,AES
常見非對稱加密演算法:RSA,ECC等

16.UTXO與普通賬戶模型

區塊鏈網路中有兩種記賬模式,除了UTXO模型還有Account Based模型結構(也叫普通賬戶模型或者賬戶餘額模型)

普通賬戶模型

餘額模型…

UTXO模型(未花費的交易輸出)

UTXO的核心設計思路是無狀態,他記錄的是交易事件,而不是最終狀態,也就是說
只記錄變更事件,使用者需要根據歷史記錄自行計算餘額.

UTXO的缺陷:
1.可表達的狀態少
2.區塊鏈盲點
3.價值盲點

UTXO是比特幣的原生設計,在此之前沒有這種邏輯資料結構,但是UTXI並不是所有
區塊鏈所必需的,公鏈開發工程中是否選用UTXO模型需要根據業務場景進行判斷.

17.## 去中心化與區塊鏈交易效能
區塊鏈本身TPS看似很低效,為什麼說它提高了交易效率?
傳統的交易發生在中心化平臺,在平臺內部,交易效率是提升的,但是整個交易的
生命週期,可能是被延長的;
區塊鏈點對點的交易模式,TPS看似低效,但是它提供了全域性無縫銜接的資產流轉流程.

提高TPS:
sharding分片和閃電網路


18.智慧合約和以太坊

智慧合約:有一個計算機處理,可執行合約條款的交易協議,其總體目標是滿足協議既定的條件,例如支付,抵押,保密協議.

以太坊

Ethereum專案的目標是打造一個去中心化的新一代網際網路應用平臺,這個平臺稱作Dapp平臺.
這些Dapp基於以太坊智慧合約虛擬機器開發,編譯和部署,並且可以自定義業務邏輯,部署後全網可見且自動執行,理想情況下不存在宕機,審查,欺詐,第三方干預的情況.

以太坊核心概念

智慧合約虛擬機器EVM:EVM是一個輕量級虛擬機器隔離環境,可以把它理解為一個封閉的容器,這個容器裡面裝了一個正在執行的Dapp,可以看成是無法和外界互動的Docker Container
Solidity程式語言:Solidity與JavaScript類似
賬戶模型:Ethereum沒有采用UTXO模型,也不同於銀行賬戶,而是由以太坊開發者自己設計樂自己的賬戶模型;
以太坊賬戶有兩種:一是合約賬戶CA (智慧合約程式碼用的賬戶),二是外部賬戶EOA(人用的賬戶)
以太幣和GAS:Gas是執行智慧合約操作的燃料,智慧合約 的每一個步驟都會消耗Gas,Gas由以太幣轉化而來,最小單位為wei,1ETH = 10的18次方wei
以太幣可以通過PoW挖礦而產生
交易和訊息:以太坊上的交易和比特幣中的UTXO交易不同,它是指EOA賬戶講一個經過簽名的資料包傳送到另一個賬戶的過程,這個過程產生的賬戶狀態變化將被儲存到以太坊區塊鏈上.

交易指的是一個只能合約賬戶呼叫其他合約賬戶的過程,可以類比函式的呼叫過程.

以太坊和比特幣的主要區別

以太坊不是一個單純的數字貨幣專案,他可以提供全世界無差別的區塊鏈只能合約引用平臺,這個平臺基於區塊鏈四大核心技術核心要素:P2P網路,共識機制,賬戶模型,加密模組.
在以太坊推出了EVM和Solidity之後,區塊鏈的開發者出現兩類:一是公鏈底層開發者(C++和GO),而是智慧合約開發者(Solidity)

除了智慧合約之外,以太坊還設計了一下內容:
1.研究實現了自己的PoW挖礦演算法—ETHASH,記憶體困難型的挖礦演算法;
2.叔伯塊激勵機制,降低挖礦中心化的趨勢;
3.設計了Gas機制,避免程式死迴圈消耗全網資源; 研究自己的POS共識演算法-Casper

19.搭建自己的智慧合約

搭建一條智慧合約

1.下載並安裝Geth

2.搭建以太坊私聯

我們可以使用Geth搭建一條屬於自己的以太坊區塊鏈,也就是以太坊私鏈(在主網上執行和開發智慧合約會消耗以太幣)

3.編寫並部署屬於自己的智慧合約

4.智慧合約標準模板


20.區塊鏈專案詳解:BTS

什麼是位元股:是一個公開透明的,7*24小時不簡短執行的,基於區塊鏈技術的去中心化交易平臺

位元股的兩個機制

人人承兌和錨定機制

法幣 <--(人人承兌)--> 系統內建貨幣(錨定資產) <--(錨定機制)-->bts

(bts:是位元股上流通的平臺代幣,大約總量在36億)

人人承兌: 提供了從法幣到系統內建貨幣的轉換,位元股系統內建了多種貨幣,它錨定了多數法幣
實際上就是讓法幣和位元股系統內建貨幣的交換能夠進行.並且這個過程不需要只在一個地方兌換.

錨定機制:是一種去中心化的抵押機制. 位元股系統內建了多種貨幣 ,如bitCNY,bitUSD,他們可與CNY,USD等1:1兌換的.
系統內建貨幣發行商是系統自身,髮型給抵押了bts的使用者,發行數量是有抵押的代幣的數量決定的,你用bts抵押,然後換區bitCNY.

位元股的技術概覽


21.引人矚目的區塊鏈專案:EOS,IOTA,Cardano

22.國內區塊鏈專案技術一覽

23.聯盟鏈的困境

聯盟鏈:需要准入許可,也叫許可鏈.

超級賬本 HyperLedger (5個技術框架和4個輔助性工具)

Fabric

Fabric 架構上分為三個模組:成員關係管理(相當於賬戶許可權管理系系統),區塊鏈服務(提供和區塊鏈一樣的賬本結構),Chaincode服務(相當於智慧合約)

24.比特幣專題(一):歷史與貨幣

無國界共識,記賬是本質,高效的資源排程,三權分立的社群自治形態


25.比特幣專題(二):擴容之爭,IFO與鏈上治理

擴容之爭背後其實是社群治理的難題:如何讓社群達成一致
ICO:區塊鏈眾籌(出一個白皮書,然後以要新出一個代幣來集資)
IFO:(以要出一個由比特幣分叉出來的代幣為噱頭來集資)
鏈上治理:指的是人們直接在區塊鏈發起社群提案,並進行決策的過程


26.數字貨幣與數字資產

數字貨幣:原生型數字貨幣和錨定型數字貨幣
數字資產:Token


27.弄懂數字貨幣交易平臺(一)

交易的兩種模式

場內交易:成交單優先模式,有交易場所將買賣雙方聚集在一起,進行競價交易方式;
場外交易:報價單優先模式,買賣方不通過第三方直接成為交易對手的交易方式.

數字資產交易平臺


28.弄懂數字交易平臺(二)

兩套賬本:

數字貨幣交易所包含的系統模組:
Web業務邏輯系統(通常包含使用者賬戶模組,登入閘道器,賬戶安全管理,KYC人證,行情推送等),交易撮合系統(交易所的核心模組),運營後臺管理系統(交易所運營人員使用的系統),資金管理系統.
交易
(具體流程看專欄或者查閱其他資料)


29.網際網路身份與區塊鏈數字身份

人-身份證號,身份證只是人的憑證而不是人的身份.人的身份託管在政府機構,銀行,醫院等資料庫中,關於人的客觀歷史事件被記錄下來,這些記錄組成了一個人,使人變得有一定辨識度.

網際網路身份問題:
1.安全性問題
2.不同機構的身份資料相容成本很高
3.使用者無法控制屬於自己的資料.
4.重複的建立和管理不同應用下的身份
5.虛假身份欺詐

是否可以去做區塊鏈身份,它的核心功能將會是:驗證和授權


30.區塊鏈即服務BaaS(Blocking as a Service)

ass 字尾,一般都是雲端計算範疇的,如Iaas(infranstructure as a Service),SaaS(Software as a Service)等

什麼是區塊鏈即服務:提供多種方式的查詢,交易廣播,交易驗證服務,使得公有區塊鏈的服務可以整合到網際網路應用的架構中,這些服務包括了數字貨幣,數字資產,身份驗證服務,第三方監管服務.


32.數字貨幣錢包服務

數字貨幣錢包分類:
按使用者端平臺劃分的錢包
按貨幣型別分類的錢包
按私鑰儲存方式來區分的錢包
按訪問方式進行分類的錢包

掃描區塊技術 Block scan: 把全節點錢包中的資料轉換為資料庫伺服器中的資料,這需要一種掃描區塊技術,簡稱掃快
掃塊:掃描全節點錢包中的所有區塊,然後將其解析後儲存到資料庫伺服器的過程,這些資料庫可以是MongoDB,也可以是mysql.

按照元界區塊鏈結構,將表分為四大類:
第一類是區塊block;第二類是交易Tx,第三類是交易輸入輸出tb_input,tb_output;第四塊是分叉處理

區塊瀏覽器:(或者叫做資產瀏覽器)
主要工作就是將區塊鏈掃描到資料庫伺服器中,然後搭建一個web訪問服務,使用者只需要輸入交易雜湊或者區塊雜湊,就可以查詢交易是否已經被打包和確認.

數字貨幣錢包服務:


32.33.區塊鏈與供應鏈

34.從業區塊鏈需要了解什麼

35.搭建你的迷你區塊鏈

略…