掌桥专利:专业的专利平台
掌桥专利
首页

一种基于自然语言的可视化智能合约开发系统

文献发布时间:2023-06-19 11:05:16


一种基于自然语言的可视化智能合约开发系统

技术领域

本发明涉及区块链智能合约技术领域。特别涉及自然语言可视化开发方法,结合智能合约开发方法,构成基于自然语言的可视化智能合约开发系统。

背景技术

随着区块链技术的不断发展,区块链及智能合约的应用领域正在不断扩大。智能合约的定义已经不仅限于可信交易领域,或法律合约领域。输入数据来源于区块链,且输出数据存入区块链,代码也存储在链上的可执行代码均被称为智能合约。现有的智能合约系统对于智能合约开发者的编程水平有一定的要求,对于没有编程基础的非计算机专业人员来说有较高的门槛。需要使用智能合约的业务人员没有开发智能合约的能力,而有开发智能合约的技术人员缺少对应的业务知识,这使得智能合约的编写需要技术人员与业务人员通力合作。在复杂或专业的领域中,完成一个智能合约的编写需要很大的沟通成本,开发效率极低。

本发明提供一种基于自然语言的可视化智能合约开发系统,使得非计算机专业人员无需技术人员介入,仅通过自然语言描绘智能合约的场景与逻辑,即可生成对应的智能合约代码,大大降低了智能合约的开发门槛。

发明内容

本发明为用户提供了简单友好的自然语言智能合约编辑器,适合没有编程基础,但需要进行智能合约开发的非计算机专业人员。编辑器提供智能合约编辑所需要的基本工具,用户进行简单的插入及填充等操作即可生成智能合约代码。编辑器可使用同一套自然语言描述,根据需求生成多种编程语言的智能合约代码。

本发明所指智能合约包括但不局限于可信交易协议或法律电子合约,区块链上的可执行代码均在本发明范围内。因此,在本说明书中,智能合约应被理解为是区块链上的可执行代码或区块链上符合法律的可执行代码。另一方面,常识应理解的智能合约(或在区块链上可执行的法律电子合约)应被理解为区块链上的可执行代码的特殊例子。在本文的其余部分,这两个术语“智能合约”和“区块链上的可执行代码,或区块链上符合法律的可执行代码”将互换使用,意义相同。

用户使用本发明的基本步骤如下:

(1)用户进入可视化智能合约编辑界面,开发新的智能合约;

(2)用户选用工具或控件,使用自然语言编写智能合约;

(3)用户保存自然语言智能合约,并提交智能合约生成请求;

(4)系统生成对应的智能合约代码;

(5)智能合约存储上链。

本发明包含四层结构:一、可视化层。用户通过可视化层使用自然语言,选用各种工具或控件,完成智能合约自然语言的开发。可视化层提供开发自然语言智能合约所需要的所有工具,并保证用户操作的实时显示与更新。二、模型层。模型层向可视化层提供各类模型,用于数据传输与交互,并实现自然语言描述转换为控件模型,控件模型转换为智能合约模型等功能。三、编程语言层。编程语言层实现智能合约模型向抽象语法树的转换,完成抽象语法树的映射与装载,以及智能合约代码的生成。四、存储层。自然语言描述的智能合约、控件模型、智能合约模型、生成的智能合约代码等能存入区块链中,同时也可使用数据库、文件等多种介质,进行数据的持久化。

进一步地,所述可视化层应至少包含四类功能:浏览功能,显示功能,工具功能,和编辑功能。可视化界面至少包含四类区域:浏览区域、显示区域、工具区域、编辑区域等。浏览功能应清晰地展示出用户正在编辑的智能合约的树形结构,包含但不限于参数列表、方法列表、元素顺序等。显示功能展示用户正在编辑的自然语言智能合约内容。工具区域提供编写智能合约必须的各类工具或控件,包含但不限于智能合约工具或控件、参数工具或控件、方法工具或控件等。编辑功能允许用户在自然语言智能合约中插入新的工具或控件,删除已使用的工具或控件,或进行配置修改、顺序调整等操作。

在一个实施案例中,用户在可视化界面将控件通过拖拉、拼接、编辑配置形成一个自然语言智能合约。

在一个实施案例中,用户在可视化界面通过插入、编辑配置、调整控件顺序等方式形成一个自然语言智能合约。

进一步地,所述模型层提供可视化层转换所需的自然语言模型、控件模型及智能合约模型。自然语言描述映射控件模型,控件模型映射智能合约模型。可视化层的每一步操作都对应到模型层的相应变化。控件模型组成控件模型库,向用户提供编辑智能合约的所有工具。用户选用控件后,如果该控件存在可输入区域或可编辑区域,控件模型向用户提供输入提示或可选项提示。可选项映射控件模型。控件模型对用户填入的自然语言描述进行验证。用户选用控件模型,编辑后形成控件模型实例,控件模型实例的集合最终转换为智能合约模型。编写智能合约可使用的自然语言结构、句式、词语、可插入元素等均可对应到模型库内的模型或模型实例。

更进一步地,智能合约模型可与控件模型不同,模型层的各类模型符合以下设计:

(1)智能合约总模型划分为智能合约基本信息、外部引用、全局参数、智能合约体四个部分。智能合约体内包含智能合约的初始化方法、可调用方法及内部方法。其中,初始化方法和内部方法为非必须结构。在某一实施例中,智能合约各个参数的初始值在参数声明时已经指定,则该智能合约无需创建初始化方法。在某一实施例中,智能合约不存在全局参数,各个可调用方法仅使用内部逻辑进行智能合约处理,则该智能合约无需创建初始化方法。内部方法仅可被智能合约的其他方法使用,而不可被用户直接调用,由编写智能合约的用户根据业务需求选择创建内部方法或不创建内部方法。

(2)初始化方法、可调用方法及内部方法都需符合方法的结构:至少包含方法名、传入参数、方法体和返回参数几个部分。方法体内可能包含的执行语句结构类型如下:

(2.1)如果……那么判断结构;

(2.2)循环结构,包括但不限于集合元素循环、条件循环、跳过当前循环元素、跳出循环;

(2.3)赋值语句;

(2.4)调用语句;

(2.5)参数操作;

(2.6)逻辑运算结构,包括运算符及四舍五入规则等;

(2.7)异常抛出语句;

(2.8) 声明语句。

(3)全局参数、方法传入参数、方法内部参数、方法返回参数等需符合基本参数结构,其属性至少包括参数名、参数类型、是否可为空及参数活动范围等。

进一步地,编程语言层对装载好的智能合约模型进行分析处理,转换为对应编程语言的抽象语法树,并进行代码输出。不同的编程语言使用不同的适配器,输入智能合约模型后,系统使用该编程语言的抽象语法树,进行模型与输出代码的转换,并将模型各部分转换后的代码进行拼接输出。

进一步地,存储层对智能合约的整个编写过程进行持久化。用户的自然语言描述,对应的控件模型,智能合约模型,以及最终输出的智能合约代码,均存储到区块链上,以便进行存证和溯源。根据实际场景需要或用户需求,各类数据也可在其他存储介质上进行存储。

本发明的优点为:

智能合约可以适用于更广泛的应用场景中,用户无需具备计算机专业知识,无需考虑代码逻辑,无需考虑智能合约的生成机制,只需要使用日常的自然语言即可编写出自己需要的智能合约,使得智能合约的使用更加大众化,打破技术壁垒。

附图说明

为了更清楚地说明本发明的技术方案,下面对本发明附图进行简单的描述,附图及描述仅为本发明的一种实施案例,设计与开发人员可使用其他方案进行设计与实现。

图1为本发明提出的一种基于自然语言的可视化智能合约开发系统的使用流程图;

图2为本发明提出的一种基于自然语言的可视化智能合约开发系统架构示意图;

图3为本发明提出的智能合约总模型基本结构示意图;

图4为本发明提出的智能合约方法模型基本结构示意图;

图5为本发明提出的智能合约参数模型基本结构示意图;

图6位本发明提出的JAVA实施例中智能合约模型实体示意图。

具体实施案例

为了更加清晰地说明本发明的实施技术方案,使得本发明的目的与描述更加易于理解,下面将以JAVA语言为例对本发明的实施进行说明。

某用户开发新的智能合约,用来记录该用户提交的文本数据。根据本发明描述的智能合约模型设计原则,用户需要进行以下的输入或配置:

(1)确定智能合约基本信息;

(2)确定智能合约全局参数;

(3)确定智能合约可调用的方法,即用来记录用户提交文本数据的方法;

(4)确认无误后提交。

对于步骤(1),用户需要输入智能合约的基本信息,以创建新的智能合约代码类。用户输入的智能合约基本信息如表1:

表格 智能合约基础信息

智能合约基本信息对应Java智能合约模型的ContractConstructor类,智能合约名称对应属性name,智能合约创建人对应属性author,智能合约描述对应属性description。由于智能合约的名称对应源代码中Java的类名,此处我们限制用户只能输入首字母大写的全英文文本。

用户配置完毕后,编辑器显示区域更新为(示意):

智能合约:Test

创建人:User1

描述:测试用智能合约

全局参数:(无)

初始化方法:(默认)

可调用方法:(无)

内部方法:(无)

对于步骤(2),用户需要确定当前智能合约的全局参数。用户选择参数工具,向智能合约增加新的全局参数,并填入参数配置。全局参数使用Java参数模型ContractAttr类,参数名对应属性name,是否需要初始化对应属性needInit,是否可为空对应属性nullable,参数类型对应属性attrType。为了符合Java语法,参数名要求为全小写英文文本。是否需要初始化,会影响系统对初始化方法(即Java构造函数)的处理。参数需要初始化,则智能合约有参构造函数会增加此字段为方法参数。如表2设置,持有人、实例代号、实例描述三个参数需要初始化,则系统生成的智能合约初始化方法

表格 2 智能合约全局参数

参数是否可为空影响着初始化方法中对于输入参数的校验。不可为空时则将对输入的参数进行空值判断,如果为空,则抛出异常警报。

用户选择的参数类型将影响参数对应的Java数据类型,本实施例中可选的参数类型及对应的Java类型如表3所示:

表格 3 参数类型与Java类型对照表

本实施例中,系统在创建新的智能合约时默认加入持有人、实例代号、实例描述三个全局参数,用于记录智能合约实例化后的信息,并提供查询功能。从业务角度出发,用户需要一个参数用于记录用户提交的文本数据,故添加集合类型的参数records,该参数初始时不记录任何数据,是否需要初始化配置为否。

用户添加完全局参数后,系统会根据全局参数自动生成初始化方法。编辑器显示区域更新为(示意):

智能合约:Test

创建人:User1

描述:测试用智能合约

全局参数:

1.持有人(文本)

2.实例代号(文本)

3.实例描述(文本)

4.记录集(有序列表)

初始化方法:

1.初始化时输入参数(输入参数1,输入参数2,输入参数3)

方法体:

1.1.校验

1.2. 将

1.3. 校验

1.4. 将

1.5. 校验

1.6. 将

可调用方法:(无)

内部方法:(无)。

对于步骤(3),用户想要实现文本数据的记录功能,需要向智能合约增加一个可调用方法。该方法至少包含一个参数,用于传递要记录的文本。用户选择方法工具,向智能合约添加新的可调用方法,用户配置如下:

可调用方法使用Java参数模型ContractMethod类。方法名对应属性name,isConstructor属性为false(系统生成的初始化方法isConstructor属性为true),返回参数的参数类型对应returnType属性。方法传入参数同样使用参数模型ContractAttr类,传入参数构成的列表对应ContractMethod类的attrs属性。可调用方法的modifier属性添加元素“public”,内部方法的modifier属性添加元素“private”。

方法添加后,用户在方法体内添加一条语句。因要将输入参数添加至全局参数中,所以选择使用参数操作工具,选中全局变量记录集后,将添加元素的操作添加至方法体,被添加对象为输入参数。方法体内的语句使用Java参数模型ContractStatement类,参数操作对应type属性,选中的全局变量和输入参数组成列表作为attr属性,具体的添加操作对应operation属性。

用户配置完毕后,编辑器显示区域更新为(示意):

智能合约:Test

创建人:User1

描述:测试用智能合约

全局参数:

1.持有人(文本)

2.实例代号(文本)

3.实例描述(文本)

4.记录集(有序列表)

初始化方法:

1.初始化时输入参数(输入参数1,输入参数2,输入参数3)

方法体:

1.1.校验

1.2. 将

1.3. 校验

1.4. 将

1.5. 校验

1.6. 将

可调用方法:

1.可调用方法:store(输入参数1)(无返回)

方法体:

1.1. 校验

1.2. 将

内部方法:(无)

对于步骤(4),用户保存编辑结果,并生成智能合约。系统使用Java开发工具中的AST(Abstract Syntax Tree,指抽象语法树)api进行模型转换,并导出Java代码。生成的Java智能合约代码如下,其中,系统内置了用于空值判断的isBlank内部方法。

package cn.tdchain;

import java.util.List;

import java.io.Serializable;

import java.util.ArrayList;

/**

* 测试用智能合约

* @author User1

*/

public class Test implements Serializable {

private static final long serialVersionUID = 1L;

private String owner;

private String symbol;

private String desc;

private List records = new ArrayList();

public Test(String owner, String symbol, String desc) {

if (isBlank(owner)) {

throw new RuntimeException("Null input");

}

this.owner = owner;

if (isBlank(symbol)) {

throw new RuntimeException("Null input");

}

this.symbol = symbol;

if (isBlank(desc)) {

throw new RuntimeException("Null input");

}

this.desc = desc;

}

public void store(String record){

if (isBlank(record)) {

throw new RuntimeException("Null input");

}

this.records.add(record);

}

public String getOwner(){

return owner;

}

public void setOwner(String owner) {

this.owner = owner;

}

public String getSymbol(){

return symbol;

}

public void setSymbol(String symbol) {

this.symbol = symbol;

}

public String getDesc(){

return desc;

}

public void setDesc(String desc) {

this.desc = desc;

}

public List getRecords(){

return records;

}

public void setRecords(List records) {

this.records = records;

}

private boolean isBlank(String code) {

return code == null || code.length() == 0;

}

}

以上为本发明用于文本记录的实施例。此外,本实施例还可用于创建和编辑金融领域、知识产权领域、监管领域、法律领域、社会养老保障领域、供应链金融领域、结算支付等领域的智能合约。各个不同领域编写智能合约的主要区别在于,根据实际的业务需求,用户需添加不同的全局变量,添加不同的可调用方法,在方法内添加不同类型的语句,以支持领域的业务处理逻辑。但各个领域使用本发明进行智能合约的自然语言开发流程是共通的。

虽然本发明已经参考特定的说明性实施例进行了描述,但是不会受到这些实施例的限定而仅仅受到附加权利要求的限定。本领域技术人员应当理解可以在不偏离本发明的保护范围和精神的情况下对本发明的实施例能够进行改动和修改。

相关技术
  • 一种基于自然语言的可视化智能合约开发系统
  • 可视化智能合约系统以及智能合约的处理方法
技术分类

06120112793416