Какова точная формула расчета комиссии за транзакцию?

Согласно Вики :

Если размер блока превышает 250 КБ, транзакции становятся все более дорогими, поскольку размер блока приближается к пределу в 500 КБ. Отправка транзакции при размере блока 400 КБ будет стоить в 5 раз больше обычной суммы; отправка при 499кБ будет стоить 500х и т.д.

Какая точная формула определяет комиссию за транзакцию?

Ответы (3)

См. GetMinFee() в main.h для кода, определяющего минимальную комиссию за транзакцию.

Часть , которую вы описываете , реализована следующим образом:

// Raise the price as the block approaches full
if (nBlockSize != 1 && nNewBlockSize >= MAX_BLOCK_SIZE_GEN/2)
{
    if (nNewBlockSize >= MAX_BLOCK_SIZE_GEN)
        return MAX_MONEY;
    nMinFee *= MAX_BLOCK_SIZE_GEN / (MAX_BLOCK_SIZE_GEN - nNewBlockSize);
}

куда:

  • nBlockSizeзависит от того, кто мы:
    • если мы пользователь, совершающий новую транзакцию, nBlockSizeравно 1
    • если мы являемся узлом, решающим, следует ли ретранслировать входящую транзакцию, nBlockSizeэто 1000
    • если мы майнер, решающий, какие транзакции включить в новый блок, nBlockSizeэто размер блока, который мы строим перед добавлением новой транзакции
  • nNewBlockSizeразмер блока, включая новую транзакцию
  • MAX_BLOCK_SIZE_GENсоставляет 500 КБ
  • MAX_MONEYсоставляет 21 миллион BTC (все деньги мира)

так он говорит:

  • если мы решаем, ретранслировать или майнить транзакцию, и добавление транзакции сделает блок заполненным более чем на 50%:
    • никогда не разрешать транзакцию, которая заполняет блок на 100%
    • в противном случае увеличьте комиссию с коэффициентом500kB / (500kB - nNewBlockSize)

Примечание: переставляя символы, мы получаем именно то, что написал Мени в своем ответе:

Fee= Normal fee / ((500kB - size) / 500kB)=Normal fee / (1 - size / 500kB)

Это правило довольно странное и не кажется мне стабильным, поскольку оно противоречит интересам майнеров.
Это не противоречит интересам майнера. Если майнер заполняет блок транзакциями с низкой комиссией, он теряет возможность получить там транзакцию с высокой комиссией. Помните, что не все транзакции имеют одинаковый размер, поэтому вы не можете просто пойти в порядке комиссий. (Оптимальным алгоритмом будет сортировка транзакций по двум пулам: один для платных транзакций в порядке платы за байт, другой для бесплатных транзакций в порядке приоритета. Заполните блок из первого пула по порядку, если это возможно, до тех пор, пока больше не будет платных транзакций. транзакций подходит, а затем берет столько из второго пула, сколько подходит.)
@DavidSchwartz Я утверждаю, что майнеры перейдут на аукцион с оплатой за байт вместо этого алгоритма, потому что это в их интересах. Вы согласны с платой за байт, но не согласны с текущим алгоритмом, который противоречит интересам майнеров. Так что ваш комментарий кажется мне нелогичным.
@CodeInChaos: усилия, необходимые для того, чтобы действовать в их интересах, фактически сделают это не в их интересах в целом. Разница между идеальным алгоритмом и текущим сегодня составляет около 0,02% или около того. Это как ехать через весь город, чтобы платить за бензин на пенни меньше за галлон.
Даже если алгоритм не требует комиссии, если монета, используемая для ввода, новая, комиссия все равно может потребоваться: bitcointalk.org/index.php?topic=84434.msg931988#msg931988

Я не знаю формулы из какого-либо авторитетного источника, но, судя по примерам в тексте, она

Fee = Normal fee / (1 - Block size / 500KB)

Или эквивалентно (и я подозреваю, что фактический код использует эту форму)

Fee = Normal fee * (500 KB) / (500KB - Block size)
Вы добавили часть «Или эквивалентно» после публикации своего первоначального ответа? В вашем вопросе нет «отредактировано ...», но я могу поклясться, что ваш ответ изначально был вдвое меньше нынешнего размера.
@ChrisMoore: автор сообщения может редактировать его в течение некоторого времени (я думаю, 5 минут), и изменение не будет отображаться как редактирование.
@ChrisMoore: Вы, конечно, правы, как и DH.
Где определяется «Обычная плата» для этого расчета?

Другие ответы описывают правила, реализованные в настоящее время в клиенте, но я ожидаю, что эти правила будут заменены, как только ограничения на размер блока станут актуальными. Поскольку эти правила не применяются, когда клиенты проверяют блокчейн, они являются всего лишь рекомендациями и будут нарушаться, если они противоречат интересам майнеров.

Майнеры будут просто выбирать подмножество транзакций-кандидатов, которые соблюдают ограничения (размер блока и количество подписей) и максимизируют комиссию.

Если не принимать во внимание несколько незначительных сложностей (ранцевые и зависимые транзакции), это означает, что майнеры сортируют транзакции по fee/transactionSizeтому, является ли максимальный размер ограничивающим фактором и fee/signatureCountявляется ли ограничивающим фактором количество сигнатур.