Sete dicas essenciais para o desenvolvimento de contratos DEX Leitura obrigatória para novatos

Partilha de Dicas para Desenvolvimento de Contratos

Recentemente, ao participar de um projeto de desenvolvimento de uma exchange descentralizada, consultei a implementação de código de um DEX conhecido e aprendi várias técnicas práticas de desenvolvimento de contratos. Como um desenvolvedor que anteriormente se dedicava principalmente ao desenvolvimento de contratos NFT, esta é a minha primeira tentativa de desenvolver contratos DeFi. Aqui estão algumas dicas que podem ser úteis para desenvolvedores novatos.

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 com o nonce. Mas em certos cenários, precisamos inferir o endereço do contrato a partir das informações da transação, o que é útil para determinar permissões de transação ou obter o endereço do pool.

Uma maneira é usar o CREATE2 para criar um contrato, tornando o endereço gerado previsível ao adicionar o parâmetro salt. A fórmula para calcular o novo endereço é:

Novo endereço = hash("0xFF", endereço do criador, sal, initcode)

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

Uso Inteligente de Funções de Retorno

Os contratos em Solidity podem chamar uns aos outros. Em certos cenários, o método A chama o método B, e B, ao ser chamado, faz um callback para A. Esse padrão é muito útil.

Por exemplo, ao negociar em um determinado DEX, o método swap do contrato pool chamará swapCallback, passando a quantidade real de tokens necessária. O chamador deve transferir os tokens na callback, em vez de dividir o swap em várias chamadas. Isso garante a integridade e a segurança do método swap.

Usar exceções para transmitir informações

No código de um determinado DEX, utiliza-se um bloco try-catch para envolver o método swap do contrato pool a fim de simular a negociação e estimar os Tokens necessários. Como não ocorre a troca real de Tokens durante a estimativa, um erro será lançado. Ao lançar um erro especial na chamada de retorno e, em seguida, capturar e analisar a informação do erro, é possível obter o resultado da estimativa.

Esta técnica evita a necessidade de adaptar o método de swap especificamente para estimar a demanda, mantendo a lógica simples.

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

Problema de precisão no processamento de grandes números

Ao lidar com o cálculo de preços e liquidez, para evitar a perda de precisão nas operações de divisão, pode-se primeiro deslocar à esquerda 96 bits (, o que equivale a multiplicar por 2^96), e depois realizar a operação. Assim, em condições normais de negociação, sem estouro, pode-se garantir a precisão.

Cálculo de Lucros do Modo de Compartilhamento

Ao registrar os rendimentos das taxas de LP, não é possível registrar cada LP a cada transação, pois isso consumiria uma grande quantidade de Gas. Uma solução é registrar a taxa total e a taxa que deve ser alocada a cada unidade de liquidez. Quando os LPs retiram, as taxas que podem ser retiradas são calculadas com base na liquidez mantida, semelhante a um dividendo de ações.

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

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

Nem todas as informações precisam ser registradas na blockchain ou obtidas a partir dela. Por exemplo, listas de pools de negociação, informações sobre pools, etc., podem ser armazenadas em um banco de dados comum e sincronizadas periodicamente com a blockchain. Isso pode melhorar o desempenho e a eficiência. Claro, transações críticas ainda precisam ser realizadas na blockchain.

Divisão e Reutilização de Contratos

Grandes projetos podem incluir múltiplos contratos implementados na prática. Mesmo que apenas um contrato seja implementado, ele pode ser dividido em vários contratos através de herança para facilitar a manutenção. Ao mesmo tempo, aprender a utilizar contratos padrão existentes como o ERC721 pode aumentar a eficiência do desenvolvimento.

A prática é a melhor forma de aprender. Ao implementar uma versão simplificada de um DEX, é possível entender mais profundamente a implementação de código de certos projetos complexos e aprender mais sobre pontos de conhecimento em projetos reais. Espero que essas pequenas dicas ajudem os novatos que desejam aprender desenvolvimento de contratos.

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

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
  • 10
  • Repostar
  • Compartilhar
Comentário
0/400
DiamondHandsvip
· 12h atrás
create2 moeda direta
Ver originalResponder0
UnluckyMinervip
· 08-07 07:50
Envie mais trechos de código
Ver originalResponder0
BridgeJumpervip
· 08-07 04:50
Citar também é uma arte.
Ver originalResponder0
nft_widowvip
· 08-06 21:36
Bom texto deve ser apoiado
Ver originalResponder0
LiquidityWizardvip
· 08-05 23:03
Endereço previsão é muito importante.
Ver originalResponder0
ImpermanentLossFanvip
· 08-05 23:01
As letras são muito poucas, não dá para ver o suficiente.
Ver originalResponder0
LightningLadyvip
· 08-05 23:01
insights valiosos满满有料
Ver originalResponder0
DeFi_Dad_Jokesvip
· 08-05 22:50
Marcar pontos importantes para guardar e ver
Ver originalResponder0
gas_fee_therapistvip
· 08-05 22:45
gás花太值了
Ver originalResponder0
PaperHandSistervip
· 08-05 22:43
subir conhecimento, irmãos
Ver originalResponder0
Ver projetos
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)