如何使用Python on Ontology编写智能合约? 第2部分:存储API

图片
这是先前在Ontology Medium博客上发布的官方教程
激动地将其发布给Habr读者。 随时提出任何相关问题,并为教程材料提出更好的格式

前言


在前面的第1部分中,我们介绍了本体智能合约的Blockchain&Block API 。 今天,我们将讨论如何使用第二个模块: Storage API 。 存储API具有五个相关的API,可以在区块链智能合约中添加,删除和更改持久性存储。 以下是这五个API的简要说明:

图片

让我们仔细看看如何使用这五个API。 首先,创建一个新的合同SmartX ,然后执行以下步骤。 通常,在文章结尾,我们将提供源代码的GitHub链接。

2如何使用存储API


2.1 GetContext和GetReadOnlyContext


GetContext和GetReadOnlyContext获取运行当前智能合约的上下文。 返回值与当前智能合约哈希相反。 顾名思义, GetReadOnlyContext获取只读模式的上下文。 在下面的示例中,返回值与右上角显示的合同哈希相反。

图片

2.2放


Put函数负责以字典的形式将数据存储在区块链上。 如图所示,Put接受三个参数。 GetContext获取当前运行的智能合约的上下文,键是需要存储数据的键值,值是需要存储的数据的值。 请注意,如果键值已在存储中,则该函数将更新其相应的值。

图片

2.3获取


Get函数负责通过键值读取现有区块链中的数据。 在下面的示例中,您可以在右侧的参数面板中填写键值以运行该函数,并读取与区块链中的键值对应的数据:

图片

2.4删除


删除功能负责通过键值删除区块链中的数据。 在下面的示例中,您可以在右侧的参数面板中填写键值以运行该函数,并在区块链中删除与键值对应的数据:

图片

3 Storage API示例代码


以下代码给出了使用五个API的详细示例: GetContext; 得到 删掉 和GetReadOnlyContext 。 您可以尝试在SmartX上运行这些API。

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': 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) 

后记


区块链存储是整个区块链系统的核心。 Ontology Storage API的使用非常简单且对开发人员友好。

另一方面,存储是黑客关注的焦点,例如我们在前一篇文章中提到的安全威胁: 存储注入攻击 ,开发人员在编写与存储相关的代码时必须特别注意代码安全性。

此处找到有关GitHub的详细教程。

在下一篇文章中,我们将讨论如何使用Runtime API 。 敬请期待!



您是开发人员吗? 确保您已加入Discord上的我们的技术社区。 另外,请访问我们网站上的开发人员中心,在那里您可以找到开发人员工具,文档等。



在其他地方找到本体


本体网站
GitHub / 不和谐
电报( 英文 / 俄文
Twitter / Reddit /

Source: https://habr.com/ru/post/zh-CN470720/


All Articles