Futuros
Aceda a centenas de contratos perpétuos
CFD
Ouro
Plataforma de ativos tradicionais globais
Opções
Hot
Negoceie Opções Vanilla ao estilo europeu
Conta Unificada
Maximize a eficiência do seu capital
Negociação de demonstração
Introdução à negociação de futuros
Prepare-se para a sua negociação de futuros
Eventos de futuros
Participe em eventos para recompensas
Negociação de demonstração
Utilize fundos virtuais para experimentar uma negociação sem riscos
Lançamento
CandyDrop
Recolher doces para ganhar airdrops
Launchpool
Faça staking rapidamente, ganhe potenciais novos tokens
HODLer Airdrop
Detenha GT e obtenha airdrops maciços de graça
Pre-IPOs
Desbloquear acesso completo a IPO de ações globais
Pontos Alpha
Negoceie ativos on-chain para airdrops
Pontos de futuros
Ganhe pontos de futuros e receba recompensas de airdrop
Investimento
Simple Earn
Ganhe juros com tokens inativos
Investimento automático
Invista automaticamente de forma regular.
Investimento Duplo
Aproveite a volatilidade do mercado
Soft Staking
Ganhe recompensas com staking flexível
Empréstimo de criptomoedas
0 Fees
Dê em garantia uma criptomoeda para pedir outra emprestada
Centro de empréstimos
Centro de empréstimos integrado
Promoções
Centro de atividades
Participe de atividades para recompensas
Referência
20 USDT
Convide amigos para recompensas de ref.
Programa de afiliados
Ganhe recomp. de comissão exclusivas
Gate Booster
Aumente a influência e ganhe airdrops
Announcements
Atualizações na plataforma em tempo real
Blog da Gate
Artigos da indústria cripto
AI
Gate AI
O seu parceiro de IA conversacional tudo-em-um
Gate AI Bot
Utilize o Gate AI diretamente na sua aplicação social
GateClaw
Gate Lagosta Azul, pronto a usar
Gate for AI Agent
Infraestrutura de IA, Gate MCP, Skills e CLI
Gate Skills Hub
Mais de 10 mil competências
Do escritório à negociação, uma biblioteca de competências tudo-em-um torna a IA ainda mais útil
GateRouter
Escolha inteligentemente entre mais de 40 modelos de IA, com 0% de taxas adicionais
As técnicas de desenvolvimento de contratos que aprendi ao ler o código do Uniswap são muito mais interessantes do que os livros didáticos
Recentemente, ao fazer um tutorial de desenvolvimento de exchanges descentralizadas, estudei profundamente a implementação do Uniswap V3 e descobri que algumas abordagens são realmente geniais. Antes, só tinha escrito contratos simples de NFT, e desta vez foi a primeira vez que realmente mergulhei no código de contratos DeFi, descobrindo várias coisas que quero compartilhar com quem quer aprender Uniswap.
Vou começar com uma das coisas que mais me surpreenderam — o endereço do contrato pode ser até previsto?
Normalmente, o endereço de um contrato implantado parece aleatório, mas o Uniswap usou uma estratégia inteligente. Ele, ao criar o contrato, adiciona um parâmetro salt, usando a operação CREATE2, para tornar o endereço gerado previsível. A implementação específica é algo como: “pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());” nesse trecho de código. Essa abordagem permite que, apenas conhecendo os tokens e a taxa de comissão, se calcule o endereço do pool sem precisar realmente implantá-lo. Isso é especialmente útil para verificar permissões de transação ou localizar rapidamente pools.
O design da função de callback também é bastante engenhoso.
No Uniswap, ao chamar o método swap para fazer uma troca, ele faz uma chamada de retorno para swapCallback, passando a quantidade de tokens necessária, e você, na callback, transfere os tokens. Assim, toda a lógica da troca é executada de forma completa, sem precisar dividir em várias etapas ou usar variáveis complexas para garantir segurança. Em resumo, é como se A chamasse B, e B, ao ser chamado, chamasse A de volta, formando um ciclo fechado.
O método de estimativa de troca também é bem hackeado — usando exceções para transmitir informações.
Como a estimativa de troca não realiza realmente a troca de tokens, ela gera uma exceção. A abordagem do Uniswap é lançar um erro especial na callback, e usar try-catch para capturar e analisar essa mensagem de erro, extraindo os dados necessários. Parece um pouco bruto, mas é bastante prático, permitindo implementar a estimativa sem precisar modificar o método swap.
A solução para problemas de precisão também merece atenção.
Ao calcular a troca de tokens, fazer uma divisão direta pode perder precisão. O Uniswap resolve isso ao deslocar o valor 96 bits à esquerda (equivalente a multiplicar por 2^96), fazer a divisão, e depois ajustar o resultado removendo o fator 2^96. Assim, dentro do intervalo de uint256, consegue-se manter a precisão sem overflow. As variáveis sqrtRatioAX96 e sqrtRatioBX96 no código representam essa lógica, que parece complexa, mas é bem clara na sua ideia.
A forma inteligente de calcular os ganhos de taxas também é interessante.
Em vez de registrar as taxas de cada LP a cada troca — o que consumiria muito gás —, eles mantêm o total de taxas acumuladas e a proporção de participação de cada um. Quando o LP retira seus fundos, basta multiplicar sua liquidez pela taxa acumulada por ação, como um dividendo proporcional. Essa abordagem de cálculo de shares é bastante comum em vários projetos.
Outro ponto importante é que nem toda informação precisa estar na blockchain.
Listas de pools, informações básicas, etc., podem estar em bancos de dados tradicionais, sincronizados periodicamente com a cadeia, sem precisar fazer chamadas RPC em tempo real. Muitos provedores de serviços blockchain oferecem APIs avançadas para obter dados de forma mais rápida e barata, seguindo essa mesma lógica.
Por fim, a organização do código.
Projetos complexos geralmente dividem contratos em várias partes para facilitar manutenção, e o Uniswap faz isso também. Além disso, é importante aproveitar contratos padrão existentes, como usar o ERC721 do OpenZeppelin para gerenciar posições, o que aumenta a eficiência do desenvolvimento e garante qualidade no código.
Para ser honesto, nada substitui a prática. Implementar uma versão simples de uma exchange descentralizada ajuda a entender por que o Uniswap foi projetado assim. O curso WTF-DApp é baseado nessa ideia, guiando você passo a passo na construção de um projeto prático inspirado no Uniswap, o que certamente ajudará bastante no seu desenvolvimento de contratos.