ImSQL是由中科物缘原创,具有完全自主知识产权,基于区块链及分布式存储等技术思想,兼具了可信数据存储、海量大数据存储、隐私碎片化存储等能力和优势。插件具有以下功能:
智能合约的部署ImSQL智能合约在部署调用的时候都会携带用户的专属证书,证书会在用户加入联盟链的时候由联盟链的管理者颁发,证书中包括了用户的个人信息,代替了用户名密码的作用,并且该证书由根证书的公钥加密,在进行接口调用时会使用根证书的私钥对证书进行验证,确保使用者是联盟成员。ImSQL智能合约部署的时候会将智能合约编译,并将编译后的结果和证书一起传到后台,将智能合约编码,用户信息以及ABI信息组合使用sha3加密,作为键,将智能合约作为值,组成键值对存储在链上。在存储之前会根据算出的键去查找是否已经存在该智能合约,所以,一个用户只能部署相同的智能合约一次,但是不同的用户可以部署相同的智能合约。所以,当提示 “该智能合约已经存在” 的时候,请查看一下已部署的智能合约。 点击左侧菜单栏上面第一个图标,进入资源管理器选项卡,点击打开文件夹,选择你的智能合约源文件存放路径 在此路径中,你可以选择一个已经编写好的智能合约文件,或者编写一个新的智能合约。 智能合约测试用例:
打开要编译部署的智能合约文件,按F8,或者点击鼠标右键,选择ImSQL:编译智能合约,打开ImSQL智能合约窗口 如上图,在 我的合约 选项卡下设置API地址,填写你自己对应的ImSQL后端API接口地址(因为在联盟链中,每一个节点会有自己的集群,用户在使用智能合约的时候只需要对接自己集群的接口即可) 设置证书路径,插件会自动扫描智能合约存放路径下所有后缀名为 .crt 的证书文件,选择确认即可。 以上两个信息设置成功之后,会根据用户设置的证书解析并展示**我的证书信息,**其中包括公司名,组织名和账户名的信息。 正常情况,在我的合约下面会显示我部署的智能合约,刚加入的用户没有部署过智能合约,所以我部署的智能合约标题下显示为空。 下面,部署我们的第一个智能合约: 在 合约编译 选项卡下进行智能合约的部署编译,可以直接输入合约描述进行编译部署当前智能合约,也可以点击第二个下拉选框选择其他 .sol 文件进行编译部署(第一个下拉选框为插件版本信息,不用关心), 这里直接编译部署当前智能合约源文件。 编译部署成功后会在下方直接显示该智能合约的信息,包括智能合约的描述,智能合约的链上地址和作者信息。 至此,一个ImSQL智能合约就部署成功啦! 智能合约的调用智能合约的执行可以在我的合约选项卡下点击自己已经部署的智能合约的右下角的执行合约按钮,系统将自动跳转到合约执行窗口,然后可以选择入口进行执行 也可以copy智能合约的地址,在合约执行选项卡中粘贴执行,智能合约的执行结果可以在控制台的输出中查看结果 如上图,跳转到合约执行窗口后,会显示该智能合约中所有的方法,其中黄色块为有参方法,蓝色块为无参方法,对于有参方法,参数需要在方法名后面根据提示的参数类型填写,参数填写完毕之后,点击色块进行调用。 如上图所示,调用结果会在下方控制台的输出栏中进行显示,包括请求主体和响应主体。 请求主体包括:合约地址(上面提到的根据智能合约,用户信息以及ABI计算出的存在链上的key值),方法名(即你点击的色块代表的函数名), 参数名集合,参数类型集合以及参数集合(三个集合中的数据根据集合中的下标一一对应)以及本次请求ID。 响应主体包括:结果代码(200表示调用成功,500为异常),结果信息(payload),结果信息中包括请求消息对象(ImSQL会将智能合约信息和用户信息构造成一个 contractInvokeMessage,发送到消息队列,由底层的智能合约节点订阅消费,并返回结果),异常信息,请求ID以及操作键值对信息(记录了本次调用对链上的操作细节)等。 智能合约列表在合约列表选项卡中,你可以查看链上所有的智能合约,并可以根据 “合约创建人” 和 “合约描述”进行模糊查询,查询结果会在下方展示 智能合约的编写ImSQL智能合约基于以太坊 solidity 语言实现,兼容以太坊虚拟机的部分特性,也基于ImSQL自身属性加入了部分新特性。想要顺利编写使用ImSQL智能合约需要用户对solidity有一定的了解。 编写一个合法的ImSQL智能合约需要了解(以上面的测试用例为例): 1.源文件可以包含任意数量的合约定义。 2.pragma是定义代码使用的编译器版本的声明,值得注意的是,这里使用的是ImSQL智能合约的编译器,而不是solidity的,上面显示的源文件只能使用版本号大于等于0.4.16并且小于0.7.0的ImSQL编译器。 3.如果你了解solidity或者以太坊,那么你一定知道以太坊有三个可以存储项目的区域Storage(持久化存储),Memory(内存)和Stack(堆栈),而在ImSQL中取消了智能合约中成员变量的持久化存储。 4.参数类型方面ImSQL智能合约沿用了solidity的参数类型,布尔(bool),整型(int/unit,uint8到uint256,步长为8(无符号,最多为256位),int8为int256),地址(address,保存一个20字节的值即ImSQL智能合约的地址大小),字符串(String,字符串文字用双引号或单引号如“foo”或'bar'编写,用于任意长度的UTF数据)。 5.在ImSQL中去掉了solidity中的block相关的属性以及方法。 6.在ImSQL中新加入了两个指令,分别为imsql.get(bytes key)和imsql.set(bytes key, bytes value),通过这两个指令可以对链上数据进行读写操作,通过这两个指令也可以看出ImSQL的数据存储格式为键值对。 除以上提到的变化外,其他智能合约的规则基本沿用solidity。 附录ImSQL中移除的特性block相关(区块)
tx相关(交易)
msg相关(消息)
address相关(地址)
其他
|