En este post hablaré sobre (1) el sistema de tarifas dinámicas, (2) cómo calcular las tarifas dinámicas (hoja de cálculo y muestra de código proporcionada) y (3) cuáles son las variables que introdujimos en Ark Improvement Proposal 16, que ya está implementado y funcionando en nuestra nueva Mainnet con Core v2.
El objetivo de ARK es facilitar el desarrollo de soluciones de cadena de bloques al proporcionar a los desarrolladores las herramientas y bibliotecas que pueden utilizar en casi todos los lenguajes de programación populares. La inmensa eficiencia de este ecosistema, apoyado por la comunidad de delegados que dirige la red, son también algunas de mis razones personales para navegar junto con el Ark Ecosystem.
Con Core 2 una nueva era comienza - lo que permite a los desarrolladores crear nuevas funciones modulares y personalizaciones con el mínimo esfuerzo.
Sistema Dinámico de Tarifas
ARK Core V2 es la primera implementación de un sistema de tarifas dinámico dentro de un modelo de red DPoS. Previmos que la creación de un "mercado de tarifas" entre usuarios y delegados acercará aún más a ARK a la creación de una red dinámica, receptiva y resistente. Tanto los delegados como los usuarios finales pueden beneficiarse de tarifas dinámicas: los usuarios finales se benefician de la competencia de los delegados en forma de tarifas de transacción más bajas, mientras que los delegados obtienen otra herramienta en su arsenal para hacer frente a posibles vectores de ataque como los ataques de spam.
Las tarifas dinámicas son un cambio a nivel de protocolo. Por un lado, los delegados (productores de bloques) establecen su propia tarifa mínima aceptable para cada tipo de transacción. Mientras tanto, los usuarios de ARK definen cuánto están dispuestos a pagar por una transacción para que se incluya en el bloque y en la cadena de bloqueo.
Cuanto mayor sea la tarifa establecida por el usuario, más rápida será la inclusión de la transacción en el bloque.
Los operadores de node tienen la opción de personalizar las tarifas en el archivo de configuración de acuerdo con la red para la que están ejecutando su nodo. La configuración consta de las siguientes variables:
- minFeePool - multiplicador de entrada en el fondo común.
- minFeeBroadcast - multiplicador mínimo de emisión.
- transaction offsets - son los bytes de tipo de transacción que se utilizan en el cálculo de la fórmula dinamica de cuota. Su objetivo principal es ajustar el cálculo de tasas para una clase de movimiento específica.
Cálculo dinámico de tarifas
La fórmula de cálculo: Tasa = (T+S) * C
T: valor de offset en función de la clase de movimiento, definido por el grafo. T está aquí para dar cuenta de la potencia de procesamiento extra para tramitar transacciones especiales cuyo valor de transferencia es nulo, y así reducir el interés económico por el spam en la red.
C: Constante de multiplicador de tasas (Arktoshi/byte) definida por los delegados para incluir la transacción en su fondo común de bloques/operaciones falsificados. La constante C se sustituye por el valor de configuración del archivo network.json (mainnet.json), el minFeePool y el minFeeBroadcast.
S: tamaño de la transacción serializada. Por ejemplo, para la transferencia tenemos el offset T = 100, C = 3000 Arktoshi/byte. Para una operación de transferencia clásica con el tamaño de VendorField vacío es de 153 bytes, la tarifa es:
Simulador de cálculo dinámico de tasas
Para los valores propuestos y los cálculos de honorarios relacionados con la clase de operación, consulte los valores calculados en la tabla siguiente.
Si desea jugar con la configuración de cálculo de tarifas, hay una hoja de cálculo de simulación disponible, para que tenga la sensación de que los valores son posibles con diferentes tipos y tamaños de transacciones. En la tabla anterior, existen varias opciones para la misma clase de movimiento; por ejemplo, una operación de traslado (color verde) tiene tres opciones de cálculo:
- transferencia sin campo de acreedor y sin segunda firma = 153 bytes
- Transferencia con 2ª firma y sin campo de acreedor = 225 bytes
- Transferencia con campo de acreedor y 2ª firma = 289 bytes
La hoja de cálculo tiene una columna custom_offset donde se puede anular el valor y observar los resultados. Lo mismo ocurre con el ajuste del multiplicador. Por defecto lo configuramos a 3000, pero usted puede anularlo con su valor personalizado.
No confío en las hojas de cálculo - prefiero el código
Para todas las almas geeky y en general para todos los que se sientan más cómodos con el lenguaje de programación, por favor encuentre un ejemplo de código corto a continuación, donde puede crear transacciones usando nuestro transactionBuilder desde el paquete arkecosystem/crypto y usar la calculadora de tarifas dinámicas. Los valores calculados se muestran en la consola.
const {
dynamicFeeManager,
transactionBuilder,
formatArktoshi,
} = require('@arkecosystem/crypto')
const transaction = transactionBuilder
.transfer()
.recipientId('D9YiyRYMBS2ofzqkufjrkB9nHofWgJLM7f')
.sign('secret passphrase')
.vendorField('')
//.secondSign('secret second passphrase')
.build()
// Overwrite offset for transaction type
//dynamicFeeManager.offsets[transaction.type] = 100
console.log(${transaction.serialized.length / 2} bytes
) // Transaction size in bytes
console.log(formatArktoshi(dynamicFeeManager.calculateFee(3000, transaction))) // Calcualted dynamic fee
¿Adónde vamos ahora?
En este breve artículo expliqué la esencia de las tarifas dinámicas y también proporcioné un paquete de simulación de cálculo para que usted lo utilice (hoja de cálculo y ejemplo de código). Aquí hay algunas ideas futuras para hacer esto más fácil de visualizar para los usuarios finales.
Sería de gran utilidad para los usuarios finales disponer de herramientas más fáciles de usar que muestren la configuración de las tarifas de red y una aplicación web para el cálculo de las mismas. Por ejemplo, BitCoin tiene aplicaciones web específicas dedicadas a mostrar los valores de las tasas históricas.
También es posible calcular la tarifa mínima y máxima aceptada actualmente en la red, consultando a todos los pares para la API de nodo/configuración, donde se exponen los ajustes para cada nodo. Al leer los ajustes, lo único que queda es la matemática.
Los ejemplos anteriores (aplicación web para el cálculo de tarifas y descripción general de la página de tarifas de la red) son sólo algunas ideas básicas que también podrían encajar en una propuesta de ACF, así que si alguien tiene interés - aquí está el enlace: https://arkcommunity.fund/proposals.
Por mi parte, intentaré ser más activo en los canales públicos. Lo que significa que trataré de escribir artículos mensuales donde discutiremos algunas de las características más técnicas de Ark, dónde estamos actualmente, a qué retos nos enfrentamos y cómo los estamos superando.