螞蟻區(qū)塊鏈第6課 TEE硬件隱私合約鏈(含標(biāo)準(zhǔn)合約鏈)的框架和功能概述

1,摘要

本文介紹螞蟻區(qū)塊鏈的TEE硬件隱私合約鏈和標(biāo)準(zhǔn)合約鏈的框架和功能介紹,說明開發(fā)流程。
TEE 硬件隱私合約鏈?zhǔn)窃跇?biāo)準(zhǔn)合約鏈功能基礎(chǔ)上采用TEE硬件疊加隱私保護(hù)相關(guān)功能。

2,螞蟻區(qū)塊鏈標(biāo)準(zhǔn)合約鏈介紹

螞蟻區(qū)塊鏈合約鏈通過引入 P2P 網(wǎng)絡(luò)、共識算法、虛擬機(jī)、智能合約、密碼學(xué)、數(shù)據(jù)存儲等技術(shù)特性,構(gòu)建一個穩(wěn)定、高效、安全的圖靈完備智能合約執(zhí)行環(huán)境,提供賬戶的基本操作以及面向智能合約的功能調(diào)用?;诤霞s平臺提供的能力和功能特性,應(yīng)用開發(fā)者能夠完成基本的賬戶創(chuàng)建、合約調(diào)用、結(jié)果查詢、事件監(jiān)聽等。

螞蟻區(qū)塊鏈合約鏈系統(tǒng)架構(gòu):

螞蟻區(qū)塊鏈合約鏈核心邏輯:

3,螞蟻區(qū)塊鏈功能特性

按照不同訪問對象,可以將合約平臺的基本功能劃分為 賬戶操作、合約訪問、區(qū)塊查詢交易查詢、事件監(jiān)聽 等多種類型。除此之外,合約平臺還具備 數(shù)據(jù)隔離隱私保護(hù)、SPV 驗證 等功能特性,以滿足各種業(yè)務(wù)場景的需求。

3.1 賬戶體系

合約平臺所有交易操作均是圍繞賬戶體系來進(jìn)行,因此在發(fā)送執(zhí)行交易之前需確保您已在合約平臺創(chuàng)建對應(yīng)的賬戶,然后可使用創(chuàng)建好的賬戶提交交易,還可以基于該賬戶結(jié)構(gòu)完成相關(guān)賬戶配置的修改。

具體的賬戶數(shù)據(jù)結(jié)構(gòu)模型字段和說明如下:

字段 說明
id 賬戶的標(biāo)識
auth_map 賬戶或者合約的公鑰和權(quán)重值
recover_key 恢復(fù)公鑰,用于賬戶私鑰丟失的情況
balance 余額
recover_time 上次成功恢復(fù)的時間
status 狀態(tài), 0:正常;1:凍結(jié);2:恢復(fù)中
encryption_key 加密公鑰,用來加密智能合約中的交易金額

其中,賬戶包含三種類型的密鑰:
權(quán)限密鑰(auth_map):用于賬戶發(fā)送正常交易時使用的簽名密鑰,支持多個密鑰,按權(quán)重分配實現(xiàn)多簽名,是區(qū)塊鏈節(jié)點判斷交易是否有效授權(quán)的依據(jù)。
恢復(fù)密鑰(recover_key):重置賬戶權(quán)限密鑰時使用的簽名密鑰,對于已經(jīng)存在的賬戶,合約平臺提供重置、更新賬戶授權(quán)密鑰以及重置賬戶恢復(fù)的能力。
加密密鑰(encryption_key):用于隱私保護(hù)場景下的數(shù)據(jù)加密密鑰,可被交易參與方獲取并用于隱私數(shù)據(jù)的加密。

合約平臺采用將賬戶與密鑰解耦的方式來實現(xiàn),從一定程度上防止因為密鑰丟失帶來的鏈上數(shù)據(jù)丟失等安全隱患。合約平臺支持的主要賬戶操作包括:
創(chuàng)建賬戶:在區(qū)塊鏈平臺上創(chuàng)建一個唯一的賬戶數(shù)據(jù)結(jié)構(gòu),主要用于記錄鏈上賬戶的公鑰。
更新密鑰:修改區(qū)塊鏈平臺上特定賬戶下的注冊公鑰,主要應(yīng)用于交易簽名密鑰的更改和權(quán)重變更。
重置密鑰:基于賬戶的重置密鑰來重置區(qū)塊鏈平臺上特定賬戶下的注冊公鑰。
賬戶凍結(jié):凍結(jié)區(qū)塊鏈平臺上的特定賬戶,阻止該賬戶后續(xù)繼續(xù)發(fā)送交易。
賬戶解凍:解凍區(qū)塊鏈平臺上已經(jīng)處于凍結(jié)狀態(tài)的賬戶,恢復(fù)其發(fā)送交易的能力。

3.2 合約體系

合約平臺內(nèi)置了 EVM(Ethereum Virtual Machine)和 WASM(WebAssembly)兩種智能合約執(zhí)行引擎,支持多種合約編程語言,如Solidity 和 C++。您可以在合約平臺上部署編寫的智能合約并進(jìn)行業(yè)務(wù)邏輯的調(diào)用。

合約平臺上的合約數(shù)據(jù)結(jié)構(gòu)模型如下:

參數(shù) 說明
id 合約的標(biāo)識
auth_map 賬戶或者合約的公鑰和權(quán)重值
recover_key 恢復(fù)公鑰,用于賬戶私鑰丟失的情況
balance 余額
recover_time 上次成功恢復(fù)的時間
status 狀態(tài), 0:正常;1:凍結(jié);2:恢復(fù)中
storage_root 世界狀態(tài)的默克爾哈希根
code_hash 合約代碼哈希
code 合約代碼

相比于賬戶結(jié)構(gòu),合約中有額外的代碼和存儲相關(guān)的字段。

合約平臺提供合約部署、升級、調(diào)用、凍結(jié)、解凍等生命周期的管理,這些操作均通過交易來實現(xiàn)。
合約部署:在區(qū)塊鏈平臺上創(chuàng)建一個智能合約賬戶,并在該賬戶下綁定特定的智能合約編譯字節(jié)碼。
合約升級:升級區(qū)塊鏈平臺上的一個智能合約賬戶代碼,主要應(yīng)用于合約代碼功能的迭代和缺陷的修復(fù)后升級(需要滿足一定的升級約束)。
合約調(diào)用:基本的合約方法調(diào)用能力,通過交易調(diào)用智能合約的特定功能入口,修改或者檢索智能合約中的存儲數(shù)據(jù)。
合約凍結(jié):凍結(jié)區(qū)塊鏈平臺上的特定智能合約賬戶,被凍結(jié)的智能合約代碼不能被用戶調(diào)用,主要應(yīng)用于智能合約發(fā)現(xiàn)缺陷后的緊急處理以防止缺陷的擴(kuò)散。
合約解凍:解凍區(qū)塊鏈平臺上的特定智能合約賬戶,主要應(yīng)用于被凍結(jié)的缺陷代碼修復(fù)后的恢復(fù)操作。

3.3 區(qū)塊查詢

合約平臺以區(qū)塊的形式組織交易歷史和管理世界狀態(tài),系統(tǒng)根據(jù)給定的參數(shù)配置按照一定的規(guī)則執(zhí)行交易并打包生成區(qū)塊。在合約平臺上,一個區(qū)塊包含區(qū)塊頭和區(qū)塊體兩個部分。

區(qū)塊頭數(shù)據(jù)結(jié)構(gòu)模型如下:

參數(shù) 說明
hash 區(qū)塊頭的哈希
version 版本
number 區(qū)塊號
parent_hash 上一區(qū)塊哈希
transaction_root 區(qū)塊體中的交易構(gòu)成的默克爾哈希根
receipt_root 區(qū)塊體中的收據(jù)構(gòu)成的默克爾哈希根
state_root 世界狀態(tài)的默克爾哈希根
gas_used 交易執(zhí)行的總消耗量
timestamp 時間戳
log_bloom 日志布隆過濾器

區(qū)塊體數(shù)據(jù)結(jié)構(gòu)模型如下:

參數(shù) 說明
transaction_list 交易列表
receipt_list 收據(jù)列表
consensus_proof 共識證明

系統(tǒng)提供一系列的功能完成對已經(jīng)生成的區(qū)塊數(shù)據(jù)的查詢需求,具體功能如下:
區(qū)塊頭查詢:基于給定的區(qū)塊號或哈希,返回該特定區(qū)塊頭數(shù)據(jù)結(jié)構(gòu),包括區(qū)塊哈希、區(qū)塊版本、塊號、父區(qū)塊哈希、交易列表根哈希、收據(jù)列表根哈希、世界狀態(tài)根哈希、燃料消耗值、時間戳信息、共識證明等。
區(qū)塊體查詢:基于給定的區(qū)塊號或哈希,返回該特定區(qū)塊體的詳細(xì)信息,包括交易列表、收據(jù)列表和共識證明。

3.4 交易查詢

合約平臺的所有數(shù)據(jù)變更均是基于交易形式來完成的。合約平臺的交易根據(jù)類型的不同可以分為創(chuàng)建賬戶、余額轉(zhuǎn)賬、部署合約、更新合約、調(diào)用合約、設(shè)置恢復(fù)密鑰、預(yù)重置權(quán)限密鑰、重置權(quán)限密鑰、更新權(quán)限密鑰、凍結(jié)賬戶、解凍賬戶、隱私交易等。

交易數(shù)據(jù)結(jié)構(gòu)模型如下:

參數(shù) 說明
hash 交易的哈希,由 signature 字段以外的所有字段構(gòu)成。
type 交易的類型
timestamp 交易的時間戳
nonce 防止重放攻擊
period 單位為毫秒,事務(wù)開始或結(jié)束的時間,為未來擴(kuò)展使用。
from 交易的發(fā)送者
to 交易的接收者
value 轉(zhuǎn)賬金額
gas 交易執(zhí)行的消耗費用
data 交易數(shù)據(jù)內(nèi)容的編碼
group_id 交易在一個 group 中執(zhí)行
signature 簽名,使用一個或者多個私鑰對 hash 加簽
extensions 交易擴(kuò)展字段,類型為 vector,元素類型為TransactionExtension。TransactionExtension 包含key_(uint32_t) 與 value_(bytes) 兩個字段,目前用于智能合約中的證明數(shù)據(jù)。

交易收據(jù)是合約平臺中交易打包執(zhí)行后的結(jié)果數(shù)據(jù),用以標(biāo)識交易的執(zhí)行成功與否,執(zhí)行后的返回數(shù)據(jù)以及產(chǎn)生的相關(guān)事件等。

交易收據(jù)數(shù)據(jù)結(jié)構(gòu)模型如下:

參數(shù) 說明
result 交易執(zhí)行成功與否標(biāo)識,0 標(biāo)識成功,非 0 標(biāo)識失敗。
gas_used 執(zhí)行交易所消耗的燃料費用,代表交易執(zhí)行的復(fù)雜度。
logs 交易執(zhí)行所產(chǎn)生的日志或者事件列表。
output 交易執(zhí)行返回的數(shù)據(jù)內(nèi)容。

通過 SDK 可以對某一個具體交易的信息進(jìn)行查詢,從而可以檢索已經(jīng)存在于塊鏈結(jié)構(gòu)中的任意交易信息。在系統(tǒng)中發(fā)生的每一筆交易都會對應(yīng)一筆交易收據(jù),交易收據(jù)也可以通過 SDK 查詢。

交易查詢:基于給定的交易哈希,返回該特定交易的詳細(xì)信息,包括所在塊號、交易號索引、交易哈希、交易類型、交易時間戳、交易 nonce、發(fā)起方、接收方、交易值、交易燃料消耗上限、交易輸入數(shù)據(jù)、交易簽名信息等。
交易收據(jù)查詢:基于給定的交易哈希,返回該特定交易的收據(jù)詳細(xì)信息,包括所在塊號、交易號索引、交易結(jié)果、實際燃料消耗、交易執(zhí)行輸出、日志記錄(發(fā)起方、接收方、交易類型、日志數(shù)據(jù)元信息)等。

3.5 事件監(jiān)聽

合約平臺在執(zhí)行交易和打包生成區(qū)塊時會產(chǎn)生一系列的業(yè)務(wù)日志事件和系統(tǒng)日志事件,這些事件代表合約平臺的一些運行狀態(tài)。合約平臺提供了一套基于事件訂閱發(fā)布的機(jī)制來實時推送平臺的日志事件給感興趣的客戶端。合約平臺支持訂閱賬戶事件、合約事件、特定主題事件、區(qū)塊事件。

事件數(shù)據(jù)結(jié)構(gòu)模型如下:

參數(shù) 說明
from 交易的發(fā)起方
to 交易的接收方
topics 事件對應(yīng)的主題
log_data 事件所攜帶的具體數(shù)據(jù)

您可通過 SDK 訂閱感興趣的事件,使用地址標(biāo)識或者主題標(biāo)識來請求合約平臺相關(guān)事件推送。

事件訂閱:給定事件過濾器來訂閱合約平臺的事件通知。
取消事件訂閱:取消已經(jīng)完成的事件訂閱,告知合約平臺不再推送事件通知。

3.6 隱私保護(hù)

合約平臺通過引入密碼學(xué)的一些特性來支持賬戶信息敏感數(shù)據(jù)的隱私保護(hù)能力,通過在智能合約層面擴(kuò)展相關(guān)的指令函數(shù)來實現(xiàn)智能合約中金額的加密存儲以及加減操作。只有獲得有效密鑰的個體才能解密智能合約中的敏感數(shù)據(jù),查看原始金額信息。

目前,合約平臺引入的密碼學(xué)特性包括零知識證明,即通過引入零知識證明來實現(xiàn)加密密文條件下轉(zhuǎn)賬金額的合法性證明。

3.7 數(shù)據(jù)隔離

為能夠滿足更多的隱私保護(hù)訴求,合約平臺引入數(shù)據(jù)隔離來實現(xiàn)業(yè)務(wù)敏感數(shù)據(jù)的交易的可見性。借助合約平臺數(shù)據(jù)隔離的能力,可以實現(xiàn)交易請求僅僅在有限的區(qū)塊鏈節(jié)點之間得以查看和被執(zhí)行,同時敏感隱私數(shù)據(jù)也僅僅在有限的節(jié)點內(nèi)被存儲。

根據(jù)不同的環(huán)境依賴和信任基礎(chǔ),數(shù)據(jù)隔離功能包含以下三種操作:

  • ENCRYPTION_ENVELOPE:加密信封交易,通過信封加密技術(shù)將原始交易加密并在合約平臺的公開賬本上進(jìn)行傳播,掌握解密密鑰的節(jié)點解開信封獲取原始交易在本地執(zhí)行。這樣的操作對節(jié)點網(wǎng)絡(luò)的依賴度相對較低,信任的基礎(chǔ)是密碼學(xué)技術(shù)。
  • DEPOSIT_ENVELOPE:存證信封交易,通過信封加密技術(shù)點對點傳播,并將原始交易的哈希存儲在公開賬本上,用以實現(xiàn)對存證信封交易的共識。這樣的操作對節(jié)點的網(wǎng)絡(luò)依賴度相對較高,信任的基礎(chǔ)是控制數(shù)據(jù)的有限范圍傳播。
  • GROUP_ENVELOPE:子鏈信封交易,通過衍生一個與公開賬本的并行賬本來實現(xiàn)隱私交易的執(zhí)行和結(jié)果共識。不僅對私有賬本數(shù)據(jù)的隱私交易進(jìn)行保護(hù),還實現(xiàn)了私有賬本數(shù)據(jù)的執(zhí)行結(jié)果共識操作。

3.8 SPV 驗證

簡單支付驗證(Simplified Payment Verification,SPV)驗證是合約平臺提供的一種數(shù)據(jù)驗證能力,能夠在付出很小的存儲代價和數(shù)據(jù)同步代價情況下完成對合約平臺上存儲數(shù)據(jù)的合法性校驗?;谶@種能力,您可以快速實現(xiàn)一個合約平臺的輕客戶端,完成與其他區(qū)塊鏈平臺的數(shù)據(jù)同步和訪問。

SPV 的驗證能力能夠?qū)霞s平臺上的以下數(shù)據(jù)給出有效性的證明:

  • 區(qū)塊證明:用于證明一個指定的區(qū)塊是否在合約平臺的賬本數(shù)據(jù)中存在。主要利用區(qū)塊的鏈?zhǔn)浇Y(jié)構(gòu)和平臺的共識證明來實現(xiàn)證明。
  • 交易證明:用于證明一個指定的交易或者交易執(zhí)行結(jié)果是否在合約平臺的賬本數(shù)據(jù)中存在。主要利用交易默克爾證明結(jié)合區(qū)塊證明來實現(xiàn)。
  • 賬戶證明:用于證明一個指定的賬戶數(shù)據(jù)是否在合約平臺的指定區(qū)塊的賬本數(shù)據(jù)中存在。主要利用存儲默克爾證明結(jié)合區(qū)塊證明來實現(xiàn)。
  • 存儲證明:用于證明一個指定的存儲數(shù)據(jù)是否在合約平臺的指定區(qū)塊下賬戶中存在。主要利用存儲默克爾證明結(jié)合區(qū)塊證明來實現(xiàn)。

4,螞蟻區(qū)塊鏈TEE硬件隱私合約鏈介紹

目前,TEE 硬件隱私合約鏈僅供 螞蟻區(qū)塊鏈創(chuàng)新大賽 試用,尚未正式對外發(fā)布。
隱私保護(hù)是區(qū)塊鏈技術(shù)賦能金融應(yīng)用場景中所不可缺少的需求。通用高效的區(qū)塊鏈隱私保護(hù)技術(shù)一直是工業(yè)界和學(xué)術(shù)界關(guān)注的重點。金融領(lǐng)域復(fù)雜的應(yīng)用場景通常要求區(qū)塊鏈隱私保護(hù)至少具備以下四方面的能力:

全生命周期的保護(hù):合約和交易的內(nèi)容、執(zhí)行過程中狀態(tài)以及執(zhí)行結(jié)果都可能涉及企業(yè)的商業(yè)信息,隱私保護(hù)應(yīng)該包括數(shù)據(jù)全生命周期的機(jī)密性。
全網(wǎng)范圍保護(hù):隱私保護(hù)技術(shù)的引入不能打破區(qū)塊鏈原有的共識信任模型,即全網(wǎng)(或一定數(shù)量的子集)節(jié)點應(yīng)該具有獨立驗證隱私數(shù)據(jù)相關(guān)交易的能力。
靈活支持復(fù)雜隱私模型:隱私模型的靈活度和復(fù)雜度,即在復(fù)雜多變的金融應(yīng)用場景中,隱私模型的定義要足夠靈活,能夠動態(tài)更新以適應(yīng)需求變化。
高性能的保護(hù):隱私保護(hù)技術(shù)的引入必須兼顧平臺的性能。
從技術(shù)上來說,要同時滿足上述四點要求極具挑戰(zhàn)。

螞蟻區(qū)塊鏈的 TEE(Trusted Execution Enviorment)硬件隱私合約鏈(以下簡稱“TEE 合約鏈”)充分利用硬件 TEE 技術(shù),為金融級別企業(yè)用戶提供高效、通用、安全的區(qū)塊鏈隱私保護(hù)能力。同時,TEE 合約鏈的開發(fā)者無需具備深厚的密碼學(xué)背景,便可將已有的智能合約無縫遷移至 TEE 合約鏈平臺并通過隱私模型的定義來啟用隱私保護(hù)功能。

4.1 技術(shù)架構(gòu)

TEE 合約鏈架構(gòu)在螞蟻區(qū)塊鏈合約平臺之上,作為核心組件提供通用高效的隱私保護(hù)能力。在螞蟻區(qū)塊鏈平臺通用框架下,TEE 合約鏈利用 TEE 技術(shù)將合約引擎和必要的交易處理以及密碼學(xué)運算單元集成封裝在“TEE安全區(qū)”內(nèi),配合一系列嚴(yán)謹(jǐn)?shù)陌踩珔f(xié)議流程達(dá)到隱私保護(hù)的目的。該架構(gòu)充分利用螞蟻區(qū)塊鏈平臺已有的功能特性,最大限度增加了 TEE 合約鏈與已有螞蟻區(qū)塊鏈平臺的兼容性,方便用戶開發(fā)使用具有隱私保護(hù)能力的區(qū)塊鏈應(yīng)用。同時最小化安全可信基,符合安全技術(shù)方案設(shè)計的原則。

下面是 TEE 合約鏈與螞蟻區(qū)塊鏈平臺結(jié)合的總體框架圖:

  • 區(qū)塊鏈的隱私保護(hù)體現(xiàn)在對交易全生命周期的保護(hù),需要保護(hù)交易本身、合約代碼、全局狀態(tài)數(shù)據(jù)以及交易回執(zhí)。
  • 在 TEE 合約鏈中,交易分為隱私交易和明文交易。明文交易即無需隱私保護(hù)的交易,其執(zhí)行過程與現(xiàn)有螞蟻區(qū)塊鏈平臺一致;隱私交易是利用密碼學(xué)技術(shù)進(jìn)行保護(hù)的交易,交易內(nèi)容只有在 TEE 內(nèi)才安全可見,其執(zhí)行過程中產(chǎn)生的全局狀態(tài)數(shù)據(jù)以及交易回執(zhí)均采用密碼學(xué)技術(shù)進(jìn)行加密保護(hù)。
  • 在 TEE 合約鏈中,合約分為隱私合約和明文合約。隱私合約的代碼和相應(yīng)的數(shù)據(jù)加密存儲,僅在 TEE 內(nèi)部解密執(zhí)行,相應(yīng)的回執(zhí)和狀態(tài)均加密存儲于外部數(shù)據(jù)庫。

下圖對比螞蟻區(qū)塊鏈合約平臺和 TEE 合約鏈的交易處理流程:

4.2 功能特性

4.2.1 交易與合約類型定義

  • 明文交易 v.s. 隱私交易

    明文交易指的是公開的、未啟用隱私保護(hù)的區(qū)塊鏈交易。交易內(nèi)容以明文發(fā)送至區(qū)塊鏈節(jié)點運行且明文記錄;隱私交易指的是啟用隱私保護(hù)的交易,交易內(nèi)容加密發(fā)送至節(jié)點,在 TEE 中運行并加密記錄于區(qū)塊中。隱私交易默認(rèn)對發(fā)送者以外的人不可見。

  • 明文合約 v.s. 隱私合約

    明文合約是通過明文交易部署的合約,合約執(zhí)行過程中的全局狀態(tài)明文存儲于區(qū)塊鏈節(jié)點本地數(shù)據(jù)庫,調(diào)用接口完全開放;隱私合約是啟用隱私保護(hù)的合約,通過隱私交易發(fā)起部署,合約執(zhí)行過程在 TEE 中,所有的全局狀態(tài)均加密存儲,調(diào)用接口有限開放。

4.2.2 支持多種隱私操作

  • 合約:隱私合約部署、隱私合約調(diào)用、保護(hù)合約調(diào)用(直接調(diào)用和代理調(diào)用均支持)、隱私合約升級。
  • 查詢:隱私鏈上數(shù)據(jù)存儲查詢(全局狀態(tài)、交易、回執(zhí)、日志)。

4.2.3 交易隱私

TEE 合約鏈支持加密交易發(fā)送,保護(hù)交易全生命周期的隱私性,包括:

  • 交易在客戶端完成數(shù)字信封加密,發(fā)送至節(jié)點過程中通過 SSL/TLS 信道保護(hù),到達(dá)節(jié)點后交由 TEE 處理。
  • 隱私交易進(jìn)入 TEE 后進(jìn)行相應(yīng)的解密操作,完成必要的檢查后開始執(zhí)行。
  • 執(zhí)行完成后所有合約狀態(tài)加密存儲,并生成加密回執(zhí)。
  • 交易發(fā)送者通過客戶端 SDK 提供的接口完成回執(zhí)解密。

4.2.4 通用高效

TEE 由 CPU 硬件提供保護(hù):

  • 具有高度安全隔離和可證明特性。
  • 支持通用 CPU 指令,支持各類合約虛擬機(jī)指令操作。
  • 高效利用 CPU 特有指令集對包括加解密算法的操作進(jìn)行通用加速。

4.2.5 權(quán)限控制

TEE 合約鏈支持用戶自定義隱私權(quán)限控制:

  • 合約編寫者根據(jù)需求指定合約調(diào)用、查詢權(quán)限保證數(shù)據(jù)隱私完全自主可控。
  • 權(quán)限控制模型支持合約層面的靈活定制和無縫升級。

4.2.6 安全易管

金融級別的密鑰管理體系——根據(jù)需求可以靈活配置和管理。

4.3 使用場景

TEE 合約鏈適用于以下任意場景:

  • 需要隱私保護(hù)的合約邏輯復(fù)雜。
  • 隱私模型本身復(fù)雜,需要靈活定制和動態(tài)更新。
  • 對隱私保護(hù)有較高的性能要求。
  • 隱私方案需要對開發(fā)者透明友好,不需要深入的密碼學(xué)基礎(chǔ)。
  • 已有業(yè)務(wù)向隱私保護(hù)模型遷移時需要對應(yīng)用層透明。

4.4 注意事項

TEE 合約鏈最大限度的保持了與螞蟻區(qū)塊鏈平臺的兼容性,但不可避免的需要引入一些特殊特性來完成全生命周期的交易隱私保護(hù)。TEE 合約鏈提供相應(yīng)的客戶端 SDK,為您提供簡潔一致的隱私交易構(gòu)造接口。在使用 SDK 進(jìn)行應(yīng)用開發(fā)的過程中,需注意以下三個事項:

  • 交易根密鑰:用戶需保管好自己的交易根密鑰,且根密鑰切勿隨意導(dǎo)出分享。
  • 節(jié)點 RSA 公鑰:可公開下載TEE合約鏈節(jié)點RSA公鑰,用戶需下載該公鑰提供給SDK相應(yīng)接口用于生成隱私交易。用戶可以同時下載TEE合約鏈的節(jié)點認(rèn)證報告,通過報告中的RSA公鑰哈希值確保所使用的RSA公鑰的完整性。
  • 隱私權(quán)限模型:TEE 合約鏈配合用戶隱私權(quán)限模型達(dá)到隱私保護(hù)的目的。安全合理的隱私權(quán)限模型是整個隱私保護(hù)的基礎(chǔ),需要由用戶嚴(yán)格定義。

5,螞蟻區(qū)塊鏈應(yīng)用開發(fā)框架和流程

傳統(tǒng)的 Web 應(yīng)用開發(fā)通常由客戶端和后端服務(wù)組成。而基于合約平臺的應(yīng)用開發(fā)除了客戶端和服務(wù)端開發(fā),還需要開發(fā)區(qū)塊鏈上運行的智能合約。

5.1 開發(fā)框架

傳統(tǒng)后端服務(wù)主要由“計算邏輯”和“數(shù)據(jù)庫”組成,智能合約恰好也包含了“計算邏輯”和“狀態(tài)存儲”。對由于某些場景,合約平臺的應(yīng)用可以直接通過客戶端調(diào)用智能合約的方式實現(xiàn),此時智能合約替代了傳統(tǒng)的后端服務(wù)。

傳統(tǒng) Web 應(yīng)用開發(fā)框架圖:

基于合約平臺的應(yīng)用開發(fā)框架圖:

基于合約平臺開發(fā)應(yīng)用時,您可以有以下 3 種選擇:

  • 選項 1:通過 SDK 在命令行與區(qū)塊鏈合約平臺交互。
  • 選項 2:通過 Web 應(yīng)用(Client)集成 SDK 直接與區(qū)塊鏈合約平臺交互。該方式讓客戶端直接訪問區(qū)塊鏈平臺,去掉了中間的后端服務(wù),更加透明,比較適合輕量級的合約調(diào)用、查詢等操作。
  • 選項 3:與傳統(tǒng) Web 應(yīng)用開發(fā)相似,訪問后端服務(wù)(Service),后端服務(wù)集成 SDK 后與區(qū)塊鏈合約平臺交互。該方式適合與傳統(tǒng)的業(yè)務(wù)系統(tǒng)相結(jié)合,在后端服務(wù)層實現(xiàn)一些比較重要的業(yè)務(wù)邏輯和計算任務(wù)。
    在實際操作中,選項 2 和 3 比較常用,您可以根據(jù)具體應(yīng)用場景進(jìn)行選擇。

5.2 開發(fā)流程

在實際業(yè)務(wù)實現(xiàn)中,基于合約平臺的應(yīng)用開發(fā)并不約束于具體的開發(fā)流程。在聯(lián)盟鏈多方參與的場景中,建議按照以下過程梳理業(yè)務(wù)場景,按步驟實現(xiàn):

  1. 定義多方協(xié)作中,智能合約需要實現(xiàn)的邏輯和功能,實現(xiàn)智能合約。
  2. 定義各參與方客戶端或后端服務(wù)的業(yè)務(wù)邏輯,以及與智能合約交互的接口邏輯,集成 SDK 實現(xiàn)。
  3. 集成 SDK 的業(yè)務(wù)邏輯與智能合約交互,測試功能。
  4. 多方參與的功能性集成測試。

5.3 工具和 SDK 選擇

為提高基于區(qū)塊鏈合約平臺的開發(fā)效率,BaaS 平臺提供了輔助開發(fā)工具和多語言的 SDK 支持。

5.4 Cloud IDE 合約開發(fā)環(huán)境

Cloud IDE 是一個在線的合約開發(fā)環(huán)境,此工具提供以下功能:

  • 合約編輯與編譯,展示編譯結(jié)果字節(jié)碼和接口說明(ABI)。
  • 合約的部署和調(diào)用;提供默認(rèn)體驗鏈環(huán)境和測試賬戶,用來部署和調(diào)用合約。
  • 解析合約方法的返回值、事件日志等,輔助調(diào)試合約;保存合約到 BaaS 合約管理。

更多 Cloud IDE 相關(guān)信息,參見 Cloud IDE 合約開發(fā)環(huán)境 相關(guān)文檔。

5.5 多語言 SDK

合約平臺提供多語言 SDK 支持,包括:

SDK 語言 功能特性 說明
Java 功能最豐富,覆蓋合約平臺所有的功能。 適合用于后端服務(wù)層。更多信息,參見 Java SDK 說明 。
C++ 功能豐富,與 Java SDK 功能相似。 比較適合與傳統(tǒng) C++ 服務(wù)相結(jié)合。更多信息,參見 C++ SDK 說明。
Java Script 覆蓋基本常用的 API,支持 Node.js 和瀏覽器環(huán)境運行,不支持國密。 適合客戶端 Web 應(yīng)用集成。更多信息,參見 JS SDK 說明

6,參考

(1)合約平臺概述
https://tech.antfin.com/docs/2/101801
(2)TEE 合約鏈概述
https://tech.antfin.com/docs/2/107468

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容