BSN智能合约开发培训-FISCO BCOS(二)

2022-12-18 0 508

全文: BSN智能化合同合作开发专业培训-FISCO BCOS(二)

译者:浙商银行银行

做为BSN第一个导入的升级换代国联链下层架构,FISCO BCOS将在4月份完成BSN网络连接并迈入内测,下周,合作开发人员可以完全免费布署一个具有四个记帐结点的应用领域。

现阶段,FISCO BCOS网络平台全力支持Solidity和Precompiled三种类别的智能化合同,与此同时,提供更多互动式控制面板辅助工具(Console),方便快捷合作开发人员与链进行可视化,布署、初始化智能化合约。

BSN智能合约开发培训-FISCO BCOS(二)

1.智能化合同概要

不可否认,智能化合同的出现,使区块链不但能处置单纯的提款机能,还能实现繁杂的业务方法论,很大地促进了区块链技术发展,快速应用领域破冰。

现阶段,在为数众多区块链网络平台中,绝大多数软件系统了镜像坊软件包,并采用Solidity做为智能化合同合作开发词汇。做为两门面向合同的高阶编程词汇,Solidity先进经验了C++、Python和JavaScript等词汇的结构设计,采用动态类别,不但全力支持基础/繁杂数据类别操作方式、方法论操作方式,与此同时提供更多高阶词汇的相关优点,比如说承继、空载、库和采用者自订类别等。

做为最大最活耀的升级换代开放源码国联链街道社区,FISCO BOCS点对点全力支持Solidity合同,并提供更多从合作开发、校对、布署到初始化的全信道辅助工具和完备软件系统,使智能化合同和区块链应用领域合作开发显得单纯。

除此以外,如前所述大量积极探索和课堂教学,FISCO BCOS不但全力支持Solidity合同,还全力支持Precompiled合同,并在采用者层提供更多CRUD合同USB。面向全国库表合作开发的CRUD合同不但更合乎采用者合作开发生活习惯,进一步减少合同合作开发技术难度,提高操控性,使区块链应用领域满足用户高mammalian情景的政治理念。

2.智能化合同进行分类

FISCO BCOS网络平台全力支持三种类别的智能化合同:Solidity合同和Precompiled合同。

2.1 Solidity合同

Solidity合同运行在EVM上,EVM为镜像坊软件包,采用哈佛架构,指令、数据和栈完全分离。

在智能化合同运行期间,首先创建一个沙盒环境(EVM实例),沙盒环境与外部环境完全隔离,无法访问网络

从应用领域破冰的数量来看,Solidity合同采用最为广泛,几乎所有区块链网络平台都全力支持,但Solidity也有很多缺点。如下:

●合同在EVM中串行执行,操控性较差;

●跨合同初始化会新建EVM,内存开销较大;

●合同变量和数据存在MPT数中,不便于合约升级;

●方法论和数据耦合,不便于存储扩容。

2.2 Precompiled合同

Precompiled合同即预校对合同。预校对合同通过Precompiled引擎执行,采用C++编写合同方法论,合同校对软件系统进FISCO BCOS下层结点。

初始化合同不进EVM,可并行执行,突破EVM操控性瓶颈;提供更多标准合作开发架构,只需承继基类,实现callUSB即可;适合于方法论相对确定、追求高mammalian的情景;数据存在表中,与合同分离,可升级合同方法论。

当然,预校对合同的采用有一定的门槛。如下:

●对于数据的存储,需要创建FISCO BCOS特有的表结构;

●编写合与此同时需承继Precompiled类,然后实现CallUSB函数;

●完成合同开发后,需在下层为预校对合同注册地址;

●编写完成合同后,需要重新校对FISCO BCOS源码。

为了屏蔽预校对合同在合作开发和采用中的门槛,FISCO BCOS如前所述预校对合同和分布式存储结构设计了CRUD合同USB。采用者在编写Solidity合与此同时,只需要导入抽象合同USB文件Table.sol,便可采用CRUD机能,采用者不需要关心下层的具体实现。

3.智能化合同合作开发

本节将如前所述全球英文认证考试成绩管理做为情景,如前所述FISCO BCOS网络平台对智能化合同进行合作开发。全球认证考试包括GRE、TOEFL、IELTS等。为了简化合同方法论,所有成绩统一由考试管理中心发布和管理,学生可以根据自己的账号(地址)查询自己的考试成绩。

3.1 Solidity合同合作开发

在 Solidity 中,合同类似于面向全国对象编程词汇中的类。Solidity合同有自身的代码结构,由几个部分组成,如下所示。

●状态变量:状态变量是永久存储在合同中的值

●构造函数:用于布署并初始化合同

●事件:事件是能方便快捷地初始化镜像坊软件包日志机能的USB

●修饰器:函数修饰器可以用来改变函数的行为,比如说自动检查,类似Spring的AOP

●函数:函数是合同中代码的可执行单元

创建合同

首先创建一个名为StudentScoreBySol的合同,用于管理学生的成绩。如下代码所示,开头需要导入合同版本。

定义状态变量

状态变量用于存储和管理学生的考试成绩。

在当前情景中定义两个变量,其中_owner为合同的创建者,即考试管理中心;_scores用于存储学生成绩,为一个嵌套mapping类别,第一个mapping的key(address)为学生的账户(私钥对应的地址),value也为一个mapping类别,对应为每一科的成绩,在第二个mapping中key(bytes32)为科目名称,如GRE、TOEFL等,value(uint8)为成绩。如下所示。

定义事件

定义一个事件setScoreEvent,用于跟踪对学生成绩的新增/修改操作方式,可以在业务层面对事件进行监听。事件的定义是可选的,如果没有定义也没关系,在业务层面可以根据方法的返回值去判断交易是否成功,但无法做到更精细的问题定位。

定义修饰器

智能化合同中的修饰器(Modifier)类似面向全国对象编程中的AOP,满足用户条件才会执行后续操作方式。如下所示,修饰器要求必须是合同的Owner才能进行后续操作方式,其中Owner为考试管理中心。

定义构造方法

构造方法用于实例化合同,在当前构造方法中,指定Owner为合同的布署者。

编写函数

当前合同中,定义两个函数,setScore函数用于新增/修改/删除(score置为0)学生成绩,并采用了onlyOwner修饰器,只有Owner(考试管理中心)才能操作方式,并通过setScoreEvent事件跟踪每次操作方式内容。getScore方法用于成绩查询,其中view修饰符表示不会修改状态变量。

BSN智能合约开发培训-FISCO BCOS(二)

Solidity合同完备代码如下所示。如前所述Solidity词汇的合同合作开发,看似单纯,但需要对Solidity编程词汇深入学习,才能编写出高可用的合同,具备一定学习成本。

通过FISCO BCOS开放源码街道社区推出

更多细节可参考Solidity官方文档:

BSN智能合约开发培训-FISCO BCOS(二)

3.2 CRUD合同合作开发

CRUD合同是CRUD机能的核心,采用者可以直接在合同中引用CRUDUSB文件Table.sol,并在Solidity合同中初始化CRUDUSB。CRUD合同的合作开发完全遵从数据库的操作方式生活习惯,更容易理解和上手。

CRUD合同更多合作开发细节可参考:

创建合同

CRUD创建的合同和Solidity创建的没有太大区别,唯一区别在于需要导入CRUDUSB文件Table.sol,如下所示。修饰器和构造方法的作用与Solidity合同相同。

BSN智能合约开发培训-FISCO BCOS(二)

事件定义

在Solidity合同中可以通过setScore完成成绩的新增/修改/删除,但在CRUD合同中,需要借助CRUDUSB文件的不同USB,通过不同函数实现,所以需要针对不同的函数定义不同时间,如下所示。

●createEvent:用于跟踪创建表操作方式;

●insertEvent:用于跟踪插入成绩操作方式;

●updateEvent:用于跟踪更新成绩操作方式;

●removeEvent:用于跟踪删除成绩操作方式。

创建表函数

CRUD合同实现业务机能,首先需要像数据库操作方式一样,创建一张表,用于存放数据。

FISCO BCOS下层提供更多了TableFactory合同,该合同的地址固定为0x1001,可以通过TableFactory对象提供更多的方法对表进行创建(createTable)和打开(openTable),如下所示。

createTableUSB返回值为0时,说明创建成功。需要注意的是,为了让创建的表可被多个合同共享访问,表名必须是群组内全局可见且唯一的,无法在同一条链上的同一个群组中,创建多个名称相同的表。

新增成绩函数

对表进行操作方式时,首先需要通过TableFactory打开对应的表,获得表对象,然后通过表对象的insert方法进行数据插入。在插入数据前,首先需要构建一个Entry对象实例,代码如下所示。

BSN智能合约开发培训-FISCO BCOS(二)

需要注意的是,TableUSB合同的insert、remove、update和select函数返回值类似数据库,均为受影响的记录行数,且USB中key的类别为string。

而在当前情景中,学生的studentId为address类别,所以需要在函数内部将address类别转化为string类别,代码如下。

BSN智能合约开发培训-FISCO BCOS(二)

更新成绩函数

更新成绩操作方式步骤包括:通过TableFactory对象打开表,然后,像数据库一样构造筛选条件。

在CRUD合同USB中,提供更多了Condition对象,该对象提供更多了诸如大于、等于、小于等一系列条件方法。构造完成条件对象后,可以初始化table对象的udpdateUSB,完成更新操作方式,代码如下。

删除成绩操作方式

删除操作方式和更新操作方式类似,需要初始化table.removeUSB完成,不再赘述,代码如下。

查询成绩操作方式

查询成绩操作方式很单纯,需要初始化table.selectUSB完成,代码如下。

至此如前所述CRUD的合同合作开发完成。

从当前情景的代码行数来看,CRUD合同比较繁杂,Solidity合同相对单纯。但这只是一个幻觉,实际情况可能并非如此。而且CRUD合同的合作开发更合乎合作开发人员生活习惯,没有多余的学习成本,更容易理解和上手。

4.合同布署及初始化

合作开发完智能化合同后,需要对合同进行校对和布署,然后才能初始化。FISCO BCOS网络平台提供更多了互动式控制面板辅助工具(Console),可以非常方便快捷地与链进行可视化。下面将以上述智能化合同为例,采用控制面板辅助工具进行布署和初始化。

控制面板安装及采用可参考:

4.1准备工作

在对合同进行布署和初始化前需要做三件事情。首先复制编写好的合同到控制面板目录

console/contracts/solidity下。如下图所示。

其次对合同进行校对,可以采用控制面板目录下的sol2java.sh脚本对合同进行校对,校对结束后会在console/contracts/sdk目录下生成如下文件夹,如下图所示。

其中abi中存放合同的ABI,bin存放合同的二级制编码文件(BINARY),JAVA文件夹中为对应的JAVA合同,便于通过SDK和链进行可视化。

需要注意的是对CRUD合同校对时。需要将CRUDUSB合同Table.sol一并放入

console/contracts/solidity目录下,不然会报错。

最后,对合同进行布署时,依赖外部账户,所以首先需要生成账户。在控制面板中提供更多了账户生成辅助工具get_account.sh,运行该脚本会在console/accounts目录下生成账户。

我们利用账户生成辅助工具生成两个账户。一个为考试管理中心的账户,用于布署和新增/修改/删除学生成绩;一个为学生账户,用于查看考试成绩。如下所示。

4.2 Solidity合同布署和初始化

首先采用考试管理中心账户启动控制面板,如下图所示,即表示控制面板启动成功。

BSN智能合约开发培训-FISCO BCOS(二)

然后通过deploy命令对合同进行布署,合同布署成功之后会返回合同地址,如下图所示。

合同布署完成之后,可以通过控制面板的call命令初始化合同函数。如下图所示,新增学生的GRE成绩为70(修改和删除均可通过初始化setScore方法进行操作方式),函数返回值为true,则表示交易成功。call命令的具体用法可以通过call -h 查看。

采用学生账户启动控制面板,通过getScore函数查看成绩,如下图所示,返回值为70,说明没有问题。也可以采用学生账户初始化setScore方法,会报错,打印没有权限,不再赘述。

BSN智能合约开发培训-FISCO BCOS(二)

4.3 CRUD合同布署和初始化

CRUD合同的布署和初始化和Solidity合约没有区别,这里同样采用控制面板进行。

首先采用考试管理中心账户启动控制面板,并对StudentScoreByCRUD合同进行布署。如下图所示。

BSN智能合约开发培训-FISCO BCOS(二)

合同布署完成之后,初始化create函数创建stu_score表,如下所示,返回结果为0,说明创建成功。

创建好表之后,就可以初始化相关USB对学生成绩进行操作方式了,首先初始化insert函数新增学生成绩。如下所示,返回结果为1,说明插入成绩成功。

BSN智能合约开发培训-FISCO BCOS(二)

成绩插入成功之后,关闭当前控制面板,用学生账户登录控制面板,并初始化select函数查询成绩,如下图所示,返回70,说明查询成功。剩余函数测试可自行完成,不再赘述。

BSN智能合约开发培训-FISCO BCOS(二)

5.结束语

本文重点介绍了FISCO BCOS网络平台的智能化合同合作开发。在FISCO BCOS网络平台中,既可以采用原生Solidity词汇合作开发智能化合同,也可以采用预校对合同模式合作开发合同。Solidity合同操控性差、学习成本高;预校对合同,采用预校对引擎,全力支持并行计算,操控性更高,与此同时全力支持存储扩容等。

但由于预校对合同采用存在一定的门槛,如前所述此,FISCO BCOS网络平台合作开发了CRUD合同USB,采用者不需要关心下层的实现方法论,只需要导入Table.sol合同USB文件,通过初始化相关USB即可完成合同的合作开发。

(1、 内容来自链得得内容开放网络平台“得得号”,稿件内容仅代表译者观点,不代表链得得官方立场。2、 凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责。3、 得得号网络平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,网络平台会立即下线。如遇文章内容问题,请发送至邮箱:[email protected]

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务