深度学习
Fabric项目中自带一些完整链码的示例,如Go编写的链码(位于examples/chaincode/go)和Java编写的链码(位于examples/chaincode/java)。本节将以Go语言典型链码chaincode_example02.go为例进行讲解。该链码简单实现了两方的转账功能,很适合初学者上手。链码代码位置在examples/chaincode/go/chaincode_example02/chaincode_example02.go。13.4.1 链码结构链码的必要结构如下。如前文所述,必要结构包括引入必要的包、声明链码结构体、实现Init和Inovoke方法、主函数:packagemain//引入必要的包import( ……)//声明
在同一个区块链上可以部署多个链码,链码与链码之间可以相互调用。这种方式有助于将智能合约的工作模块化,并为应用开发带来更多灵活性。本节将通过一个示例介绍如何在链码中调用其他链码,详细代码可见examples/chaincode/go/passthru/passthru.go。该链码的功能可以形容为同一个区块链中其他链码的“网关”,其对外暴露的Invoke接口功能可以使用户指定想要调用的其他链码的ID、方法和参数,通过该“网关”链码传递给指定链码,获得调用结果后再返回给用户。这里对最核心的Invoke方法进行分析,其核心实现代码如下:func (p *PassthruChaincode) iq(stub shim.ChaincodeStubInterfac
Fabric应用程序除了通过主动查询来获取当前已确认的状态,还可以通过订阅并监听事件(event)来获取交易执行信息,用于进行交易确认或者审计。本节的例子将展示如何在链码中发送事件。详细代码可见examples/chaincode/go/eventsender/eventsender.go。发送事件需要使用stub.SetEvent方法。方法格式为SetEvent(namestring,payload[]byte)error。其中,name表示事件名称,payload为事件内容。通过该方法,可以设定当这个交易在Committer处被认证通过,写入到区块时所发送的事件。示例链码的invoke分支方法被调用时,会将记录在账本中的递增序列和Invoke传入的参数串联起来作为事件内容,以evtsen
链码作为一种新型的应用逻辑,由于天然运行在分布式系统中,被封装在容器内,跟现有的应用场景往往存在较大差异。在开发链码过程中,也需要始终注意其独特的运行特点,设计合理的代码逻辑。1.重视资源限制由于链码运行在容器内,这意味着单个链码所能占用的资源会受到容器资源的限制。考虑到现有的容器系统,默认的资源限制往往不大,因此在链码代码中不建议编写资源消耗型的应用。例如如果代码中出现大量消耗内存且不释放的逻辑,容易造成内存泄露,最后导致整个容器响应缓慢或者崩溃,这都将给上层应用带来较多的挑战。另外,容器内往往不提供稳定的文件系统或网络的支持,甚至整个容器都可能出现被杀死后重新启动新容器的情况,因此代码中不应该假设有稳定的外部文件系统和网络接口可供访问。2.无状态设计链码在设计上是典型的无状态(State
规模是困难之源。信息产业过去的十年,是云计算的十年。云计算技术为传统信息行业带来了前所未有的便捷。用户无需在意底层实现细节,通过简单的操作,即可获得可用的计算资源,节约大量运维管理的时间成本。区块链平台作为分布式基础设施,其部署和维护过程需要多方面的技能,这对很多应用开发者来说都是不小的挑战。为了解决这些问题,区块链即服务(BlockchainasaService,BaaS)平台应运而生。BaaS可以利用云服务基础设施的部署和管理优势,为开发者提供创建、使用,甚至安全监控区块链平台的快捷服务。目前,业界已有一些区块链前沿技术团队率先开发并上线了区块链服务平台。本章将首先介绍BaaS的概念,之后分别介绍业界领先的IBMBluemix和微软Azure云上所提供的区块链服务。最
区块链即服务(BlockchainasaService,BaaS),是部署在云计算基础设施之上,对外提供区块链网络的生命周期管理和运行时服务管理等功能的一套工具。构建一套分布式的区块链方案绝非易事,既需要硬件基础设施的投入,也需要全方位的开发和运营管理(DevOps)。BaaS作为一套工具,可以帮助开发者快速生成必要的区块链环境,进而验证所开发的上层应用。除了区块链平台本身,一套完整的解决方案实际上还可以包括设备接入、访问控制、服务监控等管理功能。这些功能,让BaaS平台可以为开发者提供更强大的服务支持。从2016年起,业界已有一些前沿技术团队发布了BaaS平台,除了商业的方案如IBMBluemix和微软Azure云之外,超级账本开源项目也发起了Cello项目,以提供一套实现区
Bluemix是IBM推出的开放的PaaS云平台,包含大量平台和软件服务,旨在帮助开发者实现一站式地应用开发与部署管理。2016年,Bluemix面向开发者推出了基于超级账本Fabric的区块链服务,供全球的区块链爱好者使用。用户可以通过访问http://console.ng.bluemix.net/catalog/services/blockchain使用该服务。1.服务介绍Bluemix为用户提供了在云上灵活管理超级账本Fabric区块链网络的能力,让开发者专注于快速创建、操作和监控区块链网络,而无需过多考虑底层硬件资源。同时,Bluemix云平台本身也提供了安全、隐私性方面的保障,并对相关资源进行了性能优化。Bluemix目前提供了几种不同类型的区块链网络部署方案,包括免费的基础
Azure是微软推出的云计算平台,向用户提供开放的IaaS和PaaS服务。Azure陆续在其应用市场中提供了若干个与区块链相关的服务,分别面向多种不同的区块链底层平台,其中包括以太坊和超级账本Fabric。可以在应用市场(http://azuremarketplace.microsoft.com/en-us/marketplace/apps)中搜索“blockchain”关键字查看这些服务,如图14-6所示。下面具体介绍其中的AzureBlockchainService。图14-6 Azure上的区块链服务使用Azure服务,用户可以在几分钟之内在云中部署一个区块链网络。云平台会将一些耗时的配置流程自动化,使用户专注在上层应用方案。Azure区块链服务目前支持部署以太坊或超级账本F
从前面的讲解中可以看到,区块链服务平台能够有效加速对区块链技术的应用,解决企业和开发者进行手动运营管理的负担。但是这些方案都是商业用途,并且只能在线使用。超级账本的Cello项目为本地搭建区块链服务管理平台提供了开源的解决方案,可以实现在多种类型的物理资源上实现区块链网络的生命周期管理。正如Cello的名字所蕴意,它就像一把精巧的大提琴,以区块链为琴弦,可以奏出更加动人的乐章。14.4.1 基本架构和特性Cello项目由笔者领导的IBM技术团队于2017年1月贡献到超级账本社区,主要基于Python和Javascript语言编写。该项目的定位为区块链管理平台,支持部署、运行时管理和数据分析等功能,可以实现一套完整的BaaS系统的快速搭建。其基本架构如图14-10所示。图14-10 C