How to Use List and Map in Smart Contract

How to Use List and Map in Smart Contract


Version 0.1

List: The most basic data structure in Python is the sequence.

Contract about list operation

from ontology.interop.System.Storage import Put, Get, GetContext
from ontology.interop.System.Runtime import Notify, Serialize, Deserialize
from ontology.builtins import append, remove, range, len, print

LISTKEY = "List"

def Main(operation, args):
    if operation == "init":
        return init()
    if operation == "add_list":
        elements = args[0]
        return add_list(elements)
    if operation == "remove_list":
        element = args[0]
        return remove_list(element)
    
def init():
    # init list
    list1 = [1,2,3]
    list1Info = Serialize(list1)
    # save data 
    Put(GetContext(), LISTKEY, list1Info)
    
    Notify(["init list is ",list1])
    
    return True

def add_list(elements):
    # get data from persistent storage area
    list1Info = Get(GetContext(), LISTKEY)
    list1 = Deserialize(list1Info)
    
    Notify(["before add, list is ", list1])

    for element in elements:
        list1.append(element)
    list1Info = Serialize(list1)
    Put(GetContext(), LISTKEY, list1Info)
    Notify(["after add, list is ", list1])

    return list1

def remove_list(element):
    # get data from persistent storage area
    list1Info = Get(GetContext(), LISTKEY)
    list1 = Deserialize(list1Info)
    
    Notify(["before add, list is ", list1])

    list1.remove(element)
    list1Info = Serialize(list1)
    Put(GetContext(), LISTKEY, list1Info)
    Notify(["after remove, list is ", list1])
    return list1

Contract about map operation

from ontology.interop.System.Storage import Put, Get, GetContext
from ontology.interop.System.Runtime import Notify, Serialize, Deserialize
from ontology.builtins import append, remove

MAPKEY = "Map"

def Main(operation, args):
    if operation == "init":
        return init()
    if operation == "add_map":
        key = args[0]
        value = args[1]
        return add_map(key, value)
    if operation == "remove_map":
        key = args[0]
        return remove_map(key)
    return False

def init():
    # init map
    map1 = {
        "key1":1,
        "key2":2
    }
    map1Info = Serialize(map1)
    Put(GetContext(), MAPKEY, map1Info)
    # return result
    Notify(["init map is ", map1["key1"], map1["key2"]])

    return True


def add_map(key, value):
    map1Info = Get(GetContext(), MAPKEY)
    map1 = Deserialize(map1Info)

    Notify(["before add, map is ", map1["key1"], map1["key2"]])
    # add data 
    map1[key] = value
    map1Info = Serialize(map1)
    Put(GetContext(), MAPKEY, map1Info)
    Notify(["after add, map is ", map1["key1"], map1["key2"], map1[key]])

    return True
    
def remove_map(key):
    map1Info = Get(GetContext(), MAPKEY)
    map1 = Deserialize(map1Info)
    Notify(["before remove, map is ", map1["key1"], map1["key2"], map1[key]])
    map1.remove(key)
    map1Info = Serialize(map1)
    Put(GetContext(), MAPKEY, map1Info)
    Notify(["after remove, map is ", map1["key1"], map1["key2"]])

    return True

你可能感兴趣的:(How to Use List and Map in Smart Contract)