Desenvolvimento de Contratos Inteligentes Avançado: 7 Dicas Práticas para Ajudar Projetos DeFi

robot
Geração de resumo em curso

Dicas e experiências sobre desenvolvimento de contratos

Recentemente, durante o desenvolvimento de uma troca descentralizada, referenciei a implementação do código do Uniswap V3 e aprendi várias técnicas úteis de desenvolvimento de contratos. Como um desenvolvedor que já criou contratos NFT simples, esta tentativa de desenvolvimento de contratos Defi foi muito enriquecedora para mim. Essas técnicas devem ser muito úteis para iniciantes que desejam aprender a desenvolver contratos.

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

Endereço de contrato previsível

Normalmente, a implantação de um contrato resulta em um endereço que parece aleatório, pois está relacionado ao nonce. Mas em certos cenários, precisamos inferir o endereço do contrato através de informações relacionadas à transação, como determinar permissões de transação ou obter o endereço do pool.

Uma abordagem prática é usar CREATE2 para criar contratos. Ao adicionar o parâmetro salt, é possível tornar o endereço do contrato criado previsível. A lógica de geração do novo endereço é: hash("0xFF", endereço do criador, salt, initcode). Essa abordagem nos permite saber o endereço antes de criar o contrato.

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

Uso inteligente de funções de callback

Os contratos em Solidity podem chamar uns aos outros. Em certas situações, A chama o método de B, e B faz uma chamada de retorno para A no método chamado; esse padrão é muito útil.

Por exemplo, durante a negociação, o contrato do pool chamará swapCallback, passando a quantidade real de Tokens necessária para esta transação. A parte chamadora precisa transferir os Tokens para o contrato do pool durante o callback. Este método garante a segurança e integridade do método swap, sem a necessidade de registros de variáveis complexos.

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

Ao estimar uma transação, precisamos simular o método swap, mas não trocar realmente os Tokens. Uma abordagem inteligente é lançar um erro especial no callback da transação e, em seguida, capturar esse erro e extrair as informações necessárias dele. Essa abordagem evita a necessidade de adaptar o método swap especificamente para a estimativa da transaçã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

A grande numeração resolve o problema de precisão

Quando se trata de cálculos de preços e liquidez, para evitar a perda de precisão nas operações de divisão, pode-se utilizar a operação de deslocamento à esquerda ( que equivale a multiplicar por 2^96). Desta forma, é possível garantir a precisão durante transações normais sem estouros. Embora teoricamente ainda haja uma pequena perda de precisão, ela já é aceitável.

Cálculo de lucros pelo método Share

Para o cálculo da receita de taxas de transação dos LPs, não é viável registrar cada LP em cada transação, pois isso consumiria uma quantidade significativa de Gas. Uma boa abordagem é registrar a taxa total e a taxa que deve ser alocada por unidade de liquidez. Quando os LPs retiram, as taxas que podem ser retiradas são calculadas com base na liquidez mantida, semelhante ao princípio dos dividendos de ações.

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

Combinação de dados on-chain e off-chain

Nem toda a informação precisa ser colocada na blockchain ou obtida a partir dela. Informações como listas de pools, detalhes dos pools, etc., podem ser armazenadas em bancos de dados comuns e sincronizadas periodicamente a partir da blockchain. Isso pode melhorar o desempenho e a eficiência, reduzindo os custos. Claro que transações críticas ainda precisam ser realizadas na blockchain.

Divisão de Contrato e Reutilização de Contratos Padrão

Um projeto pode conter vários contratos realmente implantados. Mesmo que apenas um contrato seja implantado, o código pode ser mantido dividindo-o em vários contratos por meio da herança.

Ao mesmo tempo, utilizar contratos padrão existentes ( como o ERC721) pode aumentar a eficiência do desenvolvimento. Por exemplo, usar o ERC721 para gerenciar posições é conveniente e permite a reutilização de código maduro.

Resumo

A prática de desenvolvimento é a melhor maneira de aprender. Tentar implementar uma versão simplificada de uma bolsa descentralizada pode ajudá-lo a entender melhor a implementação do código do Uniswap e aprender mais sobre pontos de conhecimento em projetos práticos. Espero que essas experiências compartilhadas sejam úteis para você.

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

Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 4
  • Partilhar
Comentar
0/400
New_Ser_Ngmivip
· 3h atrás
Então isso ainda é Novato
Ver originalResponder0
gas_fee_traumavip
· 16h atrás
Os contratos são difíceis de lidar, irmão.
Ver originalResponder0
SchrodingerAirdropvip
· 16h atrás
Renascentista, eu renasci em uma negociação anômala
Ver originalResponder0
degenwhisperervip
· 16h atrás
o v3 no fundo ainda é pouco flexível
Ver originalResponder0
  • Pino
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)