前一篇文章《Hyperledger Fabric on SAP Cloud Platform》,我的同事Aviva已经给大家介绍了基于区块链技术的超级账本(Hyperledger)的一些概要知识。Fabric是超级账本5个并行项目中的其中之一,因为发展较为成熟,SAP云平台对Fabric也提供了较好的支持。
学完了前一篇文章的理论知识后,今天我们来动手实践一下。
我们做的这个练习的范围很窄,就是学会如何使用go语言开发一组微服务,这组微服务包含读和写两个API,能够将数据写入架设于SAP云平台上的超级账本服务。
大家还记得之前Aviva介绍的智能合约(Smart Contract)么?
简单地说,应用程序通过智能合约接口同超级账本进行读写操作。我们将开发一个Hello World的智能合约,部署到SAP云平台上。出于简单起见,我们没有开发应用,而是简单地在SAP云平台的API控制台上直接消费这个Hello World的智能合约,对云平台上的超级账本进行读和写。
打开超级账本项目Fabric的github仓库地址:
https://github.com/hyperledger/fabric
发现Fabric项目是Google的编程语言GoLang开发的,因此咱们这个练习也使用Go语言来进行智能合约的开发。
1. 从Google上将Go语言1.11版的二进制包下载到本地,解压到/usr/local目录下:
sudo tar -C /usr/local -xzf /home/vagrant/Downloads/go1.11.linux-amd64.tar.gz
将该目录配置到环境变量PATH中去:
2. Fabric项目已经将智能合约同超级账本的通信封装到一个名叫shim的接口中,我们只需要在我们编写的智能合约代码中直接调用该shim接口即可。
我们使用import将这个shim接口的依赖引入进来,在第14行定义一个结构体,包含ID和Value两个字段。这个结构体即是待写入超级账本的数据结构,ABAP顾问可以将其视为ABAP数据字典里定义的结构体。
第46行定义的方法Invoke是这个最简单的智能合约的核心代码,cc MessageStore这个语法和C语言很像,定义了一个类型为MessageStore的指针变量cc。这个指针变量同C++的this指针和ABAP的me引用*作用类似,在方法被调用时,指向了方法的调用者。
Invoke后面括号里的stub shim.ChaincodeStubInterface定义了该方法的输入参数(形参)stub, 类型为shim.ChaincodeStubInterface。
这个Invoke方法不会通过应用程序显式调用,而是通过超级账本程序回调:当方法被调用时,指针cc和输入参数stub已经自动被Fabric框架赋上了对应值。在Invoke方法运行的上下文里,通过输入参数stub判断出当前回调的场景是读还是写,然后进入对应的分支。分支内部调用我们自己开发的write和read方法同超级账本进行交互。具体源码在我的github上:
https://github.com/i042416/KnowlegeRepository/blob/master/ABAP/blockchain/message_store_chaincode.go
这种通过同一个回调函数内部的switch case来处理多个场景的做法,ABAP和Java开发者应该都不陌生。比如下图是通过InvocationHandler实现Java动态代理的例子,其中invoke方法的逻辑结构和本文智能合约代码的结构非常相似。
关于ABAP和Java里各种静态代理和动态代理的写法,请参考我的博客:
Various Proxy Design Pattern implementation variants in Java, ABAP and JavaScript
3. 将开发好的智能合约源文件构建成可执行文件。这一步确保在部署智能合约到SAP云平台之前,先在本地开发环境将所有潜在错误全部检测出并修复。
4. 登录SAP云平台,在Service Marketplace里点击Hyperledger Fabric的超链接:
创建一个新的Service实例:
创建过程中需要填写channel的ID和密匙。
还记得上一篇文章Aviva提到区块链分为公有链,私有链和联盟链,而超级账本属于联盟链么?在联盟链里,有一个专门的称为MSP(Membership Service Provider)的模块,提供成员管理服务,只有授权用户才能接入区块链网络。这里我事先在SAP云平台上创建了一个渠道并进行认证,因此此处直接输入一个合法的渠道ID和密匙。关于SAP云平台上超级账本渠道的创建和成员授权接入的步骤,请参考SAP帮助文档:
https://help.sap.com/viewer/p/HYPERLEDGER_FABRIC
Service实例创建完毕后,点击Create Service Key按钮创建key,目的是生成用于OAuth认证的clientId和clientSecret,方便接下来的API调用。
点击Service实例的Referencing Apps面板,点击按钮Open Dashboard:
点击Deploy Chaincode,选择本地构建好的zip包,进行上传并部署。这个按钮同SAP云平台Neo和CloudFoundry环境部署本地应用的逻辑相同。
部署成功后,点击Test Chaincode超链接进入API控制台。
该控制台集成了Swagger框架,在调用post请求进行超级账本的写操作和get请求进行读操作之前,先要点击Authorize按钮进行身份认证:
输入第四步创建Service Key后生成的clientID和clientSecret进行认证:
认证成功后,可以在Swagger的控制台里调用post和get请求了。
首先发送post请求,请求负载就是一个简单的json对象,id为i042416,value为Hello World:
post请求在SAP云平台上的超级账本执行成功,返回200响应码:
紧接着执行get请求,输入刚才写入的数据id: i042416:
get请求能够将之前通过post请求写入账本的数据成功读出来:
登录SAP云平台超级账本控制台,能看到之前通过post写入的数据已经加入到区块链尾部的区块了。点击区块可以查看数据明细:
在超级账本控制台的API Calls和Logs面板里也能看到每次超级账本读写的详细信息。
总结一下,SAP云平台的超级账本服务,成功地帮助了希望使用这项区块链技术的企业避免了硬件基础设施的投入,同时屏蔽了大部分超级账本平台管理的底层细节。通过SAP云平台提供的控制台,即可实现对超级账本进行设备接入,访问控制,服务监控等管理功能。同时,通过Go语言编写的智能合约一旦部署到SAP云平台,生成的Restful API能够被其他编程语言方便地消费。调用这些API写入超级账本区块链中的数据将无法再被篡改。使用SAP云平台的超级账本服务,应用开发人员可以无需将过多精力花费在超级账本体系架构本身,从而能够专注于应用逻辑的编写上去。
本文写作过程中,得到了同事Aviva的大力帮助,在此感谢。
更多阅读
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
SAP云平台上的LowCodeDevelopment解决方案是指使用低代码开发平台/工具,快速生成应用程序的平台/工具,通常提供可视化的交互界面来快速搭建应用界面,设计数据模型,创建应用业务逻辑和工作流等。低代码开发平台对...
SAP云平台(SAP Cloud Platform)是一个全面的企业级云平台服务,为企业提供了构建、扩展和运行应用程序的能力。该平台支持多云环境,允许企业利用SAP和其他云供应商的服务。SAP云平台的核心功能包括: - **应用开发...
SAP云平台开发入门涉及多个知识点,包括SAP Cloud Platform的基础介绍、Cloud Foundry环境、Neo环境、区域与API端点的设置、丰富的功能模块、连接性、文档服务、反馈服务、游戏化概念、Git服务、消息传递概念、监控...
SAP云平台解决方案的实施为企业带来了诸多增值效益,例如通过SAP Roma集成平台实现一站式服务,自动化安装和应用弹性伸缩简化了运维,存储容灾成本降低80%,并提供了7*24的专业运维支持。此外,还有针对SAP系统的...
SAP HANA云平台(HANA Cloud Platform,简称HCP)是一个开放的PaaS(Platform-as-a-Service)解决方案,它为开发人员和企业提供了构建、扩展和集成应用程序的环境,特别关注于企业级的BPaaS(Business-Platform-as-a...
5. 创新与扩展:SAP云端平台支持创新研发,实现产品策略、管理及设计的协同,同时借助区块链和物联网技术提升供应链的透明度和安全性。 三、SAP HANA技术的角色 SAP HANA是SAP云端解决方案的基础,它是一种内存...
SAP 云产品定价及License指导手册
作为一款由SAP公司提供的企业服务总线(ESB)平台,为企业提供了从服务建模到业务流程管理,再到业务规则管理等一系列集成服务,有效整合企业内部及外部系统资源,极大提升了企业的数据交换效率和业务响应速度。...
SAP HANA数据中心技术与云平台建设方案.pdfSAP HANA数据中心技术与云平台建设方案.pdfSAP HANA数据中心技术与云平台建设方案.pdfSAP HANA数据中心技术与云平台建设方案.pdfSAP HANA数据中心技术与云平台建设方案....
超级BOM的配置和测试文档详细说明了设置和维护超级BOM的步骤,以及如何在SAP系统中进行有效的测试来确保其正确性。 首先,进行超级BOM配置的基础工作包括创建特征(Characteristics),这些特征是超级BOM配置中用于...
SAP超级BOM配置及测试文档.pdf
SAP 开发平台介绍
SAP商业智能分析BI解决方案.pdf是基于SAP平台的商业智能分析业务智能解决方案,它可以帮助企业进行商业智能分析,提高企业的决策能力和竞争力。 部分内容解读 SAP商业智能分析BI解决方案技术创新,变革未来。这...
综上所述,SAP BusinessObjects水晶系列商务智能解决方案通过其强大的数据处理能力和直观的用户界面,为用户提供了一套全面的工具集,以支持数据驱动的决策和业务增长。无论是报表设计、数据分析还是仪表板创建,该...
SAP自开发通常指的是在SAP系统平台上进行的定制化开发,以满足企业特定的业务需求。...SAP Web IDE是SAP云平台上的开发工具,支持HTML5、JavaScript等Web技术的开发。 它提供了丰富的模板和插件,方便开发者快
SAP Ariba 是唯一一家能与 SAP ERP 和 SAP S/4HANA(下一代商 务套件)实现真正双向集成的云解决方案提供商,SAP Ariba 云解 决方案与 SAP 解决方案之间的集成流程多达 100 余个,超过 5,000 个 SAP Ariba 选项能与 ...
从给定的文件信息来看,主要讨论的是SAP Business Objects商务智能平台的相关知识点。SAP Business Objects(简称BO)是全球领先的商务智能解决方案之一,它提供了全面的数据分析、报告、仪表板、数据可视化以及企业...
3. **智能技术应用**:SAP的智能技术套件,包括人工智能、机器学习和分析,帮助企业从海量数据中提取有价值的信息,提升需求预测准确性,优化库存管理,以及自动化的物料配送。 4. **SAP产品矩阵**:如SAP C/4HANA...