7 dicas úteis para te ajudar a dominar o desenvolvimento de contratos inteligentes

robot
Geração de resumo em curso

Dicas engenhosas no desenvolvimento de contratos

Recentemente, ao estudar o desenvolvimento de exchanges descentralizadas, consultei a implementação de código de alguns projetos conhecidos e aprendi muitos pontos interessantes. Como um desenvolvedor que está tentando desenvolver contratos Defi pela primeira vez, essas pequenas dicas são muito úteis para iniciantes que desejam aprender a desenvolver contratos.

Vamos dar uma olhada nessas dicas engenhosas, algumas das quais podem até ser consideradas truques extraordinários.

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

Normalmente, o endereço gerado pela implementação de um contrato parece aleatório, porque está relacionado ao nonce. No entanto, em certos cenários, precisamos deduzir o endereço do contrato através de informações equivalentes da transação, como determinar permissões de transação ou obter o endereço do pool.

Uma maneira é usar CREATE2 para criar um contrato, adicionando o parâmetro salt: pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); Assim, o endereço do contrato criado é previsível, a lógica de geração é 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 callback

Em Solidity, os contratos podem chamar uns aos outros. Um padrão é A chamar o método de B, e B fazer um callback para A no método chamado, o que é útil em certos cenários.

Por exemplo, ao chamar o método swap do contrato UniswapV3Pool para realizar uma negociação, ele fará um callback swapCallback, passando o Token necessário para a transação calculado. O chamador precisa transferir o Token necessário para o UniswapV3Pool no callback, em vez de dividir o método swap em duas partes. Isso garante a segurança e a execução completa do método swap, sem a necessidade de registros de variáveis complicados.

Usar exceções para transmitir informações, utilizar try catch para realizar a estimativa de transações

Em alguns contratos, a estimativa de transações é realizada lançando erros especiais na função de callback de transação e, em seguida, capturando esses erros para extrair as informações necessárias da mensagem de erro. Este método pode parecer uma solução fácil, mas é muito prático, pois não requer a modificação do método swap para estimar a demanda de transações, 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(

) A grande quantidade resolve o problema de precisão

Em cenários que envolvem cálculos extensivos, como calcular os tokens trocados com base no preço atual e na liquidez, é necessário evitar a perda de precisão causada pelas operações de divisão. Uma maneira de fazer isso é usar a operação de deslocamento à esquerda, como << FixedPoint96.RESOLUTION, que equivale a multiplicar por 2^96. Após o deslocamento à esquerda, a operação de divisão pode ser realizada, garantindo a precisão sob condições normais de negociação sem estouro.

Cálculo de rendimento por meio de compartilhamento

Para cenários que precisam registrar os ganhos de taxas de transação dos provedores de liquidez LP###, não é viável registrar a taxa para cada LP em todas as transações, pois isso consumiria uma quantidade significativa de Gas.

Uma solução é registrar a taxa total de serviço e a taxa que cada liquidez deve receber. Quando os LPs retiram a taxa de serviço, a taxa que pode ser retirada é calculada com base na liquidez mantida. Isso é semelhante ao mecanismo pelo qual os acionistas retiram dividendos.

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

( Equilíbrio na obtenção de informações on-chain e off-chain

Nem toda a informação precisa ser obtida da cadeia. O armazenamento em cadeia é relativamente caro, muitas informações podem ser armazenadas em bancos de dados tradicionais, como listas de pools de transações, informações de pools de transações, etc. Esses dados podem ser sincronizados periodicamente da cadeia, sem a necessidade de chamar em tempo real a interface RPC dos serviços de cadeia ou nós.

Alguns fornecedores de RPC de blockchain 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.

) Divisão de contratos e utilização de contratos padrão

Um projeto pode conter vários contratos implementados na prática. Mesmo que apenas um contrato seja realmente implementado, o código pode ser dividido 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 no desenvolvimento de contratos. Isso não só facilita a gestão, mas também permite aproveitar padrões consolidados para aumentar a velocidade e a segurança do desenvolvimento.

resumo

O desenvolvimento prático é a forma mais eficaz de aprender a desenvolver contratos. Tentar implementar uma versão simples de uma exchange descentralizada permitirá que você compreenda melhor a implementação do código de projetos conhecidos, além de aprender mais sobre pontos de conhecimento em projetos reais. A prática, com certeza, será útil para você.

![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-f95ddc9d89809cf11dbe65b9bafda157.webp###

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
  • 6
  • Republicar
  • Partilhar
Comentar
0/400
ServantOfSatoshivip
· 08-12 16:04
Habilidades engenhosas, isso não é apenas uma operação ousada?
Ver originalResponder0
mev_me_maybevip
· 08-11 22:32
O que os iniciantes descobriram é um grande segredo? É tudo conversa habitual.
Ver originalResponder0
CommunityLurkervip
· 08-11 16:39
Novato é? Sugiro começar com um hello world.
Ver originalResponder0
Blockwatcher9000vip
· 08-10 12:50
Dizendo de uma forma mais agradável, é técnica; na realidade, são várias manobras ardilosas.
Ver originalResponder0
OnChainDetectivevip
· 08-10 12:46
Estive a estudar o deployment do create2 há muito tempo. Esta técnica não será um truque para colocar minas à espreita? Aqueles que entendem, entendem.
Ver originalResponder0
ContractExplorervip
· 08-10 12:42
Descobrir uma nova vulnerabilidade é a melhor sensação. Correndo contra a vulnerabilidade.
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)