Estabilização de preços de armazenamento

A rede Arweave aceita pagamentos em AR para armazenamento de dados. À medida que o preço do AR flutua, o sistema implanta uma heurística para garantir que o custo dos dados armazenados no Arweave seja estável em termos fiduciários. Aqui, explicamos o design desse mecanismo dinâmico de estabilização de preços de armazenamento.

Custo de Upload

Existem 3 componentes que determinam o custo de armazenamento de quaisquer dados no Arweave:

  • Tamanho dos dados que estão sendo armazenados
  • Custo Fiat de armazenar perpetuamente 1 GB de dados hoje
  • Preço do token nativo da AR ( Arweave ) em termos fiduciários
desenho

A primeira quantidade acima do tamanho dos dados ( ) é obtida no cabeçalho da transação. Para o custo do armazenamento perpétuo, consulte aqui. Este artigo enfoca a peça final – o preço do USD em AR ou, equivalentemente, o inverso do preço do AR em USD.

Estimando o preço do ficha AR

Para determinar o valor fiduciário da AR, em vez de depender de oráculos externos, a Arweave usa uma medida proxy – estima o valor do token com base em:

  • Linha de base: Um preço de referência da AR em um ponto específico da história.
  • Mudar: Mudança relativa nas recompensas de RA da linha de base.

A mudança nas recompensas de AR é em si uma função de duas coisas:

  • Dificuldade de rede ( Relação direta ): uma dificuldade crescente significa que mais mineiros são incentivados a participar do ecossistema – um sinal de que o preço da AR está subindo.
  • Recompensas de inflação ( Relação inversa ): à medida que as recompensas pela inflação diminuem, o preço da AR deve aumentar para acompanhar os custos da mineração.

Vamos dar uma olhada em como esses fatores são calculados nos nós da Arweave.

O código

Nota: Esta próxima parte é bastante detalhada e mergulha no código que implementa o mecânico de estabilização de preços – se você quiser entendê-lo conceitualmente, pule para a próxima parte ( Em resumo )

Olhando para o código público para nós Arweave, podemos ver que o preço de um token AR é calculado em ar_pricing.erl, na forma inversa ( calculamos a quantidade de AR por USD ):

1 %% @doc Return the amount of AR the given number of USD is worth.
2 usd_to_ar(USD, Rate, Height) when is_number(USD) ->
3	 usd_to_ar({USD, 1}, Rate, Height);

Este usd_to_ar função faz uma chamada para outro método com o mesmo nome,

4 usd_to_ar({Dividend, Divisor}, Rate, Height) ->
5 	InitialInflation = trunc(ar_inflation:calculate(?INITIAL_USD_TO_AR_HEIGHT(Height)  ())),
6 	CurrentInflation = trunc(ar_inflation:calculate(Height)),
7 	{InitialRateDividend, InitialRateDivisor} = Rate,
8 	trunc(	Dividend
9 			* ?WINSTON_PER_AR
10 			* CurrentInflation
11 			* InitialRateDividend	)
12 		div Divisor
13		div InitialInflation
14 		div InitialRateDivisor.

Este método,

  • ( 5-6 ) faz chamadas primeiro para calcular as taxas de inflação inicial e atual.
  • ( 8-14 ) multiplica o valor a ser calculado com a razão entre a taxa de inflação atual e a inicial e a Rate parâmetro ( result in Winstons, a unidade atômica de AR)

Rate o próprio parâmetro é um coeficiente inverso de Dificuldade de rede isso é recalculado a cada 50 blocos. Quanto menor esse valor, menor mais alto a dificuldade da rede. O Rate parâmetro é calculado na função recalculate_usd_to_ar_rate:

1 recalculate_usd_to_ar_rate3(#block{ height = PrevHeight, diff = Diff } = B) ->
2   Height = PrevHeight + 1,
3   InitialDiff = ar_retarget:switch_to_linear_diff(?INITIAL_USD_TO_AR_DIFF(Height)()),
4	  MaxDiff = ?MAX_DIFF,
5	  InitialRate = ?INITIAL_USD_TO_AR(Height)(),
6	  {Dividend, Divisor} = InitialRate,
7	  ScheduledRate = {Dividend * (MaxDiff - Diff), Divisor * (MaxDiff - InitialDiff)},
8	  Rate = B#block.scheduled_usd_to_ar_rate,
9	  MaxAdjustmentUp = ar_fraction:multiply(Rate, ?USD_TO_AR_MAX_ADJUSTMENT_UP_MULTIPLIER),
10  MaxAdjustmentDown = ar_fraction:multiply(Rate, ?USD_TO_AR_MAX_ADJUSTMENT_DOWN_MULTIPLIER),
11  CappedScheduledRate = ar_fraction:reduce(ar_fraction:maximum(
12		 ar_fraction:minimum(ScheduledRate, MaxAdjustmentUp), MaxAdjustmentDown),
13		 ?USD_TO_AR_FRACTION_REDUCTION_LIMIT),
14  ?LOG_DEBUG([{event, recalculated_rate}, {new_rate, element(1, Rate) / element(2, Rate)},
15	 {new_scheduled_rate, element(1, CappedScheduledRate) / element(2, CappedScheduledRate)},
16	 {new_scheduled_rate_without_capping,
17		 element(1, ScheduledRate) / element(2, ScheduledRate)},
18	 {max_adjustment_up, element(1, MaxAdjustmentUp) / element(2,MaxAdjustmentUp)},
19	 {max_adjustment_down, element(1, MaxAdjustmentDown) / element(2,MaxAdjustmentDown)}]),
20  {Rate, CappedScheduledRate}.

Embora isso pareça longo, existem apenas duas ações principais nesse método:

  • ( 7 ) Cálculo de ScheduledRate com base na dificuldade atual e na dificuldade inicial ( no momento em que o valor da linha de base da AR foi definido )
  • ( 8-13 ) Limitando o valor calculado para que não flutue mais do que 0.5 por cento a cada 50 blocos

Em resumo

Juntando todos os valores calculados acima,

desenho

Observe que o preço do USD é denominado em AR – portanto, a quantidade calculada acima é ela própria o inverso do preço do AR.

Para esclarecer essa relação, aqui estão dois exemplos:

  • Dificuldade de rede: se a dificuldade da rede aumentar em 2x, o valor calculado acima diminuirá para metade, e o valor estimado de AR dobra ( à medida que mais mineiros consideram a rede lucrativa para a mina por )
  • Recompensas de inflação: se a recompensa de inflação diminuir para 1/4 da recompensa inicial, o valor calculado acima diminui proporcionalmente ( 4x ) e o preço estimado de AR dobra

e vice-versa, respectivamente!

Observe que o mecanismo descrito aqui possui uma propriedade interessante – o custo do armazenamento nem depende do preço do decreto, mas no valor real de que os mineiros são pagos ao longo do tempo! Isso significa que, se, por algum motivo, o dólar americano aumentar no poder de compra, a quantidade de AR distribuída aos mineiros será maior que o necessário, fazendo com que mais mineiros entrem no sistema e subsequentemente ajustando a estimativa desse mecanismo do preço do token de AR.

Pressupostos

O Mecanismo de Estabilização de Preços acima se baseia em algumas premissas diferentes:

  1. O mercado de mineração Arweave é eficiente. Isso significa que todas as alterações no preço da AR são rapidamente exploradas pelos mineiros. Essa suposição pode ser muito forte porque não considera complexidade técnica, atraso de tempo e barreiras à entrada para a mineração de AR.
  2. Os prêmios de inflação formam uma grande parte das recompensas de mineração, e, portanto, a relação entre recompensas pela inflação e o preço da AR é recíproca. Na prática, embora as recompensas pela inflação atualmente constituam uma grande porcentagem da recompensa total para os mineiros, elas formarão progressivamente um pedaço menor por causa do cronograma de inflação. Para explicar isso, em uma atualização futura, o protocolo estabilizará os preços com base na recompensa total distribuída aos mineiros.