本體技術視點 | Python智慧合約開發教程第二彈

買賣虛擬貨幣
1. 導語上一期我們正式開始了本體智慧合約語法部分,講述了 Blockchain & Block API 的用法。相信有很多小夥伴已經開始動手嘗試用 Python 在本體上編寫和執行智慧合約。如果小夥伴們在使用 SmartX 過程和動手實踐過程中遇到問題,歡迎聯絡我們。

本期我們討論如何使用第二個模組: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 使用方法,敬請期待!

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;