2008年9月,金融危机刚刚开始,并且迅速的蔓延全球。在这样的背景下,10月31日一个密码学极客中本聪Satoshi Nakamoto在“密码朋克 (https://www.huxiu.com/article/269132.html) ”网站的邮件列表中发表了一篇论文,题为《比特币:一种点对点式的电子现金系统》,人称“比特币白皮书”。
白皮书中,中本聪详细描述了如何创建一套去中心化的电子交易体系,且这种体系不需要创建在交易双方相互信任的基础之上。很快,在2009年1月,中本聪在芬兰赫尔辛基的一个小型服务器上挖出了比特币的第一个区块——创世区块(Genesis Block),并获得了50个比特币的奖励。几天后,2009年1月9日出现序号为1的区块,并与序号为0的创世区块相连接形成了链,标志着区块链的诞生。之后,创始区块计入公开账簿,区块链时代正式开始。相反的是,它的创始人中本聪自此销声匿迹,没人知道他到底是谁。2010年5月,佛罗里达州的一名程序员Laszlo Hanyecz用10000个比特币购买了两块披萨 (史上最贵披萨),这是在比特币发展历史上第一次被当成货币使用。
如今,比特币仍是数字货币的绝对主流,数字货币呈现了百花齐放的状态,常见的有比特币 BTC,以太币 ETH,瑞波币 XRP,比特币现金 BCH,莱特币 LTC,达世币 DASH 等。
比特币白皮书英文原版 其实并未出现 blockchain 一词,而是使用的 chain of blocks。最早的比特币白皮书中文翻译版中,将 chain of blocks 翻译成了区块链。这是“区块链”这一中文词最早的出现时间。区块链(blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
通常来说,一个区块链系统具有如下的特点:
ü 去中心化
区块链技术不依赖额外的第三方管理机构或硬件设施,没有中心管制,除了自成一体的区块链本身,通过分布式核算和存储,各个节点实现了信息自我验证、传递和管理。去中心化是区块链最突出最本质的特征 。
ü 开放性
区块链技术基础是开源的,除了交易各方的私有信息被加密外,区块链的数据对所有人开放,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。
ü 独立性
基于协商一致的规范和协议(类似比特币采用的哈希算法等各种数学算法),整个区块链系统不依赖其他第三方,所有节点能够在系统内自动安全地验证、交换数据,不需要任何人为的干预 。
ü 安全性
只要不能掌控全部数据节点的51%,就无法肆意操控修改网络数据,这使区块链本身变得相对安全,避免了主观人为的数据变更。
ü 匿名性
除非有法律规范要求,单从技术上来讲,各区块节点的身份信息不需要公开或验证,信息传递可以匿名进行。
为了实现上述的特点,区块链系统综合应用了多种技术手段,核心的技术手段包括:
ü 分布式账本
分布式账本指的是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证 。
ü 非对称加密
存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私 。
ü 共识机制
共识机制就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能 。
ü 智能合约
智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。
区块链按照运行方式来划分,目前主要分为以下三种:
ü 公有区块链
公有区块链(Public Block Chains) 是指:世界上任何个体或者团体都可以发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。公有区块链是最早的区块链,也是应用最广泛的区块链,各大虚拟数字货币均基于公有区块链,世界上有且仅有一条该币种对应的区块链。
ü 联合(行业)区块链也叫联盟链
联盟链(Consortium Block Chains):由某个群体内部指定多个预选的节点为记账人,每个块的生成由所有的预选节点共同决定(预选节点参与共识过程),其他接入节点可以参与交易,但不过问记账过程(本质上还是托管记账,只是变成分布式记账,预选节点的多少,如何决定每个块的记账者成为该区块链的主要风险点),其他任何人可以通过该区块链开放的API进行限定查询。
ü 私有区块链
私有区块链(Private Block Chains):仅仅使用区块链的总账技术进行记账,可以是一个公司,也可以是个人,独享该区块链的写入权限。
超级账本(Hyperledger)是Linux基金会下的众多项目中的一个,是由IBM、因特尔,还有金融公司,GP摩根以及其他联合机构于2015年提出来的区块链项目。超级账本还包括其他的框架项目,但是其中广为人知的是Fabric。
Hyperledger Fabric,它是由 IBM 带头发起的一个联盟链项目,于 15 年底移交给 Linux 基金会,成为开源项目。Linux 基金会孵化了很多区块链项目,Fabric 是其中最出名的一个,一般我们说超级账本(Hyperledger)基本上指的都是 Fabric。
Hyperledger Fabric基于谷歌的gRPC框架开发,实现了网络内任意节点的对等通信。同时使用Docker容器技术来托管构成基本交互逻辑的智能合约。简而言之,Hyperledger Fabric是专门为企业和机构设计的通用型业务系统。
ü chaincode:链码也叫智能合约,每个chaincode可提供多个不同的调用命令。
ü transaction:交易,每条指令都是一次交易。
ü world state:对同一个key的多次交易形成的最终value,就是世界状态。
ü endorse:背书。金融上的意义为:指持票人为将票据权利转让给他人或者将一定的票据权利授予他人行使,而在票据背面或者粘单上记载有关事项并签章的行为。通常我们引申为对某个事情负责。在我们的共识机制的投票环节里,背书意味着参与投票。
ü endorsement policy:背书策略。由智能合约chaincode选择哪些peer节点参与到背书环节来。
ü peer:存放区块链数据的结点,同时还有endorse和commit功能。
ü channel:私有的子网络,事实上是为了隔离不同的应用,一个channel可含有一批chaincode。
ü PKI:Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
ü MSP:Membership Service Provider,联盟链成员的证书管理,它定义了哪些RCA以及ICA在链里是可信任的,包括定义了channel上的合作者。
ü ORG:organization,管理一系列合作企业的组织。
fabric大致分为底层的网络层、权限管理模块、区块链应用模块,通过SDK和CLI对应用开发者提供服务,如下面所示。
Hyperledger Fabric网络下主要有四种类型的节点:
ü Client节点(客户端节点),这一节点主要用于提供应用访问区块链网络的入口,负责系统与区块链之间的数据交互。
ü Peer节点,包含了Anchor节点(锚节点),Endorser节点(背书节点)和Committer节点(记账节点)。其中锚节点每个组织中至多只有一个,负责和其他组织以及order节点交互,组织网络中的非锚节点不直接参与和外部网络的信息交换。背书节点负责模拟执行来自用户的交易请求,并对请求进行验证和签名。记账节点负责保存区块链信息,更新世界状态等。需要强调的是这三种角色之间并非互斥关系,一个Peer节点可能同时兼有背书节点,记账节点等多种角色,而且所有的Peer节点都是记账节点。
ü Orderer节点,共识机制的核心节点,负责对来自用户的交易请求进行排序,打包成区块后分发给其它组织的锚节点。
ü CA节点(鉴权节点),非必要节点,主要负责证书的颁发,身份验证及用户鉴权等。也可通过第三方证书鉴权机构实现。
就Hyperledger Fabric的网络拓扑结构而言,其并不同于如比特币,以太坊等常见公链的网状拓扑结构,而是更接近于具备一定层级关系的树状拓扑结构, 就此而言,Hyperledger Fabric也可以说是一个多中心网络。
除了不同的组织外,Fabric网络中还存在由Orderer节点组成的排序网络,Orderer节点有Solo和Kafka两种运行模式。Solo模式由单个Orderer节点提供排序服务,往往只是用于网络测试和节点数较少的场景。商业应用中一般采用Kafka模式,Orderer节点将接收到的交易请求发送给Kafka集群,由Kafka集群排序后再返回给Orderer节点,这一设计大大提升了Orderer集群的排序分发效率。
Hyperledger Fabric网络中一个完整的交易流程为:
客户端首先提交交易提案发送给背书节点(至少两个,具体可在背书策略中设置,用户可指定要使用的背书节点),背书节点收到交易提案后启动链码(运行在一个隔离的安全容器中,无法被人为干预)模拟交易(仅仅是模拟,并不会更新到区块链网络中)。鉴权验证通过后背书节点会添加数字签名并返回给客户端(理论上多个背书节点返回的执行结果应当一致)。客户端将签名后的交易请求发送给Orderer节点,Orderer节点进行排序后打包成区块分发给各组织锚节点。锚节点分发给组织内记账节点,记账节点验证完成后将最新的区块添加到本地区块链中,并更新世界状态。
Fabric 的部署完全基于容器来运行,常见的部署方式主要有2种,一种是不借助任何平台,使用 docker-compose 工具来部署。另外一种是借助K8S这样的容器编排平台来部署,由于K8S已经是事实的容器编排平台标准,大部分情况下都建议使用K8S 来部署,当然,各种以K8S为核心的PaaS平台,也可以用来部署。
从易用性看,使用 docker-compose 部署时,需要在各个节点上编写相应的
docker-compose 配置文件,这样配置文件会分散在各个节点上,操作的时候需要登录到各个节点上来进行。使用K8S部署时,所有的配置文件都存放在K8S的master节点上,集中存放,方便管理。
另外,更重要的是,使用docker-compose部署,docker-compose本身没有提供更多的管理,监控功能,所以,在生产环境中,应该不会有人使用 docker-compose的方式,更多的是基于K8S来部署。
下图是一个基础架构示例,以此示例为例,简单说明一下Fabric 部署的过程,使用的版本是 Fabric 2.1,使用的服务器为 K1 Power Linux FP5280 G2。
ü Step 1:安装K8S 集群
具体的K8S集群安装过程不再描述,K8S集群安装完成后,按照在Fabric网络中担任的角色,给集群中的各节点分别打上相应的标签。
ü Step 2:准备配置文件
示例中,需要准备的配置文件如下图所示
ü Step 3:启动Fabric 需要的服务
示例中,服务启动顺序如下:
启动 zookeeper
启动 Kafka
启动 Orderer
启动 CouchDB
启动 Peer
ü Step 4:Peer 加入 Channel
生成创世纪块(genesis block)
生成 Channel配置文件
更新锚节点
创建Peer Channel
Peer 加入 Channel
ü Step 5:链码操作
拷贝链码
安装链码
批准链码
提交链码
至此,一个基本的Fabric 网络就已经搭建好了。
Fabric 作为眼下最有影响力的超级账本开源项目,获得了广泛的关注和研究。本文是基于在K1 Power上部署Fabric网络的实践写成,希望能提供一些有益的经验。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论