Cardano2vn

Hydra Tutorial

Cardano2vn

Hydra Tutorial

Bắt đầu với Hydra
Vận hành Hydra Node
Cài đặt và Cấu hình Hydra Node – Hướng dẫn từng bước cho Nhà phát triển MớiChạy Hydra Head Đầu Tiên – Khởi chạy, Quản lý và Quan sát Hoạt động On-Chain & Off-ChainKhắc phục sự cố Hydra Node – Hiểu và Sửa các Lỗi Thường Gặp Hiệu QuảÔn tập và Chuẩn bị – Tóm tắt Kiến thức Quan trọng và Sẵn sàng cho Phát triển Hydra DApp
Designing Hydra-powered DApps
Building and Deploying a Complete Hydra DApp
Vận hành Hydra Node

Cài đặt và Cấu hình Hydra Node – Hướng dẫn từng bước cho Nhà phát triển Mới

Hướng dẫn chi tiết cách cài đặt và cấu hình một Hydra Node từ đầu, dành cho các nhà phát triển mới làm quen với môi trường Cardano và Hydra. Tài liệu bao gồm chuẩn bị môi trường, cài đặt các phụ thuộc, cấu hình node và chạy thử nghiệm, giúp bạn nhanh chóng thiết lập một node Hydra hoạt động ổn định và sẵn sàng cho phát triển ứng dụng Layer-2.

📌 Giới thiệu

Trong bài học này, chúng ta sẽ từng bước tiếp cận quy trình thiết lập và chạy thử một hệ thống Hydra Node trong môi trường thực tế. Mục tiêu không chỉ dừng lại ở việc cài đặt, mà còn giúp bạn hiểu rõ cách các thành phần hoạt động và liên kết với nhau trong kiến trúc tổng thể của Hydra trên Cardano.

Bạn sẽ bắt đầu từ việc chuẩn bị môi trường, cài đặt các công cụ cần thiết, thiết lập các biến môi trường và cấu hình hệ thống. Sau đó, chúng ta sẽ đi sâu vào việc tạo khóa, cấu hình tham số và cuối cùng là khởi chạy một demo hoàn chỉnh để quan sát cách Hydra vận hành trong thực tế.

Thông qua bài học này, bạn sẽ có cái nhìn rõ ràng hơn về cách xây dựng và vận hành một hệ thống off-chain sử dụng Hydra, từ đó làm nền tảng cho việc phát triển các ứng dụng phi tập trung (DApp) có hiệu năng cao.

📚 Cụ thể, nội dung bao gồm:

  • Giới thiệu tổng quan về bài học và vai trò của Hydra.
  • Chuẩn bị môi trường để chạy Hydra Node.
  • Cài đặt các công cụ cần thiết và thiết lập biến môi trường. = Tạo khóa và cấu hình các tham số quan trọng.
  • Khởi chạy demo và quan sát hoạt động của hệ thống.

🎯 Mục tiêu

Sau khi hoàn thành bài học này, bạn sẽ đạt được các mục tiêu sau:

  • Hiểu được quy trình thiết lập và vận hành một Hydra Node từ đầu.
  • Biết cách chuẩn bị môi trường phù hợp cho việc phát triển và thử nghiệm Hydra.
  • Nắm được cách cài đặt và sử dụng các công cụ cần thiết trong hệ sinh thái Cardano.
  • Hiểu rõ vai trò của khóa (keys) và các tham số cấu hình trong hệ thống.
  • Có khả năng tự khởi chạy một demo Hydra và kiểm tra hoạt động của nó.

📚 Cuẩn bị môi trường

Trước khi khởi chạy Hydra Node, điều kiện tiên quyết là bạn phải đảm bảo rằng Cardano Node đang hoạt động ổn định và đã đồng bộ hoàn toàn với mạng blockchain. Hydra hoạt động như một layer mở rộng (Layer 2), vì vậy nó phụ thuộc trực tiếp vào Cardano Node để:

  • Lấy dữ liệu blockchain
  • Xác thực giao dịch
  • Đồng bộ trạng thái on-chain

👉 Nếu Cardano Node chưa sync xong, Hydra sẽ không thể hoạt động chính xác.

1. Kiểm Tra Cardano Node Đang Chạy

Để kiểm tra trạng thái node, bạn sử dụng lệnh:

cardano-cli query tip --testnet-magic 2

Trong đó:

  • Lệnh này giúp bạn: Kiểm tra node có đang chạy hay không, Xác định mức độ đồng bộ với blockchain. Lấy thông tin mới nhất về block, slot và epoch.
  • cardano-cli query tip truy vấn trạng thái hiện tại của blockchain mà node đã đồng bộ.
  • --testnet-magic 2 → chỉ định mạng Preview (testnet). Nếu bạn dùng mainnet, tham số sẽ khác (không dùng testnet-magic)

Kết quả: Bạn sẽ nhận được một JSON chứa thông tin về block hiện tại, epoch, era, slot và tiến trình đồng bộ (syncProgress). Ví dụ:

{
    "block": 3734105,
    "epoch": 1101,
    "era": "Conway",
    "hash": "c1fd0fe85db337c3044acf06db90be929aebced51880ee7bba9e97f72a6d4972",
    "slot": 95160249,
    "slotInEpoch": 33849,
    "slotsToEpochEnd": 52551,
    "syncProgress": "100.00"
}

Giải thích các trường quan trọng:

  • syncProgress: "100.00" → node đã đồng bộ hoàn toàn với mạng (bắt buộc để chạy Hydra).
  • era: kỷ nguyên hiện tại (ví dụ: Conway) — chỉ để biết node đang ở phiên bản protocol nào.
  • block / slot / slotInEpoch: thông tin tiến trình chuỗi; giúp chẩn đoán.

Nếu syncProgress < 100% → dừng lại và chờ node đồng bộ hoàn toàn. Hydra không thể hoạt động nếu node chưa sync.

2. Kiểm Tra node.socket

Trong hệ thống Cardano, các thành phần như Cardano Node, cardano-cli và Hydra không giao tiếp với nhau qua HTTP API, mà sử dụng một cơ chế nội bộ gọi là IPC (Inter-Process Communication) thông qua file node.socket. Đây là một file đặc biệt mà Cardano Node tạo ra khi khởi động, và nó hoạt động như một cổng giao tiếp giữa node và các client khác (như cardano-cli hoặc hydra-node). 👉 Vì vậy, để Hydra hoạt động, bạn cần đảm bảo rằng biến môi trường CARDANO_NODE_SOCKET_PATH đã được cấu hình đúng.

🔍 Kiểm tra biến môi trường

  1. Chạy lệnh sau để xem giá trị của biến môi trường:
echo $CARDANO_NODE_SOCKET_PATH
  1. Kết quả mong đợi sẽ thấy đường dẫn đầy đủ tới file node.socket, ví dụ:
/home/ubuntu/cardano-node/relay/db/node.socket

Nếu biến chưa được đặt

Trong trường hợp biến môi trường CARDANO_NODE_SOCKET_PATH chưa tồn tại hoặc trả về rỗng, bạn cần thực hiện các bước sau để cấu hình đúng đường dẫn tới node.socket.

  1. Tìm file socket

Tìm vị trí chính xác của file node.socket trong hệ thống. Tránh việc cấu hình sai đường dẫn dẫn đến lỗi kết nối giữa Hydra và Cardano Node.

find / -name "node.socket" 2>/dev/null | head -5

Lưu ý: Kết quả có thể trả về nhiều đường dẫn → hãy chọn đường dẫn đúng với Cardano Node đang chạy. Thường nằm trong thư mục: /db or /relay/db/hoặc thư mục bạn cấu hình khi chạy node

/home/ubuntu/cardano-node/db/node.socket
  1. Export tạm thời

Sau khi tìm được đường dẫn chính xác, bạn cần export biến môi trường:

export CARDANO_NODE_SOCKET_PATH=./node.socket
  1. Lưu vĩnh viễn vào ~/.bashrc:
echo 'export CARDANO_NODE_SOCKET_PATH=./node.socket' >> ~/.bashrc
source ~/.bashrc

3. Kiểm Tra Kết Nối Mạng

Kiểm tra IP public (để biết máy có Internet/public IP hay chỉ local):

curl -s https://api.ipify.org && echo
  • Nếu trả về IP public → máy có kết nối Internet.
  • Nếu đang test nội bộ, dùng localhost/127.0.0.1 là đủ.

4. Cập Nhật Hệ Thống

Cập nhật package và cài các công cụ cơ bản:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl unzip git

5. Cài Đặt Công Cụ

Cài đặt websocat - Công Cụ Test WebSocket

websocat là một công cụ dòng lệnh mạnh mẽ, dùng để giao tiếp với WebSocket server giống như cách curl giao tiếp với HTTP server. Công cụ này bắt buộc phải có khi làm việc với Hydra Node, vì Hydra sử dụng WebSocket để:

  • Nhận sự kiện (events)
  • Gửi lệnh điều khiển (commands)
  • Theo dõi trạng thái Head
  • Gửi và nhận giao dịch off-chain

Cài đặt websocat (x86_64 Linux)

Websocat có bản build sẵn, không cần biên dịch.

sudo wget -qO /usr/local/bin/websocat \
https://github.com/vi/websocat/releases/latest/download/websocat.x86_64-unknown-linux-musl
sudo chmod a+x /usr/local/bin/websocat
  • wget -qO → tải file và lưu đúng vào /usr/local/bin/websocat
  • Không cần giải nén — đây là một binary duy nhất
  • chmod a+x để bạn có thể chạy lệnh

Kiểm tra cài đặt

websocat --version

Kết quả mong đợi:

websocat 1.12.0

Output mong đợi: websocat 1.12.0 (phiên bản có thể khác; chỉ cần lệnh chạy được).

Lỗi thường gặp: command not found → kiểm tra /usr/local/bin/websocat tồn tại và có quyền thực thi.

Cài Đặt Hydra Node

Hydra Node là thành phần cốt lõi giúp bạn mở Head, thực hiện giao dịch off-chain và đồng bộ với Cardano Node. Phần này hướng dẫn toàn bộ quá trình cài đặt một cách an toàn – chính xác – có kiểm tra lỗi.

1. Chọn phiên bản Hydra

Chọn phiên bản Hydra Node muốn cài đặt - Khuyến nghị v1.0.0+. Có thể xem các phiên bản ở Hydra Version

HYDRA_VERSION=1.0.0

2. Cài Binary Hydra Node

Hydra phát hành binary đóng gói (zip), không cần build từ source.

curl -L -O https://github.com/cardano-scaling/hydra/releases/download/${HYDRA_VERSION}/hydra-x86_64-linux-${HYDRA_VERSION}.zip

Giải thích:

  • -L: theo mọi redirect của GitHub về CDN.
  • -O: giữ lại tên file gốc.
  • File tải về: hydra-x86_64-linux-1.0.0.zip

3. Giải nén vào thư mục $HOME/bin

Đây là nơi chứa các binary cá nhân của user.

mkdir -p ~/bin
unzip -d ~/bin hydra-x86_64-linux-${HYDRA_VERSION}.zip

Sau khi giải nén, bạn sẽ có các file như:

Archive:  hydra-x86_64-linux-1.0.0.zip
  inflating: /root/bin/hydra-node
  inflating: /root/bin/hydra-tui

4. Thêm Hydra Node vào PATH

Để gọi hydra-node ở bất kỳ đâu:

  1. Thêm tạm thời:
export PATH="$HOME/bin:$PATH"
  1. Thêm vĩnh viễn:
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
  1. Kiểm tra:
hydra-node --version
# 1.0.0-d505ff119c4bc62f008b6fcff3416cffc3d6df5b

Nếu lệnh không chạy: Kiểm tra echo $PATH. Kiểm tra file thực tế trong ~/bin

6. Giải Thích Các Tham Số trong Hydra Node

1. Các tham số cơ bản

Nhóm tham số này điều khiển cách Hydra Node giao tiếp với các node khác trong mạng Hydra. Chúng xác định danh tính của node, địa chỉ lắng nghe P2P, và danh sách các peer sẽ kết nối khi khởi động. Nếu cấu hình sai, các node sẽ không thể nhìn thấy nhau và Head sẽ không thể khởi tạo.

Tham sốGiải thích
-q, --quietTắt toàn bộ logging. Phù hợp môi trường production.
-n, --node-id NODE-IDID duy nhất cho mỗi node tham gia mạng Hydra. Không được trùng nhau.
-l, --listen HOST:PORTĐịa chỉ và cổng lắng nghe kết nối từ các Hydra node khác. Mặc định: 0.0.0.0:5001.
--advertise HOST:PORTĐịa chỉ công khai để peer kết nối tới. Cần khi có NAT/firewall. Không đặt → dùng --listen.
-P, --peer HOST:PORTDanh sách peer để node tự kết nối. Dùng nhiều lần, tối đa 7 peer.

2. API và Giao tiếp Client

Hydra cung cấp API HTTP và WebSocket nhằm cho phép ứng dụng client (web, backend, game engine…) giao tiếp với Hydra Head. Nhóm tham số này xác định địa chỉ API, cấu hình HTTPS/WSS và cổng cho Prometheus. Nếu sai cấu hình, client sẽ không thể gửi giao dịch hoặc truy cập trạng thái Head.

Tham sốGiải thích
--api-host IPIP của API client (HTTP/WebSocket). Mặc định: 127.0.0.1.
--api-port PORTCổng API client. Mặc định: 4001.
--tls-cert FILEFile chứng chỉ TLS để bật HTTPS/WSS.
--tls-key FILEFile private key cho TLS (phải có cùng lúc với cert).
--monitoring-port PORTCổng xuất Prometheus metrics. Không đặt → tắt monitoring.

3. KHÓA BẢO MẬT (OFF-CHAIN & ON-CHAIN)

Hydra sử dụng hai lớp khóa:

  • khóa off-chain (Hydra keys) cho giao dịch L2
  • khóa on-chain (Cardano keys) để mở Head, đóng Head, contest hoặc submit giao dịch L1

Nếu cấu hình thiếu hoặc sai khóa, node sẽ không thể tham gia Head hoặc ký giao dịch.

Tham sốGiải thích
--hydra-signing-key FILEKhóa ký Hydra off-chain. Mặc định: hydra.sk.
--hydra-verification-key FILEKhóa xác minh của các participant khác. Dùng tối đa 7 lần.
--cardano-signing-key FILEKhóa ký Cardano on-chain (fuel + ký tx Hydra). Mặc định: cardano.sk.
--cardano-verification-key FILEKhóa xác minh Cardano của participant khác. Dùng nhiều lần.

4. LƯU TRỮ & PERSISTENCE

Hydra lưu trữ trạng thái Head (UTxO, snapshot, event) trong persistence directory. Không được chỉnh sửa thủ công vì có thể làm hỏng lịch sử Head. Tùy chọn xoay file persistence giúp giảm kích thước file và tối ưu hiệu năng lâu dài.

Tham sốGiải thích
--persistence-dir DIRThư mục lưu trạng thái Head (UTxO, snapshot, lịch sử). Không chỉnh sửa thủ công.
--persistence-rotate-after NATURALSố event trước khi xoay file persistence. Mặc định: không xoay.

5. Kết nối với Cardano Layer 1

Hydra vẫn phụ thuộc Cardano L1 để mở Head, đóng Head và xuất UTxO ra chain. Bạn có thể kết nối bằng cách dùng cardano-node hoặc Blockfrost. Sai cấu hình sẽ khiến giao dịch không thể submit.

1. Sử dụng Cardano Node (recommended)

Tham sốGiải thích
--mainnetChạy trên mainnet (magic ID tự động)
--testnet-magic NATURALChạy trên testnet. Ví dụ: --testnet-magic 2 → Preview.
--node-socket FILEĐường dẫn tới node.socket của cardano-node. Mặc định: node.socket.

2. Sử dụng Blockfrost

Tham sốGiải thích
--blockfrost FILEFile chứa Blockfrost API key. Mặc định: blockfrost.txt.

3. Hydra Scripts (Plutus Scripts)

Hydra yêu cầu bộ scripts Plutus đã publish lên chain. Tất cả node phải dùng cùng scripts thông qua TXID hoặc cùng network. Sai TXID hoặc khác network sẽ khiến Head không thể mở.

Tham sốGiải thích
--hydra-scripts-tx-id TXIDTxID chứa reference scripts Hydra (nằm trong 10 output đầu).
--network NETWORKSử dụng scripts đã publish sẵn cho (mainnet / preprod / preview).

4. Tham số trong giao thức Head

Những tham số này quyết định logic hoạt động của Head: thời gian tranh chấp, thời gian deposit và điểm xuất phát của chain. Tất cả các node phải sử dụng cùng cấu hình.

Tham sốGiải thích
--contestation-period SECONDSThời gian tranh chấp sau Close. Mặc định: 600 giây.
--deposit-period SECONDSThời gian tối thiểu trước deadline để gửi deposit. Mặc định: 3600 giây.
--start-chain-from SLOT.HASHĐiểm bắt đầu theo dõi chain. Dùng khi phục hồi từ snapshot.

5. Chế độ offline (Mô Phỏng L1)

Hydra có chế độ chạy offline để test nhanh mà không cần Cardano L1. Chế độ này mô phỏng genesis, protocol parameters và UTxO ban đầu. Tất cả node phải đồng bộ seed và file cấu hình.

Tham sốGiải thích
--offline-head-seed HEXSeed hex để sinh Head ID offline (tất cả node phải giống nhau).
--initial-utxo FILEFile JSON chứa UTxO ban đầu cho Hydra. Mặc định: utxo.json.
--ledger-genesis FILEFile genesis mô phỏng Shelley L1.
--ledger-protocol-parameters FILEProtocol parameters cho Hydra ledger. Mặc định: protocol-parameters.json.

6. Các lệnh phụ

Nhóm lệnh tiện ích phục vụ việc chuẩn bị môi trường Hydra, như publish scripts hoặc sinh khóa Hydra.

CommandGiải thích
publish-scriptsPublish Hydra Plutus scripts lên chain → tạo TXID cho --hydra-scripts-tx-id. Tốn khoảng 50 ADA.
gen-hydra-keyTạo cặp khóa Hydra (sk/vk) off-chain.

7. Information & Help

Nhóm lệnh trợ giúp hiển thị phiên bản, thông tin scripts hoặc hướng dẫn đầy đủ.

Parameter

Tham SốDescription
--versionHiển thị phiên bản hydra-node.
--script-infoIn thông tin script (JSON).
-h, --helpHiển thị hướng dẫn đầy đủ.

Khởi Chạy Hydra Node

1. Tạo Khóa Cardano cho Alice và Bob

Mục tiêu: Mỗi người tham gia cần 2 cặp khóa Cardano:

  • node → dùng để ký giao dịch Hydra (fuel)
  • funds → dùng để gửi tiền vào Head (UTxO ban đầu)

1.1. Tạo thư mục lưu khóa

mkdir -p credentials # Tất cả khóa sẽ được lưu trong thư mục credentials/.

1.2. Tạo khóa cho Alice

# Khóa cho node (ký giao dịch Hydra)
cardano-cli address key-gen \
  --verification-key-file credentials/alice-node.vk \
  --signing-key-file credentials/alice-node.sk

# Tạo địa chỉ từ khóa công khai
cardano-cli address build \
  --verification-key-file credentials/alice-node.vk \
  --out-file credentials/alice-node.addr \
  --testnet-magic 2

# Khóa cho quỹ (gửi tiền vào Head)
cardano-cli address key-gen \
  --verification-key-file credentials/alice-funds.vk \
  --signing-key-file credentials/alice-funds.sk

cardano-cli address build \
  --verification-key-file credentials/alice-funds.vk \
  --out-file credentials/alice-funds.addr \
  --testnet-magic 2

Kết quả:

credentials/
├── alice-node.sk      → khóa ký giao dịch Hydra
├── alice-node.vk      → khóa công khai (dùng để chia sẻ)
├── alice-node.addr    → địa chỉ nhận ADA (fuel)
├── alice-funds.sk     → khóa ký quỹ
├── alice-funds.vk     → khóa công khai quỹ
└── alice-funds.addr   → địa chỉ nhận ADA (sẽ đưa vào Head)

1.3. Tạo khóa cho Bob

# Khóa cho node (ký giao dịch Hydra)
cardano-cli address key-gen \
  --verification-key-file credentials/bob-node.vk \
  --signing-key-file credentials/bob-node.sk

# Tạo địa chỉ từ khóa công khai
cardano-cli address build \
  --verification-key-file credentials/bob-node.vk \
  --out-file credentials/bob-node.addr \
  --testnet-magic 2

# Khóa cho quỹ (gửi tiền vào Head)
cardano-cli address key-gen \
  --verification-key-file credentials/bob-funds.vk \
  --signing-key-file credentials/bob-funds.sk

cardano-cli address build \
  --verification-key-file credentials/bob-funds.vk \
  --out-file credentials/bob-funds.addr \
  --testnet-magic 2

Kết quả:

credentials/
├── bob-node.sk      → khóa ký giao dịch Hydra
├── bob-node.vk      → khóa công khai (dùng để chia sẻ)
├── bob-node.addr    → địa chỉ nhận ADA (fuel)
├── bob-funds.sk     → khóa ký quỹ
├── bob-funds.vk     → khóa công khai quỹ
└── bob-funds.addr   → địa chỉ nhận ADA (sẽ đưa vào Head)

2. Gửi tADA vào các địa chỉ

2.1. Mở https://testnet.cardano.org/en/testnet-tools/faucet/

2.1. Dán lần lượt các địa chỉ

cat credentials/alice-node.addr && echo &&
cat credentials/alice-funds.addr && echo &&
cat credentials/bob-node.addr && echo &&
cat credentials/bob-funds.addr && echo

2.1. Nhận ít nhất 100 tADA mỗi địa chỉ

Lưu ý:

  • node.addr → cần ít nhất 50 tADA để làm fuel (phí giao dịch Hydra)
  • funds.addr → cần ít nhất 20 tADA để đưa vào Head

3. Tạo khóa Hydra (off-chain)

Khóa này không liên quan đến Cardano, dùng để ký tin nhắn trong Head (giống như chữ ký số nội bộ).

# Alice
hydra-node gen-hydra-key --output-file credentials/alice-hydra

# Bob
hydra-node gen-hydra-key --output-file credentials/bob-hydra

Kết quả:

credentials/
├── alice-hydra.sk     → khóa ký Hydra của Alice
├── alice-hydra.vk     → khóa công khai (chia sẻ cho Bob)
├── bob-hydra.sk       → khóa ký Hydra của Bob
└── bob-hydra.vk       → khóa công khai (chia sẻ cho Alice)

Quan trọng: Mỗi người phải gửi *.vk Hydra của mình cho người kia.

4. Tạo file protocol-parameters.json (miễn phí giao dịch)

Mục tiêu: Tạo file cấu hình không tính phí để test local/offline dễ dàng.

cardano-cli query protocol-parameters  --testnet-magic 2 \
  | jq '.txFeeFixed = 0 |.txFeePerByte = 0 | .executionUnitPrices.priceMemory = 0 | .executionUnitPrices.priceSteps = 0' \
  > protocol-parameters.json

Giải thích:

Tham SốGiải thích
cardano-cli query protocol-parametersLấy cấu hình giao thức hiện tại từ testnet
--testnet-magic 2Chọn mạng Preview
jq '...'Sửa đổi JSON: đặt tất cả phí = 0
> protocol-parameters.jsonLưu file protocol-parameters.json

Kết quả: File protocol-parameters.json với giao dịch miễn phí → dùng khi:

  • Chạy offline mode
  • Test nhiều giao dịch mà không tốn phí

Cảnh báo: Chỉ dùng cho test. Không dùng trên mainnet!

5. Khởi chạy Hydra Node

Mục tiêu:

  • Chạy 2 hydra-node trên cùng một máy (localhost)
  • Kết nối P2P qua cổng 5001 ↔ 5002
  • Dùng Hydra scripts đã publish sẵn trên Preview
  • Giao dịch miễn phí nhờ protocol-parameters.json
  • Sẵn sàng mở Head và gửi giao dịch Layer 2

5.1 Yêu cầu trước khi chạy

  1. Đã hoàn thành Bước 2–4 (khóa, protocol-parameters)

  2. cardano-node đang chạy và có socket:

    export CARDANO_NODE_SOCKET_PATH=/path/to/node.socket
  3. Kết nối Internet (để tải hydra-scripts-tx-id)

  4. Cài jq và curl:

sudo apt install jq curl

5.2. Khởi chạy Node Alice

Tạo tmux để chạy Node. Giúp chạy node nền tảng terminal mà không bị tắt khi đóng terminal. Mỗi Node nên chạy trên tmux session riêng.

tmux new -t alice-hydra-node

Sau đó

hydra_version=1.0.0
hydra-node \
  --node-id "alice-node2" \
  --persistence-dir persistence-alice2 \
  --cardano-signing-key credentials/alice-node.sk \
  --hydra-signing-key credentials/alice-hydra.sk \
  --hydra-scripts-tx-id $(curl https://raw.githubusercontent.com/cardano-scaling/hydra/master/hydra-node/networks.json | jq -r ".preview.\"${hydra_version}\"") \
  --ledger-protocol-parameters protocol-parameters.json \
  --testnet-magic 2 \
  --node-socket $CARDANO_NODE_SOCKET_PATH \
  --api-port 4001 \
  --listen 127.0.0.1:5001 \
  --api-host 0.0.0.0 \
  --peer 127.0.0.1:5002 \
  --hydra-verification-key credentials/bob-hydra.vk \
  --cardano-verification-key credentials/bob-node.vk

Kết quả đầu ra

  • Node Alice nhận ChainPoint, trạng thái UTxO, và Tick từ blockchain.
  • Log dạng JSON cho biết node đã kết nối blockchain thành công.
  • Nếu API bị lỗi, ví dụ "ConnectionClosed", cần kiểm tra cổng API hoặc network.
{"timestamp":"2025-11-06T04:11:14.378858461Z","threadId":62,"namespace":"HydraNode-\"alice-node2\"","message":{"directChain":{"contents":{"point":
{"timestamp":"2025-11-06T04:12:22.057429347Z","threadId":73,"namespace":"HydraNode-\"alice-node2\"","message":{"network":{"contents":{"etcd":{"caller":"etcdserver/raft.go:427","exceeded-duration":"1.337832ms","expected-duration":"200ms","heartbeat-interval":"100ms","level":"warn","msg":"leader failed to send out heartbeat on time; took too long, leader is overloaded likely from slow disk","to":"33be72d937d7d2df","ts":"2025-11-06T05:12:22.049210+0100"},"tag":"EtcdLog"},"tag":"Etcd"},"tag":"Network"}}

5.3. Khởi chạy Node Bob

tmux new -t bob-hydra-node

Sau đó

hydra_version=1.0.0
hydra-node \
  --node-id "bob-node2" \
  --persistence-dir persistence-bob2 \
  --cardano-signing-key credentials/bob-node.sk \
  --hydra-signing-key credentials/bob-hydra.sk \
  --hydra-scripts-tx-id $(curl https://raw.githubusercontent.com/cardano-scaling/hydra/master/hydra-node/networks.json | jq -r ".preview.\"${hydra_version}\"") \
  --ledger-protocol-parameters protocol-parameters.json \
  --testnet-magic 2 \
  --node-socket $CARDANO_NODE_SOCKET_PATH \
  --api-port 4002 \
  --listen 127.0.0.1:5002 \
  --api-host 0.0.0.0 \
  --peer 127.0.0.1:5001 \
  --hydra-verification-key credentials/alice-hydra.vk \
  --cardano-verification-key credentials/alice-node.vk

Kết quả

{"timestamp":"2025-11-06T04:11:14.380739503Z","threadId":62,"namespace":"HydraNode-\"bob-node2\"","message":{"directChain":{"contents":{"point":{"blockHash":"5d2a89ce5fb0dfa022262e535d6e5f5daf3b83b7cef48b1049d707a2bc81011a","slot":95746274,"tag":"ChainPoint"},"tag":"BeginUpdate"},"tag":"Wallet"},"tag":"DirectChain"}}
{"timestamp":"2025-11-06T04:11:14.380744671Z","threadId":62,"namespace":"HydraNode-\"bob-node2\"","message":{"directChain":{"contents":{"newUTxO":{},ue"},"tag":"LogicOutcome"},"tag":"Node"}}
{"timestamp":"2025-11-06T04:12:12.682777033Z","threadId":93,"namespace":"HydraNode-\"bob-node2\"","message":{"node":{"by":{"vkey":"75944646ac58771a88496a2a951c24481ac9554cc5c7af12fb7b596345b9ab27"},"inputId":16,"tag":"EndInput"},"tag":"Node"}}

5.4. Kiếm tra kết nối

Sau khi thực thi

 websocat ws://127.0.0.1:4001 | jq

Kết quả

{
  "env": {
    "configuredPeers": "127.0.0.1:5002=http://127.0.0.1:5002",
    "contestationPeriod": 600,
    "depositPeriod": 3600,
    "otherParties": [
      {
        "vkey": "83f2fd62b43bbdf48d5d8ebf2a3b47947f948c16523a91243c4f20be3e7f42cc"
      }
    ],
    "participants": [
      "2f4bf50ad4d34612b294e3874b67b104c1277624decc0dca4ff1ea51",
      "7f6da1a391a7502ae8fbbbeb6a7176a7978d09bd6b30581aa3633e40"
    ],
    "party": {
      "vkey": "82529d9386ce980edfdb7127505e21c17c6e3535cc349d696ac4418042797149"
    },
    "signingKey": "f614fece1548db881ce3d43cc10a98f9c481640662cea1772a81a653f5d539af"
  },
  "headStatus": "Idle",
  "hydraNodeVersion": "1.0.0-b5e33b55e9fba442c562f82cec6c36b1716d9847",
  "me": {
    "vkey": "82529d9386ce980edfdb7127505e21c17c6e3535cc349d696ac4418042797149"
  },
  "networkInfo": {
    "networkConnected": true,
    "peersInfo": {
      "127.0.0.1:5002": true
    }
  },
  "tag": "Greetings"
}

Khi "networkConnected": true và "peersInfo": { "127.0.0.1:5002": true } chứng tỏ thành công

Vận hành Hydra Node

Cài đặt, cấu hình và vận hành Hydra Node, đồng thời khởi chạy Hydra Head đầu tiên của bạn.

Chạy Hydra Head Đầu Tiên – Khởi chạy, Quản lý và Quan sát Hoạt động On-Chain & Off-Chain

Hướng dẫn chi tiết cách khởi chạy Hydra Head đầu tiên của bạn, bao gồm quản lý trạng thái, theo dõi giao dịch và quan sát hoạt động cả trên chuỗi (on-chain) và ngoài chuỗi (off-chain). Tài liệu giúp bạn hiểu rõ cách Hydra vận hành trong môi trường thực tế, từ đó tối ưu hóa hiệu năng và đảm bảo tính ổn định cho các ứng dụng Layer-2 trên Cardano.

On this page

📌 Giới thiệu🎯 Mục tiêu📚 Cuẩn bị môi trường1. Kiểm Tra Cardano Node Đang ChạyGiải thích các trường quan trọng:2. Kiểm Tra node.socket🔍 Kiểm tra biến môi trườngNếu biến chưa được đặt3. Kiểm Tra Kết Nối Mạng4. Cập Nhật Hệ Thống5. Cài Đặt Công CụCài đặt websocat - Công Cụ Test WebSocketCài đặt websocat (x86_64 Linux)Kiểm tra cài đặtCài Đặt Hydra Node6. Giải Thích Các Tham Số trong Hydra Node1. Các tham số cơ bản2. API và Giao tiếp Client3. KHÓA BẢO MẬT (OFF-CHAIN & ON-CHAIN)4. LƯU TRỮ & PERSISTENCE5. Kết nối với Cardano Layer 11. Sử dụng Cardano Node (recommended)2. Sử dụng Blockfrost3. Hydra Scripts (Plutus Scripts)4. Tham số trong giao thức Head5. Chế độ offline (Mô Phỏng L1)6. Các lệnh phụ7. Information & HelpKhởi Chạy Hydra Node1. Tạo Khóa Cardano cho Alice và Bob1.1. Tạo thư mục lưu khóa1.2. Tạo khóa cho Alice1.3. Tạo khóa cho Bob2. Gửi tADA vào các địa chỉ2.1. Mở https://testnet.cardano.org/en/testnet-tools/faucet/2.1. Dán lần lượt các địa chỉ2.1. Nhận ít nhất 100 tADA mỗi địa chỉ3. Tạo khóa Hydra (off-chain)4. Tạo file protocol-parameters.json (miễn phí giao dịch)5. Khởi chạy Hydra Node5.1 Yêu cầu trước khi chạy5.2. Khởi chạy Node Alice5.3. Khởi chạy Node Bob5.4. Kiếm tra kết nối