Hyperledger Fabric 就像区块链平台中的詹姆斯·邦德——流畅、精致,并且拥有扩展的许可。它是由 Linux 基金会托管的开源项目,旨在创建许可的区块链网络。可以把它想象成一个有门卫的区块链——不是每个人都能进来,但那些能进来的人会玩得很开心。

让 Fabric 脱颖而出的关键特性:

  • 模块化架构(像区块链自助餐一样混合搭配组件)
  • 可插拔的共识机制(因为一种尺寸不适合所有人)
  • 隐私和保密性(在频道中发生的事情,留在频道中)
  • 通用编程语言的智能合约(无需学习 Solidity!)

构建模块:Hyperledger Fabric 的架构

让我们来分解一下 Fabric 架构的关键组件。这就像一个高科技的乐高套装,但不是建造宇宙飞船,而是创建一个安全、可扩展的区块链网络。

节点:主力军

节点是网络的支柱。它们维护账本,运行链码(Fabric 对智能合约的高级称呼),并验证交易。可以把它们想象成勤奋的办公室职员,确保一切顺利运行。

频道:水冷却器

频道是特定网络成员可以私下交易的私人“子网络”。这就像为不同部门设置的独立聊天室——市场部不需要知道 IT 部门在做什么,对吧?

排序者:交通控制员

排序者负责交易的顺序一致性和创建区块。它们就像区块链世界的空中交通管制员,确保一切按顺序着陆。

组织:部门

组织代表参与网络的不同实体。它们可以是不同的公司、部门,甚至是那个坚持自己是一个部门的会计人员。

设置您的 Fabric 游乐场

现在我们已经掌握了理论,让我们动手实践。设置 Hyperledger Fabric 就像组装宜家家具——一开始看起来很复杂,但有了合适的工具和一点耐心,您会在不知不觉中拥有一个功能齐全的网络。

步骤 1:准备好您的工具

首先,您需要安装一些先决条件。这就像为露营旅行打包,但不是驱虫剂和棉花糖,而是需要:

  • Docker(因为容器是新的黑色)
  • Docker Compose(用于编排您的容器交响乐)
  • Go(Fabric 的首选语言)
  • Node.js 和 npm(当您想要使用 JavaScript 时)
  • Python(因为为什么不再添加一种语言呢?)

步骤 2:克隆 Fabric 示例

Fabric 提供了一组示例网络来帮助您入门。这就像在视频游戏中获得一个入门包,但用于区块链:


git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples

步骤 3:下载 Fabric 二进制文件和 Docker 镜像

运行下载所需所有内容的神奇脚本:


./scripts/bootstrap.sh

这个脚本就像您的个人区块链管家——它为您获取所有必要的组件和 Docker 镜像。

步骤 4:启动您的第一个网络

现在,让我们启动“first-network”示例:


cd first-network
./byfn.sh generate
./byfn.sh up

如果一切顺利,您应该会看到一堆容器活跃起来,就像一个微型区块链城市。

引导您的内在区块链:创建和管理频道

Hyperledger Fabric 中的频道就像俱乐部中的 VIP 房间——独家、私密,所有重要交易都在这里进行。让我们创建一个:


peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

这个命令就像对门卫耳语一个秘密密码——它创建了一个名为“mychannel”的新频道。

加入派对

现在我们已经创建了我们的 VIP 房间(频道),让我们邀请一些节点:


peer channel join -b mychannel.block

这个命令本质上是向您的节点发送派对邀请。

智能合约:操作的大脑

在 Hyperledger Fabric 中,智能合约被称为链码。这就像把智能手机称为“便携计算设备”——同样的东西,更高级的名称。

编写您的第一个链码

让我们用 Go 编写一个简单的链码。这就像为您的区块链编写一个待办事项列表:


package main

import (
    "fmt"
    "github.com/hyperledger/fabric-contract-api-go/contractapi"
)

type SmartContract struct {
    contractapi.Contract
}

func (s *SmartContract) Set(ctx contractapi.TransactionContextInterface, key string, value string) error {
    return ctx.GetStub().PutState(key, []byte(value))
}

func (s *SmartContract) Get(ctx contractapi.TransactionContextInterface, key string) (string, error) {
    value, err := ctx.GetStub().GetState(key)
    if err != nil {
        return "", fmt.Errorf("failed to read from world state: %v", err)
    }
    if value == nil {
        return "", fmt.Errorf("the asset %s does not exist", key)
    }
    return string(value), nil
}

func main() {
    chaincode, err := contractapi.NewChaincode(&SmartContract{})
    if err != nil {
        fmt.Printf("Error creating chaincode: %s", err.Error())
        return
    }
    if err := chaincode.Start(); err != nil {
        fmt.Printf("Error starting chaincode: %s", err.Error())
    }
}

这个链码就像一个具有区块链超能力的键值存储。它可以设置和获取值,当您处理不可变账本时,这比听起来更令人兴奋。

部署您的链码

部署链码就像将您的应用发布到应用商店,但有更多的共识和更少的等待批准:


peer lifecycle chaincode package mycc.tar.gz --path /path/to/your/chaincode --lang golang --label mycc_1
peer lifecycle chaincode install mycc.tar.gz

这些命令打包并安装您的链码。这就像为您的代码包上礼物,然后将其放在区块链树下。

交易业务:与您的区块链互动

现在我们已经部署了链码,让我们让它做点事情:


peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /path/to/orderer/tls/cert.pem -C mychannel -n mycc -c '{"Args":["Set","hello","world"]}'

这个命令调用我们的链码,为键“hello”设置值“world”。这就像发送一个非常重要的、加密安全的“Hello, World!”消息。

要读取回值:


peer chaincode query -C mychannel -n mycc -c '{"Args":["Get","hello"]}'

如果一切顺利,您应该会看到“world”被打印出来。恭喜,您刚刚完成了区块链操作的完整循环!

API 和 SDK:连接区块链与外部世界

Hyperledger Fabric 提供了 Node.js 和 Java 的 SDK,允许您构建与区块链网络交互的应用程序。这就像为您的区块链后端构建一个高级 UI。

以下是使用 Node.js SDK 的快速示例:


const { Gateway, Wallets } = require('fabric-network');
const path = require('path');
const fs = require('fs');

async function main() {
    try {
        // 加载网络配置
        const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json');
        const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8'));

        // 创建一个新的基于文件系统的钱包来管理身份。
        const walletPath = path.join(process.cwd(), 'wallet');
        const wallet = await Wallets.newFileSystemWallet(walletPath);

        // 检查我们是否已经注册了用户。
        const identity = await wallet.get('user1');
        if (!identity) {
            console.log('钱包中不存在用户“user1”的身份');
            console.log('在重试之前运行 registerUser.js 应用程序');
            return;
        }

        // 创建一个新的网关以连接到我们的节点。
        const gateway = new Gateway();
        await gateway.connect(ccp, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: true } });

        // 获取我们的合约部署到的网络(频道)。
        const network = await gateway.getNetwork('mychannel');

        // 从网络中获取合约。
        const contract = network.getContract('mycc');

        // 提交指定的交易。
        await contract.submitTransaction('Set', 'hello', 'world');
        console.log('交易已提交');

        // 从网关断开连接。
        await gateway.disconnect();

    } catch (error) {
        console.error(`提交交易失败:${error}`);
        process.exit(1);
    }
}

main();

这个脚本就像您的区块链的瑞士军刀——它连接到网络,提交交易,然后礼貌地断开连接。

保护您的区块链堡垒:访问控制和安全性

Hyperledger Fabric 中的安全性就像洋葱——它有层次。让我们剥开几层:

成员服务提供者(MSP)

MSP 就像您的区块链网络的门卫。它们管理身份并设置谁可以做什么的规则。以下是典型 MSP 配置的片段:


Organizations:
  - &OrdererOrg
      Name: OrdererOrg
      ID: OrdererMSP
      MSPDir: crypto-config/ordererOrganizations/example.com/msp
  - &Org1
      Name: Org1MSP
      ID: Org1MSP
      MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
      AnchorPeers:
        - Host: peer0.org1.example.com
          Port: 7051

这个配置就像您的区块链派对的客人名单——它定义了谁被邀请以及他们扮演的角色。

访问控制列表(ACL)

Fabric 中的 ACL 就像商店中的“仅限员工”标志——它们控制谁可以访问哪些资源。以下是一个 ACL 策略示例:


ACLs: &ACLsDefault
    lscc/GetDeploymentSpec: /Channel/Application/Readers
    lscc/GetChaincodeData: /Channel/Application/Readers
    lscc/GetInstantiatedChaincodes: /Channel/Application/Readers
    qscc/GetChainInfo: /Channel/Application/Readers
    qscc/GetBlockByNumber: /Channel/Application/Readers
    qscc/GetBlockByHash: /Channel/Application/Readers
    qscc/GetTransactionByID: /Channel/Application/Readers
    qscc/GetBlockByTxID: /Channel/Application/Readers
    cscc/GetConfigBlock: /Channel/Application/Readers
    peer/Propose: /Channel/Application/Writers
    peer/ChaincodeToChaincode: /Channel/Application/Readers
    event/Block: /Channel/Application/Readers
    event/FilteredBlock: /Channel/Application/Readers

这个 ACL 配置就像在您的区块链间谍机构中设置不同的安全许可级别。

监控您的区块链:因为观看区块很有趣

监控 Hyperledger Fabric 网络就像是区块链救生员——您需要密切关注一切,以确保其顺利运行。

Prometheus 和 Grafana:您的区块链仪表板

Prometheus 非常适合收集指标,而 Grafana 将这些指标转化为漂亮的图表。以下是快速设置:

  1. 将 Prometheus 配置添加到您的节点:

metrics:
    provider: prometheus
  1. 设置一个 Prometheus 服务器来抓取这些指标
  2. 将 Grafana 连接到 Prometheus 并创建仪表板

现在您可以像观看最新大片一样观看每秒的交易。

结论:您现在是 Fabric 区块链专家

恭喜!您刚刚完成了 Hyperledger Fabric 的旋风之旅。从设置您的第一个网络到监控您的区块链宝贝,您现在已经具备创建企业级区块链应用程序的能力。

请记住,Hyperledger Fabric 就像区块链的瑞士军刀——它多功能、强大,起初有点复杂。但通过练习,您将很快像专业人士一样使用它。

所以去吧,负责任地使用区块链。请记住,在 Fabric 的世界中,每个区块都是通向更伟大事物的构建块。编码愉快,愿您的账本始终是分布式的!