04/11/2019, 20:50

Bài 5: Các bước cơ bản để dựng 1 Hyperledger Fabric Network

Điều khó khăn nhất với mình khi tìm hiểu về Hyperledger Fabric là nó có quá nhiều khái niệm và các tutorial của nó không được liền mạch với nhau. Sau 1 thời gian "chày cối" thì mình cũng bắt đầu ngờ ngợ ra, nên hôm nay mình viết bài này đề chia sẻ cho các bạn các bước để dựng một ...

Điều khó khăn nhất với mình khi tìm hiểu về Hyperledger Fabric là nó có quá nhiều khái niệm và các tutorial của nó không được liền mạch với nhau. Sau 1 thời gian "chày cối" thì mình cũng bắt đầu ngờ ngợ ra, nên hôm nay mình viết bài này đề chia sẻ cho các bạn các bước để dựng một Hyperledger Fabric Network, giúp các bạn tiết kiệm được thời gian trong việc tìm hiểu về cái thứ của nợ này.

Đàu tiên bạn hãy clone project fabric-samples này về. Mình sẽ dựa vào đây để hướng dẫn.

1. Generate cấu hình của network

Bước này sử dụng tool cryptogen trong thư mục bin để từ nội dung của file crypto-config.yaml sinh ra cấu hình ban đầu của network. Kết quả của bước này là thư mục crypto-config được sinh ra.

Lệnh :

./bin/cryptogen generate --config=./crypto-config.yaml

Nội dung của file crypto-config.yaml:

OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    EnableNodeOUs: true
    Template:
      Count: 1
    Users:
      Count: 1

  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: true
    Template:
      Count: 1
    Users:
      Count: 1

2. Generate genesis block cho orderer

Bước này sử dụng tool configtxgen trong thư mục bin để từ nội dung của file configtx.yaml sinh ra file genesis.block trong thư mục channel-artifacts.

Lệnh:

./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

Nội dung của file configtx.yaml bạn có thể tham khảo trong fabric-samples:

3. Generate channel configuration

Bước này cũng sử dụng tool configtxgen trong thư mục bin để từ nội dung của file configtx.yaml sinh ra file channel.tx trong thư mục channel-artifacts.

Lệnh :

./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel

4. Generate anchor peer cho các org

Bước này cũng sử dụng tool configtxgen trong thư mục bin để từ nội dung của file configtx.yaml sinh ra các file tương ứng trong thư mục channel-artifacts.

Lệnh:

./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP

./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP

5. Up các container

Như chúng ta đã biết về cấu trúc của một network trong Hyperledger Fabric. Tùy vào yêu cầu của project mà cấu trúc có thể khác đi một tí, nhưng nhìn chung, một network sẽ gồm: Orderer, Các peer của các Org, CA của mỗi Org, CLI. Bạn nên có kiến thức về docker để có thể hiểu phần này và nên chú ý volumes đủ các thư mục cần thiết vào các container.

Tất cả các container này đều được định nghĩ trong file docker-compose.yaml, bạn có thể tham tham khảo trong fabric-samples.

Lệnh sẽ có dạng như sau

docker-compose -f docker-compose.yaml up

Sau đó chúng ta truy cập vào container CLI để thực hiện nốt các bước còn lại:

docker exec -it cli

6. Tạo channel

Trong container CLI mình sẽ thực hiện lệnh tạo channel. Lệnh này sẽ lấy file channel.tx được sinh ra ở bước 3 để tạo channel.

Lệnh:

peer channel create -o orderer.certificate.com:7050 -c mychannel -f ./channel-artifacts/channel.tx

7. Join các peer của các Org vào Channel

Tùy vào bạn đang join peer của tổ chức nào mà các biến môi trường trong CLI sẽ thay đổi:

CORE_PEER_LOCALMSPID=
CORE_PEER_TLS_ROOTCERT_FILE=
CORE_PEER_MSPCONFIGPATH=
CORE_PEER_ADDRESS=

Sau khi thay đổi biến môi trường tương ứng với 1 Org, dùng lệnh sau để join peer của Org đó vào channel:

peer channel join -b mychannel.block

8. Update Anchor Peer cho các Org

Bước này cũng giống như bước trên, bạn phải đặt lại biến môi trường trong CLI để chúng tương ứng với Anchor Peer của Org bạn sắp update.

Lệnh:

peer channel update -o orderer.certificate.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx
peer channel update -o orderer.certificate.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx

9. Install chaincode lên các peer

Sau khi bạn code xong chaincode và ở bước 5 bạn đã volumes chính xác đường dẫn đến thư mục chứa chaincode thì bước này mới có thể thực hiện.

Bước này cũng giống như 2 bước trên, bạn muốn install chaincode lên peer của tổ chức nào thì phải đặt lại biến môi trường trong CLI.

Lệnh:

peer chaincode install -n $CHAINCODE_NAME -v 1.0 -p ${CC_SRC_PATH}

10. Instantiate Chaincode

Sau khi chaincode được install, nó cần phải được instantiate thì mới có thể hoạt động được trên channel. Bước này chỉ cần thực hiện trên một peer, và nó sẽ bao gồm cả endorsement policy ( OR hoặc AND )

Lệnh:

peer chaincode instantiate -o orderer.certificate.com:7050 -C $CHANNEL_NAME -n $CHAINCODE_NAME -v 1.0 -c '{"Args":[]}' -P "OR ('Org1.member','Org2.member')"

Tổng kết

Sau khi thực hiện đủ 10 bước trên là ta sẽ được 1 network. Nhưng đấy là mình thực hiện bằng này, khi mà các bước có vẻ ổn thì người ta sẽ viết script để thực hiện tự động 10 bước trên, đó là nội dung của các file có đuôi ".sh", khi gặp 1 project Hyperledger Fabric nào đấy, bạn hãy chịu khó đọc code trong các file .sh sẽ thấy đủ 10 bước trên.

Network sẽ thay thế cho CSDL truyền thống, các bước tiếp theo để có thể complete 1 app Hyperledger Fabric là bạn sẽ code các file enrollAdmin.js để enroll identity cho admin, từ identity của admin mình có thể registerUser.js các identity cho các user khác, sau đó sẽ là các file invoke.js và query.js để gọi đến các function trong chaincode, và cuối cùng code 1 web app để gọi đến các function trong invoke.js và query.js.

0