¿Cuál es la fórmula exacta para calcular las tarifas de transacción?

Según Wiki :

Si el tamaño del bloque es superior a 250 kB, las transacciones se vuelven cada vez más caras a medida que el tamaño del bloque se acerca al límite de 500 kB. Enviar una transacción cuando el tamaño del bloque es de 400 kB costará 5 veces la cantidad normal; enviar cuando es de 499 kB costará 500x, etc.

¿Cuál es la fórmula exacta que determina la tarifa de transacción?

Respuestas (3)

Consulte GetMinFee() en main.h para conocer el código que determina la tarifa mínima de transacción.

La parte que estás describiendo se implementa de la siguiente manera:

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

dónde:

  • nBlockSizedepende de quienes seamos:
    • si somos un usuario que realiza una nueva transacción, nBlockSizees 1
    • si somos un nodo que decide si retransmitir una transacción entrante, nBlockSizees 1000
    • si somos un minero que decide qué transacciones incluir en un nuevo bloque, nBlockSizees el tamaño del bloque que estamos construyendo antes de agregar la nueva transacción
  • nNewBlockSizees el tamaño del bloque que incluye la nueva transacción
  • MAX_BLOCK_SIZE_GENes 500kB
  • MAX_MONEYson 21 millones de BTC (todo el dinero del mundo)

por lo que está diciendo:

  • si estamos decidiendo si retransmitir o extraer la transacción, y agregar la transacción haría que el bloque se llenara en más del 50%:
    • nunca permita una transacción que haga que el bloque esté 100% lleno
    • de lo contrario, aumente la tarifa por un factor de500kB / (500kB - nNewBlockSize)

Nota: al reorganizar los símbolos, obtenemos exactamente lo que escribió Meni en su respuesta:

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

Esa regla es bastante extraña y no me parece estable, ya que va en contra de los intereses de los mineros.
No va en contra de los intereses de los mineros. Si el minero llena el bloque con transacciones de bajo costo, pierde la oportunidad de obtener transacciones de alto costo allí. Recuerde, no todas las transacciones son del mismo tamaño, por lo que no puede simplemente ir en orden de tarifa. (El algoritmo óptimo sería ordenar las transacciones en dos grupos, uno para las transacciones de tarifa en orden de tarifa por byte, el otro para las transacciones gratuitas en orden de prioridad. Si es posible, llene un bloque del primer grupo en orden hasta que no se pague más las transacciones quepan, luego tome tantas del segundo grupo como quepan).
@DavidSchwartz Argumento que los mineros convergerán a una subasta de tarifa por byte en lugar de este algoritmo porque les interesa. Estás de acuerdo con la parte de la tarifa por byte, pero no estás de acuerdo con que el algoritmo actual vaya en contra de los intereses de los mineros. Entonces tu comentario me parece incoherente.
@CodeInChaos: El esfuerzo requerido para actuar en su interés en realidad haría que no fuera de su interés en general. La diferencia entre un algoritmo ideal y el actual, hoy en día, es de un 0,02% aproximadamente. Es como conducir por la ciudad para pagar un centavo menos por galón de gasolina.
Incluso si el algoritmo no requiere una tarifa, si la moneda utilizada para la entrada es nueva, aún podría requerirse una tarifa: bitcointalk.org/index.php?topic=84434.msg931988#msg931988

No conozco la fórmula de ninguna fuente autorizada, pero según los ejemplos en el texto, es

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

O de manera equivalente (y sospecho que el código real usa este formulario)

Fee = Normal fee * (500 KB) / (500KB - Block size)
¿Agregó la parte "O de manera equivalente" después de publicar su respuesta inicial? No hay "editado por ..." en su pregunta, pero podría jurar que su respuesta originalmente era la mitad de su tamaño actual.
@ChrisMoore: el autor de una publicación puede editarla durante algún tiempo (creo que 5 minutos) sin que el cambio se muestre como una edición.
@ChrisMoore: Por supuesto que tiene razón, al igual que DH.
¿Dónde se define la "tarifa normal" para este cálculo?

Las otras respuestas describen las reglas implementadas actualmente en el cliente, pero espero que esas reglas se reemplacen una vez que los límites de tamaño de bloque sean relevantes. Dado que esas reglas no se aplican cuando los clientes verifican la cadena de bloques, son solo pautas y se violarán si van en contra de los intereses de los mineros.

Los mineros simplemente elegirán el subconjunto de transacciones candidatas que respete los límites (tamaño de bloque y recuento de firmas) y maximice la tarifa.

Sin tener en cuenta algunas complicaciones menores (mochila y transacciones dependientes), esto significa que los mineros clasifican las transacciones según fee/transactionSizesi el tamaño máximo es el factor limitante y fee/signatureCountsi el recuento de firmas es el factor limitante.