當前位置:
首頁 > 最新 > 區塊鏈基本原理及其技術實現-姜家志

區塊鏈基本原理及其技術實現-姜家志

姜家志,比特大陸哥白尼項目負責人;BCH 社區資深開發者;10年後端技術及互聯開發經驗,比太錢包Android 和 iOS 客戶端的開發者; 從事區塊鏈底層協議的研究,關注高性能、分散式系統的研發。

區塊鏈現在所有的項目都有一個很大的性能問題,需要從技術方面去克服,這是我們團隊關注的一個方向,另外整個區塊鏈產業發展很大一部分推動力是來自於密碼學。 我們還有一個任務是把密碼學上的一些思路和研究,在工程上進行實現。

我是2013年開始接觸比特幣,最早接觸比特幣時,我接近兩個星期每晚都處於睡不著覺的狀態 。我本想著2015、2016年的時候比特幣就應該能普及到很多人了,但經歷了14、15年的熊市,覺得可能要再延後幾年。出乎意料的是,2017年區塊鏈大規模普及。

今天跟大家分享一下區塊鏈的基本原理及技術方面的實現。

1. 區塊鏈是什麼?

給區塊鏈一個完整定義是很難的,原因有如下兩方面:

現在區塊鏈涉及的行業太多,很難給它一個很明確的定義。 區塊鏈基本上每隔一段時間都會發生很大的改變,大家可以在上面作出更多有意思、好玩的東西。

去中心化

比特幣最大的特點是去中心化。

採用POW,比如早期的比特幣、以太坊等都是使用POW,經過長達十年證明之後,POW在去中心化的實現上是最好的證明。

現在出現POS、DPOS,都是在一定程度上犧牲了去中心化。DPOS採用選舉制度,你所投票的人能代表你自己的想法,但並不意味著任何人能夠隨意的加入網路。

去中心化有幾個很鮮明的特點:

抗審查能力。在整個網路活動中,對應到整個區塊鏈里就是所發生的一筆交易,不會因為個人原因就會被拒絕,就是抗審查能力。整個網路里,即使一個礦池拒絕了你的交易,也會有其他礦池幫你打包。

當某一個網路掛了或某一些不可抗拒原因導致某個節點掛了,不會影響整個網路運轉。

POW、BCH、BTC、以太坊都具有這樣的能力,任意一個礦池掛了,其他節點依然正常在運轉,如果把所有礦池都掛了,在運行節點中的節點會重新搭建起一個全新的狂吃,這樣有可能會出現整個網路處理能力的下降,但網路是不可摧毀的。

DPOS這種方式肯定會犧牲以上說的兩點特性,如果21節點全部被封禁了,恢復就有一定的困難性(備用節點的設計方案還有待確認)。21節點也同樣的具有審查交易的能力,任何人想進入這個網路也很困難(需要通過選舉)。我稱這種方式為弱中心化,畢竟還是有21節點的,不是一個完全的中心化。弱中心化的設計是為了提高性能上一些指標,為了能做更多事情,犧牲了去中心化的特點。

數字化賬本

整個區塊鏈都是運行在互聯網上

不可更改

這個特性在比特幣里比較明顯,在以太坊里,會出現能更改的可能性。如果一個合約在定義好之後,之後通過交易是可以改變它的狀態。但這個可更改性也是之前定義好的,也就是說大家知道你的合約就是這樣寫的。

確定性的複製狀態機

簡單來說就是整個網路所有節點能夠拿到所有的數據。

可編程性

在比特幣中就有體現。在以太坊上,可編程性被進一步放大,他使用的語言是solidity,它是一種類似於JavaScript的語言。

匿名性

因為每個地址/賬戶在整個網路里,不和真實世界中人物對應。但是因為比特幣這種交易是鏈式的結構,如果你知道這個幣給誰了,反向追蹤是可以找到源頭。匿名性是如果不帶入真實世界裡,不和真實身份的進行交易的話,是有一定的匿名性。反之,這種匿名性就會消失。這也是為什麼交易所會強製做KYC嚴格身份認證的原因。


公私鑰體系

數字簽名認可

全網廣播

區塊記錄交易以交易為單位,每個交易會記錄在區塊鏈上,不會記錄真實結果,這些交易本身會影響結果。

鏈式結構整個交易、區塊都是鏈式結構,大家一直會往一個方向不斷延伸下去,不會出現迴路或分叉。

參與者確認有效性在比特幣中是礦工確認交易,在EOS中是由超級節點確認交易。


區塊鏈是資產型網路。無論現在看到什麼樣的區塊鏈項目,都運行著一個資產網路。

強規則網路有如加密、簽名、驗證、交易和確認等操作。任何一塊不符合規則的話,整個塊就會被拒絕。在互聯網項目中,出現不一致的情況時,後續是有修復和解決的機會;但是在區塊鏈里,這種可能性非常低。如果出現一個很小Bug,整個網路運行都會出現問題,會對整個網路影響很大。在早期,比特幣出現過幾次的Bug造成了分叉,全網暫停後重新運行。但現在如果再出現類似Bug,就很嚴重了,因為當時比特幣網路參與人員少,比特幣價格低,造成的影響較小。

弱信任每個節點都有對等的,把整個區塊鏈理解為資料庫,每個節點在系統內都有寫入的許可權 。在對等的前提下,比特幣是通過算力來決定誰能寫入的更多。如果你有更大資源,能調動更大的算力,寫入的概率就會很大。

信任來自於共識機制,非第三方共識機制包括POW、POS、DPOS和DAG。DAG是一種共識機制,它經過了密碼學家的認可。

去中心化現在很多區塊鏈項目在向弱中心化方向發展,弱中心化的好處也能帶來對等信任的關係,這種信任網路可能產生的經濟價值會有可能大於以前中心化網路帶來的價值。


數字化資產

像比特幣,都是對標一種交易系統。轉帳。股權。融資。數字版權。遊戲。存儲。如果存儲解決了,上面的版權、遊戲都有可能會在裡面,包括新的一些應用或新的網路產生新的價值。目前都處在摸索階段,整個業內也都有人朝這幾個方向去做

EatBCH,是一個委內瑞拉的項目。目前委內瑞拉法幣已經崩潰,委內瑞拉和其他國家關係也不好,再加上國內有封鎖,美元很難進入。現在面臨很重要的問題是沒有法幣能做交易,委內瑞拉現在存在嚴重的饑荒,但黑市中有食物 。 他們國內有一個項目叫EatBCH,就是通過捐贈BCH給他們購買食物。整個比特幣是跨國界的,只需要知道他的地址,就可以把比特幣直接打給他,省去了中間環節。

利用BCH 低成本網路的特點,省去手續費,幾美元就可以讓他們吃很久。這是一種價值網路的轉移。這個項目估計讓委內瑞拉400、500人受益。非洲也類似的項目。

2. 區塊鏈技術實現


我們使用的加密網路、VPN等都是公私鑰體系,比特幣私鑰本質上是隨機數,只不過這個隨機數很大,有2的256次方個私鑰,不可能遍歷所有的私鑰的。 在一個錢包里生成私鑰以後,這個私鑰理論上有可能被別人撞到,但實際上不可能,概率非常小。

整個網路採用的是secp256k1演算法。中本聰當年設計比特幣時,一些加密庫的實現里是美國政府認可的,他認為不是特別靠譜。


Hash是一種散列演算法,相當於一個數據的指紋,我們無法從Hash里推算出原始數據是什麼,因此可以實現對原始數據進行保護。如果原始數據是一致的話,Hash就是一致。不同的原始數據Hash值衝突的概率很小,基本上可以認為是不一致的。


從一個原始數據里算出對應Hash,用私鑰進行簽名,到了驗證方那裡他拿到原始數據,簽名數據,從原始數據中是可以算出Hash的,拿到Hash和公鑰、簽名之後把數據一起做驗證 。這在互聯網裡也比較常用,郵件里使用PGP加密也是採用類似方式。在整個區塊鏈里,簽名是一個所有權認證方式。在整個區塊鏈里,最重要的東西就是私鑰,如果以後大家在使用錢包的時候一定要保證好自己的私鑰。但是這面臨一個很麻煩的東西,大部分人對公私鑰有可能了解的比較少,小額有可能還是放到線上錢包比較好,線上錢包提供方也有很多,比如交易所就是一個很大的在線錢包。

由於私鑰是要自己保護的,私鑰問題從早期一直存在到現在,即密碼無法找回,或者沒有備份等。在早期時,有人在比特幣上挖礦,電腦上面有5000個、8000個都放著,電腦過了一段以後不用了,所有東西都有可能丟失了。整個比特幣網路上是2100萬個幣,據估算找不到的就有五六百萬個。


現在很多區塊鏈項目都在用地址,地址是經過Hash演算法算出來的。在沒有發送出去幣的時候,地址能保證你的公鑰不被外界看到,只是拿地址做收幣使用,公鑰不會暴露在網路上,只有當發送幣時才會暴露公鑰。這樣帶來的好處是有一天有人破了演算法,能從公鑰反推出私鑰了 ,如果不暴露公鑰,還是無法算出私鑰,多了一層保護。


比特幣交易分為輸入和輸出,輸入是這個幣是那裡給你的,輸出是你的幣要發到那裡。每一個交易必須有輸入,因為沒有輸入的話,相當於不知道這個錢是從哪裡來的。除了挖礦產生的交易,這個交易是由整個共識規則產生的獎勵, 這個交易是沒有輸入的,這個就是比特幣的發行。交易本身有鎖定和解鎖腳本,網路上並不存地址,只關心鎖定腳本,根據鎖定條件有對應的解鎖條件,兩個加在一起才能動用你的幣。


腳本運行在一個堆棧上,遇到一個腳本操作符,就會執行對應操作,如果碰到數據,又會把數據要到棧里,最終結果是保證整個棧執行出來是對的, 中間任何一個條件不滿足的話,整個交易就無法運行。這是為什麼整個比特幣的協議, 只關心鎖定條件是什麼,能否拿出對應解鎖條件這些的原因。如果解鎖條件能夠滿足的話,就能動用裡面的資產,如果滿足不了就不能動用。


每個交易都有一個輸入和輸出,但是每一個輸出有可能暫時不用,也可能一年之後用,如果不用,就會存在整個系統中,這種結構就叫做UTXO,這是比特幣採用UTXO的概念,UTXO能在整個系統設計上更容易實現去中心化的特點,但是以太坊採用不是UTXO的概念,採用的是我們容易理解的賬戶概念,相當於你的私鑰產生地址,就是你的賬戶,可以一直用這個賬戶,所有操作、所有記錄都在賬戶下。

為什麼有一個UTXO和賬戶的概念,這裡牽涉到UTXO和賬戶兩個系統帶來的一些好處。

UTXO無需維護餘額,因為不關心你的餘額是什麼,只關心它的鎖定腳本是什麼,有沒有輸入對應的解鎖腳本,所以整個系統不用維護一個地址,當使用一個錢包時,顯示地址里有多少餘額時,都是錢包算出來的,拿到這個地址下面有多少未發生交易,加在一起就是你的餘額。

每個UTXO都是獨立的數據記錄,提升驗證交易的速度。

UTXO本身不用關心事務問題,只關心鎖定腳本和解鎖腳本。UTXO能夠在實現上、編碼上給整個系統帶來很大的優化,所以比特幣在實現去中心化時就非常容易。在以太坊里要運行智能合約,相應要讓每個賬戶有獨立的存數據和取數據能力,使用UTXO這個概念的話,一個數據存了,不太容易找到他存在哪了。賬戶體系能解決這個問題,現在每一個賬戶下面都有一個kv存儲,自己可以存任何想存的東西, 這樣使用智能合約時更加容易實現。


Block Header包括基本數據,交易列表,交易確認是由礦工把對應交易打到塊上,這就是交易的確認,所以Block概念在整個系統中運用也是很廣泛的。所有塊加在一起形成Blockchain的概念。

3. 比特幣

布雷頓森林體系解體之後,美元的購買力下降98%左右。

在辛巴威發生著我們小時候看課本上的事,推一車錢去買東西,最後把錢扔了,車推走了。辛巴威現在就處於這個狀態,持續通貨膨脹,導致法幣體系基本崩潰。俄羅斯前幾年也出現過貨幣大面積貶值,一段時間貶值50%左右,還有委內瑞拉。印度去年用新的貨幣系統替換了舊的貨幣系統,通過這個事情,GDP都下降了一點 。在整個世界歷史上有很多國家正在發生類似這樣的事情。


A Peer-to-Peer Electronic Cash System

2008年11月1日,由Satoshi Nakamoto發表論文

2009年1月3日,創世塊誕生 (The Times 03/Jan/2009 Chancellor on brink of second bailout for banks),寫了一段諷刺的話,當時英國第二次救助銀行系統

2010年之後,Satoshi本人逐漸消失並人間蒸發

總量固定2100萬枚

比特幣發行(Coinbase)挖礦


財產的絕對控制,私鑰是唯一的憑據,失去私鑰將失去一切。

非對稱加密演算法,Hash摘要演算法。

海量賬戶,以地址(公鑰)登記所有權,數量幾乎無限供應。

全球無縫流通,有網路就有比特幣。

無偽鈔,天然審計。


工作量證明POW,體現在算出來這個Hash值要小於給定的那個值,這個目標值就是全網去維護的,如果算力大了,還是這個目標值的話,肯定不能滿足10分鐘出一個塊了,這個時候就要提高目標值,目標值越來越大,需要的算力就越來越多,這也是為什麼現在全網算力這麼大,比特幣還是保持10分鐘左右出塊。

鏈式結構,體現在Block和交易上。

去中心化系統,沒有一個組織能完全封殺掉整個網路或控制整個網路。


挖礦也是比特幣的一種發行方式,發行交易是Coinbase交易

大量嘗試隨機數找到符合要求數字的過程。

工作量證明(POW)的體現。

比特幣的發行(Coinbase)。

高額收益。

維繫比特幣的支付功能,打包交易。

大算力保證比特幣系統安全。在整個產業鏈中,付出成本最大的其實是礦工,礦工要有基礎建設,要買礦機,成本比較大。


解決自生長問題,利益驅動,不依賴道德和感情。

消除比特幣安全威脅。

在算力博弈塊鏈的過程中,作惡導致受益下降。

利益綁定,擁有巨大算力的組織,會自發的維護系統安全。

比特幣的長久發展更有利於礦工交易。

大算力保證比特幣系統安全。挖礦是一個利益綁定,擁有最大的算力組織會自發維護整個系統的安全,比特幣長久發展有利於礦工交易,因為礦工在這塊投入的成本很高。


早期是拿CPU挖礦,因為挖礦的人很少,也很少有人會在上面進行改進;後面有一些新玩家進來之後,發現顯卡算力更快,就採用顯卡;再後面用上了FPGA,在2012年之後就是ASIC的時代 。


極具有顛覆性的創新產物,但仍然是處於試驗階段

幣值劇烈波動,還不是穩定結算單位

缺乏多數商家的支持

受眾人數仍然很小

系統吞吐能力仍然很小,尚無法支撐全球大規模交易(需要擴容)比特幣極具創新性,目前還處於實驗階段,價格不穩定,現在不是穩定的結算單位。比特幣缺少大部分商家支持,而且受眾人群少。系統吞吐能力小,無法支撐全球大規模交易,所以需要擴容。比特幣擴容歷史很艱難,現在分為BCT和BCH。現在不會在擴容問題上繼續爭吵。


2014年Gavin提出擴容問題

Bitcoin XT (20M,太過於激進)

2016年Bitcoin Classic (2M)

2016年香港共識,礦工只運行Core的代碼,SW第一次出現

禁止討論區塊擴容,路線圖中只有SW沒有直接區塊擴容

Bitcoin Unlimited出現,最高有50%算力支持

UASH和UAHF


以太坊市值一直在不斷地漲。在以太坊上存在擴容問題嗎?其實以太坊區塊大小一直在不斷增加,以太坊隨著使用增加,整個網路能處理的交易也不斷增加,現在要運行以太坊節點,是必須使用SSD的硬碟的 。

以太坊不斷在提高自己GPSLimit。上次以太坊因為加密貓的出現,導致大面積擁堵,這是因為以太坊已經沒有辦法通過簡單的擴容方式解決TPS問題了,所以要採用一些新的技術演進來解決。比特幣如果遇到像以太坊一樣擁堵問題,無法通過簡單技術方案進行解決的話,大概需要到每秒100-500筆交易才會出現。

上圖是BTC全節點。以太坊全節點現在運行已經很困難了,比特幣全節點只有1萬多個,但是以太坊全節點依然有2萬多個。以太坊能給很多人提供智能合約,可以在上面做更加有創造力的事情,所以大家才願意運行以太坊的節點。


1990s年代尼克薩博提出

一個可以自動執行的計算機程序

接收和回應信息,接收和存儲價值,向外發送信息和價值

圖靈完備的語言


智能合約

公共區塊鏈平台

以太幣是其代幣

Ethereum Virtual Machine

點對點的合約

Vitalik Buterin 在2013提出

2014年ICO眾籌得以發展


外部賬戶和合約賬戶

每個賬戶有一個持久的KV存儲

交易從一個賬戶發往另一個賬戶

包含代碼代碼,就會執行,交易相關的數據作為參數

EVM執行交易的過程中,會消耗Gas

堆棧機器stackEVM虛擬機分為外部賬戶和合約賬戶,外部賬戶專門用來轉帳 。合約賬戶包含一些代碼,能在每個節點被執行,交易相關數據是它的參數。如果在合約裡面運行一個很長的代碼, 允許它一直運行的話,會有可能把整個系統資源耗死,所以它有一個Gas的概念,要是想運行東西,就必須付錢,當付的錢消耗完了,這個合約就執行完了, 如果Gas消耗完了就不執行了,有沒有結果就不關心了,這樣能保證了保證整個系統安全。


Solidity是以太坊使用的類似JavaScript的高級語言

以編譯的方式生成以太坊虛擬機代碼

數據的每一個狀態都可以永久存儲

強調合約或者函數執行的調用方式

一旦出現異常,所有的執行都將被回撤

Gas消耗完合約停止

Remix無需安裝的瀏覽器編譯器


ICO

ERC20是一套標準介面

錢包自動支持代幣

把ETH打到對應的合約地址上,自動獲得代幣ERC2.0本質是一套對應的介面,適應這個介面,就能完成ICO的過程。好處是把以太坊打到對應ICO合約地址上,就能自動獲取代幣,這對用戶來講比較簡單,所以有人在網上說5分鐘教你怎麼發token。


ERC721 Token

每一隻貓都是一種代幣

每一隻貓都是獨一無二的

每一隻貓都有自己的基因 加密貓也是一種代幣,加密貓最高成交的價格好像是1億多,每一個貓都獨一無二,因為天然是一種代幣,和token一樣,它還有自己的基因,這是遊戲的玩法了。


底層協議

礦池製造

礦池

交易所

錢包

媒體其中底層協議最關鍵。有一個說法,現在底層協議架構類似於98年的互聯網,當時大家做各種網路協議,HTTP協議等很多,現在的區塊鏈其實也是。


優秀的編程能力?Go,C/C?分散式協議?資料庫?編譯器?操作系統,內核?密碼學演算法


早期區塊鏈項目都是以開源為主,很少看到有閉源方式運行的,整個區塊鏈其實是運行在開源社區基礎上的,而區塊鏈項目本身又是一個開源的項目,希望區塊鏈項目未來能夠給開源社區做更多貢獻, 我們做的東西很多也都是開源的 。希望未來在能夠形成正向循環,開源社區給區塊鏈行業提供貢獻,區塊鏈行業產生更多的區塊鏈項目,區塊鏈項目本身又是開源的,又能給開源社區提供貢獻。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CryptoTech 的精彩文章:

TAG:CryptoTech |