什么是区块链?从科技层面来看,区块链涉及数学、密码学、互联网和计算机编程等很多科学技术问题。从应用视角来看,简单来说,区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。而区块链丰富的应用场景,基本上都基于区块链能够解决信息不对称问题,实现多个主体之间的协作信任与一致行动 [7] 。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块 [8] 。
分布式账本指的是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证 [19] 。
跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性 [19] 。
存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私 [20] 。
共识机制就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡 [20] 。
区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能[20] 。
智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息(包括医疗信息和风险发生的信息)都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔。在保险公司的日常业务中,虽然交易不像银行和证券行业那样频繁,但是对可信数据的依赖是有增无减。因此,笔者认为利用区块链技术,从数据管理的角度切入,能够有效地帮助保险公司提高风险管理能力。具体来讲主要分投保人风险管理和保险公司的风险监督 [20] 。
Block Hash
BlockHash 即「区块哈希」。在区块链中,用户的交易记录都存储在区块里。区块由「区块头」和「区块体」组成。「区块体」记录转账交易信息;「区块头」记录上一个区块哈希、当前区块哈希和时间戳等。正是「区块头」内存储的信息使区块连成一条「链」。
Block Size
区块链的每个区块,都是用来承载某个时间段内的数据的,每个区块通过时间的先后顺 序,使用密码学技术将其串联起来,形成一个完整的分布式数据库,区块容量代表了一 个区块能容纳多少数据的能力。
Block Height
一个区块的高度是指在区块链中它和创世区块之间的块数。
Genesis Block
区块链中的第一个区块被称为“创世”区块。创世区块一般用于初始化,不带有交易信 息。
1、服务网络
服务网络的设计和建设理念完全借鉴互联网:互联网是由TCP/IP协议将所有数据中心连接而形成的,服务网络是通过建立一套区块链运行环境协议将所有数据中心连接而组成。与互联网一样,服务网络也是跨云服务、跨门户、跨底层框架的全球性基础网络。
2、BSN许可链服务(Permissioned Services)
BSN已经适配或正在适配国内绝大多数的主流联盟链框架。用户在BSN门户内,可以根据选择的底层框架,以及记账节点数,在BSN分布各地的公共城市节点上部署相应的联盟链应用。每个联盟链应用的记账节点数可以最多40个,并且可以分布在基于不同云服务的公共城市节点中。用户仅需要上传智能合约,并进行相应配置即可轻松完成联盟链应用的部署。这样的服务模式可以让开发者将精力和时间花费在业务创新和智能合约编写上,所有与环境搭建、系统维护、应用部署、节点传输和网络配置的工作均由BSN统一完成。
3、公有链服务(Permissionless Services)
4、跨链服务(Interchain Services)
官网:https://www.bsnbase.com/
中文手册:https://www.bsnbase.com/static/tmpFile/bzsc/getstarted/3-1.html
快速入门视频:https://www.bsnbase.com/static/tmpFile/bzsc/getstarted/3-2.html
链码(ChainCode)又称为智能合约,是用计算机语言描述合约条款、交易的条件、交易的业务逻辑等,通过调用智能合约实现交易的自动执行和对账本数据的操作。一个区块链应用可以部署多个链码,每个链码包含多个方法(Functions)。下面我们分别就
Hyperledger Fabric、FISCO BCOS和XuperChain三个底层框架来描述在BSN上开发和部署智能合约的要求。
Hyperledger Fabric:一个开源区块链分布式账本。在BSN平台上,支持go,java,Node JS编写链码包。
FISCO BCOS:FISCO BCOS是BCOS开源平台的金融分支,是基于BCOS平台加以模块升级与功能重塑 [1] ,为金融行业深度定制而成。在BSN平台上,支持Solidity编写链码包。
XuperChain:百度自主研发的区块链操作系统。在BSN平台上,C++编写链码包。
1、依据官方首页注册账号
2、打开测试网服务
3、下载预制链码包(https://download.csdn.net/download/qq_33317228/13744585 此版本为Java开发,官方提供go语言链码包),由官方下载https://github.com/BSNDA/FabricBaseChaincode,压缩成zip再上传。
4、选择区块链开源框架(每个框架具体对应预制链码包不同,链码包编写的语言不同,加密方式不同),具体见开发手册。
5、上传链码包,GOLANG需要指定到main函数路径,项目名称为bsnBaseCC,路径填写此即可,打开zip可以看到main.go ,zip的文件名不限制
6、点击开始部署即可,如遇time out等错误,重复部署即可。其他错误找客服询问处理。
1、上述第四点部署成功后,查看用户手册(https://www.bsnbase.com/static/tmpFile/bzsc/developer/5-4-2-2.html),链码包功能如下
预置链码包是我们为应用开发者提供对业务数据进行增删改查基本操作的链码(使用Golang语言编写)。应用开发者可以在此链码包的基础上根据应用业务需求进一步拓展链码功能。此链码支持存储的数据类型有字符串、整型、浮点型、集合(map、list)等。
下载地址:https://github.com/BSNDA/FabricBaseChaincode
链码包功能如下:
1. 增加数据(set)
输入参数说明
baseKey:需要保存的唯一的主键标识
baseValue:保存的数据信息
例:{"baseKey":"str","baseValue":"this is string"}
其中baseKey是不能为空的字符串,baseValue可以是任意类型的数据。如果baseKey已经存在,则直接返回已经存在,不能添加;如果不存在,则添加数据。
2. 修改数据(update)
输入参数说明
baseKey:需要修改的唯一的主键标识
baseValue:保存的数据信息
例:{"baseKey":"str","baseValue":"this is string"}
其中baseKey是不能为空的字符串,baseValue可以是任意类型的数据。如果baseKey不存在,则无法更新,如果已经存在,则修改数据。
3. 删除数据(delete)
输入参数说明
baseKey:需要删除的唯一的主键标识的值
例:"str"
其中baseKey的值不能为空,且必须存在,否则将无法删除。
4. 获取数据(get)
输入参数说明
baseKey:需要获取的唯一的主键标识的值
例:"str"
其中baseKey的值不能为空,且必须存在,否则将无法获取到相应的信息。
5. 获取历史记录数据(getHistory)
输入参数说明
baseKey:需要获取的唯一的主键标识的值
例:"str"
其中baseKey的值不能为空。响应结果:交易Id(txId)、交易时间(txTime)、是否删除(isDelete)、交易信息(dataInfo)。
2、下载BSN网关SDK(https://github.com/BSNDA/PCNGateway-Java-SDK)
我们为开发者提供链下业务系统调用BSN城市节点网关进行交易处理和查询的基础SDK,帮助开发者可以快速完成链下业务系统与网关交互的开发。SDK中对网关API进行了封装,提供交易封装、网关交易接口调用、本地生成公私钥对、上传公钥模式下用户注册和证书登记、数据签名和数据加解密等功能。
3、此SDK包含了四大基础区块链开源框架调用的案例,我们预制链码包选择的Fabric框架。代码使用FabricTest去测试即可。
4、具体API见https://www.bsnbase.com/static/tmpFile/bzsc/developer/5-4-3.html
5、使用reqChainCode接口操作链包基础set函数。此时我们baseKey为数据源主键,baseValue为上链内容。
6、使用reqChainCode接口操作链包基础get函数。此时只需要baseKey即可查询。
7、其他函数按照API即可。
1、链包开发见PPT
https://download.csdn.net/download/qq_33317228/13744686
2、外部接入SDK,见上述第五点(BSN外系统接入指南)