应用场景应该如何选择适合的区块链底层技术平台?
区块链技术前景及应用
目前,区块链(Blockchain)技术已经成为金融机构、企事业单位的新宠:R3联合摩根大通、高盛等42家超大型金融机构打造Corda清结算区块链;LINUX基金会联合INTEL、IBM等近百家科技公司和金融机构研发分布式账本Hyperledger。
区块链是由节点参与的分布式数据库系统,即系统中的每个节点都参与数据记录。其特点是去中心化、公开透明、不可更改,不可伪造。区块链技术在数字资产、供应链、身份信用、股权债券、公示公证、电子票据、医疗记录、物联网、数据共享都取得了一定的应用。
选用区块链底层技术平台的难点
目前国内外较为大众熟悉的区块链底层技术平台有:以太坊、Bition、Ethereum、Fabric、corda、Bitshares、Openchain等。这些区块链底层技术平台都有其适用性和可取性。众多的区块链底层技术平台,使得金融机构必须得去一一学习,去理解其技术,才能结合应用场景采用某种区块链。
但是,区块链底层技术平台种类繁多,发展前景不确定。金融机构在实施区块链应用时必须考虑选用的区块链能否长期存在、合规性、版权、运维等一系列问题。另外,就人才成本而言,区块链技术和应用对从业人才层次、技术积累和理念改变提出了较高的要求。企业需要在短时间内培养出金融和区块链的交叉人才。因此,在众多的区块链底层技术平台中,如何选择适合自己应用场景的区块链底层技术平台,就成为了金融机构和企事业单位最棘手的一个问题。
解决方法
近期,一种将各种区块链底层技术平台和上层应用相联系的技术——BMWare横空出世,BMWare中间件封装多种异构区块链,向上层应用提供统一API接口,在区块链应用和区块链底层技术平台之间架起一座桥梁。
当前的BMWare中间件版本提供了用户管理、资产管理、智能合约、通知等API接口。支持银链联盟链(BLChain)、Ethereum和Fabric等三种区块链类型。以下是BMWare中间件的部分示例代码:
- 1. 访问前缀
- https://api.bankledger.com/blockchain/user/,用户管理的所有接口放在此URL下;
- https://api.bankledger.com/blockchain/asset/,数字资产管理的所有接口放在此URL下;
- https://api.bankledger.com/blockchain/chaincode/,智能合约的所有接口放在此URL下;
- 2. 区块链底层
- 区块链 编号
- 银链联盟链(BLChain) 200
- Fabric 201
- 以太坊(ETH) 202
- 以太坊原链(ETC) 203
- 3. 接口
- 通过https协议的POST方法调用API接口,其URL都必须是“https访问前缀+方法”,如用户管理的API接口,需加上https://api.bankledger.com/blockchain/user/。
- 3.1. 获取token
- 获取访问令牌,这是使用所有API接口的首要条件,必须得先获得访问令牌,才能调用其他API接口。该API接口需要加上用户管理https访问前缀,即:
- https://api.bankledger.com/blockchain/user/getToken
- 方法:
- getToken
- 客户端:
- {
- “appId”:””, // appId
- “appKey”:”” // appKey
- }
- 服务器:
- {
- “errCode”:””, // 见错误码表
- “errMsg”:””,
- “data”:
- {
- “token”:””, // token
- “expires”:”” // 过期时间,单位:秒
- }
- }
- 其中expires为过期时间,一旦token过期,则要重新获取。
- 3.2. 用户管理
- 用户可包括法人用户、个体户、商家和个人用户等,是指开发者的用户。
- 注册区块链用户
- 方法:
- register
- 客户端:
- {
- “token”:””, // token
- “userName”:””, // 用户名
- “password”:””, // 密码
- “metadata”:”” // 自定义字段
- }
- 开发者首要注册用户,才能进行用户管理、发行和转让资产等操作,用户的自定义信息可写在数据项metadata中。
- 服务器:
- {
- “errCode”:””, // 见错误码表
- “errMsg”:””,
- “data”:
- {
- “blAddress”:”” // 区块链地址
- }
- }
- 当开发者注册成功一个用户,银链中间件就给该用户生成唯一的区块链地址,即用户ID,区块链应用应当记录该用户ID,对应到真实用户信息。
- 3.3. 数字资产
- 有价值的、可转让的数据我们称之为资产,比如积分、数字货币、单据、征信、保险、贷款等等。目前有资产发行、资产转让这两种获得方式,开发者可以自行组合出许多种应用场景,如数字货币发行和转让;提货单发行与转让;甚至可以同时发行代币和积分,并且在一定汇率下进行兑换等。数字资产接口包括资产发行、转让、查询等。
- 发行资产
- 方法:
- issue
- 客户端:
- {
- “token”:””, // token
- “blockChainId”:””, // 区块链底层ID,参考第3节
- “callMode”:””, // 调用模式 sync--同步调用 async--异步调用
- “password”:””, // 密码
- “blAddress”:””, // 区块链地址
- “assetName”:””, // 资产名称
- “assetUnit”:””, // 资产单位
- “assetQuantity”:””, // 资产数量,支持小数点,如100.5
- “assetDesc”:””, // 资产描述
- “metadata”:””, // 自定义字段
- “timestamp”:”” // 时间戳,从1970年1月1号开始的时间戳
- }
- 开发者可以给地址为blAddress的用户发行资产,也可以由某个商家用户给个人用户blAddress发行资产,由开发者在应用中控制。如数字资产与法币兑换,当用户给开发者从银行系统中支付100元钱,开发者在区块链中给该用户发行相应价值的数字资产,开发者的用户没有发行数字资产的权限;又如积分应用,商家和个人用户都是开发者的用户,商家有权限给个人用户发行积分,个人用户则没有该权限。
- 调用模式可以是同步或者异步,这是因为区块链的交易确认需要一定时间如几秒钟,因而以同步方式调用API会有等待时间。因而可以以异步方式调用,银链中间件会通知到用户指定的回调URL地址,该URL地址在开发者管理平台中设置。
- blockChainId是指在哪个区块链上发行资产,以下的接口同此意义。开发者管理平台中可设置默认区块链,同时也可启用其他几种区块链,经银链中间件初始化后,即可在不同的区块链上发行同一种数字资产。blockChainId可以选择为非默认区块链,在这种情况下,区块链应用本身必须记录哪种资产是在哪个区块链上发行的。
- 服务器:
- {
- “errCode”:””, // 见错误码表
- “errMsg”:””,
- “data”:
- {
- “assetId”:””, // 资产Id
- “txId”:”” // 交易Id
- }
- }
- 如果返回txid不为空,则已经成功发行;如果是异步调用,则会通知到指定的URL回调地址。
- 3.4. 智能合约
- 这里所说的智能合约是指用户自行编写且上传至区块链的智能合约。资产如何被发行和被转让,用户如何得到资产并且转让资产,这些是业务规则。业务规则可在区块链应用中自行实现,也可以通过区块链的智能合约实现。
- 银链中间件支持Ethereum和Fabric两种智能合约平台,用户可以把智能合约事先在开发者管理平台上传、编译和部署,而后在API接口中调用。
- 目前智能合约接口包括调用、查询等,
- 3.4.1. 调用
- 方法:
- invoke
- 客户端:
- {
- “token”:””, // token
- “blockChainId”:””, // 区块链底层ID,参考第2节
- “callMode”:””, // 调用模式 sync--同步调用 async--异步调用
- “chaincodeId”:””, // chaincode ID
- “function”:””, // 调用Chaincode中的哪个函数
- “args”:[“1”, “2”, ...], // 传给Chaincode参数
- “timestamp”:”” // 时间戳,从1970年1月1号开始的时间戳
- }
- Function是指函数名称,args是传给该函数的参数列表。
- Invoke方法是要发送交易、调用智能合约、改变智能合约数据的操作。
- 服务器:
- {
- “errCode”:””, // 见错误码表
- “errMsg”:””,
- “data”:
- {
- “txId”:”” // 交易ID
- }
- }
- 3.4.2. 查询
- 方法:
- query
- 客户端:
- {
- “token”:””, // token
- “blockChainId”:””, // 区块链底层ID,参考第2节
- “chaincodeId”:””, // chaincode ID
- “function”:””, // 调用Chaincode中的哪个函数
- “args”:[“1”, “2”, ...] // 传给Chaincode参数
- }
- query方法是通过智能合约在本地查询的操作,不发送交易、不改变智能合约数据。
- 服务器:
- {
- “errCode”:””, // 见错误码表
- “errMsg”:””,
- “data”:
- {
- “result”:[“abc”, “123”] // 查询结果
- }
- }
同时,BMWare中间件还支持多链访问、数据迁移、企业私有化部署等操作。
想获取更多技术相关信息,欢迎关注微信:bankledger
浙公网安备 33010602011771号