【区块链学习】系列一:Hyperledger Fabric架构学习01

“前阵子做了一个很突然的决定,就是决定把未来三年的研究方向从cv转成区块链。可能有点莽撞,也可能最后并不会从事区块链相关的工作,但是如果可以的话,我希望这条学习的路,可以让我学得更多,看得更广。”


接下来半年到一年的时候,笔者会陆陆续续从以下几个方面更新区块链系列(以fabric架构为主轴),除了以下六个方向,可能还会出linux系统和云服务相关的番外篇。
【区块链学习】系列一:Hyperledger Fabric架构学习01_第1张图片

0. 区块链中的重要概念

区块链技术,可以简单理解为一种去中心化数据库。去中心化,意味着平等,隐私,安全。数据库,意味着区块链本质上是用来存储数据的。
由此,区块链网络可以分为:数据层、网络层、共识层、激励层、合约层、应用层。
【区块链学习】系列一:Hyperledger Fabric架构学习01_第2张图片
区块链技术涉及到的概念众多,其中最为重要的三个概念为共识机制、智能合约,以及安全隐私/智能加密。

  • 共识机制
    分布式是区块链的一大特点,这说明区块链的各个节点很难在短时间内在一件事上达成共识,而共识机制的出现,就能解决这个问题,让各个节点不需要中间机构而实现点对点交易。
    在共识机制的发展中,涌现了多种多样的共识算法,例如基于工作量证明的POW,权益证明POS,实用拜占庭容错PBFT等等。
  • 智能合约
    智能合约可以简单理解为针对具体场景的解决方案。目前,智能合约也没有名字里写得这么智能,智能合约的设计是由程序员提前用代码写进去的固定规则,当外部环境达到合约中所写的条件时,便会触发智能合约,产生相应,从而达到更新账本等结果。
  • 安全隐私/智能加密
    区块链的出现的很大一部分目的就是为了保护用户的隐私和安全。所以安全隐私一直是区块链技术中的关键问题。安全方面,区块链会受到各种各样的攻击,如双花攻击,自私挖矿攻击等;隐私方面,目前使用的对称密匙、数字签名方法依旧不够匿名。

1. Hyperledger Fabric中的基本概念

Hyperledger:由Linux基金会孵化出来的区块链技术。
Hyperledger Fabric:第一个孵化出来额商用DLT(分布式账本技术)框架。
Hyperledger composer:一个在DLT框架上创建商业应用的工具。

01 . 资产assets、链码chaincode、账本ledger
【区块链学习】系列一:Hyperledger Fabric架构学习01_第3张图片
assets资产:所有被交易的东西。
chaincode链码:fabric里的智能合约。
  数据更新靠链码,链码描述了交易是否可以进行。链码指定可以指定背书策略,某个机构可以执行什么策略。
ledger账本:记录所有的交易。

02. 授权网络permission network、会员服务管理者MSP、颁发证书的网络CA
与比特币、以太坊等不同,fabric是实名制网络。permission network授权网络的存在就是为了达到访问控制的目的。
【区块链学习】系列一:Hyperledger Fabric架构学习01_第4张图片
MSP:一个可插拔的接口,用于支持各种认证体系结构。
CA:MSP接口的一种实现。

  • 每个机构在hyperledger网络中必须拥有数字签名(x.509标准),而fabric ca是一种高质量工具,可以为我们自动生成证书。不同用户可以生成不同证书,每个用户可以有不同的属性,每个属性里可以添加角色、id等。
  • MSP的证书(说明你是谁,来自哪个网络)是由fabric ca来颁发的,每个节点都需要证书,只有拥有相同MSP的节点才可以互相发现,互相通信。

03. 节点node(peer,client,orderer)
peer:最普通的参与人员(用来存储和同步账本数据)

  • 一个peer是账本和链码存储的位置,在实际生产中一般有多个peer,peer决定是否更新账本。
  • 一个peer会属于不同的channel,一个channel里又有好多个peer,但是这些peer之间相互隔离。

client:给程序员操作的节点(实例化一个交易)
 可以通过cli命令行,node sdk,java sdk等进行使用。

orderer:排序节点(用来排序分发交易)
 orderer提供排序服务,以解决双花问题等。

在数据被提交给账本前,先交给orderer,orderer服务提供区块,这些区块被签名和验证。所有的交易都被存储在区块里。orderer做好区块后,把数据发给peer,peer接收到区块后,把数据写入自己的账本里。

04. 通道channel
每个channel可以理解为fabric的实例,所有的channel之间是相互隔离的,不同的channel有不同的规则。通过channel来保护用户隐私。

  • 在创建fabric网络的时候,一定要创建一些peer,而只有当这些peer加入channel之后,才可以有链码,才可以有动作。
  • peer创建之后,要想加入相应的channel,比如得到当前channel内peer的认可(创建和加入操作可以使用sdk里面的工具condigtx,修改channel配置可以使用configtxlator)

05. 链码chaincode
chaincode是用来更新账本数据的。sdk发起一个交易,peer执行这个链码。
chaincode必须属于某个channel,因为账本属于channel,而chaincode操作的是账本。
执行一个操作的时候,需要出示ca,明确在哪个channel,执行chaincode里的哪一个函数,需要什么参数。
一个channel里面可以定义多个chaincode,而chaincode需要在每一个peer上安装。

chaincode的生命周期:chaincode先安装install,然后实例化init,实例化会启动docker容器,然后在这个容器里面运行chaincode。
chaincode的背书策略:实例化chaincode需要指定倍数策略,通过and,or等来定义。(所有节点同意?只要有一个节点同意?指定节点同意?)

06. fabric的简单工作流程

  • sdk发送一个交易指令给一个或者多个peer
  • peer模拟执行,给出模拟执行的结果、读写集(账本)、key的version,反馈给sdk
  • sdk手机背书信息,带着签名,发给orderer
  • orderer检查数字签名,检查每个peer背书的读写集是否一致,并进行排序。如果没有问题,就发起调用,让每个peer去应用新的读写集。

你可能感兴趣的:(区块链,区块链,fabric,架构)