最小可行性區(qū)塊鏈設(shè)計系列:Day 8 智能合約

前言

《最小可行性區(qū)塊鏈設(shè)計系列》的第七講(http://www.reibang.com/p/0cd9c04ac744 ) 討論了以太坊的重要數(shù)據(jù)結(jié)構(gòu)PatriciaTrie箕宙,本文繼續(xù)討論智能合約(Smart Contract)的原理與實現(xiàn)钠怯。

本文設(shè)計了一種簡單的智能合約語言Kong Lang涉瘾,代碼地址:(https://github.com/qikh/kong-lang) (開發(fā)語言為Kotlin,更簡潔的Java)

正文

智能合約的本質(zhì)就是存儲并運行在區(qū)塊鏈上的程序模塊兵志,其運算得到區(qū)塊鏈全網(wǎng)的執(zhí)行汤功,并且就輸入和輸出數(shù)據(jù)達成全網(wǎng)共識柏靶。因其程序形態(tài)而被成為“智能”弃理,因其全網(wǎng)共識而被稱為“合約”。

比特幣(BitCoin)設(shè)計了簡單的腳本系統(tǒng)屎蜓,支持有限的指令集(OP CODE痘昌,類似匯編語言),借助堆棧的方式進行計算炬转,這個腳本系統(tǒng)可以看做智能合約的雛形辆苔。例如,比特幣的交易就通過以下腳本語言實現(xiàn):

<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

以太坊在此基礎(chǔ)上扼劈,大大增強了腳本語言的指令集驻啤,計算方式仍然是堆棧的方式。以太坊設(shè)計了功能強大的虛擬機(VM)來執(zhí)行腳本語言荐吵,每一個以太坊的客戶端都可以看成一臺虛擬電腦骑冗,能夠執(zhí)行比較復(fù)雜的運算。在指令集的基礎(chǔ)上先煎,以太坊社區(qū)還設(shè)計了Solidy(類Javascript)和Serpent(類Python)的高級編程語言贼涩,這些高級語言的編譯器會將程序編譯成基礎(chǔ)指令集,然后保存到以太坊上薯蝎,每個合約(程序)都會生成一個唯一的地址遥倦,用戶通過向合約地址發(fā)送交易流水(Transaction)的方式來執(zhí)行合約。

以太坊的智能合約讓區(qū)塊鏈社區(qū)看到了無限的可能性良风,隨著合約功能的增強和網(wǎng)絡(luò)基礎(chǔ)設(shè)施的發(fā)展谊迄,區(qū)塊鏈有可能顛覆現(xiàn)在的互聯(lián)網(wǎng)網(wǎng)絡(luò),成為新一代的網(wǎng)絡(luò)基礎(chǔ)設(shè)施烟央。從社交網(wǎng)站到金融應(yīng)用统诺,都可以通過智能合約的設(shè)計運行在區(qū)塊鏈網(wǎng)絡(luò)上,甚至隨著AI算法的發(fā)展疑俭,智能合約可以成為自我進化的人工智能網(wǎng)絡(luò)粮呢。

以太坊社區(qū)開始了各類智能合約的應(yīng)用嘗試,其中就包括著名的DAO(去中心化自我管理組織)項目钞艇,成為有史以來最大的眾籌項目啄寡。但是,以太坊智能合約功能的強大也是一檳雙刃劍哩照,有黑客發(fā)現(xiàn)并利用了以太坊智能合約設(shè)計的一個循環(huán)執(zhí)行缺陷挺物,竊取了大量DAO的資產(chǎn),最終造成了以太坊的硬分叉飘弧。

最新的區(qū)塊鏈產(chǎn)品识藤,包括HyperLedger(www.hyperledger.org)、Corda(www.corda.net)次伶、Kadena(kadena.io)等都提供了各自的智能合約功能:

HyperLedger借助Docker容器實現(xiàn)了VM的功能痴昧,智能合約被定義為容器對外暴露的接口定義,內(nèi)部的合約語言可以是Go冠王、Java等主流語言赶撰。HyperLedger的實現(xiàn)比較討巧,節(jié)省了基礎(chǔ)指令集和VM的設(shè)計成本柱彻,但是缺乏對智能合約功能邊界的定義豪娜,很難對部署到區(qū)塊鏈上的合約進行審計和邏輯證明。

Corda弱化了智能合約的概念绒疗,把JVM直接定義為區(qū)塊鏈的VM侵歇,所有支持JVM的語言都可以作為其智能合約語言。Corda的這種實現(xiàn)方式很難說是智能合約了吓蘑,更像是金融業(yè)務(wù)的開發(fā)框架惕虑。

Kadena是一個非常有趣的項目,它采取了和以太坊不一樣的智能合約設(shè)計理念磨镶,弱化了智能合約的一些功能點(例如不支持循環(huán)調(diào)用)溃蔫,把智能合約設(shè)計成類Scheme語言的函數(shù)式語言,并遵循代碼即數(shù)據(jù)(Code is data)的設(shè)計理念琳猫,以源碼形式部署到區(qū)塊鏈上伟叛。Kadena的實現(xiàn)有其獨到之處:一方面弱化的智能合約語言能夠設(shè)定比較合理的功能邊界,避免“壞”合約(大量復(fù)雜運算脐嫂、邏輯漏洞等等)對區(qū)塊鏈網(wǎng)絡(luò)的性能和安全帶來損害统刮。另一方面紊遵,源代碼形式的合約部署形式讓合約的多方審計和邏輯驗證更加簡便可行。

Kong語言的設(shè)計

Mini BlockChain合約語言的設(shè)計參考了以太坊和Kadena的設(shè)計思想侥蒙,被設(shè)計成為函數(shù)式語言暗膜,但是語言風(fēng)格更加接近Javascript。作者在智能合約的設(shè)計階段參考了一個名為Monkey的腳本語言鞭衩,所以把這個智能合約語言命名為Kong学搜,以示致敬。

Kong語言遵循Code is Data的設(shè)計理念论衍,并沒有設(shè)計成以太坊類型的指令集瑞佩,而是設(shè)計成支持有限邏輯運算并可以擴展自定義方法的解釋器(Interpreter)。有限的邏輯運算可以保證智能合約的功能邊界坯台,避免合約用戶編寫過于復(fù)雜的合約而造成性能和安全漏洞炬丸。可擴展自定義方法讓智能合約可以方便得擴展合約功能捂人,復(fù)雜運算和實現(xiàn)可以由外部方法來實現(xiàn)御雕,保證合約的簡潔性,加強了合約的可審計性和可驗證性滥搭。

Kong的實現(xiàn)有兩個版本酸纲,一個版本參考了"Wrinting an interpreter in Go"一書,實現(xiàn)了自定義的Lexer瑟匆、Parser和Interpreter闽坡,另一個版本使用Antlr4將Grammar的定義轉(zhuǎn)換成Lexer和Parser的實現(xiàn)。前者可以更好地自定義Lexer和Parser的實現(xiàn)愁溜,后者的語法定義和Lexer疾嗅、Parser框架實現(xiàn)更加規(guī)范,兩者的語法也有細微的差別冕象。

Kong的一段示例代碼如下:

def add(a,b) = a+b
let c = add(10,15)
println(c)

Kong語言目前還屬于Toy語言范疇代承,下一步會以Antlr4版本為基礎(chǔ)進行改進,并且集成到Mini BlockChain產(chǎn)品里渐扮,下一講我們將圍繞Kong語言的智能合約化展開討論论悴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市墓律,隨后出現(xiàn)的幾起案子膀估,更是在濱河造成了極大的恐慌,老刑警劉巖耻讽,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件察纯,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機饼记,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門香伴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人具则,你說我怎么就攤上這事瞒窒。” “怎么了乡洼?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匕坯。 經(jīng)常有香客問我束昵,道長,這世上最難降的妖魔是什么葛峻? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任锹雏,我火速辦了婚禮,結(jié)果婚禮上术奖,老公的妹妹穿的比我還像新娘礁遵。我一直安慰自己,他們只是感情好采记,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布佣耐。 她就那樣靜靜地躺著,像睡著了一般唧龄。 火紅的嫁衣襯著肌膚如雪兼砖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天既棺,我揣著相機與錄音讽挟,去河邊找鬼。 笑死丸冕,一個胖子當(dāng)著我的面吹牛耽梅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胖烛,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼眼姐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洪己?” 一聲冷哼從身側(cè)響起妥凳,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎答捕,沒想到半個月后逝钥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年艘款,在試婚紗的時候發(fā)現(xiàn)自己被綠了持际。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡哗咆,死狀恐怖蜘欲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晌柬,我是刑警寧澤姥份,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站年碘,受9級特大地震影響澈歉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屿衅,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一埃难、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涤久,春花似錦涡尘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蔗彤,卻和暖如春座泳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幕与。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工挑势, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啦鸣。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓潮饱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诫给。 傳聞我的和親對象是個殘疾皇子香拉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345