区块链——用Azure区块链作为服务的分散应用

Blockchain吸引了世界商业和技术来简化业务流程,验证事务,并减少潜在的欺诈行为。本文介绍Blockchain作为服务(老板)在微软Azure,展示如何使用它来构建一个安全的数据结构,并创建一个分布式事务数字分类帐。

Blockchain吸引了世界商业和技术来简化业务流程,验证事务,并减少潜在的欺诈行为。本文介绍Blockchain作为服务(老板)在微软Azure,展示如何使用它来构建一个安全的数据结构,并创建一个分布式事务数字分类帐。在互联网上有大量的文献对区块链以及它如何开始作为比特币的数字分类帐。

好篇介绍性文章blockchain是可以找到一些。ly / 2 isowej,更多技术概述区块链是如何工作的,请参阅乔纳森·沃尔德曼“区块链基本面”的文章在2018年3月期的MSDN杂志(msdn.com/magazine/mt845650)。

区块链是一种安全的、共享的、分布式的分类帐,可以是公共的、私有的或联合的(也就是说,仅限于指定的成员)。它是安全的,因为它使用密码术来创建那些难于篡改的事务(如果不是不可能的话)。在链中所有节点或对等点之间共享是一个数据存储,您很快就会看到,业务逻辑以契约的形式存在。区块链的价值确实与参与其中的实体的数量直接相关。关键的是,区块链数据和合同是分布式的,这意味着数据库有许多副本。而且复制品越多,它就变得越真实。最后,区块链是一个数字分类帐,一个事务数据库,它只附加所有发生的事务的不可变记录。

我想强调一下区块链是一个分布式账本。传统的分类帐是集中的,使用第三方系统或中间人来批准和记录交易。想想信用卡、银行、身份管理系统之类的东西。这种方法带来了信任和规模的挑战。你是否相信你的中介代理代理你所有的交易?代理能成为单点故障吗?可以妥协吗?

在区块链中,分类器分布在整个网络中,不需要任何第三方系统处于交易的中间。该技术维护多个数据副本,就像在对等文件共享系统中一样,因为每个对等点都获得了整个数据集的副本。没有人拥有整个东西,但每个人都有它的副本。图1描述了这种安排。

图1一个分散的分布式分类账

第一个区块链——比特币——出现在2009年,有着明显的限制。作为一个数字分类帐,它只是记录交易,并且不跟踪数字资产账户余额。比特币的所有权是通过与以前的交易的链接来验证的,这是在记录交易链中不可变的历史记录之后。此外,比特币并没有定义任何关于如何处理交易的具体逻辑,以及相关的条件,例如,这两家相关方必须在加密货币交易中达成一致。

区块链技术是随着智能合同的加入而发展起来的,这是一种为交易添加逻辑的小代码。把智能合同看作是商品或服务合同中的法律术语的计算机代码表示。新的区块链分类账出现在市场中,最受欢迎的是以太坊(ethereum.org)和hyper账本(hyperledger.org),为网络添加智能合同功能。在这些(我们称其为区块链2.0)数字分类帐中,智能合同现在存储在一个块中,并与相关数据一起分发到所有节点。

Blockchain 3.0

比特币的区块链通常被称为区块链1.0。它是一个简单的分类帐,它按顺序记录交易,并在任何给定时刻代表网络的状态。可以将其简单地看作是一个分布式数据库。

但是,就像数据库随着时间的推移而不断发展,通过添加逻辑执行能力——例如,存储过程的形式——区块链已经引入了智能契约来处理逻辑层。然而,智能合同只能对存储在存储区域中的数据进行操作。他们无法访问外部数据或系统,在区块链之外调用服务打破了区块链为加密安全和交易的不可变性提供的“信任圈”。CRM、ERP和工资单系统都代表了不属于区块链的外部实体,但可能涉及到交易中的数据交换。区块链需要一种安全接收外部数据的方法,以及对非链代码安全执行的访问。

为了解决这一问题,微软引入了密码作为“区块链3.0”的一部分,这是数据、逻辑和云服务的区块链。图2显示了特性的进展。

图2区块链的演变

密码是用任何语言编写的非链码模块,它们可以在一个安全、隔离、可信的容器中执行,并且可以通过安全通道进行通信。通过提供加密、时间和日期事件等服务,加密技术将智能合同扩展到外部世界,外部数据访问和身份验证。微软在其开放源代码项目中引入了密码,代号为“Bletchley”(bit.ly/2Iv9VZz),该项目已经发展成为今年5月在微软Build开发者大会上公布的Azure区块链工作台产品。

正如在Web站点上所描述的,Bletchley是构建企业联盟区块链生态系统的架构方法。需要说明的是,这并不是一个区块链。这是微软将分布式账本(区块链)平台引入企业的方法,并在保持平台开放的同时,构建解决实际业务问题的真正解决方案。

Azure区块链工作台(aka.ms/abcworkbench)利用不同的区块链分类和现有的云服务,为企业提供一个健壮的区块链生态系统。它是一个易于使用的工具,它的界面简化了,用户可以创建端到端的区块链应用,利用最好的Azure服务,包括Azure Active Directory(Azure AD)、Azure Key Vault、Azure SQL数据库、应用洞察、Azure功能和服务总线。它围绕着流行的区块链,并进入一个可用于构建基于区块链的应用程序的参考体系结构中。

您可以在我为MSDN杂志6月刊(msdn.com/magazine/mt846726)撰写的“介绍Azure区块链工作台”文章中了解更多关于Azure区块链工作台的知识。

回到加密技术,这为开发人员提供了一种可接近的方式,让他们可以使用横切功能,比如集成到第三方系统和数据访问中。但在我将重点转移到区块链上的分散式应用程序之前,我需要一个平台,用于在公共或私人分布式账本上提供安全、集成的解决方案。微软Azure在全球范围内提供了一个覆盖范围,允许建立一个超规模、安全的数据和执行平台,在任何区块链平台上交付下一代应用。

Blockchain as a Service

Azure(bit.ly/2rQUO5q)的区块链提供了一个快速、低成本、低风险的平台,用于构建和部署区块链应用程序。Azure基本上是通过提供几个易于部署的服务(BaaS)来提供区块链,为最受欢迎的分类账,包括以太坊,法定人数,超分类帐,科达等。

在销售推介方面,让我们来研究一下Azure BaaS的一些关键功能,然后再深入到Azure门户中特定的分类帐中。Azure区块链包括:

单节点的分类帐,以模拟单个组织内的多个部门的生产。

多节点分类帐,以模拟多个组织内多个部门的生产。

用于开发分散应用程序的工具,分布在区块链上。

单节点的分类帐,以模拟单个组织内的多个部门的生产。多节点分类帐,以模拟多个组织内多个部门的生产。用于开发分散应用程序的工具,分布在区块链上。

在Azure中构建区块链基础设施的关键特征是:

建立一个安全的环境,以公开受保护的端点。这可以通过Azure虚拟网络、Azure应用服务VNet集成或网络安全组来完成。

开发智能合同,使用任何可用的开发工具,如Blockstack Core、Ethereum Studio或松露。

建立一个安全的环境,以公开受保护的端点。这可以通过Azure虚拟网络、Azure应用服务VNet集成或网络安全组来完成。

开发智能合同,使用任何可用的开发工具,如Blockstack Core、Ethereum Studio或松露。

一般来说,为企业解决方案集成构建一个架构,使用区块链分类账,利用Azure企业功能和全球发行版。

简而言之,Azure BaaS不仅代表了分布式账本的公共云托管提供商,而且还代表了一个有机和集成的平台,用于构建和交付基于区块链技术的分散应用程序。图3说明了平台架构。

图3 Azure区块链即服务栈

现在,让我们来探索一下Azure BaaS的数字分类帐供应功能。首先,我需要访问Azure门户(port.azure.com),并从Azure市场区块链中创建一个新服务。我可以从几个数字分类帐技术中进行选择——在这种情况下,我将创建一个Ethereum联盟多节点分类账——并在Azure中快速提供我的区块链网络。

Ethereum Consortium

Ethereum财团模板部署了一个Ethereum多成员网络,由一组挖掘节点和事务节点组成。根据网络的大小,供应可能需要20分钟,在这一点上,我可以配置额外的Ethereum帐户,并通过管理员Web页面开始使用智能合同和dApp开发。

供应流程将指导您完成五个步骤,以输入必要的配置设置,以便在Azure中提供Ethereum分类账:

步骤1:配置基本的设置,其中包括一个资源前缀,用于命名所分配的资源组中所提供的所有生成的Azure资源,身份验证凭证作为所有已部署虚拟机的管理员和部署的Azure区域。

步骤2:处理网络大小和性能。您可能想要指定联盟中成员的数量(最多12个),每个成员的挖掘节点数量(挖掘节点记录在区块链网络中的事务)、存储复制(本地冗余或地理冗余)和性能。您还可以设置负载平衡的事务节点的数量,这代表了用户或应用程序与已部署的区块链的交互点。

步骤3:这个步骤是特定于以太节点的。我可以指定Ethereum网络ID,这是一种独特的值,它可以识别网络,并将被节点用来相互查看。另外,我还可以指定如何生成第一个区块,即由平台自动生成,也可以通过提供我自己的JSON文件手动生成。

步骤4:在我将资源部署到Ethereum财团分类帐之前,我将看到我输入的配置设置的摘要。从这里,我可以下载一个JSON模板文件,以自动化部署与Azure资源管理器相同的资源集。图4预期将部署在Ethereum分类帐中部署的Azure资源,以及模板文件的一个片段。

  • 图4.Ethereum财团多节点分类账的资源模板文件
  • 这个模板文件可以用来在将来自动部署类似的资源,使用。NET或PowerShell脚本的组合。

  • 图5中的ccode描述了模板生成的DeploymentHelper类,用于自动化部署已确定的Azure资源。您需要引用下列软件包来运行代码:
  • Microsoft.Azure.Management.Authorization
  • Microsoft.Azure.Management.ResourceManager
  • Microsoft.Rest.ClientRuntime.Azure.Authentication

类似地,PowerShell脚本签署到Azure订阅中,注册必要的资源提供者,然后启动在模板文件中标识的资源的部署,如图6所示。

完整的解决方案,包括模板和脚本文件,可以从我的GitHub存储库中下载,在bit.ly/2INgNEP。

完成之后,检查使用和许可条件的条款,然后单击Create来部署资源。在不到20分钟的时间里,你就有了一个功能齐全的区块链分类帐。只是不要忘记保存开发dApps所需的重要信息,包括:

rpc-端点:您需要这个地址来建立dApp开发环境之间的通信,例如Ethereum混音和联盟区块链。

SSH信息:您需要凭证登录区块链环境并配置参数,就像大多数用于解锁Coinbase账户并开始挖掘新块一样。

Coinbase是我的数字钱包,它包含我用来散块的签名键,而我的以太,以太坊的加密货币,是作为采矿过程的一部分而获得的。当在Azure中部署一个新的Ethereum财团分类帐时,这个帐户最初是锁定的,所以在我发布智能合同之前,我需要解锁它。在SSH的帮助下,我连接了Ethereum财团网络的一个事务节点,并打开了Coinbase账户,如下所述:

当提示输入密码短语时,我输入我在配置向导的第1步中指定的gethadmin密码(而不是以太坊私钥密码)。默认情况下,这一操作将解锁Coinbase账户5分钟。您可以使用unlockAccount方法的不同签名来改变持续时间,如下所示:

如果您想知道“geth”命令代表什么,它是一个多用途的命令行工具,它运行一个完整的Ethereum节点。

一旦Coinbase账户解锁,当网络启动时,这表示时间为0。在这一点之后,节点可以接受事务。交易可以是账户的创建,以太的流动,智能合同的创建,或者是对区块链状态的任何改变。然后,在为网络配置的定期时间内,网络将挖掘下一个区块。这个区块是一个散列,它是通过将最后一块块和现在之间执行的事务的散列结合起来,再加上以前块和nonce的散列——一个块中的一个字节序列,可以调整以满足工作证明的条件。

这就是采矿的本质。这个值使得满意的“工作证明”是一个困难的计算任务,依赖于运气或蛮力。然后,通过协商一致,这个块被网络接受,所以你的链中有前两个块,等等。

Developing Smart Contracts

在以太坊中,需要一本书来详细说明开发智能合同的细节。在本文中,我想提供一些指针,以开始并理解所使用的技术和框架的前景。

要在Ethereum编写和部署智能契约,您可以使用Azure中可用的任何开发环境,或者访问一个完全外部的基于浏览器的IDE,如乙醚营(以太网)或以太坊(remix.ethereum.org)。

在编程语言方面,稳固性(固化.readthedocs.io)是一种流行的面向软件的区块链编程语言,具有类似于javascript的语法。

在客户端,支持与Ethereum节点交互的编程语言包括c、C++、JavaScript等等。可以使用像needum(needum.com)这样的库来编写ccode,这是一个完全管理的以太集成库,可以与以太坊这样的客户进行交互,使用RPC的eth或奇偶校验。该库与JavaScript Ethereum Web3 RPC客户机库具有非常相似的功能,这是区块链客户端互操作性的实际标准。

例如,要通过neneum进行智能的合同调用,我需要做以下工作:

获得智能合同地址和应用程序二进制接口(ABI)。

ABI是在智能合同中调用函数的接口,并从以太节点获取数据。

获取要调用的smart合同上的函数签名。

打开以太坊账户,用账户的密码进行通话。给智能合同打个电话。

获得智能合同地址和应用程序二进制接口(ABI)。ABI是在智能合同中调用函数的接口,并从以太节点获取数据。获取要调用的smart合同上的函数签名。打开以太坊账户,用账户的密码进行通话。给智能合同打个电话。

被调用的智能契约,以可靠的形式编写,看起来就像一个投票契约,它公开了一个投票方法,它接受一个提案编号。当投票表决时,选民(消息发送者)的投票标志被设置为true,以防止双重投票,而提案计数器增加了,考虑到投票本身的权重。图8显示了这方面的代码。

请注意,这是可靠的代码,一种具有类似于javascript的语法的强类型语言,有一些变体,比如合同、结构和地址关键字,或者是三重斜杠(“///”)。我使用Ethereum混音来开发智能合同的可靠性,它提供了一个基于web的IDE,用于开发、测试和部署。

Azure Blockchain vNext

让我们来看看微软在区块链技术方面的未来是什么样的。不久之后,微软机密联盟(Coco)框架是一个开源系统,它支持高规模、机密的区块链网络,满足所有关键企业的机密性、治理和性能要求,同时提供一种加速生产企业采用区块链技术的方法。

Coco(bit.ly/280ya)将现有的区块链协议、可信执行环境、分布式系统和密码学的力量结合在一起,从而实现了企业级的区块链网络:

接近数据库速度的吞吐量和延迟;

更丰富、更灵活、特定于业务的保密模型;

通过分布式治理进行网络策略管理;

支持不确定的交易;

降低了能源消耗。

值得注意的是,Coco并不是一个独立的区块链协议。相反,它提供了一个值得信赖的基础,现有的区块链协议,如Ethereum、Quorum、Corda和其他协议,可以集成到交付完整的、企业就绪的分类解决方案中。Coco的设计是开放的,兼容任何区块链协议。它通过使用可信执行环境(TEE)来实现这一点,比如Intel Software Guard Extensions(新加坡交易所)和Windows虚拟安全模式(VSM),以支持创建一个可信任的物理节点网络,用于运行分布式的ledg。图9显示了Coco框架架构。

图9.可可框架的高级概览

Coco为创建区块链网络、网关API和Web应用程序所需的脚手架提供了代码资产和ARM模板部署脚本。它还提供了Azure AD和Azure密钥库集成,并支持SQL数据库收集和离线数据。最后,它为区块散列和签名提供支持代码和服务。Coco在其核心使用Azure事件中心来添加新功能,比如将原始数据发送到Azure数据湖,或者向Azure Search提供交易数据。

Coco使得在不编写任何代码的情况下创建区块链应用程序成为可能。它使用为智能合同提供的元数据,为参与者动态地交付上下文用户体验。由于该框架将SQL数据库作为一个非链存储库来填充,因此它使组织能够利用现有的技能和工具来点亮其他功能,如api、PowerBI报告、聊天机器人、Azure数据工厂和机器学习。

微软计划在2018年晚些时候开源“可可框架”代码。

最后,在Azure Blockchain Workbench上有一个词,它是企业客户开始使用区块链的主要机制。Azure区块链是一组Azure服务和功能,旨在帮助企业创建和部署一个新的应用程序类,用于与多个半信任的组织共享业务流程和数据。目前,客户可以将这些服务部署到他们的订阅中,并将其与Azure市场上可用的区块链进行集成。使用Azure区块链工作台,为他们完成了繁重的工作,这样他们就可以减少对脚手架的关注,更多地关注逻辑和智能合同。

Azure区块链工作台现在在Azure市场(aka.ms/tryworkbench)中可用。

斯特法诺是微软地区总监和MVP,同时也是瑞士CRMUG的分会领袖,这是世界上最大的Dynamics 365/CRM专家社区。风暴斯塔是一个关于动力学365,区块链和机器学习的课程的讲师,同时也是国际IT会议的常规演讲者,包括微软的点火和技术峰会。他创建了博客链空间(Blogchain.Space),一个关于区块链技术的博客,为MSDN杂志和MS Dynamics World撰稿,并在Azure AI画廊(gallery.azure.ai)上发表机器学习实验。

感谢以下微软技术专家审阅了本文:詹姆斯麦卡弗里 James McCaffrey博士在华盛顿州雷德蒙德的微软研究院工作。他曾在微软的几款产品上工作过,包括ie和必应。麦卡弗里博士可以在jamccaff@microsoft.com上找到。

部分图片源自网络,侵删

翻译不易,转载注明。