Ubuntu stellt Hyperledger Fabric von Grund auf bereit und nutzt ein Testnetzwerk

Ubuntu 20.04, Fabric 2.0.0

HyperledgeHyperledger Fabric

Eine Open-Source-DLT-Plattform (Distributed Ledger Technology) für Unternehmen, die für den Einsatz in Unternehmensumgebungen entwickelt wurde. Hyperledger Fabric ist speziell als modulare Architektur konzipiert. Ganz gleich, ob es sich um steckbaren Konsens, steckbare Identitätsverwaltungsprotokolle wie LDAP oder OpenID Connect, Schlüsselverwaltungsprotokolle oder kryptografische Bibliotheken handelt, die Plattform ist im Kern darauf ausgelegt, den vielfältigen Geschäftsanforderungen von Unternehmen gerecht zu werden.

Fabric besteht aus den folgenden modularen Komponenten:

  • Ein steckbarer Bestelldienst stellt einen Konsens über die Transaktionsreihenfolge her und sendet dann Blöcke an Knoten.
  • Ein steckbarer Mitgliedschaftsdienstanbieter ist dafür verantwortlich, Entitäten im Netzwerk mit kryptografischen Identitäten zu verknüpfen.
  • Der optionale P2P-Klatschdienst sendet Blöcke über einen Bestelldienst an andere Knoten.
  • Smart Contracts („Chaincode“) laufen isoliert innerhalb einer Containerumgebung (wie Docker). Sie können in Standardprogrammiersprachen geschrieben werden, haben aber keinen direkten Zugriff auf den Ledger-Status;
  • Das Ledger kann so konfiguriert werden, dass es mehrere DBMS unterstützt.
  • Steckbare Bestätigungs- und Verifizierungsstrategien, die für jede Anwendung unabhängig konfiguriert werden können.

Vorbereitungsphase

  1. Git installieren
# 安装 git
sudo apt-get install -y git
# 配置 git
git config --global user.name master
git config --global user.email [email protected]
git config --list
  1. Installieren Sie cURL
sudo apt install curl -y
  1. Installieren Sie Docker und Docker-Compose
# 安装 docker
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
# 确保 docker daemon 是在运行着的
sudo systemctl start docker
将你的用户添加到 dockersudo usermod -a -G docker <username>
# docker 开机自启动
systemctl enable docker.service

# 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
  1. Installieren Sie los
# 下载 go 压缩包并解压
wget -c https://dl.google.com/go/go1.20.6.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
# 调整环境变量
sudo vim /etc/profile
# 将以下内容追加到文件末尾
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$GOPATH:$GOBIN:$GOROOT/bin:$PATH
# 环境变量生效
source /etc/profile
# 防止重启后失效,追加到根目录环境持久生效
cd ~
sudo vim .bashrc
# 追加到文件末尾
source /etc/profile
# 开启GO111MOUDLE和更改GOPROXY
go env -w GOPROXY="https://goproxy.cn"
go env -w GO111MODULE=on
  1. Installieren Sie SoftHSM
sudo apt install libsofthsm2
  1. Installieren Sie jq
sudo apt-get install jq

Installieren Sie Fabric-Beispiele, Docker-Images und Binärdateien

  1. Arbeitsverzeichnis erstellen
mkdir -p $HOME/go/src/github.com/
cd $HOME/go/src/github.com/
  1. Holen Sie sich Fabric-Beispiel-Quellcode
# 下载 fabric-samples
git clone -b release-2.2 https://github.com/hyperledger/fabric-samples.git
# 切换到 fabric 目录
cd fabric-samples
  1. Holen Sie sich die ausführbaren Binärdateien von fabric-sample und fabric-ca
# 下载fabric-samples 和 fabric-ca 可执行二进制文件
wget https://github.com/hyperledger/fabric/releases/download/v2.0.0/hyperledger-fabric-linux-amd64-2.0.0.tar.gz
wget https://github.com/hyperledger/fabric-ca/releases/download/v1.4.6/hyperledger-fabric-ca-linux-amd64-1.4.6.tar.gz
# 下载的 hyperledger-fabric-linux-amd64-2.0.0.tar 压缩包内有 bin 和 config 两个文件夹,hyperledger-fabric-ca-linux-amd64-1.4.6.tar 压缩包内有 bin 文件夹,将两个 bin 文件夹内的二进制文件汇总在一个 bin 文件夹内。 最后将 bin 和 config 文件夹复制到 fabric-samples 文件夹内

# 其中参数说明如下:
2.0.0:表示 Hyperledger Fabric 的版本号
1.4.6:表示Fabric CA的版本号
  1. Laden Sie das Docker-Image herunter
# 下载bootstrap.sh脚本并授予执行权限
wget https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh
sudo chmod +x bootstrap.sh


# 下载docker镜像
# 在上面下载了二进制可执行文件和fabric-samples,再次执行bootstrap.sh脚本,这里-b参数表示不下载二进制文件,-s参数表示不下载fabric-samples,只拉取docker镜像
./bootstrap.sh 2.0.0 1.4.6 -s -b
  1. Umgebungsvariablen hinzufügen
# 添加到 PATH 环境变量中,以便在不需要指定每个二进制文件的绝对路径的情况下获取命令
sudo vim ./bashrc
# 加到末尾
export PATH=<path to download location>/bin:$PATH
# 生效
source .bashrc
  1. Überprüfen Sie die Installationsergebnisse
orderer version

Fügen Sie hier eine Bildbeschreibung ein

Testen Sie das Netzwerk mit Fabric

  1. Testnetzwerk starten
cd fabric-samples/test-network
# 应该始终重新启动网络。 可以使用以下命令删除先前运行的工件,加密材料,容器,卷和链码镜像:
./network.sh down
# 如果您不删除旧的容器,镜像和卷,将看到报错

# 此命令创建一个由两个对等节点和一个排序节点组成的Fabric网络
./network.sh up

Fügen Sie hier eine Bildbeschreibung ein

# 测试网络的组成成分
docker ps -a

Fügen Sie hier eine Bildbeschreibung ein

  1. einen Kanal erstellen
# 可以使用network.sh脚本在Org1和Org2之间创建通道并加入他们的对等节点。 运行以下命令以创建一个默认名称为“ mychannel”的通道:
./network.sh createChannel
# 命令执行成功会出现
========= Channel successfully joined ===========

# 作为一个例子,以下命令将创建一个名为channel1的通道
./network.sh createChannel -c channel1
# 一步建立网络并创建频道,则可以使用up和createChannel模式一起
./network.sh up createChannel
  1. Starten Sie einen Chaincode auf dem Kanal
# 使用network.sh创建频道后,您可以使用以下命令在通道上启动链码:
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

Aufgetretenes Problem 1:

Fügen Sie hier eine Bildbeschreibung ein
Der mögliche Grund ist, dass die Stoffmusterversion falsch ist.

lösen:

# 查看分支
cd ../
git branch
# 命令执行成功发现是
* (HEAD detached at v2.0.0)
  main
  release-2.2
# 切换分支到2.2
git checkout release-2.2

Aufgetretenes Problem 2:
Fügen Sie hier eine Bildbeschreibung ein
Der Grund dafür ist, dass die MSP-Umgebungsvariable nicht für die Interaktion mit einem Knoten einer Organisation im Netzwerk konfiguriert ist

lösen:

export CORE_PEER_MSPCONFIGPATH=${
    
    PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp

export CORE_PEER_TLS_ROOTCERT_FILE=${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

export CORE_PEER_LOCALMSPID="Org1MSP"
# 再次执行通道启动链码操作
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
# 执行成功如下图:

Fügen Sie hier eine Bildbeschreibung ein

  1. Interagieren Sie mit dem Netzwerk
# 使用以下命令将这些二进制文件添加到您的CLI路径:
export PATH=${
    
    PWD}/../bin:$PATH

# 将fabric-samples代码库中的FABRIC_CFG_PATH设置为指向其中的core.yaml文件
export FABRIC_CFG_PATH=$PWD/../config/

# 设置环境变量,以允许您作为Org1操作peer CLI(和上边解决 msp 环境变量的操作类似)
# Environment variables for Org1

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${
    
    PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

# CORE_PEER_TLS_ROOTCERT_FILE和CORE_PEER_MSPCONFIGPATH环境变量
# 指向Org1的organizations文件夹中的的加密材料

# 运行以下命令用一些资产来初始化账本
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${
    
    PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'
# 命令执行成功会输出这些:
2023-07-12 12:43:30.209 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

# 可以用CLI 工具来查询账本。运行以下指令来获取添加到通道账本的资产列表
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
# 执行成功结果如下:
[{
    
    "ID":"asset1","color":"blue","size":5,"owner":"Tomoko","appraisedValue":300},{
    
    "ID":"asset2","color":"red","size":5,"owner":"Brad","appraisedValue":400},{
    
    "ID":"asset3","color":"green","size":10,"owner":"Jin Soo","appraisedValue":500},{
    
    "ID":"asset4","color":"yellow","size":10,"owner":"Max","appraisedValue":600},{
    
    "ID":"asset5","color":"black","size":15,"owner":"Adriana","appraisedValue":700},{
    
    "ID":"asset6","color":"white","size":15,"owner":"Michel","appraisedValue":800}]

# 当一个网络成员希望在账本上转一些或者改变一些资产,链码会被调用。
# 使用以下的指令来通过调用 asset-transfer (basic) 链码改变账本上的资产所有者:
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${
    
    PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${
    
    PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'
# 执行成功结果如下:
2023-07-12 13:47:30.379 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

# 因为 asset-transfer (basic) 链码的背书策略需要交易同时被 Org1 和 Org2 签名,
# 链码调用指令需要使用 --peerAddresses 标签来指向 peer0.org1.example.com 和 peer0.org2.example.com。
# 因为网络的 TLS 被开启,指令也需要用 --tlsRootCertFiles 标签指向每个 peer 节点的 TLS 证书。

# 调用链码之后,我们可以使用另一个查询来查看调用如何改变了区块链账本的资产。
# 因为我们已经查询了 Org1 的 peer,我们可以把这个查询链码的机会通过 Org2 的 peer 来运行。
# 设置以下的环境变量来操作 Org2:

# Environment variables for Org2
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${
    
    PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${
    
    PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

# 可以用以下命令查询运行在 peer0.org2.example.com asset-transfer (basic) 链码:
peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}'
# 执行结果如下,结果显示 "asset6" 转给了 Christopher:
{
    
    "ID":"asset6","color":"white","size":15,"owner":"Christopher","appraisedValue":800}
  1. Fahren Sie das Netzwerk herunter
# 使用完测试网络后,您可以使用以下命令关闭网络:
./network.sh down
# 该命令将停止并删除节点和链码容器,删除组织加密材料,并从Docker Registry移除链码镜像。 
# 该命令还删除之前运行的通道项目和docker卷。
# 如果您遇到任何问题,还允许您再次运行
./ network.sh up

Supongo que te gusta

Origin blog.csdn.net/Double_Horse/article/details/131653826
Recomendado
Clasificación