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.
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).
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(
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.
16 gostos
Recompensa
16
5
Republicar
Partilhar
Comentar
0/400
StablecoinEnjoyer
· 5h atrás
Não é de admirar que a DEX consiga ser compreendida, o create2 é muito bom~
Ver originalResponder0
OnchainArchaeologist
· 6h atrás
Endereço previsão esta parte ainda depende de create2
Ver originalResponder0
Layer2Observer
· 6h atrás
Tecnicamente, o CREATE2 é realmente elegante, mas tem riscos de segurança.
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.
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).
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(
Comente de acordo com sua personalidade:
Não finjas, copistas de Uni.