Справочник по комиссиям

Последнее обновление: 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 transfers
allow_create_account = false # Block account creation with lamports
allow_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 transfers
allow_burn = false # Block SPL token burning
allow_close_account = false # Block SPL token account closures (returns rent)
allow_mint_to = false # Block unauthorized SPL token minting
allow_initialize_account = false # Block account initialization

Дополнительная защита

  1. Включите аутентификацию: Всегда требуйте API-ключ или HMAC-аутентификацию при фиксированном/бесплатном ценообразовании
  2. Установите низкие лимиты: Используйте консервативные значения max_allowed_lamports
  3. Мониторьте использование: Отслеживайте необычные паттерны транзакций с высоким расходом
  4. Рассмотрите ценообразование с наценкой: Ценообразование с наценкой автоматически включает затраты на расход в комиссии

Предупреждения валидации

Валидатор конфигурации 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?

Управляется

© 2026 Solana Foundation.
Все права защищены.
Связаться с нами