智能合約
在各業(yè)務(wù)彼此進(jìn)行交互之前,必須先定義一套通用的合約,其中包括通用術(shù)語(yǔ)、數(shù)據(jù)、規(guī)則、概念定義和流程。將這些合約放在一起,就構(gòu)成了管理交易各方之間所有交互的業(yè)務(wù)模型。
智能合約用可執(zhí)行的代碼定義了不同組織之間的規(guī)則。應(yīng)用程序調(diào)用智能合約來(lái)生成被記錄到賬本上的交易。搭建(punk2558)
使用區(qū)塊鏈網(wǎng)絡(luò),我們可以將這些合約轉(zhuǎn)換為可執(zhí)行程序(業(yè)內(nèi)稱為智能合約),從而實(shí)現(xiàn)了各種各樣的新可能性。這是因?yàn)橹悄芎霞s可以為任何類型的業(yè)務(wù)對(duì)象實(shí)現(xiàn)治理規(guī)則,以便在執(zhí)行智能合約時(shí)自動(dòng)執(zhí)行這些規(guī)則。例如,一個(gè)智能合約可能會(huì)確保新車在指定的時(shí)間內(nèi)交付,或者根據(jù)預(yù)先安排的條款釋放資金,前者可改善貨物流通,而后者可優(yōu)化資本流動(dòng)。然而最重要的是,智能合約的執(zhí)行要比人工業(yè)務(wù)流程高效得多。
在上圖中,我們可以看到組織ORG1和ORG2是如何通過(guò)定義一個(gè)car智能合約來(lái)實(shí)現(xiàn)查詢、轉(zhuǎn)移和更新汽車的。來(lái)自這些組織的應(yīng)用程序調(diào)用此智能合約執(zhí)行業(yè)務(wù)流程中已商定的步驟,例如將特定汽車的所有權(quán)從ORG1轉(zhuǎn)移到ORG2。
一個(gè)智能合約定義在一個(gè)鏈碼中。而多個(gè)智能合約也可以定義在同一個(gè)鏈碼中。當(dāng)一個(gè)鏈碼部署完畢,該鏈碼中的所有智能合約都可供應(yīng)用程序使用。
從上圖中我們可以看到,vehicle鏈碼包含了以下三個(gè)智能合約:cars、boats和trucks;而insurance鏈碼包含了以下四個(gè)智能合約:policy、liability、syndication和securitization。以上每種智能合約都涵蓋了與車輛和保險(xiǎn)有關(guān)的業(yè)務(wù)流程的一些關(guān)鍵點(diǎn)。在本主題中,我們將以car智能合約為例。我們可以看到,智能合約是一個(gè)特定領(lǐng)域的程序,它與特定的業(yè)務(wù)流程相關(guān),而鏈碼則是一組相關(guān)智能合約安裝和實(shí)例化的技術(shù)容器。
賬本
以最簡(jiǎn)單的方式來(lái)說(shuō),區(qū)塊鏈記錄著更新賬本狀態(tài)的交易,且記錄不可篡改。智能合約以編程方式訪問(wèn)賬本兩個(gè)不同的部分:一個(gè)是區(qū)塊鏈(記錄所有交易的歷史,且記錄不可篡改),另一個(gè)是世界狀態(tài)(保存這些狀態(tài)當(dāng)前值的緩存,是經(jīng)常需要用到的對(duì)象的當(dāng)前值)。
智能合約主要在世界狀態(tài)中將狀態(tài)寫(xiě)入(put)、讀取(get)和刪除(delete),還可以查詢不可篡改的區(qū)塊鏈交易記錄。
讀取(get)操作一般代表的是查詢,目的是獲取關(guān)于交易對(duì)象當(dāng)前狀態(tài)的信息。
寫(xiě)入(put)操作通常生成一個(gè)新的業(yè)務(wù)對(duì)象或者對(duì)賬本世界狀態(tài)中現(xiàn)有的業(yè)務(wù)對(duì)象進(jìn)行修改。
刪除(delete)操作代表的是將一個(gè)業(yè)務(wù)對(duì)象從賬本的當(dāng)前狀態(tài)中移除,但不從賬本的歷史中移除。
智能合約有許多可用的API。但重要的是,在任意情況下,無(wú)論交易創(chuàng)建、讀取、更新還是刪除世界狀態(tài)中的業(yè)務(wù)對(duì)象,區(qū)塊鏈都包含了這些操作的記錄,且記錄不可更改。
開(kāi)發(fā)
智能合約是應(yīng)用程序開(kāi)發(fā)的重點(diǎn),正如我們所看到的,一個(gè)鏈碼中可定義一個(gè)或多個(gè)智能合約。將鏈碼部署到網(wǎng)絡(luò)中以后,網(wǎng)絡(luò)上的組織就都可以使用該鏈碼中的所有智能合約。這意味著只有管理員才需要考慮鏈碼;其他人都只用考慮智能合約。
智能合約的核心是一組交易定義。例如,在fabcar.js中,你可以看到一個(gè)創(chuàng)建了一輛新車的智能合約交易:
async createCar(ctx,carNumber,make,model,color,owner){
const car={
color,
docType:'car',
make,
model,
owner,
};
await ctx.stub.putState(carNumber,Buffer.from(JSON.stringify(car)));
}
在編寫(xiě)您的第一個(gè)應(yīng)用程序教程中,您可以了解更多關(guān)于Fabcar智能合約的信息。
智能合約幾乎可以描述所有與多組織決策中數(shù)據(jù)不可變性相關(guān)的業(yè)務(wù)案例。智能合約開(kāi)發(fā)人員的工作是將一個(gè)現(xiàn)有的業(yè)務(wù)流程(可能是管理金融價(jià)格或交付條件)用JavaScript、GOLANG或Java等編程語(yǔ)言來(lái)表示成一個(gè)智能合約。將數(shù)百年的法律語(yǔ)言轉(zhuǎn)換為編程語(yǔ)言需要法律和技術(shù)方面的技能,智能合約審核員們不斷地實(shí)踐著這些技能。您可以在開(kāi)發(fā)應(yīng)用程序主題中了解如何設(shè)計(jì)和開(kāi)發(fā)智能合約。
審核編輯 黃昊宇
-
區(qū)塊鏈智能合約
+關(guān)注
關(guān)注
4文章
426瀏覽量
11215
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論