引言
区块链技术作为一种革命性的分布式账本技术,正在逐渐改变着金融、供应链、物联网等多个领域。Hyperledger Fabric 作为 Hyperledger 项目下的一个开源区块链框架,因其灵活性和可扩展性而受到广泛关注。本文将手把手教你如何从零开始安装 Fabric,并通过一个简单的示例让你体验区块链的实战应用。
第一部分:准备工作
1. 环境配置
在开始之前,请确保你的计算机满足以下要求:
- 操作系统:Linux、macOS 或 Windows
- Go 语言环境:安装 Go 1.12 或更高版本
- Docker:安装 Docker CE 18.09 或更高版本
2. 安装 Go
以 Ubuntu 为例,通过以下命令安装 Go:
sudo apt update
sudo apt install golang-go
3. 安装 Docker
以 Ubuntu 为例,通过以下命令安装 Docker:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
4. 安装 Docker Compose
通过以下命令安装 Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*?(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
第二部分:安装 Fabric
1. 下载 Fabric
从 Hyperledger Fabric GitHub 仓库 下载最新版本的 Fabric。
2. 配置环境变量
在 .bashrc 或 .bash_profile 文件中添加以下环境变量:
export FABRIC_CFG_PATH=$HOME/fabric-network
3. 启动 Fabric 网络
在 fabric-network 目录下,创建一个名为 configtx.yaml 的配置文件,内容如下:
Organizations:
- &OrdererOrg1
Name: OrdererOrg1
Domain: orderer.org
Type: orderer
Orderer:
Addresses:
- orderer0.orderer.org:7050
Policies:
Readers:
Type: signature
Rule: "OR ('Admin', 'Peer')"
Writers:
Type: signature
Rule: "OR ('Admin', 'Peer')"
Admins:
Type: signature
Rule: "OR ('Admin')"
Leaders:
Type: signature
Rule: "AND ('Admin', 'Peer')"
FabricAdmins:
Type: signature
Rule: "OR ('Admin')"
BlockValidation:
Type: signature
Rule: "OR ('Admin', 'Peer')"
- &Org1
Name: Org1
Domain: org1
Type: organization
EnablePeerTLS: true
Policies:
Readers:
Type: signature
Rule: "OR ('Admin', 'Peer')"
Writers:
Type: signature
Rule: "OR ('Admin', 'Peer')"
Admins:
Type: signature
Rule: "OR ('Admin')"
Leaders:
Type: signature
Rule: "AND ('Admin', 'Peer')"
FabricAdmins:
Type: signature
Rule: "OR ('Admin')"
BlockValidation:
Type: signature
Rule: "OR ('Admin', 'Peer')"
AnchorPeers:
- Host: peer0.org1
Port: 7051
ChannelTemplates:
- Template:
Name: mychannel
Type: public
Organizations:
- *OrdererOrg1
- *Org1
Orderer:
Organizations:
- *OrdererOrg1
4. 生成配置文件
在 fabric-network 目录下,执行以下命令生成配置文件:
cryptogen generate --config crypto-config.yaml
5. 创建通道
在 fabric-network 目录下,创建一个名为 channel-artifacts 的目录,并执行以下命令创建通道:
configtxgen -profile TwoOrgsOrdererOnly -outputCreateChannelTx mychannel.tx -channelID mychannel
6. 加入通道
将所有节点加入通道:
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1 /bin/bash -c "peer channel join -b mychannel.block"
第三部分:实战应用
1. 编写智能合约
在 fabric-network 目录下,创建一个名为 chaincode 的目录,并编写一个简单的智能合约。以下是一个简单的示例:
package main
import (
"fmt"
"strconv"
"github.com/hyperledger/fabric-contract-api-go/contractapi"
)
type SimpleChaincode struct {
contractapi.Contract
}
func (s *SimpleChaincode) Init(ctx contractapi.TransactionContextInterface) error {
return nil
}
func (s *SimpleChaincode) Invoke(ctx contractapi.TransactionContextInterface) error {
// TODO: 实现智能合约的业务逻辑
return nil
}
func (s *SimpleChaincode) Query(ctx contractapi.TransactionContextInterface) ([]byte, error) {
// TODO: 实现智能合约的查询逻辑
return nil
}
2. 部署智能合约
将智能合约打包成链码,并部署到 Fabric 网络:
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1 /bin/bash -c "peer chaincode package -n mycc -v 1.0 -s /opt/gopath/src/chaincode/mycc/go -p ./chaincode"
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1 /bin/bash -c "peer chaincode install -n mycc -v 1.0 -p /opt/gopath/src/chaincode/mycc/go"
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1 /bin/bash -c "peer chaincode instantiate -o orderer0.orderer.org:7050 -C mychannel -n mycc -v 1.0 -c '{"Args":["init"]} -P \"OR ('Admin', 'Peer')\""
3. 调用智能合约
在客户端调用智能合约:
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1 /bin/bash -c "peer chaincode invoke -o orderer0.orderer.org:7050 -C mychannel -n mycc -c '{"Args":["invoke", "a", "b", "10"]} -P \"OR ('Admin', 'Peer')\""
结语
通过本文的介绍,相信你已经掌握了如何安装 Fabric 并进行实战应用。区块链技术具有巨大的潜力,希望你能将所学知识应用到实际项目中,为区块链技术的发展贡献力量。
