Wie lautet die genaue Formel zur Berechnung der Transaktionsgebühren?

Laut Wiki :

Wenn die Blockgröße mehr als 250 kB beträgt, werden Transaktionen zunehmend teurer, je näher die Blockgröße an die Grenze von 500 kB heranreicht. Das Senden einer Transaktion mit einer Blockgröße von 400 kB kostet das 5-fache des normalen Betrags; Das Senden bei 499 kB kostet das 500-fache usw.

Was ist die genaue Formel, die die Transaktionsgebühr bestimmt?

Antworten (3)

Siehe GetMinFee() in main.h für den Code, der die Mindesttransaktionsgebühr bestimmt.

Der Teil, den Sie beschreiben, wird wie folgt implementiert:

// 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);
}

wo:

  • nBlockSizehängt davon ab, wer wir sind:
    • wenn wir ein Benutzer sind, der eine neue Transaktion durchführt, nBlockSizeist 1
    • wenn wir ein Knoten sind, der entscheidet, ob eine eingehende Transaktion weitergeleitet werden soll, nBlockSizeist 1000
    • Wenn wir ein Miner sind, der entscheidet, welche Transaktionen in einen neuen Block aufgenommen werden sollen, nBlockSizeist die Größe des Blocks, den wir erstellen, bevor wir die neue Transaktion hinzufügen
  • nNewBlockSizeist die Größe des Blocks einschließlich der neuen Transaktion
  • MAX_BLOCK_SIZE_GENist 500kB
  • MAX_MONEYsind 21 Millionen BTC (alles Geld der Welt)

also heißt es:

  • wenn wir entweder entscheiden, ob wir die Transaktion weiterleiten oder abbauen, und das Hinzufügen der Transaktion den Block zu über 50 % füllen würde:
    • Lassen Sie niemals eine Transaktion zu, die den Block zu 100 % voll macht
    • andernfalls erhöhen Sie die Gebühr um einen Faktor von500kB / (500kB - nNewBlockSize)

Hinweis: Indem wir die Symbole neu anordnen, erhalten wir genau das, was Meni in seiner Antwort geschrieben hat:

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

Diese Regel ist ziemlich seltsam und scheint mir nicht stabil zu sein, da sie gegen die Interessen der Miner verstößt.
Es ist nicht gegen die Interessen der Bergleute. Wenn der Miner den Block mit Transaktionen mit niedrigen Gebühren füllt, verliert er die Möglichkeit, dort eine Transaktion mit hohen Gebühren zu erhalten. Denken Sie daran, dass nicht alle Transaktionen gleich groß sind, Sie können also nicht einfach in der Gebührenordnung vorgehen. (Der optimale Algorithmus wäre, die Transaktionen in zwei Pools zu sortieren, einen für gebührenpflichtige Transaktionen in Gebühren-pro-Byte-Reihenfolge, den anderen für kostenlose Transaktionen in Prioritätsreihenfolge. Füllen Sie einen Block aus dem ersten Pool der Reihe nach, wenn möglich, bis keine mehr bezahlt werden Transaktionen passen, dann nehmen Sie so viele aus dem zweiten Pool wie passen.)
@DavidSchwartz Ich argumentiere, dass Bergleute anstelle dieses Algorithmus zu einer Gebühr-pro-Byte-Auktion konvergieren werden, weil das in ihrem Interesse ist. Sie stimmen dem Gebühren-pro-Byte-Teil zu, sind aber nicht damit einverstanden, dass der aktuelle Algorithmus gegen das Interesse der Miner verstößt. Daher erscheint mir Ihr Kommentar widersprüchlich.
@CodeInChaos: Der Aufwand, der erforderlich ist, um in ihrem Interesse zu handeln, würde es insgesamt nicht in ihrem Interesse machen. Der Unterschied zwischen einem idealen Algorithmus und dem aktuellen beträgt heute etwa 0,02 %. Es ist, als würde man durch die Stadt fahren, um einen Penny pro Gallone weniger für Benzin zu bezahlen.
Selbst wenn der Algorithmus keine Gebühr verlangen würde, wenn die für die Eingabe verwendete Münze neu ist, könnte dennoch eine Gebühr verlangt werden: bitcointalk.org/index.php?topic=84434.msg931988#msg931988

Ich kenne die Formel aus keiner maßgeblichen Quelle, aber basierend auf den Beispielen im Text ist sie es

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

Oder gleichwertig (und ich vermute, der eigentliche Code verwendet dieses Formular)

Fee = Normal fee * (500 KB) / (500KB - Block size)
Haben Sie den Teil "Oder gleichwertig" hinzugefügt, nachdem Sie Ihre erste Antwort gepostet haben? Unter Ihrer Frage steht kein "bearbeitet von ...", aber ich könnte schwören, dass Ihre Antwort ursprünglich halb so groß war wie jetzt.
@ChrisMoore: Der Autor eines Beitrags kann ihn einige Zeit lang (5 Minuten, glaube ich) bearbeiten, ohne dass die Änderung als Bearbeitung angezeigt wird.
@ChrisMoore: Sie haben natürlich Recht, ebenso wie DH.
Wo ist die "Normalgebühr" für diese Berechnung definiert?

Die anderen Antworten beschreiben die derzeit im Client implementierten Regeln, aber ich gehe davon aus, dass diese Regeln ersetzt werden, sobald Blockgrößenbeschränkungen relevant werden. Da diese Regeln nicht durchgesetzt werden, wenn Kunden die Blockchain verifizieren, sind sie nur Richtlinien und werden verletzt, wenn sie gegen die Interessen der Bergleute verstoßen.

Miner wählen einfach die Teilmenge der Kandidatentransaktionen aus, die die Grenzen (Blockgröße und Signaturanzahl) respektieren und die Gebühr maximieren.

Abgesehen von einigen kleineren Komplikationen (Rucksack und abhängige Transaktionen) bedeutet dies, dass Miner die Transaktionen danach sortieren, fee/transactionSizeob die maximale Größe der begrenzende Faktor ist und fee/signatureCountob die Anzahl der Signaturen der begrenzende Faktor ist.