Somente para fins educacionais; não constitui recomendação nem aconselhamento de investimento. Investir pode causar perdas.
Resposta direta
Um oráculo de preço médio ponderado no tempo deriva uma referência de observações acumuladas em um intervalo definido. Não há fórmula universal. A Uniswap v2 acumula o preço marginal linear do pool em cada direção, portanto diferenças entre extremos produzem TWAPs aritméticos. A v3 acumula tick, coordenada logarítmica do preço, e o tick médio aritmético corresponde a um preço relativo médio geométrico.
O resultado exige blockchain, pool, implementação, taxa, ordem dos tokens, direção base/cotação, decimais, extremos, tempo, histórico preenchido e arredondamento definidos. Uma leitura bem-sucedida não prova valor justo nem profundidade executável. Janela maior dilui distorção breve, mas aumenta atraso e não elimina manipulação sustentada, lacunas de liquidez, controle do proponente ou sequenciador, reorgs ou valor extraível superior ao custo do ataque.
Atualidade da observação e do mercado são distintas. Uma média atual pode reter um regime antigo; um pool ativo pode ser raso ou divergir de outros mercados. O consumidor precisa de verificações de histórico, liquidez e divergência, limites por ação e comportamento degradado ou pausado explícito.
Como funciona
- Fixe blockchain e bloco, fábrica e pool, versão e taxa,
token0etoken1, decimais, direção base/cotação, ação, janela e valor em risco. - Identifique objeto e unidades:
price0Cumulativeouprice1Cumulativelinear da v2,tickCumulativeda v3 ou estatística documentada. Não transplante aritmética. - Verifique timestamps, tempo positivo, histórico inicializado mais antigo, cardinalidade atual e regras contrafactuais.
observationCardinalityNexté capacidade-alvo, não histórico preenchido. - Na v2, divida a variação do preço acumulado pelos segundos e normalize ponto fixo e decimais. Calcule cada direção separadamente; o TWAP aritmético reverso geralmente não é o recíproco do direto.
- Na v3, use a interface documentada, divida a variação do tick pela janela, arredonde quociente negativo não exato para menos infinito como
OracleLibrarye converta o tick médio comprice = 1.0001^tick. - Meça liquidez em faixa, harmônica, de faixa ampla, por taxa e externa. Teste trajetórias de um e vários blocos, taxas, arbitragem, ordenação, censura, perda no desfazimento, reorgs, atraso e valor extraível.
- Compare TWAP, spot e referências independentes sob limites de atualidade e desvio; monitore histórico, liquidez, upgrades e blockchain e ensaie histórico insuficiente, divergência, pausa, fallback, liquidação e recuperação.
A v2 mantém dois acumuladores direcionais. A v3 guarda observações em buffer circular e pode interpolar ou construir acumulado atual contrafactual. Esses extremos são aritmética válida, não prova de negociação naquele instante. Aumentar cardinalidade abre espaço futuro; não preenche o passado.
Exemplos resolvidos
- Preço acumulado v2. Se
C_start = 1,000,000 price-seconds,C_end = 1,360,000 price-secondseelapsed = 3,600 seconds, entãoTWAP = (1,360,000 - 1,000,000) / 3,600 = 100 quote/base. Extremos, direção, escala e timestamps integram o resultado. - Armadilha do recíproco. O preço direto é
100por900 secondse400por900 seconds; TWAP250. Spots reversos são0.01e0.0025; TWAP0.00625, cujo recíproco é160, não250. Média e inversão não comutam. - Tick médio negativo. Seja
tickCumulativeDelta = -39,601em3,600 seconds. A divisão de Solidity trunca para-11, mas o helper v3 arredonda parameanTick = -12. O preço geométrico relativo é1.0001^-12 = 0.998800779636. Erro de sinal ou arredondamento cria viés. - Diluição e atraso. O pool fica em
100por1,740 secondse400por60 secondsnuma janela de1,800-second. TWAP aritmético v2:(100 * 1,740 + 400 * 60) / 1,800 = 110; média geométrica v3:100^(29/30) * 400^(1/30) = 104.7294122821. Ambos diferem do spot400; nenhum define sozinho custo ou tamanho executável.
Riscos
- Blockchain, fábrica, pool, taxa, implementação ou upgrade errados.
- Direção base/cotação ou
token0/token1invertida. - Decimais, ponto fixo ou normalização errados.
- Preço aritmético v2 e geométrico v3 tratados como iguais.
- TWAP reverso calculado como recíproco do direto.
- Extremos, tempo, janela ou bloco incorretos.
- Aritmética temporal zero, negativa, envolvida ou específica mal tratada.
- Histórico solicitado anterior à observação inicializada mais antiga.
observationCardinalityNextconfundida comobservationCardinalitypreenchida.- Observações interpoladas ou contrafactuais tomadas como trades.
- Tick negativo arredondado para zero, não menos infinito.
- Conversão, faixa inteira, overflow ou arredondamento inseguros.
- Liquidez ativa ou harmônica insuficiente para a exposição.
- Profundidade de faixa ampla ausente, removida ou ignorada.
- Liquidez fragmentada entre pools, taxas, blockchains ou mercados.
- Janela curta sensível a manipulação atômica ou transitória.
- Janela longa atrasa reprecificação, depeg ou migração.
- Proponente multibloco, sequenciador, censura, MEV ou reorg elevam controle.
- TWAP tratado como valor justo recente ou preço executável sem testes.
- Exposição supera custo de manipulação e controles de recuperação são inseguros.
Equívocos comuns
- “TWAP sempre é média aritmética de preços.” A v3 promedia tick e produz preço relativo médio geométrico.
- “Cotação reversa é sempre um dividido pelo TWAP direto.” Isso não vale para preços lineares promediados separadamente.
- “Janela maior impossibilita manipulação.” Troca sensibilidade breve por atraso e ainda admite controle sustentado.
- “Aumentar cardinalidade cria histórico imediatamente.” Só amplia capacidade futura; observações precisam ser inicializadas.
- “Leitura recente prova valor justo executável.” Sucesso da interface não prova atualidade econômica, profundidade ou exposição segura.
Tópicos relacionados
Fontes
- Uniswap v2 Core - Uniswap (acessado em: 2026-08-13)
- Oracles - Uniswap Developers (acessado em: 2026-08-13)
- Uniswap v3 Core - Uniswap (acessado em: 2026-08-13)
- Price Oracles - Uniswap Developers (acessado em: 2026-08-13)
- Oracle.sol - Uniswap v3 Core (acessado em: 2026-08-13)
- OracleLibrary.sol - Uniswap v3 Periphery (acessado em: 2026-08-13)
- Uniswap v3 TWAP Oracles in Proof of Stake - Uniswap Labs (acessado em: 2026-08-13)
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security (acessado em: 2026-08-13)