Giới thiệu Hyperledger Besu: Thành viên non trẻ nhất trong họ hàng nhà Hyperledger

1. Giới thiệu

Hyperledger Besu là một Ethereum client (mã nguồn mở) được viết bằng Java. Nó có thể chạy tốt trên mạng Ethereum MainNet và các mạng thử nghiệm như Rinkeby, Rospten và Görli.

Vậy Ethereum Client cụ thể là gì ?

Ethereum Client là phần mềm implements các giao thức của mạng Ethereum hay là phần mềm chạy máy ảo EVM. Nếu bạn muốn tham gia trực tiếp vào mạng Ethereum mà không thông qua bên thứ 3 như là Infura, hay dùng Metamask ... thì bắt buộc tải Ethereum Client về để cài đặt trên máy.

Hiện nay có khá nhiều phiên bản Ethereum Client được viết bằng nhiều ngôn ngữ khác nhau.

  1. Phát hành chính bởi Ethereum
  2. Do bên thứ 3 phát hành

Một Ethereum Client cơ bản có những tính năng sau:

  • Xử lý giao dịch, smart contract với môi trường EVM
  • Lưu trữ dữ liệu của mạng (các block)
  • Kết nối P2P đến các node khác trong mạng để đồng bộ dữ liệu hay broadcast event lên mạng.
  • Cung cấp APIs cho các developer tương tác với mạng blockchain

2. Kiến trúc

Kiến trúc của Besu chia ra làm 4 phần chính là Storage, Ethereum Core , NetworkingUser-facing APIs

  1. Storage: Besu sử dụng RocksDB để lưu trữ dữ liệu dạng key-value. Data lưu trong storage chia thành 2 phần.
    • Blockchain: Lưu chuỗi các block (gồm header và body block).
    • World State: Lưu StateTree (mapping address account với state của account (vd như số dư)).
  2. Ethereum Core:
    • EVM: Biên dịch, xử lý các smart contracts cũng như các giao dịch.
    • Thuật toán đồng thuận (Consensus Algorithms): Hỗ trợ 3 thuật toán là Proof of Work (Ethash), CliqueIBFT 2.0.
  3. Networking
  • Discovery: Giao thức dựa trên UDP để tìm các peers trên network
  • RLPx: Giao thức dựa trên TCP tương tác với các peers khác. Tùy vào thuật toán đồng thuận mà node sẽ sử dụng ETH Sub-protocol hay là IBF Sub-protocol.
  1. User-facing APIs
  • Phía ứng dụng có thể thông qua HTTP JSON-RPC, WebSocket JSON-RPC hay GrapgQL để tương tác với mạng blockchain. Khi phát triển dapp với Besu chúng ta có thể dùng các công cụ quen thuộc như Truffle, Remix hay web3.

3. Tính riêng tư (Privacy)

Ngoài việc có thể hoạt động bình thường trên mainet Ethereum và các testnet như các phiên bản Ethereum Client khác. Hyperledger Besu còn cho phép người dùng có thể tạo một mạng private (private network) và thực hiện các private transactions trên mạng đó.

Orion

Đầu tiên chúng ta sẽ tìm hiểu Orion, một khái niệm quang trọng đối với việc sử lý các private transaction trong Besu.

Orion là một phầm mềm mã nguồn mở giúp quản lý các private transactions (private transaction manager) được viết bằng Java.

Chức năng của Orion:

  • Tạo và duy trì các cặp khóa công khai (private/public keypairs)
  • Lưu trữ thông tin chi tiết về privacy group (chúng ta sẽ tìm hiểu privacy group là gì ở phần sau)
  • Kết nối đến các Orio node khác trong mạng
  • Cung cấp bộ API giúp kết nói với Ethereum Client cũng như các Orion node.

Privacy Group

Privacy Group là tập hợp các nodes được định danh bởi một id duy nhất.

Besu node trong trường hợp này sẽ lưu trữ public world state của mạng publics và private state cho mỗi privacy group. Dữ liệu trong private state sẽ truy cập từ các thành phần bên ngoài.

Private Transactions

Private transactions là các giao dịch được diễn ra trong các Privacy Group, dữ liệu, trạng thái của các private transactions sẽ được lưu vài private state của Besu node như đã mô tả ở trên.

Đặc điểm của private transactions

  • Private transactions chỉ thành công khi các node tham gia vào giao dịch đều online trên mạng (nguyên văn: All private transaction participants must be online for a private transaction to be successfully distributed )
  • Các private transactions chỉ có thể là giao dịch deploy contract hoặc gọi hàm trong contract. Giao dịch chuyển ETH không thể là private transaction.
  • Để thực hiện các private transactions, mỗi Besu node cần có một Orion node tương ứng.
{
  "to": null,
  "from": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73",
  "gas": "0x7600",
  "gasPrice": "0x0",
  "data": "0x608060405234801561001057600080fd5b5060dc8061001f6000396000f3006080604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514604e57806355241077146076575b600080fd5b348015605957600080fd5b50606060a0565b6040518082815260200191505060405180910390f35b348015608157600080fd5b50609e6004803603810190808035906020019092919050505060a6565b005b60005481565b80600081905550505600a165627a7a723058202bdbba2e694dba8fff33d9d0976df580f57bff0a40e25a46c398f8063b4c00360029",
  "nonce": "0x0",
  "privateFrom": "negmDcN2P4ODpqn/6WkJ02zT/0w0bjhGpkZ8UP6vARk=",
  "privateFor": ["g59BmTeJIn7HIcnq8VQWgyh/pDbvbt2eyP0Ii60aDDw=","6fg8q5rWMBoAT2oIiU3tYJbk4b7oAr7dxaaVY7TeM3U="],
  "restriction": "restricted"
}

Ngoài một số trường tương tự như các public transactions, private transactions có thêm một số trường như sau:

  • privateFrom: The Orion public key của người gửi
  • privateFor: - The Orion public keys của người nhận
  • privacyGroupId
  • restriction: Là một trong 2 giá trị restricted hoặc unrestricted
    • restricted: Chỉ các node tham gia vào giao dịch mới nhận được payload
    • unrestricted: Tất cả các node trong mạng nhận được payload của private transactions, nhưng chỉ có các node là thành phần của giao dịch mới đọc được.

Quy trình xử lý một private transactions

Quá trình xử lý một private transaction bao gồm:

  • Precompiled Contract: Smart contract được biên dịch thành EVM bytecode và lưu trữ ở Ethereum node để sau này xử lý tiếp.
  • Privacy Marker Transaction: Một public Ethereum transaction với payload kèm theo một enclave key. Enclave key là một con trỏ, nó trỏ tới private transaction ở Orion node. Trường to trong Privacy Marker Transaction là địa chỉ của contract được biên dịch ở phần trên.

Privacy Marker Transaction được ký bằng một khóa ngẫu nhiên hoặc khóa được chỉ định qua command-line

Lưu ý: Các private transaction vẫn được public lên mạng Ethereum và đóng vào block bình thường như các giao dịch public khác. Chỉ khác ở chỗ khi ở trong Privacy group thì các node sẽ sử dụng private state thay vì public state của mạng Ethereum.

  1. Private transactions được submit bằng việc sử dụng eea_sendRawTransaction
  2. Private transaction được chuyển tiếp đến Private Transaction Handler trong node Besu thông qua JSON-RPC.
  3. Private Transaction Handler gửi private transactions tới Orion node tương ứng với Besu node hiện tại.
  4. Orion node gửi trực tiếp private transactions đến Orion node của bên nhận (point-to-point) hoặc các Orion node trong privacy group (tùy thuộc vào trường restriction trong private transactions). Các Orion node nhận được và lưu các private transactions ở dạng key-value.
  5. Orion node trả lại transactions hash cho Private Transaction Handler.
  6. Private Transaction Handler tạo một Privacy Marker Transaction. Private Transaction Handler sẽ broadcast Privacy Marker Transaction lên toàn mạng public thông qua giao thức P2P.
  7. Miner sẽ đóng Privacy Marker Transaction vào block và broadcast lên toàn mạng
  8. Với những nodes lưu trữ contract có địa chỉ giống với địa chỉ contract trong Privacy Marker Transaction sẽ giữ lại Privacy Marker Transaction và xử lý tiếp. Các node còn lại sẽ bỏ qua Privacy Marker Transaction.
  9. Contract truy vấn Orion node thông tin và private transactionprivacy group ID bằng việc sử dụng transaction hash.
  10. Contract chuyển private transaction vào Private Transaction Processor
  11. Private Transaction Processor thực thi giao dịch. Private Transaction Processor có thể đọc và ghi vào private world state và chỉ có thể đọc từ public world state.

Tài liệu tham khảo

https://www.hyperledger.org/blog/2019/08/29/announcing-hyperledger-besu https://besu.hyperledger.org/en/stable/


All Rights Reserved