12/09/2019, 14:13

Hyperledger – Bắt đầu với Fabric hay Composer?

Người viết: Do Trung Kien Introduction Bạn mới bắt đầu với Hyperledger và bạn băn khoăn không biết nên bắt đầu với Hyperledger Fabric hay Hyperledger Composer ? Bài viết này sẽ cung cấp cho các bạn một cái nhìn tổng quan về các ưu nhược điểm của 2 cách tiếp cận. Hi vọng sẽ ...

Bắt đầu với Hyperledger Fabric hay Hyperledger Composer

Người viết: Do Trung Kien

Introduction

Bạn mới bắt đầu với Hyperledger và bạn băn khoăn không biết nên bắt đầu với Hyperledger Fabric hay Hyperledger Composer ? Bài viết này sẽ cung cấp cho các bạn một cái nhìn tổng quan về các ưu nhược điểm của 2 cách tiếp cận. Hi vọng sẽ giúp các bạn trong việc lựa chọn con đường phù hợp.

TL;DR

chọn Hyperledger Composer

Tổng quan Hyperledger

Cả Hyperledger Fabric và Hyperledger Composer đều là các project nằm trong hệ sinh thái Hyperledger được phát triển bởi tổ chức Linux Foundation.

  • Hyperledger Fabric là một pluggable blockchain, nó cung cấp các một set các peer node với những quyền truy cập khác nhau để thao tác với một sổ cái chung.
  • Hyperledger Composer là một set ở tầm cao hơn, sử dụng các API + tools để mô hình hóa, build, integrate và deploy blockchain network. Network này có thể được đóng gói và chạy bên trên Hyperledger Fabric.

Hay nói một cách đơn giản, Composer chạy trên Fabric. Composer cung cấp API bậc cao, và về bản chất, các API này vẫn gọi đến các API của Fabric.

Để có cái nhìn cụ thể hơn, ta sẽ đi vào so sánh việc code giữa Composer và Fabric thông qua một project sample của Hyperledger là Marble Network.

Recommend: sẽ tốt hơn nếu bạn có kiến thức cơ bản về blockchain, golang hay javascript.

Xem thêm Hyperledger là gì

Code với Fabric

Có thể bạn chưa biết: Trong Fabric cũng có khái niệm smart contract, gọi là chaincode

Các bạn có thể viết chaincode trong Fabric bằng Go hoặc bằng Nodejs, Java. Trong bài viết này ta sẽ dùng Go.

Một chaincode sẽ phải implement interface bao gồm 2 function: Init và Invoke.

Hàm Init sẽ được gọi mỗi khi chaincode được instantiate hoặc upgrade trong channel. Nó có dạng như sau:

Hàm Invoke sẽ được gọi mỗi khi ta muốn query dữ liệu hoặc tạo transaction trong Fabric.

Fabric không có phân biệt call (query) hay send (transaction) như trong Ethereum, mà tất cả đều là Invoke.

Ta sẽ phải tự check xem Invoke sẽ gọi hàm private nào thông qua tham số đưa vào function stub.GetFunctionAndParameters(), bằng if. Vâng, thủ công vô cùng.

Step 1: Data Model

Các blockchain nói chung đều lưu trữ dữ liệu tại một nơi gọi là sổ cái phân tán – distributed ledger.

Data model trong Go chaincode được định nghĩa dưới dạng Go struct, dưới dạng JSON data.

Step 2: Dispatching Incoming Calls

Mỗi khi client submit một transaction lên trên blockchain (trong Fabric ta sẽ dùng một node-sdk client), nó sẽ sử dụng một interface dạng RPC bất đồng bộ. RPC calls sẽ chuyển tiếp các transaction đó đến các hàm Go tương ứng để xử lý. Như trên ta cũng có nói, việc này đơn giản là xử lý một loạt các if trong Invoke:

Sau đó trong mỗi function, Go code sẽ gọi methods trong shim để đọc hay ghi dữ liệu lên sổ cái chung.

shim chính là phần đứng giữa chaincode và sổ cái, nó sẽ làm các nhiệm vụ CRUD state, emit các events..

Ví dụ:

Ta sẽ đi sâu hơn vào detail của một function.

Step3: Validate arguments

Mỗi function chỉ nhận vào một mảng bao gồm tên function và các đối số. Vì thế việc thực hiện validate số lượng các đối số luôn là việc cần làm đầu tiên trong function.

Step4: Lookup Asset

Chaincode có thể tìm kiếm các asset trong mạng bằng id, và return một error nếu nó không tồn tại.

Step5: Deserialize data

Nếu asset mà bạn tìm kiếm ở bước 4 tồn tại, nó sẽ trả về dưới dạng raw data, tức bytes, ta sẽ phải tiến hành deserialize dữ liệu đó ra và convert nó trở lại dạng Go struct.

Step 6: Update data in memory

Chaincode sẽ update state của struct thông qua dữ liệu params truyền vào

Step 7: Serialize data and persist

Cuối cùng, để update lại dữ liệu sổ cái (world-state data), ta sẽ phải serialize dữ liệu lại dưới dạng JSON bytes:

Step 8: Content based query

Để query data trong ledger, ta sẽ có thể lấy trực tiếp bằng key-value, hoặc để tiện lợi hơn thì ta sẽ sử dụng JSON request.

Step 9: Emitting events

Mỗi sự kiện xảy ra trên blockchain đều có thể bắn ra event được. Fabric đặt dữ liệu về event của nó ở trong Event Hub, theo đó phía client có thể subscribe và lắng nghe những event mà mình mong muốn.