Обзор низкоуровневых комиссий
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
This section describes instructions and manuals for interacting with TON at a low level.
Здесь вы найдете сырые формулы для расчета комиссий и сборов в TON.
Однако большинство из них уже реализованы через коды операций! Поэтому вы используете их вместо ручных вычислений
В этом документе дается общее представление о комиссиях за транзакции в TON и, в частности, о комиссиях за вычисления для кода FunC. Также есть подробная спецификация в техническом документе TVM.
Транзакции и фазы
Как было описано в обзоре TVM, выполнение транзакции состоит из нескольких фаз. Во время этих фаз могут вычитаться соответствующие комиссии. Существует обзор высокоу ровневых комиссий.
Плата за хранение
Валидаторы TON взимают плату за хранение со смарт-контрактов.
Плата за хранение взимается с balance смарт-контракта на фазе хранения любой транзакции в связи с оплатой за хранение в зависимости от состояния аккаунта
(включая код и данные смарт-контракта, если они есть) до настоящего времени. Даже если контракт получил 1 nanoton, он погасит всю задолженность с момента последней оплаты. В результате смарт-контракт может быть заморожен. Только уникальные ячейки хеша учитываются для комиссий за хранение и пересылку, т. е. 3 одинаковые ячейки хеша считаются как одна. В частности, это дедуплицирует данные: если в разных ветвях есть несколько эквивалентных подячеек, их содержимое сохраняется только один раз.
Важно помнить, что в TON вы платите как за выполнение смарт-контракта, так и за используемое хранилище (см. статью @thedailyton), storage_fee зависит от размера вашего контракта: количества ячеек и суммы битов из этих ячеек. Это означает, что вам придется платить комиссию за хранение за наличие кошелька TON (даже если он очень-очень маленький).
Если вы не использовали свой кошелек TON в течение значительного периода времени (1 год), вам придется заплатить значительно большую комиссию, чем обычно, поскольку кошелек платит комиссию за отправку и получение транзакций.
Когда сообщение возвращается из контракта, контракт выплачивает свою текущую storage_fee
Формула
Вы можете приблизительно рассчитать плату за хранение для смарт-контрактов, используя эту формулу:
storage_fee = ceil(
(account.bits * bit_price
+ account.cells * cell_price)
* time_delta / 2 ^ 16)
Давайте рассмотрим каждое значение более подробно:
storage_fee— цена за хранение дляtime_deltaсекундaccount.cells— количество ячеек, используемых смарт-контрактомaccount.bits— количество бит, используемых смарт-контрактомcell_price— цена одной ячейкиbit_price— цена одного бита
И cell_price, и bit_price можно получить из конфигурации сети параметр 18.
Текущие значения:
- Воркчейн.
bit_price_ps:1
cell_price_ps:500 - Мастерчейн.
mc_bit_price_ps:1000
mc_cell_price_ps:500000
Пример калькулятора
Вы можете использовать этот скрипт JS для расчета стоимости хранения 1 МБ в воркчейне на 1 год
// Welcome to LIVE editor! // feel free to change any variables // Source code uses RoundUp for the fee amount, so does the calculator function storageFeeCalculator() { const size = 1024 * 1024 * 8; // 1MB in bits const duration = 60 * 60 * 24 * 365; // 1 Year in secs const bit_price_ps = 1; const cell_price_ps = 500; const pricePerSec = size * bit_price_ps + +Math.ceil(size / 1023) * cell_price_ps; let fee = Math.ceil((pricePerSec * duration) / 2 ** 16) * 10 ** -9; let mb = (size / 1024 / 1024 / 8).toFixed(2); let days = Math.floor(duration / (3600 * 24)); let str = `Storage Fee: ${fee} TON (${mb} MB for ${days} days)`; return str; }