Типы транзакций¶
Справочник по типам транзакций в ComputeChain.
TRANSFER¶
Тип: TxType.TRANSFER
Назначение: Перевод токенов CPC между аккаунтами
Gas Cost: 21,000 gas
Структура:
Transaction(
tx_type=TxType.TRANSFER,
from_address="cpc1sender...",
to_address="cpc1recipient...",
amount=100 * 10**18, # 100 CPC (в wei)
fee=gas_limit * gas_price,
nonce=1,
gas_price=1000,
gas_limit=21000,
timestamp=1700000000,
pub_key="02a1b2c3...",
payload={}
)
Обязательные поля:
from_address: Адрес отправителя (cpc1...)to_address: Адрес получателя (cpc1...)amount: Сумма перевода (в wei, минимум 0)nonce: Номер транзакции отправителяpub_key: Публичный ключ отправителя
Валидация:
- Баланс отправителя >= amount + fee
- Nonce должен быть следующим в последовательности
- Подпись должна быть валидной
to_addressне должен быть пустым
Пример:
STAKE¶
Тип: TxType.STAKE
Назначение: Стать валидатором или увеличить стейк
Gas Cost: 40,000 gas
Структура:
Transaction(
tx_type=TxType.STAKE,
from_address="cpc1sender...",
to_address=None,
amount=1500 * 10**18, # 1500 CPC (в wei)
fee=gas_limit * gas_price,
nonce=1,
gas_price=1000,
gas_limit=40000,
timestamp=1700000000,
pub_key="02a1b2c3...",
payload={
"pub_key": "02a1b2c3..." # Публичный ключ валидатора (обязательно!)
}
)
Обязательные поля:
from_address: Адрес отправителя (cpc1...)amount: Сумма стейка (в wei, минимум min_validator_stake)payload.pub_key: Публичный ключ валидатора (hex строка)
Валидация:
- Баланс отправителя >= amount + fee
amount >= min_validator_stakepub_keyдолжен присутствовать в payload- Подпись должна быть валидной
Результат:
- Создаётся или обновляется валидатор с адресом
cpcvalcons...(вычисляется изpub_key) - Стейк добавляется к существующему (если валидатор уже существует)
reward_addressустанавливается вfrom_address(если новый валидатор)
Пример:
SUBMIT_RESULT¶
Тип: TxType.SUBMIT_RESULT
Назначение: Отправка результата выполнения compute-задачи
Gas Cost: 80,000 gas
Структура:
Transaction(
tx_type=TxType.SUBMIT_RESULT,
from_address="cpc1worker...",
to_address=None,
amount=0, # Награда пока не интегрирована в L1
fee=gas_limit * gas_price,
nonce=1,
gas_price=1000,
gas_limit=80000,
timestamp=1700000000,
pub_key="02a1b2c3...",
payload={
"task_id": "550e8400-e29b-41d4-a716-446655440000",
"worker_address": "cpc1worker...",
"result_hash": "0x1234567890abcdef...",
"proof": None, # Опционально (будущее: ZK-proof)
"nonce": 12345, # Опционально (для синтетических задач)
"signature": "" # Опционально
}
)
Обязательные поля:
from_address: Адрес воркера (cpc1...)payload.task_id: UUID задачиpayload.worker_address: Адрес воркера (должен совпадать сfrom_address)payload.result_hash: Хеш результата вычисления (hex строка)
Опциональные поля:
payload.proof: Доказательство корректности (будущее: ZK-proof)payload.nonce: Nonce для синтетических задачpayload.signature: Подпись воркера
Валидация:
- Структура
ComputeResultдолжна быть валидной worker_addressдолжен совпадать сtx.from_address- Proof проверяется (в будущем через ZK-верификацию)
Результат:
- Результат включается в блок
compute_rootобновляется в заголовке блока- Награда пока не интегрирована в L1 (планируется)
Пример:
./cpc-cli tx submit-result \
--task-id "550e8400-e29b-41d4-a716-446655440000" \
--result-hash "0x1234567890abcdef..." \
--from worker
Общие поля транзакции¶
Обязательные поля¶
tx_type: Тип транзакции (enum)from_address: Адрес отправителя (cpc1...)amount: Сумма (в wei)fee: Комиссия (gas_used * gas_price)nonce: Номер транзакции отправителяgas_price: Цена газа (wei per gas)gas_limit: Лимит газаtimestamp: Временная метка (Unix timestamp)pub_key: Публичный ключ отправителя (hex строка)signature: Подпись транзакции (hex строка)
Опциональные поля¶
to_address: Адрес получателя (для TRANSFER)payload: Дополнительные данные (dict)
Лимиты¶
Gas Limits¶
По типам транзакций:
| Тип транзакции | Gas Limit |
|---|---|
| TRANSFER | 21,000 |
| STAKE | 40,000 |
| SUBMIT_RESULT | 80,000 |
Блок:
- Devnet: 10,000,000 gas
- Testnet: 15,000,000 gas
- Mainnet: 30,000,000 gas
Минимальные значения¶
Gas Price:
- Devnet: 1,000 wei
- Testnet: 5,000 wei
- Mainnet: 1,000,000,000 wei (1 Gwei)
Amount:
- Минимум: 0 wei
- Для STAKE: минимум
min_validator_stake
Инварианты¶
Nonce¶
- Nonce должен быть последовательным
- Начинается с 0 для нового аккаунта
- Увеличивается на 1 для каждой транзакции
Баланс¶
- Баланс отправителя >= amount + fee
- Баланс не может быть отрицательным
Подпись¶
- Подпись должна быть валидной для
from_address - Используется ECDSA (secp256k1) в MVP
- Планируется переход на Post-Quantum подписи