Ví dụ truy xuất nguồn gốc thủy sản trên nền tảng Hyperledger Fabric sử dụng Hyperledger Composer

Với xu hướng công nghệ 4.0 hiện nay thì Blockchain là một trong những công nghệ được sử dụng hàng đầu. Ở bài viết trước thì mình có giới thiệu tại sao công nghệ này lại được chọn mà không phải là Ethereum.

Truy xuất nguồn gốc là một công việc đòi hỏi sự minh bạch khá cao do đó blockchain là sự lựa chọn hết sức hợp lý. Truy xuất nguồn gốc sản phẩm giúp cho người tiêu dùng yên tâm hơn về sản phẩm mình sẽ sử dụng cũng như dễ quản lý.

Trong ví dụ này mình sẽ tạo một trường hợp sử dụng nhỏ đó là truy xuất giống trước khi đem giống đi nuôi thành nguyên liệu. Sau khi thêm 1 sản phẩm giống thì cần một người để xác thực nó có hợp lệ hay không. OK dài dòng vậy thôi bắt đầu nào!






Điều kiện tiên quyết

Để cài đặt Hyperledger Composer thì cần có những điều kiện sau:
· Operating Systems: Ubuntu Linux 14.04 / 16.04 LTS (both 64-bit), or Mac OS 10.12
· Docker Engine: Version 17.03 or higher
· Docker-Compose: Version 1.8 or higher
· Node: 8.9 or higher (note version 9 and higher is not supported)
· npm: v5.x
· git: 2.9.x or higher
· Python: 2.7.x
· A code editor of your choice, we recommend VSCode.
Lưu ý khi cài npm và các lệnh script thì đừng sử dụng sudo hoặc su chỉ nên sử dụng trong khi đang chạy.

Download script về bằng lệnh:
curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh
chmod u+x prereqs-ubuntu.sh

Tiếp theo chạy script dưới đây nó sẽ tự động tải về và cài các gói cần thiết:
./prereqs-ubuntu.sh

Lưu ý nếu có lỗi xảy ra thì chịu khó đọc và tìm nguyên nhân bằng cách tìm lỗi đó trên google.

Cài đặt môi trường phát triển


Bước 1: Cài đặt công cụ CLIs

- Cài đặt công cụ CLI 
npm install -g composer-cli

- Cài đặt REST-SERVER
npm install -g composer-rest-server
- Cài đặt công cụ sinh ra tài sản
npm install -g generator-hyperledger-composer

- Cài đặt công cụ sinh ra code
npm install -g yo

Bước 2: Cài đặt playground (tùy chọn) hoặc vào trang https://composer-playground.mybluemix.net/


npm install -g composer-playground

Chạy giao diện playground bằng lệnh:
$composer-playground

Là một công cụ để giúp chỉnh sửa và test mạng

Bước 3: Cài đặt IDE để lập trình

- Tải VSCode tại trang chủ https://code.visualstudio.com/download
- Thêm Extensions Hyperledger Composer để hỗ trợ việc hiển thị trong Marketplace.

Bước 4: Cài đặt mạng Hyperledger Fabric

- Tạo thư mục để chạy mạng khi làm việc và tải gói về cài đặt
mkdir ~/fabric-dev-servers && cd ~/fabric-dev-servers

curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz

- Giải nén
tar -xvf fabric-dev-servers.tar.gz

- Tiếp tục tải phiên bản runtime
cd ~/fabric-dev-servers
export FABRIC_VERSION=hlfv12
./downloadFabric.sh


Sau khi hoàn thành các bước trên thì chúng ta có thể khởi động mạng theo các bước dưới đây:
    cd ~/fabric-dev-servers
    export FABRIC_VERSION=hlfv12
    ./startFabric.sh
    ./createPeerAdminCard.sh


Lưu ý khi chạy ./startFabric.sh sẽ tạo peer mới và CouchDB mới, khi đó dữ liệu cũ sẽ bị xóa cho nên để lưu trạng thái phiên làm việc CouchDB bằng cách vào 
<thư mục chứa fabric-dev-server>/fabric-script/hlfv1/compose/ và gõ 
docker-compose stop để tắt và start để chạy mỗi phiên làm việc.




Để hủy thiết lập trước đó trong trường hợp muốn nâng cấp phiên bản:

    docker kill $(docker ps -q)
    docker rm $(docker ps -aq)
    docker rmi $(docker images dev-* -q)

Bắt đầu cài đặt ứng dụng mẫu

Bước 1: Tạo kiến trúc mạng

- Tạo khung mạng bằng yeoman. Câu lệnh này sẽ đề nghị thông tin như là tên mạng, mô tả ...
yo hyperledger-composer:businessnetwork


Business network name: quanly-thuysan     --> Tên thư mục và tên mạng
Description: Ung dung quan ly thuy san
Author name: Nguyen Quang Nam
Author email: nam@gmail.com
License: Apache-2.0
Namespace: org.hlfc.qlts      --> tên gì cũng được nhưng phải nhớ để gọi
Do you want to generate an empty template network? Yes





Sau đó thì cd quanly-thuysan sẽ có các file và folder như sau:
- models 
- package.json
- permissions.acl 
- README.md

Bước 2: Khai báo các file trong kiến trúc mạng

Vào folder models sửa file org.hlfc.qlts.cto

namespace org.hlfc.qlts

participant nguoichungthuc identified by id {
  o String id
  o String name
}

asset NguyenLieu identified by idnguyenlieu {
  o String idnguyenlieu
  o String tennguyenlieu
  o String ghichu
}

asset QuocGia identified by idQG {
  o String idQG
  o String tenQG
}

asset Tinh identified by idTinh {
  o String idTinh
  o String tenTinh
}

asset Huyen identified by idHuyen {
  o String idHuyen
  o String tenHuyen
}

asset Ao identified by idAo {
  o String idAo
  o String tenAo
}

asset TrangTrai identified by idTrangTrai {
  o String idTrangTrai
  o String tenTrangTrai
}

enum status {
  o chua_xacthuc
  o da_xacthuc
}
asset SanPham identified by idSP{
  o String idSP
  --> QuocGia qg
  --> Tinh tinh
  --> Huyen huyen
  --> NguyenLieu nguyenlieu
  --> Ao ao
  --> TrangTrai trangtrai
  o status status
}

transaction xacThucSanPham {
  --> SanPham sanpham
  o status status
}

Sau đó tạo file ChungThuc.js trong thư mục lib cần tạo. File trong thư mục này là tổng hợp chaincode hay smartcontract để xử lý logic của blockchain. Có thể có nhiều file để thực hiện nhiều chức năng khác nhau. Trong ví dụ này chỉ đơn giản là sửa trạng thái khi người chứng thực đã duyệt. 

/**
 * Sample transaction processor function.
 * @param {org.hlfc.qlts.xacThucSanPham} tx The sample transaction instance.
 * @transaction
 */
async function xacThucSanPham(tx) {
    // Get the asset registry for the asset.
    const assetRegistry = await getAssetRegistry('org.example.basic.SanPham');
   tx.sanpham.status = tx.status;
    // Update the asset in the asset registry.
    await assetRegistry.update(tx.sanpham); 
}

Bước 3: Khai báo lưu trữ mạng thành file bna dùng để test và deploy

- Vào thư mục mạng đã khai báo ở trên
- Thực hiện lệnh sau sẽ tạo ra file bna trong thư mục đó:
composer archive create -t dir -n .

 

Bước 4: Deploy mạng

Vào thư mục đã khai báo ở trên
- Cài đặt mạng đã khai báo vào mạng fabric
composer network install --card PeerAdmin@hlfv1 --archiveFile quanly-thuysan@0.0.1.bna

- Chạy mạng đã cài đặt
composer network start --networkName quanly-thuysan --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card







- Thêm admin card 
composer card import --file networkadmin.card

- Kiểm tra mạng
composer network ping --card admin@quanly-thuysan





Bước 5: Chạy REST API server

composer-rest-server
Lệnh trên có tác dụng tùy chọn chức năng cho server hoặc bạn có thể sử dụng lênh dưới để sử dụng nhanh chóng
composer-rest-server -c admin@quanly-thuysan -n never -u true -w true







Tùy chọn khi lập trình, sau khi sửa version trong file package.json thì chúng ta cần cập nhật lại mạng và thực hiện từ bước tạo bna


Nâng cấp phiên bản
composer network upgrade -c PeerAdmin@hlfv1 -n quanly-thuysan -V 0.0.2


Sau khi đã chạy REST-server thì chúng ta có thể sử dụng nó làm backend và tạo một app frontend để giao tiếp với nó. Ở bài viết này mình chỉ dừng ở đây thôi. Cám ơn cám bạn đã theo dõi!