Основы Стейкинга¶
Стейкинг позволяет вам стать валидатором в сети ComputeChain и участвовать в консенсусе.
Требования¶
Минимальный стейк¶
По сетям:
| Сеть | Минимальный стейк |
|---|---|
| Devnet | 1,000 CPC |
| Testnet | 100,000 CPC |
| Mainnet | 100,000 CPC |
Максимум валидаторов¶
| Сеть | Максимум валидаторов |
|---|---|
| Devnet | 5 |
| Testnet | 21 |
| Mainnet | 100 |
Транзакция STAKE¶
Структура транзакции¶
Тип: TxType.STAKE
Поля:
Transaction(
tx_type=TxType.STAKE,
from_address="cpc1...", # Адрес отправителя
to_address=None, # Не используется для стейкинга
amount=1500 * 10**18, # Сумма стейка (в wei)
fee=gas_limit * gas_price,
nonce=...,
gas_price=1000,
gas_limit=40000, # GAS_PER_TYPE[STAKE]
payload={
"pub_key": "02a1b2c3..." # Публичный ключ валидатора (обязательно!)
}
)
Обязательные поля¶
pub_key в payload:
- Публичный ключ валидатора (hex строка)
- Используется для генерации consensus адреса (
cpcvalcons...) - Транзакция будет отклонена без
pub_key
Автоматическое заполнение:
CLI автоматически берет публичный ключ из keystore:
Процесс Стейкинга¶
Шаг 1: Создать ключ¶
Шаг 2: Пополнить баланс¶
ALICE_ADDR=$(./cpc-cli keys show alice | grep address | awk '{print $2}' | tr -d '",')
./cpc-cli tx send $ALICE_ADDR 2000 --from faucet --node http://localhost:8000
Важно: Баланс должен покрывать: - Сумму стейка (минимум 1,000 CPC для devnet) - Комиссию за транзакцию (~40,000 gas * gas_price)
Шаг 3: Отправить STAKE транзакцию¶
Что происходит:
- CLI создает
STAKEтранзакцию - Автоматически добавляет
pub_keyиз keystore - Рассчитывает
gas_limit(40,000) иfee - Подписывает транзакцию
- Отправляет в мемпул через RPC
/tx/send
Шаг 4: Ожидание включения в блок¶
Время ожидания:
- Devnet: ~10 секунд (1 блок)
- После включения, валидатор создан, но еще не активен
Шаг 5: Активация валидатора¶
Эпоха:
- Devnet: каждые 10 блоков (~100 секунд)
- Testnet: каждые 100 блоков (~50 минут)
- Mainnet: каждые 72 блока (~72 минуты)
Что происходит в эпоху:
- Пересчет набора валидаторов
- Сортировка по стейку (по убыванию)
- Выбор топ-N валидаторов (N = max_validators)
- Активация валидаторов (
is_active = True) - Деактивация валидаторов вне топ-N
Проверка статуса:
Увеличение стейка¶
Добавление к существующему стейку¶
Просто отправьте еще одну STAKE транзакцию:
Что происходит:
- Если валидатор с таким
pub_keyуже существует, стейк добавляется val.power += tx.amount- Валидатор остается в наборе (если был активен)
Адрес для наград (Reward Address)¶
Установка адреса для наград¶
По умолчанию:
reward_addressустанавливается вtx.from_address(адрес отправителя)- Награды за блоки идут на этот адрес
Изменение (Future):
Планируется возможность изменения reward_address через отдельную транзакцию.
Стоимость газа¶
Комиссия за STAKE¶
Стоимость газа: 40,000 gas
Пример расчета:
Минимальный баланс для стейкинга:
Примеры¶
Полный сценарий (Node B)¶
# 1. Импорт ключа faucet с Node A
./cpc-cli keys import faucet --private-key $(cat .node_a/faucet_key.hex)
# 2. Создать Alice
./cpc-cli keys add alice
# 3. Получить адрес Alice
ALICE_ADDR=$(./cpc-cli keys show alice | grep address | awk '{print $2}' | tr -d '",')
# 4. Пополнить аккаунт
./cpc-cli tx send $ALICE_ADDR 2000 --from faucet --node http://localhost:8000
# 5. Застейкать
./cpc-cli tx stake 1500 --from alice --node http://localhost:8000
# 6. Ждать эпоху (10 блоков)
sleep 120
# 7. Проверить статус
./cpc-cli query validators --node http://localhost:8000
Следующие шаги¶
- Жизненный цикл валидатора — Жизненный цикл валидатора
- Награды — Награды за валидацию
- Настройка ноды — Запуск ноды валидатора