Como funcionam as taxas no Monero

Tradução e adaptação do artigo original escrito por dEBRUYNE e ArticMine, publicado em 11 de dezembro de 2017.

Ultimamente muitas pessoas têm reclamado que as taxas no Monero estão muito caras. Apesar de nós não discordarmos disso, nós primeiro devemos analisar bem essa situação. Além disso, muitos usuários sugerem que os desenvolvedores deveriam atualizar o software com taxas menores, mas essa seria uma solução muito limitada, pois 1) isso só iria adiar os problemas, 2) a mudança de constantes ou fórmulas exigiria um hard fork, ou seja,  isso precisaria ser aplicado em forma de consenso e 3) ficar intervindo constantemente na moeda seria uma contradição aos nossos princípios e à nossa natureza descentralizada.


As taxas por kB do Monero não são caras

Vamos começar comparando as taxas por kB para uma transação típica no Monero e em outras moedas de prova-de-trabalho.

Taxas por kB para uma transação típica (2 inputs + 2 outputs):

  • Bitcoin: ~$26,90
  • Ethereum: ~$2,91
  • Bitcoin Cash: ~$0,07
  • Litecoin: ~$0,10
  • Dash: ~$0,07
  • Monero: ~$0,24

Como você pode ver, a taxa por kB do Monero é bastante baixa. No entanto, devido ao elevado tamanho da transação no Monero, a taxa final que acaba sendo paga a cada transação acaba ficando bastante alta (em dólares).

O que faz com que as transações do Monero sejam tão grandes (cerca de ~12 kB cada) são as range proofs, que nada mais são do que a tecnologia de privacidade que esconde as quantias que são transferidas em cada transação. Essa tecnologia é usada nas transações confidenciais em anel (RingCT), que foram uma atualização absolutamente necessária para o fortalecimento da privacidade da rede. Antes de elas serem introduzidas, havia muitos “vazamentos” de privacidade em cada transação do Monero, o que fazia com que seus usuários pudessem ser rastreados.

Felizmente, já existe uma solução sendo desenvolvida para esse problema. Em breve será lançada uma atualização (Bulletproofs) que irá reduzir o tamanho das transações em pelo menos 80%.


A função da penalidade e o algoritmo do tamanho de bloco dinâmico

Para melhor compreendermos essa questão, vamos continuar nossa análise examinando as constantes. Nós começaremos examinando a função da penalidade e o algoritmo do tamanho de bloco dinâmico. A fórmula é a seguinte:

Penalidade = RecompensaInicial * ((TamanhoDoBloco / MN) – 1)²

A recompensa final, que é o valor que é efetivamente pago ao minerador, é calculada da seguinte maneira:

RecompensaFinal = RecompensaInicial – Penalidade

Onde:

  • MN é a mediana do tamanho do bloco nos últimos N blocos (no Monero, N = 100 )
  • TamanhoDoBloco é o tamanho do bloco atual
  • RecompensaInicial é a recompensa definida de acordo com a curva de emissão ou, se aplicável, com a emissão em cauda
  • RecompensaFinal é a recompensa que efetivamente é paga ao minerador
  • O tamanho de bloco máximo permitido é 2MN

Perceba que a fórmula da recompensa inicial é definida da seguinte maneira:

RecompensaInicial = 2 * ((S – A) * 2-20 * 10-12)

Onde:

  • 2 é o fator de ajuste para a mudança para blocos de dois minutos
  • S é o número inicial de unidades atômicas (S = 264 -1)
  • A é o número atual de moedas em circulação, que pode ser encontrado na parte “Emission” (emissão) deste site. Além disso, o número de moedas em circulação (a emissão) exibida no explorador de blocos deve ser multiplicado por 1.012 (Monero usa 12 casas decimais) para convertê-lo em unidades atômicas.

Perceba que o tamanho de bloco mínimo é de 300 kB. Portanto os mineradores podem fazer blocos de até 300 kB sem estar sujeitos a uma penalidade. Em outras palavras, a função da penalidade só é “ativada” quando os mineradores mineram blocos maiores do que 300 kB.

Uma transação padrão do Monero (com 2 inputs e 2 outputs) tem aproximadamente 13,2 kB. Vamos colocar isso na fórmula:

Penalidade = RecompensaInicial * ((TamanhoDoBloco / MN) – 1)²

Assumindo-se uma RecompensaInicial de 5,7 XMR:

Penalidade = 5,7 * ((313,2/300)-1)²

Penalidade = ~0,011 XMR

Perceba que a RecompensaInicial era significativamente maior há 6-12 meses, o que significava uma maior penalidade.

Agora, os mineradores precisam de um incentivo para aumentar o tamanho do bloco. Portanto, a taxa para se incluir uma transação adicional (acima de 300 kB) precisa compensar a penalidade que eles vão ter que pagar por terem aumentado o tamanho do bloco. Caso contrário, os mineradores irão simplesmente encher os blocos até atingir 300 kB e irão excluir quaisquer outras transações, o que poderia causar um congestionamento de transações na rede, enchendo o mempool. Em suma, a taxa padrão atual (~0,013 XMR) foi definida para incentivar os mineradores a incluir uma transação adicional em seus blocos sem perder lucro.

Como você pode ver na função da penalidade, a penalidade irá reduzir quando a recompensa inicial reduzir. Além disso, como pode-se deduzir facilmente ao vermos o gráfico da função, a função da penalidade é mais “leniente” no início da função. Isso significa que qualquer redução no tamanho da transação resulta em uma redução em taxas maior ou igual. Por exemplo, uma redução de 80% no tamanho da transação poderia gerar uma redução de 90% nas taxas. Vamos trabalhar um pouco com a fórmula para obtermos números mais concretos. Assumindo bulletproofs com um único output, o tamanho de uma transação típica seria de ~2,5 kB. Agora, vamos também assumir que nós queremos incentivar os mineradores a expandir o tamanho do bloco em duas transações sem perder lucro. Ou seja, eles serão capazes de incluir duas transações adicionais (acima do tamanho de bloco mínimo) sem que a penalidade seja maior do que as taxas. Transformando isso em números, nós obtemos:

Penalidade = RecompensaInicial * ((TamanhoDoBloco / MN) – 1)²

Penalidade = 5,7 * ((305/300)-1)²

Penalidade = ~0,0016 XMR (ou ~0,0008 XMR por transação típica).

Reduzir o tamanho da transação em cerca de 80%, mas manter o mesmo tamanho mínimo de bloco pode ser um pouco complicado. Portanto, pode ser que o tamanho de bloco mínimo seria reduzido para 100, 150, 200 ou 250 kB. Vamos transformar isso em números novamente:

Penalidade = 5,7 * ((255/250)-1)², o que resulta em ~0,0023 XMR (ou ~0,00115 XMR por transação típica).

Penalidade = 5,7 * ((205/200)-1)², o que resulta em ~0,0036 XMR (ou ~0,0018 XMR por transação típica).

Penalidade = 5,7 * ((155/150)-1)², o que resulta em ~0,0063 XMR (ou ~0,00315 XMR por transação típica).

Penalidade = 5,7 * ((105/100)-1)², o que resulta em ~0,014 XMR (ou ~0,007 XMR por transação típica).

Você pode fazer um gráfico de todos os cenários da função ao definir MN como x e TamanhoDoBloco como x+5.


Analisando o algoritmo da taxa dinâmica

E como o algoritmo de taxa dinâmica funciona? Primeiro, temos que ter em mente que a taxa padrão é definida para contabilizar a penalidade em uma situação mínima. Ou seja, uma situação onde os mineradores aumentam o tamanho do bloco com uma transação adicional acima do tamanho de bloco mínimo. Mais especificamente, na situação atual, isso significaria criar um bloco de 313 kB (lembrando que o tamanho de bloco mínimo é de 300 kB). Assim que o tamanho de bloco mediano (dos últimos 100 blocos) diverge de maneira significativa do tamanho de bloco mínimo, o algoritmo da taxa dinâmica entra em ação.

Vamos examinar o algoritmo da taxa dinâmica:

Taxa por kB = (R/R0) * (M0/M) * F0 * (60/300) * 4

Onde:

  • R é a recompensa inicial
  • R0 é a recompensa inicial de referência (10 XMR)
  • M é o tamanho de bloco máximo (limite superior)
  • M0 é tamanho de bloco mínimo (limite inferior) (300 kB)
  • F0 é 0,002 XMR
  • 60/300 é o fator de ajuste para contabilizar o aumento no tamanho de bloco mínimo (60 kB -> 300 kB)
  • 4 é o fator de ajuste para contabilizar o multiplicador de taxa padrão. Ou seja, o nível de taxa mínimo usa um multiplicador de 1, enquanto o nível de taxa padrão usa um multiplicador de 4.

Como um exemplo prático, há algum tempo atrás o tamanho de bloco mediano aumentou para aproximadamente 400 kB e a taxa padrão baixou para ~0,0095 XMR. Como nós podemos ver na fórmula abaixo, ele se aproxima à taxa teórica, que é:

Taxa padrão teórica por kB = (6,5/10) * (300/400) * 0,002 * (60/300) * 4 = ~0,0008 XMR/kB

Multiplicando esse valor pelo tamanho de uma transação típica (~13 kB):

Taxa teórica = 0,0008 XMR/kB * 13 kB = ~0,01 XMR

Em suma, o aumento percentual do tamanho de bloco mediano (em relação ao tamanho de bloco mínimo basal) é inversamente proporcional à redução percentual que é observada nas taxas.  Por exemplo, se o tamanho de bloco mediano aumentasse para 600 kB, correspondendo a um aumento de 100% (x2) em relação ao tamanho de bloco mínimo de 300 kB, a taxa iria reduzir em 50% (x1/2).

Mas então por que o aumento significativo no preço do Monero não resultou em uma redução significativa nas taxas absolutas, ou seja, no valor das taxas em XMR? A justificava é que o aumento do preço foi significativamente maior do que o aumento da utilização da moeda. Além disso, o tamanho de bloco mediano precisa estar constantemente acima de 300 kB para que o algoritmo de taxa dinâmica funcione adequadamente. Adicionalmente, o algoritmo foi projetado para se correlacionar com o preço, mas, como podemos ver, o preço tem uma correlação imperfeita com a utilização da moeda. Resumindo, embora a utilização da moeda tenha crescido bastante, ela não cresceu tanto quanto o preço, e em função disso as taxas (em XMR) ainda não reduziram.


Conclusão

Ao analisarmos as fórmulas da penalidade, do tamanho de bloco dinâmico e da taxa dinâmica, podemos inferir que um tamanho de bloco mínimo maior (por exemplo, 300 kB) inicialmente levaria a taxas padrões menores,  mas a uma lenta redução das taxas (através do algoritmo da taxa dinâmica). Por outro lado, um tamanho de bloco mínimo menor (por exemplo, 150 kB) inicialmente levaria a taxas padrões maiores, mas a uma rápida redução das taxas.

Concluindo, embora as taxas atualmente estejam bastante altas, elas provavelmente não permanecerão altas no futuro. Além disso, novos estudos serão realizados em relação ao tamanho de bloco mínimo, porque, preferencialmente, nós gostaríamos de mantê-lo em um valor que não exigisse nenhuma intervenção no futuro.


Algumas considerações finais:

  1. As taxas medianas foram obtidas em Bitinfocharts.
  2. Uma análise mais aprofundada (feita por ArticMine) da função de penalidade pode ser encontrada aqui.
  3. A função de penalidade do whitepaper original da CryptoNote é um pouco diferente. Mais informações podem ser encontradas aqui.
  4. Os detalhes do código e a implementação do algoritmo de tamanho de bloco dinâmico podem ser encontrados aqui.
  5. Os detalhes do código e a implementação do algoritmo de taxa dinâmica podem ser encontrados aqui.