带你玩转区块链--基于Fabric实现一个联盟链-第三章-第一节【Fabric篇】

本文详细介绍了如何基于Hyperledger Fabric搭建联盟链,包括理解联盟链的意义,安装Fabric,手动组建网络,创建创始块和通道文件,编写docker-compose配置,启动网络,以及进行Peer操作和智能合约的部署。内容涵盖了从网络初始化到链码操作的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、意义:

             在本节内容开始之前,我先跟读者朋友们一起分享一下公链、联盟链、私有链的优劣势。

1、公有链

任何节点都是向任何人开放的,每个人都可以参与到这个区块链中进行计算,而且任何人都可以下载获得完整区块链数据(全部账本)。比特币就是最典型的公有链。

优点:公有链最大的优点就是去中心化和安全性。目前像一般比较出名的数字货币:比特币、以太币、瑞波币等都是使用公有链来运行的。由此可见,这些数字货币安全性很高,同时也不受到谁的控制。
缺点:尽管公有链很好很安全,但是设想一下,这么多随意出入的节点是很难达成共识的(上一篇文章提到的共识)因为有些节点可能随时宕机,黑客也可能伪造很多虚假的节点。所以,公有链有一套很严格的共识机制,因此公有链最大的问题就是共识问题,共识问题直接导致了公有链处理数据的速度问题,因此如果你玩比特币就知道了,转账要很久才能到。

2、私有链

有些区块链的应用场景下,并不希望这个系统任何人都可以参与,任何人都可以查看所有数据,只有被许可的节点才可以参与并且查看所有数据,这种区块链结构我们称为私有链。

优点:私有链可以完全自己定制策略,因此速度极快
缺点:相比较而言,私有链不具备去中心化

3、联盟链

联盟链是指有若干机构或组织共同参与管理的区块链,他们各自运行着一个或多个节点,之中的数据只允许系统内不同的机构进行读取和发送交易,并且共同记录交易数据。R3组成的银行区块链联盟要构建的就是典型的联盟链。

优点:联盟链优点就是比公有链处理速度要快,因为节点的数量和身份都已经规定好了,所以可以使用相对松散的共识机制,因此数据的处理速度就会比公有链大大提高。目前,联盟链的发展速度很惊人。
缺点:尽管联盟链速度加快,但是相比公有链来说,联盟链并不是完全去中心化的。因为理论上联盟之间可以联合起来修改区块链数据。发币无意义。

从上述描述中,我们了解到了一点联盟链的优劣势。抛开这些争论,秉承存在即合理的原则。我们深入研究一下联盟链。目前联盟链大多数都是基于Hyper Ledger fabric来实现的。下面我们来认识一下Hyper Ledger fabric的概念。

二、HyperLedger fabric:

Hyperledger Fabric是Linux基金会所主导的Hyperledger(超级账本)的项目之一。Hyperledger Fabric旨在作为开发模块化体系结构的区块链应用程序的基础,以便诸如共识和会员服务等组件可以即插即用。它使用容器技术来托管构成系统应用逻辑的智能合约(也称为链代码)。 简而言之,Hyperledger Fabric就是开发联盟链应用的最好工具之一。

脚本安装Fabric(略)

由于fabric安装比较复杂,所以我单独写了一个文档。安装文档我将放入github中,待文章写毕,将安装文档上传github。

github链接:https://github.com/lsy-zhaoshuaiji/faricInstall

手动组件Fabric网络

1.生成模板,

cryptogen showtemplate > crypto-config.yaml

2.修改模板后生成

模板如下,请按照自己的需求修改

# ---------------------------------------------------------------------------
  # "OrdererOrgs" - Definition of organizations managing orderer nodes
  # ---------------------------------------------------------------------------
  OrdererOrgs:	# 排序节点组织信息
    # ---------------------------------------------------------------------------
    # Orderer
    # ---------------------------------------------------------------------------
    - Name: Orderer	# 排序节点组织的名字
      Domain: example.com	# 根域名, 排序节点组织的根域名
      Specs:
        - Hostname: orderer # 访问这台orderer对应的域名为: orderer.example.com
        - Hostname: order2 # 访问这台orderer对应的域名为: order2.example.com
  # ---------------------------------------------------------------------------
  # "PeerOrgs" - Definition of organizations managing peer nodes
  # ---------------------------------------------------------------------------
  PeerOrgs:
    # ---------------------------------------------------------------------------
    # Org1
    # ---------------------------------------------------------------------------
    - Name: Org1	# 第一个组织的名字, 自己指定
      Domain: org1.example.com	# 访问第一个组织用到的根域名
      EnableNodeOUs: true			# 是否支持node.js
      Template:					# 模板, 根据默认的规则生成2个peer存储数据的节点
        Count: 2 # 1. peer0.org1.example.com 2. peer1.org1.example.com
      Users:	   # 创建的普通用户的个数
        Count: 3
        
    # ---------------------------------------------------------------------------
    # Org2: See "Org1" for full specification
    # ---------------------------------------------------------------------------
    - Name: Org2
      Domain: org2.example.com
      EnableNodeOUs: true
      Template:
        Count: 2
      Specs:
        - Hostname: hello
      Users:
        Count: 1

 修改后为:

# ---------------------------------------------------------------------------
  # "OrdererOrgs" - Definition of organizations managing orderer nodes
  # ---------------------------------------------------------------------------
  OrdererOrgs:
    # ---------------------------------------------------------------------------
    # Orderer
    # ---------------------------------------------------------------------------
    - Name: Orderer
      Domain: itcast.com
      Specs:
        - Hostname: orderer
  
  # ---------------------------------------------------------------------------
  # "PeerOrgs" - Definition of organizations managing peer nodes
  # ---------------------------------------------------------------------------
  PeerOrgs:
    # ---------------------------------------------------------------------------
    # Org1
    # ---------------------------------------------------------------------------
    - Name: OrgGo
      Domain: orggo.itcast.com
      EnableNodeOUs: true
      Template:
        Count: 2
      Users:
        Count: 3
  
    # ---------------------------------------------------------------------------
    # Org2: See "Org1" for full specification
    # ---------------------------------------------------------------------------
    - Name: OrgCpp
      Domain: orgcpp.itcast.com
      EnableNodeOUs: true
      Template:
        Count: 2
      Users:
        Count: 3

运行

cryptogen generate --config=crypto-config.yaml

3.创始块文件和通道文件的生成(复制时请保存在txt文件中,再修改文件名,不然会乱码)

命令介绍:

$ configtxgen --help 
  # 输出创始块区块文件的路径和名字
  `-outputBlock string`
  # 指定创建的channel的名字, 如果没指定系统会提供一个默认的名字.
  `-channelID string`
  # 表示输通道文件路径和名字
  `-outputCreateChannelTx string`
  # 指定配置文件中的节点
  `-profile string`
  # 更新channel的配置信息
  `-outputAnchorPeersUpdate string`
  # 指定所属的组织名称
  `-asOrg string`
  # 要想执行这个命令, 需要一个配置文件 configtx.yaml
```

配置文件模板:

```yaml
  
  ---
  ################################################################################
  #
  #   Section: Organizations
  #
  #   - This section defines the different organizational identities which will
  #   be referenced later in the configuration.
  #
  ################################################################################
  Organizations:			# 固定的不能改
      - &OrdererOrg		# 排序节点组织, 自己起个名字
          Name: OrdererOrg	# 排序节点的组织名
          ID: OrdererMSP		# 排序节点组织的ID
          MSPDir: crypto-config/ordererOrganizations/example.com/msp # 组织的msp账号信息
  
      - &Org1			# 第一个组织, 名字自己起
          Name: Org1MSP # 第一个组织的名字
          ID: Org1MSP		# 第一个组织的ID
          MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
          AnchorPeers: # 锚节点
              - Host: peer0.org1.example.com  # 指定一个peer节点的域名
                Port: 7051					# 端口不要改
  
      - &Org2
          Name: Org2MSP
          ID: Org2MSP
          MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
          AnchorPeers:
              - Host: peer0.org2.example.com
                Port: 7051
  
  ################################################################################
  #
  #   SECTION: Capabilities, 在fabric1.1之前没有, 设置的时候全部设置为true
  #   
  ################################################################################
  Capabilities:
      Global: &ChannelCapabilities
          V1_1: true
      Orderer: &OrdererCapabilities
          V1_1: true
      Application: &ApplicationCapabilities
          V1_2: true
  
  ################################################################################
  #
  #   SECTION: Application
  #
  ################################################################################
  Application: &ApplicationDefaults
      Organizations:
  
  ################################################################################
  #
  #   SECTION: Orderer
  #
  ##########################
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值