本期我們討論如何使用第二個模組:Storage API (儲存 API)。Storage API 共有五個相關的 API,實現了對區塊鏈智慧合約中持久化儲存的增刪改查。這五個 API 的簡單描述如下:
下面我們具體講述一下這五個 API 的使用方法。在這之前,小夥伴們可以在本體智慧合約開發工具 SmartX 中新建一個合約,跟著我們進行操作。同樣,在文章最後我們將給出這次講解的所有原始碼以及影片講解。
2. Storage API 使用方法
2.1 GetContext & GetReadOnlyContext
GetContext & GetReadOnlyContext 獲取當前智慧合約執行的上下文環境,返回值為當前智慧合約 hash 的反序。顧名思義,GetReadOnlyContext 獲取的是隻讀模式的上下文環境。在下面的例子中,返回值是右上角顯示的合約雜湊的反序。
2.2 Put
Put 函式負責將資料以字典形式存入區塊鏈。如圖所示,Put 接受三個引數。其中,GetContext 獲取當前智慧合約的執行的上下文環境,key 是當前需要儲存資料的 key 值,而 value 當前需要儲存資料的 value 值。特別需要注意的是:如果 key 值在已經在儲存中存在,那麼該函式將更新其對應的 value 值。
2.3 Get
Get 函式負責透過 key 值來讀取存在區塊鏈中的資料。在下圖的示例中,可以在右側引數面板處填入 key 值執行函式,讀取區塊鏈中該 key 值對應的資料:
2.4 Delete
Delete 函式負責透過 key 值來刪除存在區塊鏈中的資料。在下圖的示例中,可以在右側引數面板處填入 key 值執行函式,刪除區塊鏈中該 key 值對應的資料:
3. Storage API 程式碼示例
下面的程式碼給出了 GetContext, Get, Put, Delete 和 GetReadOnlyContext 等五個 API 的詳細使用示例,小夥伴們可以在 SmartX 試著執行一下。
from ontology.interop.System.Storage import GetContext, Get, Put, Delete, GetReadOnlyContextfrom ontology.interop.System.Runtime import Notify
def Main(operation,args):
if operation == 'get_sc':
return get_sc()
if operation == 'get_read_only_sc':
return get_read_only_sc()
if operation == 'get_data':
key=args[0]
return get_data(key)
if operation == 'save_data':
key=args[0]
value=args[1]
return save_data(key, value)
if operation == 'delete_data':
key=args[0]
return delete_data(key)
return False
def get_sc():
return GetContext() # 獲取智慧合約控制代碼
def get_read_only_sc():
return GetReadOnlyContext() # 獲取智慧合約只讀控制代碼
def get_data(key):
sc=GetContext()
data=Get(sc,key) #查詢資料
return data
def save_data(key, value):
sc=GetContext()
Put(sc,key,value) # 新增,修改資料
def delete_data(key):
sc=GetContext()
Delete(sc,key) # 刪除資料
4. 後記
區塊鏈儲存是區塊鏈整個體系的核心,本體 Storage API 的使用方法非常簡潔,對開發者非常友好。另一方面,儲存是駭客攻擊的重點,例如在之前的一期中我們提及的一種安全威脅:儲存注入攻擊 ,開發者在寫儲存相關程式碼時務必注意程式碼安全。下一期我們將討論 Runtime API 使用方法,敬請期待!