Последнее обновление: 2025-10-31
Kora оценивает комиссии транзакций при выполнении RPC-методов
estimate_transaction_fee и sign_transaction. Для оценки комиссий Kora
рассчитывает общую стоимость выполнения транзакций в Solana, включая сетевые
комиссии, расходы на создание аккаунтов и опциональные комиссии за обработку
платежей. Это руководство разбирает каждый компонент расчёта комиссии.
Формула расчёта комиссии
Комиссия определяется моделью ценообразования, настроенной в kora.toml:
PriceModel::Free— Спонсирует все комиссии транзакций (общая комиссия = 0)PriceModel::Fixed— Взимает фиксированную сумму в определённом токене (независимо от сетевых комиссий)PriceModel::Margin— Добавляет процентную наценку к общим комиссиям.
Основная точка входа для оценки общей комиссии, используемая в
PriceModel::Margin — это FeeConfigUtil::estimate_kora_fee() в
crates/lib/src/fee/fee.rs.
Она использует следующую обобщённую формулу:
Total Fee = Base Fee+ Account Creation Fee+ Kora Signature Fee+ Fee Payer Outflow+ Payment Instruction Fee+ Transfer Fee Amount+ Margin Adjustment
Компоненты комиссии
| Компонент | Описание | Метод расчёта | Когда применяется |
|---|---|---|---|
| Базовая комиссия | Основная комиссия транзакции Solana, покрывающая проверку подписи и обработку транзакции | RpcClient.get_fee_for_message() — Использует расчёт комиссий Solana на основе вычислительных единиц и приоритетных комиссий | Всегда |
| Комиссия создания аккаунта | Минимальный баланс, освобождённый от rent, для создания новых Associated Token Accounts (ATA) | Rent::default().minimum_balance(account_size) — Рассчитывает rent на основе размера данных аккаунта (165-355 байт в зависимости от расширений токена) | Когда транзакция создаёт новые ATA |
| Комиссия подписи Kora | Дополнительная комиссия, когда Kora подписывает как плательщик комиссии, не участвующий в транзакции | Фиксированная: 5 000 лампортов (LAMPORTS_PER_SIGNATURE) | Когда плательщик комиссии ещё не является подписантом транзакции |
| Отток плательщика комиссии | Общая сумма SOL, которую плательщик комиссии отправляет в транзакции (переводы, создание аккаунтов и т. д.) | Сумма: Системные переводы от плательщика комиссии, CreateAccount, финансируемый плательщиком комиссии, Снятия Nonce от плательщика комиссии | Когда плательщик комиссии выполняет операции System Program |
| Комиссия платёжной инструкции | Оценочная стоимость приоритетных комиссий для добавления платёжной инструкции в транзакции без газа | Фиксированная оценка: 50 лампортов (ESTIMATED_LAMPORTS_FOR_PAYMENT_INSTRUCTION) | Когда платёж требуется, но не включён в транзакцию |
| Комиссия перевода | Комиссии перевода Token2022, настроенные на минте (например, 1% от суммы перевода) | Token2022Mint.calculate_transfer_fee(amount, epoch) — На основе конфигурации комиссии перевода минта | Только для переводов Token2022 на платёжный адрес Kora |
| Корректировка наценки | Наценка/корректировка модели ценообразования Kora | Настроенная наценка в validation.price — Может добавлять наценку в % от общей комиссии | Когда [validation.price] указан в kora.toml |
Модели ценообразования и расход плательщика комиссий
Kora поддерживает три модели ценообразования, которые определяют, как пользователи платят за транзакции:
Ценообразование с наценкой (по умолчанию)
- Формула:
Total Fee = (Base + Outflow + Other Components) × (1 + margin) - Включает расход плательщика комиссий: Да
- Оптимально для: Промышленных развертываний, где комиссии должны отражать фактические затраты с добавленной операционной наценкой
Фиксированное ценообразование
- Формула:
Total Fee = Fixed Amount (in specified token) - Включает расход плательщика комиссий: Нет
- Оптимально для: Упрощенного UX с предсказуемым ценообразованием в контролируемых средах
Бесплатное ценообразование
- Формула:
Total Fee = 0 - Включает расход плательщика комиссий: Нет (оператор покрывает все расходы)
- Оптимально для: Рекламных кампаний, тестирования или полностью спонсируемых приложений
⚠️ Предупреждение безопасности: модели фиксированного/бесплатного ценообразования
КРИТИЧНО: Модели фиксированного/бесплатного ценообразования НЕ включают расход плательщика комиссий в сумму списания. Это создает серьезный риск безопасности при неправильной настройке. Если политика вашего плательщика комиссий разрешает переводы или другие операции расхода, злоумышленники могут использовать это для опустошения аккаунта плательщика комиссий.
Необходимые меры безопасности
При использовании фиксированного/бесплатного ценообразования вы ОБЯЗАНЫ настроить ограничительные политики плательщика комиссий для блокировки ВСЕХ денежных операций и операций изменения полномочий:
[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfersallow_create_account = false # Block account creation with lamportsallow_allocate = false # Block space allocation[validation.fee_payer_policy.system.nonce]allow_withdraw = false # Block nonce account withdrawals[validation.fee_payer_policy.spl_token] # and for [validation.fee_payer_policy.token_2022]allow_transfer = false # Block SPL transfersallow_burn = false # Block SPL token burningallow_close_account = false # Block SPL token account closures (returns rent)allow_mint_to = false # Block unauthorized SPL token mintingallow_initialize_account = false # Block account initialization
Дополнительная защита
- Включите аутентификацию: Всегда требуйте API-ключ или HMAC-аутентификацию при фиксированном/бесплатном ценообразовании
- Установите низкие лимиты: Используйте консервативные значения
max_allowed_lamports - Мониторьте использование: Отслеживайте необычные паттерны транзакций с высоким расходом
- Рассмотрите ценообразование с наценкой: Ценообразование с наценкой автоматически включает затраты на расход в комиссии
Предупреждения валидации
Валидатор конфигурации Kora предупредит вас об опасных настройках:
kora --config kora.toml config validate
Ожидаемые предупреждения для уязвимых конфигураций:
⚠️ SECURITY: Fixed pricing with system.allow_transfer=true.Users can make the fee payer transfer arbitrary SOL amounts at fixed cost.This can drain your fee payer account.
Is this page helpful?