Análise das 7 principais dicas para o desenvolvimento de contratos Uniswap para aumentar a eficiência dos projetos de Finanças Descentralizadas

robot
Geração do resumo em andamento

Dicas de desenvolvimento de contratos inteligentes aprendidas com o código do Uniswap

Recentemente, ao escrever um tutorial de desenvolvimento de exchanges descentralizadas, consultei a implementação do código do Uniswap V3 e aprendi muitas técnicas interessantes de desenvolvimento de contratos inteligentes. Como desenvolvedor que está tentando desenvolver contratos DeFi pela primeira vez, essas técnicas serão muito úteis para iniciantes que desejam aprender a desenvolver contratos.

Web3 Novato Série: Dicas de desenvolvimento de contratos que aprendi com o código do Uniswap

Endereço de contrato previsível

Normalmente, o endereço obtido ao implantar contratos parece aleatório, pois está relacionado com o nonce. No entanto, em certos cenários, precisamos inferir o endereço do contrato através de informações de transação, como determinar permissões de transação ou obter o endereço do pool.

A Uniswap utiliza o método CREATE2 para criar contratos, adicionando o parâmetro salt para tornar o endereço previsível. A nova lógica de geração de endereço é: hash("0xFF", endereço do criador, salt, initcode). Este método permite que o endereço do contrato seja calculado antecipadamente.

![Web3 Novato Série: Dicas de desenvolvimento de contratos que aprendi com o código do Uniswap](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

Uso inteligente de funções de callback

Os contratos em Solidity podem chamar-se uns aos outros. Em certos cenários, o método A chama o método B, e B faz uma chamada de retorno ao método A; este padrão é muito útil.

Por exemplo, ao utilizar o método swap do Uniswap, será chamado o swapCallback, que recebe a quantidade real de tokens necessários. O chamador deve transferir os tokens no callback, em vez de dividir o swap em duas chamadas. Isso garante a execução completa do método swap, sem a necessidade de registros complicados de variáveis para garantir a segurança.

Usar exceções para passar informações, usar try-catch para estimar transações

No contrato Quoter do Uniswap, o método swap do UniswapV3Pool foi encapsulado em um bloco try-catch. Isso é feito para simular a troca a fim de estimar a quantidade de tokens necessária, mas a estimativa não realiza a troca real de tokens, portanto, ocorrerá um erro.

O Uniswap lança um erro especial durante o callback de transação, e então captura esse erro e extrai as informações necessárias dele. Este método evita a necessidade de modificar o método swap para estimar a demanda, tornando a lógica mais simples.

![Web3 Novato Série: Dicas de Desenvolvimento de Contratos que Aprendi com o Código do Uniswap])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Operações com grandes números resolvem problemas de precisão

No Uniswap, envolve-se uma grande quantidade de cálculos, como calcular a quantidade de tokens a serem trocados com base no preço e na liquidez. Para evitar a perda de precisão nas operações de divisão, é comum usar a operação << FixedPoint96.RESOLUTION no processo de cálculo, que é equivalente a deslocar 96 bits para a esquerda, ou seja, multiplicar por 2^96.

Deslocar para a esquerda e depois fazer a divisão pode garantir a precisão, desde que as transações normais não causem estouro. Embora ainda haja uma pequena perda de precisão em teoria, já é aceitável.

Cálculo de lucros por meio de compartilhamento

A Uniswap precisa registar os rendimentos de taxa dos provedores de liquidez LP). É evidente que não se pode registar as taxas para cada LP a cada transação, pois isso consumiria uma grande quantidade de Gas.

A solução é registrar a taxa total de serviço e a taxa de serviço a ser alocada por unidade de liquidez. A taxa de serviço que pode ser retirada é calculada com base na liquidez mantida pelo LP, semelhante a um dividendo de ações.

Web3 Novato Série: Dicas de Desenvolvimento de Contratos que Aprendi com o Código do Uniswap

Distinção entre informações on-chain e off-chain

O armazenamento em cadeia é relativamente caro, nem todas as informações precisam estar na cadeia ou serem obtidas da cadeia. Muitos dos interfaces chamados pela interface do Uniswap são interfaces tradicionais da Web2.

A lista de pools de negociação, informações, etc. podem ser armazenadas em um banco de dados comum, sincronizando regularmente a partir da blockchain. Não é necessário chamar a interface RPC em tempo real para obter dados relevantes. Claro que transações-chave ainda ocorrem na blockchain.

Divisão de contratos e reutilização de contratos padrão

Um projeto pode conter vários contratos efetivamente implantados. Mesmo que apenas um contrato seja implantado, o código pode ser dividido em vários contratos mantidos por meio de herança.

Como o contrato NonfungiblePositionManager da Uniswap herda vários contratos. O ERC721Permit utiliza diretamente o contrato ERC721 da OpenZeppelin, facilitando a gestão de posições através de NFTs e aumentando a eficiência do desenvolvimento.

Resumo

Desenvolver por conta própria é mais eficaz do que simplesmente ler artigos. Tente implementar uma versão simples de uma exchange descentralizada, para entender melhor a implementação do código do Uniswap e aprender pontos de conhecimento em projetos reais.

Web3 Novato Série: Dicas de desenvolvimento de contratos que aprendi com o código do Uniswap

UNI3.06%
DEFI15.28%
Ver original
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
  • Recompensa
  • 7
  • Compartilhar
Comentário
0/400
PoolJumpervip
· 07-28 02:11
Zero infraestrutura faz algumas coisas
Ver originalResponder0
OldLeekConfessionvip
· 07-27 04:18
Se você conseguir me fazer entender, já será incrível...
Ver originalResponder0
OnchainGossipervip
· 07-27 03:51
Sugiro praticar a operação na prática~
Ver originalResponder0
BagHolderTillRetirevip
· 07-25 17:02
Finalmente encontrei uma saída para a situação em que estou preso.
Ver originalResponder0
PanicSeller69vip
· 07-25 17:00
A V3 ainda tem algo! Vamos lá!
Ver originalResponder0
degenonymousvip
· 07-25 16:58
É o evangelho para a comunidade de programadores.
Ver originalResponder0
AirdropDreamBreakervip
· 07-25 16:56
Desenvolver não é melhor do que simplesmente roubar código
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)