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 将这些指标转化为漂亮的图表。以下是快速设置:
- 将 Prometheus 配置添加到您的节点:
metrics:
provider: prometheus
- 设置一个 Prometheus 服务器来抓取这些指标
- 将 Grafana 连接到 Prometheus 并创建仪表板
现在您可以像观看最新大片一样观看每秒的交易。
结论:您现在是 Fabric 区块链专家
恭喜!您刚刚完成了 Hyperledger Fabric 的旋风之旅。从设置您的第一个网络到监控您的区块链宝贝,您现在已经具备创建企业级区块链应用程序的能力。
请记住,Hyperledger Fabric 就像区块链的瑞士军刀——它多功能、强大,起初有点复杂。但通过练习,您将很快像专业人士一样使用它。
所以去吧,负责任地使用区块链。请记住,在 Fabric 的世界中,每个区块都是通向更伟大事物的构建块。编码愉快,愿您的账本始终是分布式的!