隨著移動互聯(lián)網(wǎng)技術(shù)的成熟,后移動互聯(lián)網(wǎng)時代的代表——區(qū)塊鏈技術(shù)則是這個時代的又一重大創(chuàng)新,盡管這項技術(shù)目前還處在非常初期且神秘晦澀的階段,但充滿想象力。
?
什么是智能合約?
1995年Nick Szabo首次提出智能合約的概念,即:合約參與方同意的(經(jīng)常是相互的)權(quán)利和義務(wù)。以銷售合約為例,賣家承諾發(fā)送貨物,買家承諾支付合理的貨款。當(dāng)一個預(yù)先編好的條件被觸發(fā)時,智能合約則執(zhí)行相應(yīng)的合同條款。
隨著區(qū)塊鏈技術(shù)的發(fā)展和核心價值的進一步被挖掘,智能合約將不僅僅只是傳統(tǒng)合約的數(shù)據(jù)化。在區(qū)塊鏈?zhǔn)澜?,智能合約將扮演更多核心的工作,本文接下來將通過剖析區(qū)塊鏈3.0中的智能合約技術(shù)細節(jié),來展示區(qū)塊鏈?zhǔn)澜缥磥淼闹悄芎霞s形態(tài)。
從技術(shù)方面剖析智能合約——以Ultrain智能合約為例
在Ultrain的合約體系中,我們無法在自己的合約中嵌入其他合約的代碼,那當(dāng)我們不得不在自己的合約中使用其他合約的時候該怎么辦呢?這里Ultrain提供了三個方法,允許你從自己的合約中調(diào)用其他合約的代碼。在這里,將主要介紹有關(guān)交易的三個方法以及它們的特性。
首先介紹Require-recepient()方法。從名字中我們可以得知,這是一個通知。當(dāng)這個方法被調(diào)用時,To合約上部署的同名方法將被調(diào)用。舉個例子,現(xiàn)在我們編寫了含有以下方法的兩個合約,將一個合約部署在賬號jack上(如圖1),另一個部署在合約rose上(如圖2)。

通過發(fā)起一筆交易來進行測試,如果一切正常,將會看到在打印的log中jack和rose的recepient同名方法都被調(diào)用(如圖3)。

從結(jié)果中我們可以得知:
(1)jack的同名方法recepient也被調(diào)用了;
(2)傳遞的參數(shù)和交易發(fā)起時的參數(shù)messi是一致的,不需要明確地傳遞這個參數(shù);
(3)rose和jack的recepient方法都在同一個transaction調(diào)用;
(4)rose和jack的recepient方法都有rose的權(quán)限。
2. Action.sendInline
從Action.requireRecepient()的測試結(jié)果中,可得知requireRecepient()方法只能用相同的參數(shù)調(diào)用同名方法,但這個方法在很多時候是受限的。因此,需要另一種方式來解決這個問題,即能夠調(diào)用任意參數(shù)的方法。這個方法就是Action.sendInline(),同樣的,我們用例子來說明。

在rose的合約中調(diào)用jack合約中的任意方法,并且傳遞了任意的參數(shù),賬號部署完成后,執(zhí)行rose的合約,執(zhí)行成功后,會看到rose的執(zhí)行l(wèi)og中確實存在jack合約方法的執(zhí)行(如圖6),這就意味著sendInline這個方法確實可以調(diào)用其他合約的任意方法,參數(shù)任意,而且雙方具有相同的權(quán)限,同recepient一樣,交易是在同個transaction中執(zhí)行。

3. Transaction.send
前文分別介紹了requireRecepient和sendInline的使用方法及它們的特點,其中一條就是它們都在同一個transaction中被執(zhí)行,這也就意味著,整個執(zhí)行鏈條上如果有一個action失敗了,那么整個transaction也就失敗了。有些情況下,我們并不想所有的action作為一個事務(wù)來進行處理,這時候Transaction.send的好處就體現(xiàn)出來了。接下來來演示這個方法是如何使用的。

部署完成后我們可以執(zhí)行rose的deferred方法,注意要將rose的active權(quán)限代理給utrio.code,否則這個方法執(zhí)行時會失敗。方法執(zhí)行成功之后,會發(fā)現(xiàn)結(jié)果中只有rose的log信息(如圖9),那么jack合約中打印的log信息在哪里呢?可以看看節(jié)點的log信息,會發(fā)現(xiàn)jack的log信息存在節(jié)點之中(如圖10)。

這也說明這個方法確實可以不在同一個transaction中執(zhí)行,并且具有以下的特性:
1)Transaction.send()可以調(diào)用jack任意的方法。
2)調(diào)用方法時,可以傳遞任意參數(shù)。
3)jack中的方法被調(diào)用時,具有發(fā)起時一樣的權(quán)限(rose)。
通過以上三種方法的闡釋,再次總結(jié)這三個方法各自的風(fēng)格和特性,在不同場景中則可運用不同的方法(如圖11)

綜上,通過對區(qū)塊鏈3.0中的智能合約技術(shù)的剖析,不難看出智能合約在區(qū)塊鏈技術(shù)中起到的重要作用,以下為我個人對于智能合約的展望。
對智能合約的展望
以Ultrain為代表的區(qū)塊鏈3.0,在智能合約技術(shù)基礎(chǔ)上進行了不少改進和突破,從而讓智能合約能夠?qū)崿F(xiàn)更加復(fù)雜邏輯的業(yè)務(wù),這就意味著智能合約不再是為傳統(tǒng)合約做相關(guān)的數(shù)據(jù)化這么簡單,它可以實現(xiàn)技術(shù)上的邏輯互通,為各個行業(yè)搭建了橋梁。也正因如此,區(qū)塊鏈技術(shù)才可真正實現(xiàn)承載高性能、低成本、高服務(wù)質(zhì)量并支持大規(guī)模數(shù)據(jù)資產(chǎn)化商業(yè)帝國的構(gòu)建。
電子發(fā)燒友App




















評論