IV: Đăng ký làm Validator node
Yêu cầu.
1. Vận hành một Cardano Stake Pool Operator (SPO):
– Cần có tệp khóa lạnh (cold.skey) của SPO.
– Cần một UTXO hợp lệ và tệp khóa thanh toán (payment.skey) để thanh toán phí giao dịch đăng ký.
2. Chạy các thành phần phụ thuộc của Partnerchain:
Cần truy cập tệp node.socket của Cardano-node và công cụ cardano-cli trên máy chủ.
Đảm bảo các cổng của Ogmios, Kupo và Postgres-db-sync hoạt động và đồng bộ đầy đủ.
3. Cài đặt Node.js và partner-chains-cli
a. Cài đặt node.js
– Cập nhập ubuntu
sudo apt update
– Cài đặt các công cụ cần thiết
sudo apt install curl gnupg2
– Tải và cài đặt script cài đặt NVM (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
– Kiểm tra cài đặt
command -v nvm
Cài đặt Node.js bằng NVM
– Cập nhật danh sách các phiên bản Node.js có sẵn
nvm install --lts
– Kiểm tra các phiên bản đã cài đặt
nvm list
– Cài đặt phiên bản Node.js 20.18 (hoặc phiên bản LTS gần nhất)
nvm install 20.18
– Sử dụng phiên bản đã cài đặt
nvm use 20.18
b. Cài đặt Partner-chains-cli
wget https://github.com/input-output-hk/partner-chains/releases/download/v1.1.0/linux_x86_64.zip
mkdir -p partner-chains-cli
mv linux_x86_64.zip partner-chains-cli/
cd partner-chains-cli
unzip linux_x86_64.zip
find . -name "*.zip" -exec unzip {} \; -exec rm {} \;
cd -
– Sử dụng partner-chains-cli
cd partner-chains-cli/
./partner-chains-cli --help
– Cấu hình partner-chains-cli cho Midnight testnet
Chạy đoạn mã bên dưới để tạo một tập tin /partner-chains-cli/partner-chains-cli-chain-config.json có nội dung sau:
#!/bin/bash
# Define the JSON content
json_content=$(cat <<EOF
{
"cardano": {
"network": 2,
"security_parameter": 432,
"active_slots_coeff": 0.05,
"first_epoch_number": 0,
"first_slot_number": 0,
"epoch_duration_millis": 86400000,
"first_epoch_timestamp_millis": 1666656000000
},
"chain_parameters": {
"chain_id": 23,
"genesis_committee_utxo": "f44d20261bd3e079cc76b4d9b32b3330fea793b465c490766df71be90e577d8a#0",
"threshold_numerator": 2,
"threshold_denominator": 3,
"governance_authority": "93f21ad1bba9ffc51f5c323e28a716c7f2a42c5b51517080b90028a6"
},
"cardano_addresses": {
"committee_candidates_address": "addr_test1wp9pehc6t5xem0ccsf7dhktw4hu749dfm83fxx6p8f4jzpqyh330x",
"d_parameter_policy_id": "f7e7b40ef803905a8567323f9d94fac536fe1cd3d8efbde5d249c5f7",
"permissioned_candidates_policy_id": "3e0a39f32961debeb7c5db0e5deb98833d70835fc7ec40a3185c4ae5"
}
}
EOF
)
# Create the file and write the JSON content to it
echo "$json_content" > partner-chains-cli-chain-config.json
# Check if the file was created successfully
if [ -f partner-chains-cli-chain-config.json ]; then
echo "File 'partner-chains-cli-chain-config.json' has been created successfully."
else
echo "Failed to create the file."
fi
4 Tạo Partner-chains keys
– Gọi khóa ./partner-chains-cli generate-keys và làm theo lời nhắc để tạo khóa:
./partner-chains-cli generate-keys
nó sẽ tạo những khóa sau và lưu vào kho lưu trữ của bạn:
→ an ECDSA Cross-chain key
→ an ED25519 Grandpa key
→ an SR25519 Aura key
It will also generate a network key for your node if needed.
> node base path ./data
⚙️ Generating Cross-chain (ecdsa) key
running external command: ./partner-chains-node key generate --scheme ecdsa --output-type json
💾 Inserting Cross-chain (ecdsa) key
running external command: ./partner-chains-node key insert --base-path ./data --scheme ecdsa --key-type crch --suri 'stool grace post demise peanut father town urban blast park drastic december'
💾 Cross-chain key stored at ./data/chains/partner_chains_template/keystore/637263680x022819ea59be6b9c88cb80855dc949f07eb572c8034780bb2e0829aa004c02f11c
⚙️ Generating Grandpa (ed25519) key
running external command: ./partner-chains-node key generate --scheme ed25519 --output-type json
💾 Inserting Grandpa (ed25519) key
running external command: ./partner-chains-node key insert --base-path ./data --scheme ed25519 --key-type gran --suri 'brick major burden pencil vibrant original eager safe luxury black nominee clock'
💾 Grandpa key stored at ./data/chains/partner_chains_template/keystore/6772616e0x6759f8654a090cf97dcd2fce4c447d01de6c2656180a066c5a1174f7f81437e7
⚙️ Generating Aura (sr25519) key
running external command: ./partner-chains-node key generate --scheme sr25519 --output-type json
💾 Inserting Aura (sr25519) key
running external command: ./partner-chains-node key insert --base-path ./data --scheme sr25519 --key-type aura --suri 'permit market squirrel glance say volume special admit art reject thank jungle'
💾 Aura key stored at ./data/chains/partner_chains_template/keystore/617572610xe076f823767754eed012ffbbe80de0133d78d4875bdf79d627bcd86d0e934162
🔑 The following public keys were generated and saved to the partner-chains-public-keys.json file:
{
"sidechain_pub_key": "0x022819ea59be6b9c88cb80855dc949f07eb572c8034780bb2e0829aa004c02f11c",
"aura_pub_key": "0xe076f823767754eed012ffbbe80de0133d78d4875bdf79d627bcd86d0e934162",
"grandpa_pub_key": "0x6759f8654a090cf97dcd2fce4c447d01de6c2656180a066c5a1174f7f81437e7"
}
You may share them with your chain governance authority
if you wish to be included as a permissioned candidate.
⚙️ Generating network key
running external command: ./partner-chains-node key generate-node-key --base-path ./data
command output: Generating key in "./data/chains/partner_chains_template/network/secret_ed25519"
command output: 12D3KooWSMEFnGDRmcUxyuf2fB4qQhGeq7ZYrifDhSYgL9phywzE
🚀 All done!
5 Đăng ký Midnight Validator Node
Quá trình đăng ký sẽ cần:
– Các cổng truy cập đến Ogmios, Kupo, và Postgres-db-sync.
– Đường dẫn tuyệt đối đến tệp SPO cold.skey,
– Đường dẫn tuyệt đối đến tệp payment.skey có UTXO hợp lệ có thể dùng để thanh toán phí giao dịch,
– Đường dẫn tuyệt đối đến node.socket của Cardano-node, và các cổng truy cập đến Ogmios, Kupo, và Postgres-db-sync.
a. Tạo UTXO đăng ký.
– Sao chép payment.vkey vào docker container
docker cp /home/priv/payment.vkey cardano-node:/payment.vkey
docker exec cardano-node rm -f /home/priv/payment.vkey
Nếu sử dụng cấu hình docker-compose của partner-chain-dependencies thì node.socket sẽ nằm tại /home/YOU_USER_NAME/ipc/node.socket
Chạy lệnh ./partner-chains-cli register1 và làm theo hướng dẫn.
./partner-chains-cli register1
⚙️ Registering as a committee candidate (step 1/3)
> cardano cli executable docker exec cardano-node cardano-cli
> path to the cardano node socket file /home/stev/ipc/node.socket
⚙️ Set `CARDANO_NODE_SOCKET_PATH` environment variable to `/home/stev/ipc/node.socket`
> path to the payment verification file /payment.vkey
⚙️ Deriving address...
running external command: docker exec cardano-node cardano-cli address build --payment-verification-key-file /home/payment.vkey --testnet-magic 2
⚙️ Address: addr_test1vztfq6l59c97fqpu9qkzwj7fj478544klcqy64m85tnn5dqmcg7f4
⚙️ Querying UTXOs...
running external command: docker exec cardano-node cardano-cli query utxo --out-file /dev/stdout --address addr_test1vztfq6l59c97fqpu9qkzwj7fj478544klcqy64m85tnn5dqmcg7f4 --testnet-magic 2
> Select UTXO to use for registration 330577490dc7b1ec893a0fdaad3ca144b47c06208d6935ae6b17eb9f
bc955717#0 (10000000000 lovelace)
Please do not spend this UTXO, it needs to be consumed by the registration transaction.
Run the following command to generate signatures on the next step. It has to be executed on the machine with your SPO cold signing key.
./partner-chains-cli register2 \
--chain-id 24 \
--threshold-numerator 2 \
--threshold-denominator 3 \
--governance-authority 0x93f21ad1bba9ffc51f5c323e28a716c7f2a42c5b51517080b90028a6 \
--genesis-committee-utxo f44d20261bd3e079cc76b4d9b32b3330fea793b465c490766df71be90e577d8a#0 \
--registration-utxo 330577490dc7b1ec893a0fdaad3c...#0 \
--aura-pub-key 0xe076f823767754eed012ffbbe80de013... \
--grandpa-pub-key 0x6759f8654a090cf97dcd2fce4c447d... \
--sidechain-pub-key 0x022819ea59be6b9c88cb80855... \
--sidechain-signature 9fc29579fc1fa68e91216a1ae9a7d5777095fd...
Lệnh register1 sẽ trả về lệnh tiếp theo register2. Bạn chỉ cần sao chép và dán register2 để tiếp tục quá trình đăng ký.
b. Tạo chữ ký đăng ký
– Đường dẫn đến file SPO cold.skey sẽ cần thiết cho bước này.
– Sao chép và dán register2 lệnh được tạo ra từ bước register1:
./partner-chains-cli register2 \
--chain-id 24 \
--threshold-numerator 2 \
--threshold-denominator 3 \
--governance-authority 0x93f21ad1bba9ffc51f5c323e28a716c7f2a42c5b51517080b90028a6 \
--genesis-committee-utxo f44d20261bd3e079cc76b4d9b32b3330fea793b465c490766df71be90e577d8a#0 \
--registration-utxo 330577490dc7b1ec893a0fdaad3ca144...#0 \
--aura-pub-key 0xe076f823767754eed012ffbbe80de0133d78d4875bdf79d627bcd86d0e934162 \
--grandpa-pub-key 0x6759f8654a090cf97dcd2fce4c... \
--sidechain-pub-key 0x022819ea59be6b9c88cb80855dc949f07eb572... \
--sidechain-signature 9fc29579fc1fa68e91216a1ae9a7d5777095fd...
⚙️ Register as a committee candidate (step 2/3)
This command will use SPO cold signing key for signing the registration message.
> Path to mainchain signing key file /home/stev/priv/cold.skey
To finish the registration process, run the following command on the machine with the partner chain dependencies running:
./partner-chains-cli register3 \
--chain-id 24 \
--threshold-numerator 2 \
--threshold-denominator 3 \
--governance-authority 0x93f21ad1bba9ffc51f5c323e28a716c7f2a42c5b51517080b90028a6 \
--genesis-committee-utxo f44d20261bd3e079cc76b4d9b32b3330fea793b465c490766df71be90e577d8a#0 \
--registration-utxo 330577490dc7b1ec893a0fdaad3ca144b4...#0 \
--aura-pub-key 0xe076f823767754eed012ffbbe80de0133d78... \
--grandpa-pub-key 0x6759f8654a090cf97dcd2fce4c...\
--sidechain-pub-key 0x022819ea59be6b9c88cb80855dc... \
--sidechain-signature 9fc29579fc1fa68e91216a1ae9a7d5777095fd... \
--spo-public-key 194d3d0b02bed63af74304d350d7... \
--spo-signature 9ed3f5e3c9c2474f7828472d67f571234eba6c82...
Lệnh register2 sẽ trả về lệnh tiếp theo register3. Bạn chỉ cần sao chép và dán register3 để tiếp tục quá trình đăng ký.
c. Gửi giao dịch đăng ký
Kupo, Ogmios, và Postgres-db-synccác cổng sẽ cần thiết cho register3 .
– Chỉ cần sao chép và dán lệnh register3 và làm theo lời nhắc để gửi đăng ký:
./partner-chains-cli register3 \
--chain-id 24 \
--threshold-numerator 2 \
--threshold-denominator 3 \
--governance-authority 0x93f21ad1bba9ffc51f5c323e28a716c7f2a42c5b51517080b90028a6 \
--genesis-committee-utxo f44d20261bd3e079cc76b4d9b32b3330fea793b465c49076...#0 \
--registration-utxo 330577490dc7b1ec893a0fdaad3ca144b47c...#0 \
--aura-pub-key 0xe076f823767754eed012ffbbe80de0133d78d487.... \
--grandpa-pub-key 0x6759f8654a090cf97dcd2fce4c447d01... \
--sidechain-pub-key 0x022819ea59be6b9c88cb80855dc949f07e... \
--sidechain-signature 9fc29579fc1fa68e91216a1ae9a7d5777095fd4c559a9e7db662dca5bbd026ec56d3... \
--spo-public-key 194d3d0b02bed63af74304d350d770e02413cd36e98f... \
--spo-signature 9ed3f5e3c9c2474f7828472d67f571234eba6c82e908e5...
e. Xác minh đăng ký
Đăng ký sẽ hợp lệ sau n + 2 epoch của chuỗi chính. Để kiểm tra epoch hiện tại:
curl -L -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"method": "sidechain_getStatus",
"params": [],
"id": 1
}' https://rpc.testnet.midnight.network | jq
ví dụ đầu ra:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 297 100 193 100 104 1492 804 --:--:-- --:--:-- --:--:-- 2302
{
"jsonrpc": "2.0",
"result": {
"sidechain": {
"epoch": 240617,
"slot": 288740819,
"nextEpochTimestamp": 1732449600000
},
"mainchain": {
"epoch": 761,
"slot": 65788916,
"nextEpochTimestamp": 1732492800000
}
},
"id": 1
}
Node Validator của bạn sẽ được đóng block sau 2 epoch kể từ epoch 761
Truy vấn:
curl -L -X POST -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"method": "sidechain_getAriadneParameters",
"params": [763],
"id": 1
}' https://rpc.testnet.midnight.network | jq
Tìm kiếm đăng ký của bạn trong
“candidateRegistrations”: {). Đảm bảo bạn thấy key chuỗi đối tác của mình trong đăng ký tại bước ./partner-chains-cli generate-keys và “isValid”: true
Nguồn tham khảo: https://docs.midnight.network/