简单搭建Fabric网络

news2024/12/22 19:51:06

Fabric网络的搭建分为两个阶段:生成网络拓扑和启动网络。在这里,我们假设要搭建一个具有一个orderer节点和两个peer节点的Fabric网络。

在生成网络拓扑之前,需要准备好以下文件:

  • crypto-config.yaml:用于生成组织和节点的密钥和证书。

  • configtx.yaml:用于定义通道和配置块。

  • docker-compose.yaml:用于定义容器环境。

生成相关证书文件

启动Fabric需要生成相关的证书,通过cryptogen模块完成的,cryptogen模块会根据提供的配置文件生成需要的证书和数据文件。

cryptogen showtemplate

我们可以根据这个代码生成简单模板导入crypto-config.yaml文件,也可以参考官方案例文件。

在这里插入图片描述

这是上述命令生成的内容,修改一下如下代码

OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1
    Crypto:
      CertificateAuthorities:
        - Name: ca-org1
          CommonName: ca-org1.example.com
          Country: CN
          Province: Beijing
          Locality: Beijing
          OrganizationalUnit: org1
          StreetAddress: Xizhimenwai
          PostalCode: 100089
      PeerOrg1:
        Name: org1
        Domain: org1.example.com
        Template:
          Count: 1
        Users:
          Count: 1](OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1
    Crypto:
      CertificateAuthorities:
        - Name: ca-org1
          CommonName: ca-org1.example.com
          Country: CN
          Province: Beijing
          Locality: Beijing
          OrganizationalUnit: org1
          StreetAddress: Xizhimenwai
          PostalCode: 100089
      PeerOrg1:
        Name: org1
        Domain: org1.example.com
        Template:
          Count: 1
        Users:
          Count: 1


OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    Template:
      Count: 1
    Users:
      Count: 1
    Crypto:
      CertificateAuthorities:
        - Name: ca-org1
          CommonName: ca-org1.example.com
          Country: CN
          Province: Beijing
          Locality: Beijing
          OrganizationalUnit: org1
          StreetAddress: Xizhimenwai
          PostalCode: 100089
      PeerOrg1:
        Name: org1
        Domain: org1.example.com
        Template:
          Count: 1
        Users:
          Count: 1

OrdererOrgs: 指定Orderer组织的相关信息,包括名称、域名和节点信息。
Name: 组织名称,这里为Orderer。
Domain: 组织域名,这里为example.com。
Specs: Orderer节点信息。
Hostname: 节点主机名,这里为orderer。
PeerOrgs: 指定Peer组织的相关信息,包括名称、域名、节点数量、用户数量等。
Name: 组织名称,这里为Org1和Org2。
Domain: 组织域名,这里分别为org1.example.com和org2.example.com。
Template: Peer节点信息。
Count: 节点数量,这里为2。
Users: 用户数量,这里为1。

执行下面命令生成生成组织和节点的密钥和证书

cryptogen generate --config=crypto-config.yaml --output ./crypto-config

会新增加一个文件夹crypto-config,里面存放着本例的相关配置文件,可以通过tree命令查看生成证书文件的内容。
在这里插入图片描述

配置通道和创世区块

Fabric是基于区块链的分布式账本,每个账本都拥有自己的区块链,账本的区块链中会存储账本的交易数据,但账本区块链中的第一个区块是个例外,该区块不存储交易数据而是存储配置信息,通常将账本的第一个区块称为创始块。综上所述,Fabric中账本的第一个区块是需要手动生成的。configtxgen模块是专门负责生成系统的创始块和Channel。configtxgen模块也需要一个配置文件来定义相关的属性。

configtx.yaml文件用于配置Fabric网络的通道、组织、节点等信息。configtx.yaml文件内容:


# 指定了一些全局的定义,如证书的默认失效时间、Genesis块的默认时间戳等等
Organizations:
    # 定义了Orderer组织的参数
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: /etc/hyperledger/msp/orderer/msp
    # 定义了两个Peer组织的参数
    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: /etc/hyperledger/msp/org1/msp
        AnchorPeers:
            # 定义了Org1组织的Anchor节点
            - Host: peer0.org1.example.com
              Port: 7051

    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: /etc/hyperledger/msp/org2/msp
        AnchorPeers:
            # 定义了Org2组织的Anchor节点
            - Host: peer0.org2.example.com
              Port: 7051

# 定义了Orderer节点的配置参数,包括Orderer组织、共识类型、batch size等等
Orderer: &OrdererDefaults
    OrdererType: etcdraft
    Addresses:
        - orderer.example.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 99 MB
        PreferredMaxBytes: 512 KB
    EtcdRaft:
        Consenters:
        - Host: orderer.example.com
          Port: 7050
          ClientTLSCert: /etc/hyperledger/orderer/tls/server.crt
          ServerTLSCert: /etc/hyperledger/orderer/tls/server.crt

# 定义了Application节点的配置参数,包括Peer组织、背书策略、Anchor节点等等
Application: &ApplicationDefaults
    Organizations:

# 定义了一个新的Genesis块,包括了Orderer组织和两个Peer组织
Profiles:
    OneOrgOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    # 定义了一个新的Channel,包括了两个Peer组织
    TwoOrgChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities

好的,继续说明:

  • Profiles:

    • TwoOrgsOrdererGenesis:这是Orderer节点的创世区块配置文件,包含了创世区块中需要的组织、Orderer节点信息和一些默认配置。

    • TwoOrgsChannel:这是通道的配置文件,包含了通道中需要的组织、Peer节点信息和一些默认配置。

  • Organizations:

    • Name:组织名称,这里定义了两个组织,一个为Orderer组织,一个为Peer组织。

    • ID:组织ID,这里定义了两个组织的ID。

    • MSPDir:MSP目录,这里定义了两个组织的MSP目录。

  • Orderer:

    • OrdererType:Orderer类型,这里定义了solo类型,即单节点Orderer。

    • Addresses:Orderer节点的地址列表,这里只有一个Orderer节点地址。

    • BatchTimeout:交易打包超时时间,单位为毫秒。

    • BatchSize:交易打包配置,包括最大交易数和最大字节数。

    • MaxChannels:最大通道数。

    • Organizations:Orderer组织的名称列表。

  • Application:

    • Organizations:应用组织的名称列表。
  • Capabilities:所支持的功能,这里只支持V1_4_2版本的功能。

  • Profiles(TwoOrgsOrdererGenesis):

    • Capabilities:配置文件所支持的功能,这里只支持V1_4_2版本的功能。

    • Orderer:Orderer的配置信息。

    • Consortiums:联盟配置信息,这里只有一个联盟。

  • Profiles(TwoOrgsChannel):

    • Capabilities:配置文件所支持的功能,这里只支持V1_4_2版本的功能。

    • Consortium:联盟名称。

    • Application:应用的配置信息,包含了应用组织的信息和Anchor Peer的信息。

    • Orderer:Orderer的配置信息。

    配置文件修改完成之后执行如下命令生成创始块文件。

configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./orderer. genesis.block

创建Channel的命令如下:

configtxgen -profile TestTwoOrgsChannel -outputCreateChannelTx ./roberttest channel.tx -channelID roberttestchannel

上述命令执行完成之后会在目录生成文件roberttestchannel.tx,该文件用来生成Channel。除此之外还需要生成相关的锚点文件,而生成锚点文件需要执行以下命令:

configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors. tx -channelID roberttestchannel -asOrg Org1MSP

configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors. tx -channelID roberttestchannel -asOrg Org2MSP

编写一个docker-compose.yaml其中定义了一个Orderer节点和两个Peer节点

version: '2'

networks:
  my-network:

services:
  orderer:
    image: hyperledger/fabric-orderer
    container_name: orderer.example.com
    environment:
      - ORDERER_GENERAL_LOGLEVEL=info
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_TLS_ENABLED=false
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
    command: orderer
    volumes:
      - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    ports:
      - 7050:7050
    networks:
      - my-network

  peer0.org1:
    container_name: peer0.org1.example.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_PEER=info
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: peer node start
    ports:
      - 7051:7051
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/msp/peer
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
    depends_on:
      - orderer
    networks:
      - my-network

  peer1.org1:
    container_name: peer1.org1.example.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_PEER=info
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: peer node start
    ports:
      - 8051:7051
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/msp/peer
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
    depends_on:
      - orderer
    networks:
      - my-network

然后启动网络:docker-compose up -d
运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/500807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么牌子蓝牙耳机好用不贵?国产性价比高的蓝牙耳机推荐

相较于有线耳机&#xff0c;无线蓝牙耳机更便携、功能更丰富&#xff0c;不用受到耳机孔与线的限制。那么&#xff0c;什么牌子的蓝牙耳机好用不贵&#xff1f;针对这个问题&#xff0c;我给大家推荐几款国产性价比高的蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱Lite…

JAVA代码规范审查

JAVA代码规范审查 1. 添加必要的注释 所有的类都必须添加创建者和创建日期&#xff0c;以及简单的注释描述 方法内部的复杂业务逻辑或者算法&#xff0c;需要添加清楚的注释 一般情况下&#xff0c;注释描述类、方法、变量的作用 任何需要提醒的警告或TODO&#xff0c;也要注…

python基础语法1

基本语句 判断语句 1.if语句 if 语法格式: if 要判断的条件:条件成立时&#xff0c;要做的事情 -------------------------- 执行流程:判断条件为True就执行if的语句体.条件为False就执行if以外的代码. if 案例: age int(input(请输入年龄))print(-----开始-----) if ag…

测试遵循的原则

测试遵循的原则 软件测试是在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。软件测试的基本原则有助于测试人员进行高质量的测试&#xff0c;尽早尽可能多的发现缺陷&#xff0c;并负责跟…

【51单片机】:串口通信基础知识详解

学习目标&#xff1a; 串口通信的基础知识和设置详解。 学习内容&#xff1a;串口通信基础知识 并行通信&#xff1a;多条数据线将数据字节的各个位同时传送*缺点&#xff1a;1.电磁干扰 2.成本高 3.由于传输线较多&#xff0c;长距离传输成本高串口通信&#xff1a;将数据字节…

STL常用梳理——STACK、QUEUE

STL——适配器篇 1、ListSTL list 容器介绍list使用 2、适配器介绍3、Deque容器Stack、Queue适配器实现 1、List STL list 容器介绍 STL list 容器&#xff0c;又称双向链表容器&#xff0c;即该容器的底层是以双向链表的形式实现的。这意味着&#xff0c;list 容器中的元素可…

Lecture 11(Preparation):领域自适应 (Domain Adaptation)

Domain shift: Training and testing data have different distributions. Transfer learning&#xff1a;在A任务上学到的技能&#xff0c;可以被用在B任务上 Domain Adaptation的技术&#xff0c;可以看作是Transfer learning的一种 Domain Adaptation: 第一种情况&#xf…

栈和队列OJ题思路分享之括号匹配(C语言实现)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:刷题分享⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你刷更多C语言和数据结构的题!   &#x1f51d;&#x1f51d; 栈和队列刷题分享 1. 前言&…

【密码学复习】第七章 公钥加密体制

公钥加密模型 密钥生成过程&#xff1a;接收消息的端系统&#xff08;如图中的接收者Alice&#xff09;产生一对密钥(PKA ,SKA ), PKA 是公开钥&#xff08;用于加密&#xff09;&#xff0c; SKA 是秘密密钥&#xff08;用于解密&#xff09;. 加密过程&#xff1a;Bob想向…

从C出发 30 --- 指针与堆空间

数组 就是变量的有序集&#xff0c;因此只有可以动态的创建一个变量&#xff0c;就可以动态的创建多个变量了&#xff0c; 堆空间就是一片内存区域&#xff0c;用于动态创建内存变量的区域 void 类型是基础类型&#xff0c;不是基础数据类型&#xff0c;为什么&#xff1f;因为…

MySQL --- 图形化工具DDL表结构操作

一. 图形化工具 1. 介绍 前面学习了DDL中关于数据库操作的SQL语句&#xff0c;在编写这些SQL时&#xff0c;都是在命令行当中完成的。在命令行当中来敲这些SQL语句很不方便&#xff0c;主要的原因有以下 3 点&#xff1a; 没有任何代码提示。&#xff08;全靠记忆&#xff0…

行为型模式-备忘录模式

备忘录模式 概述 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;很多软件都提供了撤销&#xff08;Undo&#xff0…

【自动化测试】Appium环境设置

启动Appium需要的环境配置有些复杂&#xff0c;这里将需要的环境配置整理出来&#xff0c;附上博主亲测有效的教程&#xff0c;有些教程有一点点老了&#xff0c;博主也做了备注&#xff0c;并且有些老一点步骤&#xff0c;博主根据现有的情况做了新的图文教程&#xff0c;大家…

近源渗透学习

一、近源渗透 近源渗透测试是网络空间安全领域逐渐兴起的一种新的安全评估手段。 它是一种集常规网络攻防、物理接近、社会工程学及无线电通信攻防等能力于一体的高规格网络安全评估行动。网络安全评估小组在签订渗透测试授权协议后&#xff0c;通过乔装、社工等方式实地物理侵…

微服务体系

目录 结构服务注册中心EurekaZookeeperConsul上面三者的对比 Ribbon 负载均衡负载均衡OpenFeign 远程服务调用Hystrix服务熔断常见的设置 Hystrix 工作流程Hystrix-DashBoard 的使用 SpringCloud Gateway核心工作流程 SpringCloud Config 分布式配置中心bootstrap.yml配置文件 …

独立按键识别

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第四章 IO口编写 参考图电路编写程序&#xff0c;要求实现如下功能: 开始时LED均为熄灭状态&#xff0c;随后根据按键动作点亮相应LED(在按键释放后能继续保持该亮灯状态&#xff0c;直至新的按键压下时为止…

【实用工具】SpringBoot实现接口签名验证

需求场景 由于项目需要开发第三方接口给多个供应商&#xff0c;为保证Api接口的安全性&#xff0c;遂采用Api接口签名验证。 Api接口签名验证主要防御措施为以下几个&#xff1a; 请求发起时间得在限制范围内请求的用户是否真实存在是否存在重复请求请求参数是否被篡改 项目…

java8新特性——StreamAPI

1.集合处理数据的弊端 当我们在需要对集合中的元素进行操作的时候&#xff0c;除了必需的添加&#xff0c;删除&#xff0c;获取外&#xff0c;最典型的操作就是集合遍历。 package com.wxj.streamapi;import java.util.ArrayList; import java.util.Arrays; import java.uti…

E. Vasya and Good Sequences(异或)

Problem - E - Codeforces Vasya有一个由n个整数组成的序列a。 Vasya可以执行以下操作&#xff1a;从序列中选择一些数字&#xff0c;并交换其二进制表示中的任意一对位。例如&#xff0c;Vasya可以将数字6&#xff08;… 000000001102&#xff09;转换为3&#xff08;… 00000…

[数据库系统] 一、外键约束 (educoder)

1.任务&#xff1a;给表添加外码。 2.相关知识 需要掌握&#xff1a; (1)什么是外码&#xff1b; (2)怎么给表添加外码。 (1)什么是外码 外部关键字 外码是另一张表中的主码。**外码的主要作用是保持数据的一致性&#xff0c;完整性。 如图有两张表&#xff0c;classId 是T…