小言_互联网的博客

从零学本体dApp开发(18):分片智能合约也有存储 dAPI

250人阅读  评论(0)

原创 | 工匠 (来自本体社区的技术人员)

---------------

写在前面

最近在利用业余时间学习本体的开发。我打算把自己学习的过程记录下来,一方面便于自己梳理学到的东西,另一方面希望可以通过笔记的共享,能使本体后来的开发者少走弯路。

 

由于是初学者,学习本体开发的过程中遇到了很多问题,在此,特别感谢本体社区的各位老师(宏雷、楚笙、Mickey、雪飞的逆袭、Andy季、周佩文等)耐心地为我解答各种各样的问题,本体有你们,真好!

 

学习本篇的目的:

    Storeage dAPI,即存储dAPI,就是存储相关的操作,我们都知道数据库的存储操作主要有增加、删除、修改和查找,本体智能合约的存储也是围绕这四个动作,这一篇我们就来学习一下,在和在本体的智能合约中进行增加、删除、修改和查找。

 

目录:

1. Storeage dAPI有哪些?

2. 如何创建合约来调用?

1.Storeage dAPI有哪些?

 

存储API主要有5个,如下图:

1.1 GetContext()查询

    这个dAPI用于调用智能合约的存储。

    它返回的是合约的哈希值,我们知道每个合约都是存储在区块链上的,那我我们怎么查找这个合约存在区块链上的哪一个存储区呢?就可以通过这个dAPI查询。

 

1.2 GetReadOnlyContext()查询

    用于调用智能合约的存储。用户只能读取,但是没有权利将任何数据放入和删除到持久存储区域。

 

1.3 Get()查询

    用于从存储中获取数据,可以通过key查找到相应的value

 

1.4 Put()增加/修改

    用于将数据保存到存储,也可以实现修改操作

 

1.5 Delete()删除

    用于根据key从存储中删除对应的数据

 

下面这张图,详细地说明了每个dAPI地参数和返回值,

 

2.如何创建合约来调用?

2.1编译

    copy官方提供地智能合约代码到SmartX中,这份合约中包含了所有Storeage dAPI地调用,如下图:

编译完成后我们可以在ABI文件里看到这个合约包含5个函数,每个函数分别调用一个dAPI,如下图:

方法列表:

get_sc( )

get_read_only_sc( )

get_data( key )

save_data( key , value )

delete_data( key )

 

2.2 部署

·点击“部署”,输入密码后,看到可以选择运行如下函数:

 

 

2.3 运行

2.3.1get_sc 查询

    首先,选择函数get_sc,debug运行结果如下:

    2019/6/30 下午4:39:23 Invoke: Interop(3deae9a67f48009f380698a9ad0da250ddd44b6b)

3d开头地数据就是哈希值,这个值跟合约地哈希值(如下图)是反序地。

 

2.3.2 get_read_only_sc 查询

选择函数get_read_only_sc,debug运行结果如下:

2019/6/30 下午4:43:32 Invoke: Interop(3deae9a67f48009f380698a9ad0da250ddd44b6b)

跟上面一个函数地执行结果是一样地,因为这两个函数查询地是一个存储区。区别是一个只能读,另一个可写可读。

 

2.3.3 save_data 增加/修改

选择save_data函数,设置key为字符串型值为1,设置value为整型值为2,

因为是网链上增加数据,这时候我们不能选择debug运行或与执行,必须选择“运行”,运行结果是成功的,如下:

 

2.3.4 get_data 查询数据

选择get_data 函数,设置key为字符串型值为1,点击运行,返回地结果是2

 

2.3.5 delete_data 删除数据

选择delete_data 函数,设置key为字符串型值为1,点击运行,返回地结果如下图:

 

然后我们在查询一次看看是否删除成功,

选择get_data 函数,设置key为字符串型值为1,点击运行,返回地结果如下图:

可以看到返回结果是空地字符串,说明删除成功了。

 

写在最后

希望有更多的小伙伴参与到本体开发学习中来,让我们共同为本体的生态建设添砖加瓦!感兴趣的小伙伴可以联系我,共同学习!


转载:https://blog.csdn.net/ontologycoding/article/details/101213017
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场