用BSN一天学会区块链开发-golang文章-火星科技帖子

用BSN一天学会区块链开发-golang文章-火星科技帖子

声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。

边肖:记得要注意

来源区块链服务网BSN

作者:石月堂,曹

《使用BSN 一天学会区块链开发系列文章可以帮助有一定开发经验开发者在不学习区块链开发语言的情况下,在区块链服务网(BSN)上完成区块链应用的开发。

本文主要介绍用户如何通过链下业务系统使用golang语言与链上数据进行交互的相关操作流程说明,但在解释链下业务系统与链上数据交互之前,先逐一解释用户如何在区块链服务门户注册、申请发布服务、参与应用服务、申请管理。

注册和登录

打开www.bsnbase.com区块链服务网网站,在登录页面点击【内测申请】按钮,进入内测申请页面:

填写内测申请信息,根据页面提示提交内测申请。内测应用用户可分为个人用户和企业用户。申请人要根据自己的用户类型来申请。内测申请提交后,他们需要等待系统审核。系统审核通过后,将向申请人发送激活邮件。申请人可根据【激活邮件】中的激活链接激活账户,账户激活后即可登录系统使用。

应用程序发布

应用程序是指已经在区块链服务网络中发布并运行的区块链应用程序。用户可以通过服务网络门户发布自己的区块链应用服务。应用服务可以分为公共服务和非公共服务(内测期间发布的服务默认为非公共服务,如果需要发布服务,需要后台运营人员提交申请进行公共审核,审核通过后才能在服务门户的应用商店中查看服务)。这里就不一一截图了,只概述一下应用服务发布的整体流程:

登录区块链服务门户后,进入我发布的申请-我发布的服务页面;点击新建服务按钮,进入新建服务页面,根据提示输入相应信息;点击下一步按钮开始上传链码包(可直接使用自己开发的链码包或服务网提供的预制链码包上传链码包),然后定义服务功能角色(注明链下业务系统调用链码对应的权限)、选择发布的城市节点(注明当前发布的服务对应的链码部署在哪些城市节点)、付费周期、是否使用云服务等信息;继续点击下一步按钮,进入设置访问模式的页面,输入网址、移动终端访问、API服务访问等信息(访问模式均为离线访问的相关信息)。如果暂时不需要设置接入方式,可以跳过此页,继续点击下一步按钮,进入服务账单确认页面(服务网络内测期间将免费使用所有资源);点击确定,在我发布的申请-我发布的服务列表页面可以看到新创建的服务,服务状态为“初审中”。发布者需要等待运维人员审核发布,服务发布后发布者默认不参与服务。应用服务参与

在服务网络的内部测试期间,所有发布的服务都不是公共的。如果您或其他用户想要参与已发布的服务,您可以在我的已发布应用-我的已发布服务列表中邀请参与者,并将被邀请参与者的链接地址发送给需要参与服务的用户。应用程序参与服务的整个过程如下:

根据邀请的链接地址,进入服务信息页面,点击申请申请按钮,进入服务角色和城市节点选择页面;选择需要使用的服务角色和城市节点(角色是指用户参与服务链后,在业务系统访问链上对应的权限;城市节点是指用户在链下的业务系统与链之间通过城市节点进行的数据交互)。用户选择服务角色后,系统会显示角色对应的功能使用费,选择城市节点时申请新证书或选择已有证书。点击确定按钮,提示接入城市节点、接入方式、费用信息:确认参与服务的接入城市节点、接入方式、费用信息(内测期间所有资源免费)后,可以在我的参与应用-我的参与列表页面查看参与应用服务,应用服务的状态为待发布者审核,应用服务的发布者正在等待审核参与者。在网络内测期间,只要发布者批准了服务参与的申请,服务参与信息的状态就会更新为已确认。到目前为止,参与应用服务是成功的。业务参与成功后,线下业务系统可以调用城市节点对应的节点网关,将数据推送到上行,并从获取上行数据和上行块信息,调用节点网关对应的参数可以在业务-我参与-检查-接入城市节点和业务接入配置参数部分查看。下载接入城市节点使用的城市节点证书,显示城市节点网关的主叫地址。应用服务访问配置参数用于显示连锁业务系统调用城市节点网关的相关参数。关于这部分的详细信息,请参考“数据交互”部分。应用管理

应用发布后,您可以在我的已发布应用-我的已发布服务管理列表中统一管理已发布的服务。管理列表具体包括以下功能:

邀请:主要用于将应用参与的邀请链接地址发送给其他用户,其他人习惯通过该邀请链接地址参与该服务;应用:主要是内测期间,所有发布的服务默认为非公开。如果服务需要公开,可以通过本功能提交公开申请;服务升级:主要用于升级应用服务的链码包;升级:主要用于升级应用服务的配置资源,如部署的城市节点、节点的资源配置信息等;版本历史:主要用于查询服务升级后的版本历史;运营信息:主要用于监控应用服务的部署节点、节点资源信息以及链上的数据(来自线下业务系统通过调用节点网关接口推送到链上的数据);设置访问方式:主要用于配置应用服务链下业务系统的访问权限;查看:主要用于查看应用服务的基本信息、链码和部署信息、服务角色信息、审批记录信息和访问方式。应用链代码开发

链码(ChainCode)又称智能合约,是用计算机语言描述合同条款、交易条件、业务逻辑等,通过调用智能合约实现交易自动执行和对账簿数据的操作。一个区块链应用程序可以部署多个链代码,每个链代码包含多个方法

代码可以用多种语言编写,包括golang、java、node.js每个Chaincode程序都必须实现ChainCode接口,而chain code包括三个基本操作:Init、Invoke、Query:

Init:链代码初始化的方法,在链代码实例化或升级时调用一次,这样链代码就可以执行任何必要的初始化,包括应用程序状态的初始化。Invoke:接收并处理链下业务系统调用的事务提议,其参数包括被调用链代码程序中函数的名称和具体的业务处理数据参数。即在Invoke中,根据不同的方法参数调用其他分支来处理响应业务。Invoke可以简单理解为链码方法的入口。查询:提供查询链码数据的方法,仅作为查询使用,不提供对链上数据进行操作的操作。它可以在查询操作过程中被调用,也可以作为Invoke方法中某些方法的分支被调用。该方法可能无法实现。下面以通用数据链编码包为例详细讲解。

通用数据链代码包(Universal data chain code package)是我们为应用开发者提供的添加、删除和检查业务数据的基本操作的链代码(用Golang语言编写)。在这个链码包的基础上,开发者可以根据应用业务需求进一步扩展链码功能。这个链码支持的数据类型有字符串、整数、浮点、集合(map、list)等等。

代码包下载地址: www.bsnbase.com/static/base/BaseChainCode.zip

1.链码包的功能如下:

1.1.添加数据(集合)

输入参数描述。

Base:要保存的唯一主键标识符,baseValue:保存的数据信息。

例如:{\'basekey\' :\' str \',\' basevalue\' : \'这是字符串\' }

注意:baseKey是非空字符串,baseValue可以是任何类型的数据。如果baseKey已经存在,则直接返回已经存在,不能添加;如果没有,添加数据。

1.2.修改数据(更新)

输入参数描述。

Base:要修改的唯一主键,baseValue:保存的数据信息。

例如:{\'basekey\' :\' str \',\' basevalue\' : \'这是字符串\' }

注意:baseKey是非空字符串,baseValue可以是任何类型的数据。如果baseKey不存在,则无法更新;如果它已经存在,请修改数据。

1.3.删除数据(删除)

输入参数描述。

Base:要删除的唯一主键ID的值。

示例:“str”

注意:baseKey的值不能为空,必须存在,否则不能删除。

1.4.获取数据(获取)

输入参数描述。

Base:要获取的唯一主键ID的值。

示例:“str”

注意:baseKey的值不能为空,必须存在,否则得不到相应的信息。

2.链码介绍

2.1.Init方法

这是最简单的链码初始化函数,可以写一个日志,初始化一段数据,保存到数据库并响应。

链码初始化(init)期间建议不要有太多的业务操作。

2.2.引起

stub . getfunctionandparameters :获取请求的方法名(字符串)和参数信息([]字符串)。

T.set (stub,args)//调用保存的方法和具体的业务处理。

节点网关

网关是部署在每个城市节点,它接收应用系统的请求,使用托管的用户身份信息,发起对相应应用链代码的访问,并返回链代码的执行结果。网关的调用是通过向区块链服务的各个城市节点的网关服务发送HTTP请求来实现的。节点网关负责验证用户身份信息和应用信息,传递链码参数,通过用户身份信息和应用信息获取链码执行结果的服务通道,以及要访问的链码和链码方法。

系统需要根据接口描述给请求添加相应的请求参数。调用节点网关后,节点网关会返回链码的执行结果。

地址:https://节点网关地址/api/node/reqChainCode

注意:成功参与服务后,用户可以在服务详情页面的应用链下查看和下载业务系统开发所需的应用服务配置参数、节点网关地址和应用身份证书,如下图所示:

通讯方式:邮寄

签名算法

1.将用户代码app code chain code funcname的值和args中的各项数据拼接成一个字符串a;

2.使用用户证书的私钥对字符串A执行SHA256WITHECDSA签名。

请求参数

响应参数

申请加入被批准后,链下的业务系统可以通过节点网关与链上的数据进行数据交换。调用节点网关需要节点网关的接入地址、节点网关的请求参数、证书等信息。这部分数据可以通过我参与的申请-我参与-查看详情页面获取。下面三个参数逐一解释。

节点网关接入地址:是链下业务系统调用的链对应的城市节点入口,所有与链的数据交互都通过该地址接入,如下图所示:节点网关请求参数:如果需要通过节点网关接入地址进行与链的数据交互,必须遵循节点网关接口调用规范,节点网关接口调用需要userCode、appCode、tid、chainCode、funcName、agrs等参数信息。相关参数总结如下。*userCode:应用程序发布者或参与者的登录名(即门户的用户名)。

*appCode:参与应用的唯一标识符。申请时由系统自动生成的唯一标识符。

*tid:用户和参与应用程序之间关联的唯一标识符。

*chainCode:区块链服务网络中运维部署的链码名称。需要注意的是,这里的链代号并不是服务发布时的链代号。

*funcName:调用链代码的方法名。

*agrs:调用链码方法的参数集。字符串数组,参与者需要联系应用程序发布者来获取方法对应的参数。

参数采集页面如下图所示:

节点的用户证书:请求节点网关的过程中需要https证书、请求消息的签名证书(即用户身份证书)和响应结果验证的证书。*https请求证书:为了保证数据传输层的安全,需要https请求。

*请求消息签名证书:用户私钥证书。

*响应结果证书:网关公钥证书。

用户身份证书可以通过我参加申请-我参加-查看-访问所在城市节点的部分下载,也可以在我的身份证书-证书查看列表中找到相应的申请信息下载证书。下载的证书文件包含https证书、用户证书(私钥证书、公钥证书(消息的网关验证))和网关证书(网关公钥证书)。证书下载页面如下图所示。

系统开发

业务系统是链下的业务系统,需要与链进行数据交互。下面根据预置链码包(可从门户下载)的golang开发实例,重点介绍与网关的交互。

项目的环境准备:

1.JetBrains GoLand/VS代码(可以使用自己习惯的IDE)

2、去1.12.5

项目介绍:

上图显示了项目的目录结构

1.Certs:主要用于存储用户的公私证书、网关的公钥证书以及请求网关时需要的Https公钥证书。

Bsngate_Https.crt:节点网关API的Https公钥证书(用于加载请求网关API的地址所需的公钥证书)gateway_public_cert.crt:网关公钥证书(用于验证网关通过椭圆曲线算法响应的数据)private_key.pem:用户私钥证书(用于对请求网关签名算法的数据使用椭圆曲线)public_cert.pem:用户公钥证书(目前不使用)2 .common:主要用于存储公共库,在本例中用于定义ecdsa椭圆曲线算法工具类。

Ecdsa.go:用于定义Ecdsa椭圆曲线算法的工具类。3.模型:主要用于定义请求网关和网关响应消息的数据结构

Request.go:用于定义请求节点网关API的数据消息。response.go:用于定义节点网关API响应的数据消息。4.Main.go:主文件是示例程序的入口,包含调用节点网关API的相关业务逻辑代码。

过程:的解释

1.修改对应于呼叫网关的请求参数。

2.拼写签名的字符串,并使用用户私有的SHA256WITHECDSA签名加密该字符串

4.获取返回消息中的mac值,用网关的公钥证书验证返回消息中的mac值,验证内容与参数传递时的签名字符串相同。

5.将验证结果输出到控制台。

详细描述

版权声明:区块链公司 发表于 2022-03-27 18:02:57。
转载请注明:用BSN一天学会区块链开发-golang文章-火星科技帖子 | 零零洞洞

暂无评论

暂无评论...