MỚI: Helius mua lại Light Protocol
Cách thiết lập validator Solana
Blog/Phát triển

Cách thiết lập validator Solana

Kỹ sư phần mềmJohn Sloboda trên LinkedIn
Đọc trong 19 phút

Bài viết này tập trung vào khía cạnh kỹ thuật để thiết lập và vận hành một validator Solana trên mainnet. Chúng ta sẽ thiết lập các công cụ và cấu hình nhằm đơn giản hóa hoạt động vận hành liên tục, nhưng không đề cập đến các hoạt động validator nâng cao. Ngoài ra, bài viết cũng không đề cập đến tính kinh tế của việc vận hành validator, bao gồm các chủ đề như thu hút stake và đăng ký trợ cấp. Xin lưu ý thêm rằng những ai muốn vận hành validator nên dùng Công cụ tính lợi nhuận validator của Cogent Crypto để ước tính thu nhập của validator trong một kịch bản giả định cụ thể.

Bài viết này giả định rằng bạn đã quen với việc quản trị hệ thống Linux cơ bản. Bạn không cần phải là lập trình viên hay chuyên gia quản trị hệ thống để vận hành validator, nhưng cần thành thạo việc chạy lệnh trong terminal, viết shell script cơ bản và làm việc với tệp cấu hình.

Nếu chưa biết nhiều về quản trị hệ thống Linux nhưng muốn tìm hiểu thêm, bạn có thể bắt đầu từ nhiều tài nguyên hữu ích như Linux Journey.

Thuật ngữ: Validator Solana là gì?

Bộ công cụ Solana CLI chứa tệp nhị phân solana-validator, có thể:

  • Kết nối với một cụm Solana và đồng bộ trạng thái hiện tại của cụm
  • Tạo, nhận và chia sẻ snapshot cùng dữ liệu cụm khác để luôn cập nhật
  • Bỏ phiếu xác minh các khối mới trong cơ chế đồng thuận của cụm
  • Xử lý transaction đến và tạo khối mới
  • Cung cấp API RPC và API hướng sự kiện để truy vấn dữ liệu cụm và gửi transaction mới

Validator Solana cũng có thể được gọi là client (vì nó kết nối với mạng validator và yêu cầu dữ liệu), server (vì nó xử lý yêu cầu và cung cấp dữ liệu cho các validator khác) hoặc node.

Node RPC là một validator Solana không stake và không bỏ phiếu, có nhiệm vụ theo dõi toàn bộ thông tin của mạng. Điều này có nghĩa là node chỉ phản hồi yêu cầu dữ liệu và không tham gia đồng thuận.

Thuật ngữ “Validator Solana” cũng có thể chỉ một thực thể trong hệ sinh thái Solana đang vận hành validator Solana có stake, có quyền bỏ phiếu và tham gia đồng thuận.

Bạn có thể tìm hiểu thêm về sự khác biệt giữa RPC, nhà cung cấp RPC và validator tại đây.

Bắt đầu: Chuẩn bị phần cứng server

Bạn cần một máy tính cấu hình mạnh chỉ dành riêng cho việc vận hành validator và cần thêm một máy nữa nếu muốn chạy validator trên cả testnet lẫn mainnet. Hiện tại, cấu hình tối thiểu được khuyến nghị là 12 lõi/24 luồng, RAM 256GB, 2 ổ SSD 1TB (lý tưởng nhất là dùng RAID0) và kết nối Internet 10GB. Bạn có thể xem chi tiết hơn về yêu cầu phần cứng tại đây.

Nếu định tiết kiệm chi phí bằng cách chỉ chạy trên mainnet, hãy lưu ý rằng bạn phải vận hành validator testnet để đủ điều kiện tham gia Solana Foundation Delegation Program (SFDP).

Bạn có thể tự mua và vận hành phần cứng hoặc thuê phần cứng từ nhà cung cấp trung tâm dữ liệu (chúng tôi đề xuất TeraSwitch). Bạn cũng có thể thuê từ nhà cung cấp điện toán đám mây, nhưng chúng tôi không khuyến nghị vì chi phí thường quá cao và dễ gặp vấn đề về hiệu năng hơn. Solana Foundation Server Program hướng tới việc giúp đơn vị vận hành validator thuê phần cứng từ các nhà khai thác trung tâm dữ liệu dễ dàng hơn. Tìm hiểu thêm tại đây.

Để góp phần phi tập trung hóa mạng, bạn nên cân nhắc các ASN và thành phố chưa có nhiều node hoặc stake Solana. Một số pool staking và SFDP sẽ trao thưởng dựa trên mức độ phi tập trung theo ASN và thành phố.

Bạn có thể xem danh sách các trung tâm dữ liệu hàng đầu hiện nay tại đây.

Cài đặt Solana CLI cục bộ

Bạn nên cài đặt bộ công cụ trên máy cục bộ để có thể tạo tất cả khóa cần thiết tại đó và giữ khóa rút tiền tách biệt khỏi server validator. Bạn có thể xem hướng dẫn thiết lập Solana CLI cục bộ tại đây.

Sau khi có thể sử dụng các công cụ cục bộ qua dòng lệnh, hãy cấu hình để chúng mặc định trỏ đến testnet:

Mã
$ solana config set --url https://api.testnet.solana.com

Đối với mainnet, bạn có thể trỏ đến endpoint mặc định tại đây:

Mã
$ solana config set --url https://api.mainnet-beta.solana.com

Các endpoint mainnet công khai thường xuyên bị quá tải do lượng yêu cầu lớn. Nếu không hài lòng với hiệu năng, bạn có thể đăng ký Helius và dùng endpoint Helius như sau:

Mã
$ solana config set --url https://mainnet.helius-rpc.com/?api-key=<YOUR-HELIUS-API-KEY>

Quá trình thiết lập và khởi động validator sẽ cần thực thi transaction, vì vậy bạn phải thiết lập một ví có sẵn SOL. Nếu mới bắt đầu với testnet, bạn có thể tạo ví mặc định và airdrop một ít SOL cho mình bằng các lệnh sau:

Mã
$ mkdir -p ~/.config/solana
$ solana-keygen new --outfile ~/.config/solana/id.json
$ solana airdrop 1 ~/.config/solana/id.json

Bạn nên dùng các ví khác nhau cho testnet và mainnet. Do định dạng khóa giống nhau nên có thể dùng cùng một khóa trên cả hai mạng, nhưng đừng làm vậy. Nếu dùng cùng khóa cho các ví có tiền trên testnet và mainnet, bạn rất dễ vô tình thực thi trên mainnet những lệnh vốn dành cho testnet.

Đọc thêm về cách tạo khóa và một số phương pháp tạo khóa an toàn hơn tại đây.

Thiết lập tài khoản bỏ phiếu

Tài khoản bỏ phiếu của validator được tạo bằng lệnh solana create-vote-account và ba cặp khóa:

  1. Cặp khóa danh tính — Validator dùng cặp khóa này để tự xác định danh tính với mạng và gửi các transaction như phiếu bầu. Khóa riêng tư cần được lưu trên server, vì vậy cách bảo mật tốt nhất là không giữ nhiều SOL hơn mức cần thiết cho các transaction bỏ phiếu (khoảng 1 SOL/ngày).
  2. Cặp khóa tài khoản bỏ phiếu — Cặp khóa này đại diện cho chính tài khoản bỏ phiếu, được dùng để tra cứu tài khoản bỏ phiếu và ủy quyền stake cho tài khoản đó. Lệnh create-vote-account chỉ cần khóa riêng tư để chứng minh bạn sở hữu khóa cần thiết. Sau khi tạo tài khoản bỏ phiếu, bạn chỉ cần khóa công khai. Không thể thay đổi khóa này.
  3. Cặp khóa rút tiền — Cặp khóa này đóng vai trò là khóa chính của tài khoản bỏ phiếu, được dùng để rút phần thưởng, thay đổi khóa danh tính hoặc khóa rút tiền và thực hiện các thao tác tài khoản khác. Đây là khóa nhạy cảm nhất trong ba khóa và tuyệt đối không nên được tạo trên hoặc sao chép vào server. Đối với mainnet, hãy cân nhắc dùng ví giấy, ví phần cứng hoặc ví đa chữ ký cho khóa này.

Tạo các cặp khóa

Tạo các cặp khóa cho testnet như sau:

Mã
$ solana-keygen new -o identity.json
$ solana-keygen new -o vote.json
$ solana-keygen new -o withdraw.json

Tùy chọn: Dùng ví giấy cho khóa rút tiền

Ví giấy là một cụm gồm 12 (hoặc 24) từ được viết trên giấy, sau đó nhập bằng bàn phím mỗi khi cần dùng khóa để ký. Nếu không định thiết lập ví đa chữ ký, lớp bảo mật bổ sung này phù hợp cho khóa rút tiền mainnet vì khóa đó cấp quyền truy cập gốc vào tài khoản bỏ phiếu. Chạy lệnh sau:

Mã
$ solana-keygen new --no-outfile

Ghi cụm từ được hiển thị ra một tờ giấy. Bạn cũng nên ghi lại khóa công khai, lệnh chính xác đã dùng để tạo khóa và solana-keygen --version. Lưu ý rằng có nhiều cơ chế khác nhau để chuyển cụm mật khẩu thành khóa riêng tư. Trước khi cất tờ giấy, hãy xác minh rằng bạn có thể dùng nó để truy cập khóa:

Mã
$ solana-keygen verify <PUBKEY> ASK

Tuyệt đối không được làm mất tờ giấy ghi khóa vì không có cách nào khác để khôi phục khóa. Đừng quên xóa cụm từ khóa khỏi bộ đệm terminal.

Tùy chọn: Dò tìm khóa tùy chỉnh cho tài khoản bỏ phiếu

Một số validator dùng khóa công khai tùy chỉnh cho khóa danh tính hoặc khóa tài khoản bỏ phiếu. Ví dụ, validator Helius dùng HEL1USMZKAL2odpNBj2oCjffnFGaYwmbGmyewGv1e2TU làm khóa danh tính và he1iusunGwqrNtafDtLdhsUQDFvo13z9sUa36PauBtk cho tài khoản bỏ phiếu. Bạn có thể tạo các khóa này bằng lệnh con grind như sau:

Mã
$ solana-keygen grind --starts-with PREF1X:1

Lệnh con này sẽ tạo một khóa có khóa công khai bắt đầu bằng PREF1X, có thể là bất kỳ chuỗi base58 hợp lệ nào bạn chỉ định. Cơ chế hoạt động là liên tục tạo khóa cho đến khi tìm được khóa đáp ứng tiêu chí, vì vậy thời gian cần thiết tăng theo cấp số nhân dựa trên độ dài tiền tố mong muốn.

Không thể thay đổi khóa tài khoản bỏ phiếu, đặc biệt là sau khi bạn đã công bố khóa và mọi người bắt đầu ủy quyền stake cho khóa đó. Vì vậy, nếu muốn có khóa tùy chỉnh thì đây là lúc để tạo.

Tạo tài khoản bỏ phiếu từ các cặp khóa

Sau khi các cặp khóa đã sẵn sàng, hãy tạo tài khoản bỏ phiếu như sau:

Mã
$ solana create-vote-account --fee-payer ~/.config/solana/id.json vote_account.json identity.json withdrawal.json

Ở đây, vote_account.json là cặp khóa tài khoản bỏ phiếu, identity.json là cặp khóa danh tính validator, withdrawal.json là cặp khóa có quyền rút tiền và ~/.config/solana/id.json là ví chứa SOL dùng để thanh toán phí tạo tài khoản bỏ phiếu.

Nếu dùng ví giấy cho cặp khóa rút tiền, lệnh của bạn có thể trông như sau:

Mã
$ solana create-vote-account --fee-payer ~/.config/solana/id.json vote_account.json identity.json ASK

Bạn có thể kiểm tra tài khoản bỏ phiếu này (hoặc bất kỳ tài khoản bỏ phiếu nào) bằng lệnh sau:

Mã
$ solana vote-account <PUBKEY>

Đến đây, cặp khóa danh tính sẽ được dùng để chạy server validator, cặp khóa rút tiền phải được giữ bí mật và chỉ dùng để rút tiền hoặc thay đổi tài khoản bỏ phiếu, còn cặp khóa tài khoản bỏ phiếu sẽ không cần dùng nữa (nhưng đừng quên khóa công khai).

Bạn có thể tìm hiểu thêm về tài khoản bỏ phiếu tại đây.

Tùy chọn: Đặt mức hoa hồng

create-vote-account nhận mức hoa hồng làm tham số tùy chọn, nhưng giá trị mặc định là 100%, ngụ ý validator của bạn là riêng tư. Nếu muốn thu hút stake bên ngoài cho validator mainnet, bạn có thể cần chọn mức hoa hồng thấp hơn.

Giả sử khóa công khai của tài khoản bỏ phiếu là <VOTE_ACCT_PUBKEY>, bạn muốn thanh toán phí thay đổi từ ví có tiền id.json, dùng khóa rút tiền của ví giấy và muốn đặt hoa hồng ở mức 8%, bạn có thể thực hiện như sau:

Mã
$ solana vote-update-commission --fee-payer ~/.config/solana/id.json <VOTE_ACCT_PUBKEY> 8 ASK

Tùy chọn: Thêm ví đa chữ ký

Ví đa chữ ký là một loại ví đặc biệt yêu cầu chữ ký từ một hoặc nhiều ví khác để thực thi transaction. Bạn có thể dùng ví này để chia sẻ quyền quản lý tài khoản bỏ phiếu giữa nhiều người. Ngay cả khi tự quản lý validator, bạn vẫn nên cân nhắc ví đa chữ ký để dễ dàng thêm người khác vào tài khoản bỏ phiếu sau này.

Squads là công cụ đa chữ ký dành cho Solana, có chức năng chuyên biệt để quản lý validator dùng chung. Để thiết lập validator trong Squads:

  1. Thiết lập trình duyệt với một plugin ví Solana được hỗ trợ, chẳng hạn như Backpack
  2. Truy cập dApp Squads
  3. Cấu hình một squad với những người và thông số bạn muốn cho validator
  4. Chuyển đến Developers > Validators và làm theo quy trình để thêm validator
  5. Bạn sẽ được yêu cầu dán khóa riêng tư dùng để rút tiền; khóa này sẽ được dùng để chuyển khóa rút tiền hiện có sang khóa rút tiền dùng chung của squad
  6. Xác minh khóa công khai rút tiền đã cập nhật bằng solana vote-account

Bạn có thể tìm hiểu thêm về cách dùng Squads để quản lý validator dùng chung tại đây.

Cấu hình máy làm server validator

Các bước sẽ khác nhau tùy theo trạng thái ban đầu của máy, nhưng mục tiêu cuối cùng là:

  • Cài đặt và cập nhật phiên bản LTS mới nhất của Ubuntu
    • Các bản phân phối Linux khác (chẳng hạn dựa trên Debian) cũng có thể hoạt động, nhưng mọi ví dụ ở đây đều giả định bạn dùng Ubuntu; càng khác Ubuntu, bạn càng phải sửa đổi nhiều lệnh
  • Cấu hình quyền truy cập SSH ở cấp người dùng
  • Thiết lập người dùng dịch vụ sol
  • Tinh chỉnh hệ thống và thiết lập ổ cứng

Thiết lập hệ thống và người dùng

Đảm bảo hệ thống đã được cập nhật và tạo người dùng dịch vụ sol:

Mã
$ sudo apt update
$ sudo apt upgrade
$ sudo adduser sol

Bạn cũng có thể cấp quyền truy cập sudo (điều này đánh đổi một phần bảo mật để lấy sự tiện lợi):

Mã
$ sudo adduser sol sudo

Tinh chỉnh hệ thống

Thêm các thiết lập do Solana Labs khuyến nghị vào sysctl và systemd để tăng giới hạn số lượng bộ mô tả tệp, tệp ánh xạ bộ nhớ và các tài nguyên khác được phép. Khi validator của bạn là leader hiện tại hoặc sắp tới của khối, toàn bộ mạng sẽ cố gắng mở kết nối và gửi transaction đến đó, vì vậy giới hạn bộ mô tả tệp đặc biệt quan trọng.

Bạn có thể xem các thiết lập tinh chỉnh hệ thống mới nhất do Solana Labs khuyến nghị tại đây.

Cấu hình ổ cứng

Khuyến nghị hiện tại của Solana Labs là dùng 2 ổ SSD vật lý có dung lượng từ 1TB trở lên: một ổ cho dữ liệu tài khoản và một ổ cho dữ liệu ledger (hệ điều hành cũng có thể nằm trên ổ này). Họ không khuyến nghị lưu tài khoản và ledger trên cùng một ổ do yêu cầu IOPS cao.

Đây là hướng dẫn của họ về cách thiết lập 2 ổ đĩa.

Một cách khác để tận dụng nhiều ổ đĩa nhằm tăng IOPS khả dụng là kết hợp chúng thành một volume RAID0 duy nhất và để bộ điều khiển RAID tối ưu vị trí lưu các stripe nhằm tối đa hóa năng lực IOPS của cả hai ổ. Cách này cũng cho phép bổ sung ổ đĩa vào RAID để tăng thêm IOPS khi cần. Chúng tôi chưa gặp vấn đề hiệu năng nào khi chạy validator với cấu hình này.

Nếu dùng một volume RAID0 duy nhất, bạn chỉ cần thiết lập các thư mục dữ liệu validator trên volume. Có thể tạo chúng ngay trong thư mục home của người dùng sol:

Mã
$ sudo su sol
$ mkdir -p /home/sol/accounts
$ mkdir -p /home/sol/ledger
$ mkdir -p /home/sol/snapshots
$ mkdir -p /home/sol/logs

Cài đặt Solana CLI trên server validator

Lặp lại các bước ở trên để cài đặt Solana CLI, nhưng lần này thực hiện trên server validator với tư cách người dùng sol. Khi cài đặt trên server validator, bạn nên biên dịch từ mã nguồn.

Nếu dùng công cụ cài đặt Solana, bạn có thể dùng lệnh solana-install để cập nhật lên các phiên bản mới sau này (việc này là bắt buộc để tiếp tục tham gia cụm).

Tùy chọn: Cài đặt client validator Jito

Jito Labs đã phân nhánh validator Solana và phát hành phiên bản riêng, bổ sung khả năng Maximal Extractable Value (MEV). MEV là ý tưởng thêm hoặc sắp xếp lại các transaction trong khối bạn đang tạo để kiếm lợi nhuận. Jito đã tạo ra một thị trường cho những người sẵn sàng trả thêm phí để thực hiện việc này (”searchers”). Nếu chạy validator Jito, họ sẽ gửi cho bạn các gói transaction MEV để validator đưa vào những khối mà nó tạo ra, đổi lại bạn nhận được tiền tip bổ sung.

Validator Jito làm tăng độ phức tạp và độ trễ trong quá trình vận hành validator, nhưng bổ sung tiền tip MEV làm nguồn doanh thu. Cấu hình phần lớn tương tự, ngoại trừ việc bạn cần tìm hiểu thêm về:

  • Thu thập và quản lý tiền tip MEV
  • Độ trễ từ block engine Jito
  • Khả năng phải chạy một relayer Jito

Bạn có thể xem hướng dẫn cài đặt client validator của Jito tại đây.

Tạo script chạy validator

Tạo shell script validator.sh

Trước tiên, sao chép cặp khóa danh tính validator vào server từ xa:

Mã
$ scp identity.json remoteuser@your.validator.host:/home/sol

Cách tiêu chuẩn để quản lý cấu hình validator là gói cấu hình trong một shell script. Hãy tạo một script làm điểm khởi đầu và cấp quyền thực thi cho nó:

Mã
$ sudo su sol
$ cat >/home/sol/validator.sh <<EOF
#!/bin/bash
PATH=/home/sol/.local/share/solana/install/active_release/bin:$PATH
exec solana-validator \
    --identity /home/sol/identity.json \
    --vote-account <VOTE_ACCOUNT_PUBKEY> \
    --known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
    --known-validator 7XSY3MrYnK8vq693Rju17bbPkCN3Z7KvvfvJx4kdrsSY \
    --known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
    --known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
    --only-known-rpc \
    --log /home/sol/logs/solana-validator.log \
    --accounts /home/sol/accounts \
    --snapshots /home/sol/snapshots \
    --ledger /home/sol/ledger \
    --rpc-port 8899 \
    --dynamic-port-range 8000-8020 \
    --entrypoint entrypoint.testnet.solana.com:8001 \
    --entrypoint entrypoint2.testnet.solana.com:8001 \
    --entrypoint entrypoint3.testnet.solana.com:8001 \
    --expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \
    --wal-recovery-mode skip_any_corrupted_record \
    --limit-ledger-size
EOF
$ chmod +x /home/sol/validator.sh

Các thiết lập này phù hợp để khởi động nhanh chóng và an toàn trên testnet. Sau khi hoàn tất mọi thiết lập, bạn cần quay lại script này và chạy solana-validator --help để xem danh sách đầy đủ các tùy chọn cấu hình rồi tùy chỉnh.

Hãy thử khởi động validator bằng script:

Mã
$ ./validator.sh

Trong lần khởi động đầu tiên, validator sẽ cần đồng bộ với trạng thái hiện tại của cụm.

Xác minh validator đang chạy đúng cách

Bạn có thể theo dõi tiến trình hiển thị công khai của validator mình hoặc bất kỳ validator nào từ mọi nơi trong cụm bằng lệnh:

Mã
$ solana catchup <IDENTITY_PUBKEY>

Bạn có thể xem tiến trình nội bộ từ một phiên với tư cách người dùng sol bằng lệnh:

Mã
$ solana-validator --ledger /home/sol/ledger monitor

Bạn có thể tìm hiểu thêm về cách kiểm tra validator có kết nối đúng với cụm hay không tại đây.

Thiết lập validator làm tiến trình daemon

Tạo tệp systemd unit để quản lý validator dưới dạng daemon:

Mã
$ sudo cat >/etc/systemd/system/sol.service <<EOF
[Unit]
Description=Solana Validator
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=sol
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
ExecStart=/home/sol/validator.sh

[Install]
WantedBy=multi-user.target
EOF

Đảm bảo tiến trình ./validator.sh đã gọi trước đó không còn chạy, sau đó khởi động validator dưới dạng daemon:

Mã
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now sol

Thiết lập giám sát và bảo mật

Tắt xác thực bằng mật khẩu

Trong tệp /etc/ssh/sshd_config, bạn có thể cấu hình daemon SSH không chấp nhận phương thức đăng nhập bằng mật khẩu hoặc challenge-response:

Mã
...
PasswordAuthentication no
ChallengeResponseAuthentication no
...

Đừng quên tải lại daemon sshd với cấu hình mới:

Mã
$ sudo systemctl reload sshd

Thêm fail2ban và ufw

fail2ban hoạt động ngay sau khi cài đặt để chặn mọi kết nối xác thực thất bại nhiều lần:

Mã
$ sudo apt install fail2ban

ufw là tường lửa đi kèm hệ thống và có thể được thiết lập bằng vài lệnh (giả định cấu hình validator cuối cùng dùng các cổng và dải cổng mặc định, đồng thời chạy SSH trên cổng 22):

Mã
$ sudo ufw allow 22/tcp
$ sudo ufw allow 8000:10000/tcp
$ sudo ufw allow 8000:10000/udp
$ sudo ufw enable

Cặp khóa danh tính validator

Trên thực tế, hầu hết validator giữ khóa danh tính trên server validator để script validator có thể chạy và khởi động lại mà không cần con người can thiệp. Tuy nhiên, bạn có thể dùng ASK hoặc prompt:// để truyền khóa danh tính vào validator, nhờ đó không phải lưu khóa trong hệ thống tệp của server validator. Cách này làm tăng chi phí vận hành và rủi ro vì giờ đây con người phải thay thế systemd và quản lý thủ công tiến trình daemon, nhưng vẫn có thể thực hiện.

Chiến lược tốt nhất để bảo vệ cặp khóa danh tính là chỉ nạp lượng SOL tối thiểu đủ trang trải chi phí bỏ phiếu trong vài ngày.

Shinobi Systems đã phát hành một số công cụ hỗ trợ quản lý tài khoản bỏ phiếu, bao gồm tính năng tự động chuyển số dư ra khỏi tài khoản bỏ phiếu mà không cần dùng khóa rút tiền mỗi lần.

Xem trang của Solana Labs về bảo mật validator để biết thêm mẹo.

Thiết lập giám sát bằng Watchtower

solana-watchtower có trong bộ công cụ Solana CLI và có thể dùng để cảnh báo các sự cố với validator cũng như toàn bộ cụm. Bạn có thể cấu hình và chạy công cụ này tương tự validator bằng cách tạo script watchtower.sh.

Đây là ví dụ dùng PagerDuty để cảnh báo và ghi log vào watchtower.log:

Mã
$ cat >watchtower.sh <<EOF
#!/bin/bash
PATH=/home/solana/.local/share/solana/install/active_release/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

exec &gt;>watchtower.log \\
  env PAGERDUTY_INTEGRATION_KEY=<PAGERDUTY_KEY> \\
solana-watchtower \\
  --validator-identity <IDENTITY_PUBKEY> \\
  --monitor-active-stake \\
  --interval 20 \\
  --minimum-validator-identity-balance 3 \\
  --url https://api.testnet.solana.com
EOF

Solana Labs cũng có ví dụ về cách thiết lập bằng Telegram để nhận cảnh báo.

Không nên thiết lập watchtower trên cùng máy với validator vì bạn sẽ không nhận được thông báo nếu cả máy ngừng hoạt động. Tuy nhiên, cách này vẫn có thể chấp nhận được nếu bạn triển khai nhiều hình thức giám sát và có thể theo dõi riêng các trường hợp đó.

Không giống validator, watchtower không tiêu tốn nhiều tài nguyên và có thể chạy từ môi trường điện toán đám mây hoặc serverless như các dịch vụ do AWS hoặc GCP cung cấp.

Tùy chọn: Giám sát dựa vào cộng đồng

Nhiều thành viên trong cộng đồng Solana cũng giám sát cụm và sẵn sàng cung cấp cảnh báo dựa trên các điều kiện tương tự watchtower.

Stakewiz cung cấp tính năng giám sát validator Solana qua Telegram. Ví dụ, nếu muốn nhận cảnh báo về validator Helius, bạn có thể truy cập trang của validator, sau đó nhấp vào “+ Tạo cảnh báo”.

Lưu ý rằng hoạt động giám sát dựa vào cộng đồng được thiết kế để người dùng nắm được sự cố với các validator mà họ stake. Là đơn vị vận hành validator, bạn không nên chỉ dựa vào người khác để giám sát dịch vụ của mình.

Tùy chọn: Giám sát tùy chỉnh qua phương thức RPC getHealth

Nếu muốn kiểm tra trực tiếp tình trạng của validator, giao diện JSON RPC của validator có một phương thức tên là getHealth. Bạn có thể thăm dò phương thức này để biết validator có hoạt động bình thường hay không và xem thông tin về mọi sự cố.

Tùy chọn: Giải pháp giám sát của bên thứ ba

Sau khi validator đã mở rộng quy mô và có dòng doanh thu cần bảo vệ, bạn có thể cân nhắc các giải pháp giám sát SaaS cấp thương mại như Datadog hoặc Splunk. Những giải pháp này thường hoạt động bằng cách chạy tiến trình daemon trên server để giám sát log và chỉ số cục bộ rồi xuất chúng tới nhà cung cấp, hoặc bằng cách công khai getHealth hay một endpoint trạng thái tương tự để nhà cung cấp thăm dò validator từ xa.

Thêm stake vào validator

Mạng Solana đạt được đồng thuận thông qua quy trình bỏ phiếu proof-of-stake (PoS). Điều này có nghĩa là trọng số phiếu bầu của validator tỷ lệ thuận với lượng SOL stake được ủy quyền cho validator đó, tương tự cơ chế của một công ty cổ phần nếu coi SOL đã stake là cổ phần. Ngoài quyền bỏ phiếu, tần suất validator của bạn trở thành leader khối cũng tỷ lệ thuận với lượng SOL được stake vào đó.

Có nhiều ví, dApp và công cụ khác giúp bạn dễ dàng stake SOL vào các validator hiện có, nhưng dưới đây là các bước thực hiện thủ công bằng CLI:

  1. Tạo 3 cặp khóa bằng solana-keygen new
  2. Tạo tài khoản stake từ các cặp khóa bằng solana create-stake-account
  3. Chuyển một lượng SOL vào tài khoản stake (có thể dùng solana aidrop trên testnet)
  4. Ủy quyền lượng stake đã gửi cho một validator bằng solana delegate-stake
  5. Chờ epoch tiếp theo để stake được kích hoạt và kiểm tra bằng solana stake-account

Tạo cặp khóa và tài khoản stake

Quy trình tạo các cặp khóa và tài khoản stake tương tự quy trình tạo tài khoản bỏ phiếu, với 3 cặp khóa như sau:

  1. Cặp khóa có quyền stake - cho phép thực hiện các tác vụ vận hành trên tài khoản stake như ủy quyền, hủy ủy quyền, chia tách và hợp nhất
  2. Cặp khóa tài khoản stake - khóa công khai xác định chính tài khoản stake (không cần khóa riêng tư sau khi tài khoản stake được tạo)
  3. Cặp khóa rút tiền - cặp khóa chính để rút stake và đặt lại các cặp khóa có thẩm quyền trên tài khoản stake. Hãy bảo quản cẩn thận và cân nhắc dùng ví phần cứng, ví giấy hoặc ví đa chữ ký

Bạn nên dùng các khóa riêng cho testnet và mainnet vì những lý do tương tự tài khoản bỏ phiếu. Tuy nhiên, có thể tái sử dụng một cặp khóa có quyền stake và quyền rút tiền duy nhất cho nhiều tài khoản stake trong cùng cụm. Dùng cùng khóa cho các tài khoản stake là điều kiện tiên quyết để hợp nhất chúng.

Đây là ví dụ về cách tạo tài khoản stake với 1 SOL trên testnet, dùng ví dựa trên tệp cho các cặp khóa, nạp tiền từ ví id.json và ủy quyền stake đó cho validator mới của bạn:

Mã
$ solana-keygen new -o stake_auth.json
$ solana-keygen new -o stake_acct_1.json
$ solana-keygen new -o stake_withdrawal_auth.json
$ solana airdrop 1 ~/.config/solana/id.json
$ solana create-stake-account --from ~/.config/solana/id.json stake_acct_1.json 1 --stake-authority stake_auth.json --withdraw-authority stake_withdraw_auth.json --fee-payer ~/.config/solana/id.json
$ solana delegate-stake --stake-authority stake_auth.json <STAKE_ACCT_1_PUBKEY> <VOTE_ACCT_PUBKEY> --fee-payer ~/.config/solana/id.json

Giờ bạn có thể kiểm tra xem stake có đang được kích hoạt hay không và sẽ hoạt động ở epoch nào:

Mã
$ solana stake-account <STAKE_ACCT_1_PUBKEY>

Khi epoch tiếp theo bắt đầu và stake đã hoạt động, phiếu bầu của validator sẽ bắt đầu được tính. Bạn có thể xem các phiếu bầu gần đây trong kết quả của lệnh solana vote-account. Nếu chỉ thêm vài SOL như trong ví dụ, đừng kỳ vọng validator của bạn sẽ trở thành leader khối.

Việc bỏ phiếu tốn khoảng 1–2 SOL mỗi ngày. Vì vậy, tại thời điểm viết bài, chỉ riêng việc bỏ phiếu trên mainnet đã khiến validator tốn khoảng 200–300 USD/ngày.

(Xem thêm thông tin về ủy quyền stake và quản lý tài khoản stake).

Công bố thông tin của validator

Nếu duyệt các thư mục validator Solana phổ biến như validators.app, bạn sẽ thấy tất cả validator đều có tên, mô tả, logo và metadata khác. Dữ liệu này được công bố on-chain cho mọi validator đã đăng ký trong từng cụm và bạn có thể xem bằng cách chạy solana validator-info get.

Sau khi validator hoạt động, bạn nên công bố thông tin của mình, đặc biệt khi chạy trên mainnet và muốn thu hút stake.

Đây là ví dụ cơ bản về cách công bố metadata:

Mã
$ solana validator-info publish "My Awesome Validator" \
--website "https://awesome-validator.xyz/" \
--icon-url "https://awesome-validator.xyz/icon360x360.png" \
--keypair validator_identity.json \
--details "The best validator in the world!"

Khi bản ghi metadata được tạo, nó sẽ có khóa riêng. Bạn có thể cập nhật khóa này sau bằng đối số --info-pubkey. Lưu ý rằng URL biểu tượng có độ dài tối đa 80 ký tự. Bạn có thể tìm hiểu thêm về cách công bố thông tin và metadata của validator tại đây.

Kết luận

Xin chúc mừng! Nếu đã làm theo hướng dẫn đến đây, validator Solana của riêng bạn hẳn đã hoạt động. Chào mừng bạn đến với Cộng đồng Validator Solana!

Tài nguyên bổ sung

Đăng ký nhận tin từ Helius

Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài