应用场景应该如何选择适合的区块链底层技术平台?

区块链技术前景及应用

目前,区块链(Blockchain)技术已经成为金融机构、企事业单位的新宠:R3联合摩根大通、高盛等42家超大型金融机构打造Corda清结算区块链;LINUX基金会联合INTEL、IBM等近百家科技公司和金融机构研发分布式账本Hyperledger。

区块链是由节点参与的分布式数据库系统,即系统中的每个节点都参与数据记录。其特点是去中心化、公开透明、不可更改,不可伪造。区块链技术在数字资产、供应链、身份信用、股权债券、公示公证、电子票据、医疗记录、物联网、数据共享都取得了一定的应用。

选用区块链底层技术平台的难点

目前国内外较为大众熟悉的区块链底层技术平台有:以太坊、Bition、Ethereum、Fabric、corda、Bitshares、Openchain等。这些区块链底层技术平台都有其适用性和可取性。众多的区块链底层技术平台,使得金融机构必须得去一一学习,去理解其技术,才能结合应用场景采用某种区块链。

但是,区块链底层技术平台种类繁多,发展前景不确定。金融机构在实施区块链应用时必须考虑选用的区块链能否长期存在、合规性、版权、运维等一系列问题。另外,就人才成本而言,区块链技术和应用对从业人才层次、技术积累和理念改变提出了较高的要求。企业需要在短时间内培养出金融和区块链的交叉人才。因此,在众多的区块链底层技术平台中,如何选择适合自己应用场景的区块链底层技术平台,就成为了金融机构和企事业单位最棘手的一个问题。

解决方法

近期,一种将各种区块链底层技术平台和上层应用相联系的技术——BMWare横空出世,BMWare中间件封装多种异构区块链,向上层应用提供统一API接口,在区块链应用和区块链底层技术平台之间架起一座桥梁。

当前的BMWare中间件版本提供了用户管理、资产管理、智能合约、通知等API接口。支持银链联盟链(BLChain)、Ethereum和Fabric等三种区块链类型。以下是BMWare中间件的部分示例代码:

  1. 1.  访问前缀  
  2. https://api.bankledger.com/blockchain/user/,用户管理的所有接口放在此URL下;  
  3. https://api.bankledger.com/blockchain/asset/,数字资产管理的所有接口放在此URL下;  
  4. https://api.bankledger.com/blockchain/chaincode/,智能合约的所有接口放在此URL下;  
  5.   
  6. 2.  区块链底层  
  7. 区块链 编号  
  8. 银链联盟链(BLChain)  200  
  9. Fabric  201  
  10. 以太坊(ETH)    202  
  11. 以太坊原链(ETC)  203  
  12. 3.  接口  
  13. 通过https协议的POST方法调用API接口,其URL都必须是“https访问前缀+方法”,如用户管理的API接口,需加上https://api.bankledger.com/blockchain/user/。  
  14. 3.1.    获取token  
  15.     获取访问令牌,这是使用所有API接口的首要条件,必须得先获得访问令牌,才能调用其他API接口。该API接口需要加上用户管理https访问前缀,即:  
  16. https://api.bankledger.com/blockchain/user/getToken  
  17.   
  18. 方法:  
  19. getToken  
  20.   
  21. 客户端:  
  22. {  
  23. “appId”:””,              // appId  
  24. “appKey”:””             // appKey  
  25. }  
  26.   
  27. 服务器:  
  28. {  
  29. “errCode”:””,            // 见错误码表  
  30. “errMsg”:””,  
  31. “data”:  
  32. {  
  33. “token”:””,        // token  
  34. “expires”:””       // 过期时间,单位:秒  
  35. }  
  36. }  
  37. 其中expires为过期时间,一旦token过期,则要重新获取。  
  38. 3.2.    用户管理  
  39.         用户可包括法人用户、个体户、商家和个人用户等,是指开发者的用户。  
  40. 注册区块链用户  
  41. 方法:  
  42. register  
  43.   
  44. 客户端:  
  45. {  
  46. “token”:””,              // token  
  47. “userName”:””,             // 用户名  
  48. “password”:””,              // 密码  
  49. “metadata”:””              // 自定义字段  
  50. }  
  51. 开发者首要注册用户,才能进行用户管理、发行和转让资产等操作,用户的自定义信息可写在数据项metadata中。  
  52.   
  53. 服务器:  
  54. {  
  55. “errCode”:””,            // 见错误码表  
  56. “errMsg”:””,  
  57. “data”:  
  58. {  
  59. “blAddress”:””      // 区块链地址  
  60. }  
  61. }  
  62. 当开发者注册成功一个用户,银链中间件就给该用户生成唯一的区块链地址,即用户ID,区块链应用应当记录该用户ID,对应到真实用户信息。  
  63. 3.3.    数字资产  
  64. 有价值的、可转让的数据我们称之为资产,比如积分、数字货币、单据、征信、保险、贷款等等。目前有资产发行、资产转让这两种获得方式,开发者可以自行组合出许多种应用场景,如数字货币发行和转让;提货单发行与转让;甚至可以同时发行代币和积分,并且在一定汇率下进行兑换等。数字资产接口包括资产发行、转让、查询等。  
  65. 发行资产  
  66. 方法:  
  67. issue  
  68.   
  69. 客户端:  
  70. {  
  71. “token”:””,             // token  
  72. “blockChainId”:””,           // 区块链底层ID,参考第3节  
  73. “callMode”:””,              // 调用模式  sync--同步调用 async--异步调用  
  74. “password”:””,             // 密码  
  75. “blAddress”:””,             // 区块链地址  
  76. “assetName”:””,            // 资产名称  
  77. “assetUnit”:””,             // 资产单位  
  78. “assetQuantity”:””,         // 资产数量,支持小数点,如100.5  
  79. “assetDesc”:””,             // 资产描述  
  80. “metadata”:””,             // 自定义字段  
  81. “timestamp”:””            // 时间戳,从1970年1月1号开始的时间戳  
  82. }  
  83.   
  84. 开发者可以给地址为blAddress的用户发行资产,也可以由某个商家用户给个人用户blAddress发行资产,由开发者在应用中控制。如数字资产与法币兑换,当用户给开发者从银行系统中支付100元钱,开发者在区块链中给该用户发行相应价值的数字资产,开发者的用户没有发行数字资产的权限;又如积分应用,商家和个人用户都是开发者的用户,商家有权限给个人用户发行积分,个人用户则没有该权限。  
  85. 调用模式可以是同步或者异步,这是因为区块链的交易确认需要一定时间如几秒钟,因而以同步方式调用API会有等待时间。因而可以以异步方式调用,银链中间件会通知到用户指定的回调URL地址,该URL地址在开发者管理平台中设置。  
  86. blockChainId是指在哪个区块链上发行资产,以下的接口同此意义。开发者管理平台中可设置默认区块链,同时也可启用其他几种区块链,经银链中间件初始化后,即可在不同的区块链上发行同一种数字资产。blockChainId可以选择为非默认区块链,在这种情况下,区块链应用本身必须记录哪种资产是在哪个区块链上发行的。  
  87.   
  88. 服务器:  
  89. {  
  90. “errCode”:””,            // 见错误码表  
  91. “errMsg”:””,  
  92. “data”:  
  93. {  
  94. “assetId”:””,        // 资产Id  
  95. “txId”:””           // 交易Id  
  96. }  
  97. }  
  98. 如果返回txid不为空,则已经成功发行;如果是异步调用,则会通知到指定的URL回调地址。  
  99. 3.4.    智能合约  
  100. 这里所说的智能合约是指用户自行编写且上传至区块链的智能合约。资产如何被发行和被转让,用户如何得到资产并且转让资产,这些是业务规则。业务规则可在区块链应用中自行实现,也可以通过区块链的智能合约实现。  
  101. 银链中间件支持Ethereum和Fabric两种智能合约平台,用户可以把智能合约事先在开发者管理平台上传、编译和部署,而后在API接口中调用。  
  102. 目前智能合约接口包括调用、查询等,  
  103. 3.4.1.  调用  
  104. 方法:  
  105. invoke  
  106.   
  107. 客户端:  
  108. {  
  109. “token”:””,         // token  
  110. “blockChainId”:””,   // 区块链底层ID,参考第2节  
  111. “callMode”:””,          // 调用模式  sync--同步调用 async--异步调用  
  112. “chaincodeId”:””,       // chaincode ID  
  113. “function”:””,          // 调用Chaincode中的哪个函数  
  114. “args”:[“1”, “2”, ...],      // 传给Chaincode参数  
  115. “timestamp”:””        // 时间戳,从1970年1月1号开始的时间戳  
  116. }  
  117. Function是指函数名称,args是传给该函数的参数列表。  
  118. Invoke方法是要发送交易、调用智能合约、改变智能合约数据的操作。  
  119.   
  120. 服务器:  
  121. {  
  122. “errCode”:””,            // 见错误码表  
  123. “errMsg”:””,  
  124. “data”:  
  125. {  
  126. “txId”:””            // 交易ID  
  127. }  
  128. }  
  129.   
  130. 3.4.2.  查询  
  131. 方法:  
  132. query  
  133.   
  134. 客户端:  
  135. {  
  136. “token”:””,         // token  
  137. “blockChainId”:””,   // 区块链底层ID,参考第2节  
  138. “chaincodeId”:””,       // chaincode ID  
  139. “function”:””,          // 调用Chaincode中的哪个函数  
  140. “args”:[“1”, “2”, ...]      // 传给Chaincode参数  
  141. }  
  142. query方法是通过智能合约在本地查询的操作,不发送交易、不改变智能合约数据。  
  143.   
  144. 服务器:  
  145. {  
  146. “errCode”:””,            // 见错误码表  
  147. “errMsg”:””,  
  148. “data”:  
  149. {  
  150. “result”:[“abc”, “123”]  // 查询结果  
  151. }  
  152. }  

同时,BMWare中间件还支持多链访问、数据迁移、企业私有化部署等操作。

想获取更多技术相关信息,欢迎关注微信:bankledger

posted @ 2018-03-23 10:22  Net-Spider  阅读(392)  评论(0)    收藏  举报