7 grandes dicas de desenvolvimento de contratos: aprenda práticas de Finanças Descentralizadas com o código DEX

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

Recentemente, ao participar de um projeto de tutorial sobre o desenvolvimento de uma exchange descentralizada, consultei a implementação de código de uma DEX conhecida e aprendi muitos pontos interessantes. Como alguém que anteriormente só havia desenvolvido contratos NFT simples, esta tentativa de desenvolver contratos DeFi foi muito enriquecedora. Abaixo, compartilharei algumas dicas úteis, que acredito que ajudarão muito os novatos que desejam aprender sobre desenvolvimento de contratos.

Série para iniciantes em Web3: 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 um contrato parece aleatório, pois está relacionado ao nonce. Mas em certas situações, precisamos inferir o endereço do contrato através de informações de transação, como verificar permissões de transação ou obter o endereço do pool.

Uma forma de implementação é usar CREATE2 para criar um contrato. Ao adicionar o parâmetro salt, é possível tornar o endereço do contrato gerado previsível. A lógica de geração do novo endereço é: hash("0xFF", endereço do criador, salt, initcode).

![Série para iniciantes em Web3: 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 retorno

Em Solidity, os contratos podem chamar uns aos outros. Um cenário comum é o A chamar um método de B, e B fazer uma chamada de retorno para A no método que foi chamado. Isso é muito útil em certas situações.

Por exemplo, em um determinado DEX, quando você chama o método swap do contrato de pool para realizar uma troca, ele irá chamar o swapCallback, passando a quantidade real de tokens necessária para a transação. O chamador precisa transferir os tokens necessários para o contrato de pool no callback, em vez de dividir o método swap. Isso garante a segurança do método swap e a execução completa, sem a necessidade de registros de variáveis complicados.

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

Em certas situações, precisamos simular o método swap para estimar a quantidade de tokens necessários para a troca, mas a estimativa não envolve a troca real de tokens, o que causa um erro. Uma maneira engenhosa de lidar com isso é lançar um erro especial na função de callback da transação e, em seguida, capturar esse erro para extrair as informações necessárias da mensagem de erro.

Este método pode parecer um pouco engenhoso, mas é muito prático. Ele evita a necessidade de remodelar o método swap para estimar a demanda de negociação, 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])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Resolver problemas de precisão com grandes números

Em cenários que envolvem cálculos de preço e liquidez, precisamos evitar a perda de precisão causada pelas operações de divisão. Uma técnica comum é deslocar 96 bits para a esquerda (equivalente a multiplicar por 2^96) durante o processo de cálculo, e então realizar a operação de divisão. Isso garante a precisão sem transbordamento durante as transações normais.

Embora teoricamente ainda haja uma pequena perda de precisão, normalmente trata-se apenas da perda da unidade mínima, o que é aceitável.

Calcular os rendimentos usando o método Share

Para cenários que exigem o registro da receita de taxas dos provedores de liquidez )LP(, não podemos registrar a taxa de cada LP em cada transação, pois isso consumiria uma grande quantidade de gás. Uma maneira eficiente é registrar a taxa total e a taxa que deve ser alocada por unidade de liquidez.

Ao retirar taxas de LP, basta calcular as taxas que podem ser retiradas com base na liquidez detida. Isso é semelhante a como os acionistas calculam os rendimentos atuais que podem ser retirados com base no histórico de lucros por ação da empresa e nos rendimentos da última retirada.

![Série para iniciantes em Web3: Dicas de desenvolvimento de contratos que aprendi com o código do Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

Uso Razoável de Dados Off-Chain

O armazenamento em cadeia é relativamente caro, e nem todas as informações precisam estar na cadeia ou serem obtidas da cadeia. Por exemplo, listas de pools de transações, informações de pools, etc., podem ser armazenadas em bancos de dados tradicionais, sincronizados periodicamente com a cadeia.

Muitos fornecedores de RPC de blockchain também oferecem interfaces avançadas que permitem obter certos dados de forma mais rápida e econômica. Essas interfaces geralmente utilizam cache para melhorar o desempenho e a eficiência.

Aprender a dividir contratos e utilizar contratos padrão

Um projeto pode conter vários contratos implementados na prática. Mesmo que apenas um contrato seja implantado, também podemos dividir o código em vários contratos para manutenção através da herança.

Além disso, a utilização de contratos padrão existentes (como o ERC721) pode aumentar a eficiência de desenvolvimento. Por exemplo, pode-se usar o contrato ERC721 para gerenciar posições de liquidez, o que é conveniente e pode melhorar a eficiência de desenvolvimento.

Resumo

A prática é o melhor método de aprendizagem. Tentar implementar uma versão simplificada de uma exchange descentralizada pode ajudá-lo a entender mais profundamente a implementação do código DEX, além de aprender mais sobre pontos de conhecimento em projetos reais. Quer esteja interessado em desenvolvimento de projetos Web3 ou DeFi, colocar as mãos na massa será uma experiência de aprendizagem valiosa.

![Série para iniciantes em Web3: Dicas de desenvolvimento de contratos que aprendi com o código do Uniswap])https://img-cdn.gateio.im/webp-social/moments-f95ddc9d89809cf11dbe65b9bafda157.webp(

DEFI-5.56%
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • 5
  • Republicar
  • Partilhar
Comentar
0/400
StablecoinEnjoyervip
· 5h atrás
Não é de admirar que a DEX consiga ser compreendida, o create2 é muito bom~
Ver originalResponder0
OnchainArchaeologistvip
· 6h atrás
Endereço previsão esta parte ainda depende de create2
Ver originalResponder0
Layer2Observervip
· 6h atrás
Tecnicamente, o CREATE2 é realmente elegante, mas tem riscos de segurança.
Ver originalResponder0
WenMoon42vip
· 6h atrás
Há muitos segredos na Create2.
Ver originalResponder0
DegenMcsleeplessvip
· 7h atrás
Hehehe, já há dois anos a vigiar o BTC~

Comente de acordo com sua personalidade:

Não finjas, copistas de Uni.
Ver originalResponder0
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)