使用BSN -golang-Mars技术一天学会区块链开发帖子

使用BSN -golang-Mars技术一天学会区块链开发帖子

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

边肖:记得要集中注意力。

来源区块链服务网BSN

作者:石月堂,曹

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

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

并登录。

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

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

服务发布

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

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

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

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

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

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

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

代码可以用多种语言编写,包括golang、java和node.js每个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.增加数据(组)

输入参数描述。

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

示例:{ \'基本键\' 3360 \'字符串\',\'基本值\' 3360 \'这是字符串\' }

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

1.2.修改数据(更新)

输入参数描述。

BaseKey:唯一可以修改的主键,baseValue:保存的数据信息。

示例:{ \'基本键\' 3360 \'字符串\',\'基本值\' 3360 \'这是字符串\' }

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

1.3.删除数据(删除)

输入参数描述。

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

示例:“str”

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

1.4.获取数据(获取)

输入参数描述。

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

示例:“str”

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

2.链码介绍

2.1.Init方法

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

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

2.2.引起

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

Return t.set(stub,args)//调用保存的方法进行具体的业务处理。

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

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

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

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

通讯方式:邮寄

签名算法

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

2.使用用户证书的私钥

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

节点网关接入地址:是链下业务系统调用链对应的城市节点入口,所有与链的数据交互都通过该地址接入,如下图所示:节点网关请求参数:如果需要通过节点网关接入地址与链进行数据交互,必须符合节点网关接口的调用规范,该规范需要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椭圆曲线算法工具class 3。模型:主要用于定义请求网关和网关的响应消息数据结构

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

描述:

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

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

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

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

详细描述

版权声明:区块链金融 发表于 2022-07-06 9:16:37。
转载请注明:使用BSN -golang-Mars技术一天学会区块链开发帖子 | 零零洞洞

暂无评论

暂无评论...