天天看點

Hyperledger Fabric散記

1.各個環節使用msp的類型

configtx.yaml建立創始區塊使用的是組織的msp

    例: example.com/msp

orderer啟動 orderer.yaml使用的是orderer節點的msp

    例:example.com/orderers/orderer.example.com/msp/

peer啟動 core.yaml使用的是peer節點的msp

    例: org1.example.com/peers/peer0.org1.example.com/msp

peer指令建立應用通道,打包鍊碼,安裝鍊碼,審議鍊碼,送出鍊碼使用的是使用者admin的msp

    例: org1.example.com/users/[email protected]/msp

注意CORE_PEER_MSPCONFIGPATH就是設定peer或admin的msp變量,在啟動peer或已管理者身份執行peer指令時,務必注意不能用錯。一般peer node start時,不要指定此變量,會重寫core.yaml中的值

2.org1.example.com(組織)目錄下以下四個檔案内容相同

users/[email protected]/msp/signcerts/[email protected] 根本來源,以下四個全複制此出處users/[email protected]/msp/admincerts/[email protected]  [email protected](admin,client)的管理者證書

msp/admincerts/[email protected]        Org1組織的管理者證書

peers/peer0.org1.example.com/msp/admincerts/[email protected]  peer0節點的管理者證書 

3.approveformyorg鍊碼時報錯Error: timed out waiting for txid on all peers

主要是peer和orderer通信不暢導緻,作者犯錯是因為configtx.yaml中Organizations.OrdererOrg.OrdererEndpoints位址寫錯了

4.常見錯誤首先找的幾點

常見錯誤主要檢查configtx.yaml

1.政策中設定

2.組織名大小寫

3.組織名群組織ID用混

5.安裝并送出後的鍊碼容器無法啟動

以下情況是,已經安裝好運作完畢,但又重置了資料後報錯。删除鍊碼鏡像依然不起作用,但重新開機伺服器後,症狀消失。

Error: could not assemble transaction: proposal response was not successful, error code 500, msg error in simulation: failed to execute transaction 6754c2559d6d803c1787d8a8c158b29c9d0aff5c0520c4d07689c0211155dcfc: could not launch chaincode sacc_1:b33357c4012471d8bd96ba48fd2a12ada5fedfbfd6d623590295778500a0368d: error starting container: error starting container: API error (403): endpoint with name dev1-peer0.org1.example.com-sacc_1-b33357c4012471d8bd96ba48fd2a12ada5fedfbfd6d623590295778500a0368d already exists in network host 
           

6.CORE_PEER_TLS_ROOTCERT_FILE

以下路徑均可用,是TLS的根證書,且以下檔案中内容完全相同

${PWD}/../organizations/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/cacerts/0-0-0-0-7055.pem # Fabric CA server 簽發的msp時生成的

${PWD}/../organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt #組織的tls根證書

${PWD}/../organizations/peerOrganizations/org1.example.com/users/[email protected]/tls/ca.crt #cryptogen 工具生成的msp中包含的
           

7.如何檢視鍊碼中的log輸出

1. docker ps 找到對應鍊碼版本的容器ID

2. docker logs -f 容器ID

8.鍊碼PackageID

同樣鍊碼,鍊碼中任何變化(包括注釋,或多一個空格)都會形成不同的PackageID,但在不同的peer上有不同的PackageID值并不影響鍊碼審議和送出。

9.鍊碼更新版本

在鍊碼更新時,如果舊版本審議時有參數--init-required,則新版本的鍊碼審議時--init-required也必須要有,否則審議通不過

10.啟動多排序節點時orderer無法啟動

報錯

panic: field raftpb.Message.type has invalid type: got raftpb.MessageType, want pointer
           

更換go版本到1.14.6以上,并重新編譯生成peer order等指令

11.query查詢連碼,應是查本地peer的資料,不會向orderer請求(猜測)

peer chaincode query -o orderer.example.com:7050 --tls --cafile $ORDERER_TLSCA -C channel1 -n sacc  -c '{"Args":["query","a"]}'
#此處-o orderer.example.com:7050沒有任何意義,應直接寫
peer chaincode query --tls --cafile $ORDERER_TLSCA -C channel1 -n sacc  -c '{"Args":["query","a"]}'
           

12  報錯Error: error getting endorser client for channel: endorser client failed to connect to peer0.org1.example.com:7051: failed to create new connection: context deadline exceeded

在于使用Fabric ca client時,沒有加參數--csr.hosts peer0.org1.example.com

13 報錯Got error while attempting to receive blocks: received bad status FORBIDDEN from orderer channel=channel1 orderer-address=orderer.example.com:7050

需要在加密素材的所有msp中加上config.yaml

NodeOUs:
  Enable: true
  ClientOUIdentifier:
    Certificate: cacerts/ca.org1.example.com-cert.pem
    OrganizationalUnitIdentifier: client
  PeerOUIdentifier:
    Certificate: cacerts/ca.org1.example.com-cert.pem
    OrganizationalUnitIdentifier: peer
  AdminOUIdentifier:
    Certificate: cacerts/ca.org1.example.com-cert.pem
    OrganizationalUnitIdentifier: admin
  OrdererOUIdentifier:
    Certificate: cacerts/ca.org1.example.com-cert.pem
    OrganizationalUnitIdentifier: orderer
           

14 檢視證書資訊

openssl x509 -in cert.pem -noout -text
           

15 failed to create channel context: failed to get client context to create channel client: user not found

對于完全有Fabric CA生成的加密素材組成的MSP,在Go SDK時需要在配置檔案中加上users,其中的Admin及User1就是SDK中需要的user

organizations:
  # Org1:
  Org1MSP:
    mspid: Org1MSP
 
    # This org's MSP store (absolute path or relative to client.cryptoconfig)
    # cryptoPath:  peerOrganizations/org1.example.com/users/[email protected]/msp
    cryptoPath:  ../organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
 
    peers:
      - peer0.org1.example.com
    users:
      Admin:
        cert:
          path: ../organizations/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/cert.pem
      User1:
        cert:
          path: ../organizations/peerOrganizations/org1.example.com/users/user3/msp/signcerts/cert.pem


  OrdererOrg:
    # Membership Service Provider ID for this organization
    mspID: OrdererMSP

      # Needed to load users crypto keys and certs for this org (absolute path or relative to global crypto path, DEV mode)
      # cryptoPath: ordererOrganizations/example.com/users/{username}@example.com/msp
    cryptoPath: ../organizations/ordererOrganizations/example.com/users/admin1/msp/
    users:
      Admin:
        cert:
          path: ../organizations/ordererOrganizations/example.com/users/admin1/msp/signcerts/cert.pem
 
           

16.在更新鍊碼的第一步,打包鍊碼時label是否需要修改

最好修改,因為即便不修改也可以安裝成功,但會出現無法區分的情況如下

[email protected]:~/work/example/peer$ peer lifecycle chaincode queryinstalled
Installed chaincodes on peer:
Package ID: test3:b9efba86a3cdffd5677d562e626de525ae71b740e5b84e3cd66b119860b2cc6e, Label: test3
Package ID: test3:91b5357c7086eab253be5fbf775c4dace42603d5d568f7401f934b7c28266e25, Label: test3
           

繼續閱讀