Taxas de Transação¶
Introdução¶
Redes powered by Tanssi são construídas com um framework modular chamado Substrate. Com esse framework, você pode criar formas próprias de lidar com taxas de transação. Por exemplo, a maioria das transações usa um módulo específico chamado Transaction Payment. Contudo, em redes Tanssi compatíveis com EVM, as taxas podem ser cobradas no nível da execução EVM, contornando outros módulos relacionados a taxas.
Sob o capô, para Runtime, em vez de um mecanismo baseado em gas, todas as redes Tanssi usam um mecanismo baseado em weight. Weight refere-se ao tempo (em picosegundos) para validar um bloco. De modo geral, para redes Tanssi EVM e não EVM, todas as chamadas têm um weight associado, que define limites de entrada/saída de storage e de computação. Para redes Tanssi EVM, há um mapeamento gas-to-weight totalmente compatível com os requisitos de gas esperados por ferramentas baseadas na Ethereum API.
Um esquema de taxas é aplicado sobre o mecanismo de weight para alinhar incentivos econômicos, limitando Runtime, computação e número de chamadas (leituras/gravações). Taxas são fundamentais para evitar spam, pois representam o custo de usar o serviço da rede Tanssi. Assim, um usuário que interage com a rede por meio de uma chamada paga uma taxa determinada por um algoritmo de taxa base.
Esta página aborda os fundamentos das taxas em redes Tanssi. Primeiro cobre a arquitetura subjacente de taxas e como ela é adaptada a um Template totalmente compatível com EIP-1559 para redes Tanssi EVM.
Baseline Fees Calculation¶
Cada ação que altera o estado de uma rede Tanssi gera uma taxa de transação. Essa taxa é essencial para a operação da rede, cobrindo os recursos computacionais necessários para processar transações, de forma similar aos parâmetros de gas e gas price em cadeias compatíveis com EVM como a Ethereum.
O framework modular das redes Tanssi usa um mecanismo de cálculo baseado em weight para determinar taxas. Essa abordagem considera vários fatores, incluindo recursos computacionais e operações de storage (inputs/outputs), para refletir com precisão o custo real das transações. Ao contabilizar esses elementos, a rede garante alocação de recursos justa e eficiente.
Além disso, a modularidade das redes Tanssi garante que redes compatíveis com EVM suportem mecanismos de precificação legados e compatíveis com EIP-1559, assegurando compatibilidade total com ambientes de desenvolvimento usados na Ethereum.
Esta seção apresenta os diferentes conceitos associados às taxas em redes Tanssi.
Weight¶
De forma ampla, weight refere-se ao Runtime para validar um bloco, medido em picosegundos. O weight se divide em duas variáveis:
refTime- peso associado a tempo de computação e leituras/gravações em banco de dadosproofSize- peso associado ao tamanho da Prova de Validade (PoV). A PoV se relaciona ao estado relevante de uma transação, e é o que o Sequencer da rede Tanssi compartilha com os operators do provedor de segurança para validar e finalizar um bloco como parte do fluxo de transações da rede
Para descobrir os weights de todas as chamadas, elas são benchmarked em hardware de referência, e valores aproximados de refTime e proofSize são definidos. Esse processo se repete para todas as chamadas que consomem espaço de bloco e afetam a PoV.
Para transações em que as taxas são tratadas pelo módulo transaction payment, todos os parâmetros baseados em weight passam por um algoritmo weight to fee que converte tudo em um valor final, deduzido da conta do remetente ao executar a chamada. O algoritmo pode ser personalizado, mas redes Tanssi definem um valor constante.
Para transações EVM, o gas é convertido em weight por meio de um algoritmo gas-to-weight, para que todas as chamadas EVM possam ser mapeadas para o Runtime do bloco. Ainda assim, as taxas são tratadas no nível da execução EVM.
Baseline Transaction Fees¶
Com todas as chamadas benchmarked, a taxa de transação para cada chamada específica pode ser obtida. As taxas geralmente são compostas pelos seguintes elementos:
BaseFee- custo básico para incluir a transação. Cobre a sobrecarga de inclusão, como verificação de assinatura. A taxa é definida por dois parâmetros:ExtrinsicBaseWeight- valor constante que representa o weight da sobrecarga de inclusãoWeightToFee- função polinomial que converte weight em taxa
WeightFee- taxa definida por dois parâmetros:BenchmarkedWeight- weight que reflete a complexidade (Runtime) de uma chamada específicaCongestionMultiplier- função que converte weight em taxa e pode ser ajustada para considerar a congestão da rede (weight consumido no bloco anterior). A estratégia padrão nas redes Tanssi éSlowAdjustingFeeUpdate, que ajusta esse multiplicador lentamente conforme a carga da rede
LengthFee- taxa correlacionada ao tamanho em bytes da chamada. Definida por dois parâmetros:ByteLengthFunctionCall- tamanho em bytes da chamadaLengthToFee- função que define o algoritmo de taxa por byte. Nas redes Tanssi, é um valor constante
Tip- valor opcional que aumenta a taxa total, elevando a prioridade da transação ao incentivar Sequencers a incluí-la no próximo bloco
Assim, em termos gerais, a taxa de transação pode ser calculada pela equação:
BaseFee = ExtrinsicBaseWeight * WeightToFee
WeightFee = BenchmarkedWeight * CongestionMultiplier
LengthFee = ByteLengthFunctionCall * LengthToFee
InclusionFee = BaseFee + WeightFee + LengthFee
FinalFee = InclusionFee + Tip
Todas as chamadas não EVM disponíveis aos desenvolvedores usam esses cálculos básicos para taxas. Redes Tanssi EVM adicionam uma camada extra para traduzir esse esquema para algo semelhante ao Template Ethereum do ponto de vista da Ethereum JSON-RPC e da EVM.
EVM Transaction Fees¶
A Tanssi oferece templates para redes EVM completas. Essas redes fornecem um ambiente similar ao Ethereum, onde os desenvolvedores podem usar bibliotecas como Ethers.js, Hardhat e Foundry.
Além disso, todas as redes Tanssi compatíveis com EVM têm um mecanismo de precificação compatível com EIP-1559 para transações EVM. Elas suportam os dois tipos de transação EVM mais comuns:
- Tipo 0 (Legacy) - a taxa é calculada por um valor único de gas price incluído no blob da transação assinada. Como as redes Tanssi EVM têm precificação dinâmica, o gas price deve ser maior que o
baseFeedo bloco atual para a transação ser válida - Tipo 2 (EIP-1559) - a taxa é calculada com a combinação de
maxFeePerGasemaxPriorityFeePerGasno blob da transação, e obaseFeeda rede muda dinamicamente com base na congestão do bloco
Independentemente do tipo de transação, o resultado é um custo em tokens nativos que a rede deve cobrar.
Por padrão, redes Tanssi compatíveis com EVM têm os seguintes parâmetros:
- Minimum BaseFee - gas price mínimo da rede caso não haja transações por longos períodos. O valor padrão é 1 GWei
- Block Fulness Target (Elasticity) - alvo de gas usado em um bloco para manter o
baseFeeestável. A EIP-1559 define esse valor como 2, significando que a meta de uso é 50% do limite de gas do bloco. Todas as redes Tanssi EVM usam a mesma meta - Maximum BaseFee Increase - aumento máximo do
baseFee, em pontos percentuais, com base no uso-alvo do bloco anterior. A EIP-1559 define esse valor como 12,5%. Assim, se o bloco estiver cheio/vazio, obaseFeeaumenta/diminui 12,5%, ajustando-se linearmente para valores intermediários. Esse valor é configurável, mas o padrão nas redes Tanssi EVM é 12,5%
Note
Uma diferença importante na implementação EIP-1559 das redes Tanssi EVM é que as taxas são calculadas usando o baseFee do bloco anterior.
O custo de taxa de transação para chamadas EVM nas redes Tanssi é capturado no nível de execução EVM. Ainda assim, transações EVM consomem Runtime de bloco. Portanto, é necessário um algoritmo gas-to-weight para contabilizar o weight consumido por uma chamada em relação ao gas usado.
Por fim, a taxa e o weight associados a uma chamada EVM em uma rede Tanssi compatível com EVM podem ser calculados assim:
Gas Price = baseFee + maxPriorityFeePerGas < maxFeePerGas ?
baseFee + maxPriorityFeePerGas :
maxFeePerGas;
Transaction Fee = Gas Price * Gas Used
Transaction Weight = Gas Used * GasToWeight
Transaction Fee = GasPrice * GasUsed
Transaction Weight = GasUsed * GasToWeight
GasToWeight é um valor constante definido como 25000.
| Criada: 7 de janeiro de 2026