1. 程式人生 > >區塊鏈基礎(簡單學習)

區塊鏈基礎(簡單學習)

 

 

摘要:2008年,區塊鏈技術走上了舞臺。其因去中心化,透明可信等特點受到了科技界的關注,成為了近幾年熱議的話題。2014年,以太坊平臺的出現將區塊鏈技術推到了新的高度。區塊鏈技術採用了分散式賬簿,點對點傳輸,數字加密等技術,杜絕了傳統交易模式中的資料造假等行為,從而構建了可信的交易環境和為可信社會奠定了基礎。隨著智慧合約的出現,程式碼可以按照既定的邏輯自動觸發執行無需人為干預。而現今的區塊鏈應用已經從金融延伸到了物聯網,智慧製造等眾多領域。因此,區塊鏈技術將為新一代的網路資訊科技帶來發展,挑戰和機遇。

區塊鏈技術將給我們的生活帶來巨大的改變,所以本文的重點就是對區塊鏈技術進行研究,並對區塊鏈技術進行應用。首先對國內外區塊鏈技術的發展現狀進行學習,對區塊鏈的分散式賬簿,共識機制等核心技術進行研究。最後基於本文中所講到的以太坊平臺,搭建一個去中心化的投票應用,該應用中相關的操作通過智慧合約來自動執行。

關鍵詞:區塊鏈;以太坊;智慧合約;分散式賬簿技術

 

 

Abstract : In 2008, blockchain technology took the stage. Due to the decentralization, transparency and credibility, it has attracted the attention of the scientific and technological community and has become a hot topic in recent years. In 2014, the emergence of the Ethereum platform pushed the blockchain technology to a new level. Blockchain technology uses distributed ledger technology(DLT), peer-to-peer transmission, digital encryption and other technologies. Eliminate data fraud and other behaviors in the traditional trading model, thus building a credible trading environment and laying the foundation for a credible society. With the advent of smart contracts, code can automatically trigger execution in accordance with established logic without human intervention. Today's blockchain applications have extended from finance to the Internet of Things, smart manufacturing and many other areas. Therefore, blockchain technology will bring development, challenges and opportunities for a new generation of network information technology.

Blockchain technology will bring great changes to our lives, so the focus of this paper is on the research of blockchain technology and the application of blockchain technology. Firstly, it studies the development status of blockchain technology at home and abroad, and studies the core technologies such as distributed accounting books and consensus mechanisms of blockchain. Finally, based on the Ethereum platform mentioned in this article, build a decentralized voting application, in which the relevant operations are automatically executed through smart contracts.

Key Words:Blockchain; Ethereum; Smart Contract; DLT

 


目錄

第一章 緒論... 1

1.1 背景和意義... 1

1.2 國內外現狀... 1

1.2.1 區塊鏈在開源領域發展現狀... 1

1.2.2 區塊鏈產業聯盟發展現狀... 2

1.2.3 國內外區塊鏈政策現狀... 2

1.3 主要研究內容... 2

1.4 論文章節安排... 3

1.5 本章小結... 3

第二章 相關理論和技術... 4

2.1 區塊鏈的概念和特徵... 4

2.2 區塊鏈的核心技術... 5

2.2.1 分散式賬簿... 5

2.2.2 共識機制... 5

2.2.3 智慧合約... 7

2.2.4 密碼學... 7

2.3 本章小結... 9

第三章 以太坊介紹... 10

3.1 以太坊主要特點... 10

3.2 以太坊核心概念... 11

3.3 本章小結... 13

第四章 去中心化的應用示例實現... 14

4.1 投票系統簡介... 14

4.2 投票系統的智慧合約開發和部署... 16

4.2.1 智慧合約開發介紹... 16

4.2.2 開發工具介紹... 16

4.2.3 智慧合約編寫和部署... 17

4.3 實現投票平臺... 18

4.4 實驗結果與分析... 20

4.4.1 功能測試... 21

4.4.2 結果分析... 22

4.5 扶貧資金流管理系統... 23

4.5.1 系統簡介... 23

4.5.2 智慧合約開發... 24

4.5.3 實現管理介面... 24

4.6 本章小結... 25

總結與展望... 26

參考文獻... 27

 

 

 

第一章 緒論

1.1 背景和意義

2008年,中本聰發表文章《比特幣:一種點對點電子現金系統》[1]其內容針對現階段網際網路交易進行探討,指出在交易中缺乏信任的問題。雖然有可信任第三方的介入可以解決部分信任的問題但同時也增大了不必要的成本和交易規模。文中說明我們急需要一種方便快捷而且安全的電子支付交易系統,該系統允許互不相識的兩方按照約定進行交易。其中所描述的區塊鏈技術是將特定的資訊看做一個區塊,其中包含交易的各種資訊和前一個塊的特徵等。通過加密的方式來保證資料絕對性的安全,並形成一個分散式的總賬。

區塊鏈可以分為三種:公共鏈,聯盟鏈和私有鏈[2]。公有鏈,是對外開放的,不需要身份驗證等操作。聯盟鏈則是專供某些組織或者機構使用,本身並不是一個開放的系統。私有鏈則是由某個機構所掌握的。

根據區塊鏈對接型別的不同,其可分為三種類型:單鏈,側鏈和互聯鏈[3]。單鏈是指不依靠其它鏈就可以執行的區塊鏈系統,這些區塊鏈系統有完整的元件模組,自成一格體系。側鏈是指交叉鏈技術,也就是說不同的區塊鏈之間進行安全地轉換。互聯鏈是連結不同的區塊鏈設施,這些區塊鏈設施之間可以進行資料的交換。比如電商、物流和銀行之間的聯盟鏈互相交易。

以太坊在其區塊鏈技術中融入了智慧合約。通過部署智慧合約,我們就將幾方的約定上傳至區塊鏈中,並同步到各個節點。當有人觸發某個事件的時候,智慧合約會由以太坊虛擬機器自動的執行。因此,智慧合約不僅能有效的對資訊作出處理,還可以它可以保證合約不受外界干擾,正常執行。

1.2 國內外現狀

1.2.1 區塊鏈在開源領域發展現狀

區塊鏈技術在開源領域發展迅速,以下簡單介紹兩個區塊鏈在開源領域的應用。

超級賬本專案是Linux基金會於2015年發起的,目前吸引了許多公司加入。其中包括IBM,華為,Redhat等世界五百強公司。該專案的目的是建立一個用於簡化業務流程的開放的平臺。

企業以太坊聯盟是成立於2017年2月。在2018年2月的時候以太坊聯盟的會員就超過了150位。該聯盟旨在改善區塊鏈的安全性和可擴充套件性,以及開發一種標準和技術。就目前來看以太坊聯盟鏈仍舊不能滿足企業需求,各個企業仍在積極探索如何更好的應用聯盟鏈。

1.2.2 區塊鏈產業聯盟發展現狀

R3區塊鏈聯盟成立於2015年,由全球多家有實力的國際銀行參加,其目的是制定區塊鏈在金融行業應用的標準。

區塊鏈貨運聯盟,由全球100多家物流公司在2017年共同成立該聯盟,旨在探討如何提高物流的透明和效率,通過使用新的區塊鏈技術來整合貨運和物流來降低整個過程中的成本。

運營商區塊鏈聯盟,該聯盟是由Sprint和softbank於2017年成立的,其旨在解決多個子系統可介入區塊鏈平臺之間賬薄共享的問題。

可信區塊鏈聯盟,由華為等100多家中國企業和中國資訊研究院共同成立該聯盟,旨在共同推進區塊鏈技術在產業中的應用。

1.2.3 國內外區塊鏈政策現狀

(1) 國外區塊鏈相關政策

日本政府早在2017年就宣佈發展區塊鏈專案,並在3月、4月、7月出臺的多項關於區塊鏈和電子貨幣的政策。其中包括數字資產如何應用,加密貨幣合法化且納入法律體制中[2]。為了推廣這項技術,日本政府還決定使用比特幣交易不需要繳納任何的消費稅。

韓國政府在2017年將比特幣形式的匯款方式合法化,並禁止比特幣的匿名交易[2]。次年,ICO合法化,併成立區塊鏈相關協會,協調區塊鏈在各領域的發展。

歐洲央行早在2016年就公開宣佈了探索區塊鏈技術的計劃,並在6月釋出了分散式賬簿技術的評估報告,該報告主要討論了區塊鏈技術如何應用在證券市場上。兩年後,歐盟22個國家共同建立歐洲區塊鏈聯盟[2]

(2) 國內區塊鏈相關政策

我國在2016年至2018年之間釋出並提出的多項指導意見和建議。其目的是提出我國區塊鏈技術的標準化路線和技術發展路線。研究區塊鏈技術的試點應用,並建立基於區塊鏈技術的信用評價機制[2]

浙江省在2016年至2017年之間釋出了多項指導意見。其中包括引入區塊鏈企業進駐,加快區塊鏈等前沿領域研究和產品創新,支援金融機構探索區塊鏈等新型技術,加快區塊鏈在重點領域的推廣和應用等[2]

貴州省在2017年釋出了多項措施。其中明確說明將區塊鏈列為三個重點發展方向之一,支援鼓勵區塊鏈企業及其相關機構入駐,從入駐開始就為企業和人才提供各種各樣的補貼[2]

1.3 主要研究內容

本課題是對區塊鏈技術進行研究,主要是以以太坊為例對其智慧合約進行學習並剖析。通過學習的內容設計並實現一個簡單的去中心化的應用。因此,本文工作如下。

(1) 對區塊鏈使用到的部分技術進行學習和研究。

(2) 以以太坊為例對其智慧合約進行學習。

(3) 基於現有的知識,完成一個簡單的智慧合約應用。

1.4 論文章節安排

本文章由四個章節組成,各章節內容安排如下:

第一章  緒論。本章說明了研究課題的背景和意義,並對國內外的各組織、商業公司以及政府對區塊鏈的政策進行了闡述。最後說明了本課題研究的主要內容以及各章節的安排和本章節的總結。

第二章  相關理論和技術。本章對區塊鏈使用的一些技術進行闡述,首先介紹了區塊鏈的概念和特徵,隨後介紹了其使用的核心技術例如分散式賬簿,共識機制,密碼學相關內容。

第三章  以太坊介紹。本章對以太坊的特點和核心概念進行了簡單的介紹,其中的資訊有助於對區塊內的資訊進行理解。

第四章  去中心化的投票APP示例實現。本章基於以太坊平臺,對智慧合約進行開發。在主機上通過模擬軟體模仿出真實環境下的區塊鏈平臺,然後在平臺上部署智慧合約,並編寫視覺化的操作介面。本章的重點就是實現從開發到使用智慧合約的完整過程。

總結與展望。對本文的主要內容以及成果和不足進行總結,並且對未來區塊鏈的應用進行簡單的闡述。

1.5 本章小結

本章對課題的背景和意義進行了闡述,解了現在區塊鏈技術的大環境和現狀,以及國內外對區塊鏈技術的態度。最後,對文章各個章節的內容進行安排。

第二章 相關理論和技術

2.1 區塊鏈的概念和特徵

如圖2.1所示。區塊鏈中第一個區塊稱為創世塊,裡面包含一些初始資訊,之後的每一個新產生的區塊都會按照時間順序連結到前一個區塊之後。後一個區塊包含有前一個區塊的特徵資訊,從而保證了會形成唯一的一條鏈。每一條鏈都會儲存到每一個節點上,也就是說每個節點的區塊鏈資訊都是一樣的,從而實現了去中心。當需要產生一個新的區塊,需要得到全網大於一半的節點確認才會生效,並廣播到全網的節點。

交易1

交易2

區塊頭

父區塊雜湊值

區塊頭

第1個區塊

交易1

交易2

區塊頭

父區塊雜湊值

區塊頭

第2個區塊

初始資訊

區塊頭

 

區塊頭

第0個區塊

交易1

交易2

區塊頭

父區塊雜湊值

區塊頭

第n-2個區塊

交易1

交易2

區塊頭

父區塊雜湊值

區塊頭

第n-1個區塊

交易1

交易2

區塊頭

父區塊雜湊值

區塊頭

第n個區塊

 

 

 

 

 

 

 

 

 

 

 

 

 

圖2.1區塊鏈資料結構示意圖

區塊鏈技術有以下幾點特徵來保證資料的安全。

(1) 不可篡改。它不同於基於硬體技術實現的不可篡改,我們在生活中見到的只讀CD就是一種基於硬體技術實現的不可篡改。區塊鏈技術是合理的使用了密碼學,獲取了區塊的唯一不可變的特徵來實現不可篡改的。一旦修改了任意的一個區塊的任意內容,該區塊的特徵就會改變。這條鏈就從此處斷開了,我們稱之為“廢鏈”。對於廢鏈節點會毫無顧忌的拋棄,然後從其它節點同步一條完整的正確的鏈。只有當超過百分之五十的節點同時受到攻擊,在區塊鏈的末端加上一條非正常產生的鏈這時候該區塊連才會被修改,所以不可篡改更像是難以篡改。

(2) 去中心化。指的是區塊鏈並非依賴於某幾個節點,這也就保證了沒有人可以去操作資料。但是在某些情況下,比如說溯源,它如果從源頭就是錯的,那就會一直錯下去。也就是說區塊鏈並不會去建立一個信任,而是一個信任的載體,資料從上鍊的那一刻就會保持不可更改的狀態。

(3) 賬本公開。公開賬本,則是表示所有的參與者都可以訪問賬本的許可權。究其原因就是因為每一個節點都要去校驗資料資訊的有效性,所以參與記賬的節點必須要有權去訪問歷史賬本。這實際上帶來了一個問題,就是說所有的資訊都必須要公開,但是要去驗證公開的賬本不代表要去公開賬本內容,所以未來會有很多加密演算法和加密的形式運用到區塊鏈技術中。如零知識加密,門加密等,最終實現驗證密文就可以對歷史賬本進行驗證。這樣就能達到歷史賬本是公開的而賬本的內容也就是隱私部分可以實現不公開。

(4) 共同維護。共同維護指的是多方參與的共同維,此處的多方指的是進行記賬的不止一方。也就是說每個記賬方都要按一定的規則來主導記賬,具體規則根據共識機制的不同會有差異。但無論怎麼差異最終所有的記賬方都要去對資料進行驗證,全部通過才能算完成。

2.2 區塊鏈的核心技術

2.2.1 分散式賬簿

分散式賬簿技術,用於在各個網路成員間進行資料共享、同步資料的一種去中心化的技術。網路中的每一個成員都有權利獲取賬簿的內容,也有義務對賬簿進行維護。

傳統的分散式儲存往往是由單一中心去控制,然後將龐大的資料進行切割,分解之後儲存在伺服器中。在TB及資料非常常見的今天,服務商不得不增大資料中心的規模。如果使用分散式賬簿技術,我們可以保證資料是共同維護,共同決策[4]。每個節點都是平等的,節點和節點之間通過共識來達到資料一致,互相之間不會產生影響。這樣做不但降低了維護成本,而且使得被攻擊的可能性越來越低。

2.2.2 共識機制

區塊鏈是一個由多個節點構成的一個可溯源、防篡改、可信任的分散式系統,分散式的系統需要保持資料的一致性。通過使用共識演算法,就可以保證資料的一致性。而現階段共識演算法多種多樣有PoW,PoS等。而其中使用較多的就是PoW和PoS,我們對這兩個做詳細說明。

(1) PoW工作量證明

PoW演算法。其本質是通過計算機計算一個已知的結果,當猜測到的數字雜湊值滿足設定的難度的時候就會產生一個區塊。

雜湊問題是具有不可逆轉的特點,也就是說你用一串數字可以得到這串數字的雜湊值,但是你拿到雜湊值卻不能通過計算得出這串數字。唯一能採取的方法就是,使用一個數字從0開始計算每個數字的雜湊值,直到得到的雜湊值與擁有的是一樣的。就目前而言,只能通過大量的計算才能算出雜湊值。然而大量的計算需要一定時間的積累,這也就是我們的出塊速度了。

出塊速度不僅僅和採用的雜湊演算法有關係,還和難度值有關係。比特幣的數量是固定的,而且每年全網的算力都是會有變化的。假如說某區塊鏈的PoW演算法是全網的算力每40分鐘產生一個區塊,並以4周為一個週期去調整難度值,這樣計算下來每四周期望生成1008個區塊。如果實際產生的區塊大於1008個就會增加難度值,如果少就減少難度值。公式可總結為如下示:

新難度值 = 舊難度值 ×(產生一個區塊實際所需的時間平均值)

在真實的情況下,所有的節點都會去按照這個難度值去同時計算,那麼必定會面臨分叉的情況。某一個節點在生成新的合法區塊之後,會向所有已知的節點廣播這條資訊,當經過一半以上的節點認證後可以認為是有效的塊。在這個過程中,不僅會產生分叉,還會產生一條最長的鏈,而這個最長鏈才是大家的共識才是有效的被大家認可的。就拿排隊出門舉個例子,在只有一個出口的情況下,現有一條較長的隊伍A,B,C,D。突然間在B旁邊站了一個人E,形成第二條隊伍。這時候有共識的人都不會承認E,C,D這條隊伍是有效的。新來的人F也會因為共識的原因加入較長的隊伍。如圖2.2所示:

A

B

C

D

F

E

 

 

 

 

 

 

圖2.2區塊鏈共識示意圖

這樣一來E,C,D這條鏈就是被廢棄了,這代表著這個節點之前所付出的努力花費的精力一文不值了。所以會出現了礦池,大家一起挖礦,挖到的礦按照每個使用者貢獻來合理分配。

(2) PoS[5]權益證明

PoS權益證明是在2013年提出的。之前介紹的PoW它的缺點就是平白無故的耗費算力,有些人認為這是一種浪費,從而實現了一種類似於股權機制的演算法稱之為權益證明。

其過程類似於資產的抵押,當你是一個人富有的人,這時候你抵押了很多東西,從而得到了很多的股份,你獲取記賬權的可能就越大,只要你是一個合法的記賬者,在記賬中產生的服務費就是你的,如果你是一個惡意的記賬者,那麼在記賬的過程中可能要承擔損失抵押的風險。

在記賬的過程中PoS演算法也會根據節點的幣齡(節點各個數字貨幣的持有時間總和)來調整挖礦的難度,也就是說“年輕”的節點會更容易挖到礦,“年老”的節點會更難挖到礦。

一般來說,使用PoS演算法的區塊鏈會更難偽造區塊。使用PoW演算法的區塊鏈只要黑客的算力超過全網的一半便可以隨意的攻擊區塊鏈。而使用PoS演算法的區塊鏈一般來說要掌握全網三分之一的資源才有可能左右該區塊鏈。在攻擊的過程中不僅消耗的成本遠遠大於集中算力的攻擊而且攻擊主鏈時自己的資源也會被消耗掉。

值得一提的是以太坊在被黑客攻擊之前使用的是PoW演算法,之後硬分叉,使用了一種改良的PoW演算法。但是由於區塊鏈的特性使用PoW演算法的以太坊程式得以保留,稱之為以太經典。這從側面也證實了區塊鏈技術的穩定性,不能被消滅,只能硬分叉。

PoW演算法和PoS演算法,其主要是用於公有鏈的。所以其共同點就是對於參與的節點有一定的獎勵,根據各個節點做出的貢獻不同,發放不同量的代幣。它也會針對作惡的節點去進行懲罰。在交易的過程中還會產生gas,來獎勵承擔交易的節點。而聯盟鏈或私有鏈他們沒有這種鼓勵大眾參與的需求,而是需要用到絕對可信的資料。所以他們的節點可以認為都是私有的,既然是“自己人”當然可以去省略發放代幣或者產生gas的過程。換句話說,私有鏈和聯盟鏈的節點不需要通過記賬來獲取激勵,它們更多的是維持系統穩定執行,資訊絕對正確的義務。

2.2.3 智慧合約

智慧合約是由尼克薩博在20世紀末提出來的。他認為智慧合約是一套使用數字定義並描述合約內容的可由計算機自動執行一種合約[6]。雖然智慧合約早早的就提出但是由於技術的原因,遲遲沒有實現。2008年比特幣的出現使得智慧合約有了一個可信的載體使我們看到了智慧合約的雛形。比特幣中的腳本系統,就可以看做是一個簡單的智慧合約系統。

從2016年開始,智慧合約技術逐漸成為行業內關注的焦,引起了社會各界的關注。智慧合約的生命週期一般分為三分階段:定義合約,釋出合約,執行合約[7]。如圖2.3示。以以太坊為例,在定義階段,多方使用者共同制定合約,確定合約內容。之後編譯為可由以太坊虛擬機器識別並執行的特有的二進位制格式,同步到每一個節點。每次有事件觸發合約的時候,以太坊虛擬機器都會自動的執行合約。

方法1

方法2

定義合約

編譯

上傳

釋出合約

事件1

事件2

執行合約

 

 

 

 

 

 

圖2.3智慧合約生命週期

2.2.4 密碼學

在區塊鏈技術中,我們使用了大量的密碼學技術,主要包括:雜湊演算法,非對稱加密等[8]。這些數字加密演算法,保證了資料防篡改和機密性的同時也可以對使用者身份進行認證,對使用者操作進行簽名。以下通過這幾個方面向大家介紹密碼學在區塊鏈中的應用。

l 防篡改

雜湊函式又稱為雜湊函式,它具有一下這些特點。

(1) 易壓縮:任意長度的輸入都得到一定長度的輸出。

(2) 易計算:對於給定的物件m其雜湊值都是較為容易計算的。

(3) 單向性:得到雜湊值得過程不可逆。

(4) 抗碰撞性:弱抗碰撞性,有可能出現兩個不同物件雜湊值相同。強抗碰撞性,每個物件的雜湊值都不相同。

(5) 高敏感性:輸入物件的內容產生任何的變化該物件的雜湊值就會發生改變。

在區塊鏈中,每一個區塊裡包含的內容都有以上的幾點特性。這就代表了每個區塊的“基因”都是獨一無二且相互關聯有規律的。每一個區塊除了含有自身獨有的部分資訊外還含有上一個區塊特徵資訊。這也就保證了整個區塊鏈是有高敏感性的,當其中一個區塊的內容發生變化,該區塊的雜湊值改變。此時這條鏈就被看做是一條無用的鏈,節點會自動同步一條完整的鏈。

l 機密性

機密性主要由對稱加密和非對稱加密來解決,而在節點通訊的過程中為了防止竊聽,還需要用到TLS加密技術。

(1) 對稱加密:通過同一個祕鑰進行加解密操作。其優點是速度快,安全性較高。對稱加密可以分為分組密碼和序列密碼兩大類。分組密碼主要特徵就是將一段長的需要加密的資料,切分為定長的塊來進行加密。序列密碼則是以字元為單位進行加密。綜上來看,對稱加密需要提前分發祕鑰而且比較適合對資料量龐大的物件加密。

(2) 非對稱加密:通過不同的祕鑰來進行加解密操作。分別稱之為公鑰和私鑰,這裡要注意的是公鑰和私鑰是同時生成的,且是唯一的一對。其中公鑰是公開的,私鑰是私有的。我們通過舉例來說明非對稱加密是如何使用的。

第一步:王先生生成一對祕鑰,公鑰為W1,私鑰為W2。趙先生生成一對祕鑰,公鑰為Z1,私鑰為Z2。

第二步:王先生與趙先生交換公鑰。此時王先生擁有W1,W2,Z1。趙先生擁有,W1,Z1,Z2。

第三步:王先生用自己的私鑰W2和趙先生的公鑰Z1對資料進行加密,並傳輸給趙先生。

第四步:趙先生用自己的私鑰Z2和王先生的公鑰W1對收到的資訊進行解密。

如圖2.4示,公鑰加密私鑰解密示意圖。

公鑰

(3,33)

私鑰

(7,33)

明文

(2)

明文

(2)

23%33=8

公鑰加密

87%33=2

私鑰解密

密文(8)

密文(8)

密文傳輸

 

 

 

 

 

 

 

 

圖2.4公鑰加密私鑰解密示意圖

(3) TLS加密:TLS加密是一種對稱加密和非對稱加密相結合的加密演算法。究其本質就是利用非對稱加密安全地特點,去傳輸一組對稱加密的祕鑰。這樣一來,既可以使祕鑰不洩露,也可以保證對資料快速的進行加密和解密。

l 身份驗證

身份驗證主要用到了數字證書。我們使用的是TLS加密傳輸資訊,這種方法雖然能夠安全地將資訊從一個節點傳送到另一個節點,但是沒有辦法保證對通訊對端的信任,所以這裡首先要對其進行身份驗證。

2.3 本章小結

本章主要介紹區塊鏈相關的技術和概念。首先介紹了區塊鏈的概念和它的部分特徵。其次闡述了區塊鏈的分散式賬簿,共識機制,智慧合約和密碼學的內容。通過對上述的內容進行學習,為進一步瞭解以太坊做準備。

第三章 以太坊介紹

以太坊專案,其本質上是一個區塊鏈開發平臺[9]。通過使用該平臺,開發者可以快速的開發出去中心化的應用。在這個平臺上,合約會由計算機按照內容來嚴格的執行,不會受到第三方的干預。區塊鏈的架構模型如圖3.1示。

應用層

可程式設計貨幣

可程式設計金融

各種應用

合約層

指令碼程式碼

演算法機制

智慧合約

激勵層

發行機制

分配機制

共識層

PoW

PoS

……

網路層

P2P網路

傳播機制

驗證機制

資料層

時間戳

雜湊函式

……

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

圖3.1區塊鏈架構模型

3.1 以太坊主要特點

以太坊和比特幣由很多類似的地方,兩者都使用的是公有鏈,網路上的每一個使用者都可以接入,任何接入的使用者都要負責維護區塊鏈。

以太坊區塊鏈還具有以下特點。

(1) 擁有圖靈完備的智慧合約。可通過多種語言編寫合約,並通過EVM執行。

(2) 叔塊獎勵機制,降低礦池優勢。

(3) 採用賬戶系統和世界狀態,而不是UTXO,容易支援更復雜的邏輯。

(4) 通過Gas限制程式碼執行指令數,避免迴圈執行攻擊。

(5) 現階段的採用的變種的PoW演算法,並計劃在未來使用PoS演算法。

3.2 以太坊核心概念

以太坊專案在比特幣網路核心的思想之上又提出了許多具有創意的想法。其中就包括智慧合約、賬戶、燃料等。

(1) 智慧合約

以太坊的智慧合約可以使用solidity語言進行編寫,使用這種簡單的程式語言可以降低智慧合約的編寫難度。智慧合約編寫完成後通過編譯器編譯為只有以太坊虛擬機器可以識別並執行的特殊二進位制檔案,通過客戶端將智慧合約上傳至區塊鏈中。

舉個例子,可以使用以太坊的智慧合約來保證投票的公平公正。在以往的投票應用中,或許以微信為平臺,或許自己構建一個新的應用,這些應用都是有中心伺服器的。這就代表資料可以很容易的被篡改,或破壞。在使用智慧合約編寫的投票應用中,所有的操作都是之前定義好的,而且合約內容是不可以被更改的。只能通過定義的方法去訪問合約中資料,進行投票或其它操作。

(2) 賬戶

以太坊使用賬戶來儲存系統狀態資訊,需要時候的時候直接進行讀取[10]。賬戶模型示例圖如圖3.2示。而比特幣中使用UTXO模型來儲存狀態資訊,當需要使用的時候再去溯源得到最終狀態。UTXO模型如圖3.3示。具體來看以太坊賬戶可分為兩種型別:合約賬戶和外部賬戶。它們兩個的關係是呼叫和被呼叫的關係。外部賬戶即是以太幣的擁有者指的是某個人。合約賬戶儲存的是合約程式碼,只能由外部賬戶來呼叫。當合約賬戶被呼叫的時候,其合約程式碼在以太坊虛擬機器中自動執行並消耗一定了的燃料。

狀態1

賬戶3

以太幣1000

賬戶2

以太幣1000

賬戶1

以太幣1000

狀態2

賬戶3

以太幣1000

賬戶2

以太幣1010

賬戶1

以太幣990

From:賬戶1

To:賬戶2

Value:10

Sig:7fsa7xgdx

交易:

 

 

 

 

 

 

 

 

 

 

 

圖3.2賬戶模型示意圖

 

 

 

 

 

 

 

TX1

INPUT()

OUTPUT1()

OUTPUT2()

TX3

INPUT()

OUTPUT1()

TX2

INPUT()

OUTPUT1()

TX4

INPUT()

OUTPUT1()

d

TX5

INPUT()

OUTPUT1()

100K

30K

20K K

10K K

20K K

 

 

 

 

 

 

 

 

 

   

 

 

 

 

圖3.3 UTXO模型示意圖

 

(3) 交易

交易本質上是訊息資料的傳輸,而訊息資料又是由多個引數組合而成的。通過多個引數,就可以準確的描述一個交易。一個交易中包含的資訊如表3.1示。

表3.1交易資訊表

欄位名

含義

to

目標賬戶地址資訊

value

指定轉移的以太幣的個數

nonce

交易相關的字串

gasPrice

執行這項交易所需要的燃料價格

startgas

交易消耗的燃料最大值

signature

使用者簽名信息

 

出於智慧合約的便利考慮,以太坊採用了賬戶的模型,交易狀態可以實時儲存到賬戶中。而比特幣中的UXTO模型,必須回溯整個歷史。UXTO模型和賬戶模型的對比如表3.2示:

表3.2 UXTO模型和賬戶模型對比表

特性

UXTO模型

賬戶模型

狀態查詢和變更

需要回溯歷史

直接訪問

儲存空間

易用性

難處理

易於使用和處理

安全性

需要防止被攻擊

可回溯性

可以回溯歷史

不可回溯歷史

 

(4) 以太幣

以太幣是為了獎勵記賬的節點而產生的一種代幣,其主要目的是作為區塊鏈網路中的通用貨幣來支付礦工和購買燃料。

(5) 燃料

燃料是執行智慧合約所必須的,當燃料耗盡時,智慧合約自動終止並回滾狀態。也就是說,燃料限制了智慧合約可執行命令的上限。

以太幣的價格是浮動的,但是燃料的費用是固定的。這就需要以太坊網路根據以太幣的價格動態的調整燃料和以太幣之間的轉化關係。

3.3 本章小結

本章節主要對以太坊專案進行介紹。並對以太坊中的智慧合約,賬戶,交易,以太幣,燃料等概念進行闡述。

 

 

第四章 去中心化的應用示例實現

本章內容是基於前幾章所講的技術,實現去中心化的投票系統和扶貧資金流管理系統。通過編寫應用,來演示如何從零編寫並部署一個智慧合約。通過例項,來了解如何通過客戶端與智慧合約進行互動。

4.1 投票系統簡介

該系統基於前幾章所述的相關概念,實現一個去中心化的投票平臺。去中心化投票系統流程圖如圖4.1所示。去中心化的投票系統主要分為以下幾個階段:使用者在去中心化投票系統平臺進行註冊,之後對密碼加密並以檔案的形式儲存到本機的指定位置。註冊完成後,進行賬號和錢包地址的繫結。如果沒有錢包,則可以進行申請,每一個賬戶會預設由一定量的以太幣。註冊錢包後,便可以進行投票操作。選擇想要投票的物件,點選投票按鈕,再次確認投票即可完成投票操作。在此之後需要等待一段時間,當節點確認之後便可以獲取到投票資訊。

獲取錢包