智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  3月25日,BSN第二次開發者大賽正式啟動,本次大賽以“編寫基於多種底層框架的智能合約”為主題,開發者可基於FISCO BCOS等主流底層框架,結合業務場景設計、開發並部署智能合約。

  為了讓大家更好上手智能合約開發,區塊鏈服務網絡發展聯盟與FISCO BCOS開源社區共同推出“7個課時速成智能合約全能型開發”系列教程,助力開發者學習並熟悉合約開發,輕鬆應對此次大賽並拔得頭籌。

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  系列專題 | 超話區塊鏈之智能合約專場

  初探篇:智能合約的概念與演變

  作者:儲雨知

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  前 言

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  自2009年比特幣開啟區塊鏈時代以來,近10年裡,隨著技術與生態的發展,基於區塊鏈的分佈式應用(dapp)呈現出井噴的趨勢,而支撐著dapp的底層技術就是“區塊鏈+智能合約”。

  智能合約與區塊鏈的結合,普遍被認為是區塊鏈世界中一次里程碑式的升級。第一個結合了區塊鏈與智能合約技術的平臺--以太坊的誕生,被認為是開啟了"區塊鏈2.0"時代。

  什麼是智能合約

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  1996年,Nick Szabo在文章《Smart Contracts: Building Blocks For Digital Markets》中提出了智能合約的概念。

  所謂“合約”,就是條文、合同一類的東西,裡面記錄了發生的條件與對應執行的條款,以支持確權等操作;所謂"智能",就意味著自動化、可編程。

  所以,智能合約就是可編程的合同,也可以理解為一段自動執行的條文合同,在計算機中,就是一段自動執行的程序片段。它更易於合約保存,並且由確定的算法運行,給定輸入,就得到對應的輸出,極大保障了合約的執行力。

  以自動售貨機做類比,可以幫助我們更好地理解智能合約的核心特徵。

  當使用者選擇好要購買的貨物並完成支付,出貨邏輯就會被觸發,用戶就能得到想要的貨物,而這個過程不需要人工介入,節省了售賣貨物的人力成本。如果要破壞這個合約,就得物理破壞售賣機。像POS刷卡機、EDI(電子數據交換)等,也可作此種類比。

  智能合約與區塊鏈

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  智能合約在上世紀被提出,而區塊鏈2009年才誕生,就定義而言,智能合約與區塊鏈關係不大。

  那為什麼在這10年中,智能合約與區塊鏈卻產生了如此緊密的關聯?因為區塊鏈可以保證智能合約的不可篡改,不僅合約內容不可篡改,每次調用記錄亦不可篡改。

  智能合約產生價值的最基本前提是有一個強有力的底層介質用於儲存,讓其不可被物理破壞。

  然而,智能合約的本體是一份代碼,非常容易被篡改,如何為其提供強力的存儲介質就成了問題。這正好是區塊鏈擅長解決的——通過比特幣的實踐,證明了區塊鏈可以在分佈式環境下讓電子記錄不可被篡改。

  與此同時,智能合約也在反哺著區塊鏈,它極大地擴展了區塊鏈的業務場景。

  與智能合約結合後,區塊鏈不再服務於單一的貨幣支付,可以延申到生活中的方方面面。豐富的應用場景也對區塊鏈的能力產生了新的挑戰。

  區塊鏈2.0:以太坊的誕生

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  2009年誕生的比特幣,運用區塊鏈等技術來保證生態,開創了區塊鏈1.0時代。

  用戶可以通過腳本代碼來定製一些內容,例如如何解鎖一筆資金。這些腳本代碼會隨著交易一起保存,從而享有不可篡改的特質,並且是確定性的。所以從某種角度來說,這些腳本也可看作智能合約。可是它們並不好用。

  首先,這些腳本代碼不是圖靈完備的,這限制了實現的功能;其次,開發門檻較高,編寫複雜邏輯的體驗會很差,好比用JVM字節碼來寫程序。

  2013年,一個青年V神提出了以太坊,其核心是通過世界狀態對區塊鏈數據進行更新和驗證。以太坊與比特幣最大的不同在於可通過智能合約執行復雜的邏輯操作。

  在以太坊上,智能合約的語言是Solidity,它是圖靈完備且較為上層的語言,極大地擴展了智能合約的能力範疇,降低了智能合約編寫難度。

  正因為此,以太坊的誕生,也標誌著區塊鏈2.0時代開啟。隨後,智能合約技術逐步滲透了溯源、存證、供應鏈等多個業務場景。

  智能合約的現狀與前景

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  從編程角度而言,智能合約就是一段代碼。相比常規代碼,智能合約具有許多差別與限制,例如:

  單線程執行

  代碼執行會消耗資源,不能超出資源限制

  目前難以獲取鏈外數據,例如取得天氣信息、比賽結果等

  其他限制,如TPS

  這些特點使得目前智能合約生態以鏈上資源的治理為核心。就像以太坊上各式各樣的ERC標準與治理方案;EOS上有各種資源模型,比如CPU、RAM、兼經濟模型、Rex、Bancor協議等。

  顯然,就目前的生態而言,智能合約對現實世界的影響力有限。

  但事物總是在發展的。目前,已有許多致力於突破這些限制的研究,典型的有Oracle(諭言機,但常被稱為預言機),它允許智能合約和鏈外進行交互,這樣就能大大提高智能合約的使用場景,彷佛一臺電腦通上了網;再比如那些突破鏈自身性能瓶頸的嘗試,例如支付通道、跨鏈、plasma、rollup,它們都從不同角度打破安全與性能的枷鎖。

  毋庸置疑,智能合約將扮演著越來越重要的角色,將來隨著以太坊2.0的落地,也許會開啟新一個區塊鏈時代。

  智能合約技術

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  以太坊採用了Solidity作為智能合約語言,Solidity 是一門為實現智能合約而創建的高級編程語言,能在允許以太坊程序的節點上運行。該語言吸收了C++、JavaScript的一些特性,例如它是靜態類型語言,支持繼承、庫等。

  除了Solidity,每個平臺的智能合約技術也有所不同,接下來將從公有鏈、聯盟鏈作為切入,介紹其他平臺所採用的技術。

  公有鏈

  首先,不妨先認識三大公鏈的智能合約技術。

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  聯盟鏈

  除了公鏈,聯盟鏈也是重要的區塊鏈類型。比之公鏈,聯盟鏈共識的複雜度被大大縮減,因此具有更高的執行效率。

  聯盟鏈受企業級機構青睞,一般而言,相關機構之間會形成聯盟,通過聯盟鏈來共享數據。聯盟鏈可覆蓋供應鏈金融、司法存證、溯源等多種場景,未來還會與IOT、AI等技術結合。

  在當今聯盟鏈生態中,除去採用chaincode的Fabric,大部分平臺都採用Solidity作為智能合約語言,FISCO BCOS即是如此。

  時下,Solidity可謂佔據了智能合約的C位,掌握Solidity是學習智能合約和區塊鏈的重要一環。後面系列也將對如何用Solidity編寫、運行以及測試智能合約作深入介紹解析,敬請關注。

  除了Solidity,WebAssembly、Libra的Move等一些智能合約語言也在發展中,可以保持關注。

  智能合約運行分析

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  下面將分享一個基礎的智能合約:HelloWorld。

<code> pragma solidity 

0.4

.22

; contract HelloWorld{ uint

private

_num;

function

store

(uint256 num)

public

{ _num = num; }

function

get

()

public

view

returns

(uint256)

{

return

_num; } }/<code>

  這段Solidity代碼的功能是存取_num字段。該字段被稱為“狀態變量”,會由區塊鏈持久存儲。

  用戶可以將這段代碼部署在以太坊或類似的區塊鏈上,部署成功就意味著該智能合約不可再被修改,只要底層區塊鏈不被銷燬,這段合約就一直存在。任何人都可通過“合約地址”來調用該合約接口,每次調用信息都會被記錄在鏈上。

  在講解這段代碼如何運行之前,我們先回顧下傳統java程序的運行方式。

  首先,用戶編譯完java代碼後,會以字節碼的形式保存在磁盤上;然後用戶會調用程序,這由JVM來託管執行;程序執行期間可能會通過日誌來記錄調用參數,也可能會和磁盤進行IO。

  Solidity的執行與此類似。不同的是介質由硬盤換成了區塊鏈,由單機變為分佈式。

  代碼部署後,以字節碼的形式存儲在每一個節點上。當用戶要求調用某個函數時,調用請求將會被囊括在交易中,並被打包到某個區塊上,一旦全網對該區塊形成共識,就意味著調用是合法的。

  接下來,EVM會來調用字節碼,它負責存取底層的狀態變量,好比傳統編程的IO。

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  光從代碼來看,合約開發似乎不過如此,單個合約只需要圍繞著字段進行操作,對於很多簡單業務而言,不過是CRUD而已。

  但其複雜性也恰恰在於此,合約在區塊鏈環境上執行,是不可修改的。

  所以如果出現了bug,就必須部署新的合約,這對於合約的可維護性提出了挑戰。並且,一旦業務複雜起來,容易出現安全漏洞,導致鏈上資產損失。同時,還要考慮完成代碼編寫、邏輯執行、數據存儲的成本問題。

  綜上所述,寫合約不難,但寫好合約,卻需要一定功底。

  結 語

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  本文介紹了智能合約的概念與歷史演變。

  智能合約是上世紀提出的技術,在區塊鏈浪潮下煥發出了新的生機。反之,智能合約廣泛的應用場景,又極大的促進了區塊鏈發展。

  學習智能合約,推薦選擇Solidity語言,因為其具備一些傳統語言的特徵,同時,執行環境完全基於區塊鏈,實際業務開發的體驗與以往的編程體驗會有所差別。

  讀者可以嘗試基於FISCO BCOS快速搭建區塊鏈環境,部署一個最簡單的合約,熟悉部署、調用方式,再進一步走入Solidity的世界。

智能合約初探:概念與演變 | FISCO BCOS系列開發教程

  FISCO BCOS的代碼完全開源且免費

  下載地址↓↓↓

  
https://github.com/FISCO-BCOS/FISCO-BCOS

  

  文章來源於FISCO BCOS開源社區 ,作者儲雨知

  本文來自互聯網,如有侵權請與我們聯繫刪除。


分享到:


相關文章: