Análise do código-fonte do Uniswap: 7 dicas de desenvolvimento de contratos para ajudar na entrada no DEX

robot
Geração do resumo em andamento

Dicas de desenvolvimento de contratos: experiências valiosas aprendidas com o código do Uniswap

Recentemente, ao desenvolver um tutorial sobre uma exchange descentralizada, consultei a implementação de código de uma DEX conhecida e aprendi muitos pontos interessantes. Como um novato que só havia desenvolvido contratos NFT simples antes, esta é a minha primeira tentativa de desenvolver contratos DeFi, e essas dicas devem ser muito úteis para desenvolvedores que desejam começar.

Vamos dar uma olhada nessas dicas úteis, algumas das quais podem ser consideradas truques engenhosos.

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

Endereço de implantação de contrato previsível

Os endereços de contratos normalmente implantados parecem aleatórios, pois estão relacionados com o nonce. No entanto, em certos cenários, precisamos inferir o endereço do contrato com base nas informações das transações, o que é útil para determinar permissões de transação ou obter o endereço da pool.

Pode-se criar contratos utilizando o método CREATE2 adicionando o parâmetro salt, assim o endereço gerado é previsível. A lógica de geração do endereço é: novo endereço = hash("0xFF", endereço do criador, salt, initcode).

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

Utilização inteligente de funções de callback

Em Solidity, os contratos podem chamar uns aos outros. Às vezes, o método A chama o B, e o B faz uma chamada de volta ao A no método chamado, o que é útil em certos cenários.

Por exemplo, ao negociar, o método swap do contrato pool fará uma chamada de retorno swapCallback, passando a quantidade real de Token necessária. A parte chamadora deve transferir o Token no retorno da chamada, em vez de dividir o swap em duas etapas. Isso garante a execução completa e a segurança do método swap.

Usar exceções para transmitir informações, implementar a estimativa de transação com try-catch

Na estimativa de transações, precisamos simular a troca, mas sem realmente trocar Tokens. Podemos lançar um erro especial no callback e, em seguida, capturá-lo e analisar os dados necessários a partir da mensagem de erro. Assim, não é necessário modificar o método de troca para a necessidade de estimativa, tornando a lógica mais simples.

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

Usando grandes números para resolver problemas de precisão

Em cálculos complexos, para evitar a perda de precisão na divisão, pode-se primeiro deslocar à esquerda 96 bits. ( equivale a multiplicar por 2^96). Após o cálculo, pode-se deslocar à direita. Dessa forma, é possível garantir a precisão sem transbordo. A perda de precisão na unidade mínima geralmente é aceitável.

Cálculo de rendimentos usando o Share

Para o cálculo dos lucros de LP, não é necessário registrar a cada transação. Pode-se registrar a taxa total e a parte que cada liquidez deve receber, e no momento da retirada do LP, calcula-se com base na liquidez mantida. Semelhante a um dividendo de ações, basta conhecer a história do lucro por ação e o último momento de retirada.

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

Armazenamento fora da cadeia de informações

O armazenamento em cadeia é relativamente caro, nem todas as informações precisam estar em cadeia. Por exemplo, listas de pools de transações e informações podem existir em um banco de dados comum, sincronizando periodicamente a partir da cadeia. Algumas interfaces RPC avançadas também oferecem formas de obtenção de dados mais rápidas e baratas.

Divisão razoável de contratos, utilizando padrões existentes

Um projeto pode conter vários contratos efetivamente implantados. Mesmo que apenas um seja implantado, ele pode ser dividido em vários contratos através da herança para manutenção. Ao mesmo tempo, é possível utilizar contratos padrão existentes como o ERC721 para aumentar a eficiência do desenvolvimento.

Resumo

Implementar manualmente uma versão simplificada de um DEX pode ajudar a entender melhor a implementação do código e aprender mais sobre pontos de conhecimento em projetos práticos. Recomendo que amigos interessados tentem seguir tutoriais relacionados passo a passo, acreditando que terão grandes ganhos.

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

UNI3.61%
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
  • 5
  • Compartilhar
Comentário
0/400
SelfSovereignStevevip
· 07-20 03:12
Novato, não force o código-fonte.
Ver originalResponder0
TooScaredToSellvip
· 07-20 03:09
Para que serve aprender isso, se ainda se perde dinheiro?
Ver originalResponder0
ChainMaskedRidervip
· 07-20 03:08
A boa nova para os novatos da DEX chegou
Ver originalResponder0
OnchainUndercovervip
· 07-20 02:53
Estudar U é tão fácil quanto copiar o dever de casa.
Ver originalResponder0
PretendingSeriousvip
· 07-20 02:45
Hmm, insights valiosos!
Ver originalResponder0
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)