1.区块链
现在,当我写这篇文章时,比特币汇率已经相对于最大值下降了五倍以上,当我说我正在做与区块链有关的事情时,我听到的第一件事就是持怀疑态度的人:“现在谁需要你所有这些区块链” 。
是的,确实围绕区块链的宣传已经过去。 但是基础技术仍然存在,它们正在发展,并将继续发展,并将在某些特定领域使用。
在Internet上,尤其是在Habré上,有很多材料描述了技术应用的一般领域(例如,
habr.com/company/bitfury/blog/353350和
habr.com/company/raiffeisenbank/blog/332756的更具体示例)。
如您所知,区块链是一个分布式注册表,即 一个分布在多个节点之间的数据库,而每个节点都存储注册表的完整副本。 区块链的独特之处在于,记录(交易)被分组为多个块,并且这些块被组合成一个块链。 但是,仅数据添加操作可用。 所有这些导致一个事实,即几乎不可能对已经保存在区块链中的交易进行更改。
关于区块链如何工作的材料很多(如果您以前从未听说过有关区块链的任何知识,那么可以从
这个简单的视频开始)。
在对区块链技术兴趣最大的时候,有很多人呼吁绝对在任何地方使用区块链。 但是,有一些项目/任务的迹象,其实现可能需要区块链。
首先,记录数据的大量参与者(用户)的参与,同时必须防止不一致并增加信心。
其次,缺乏每个人都信任的第三方。
第三,需要一种公共数据验证机制。
如果满足以上所有条件,则需要考虑使用区块链。
这些任务可以在任何行业中出现。
www.101blockchains.com项目收集有关潜在项目和已实施项目的信息,以及有关在不同领域使用区块链的功能的信息。
例如,在医疗保健领域,可以使用区块链:
- 安全管理患者数据;
- 通过整个供应链中的固定交易来打击假冒药品;
- 通过消除欺诈和数据操纵来改善临床试验的监测和有效性。
在公司部门中使用区块链时,他们通常使用具有各种权限级别的私有区块链(私有权限区块链)。 这样的网络具有用于确认交易的特殊节点集。
但是,在开发第一个用于
区块链的InterSystems IRIS适配器时,我们选择了
Ethereum ,它属于Permissionless Blockchain类别-无管理机构的开放平台。 这种选择与以太坊的普及以及相当发达的基础架构有关:各种工具和库的存在。 您还可以注意到,使用以太坊软件可以
创建私有区块
链 。
2.适配器
现在是时候进行适配器本身了。
InterSystems IRIS(以及Ensemble)中的适配器是InterSystems IRIS类的类或程序包,它们提供了与外部系统一起工作的能力。 InterSystems IRIS适配器分为传入(当外部系统是交互的发起者时用于从外部系统接收数据)和传出(用于当交互系统的发起者是InterSystems IRIS时与外部系统一起工作)。
IRIS Ethereum适配器是传出适配器,与大多数其他InterSystems IRIS适配器略有不同,因为该适配器的一部分是InterSystems IRIS类的包,但是该适配器还包括一个小的NodeJS模块。 该架构如图1所示。
图1NodeJS适配器模块使用现有的NodeJS库与以太坊一起使用。
适配器提供以下功能:
- 在以太坊中放置智能合约(我们计划编写另一篇文章,在其中我们将更多地讨论智能合约,开发工具并讨论示例)。
- 调用智能合约方法:不改变区块链状态的两种方法以及改变区块链状态的方法
- 保存交易(将资金从钱包转移到钱包)
- 调用辅助方法以获取区块链状态
- 记录所有请求(执行NodeJS模块,对调试很有用)
该适配器随OpenExchange源代码一起提供 。
3.一个简单的例子
适配器安装了一个“ Hello world”示例。
要开始使用以太坊(包括运行本示例),您需要:
- 选择您要使用的网络。 为了进行开发,通常使用诸如Ropsten之类的测试网络。
- 在此网络上创建一个钱包并进行补充
- 安装本地以太坊客户端(例如,Geth)或获取与云提供商一起使用的密钥(例如,Infura)
设置业务交易时,必须指定(图2):
- 运行NodeJS模块的服务器和端口(默认端口为3000)
- 提供程序设置(在这种情况下,访问Infura)
- 访问详细信息(在访问详细信息中,您需要将您的钱包作为用户名,从钱包中将私钥作为密码。在InterSystems IRIS中,访问详细信息存储在单独的数据库中,必须对此数据库启用加密)
图2要使用智能合约,您将需要在文件系统中创建一个文件夹(对于要联系的每个智能合约),并在其中放置2个文件:
* abi.txt
* bytecode.txt
这些文件必须具有ABI智能合约和字节码。 智能合约ABI-JSON格式的智能合约界面的正式描述。 在编译智能合约时会创建ABI和Bytecode。
字节码仅用于部署合同。
使用测试服务,您可以验证业务交易的操作。
在图3中,使用测试服务部署了智能合约。 调用此业务操作的结果是一条包含事务哈希的消息。
图3使用ropsten.etherscan.io浏览器(https://etherscan.io/),您可以找到此交易并获取放置的智能合约的地址。
要使用适配器执行智能合约方法,必须在产品配置中指定设置:ContractFolder和ContractAddress。
调用智能合约方法的代码非常简单:
set ..ContractABI = [].%FromJSON(..ContractFolder_"abi.txt") set contract = ..Adapter.GetContract( ##class(Ethereum.Address).%New(..ContractAddress), ..ContractABI) set result = contract.hello() set pResponse = ##class(Ens.StringContainer).%New(result.args)
使用GetContract适配器方法(该方法传递了智能合约和ABI的地址),创建了智能合约对象,然后将其用于调用这些方法。 在这种情况下,应在智能协定中定义hello()方法,该协定返回一个字符串。
在此示例中,hello()方法不会更改区块链的状态,因此可以同步调用它。 但是,更改区块链状态的方法可能会花费很长时间(等待交易确认)。
要调用此类方法,可以使用InterSystems IRIS中的延迟响应机制。 适配器需要传递延迟的令牌,然后,当确认NodeJS事务时,模块会将其执行结果传输到InterSystems IRIS。 为此,您必须配置Web应用程序并将业务交易添加到将处理收到的响应的产品中。
用于调用更改区块链状态的方法的代码:
在这种情况下,在调用智能合约方法setName()之前,您需要指定许多参数,包括延迟的响应令牌。
在我们的下一篇文章中,我们将更多地讨论智能合约,并给出使用InterSystems IRIS Ethereum适配器解决应用程序的示例。