Как стать автором

How to Write a Smart Contract with Python on Ontology? Part 2: Storage API

Время на прочтение 3 мин
Количество просмотров 1.2K
Python *Программирование *DevOps *Распределённые системы *Криптовалюты
This is an official tutorial published earlier on Ontology Medium blog
Excited to publish it for Habr readers. Feel free to ask any related questions and suggest a better format for tutorial materials


Earlier, in Part 1, we introduced the Blockchain & Block API of Ontology’s smart contract. Today we will discuss how to use the second module: Storage API. The Storage API has five related APIs that enable addition, deletion, and changes to persistent storage in blockchain smart contracts. Here’s a brief description of the five APIs:


Let’s take a closer look at how to use these five APIs. First, create a new contract SmartX and then follow the steps below. Aa usual, at the end of the article, we will provide the GitHub link of the source code.

2 How to Use Storage API

2.1 GetContext & GetReadOnlyContext

GetContext & GetReadOnlyContext gets the context in which the current smart contract runs. The return value is the reverse of the current smart contract hash. As the name implies, GetReadOnlyContext gets the context of the read-only mode. In the example below, the return value is the reverse of the contract hash displayed in the upper right corner.


2.2 Put

The Put function is responsible for storing the data on the blockchain in the form of a dictionary. As shown, Put accepts three parameters. GetContext gets the context of the current smart contract running, the key is the key value that needs to store data, and value is the value of the data that needs to be stored. Please note that if the key value is already in storage, the function will update its corresponding value.


2.3 Get

The Get function is responsible for reading the data in the existing blockchain through the key value. In the example below, you can fill in the key value in the parameter panel on the right to run the function and read the data corresponding to the key value in the blockchain:


2.4 Delete

The delete function is responsible for deleting the data in the blockchain through the key value. In the example below, you can fill in the key value to run the function in the parameter panel on the right and delete the data corresponding to the key value in the blockchain:


3 Storage API Sample Code

The following code gives a detailed example of the use of five APIs: GetContext; Get; Put; Delete; and GetReadOnlyContext. You can try to run these APIs on SmartX.

from ontology.interop.System.Storage import GetContext, Get, Put, Delete, GetReadOnlyContext
from 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':
        return get_data(key)
    if operation == 'save_data':
        return save_data(key, value)
    if operation == 'delete_data':
        return delete_data(key)
    return False

def get_sc():
    return GetContext()
def get_read_only_sc():
    return GetReadOnlyContext()

def get_data(key):
    return data
def save_data(key, value):
def delete_data(key):


Blockchain storage is the core of the entire blockchain system. The use of the Ontology Storage API is very simple and developer-friendly.

On the other hand, storage is the focus of hackers, such as the security threat we mentioned in one previous article: storage injection attack, developers must pay special attention to code security when writing storage-related code.

Find the detailed tutorial on GitHub here.

In the next article, we will discuss how to use the Runtime API. Stay tuned!

Are you a developer? Make sure you have joined our tech community on Discord. Also, take a look at the Developer Center on our website, there you can find developer tools, documentation, and more.

Find Ontology elsewhere

Ontology website
GitHub / Discord
Telegram (English/ Russian )
Twitter / Reddit /
Рейтинг 0
Комментарии 0
Комментарии Комментировать




DevOps инженер
54 вакансии
Python разработчик
138 вакансий
Data Scientist
117 вакансий