将自己学习过程中的内容进行梳理,方便以后查阅回忆。
一、链上数据存储类型
BCOS中数据存储类型可以大体分为三种:
1、在经典的Solidity合约中,使用struct、mapping、array等数据类型进行存储;
2、在经典Solidity基础之上,加入预编译合约,使用CRUD表的方式相结合进行存储数据;
3、直接使用Web3j SDK中的CRUDService 进行表操作,不需要编写编译合约等过程;
二、存储方案选择
如何选择存储方案需要结合实际的业务需求
首先在业务中,如果仅需要存储结构型数据上链,则可直接使用CRUDService的方式,但是,由于不能再使用链上权限校验,则需要通过PermissionService去管理表的写权限,从而对数据进行保护,使得只有拥有相关表权限的账户才能进行相关操作。详细操作参照文档-
然而,CRUDService的方式虽然简单高效,但其无法应对一些存在链上数据计算操作的特殊需求,在这种情况下,则可通过在Solidity中使用CRUD预编译操作来进行,将一些特殊的变量用普通数据类型进行存储,将普通满足表结构的数据类型使用表存储。注意,凡是涉及到用表进行数据存储的过程,都需要使用PermissionService进行权限设定,从而保证数据的安全性。
三、合约编写
为了合约的后期维护和拓展,尽可能将权限、数据和服务等过程进行分离,结合Web开发中的经验,可将数据存储层即表和变量等放在“Dao”层中,将数据操作等放在“service”层中,最后将对外调用的接口放在“controller”层中。通过继承,调用的方式,实现整体需求,一方面降低了维护的成本,另一方面在上层服务发生简单变化时能够保护之前的数据。
注意:引用的合约必须跟合约最新的版本相一致,不然会出现相关错误 如-revert instruction
本文介绍了BCOS平台上的三种数据存储方式,包括Solidity合约存储、预编译合约结合CRUD以及直接使用CRUDService。根据业务需求选择存储方案,如需权限管理可借助PermissionService。在合约编写时,建议采用类似Web开发的三层架构,提高可维护性。注意合约升级时要保持版本一致,以避免错误。
23万+

被折叠的 条评论
为什么被折叠?



