Dicas de desenvolvimento de contratos inteligentes aprendidas com o código do Uniswap
Recentemente, ao escrever um tutorial de desenvolvimento de exchanges descentralizadas, consultei a implementação do código do Uniswap V3 e aprendi muitas técnicas interessantes de desenvolvimento de contratos inteligentes. Como desenvolvedor que está tentando desenvolver contratos DeFi pela primeira vez, essas técnicas serão muito úteis para iniciantes que desejam aprender a desenvolver contratos.
Endereço de contrato previsível
Normalmente, o endereço obtido ao implantar contratos parece aleatório, pois está relacionado com o nonce. No entanto, em certos cenários, precisamos inferir o endereço do contrato através de informações de transação, como determinar permissões de transação ou obter o endereço do pool.
A Uniswap utiliza o método CREATE2 para criar contratos, adicionando o parâmetro salt para tornar o endereço previsível. A nova lógica de geração de endereço é: hash("0xFF", endereço do criador, salt, initcode). Este método permite que o endereço do contrato seja calculado antecipadamente.
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Operações com grandes números resolvem problemas de precisão
No Uniswap, envolve-se uma grande quantidade de cálculos, como calcular a quantidade de tokens a serem trocados com base no preço e na liquidez. Para evitar a perda de precisão nas operações de divisão, é comum usar a operação << FixedPoint96.RESOLUTION no processo de cálculo, que é equivalente a deslocar 96 bits para a esquerda, ou seja, multiplicar por 2^96.
Deslocar para a esquerda e depois fazer a divisão pode garantir a precisão, desde que as transações normais não causem estouro. Embora ainda haja uma pequena perda de precisão em teoria, já é aceitável.
Cálculo de lucros por meio de compartilhamento
A Uniswap precisa registar os rendimentos de taxa dos provedores de liquidez LP). É evidente que não se pode registar as taxas para cada LP a cada transação, pois isso consumiria uma grande quantidade de Gas.
A solução é registrar a taxa total de serviço e a taxa de serviço a ser alocada por unidade de liquidez. A taxa de serviço que pode ser retirada é calculada com base na liquidez mantida pelo LP, semelhante a um dividendo de ações.
Distinção entre informações on-chain e off-chain
O armazenamento em cadeia é relativamente caro, nem todas as informações precisam estar na cadeia ou serem obtidas da cadeia. Muitos dos interfaces chamados pela interface do Uniswap são interfaces tradicionais da Web2.
A lista de pools de negociação, informações, etc. podem ser armazenadas em um banco de dados comum, sincronizando regularmente a partir da blockchain. Não é necessário chamar a interface RPC em tempo real para obter dados relevantes. Claro que transações-chave ainda ocorrem na blockchain.
Divisão de contratos e reutilização de contratos padrão
Um projeto pode conter vários contratos efetivamente implantados. Mesmo que apenas um contrato seja implantado, o código pode ser dividido em vários contratos mantidos por meio de herança.
Como o contrato NonfungiblePositionManager da Uniswap herda vários contratos. O ERC721Permit utiliza diretamente o contrato ERC721 da OpenZeppelin, facilitando a gestão de posições através de NFTs e aumentando a eficiência do desenvolvimento.
Resumo
Desenvolver por conta própria é mais eficaz do que simplesmente ler artigos. Tente implementar uma versão simples de uma exchange descentralizada, para entender melhor a implementação do código do Uniswap e aprender pontos de conhecimento em projetos reais.
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.
21 gostos
Recompensa
21
7
Partilhar
Comentar
0/400
PoolJumper
· 07-28 02:11
Zero infraestrutura faz algumas coisas
Ver originalResponder0
OldLeekConfession
· 07-27 04:18
Se você conseguir me fazer entender, já será incrível...
Ver originalResponder0
OnchainGossiper
· 07-27 03:51
Sugiro praticar a operação na prática~
Ver originalResponder0
BagHolderTillRetire
· 07-25 17:02
Finalmente encontrei uma saída para a situação em que estou preso.
Ver originalResponder0
PanicSeller69
· 07-25 17:00
A V3 ainda tem algo! Vamos lá!
Ver originalResponder0
degenonymous
· 07-25 16:58
É o evangelho para a comunidade de programadores.
Ver originalResponder0
AirdropDreamBreaker
· 07-25 16:56
Desenvolver não é melhor do que simplesmente roubar código
Análise das 7 principais dicas para o desenvolvimento de contratos Uniswap para aumentar a eficiência dos projetos de Finanças Descentralizadas
Dicas de desenvolvimento de contratos inteligentes aprendidas com o código do Uniswap
Recentemente, ao escrever um tutorial de desenvolvimento de exchanges descentralizadas, consultei a implementação do código do Uniswap V3 e aprendi muitas técnicas interessantes de desenvolvimento de contratos inteligentes. Como desenvolvedor que está tentando desenvolver contratos DeFi pela primeira vez, essas técnicas serão muito úteis para iniciantes que desejam aprender a desenvolver contratos.
Endereço de contrato previsível
Normalmente, o endereço obtido ao implantar contratos parece aleatório, pois está relacionado com o nonce. No entanto, em certos cenários, precisamos inferir o endereço do contrato através de informações de transação, como determinar permissões de transação ou obter o endereço do pool.
A Uniswap utiliza o método CREATE2 para criar contratos, adicionando o parâmetro salt para tornar o endereço previsível. A nova lógica de geração de endereço é: hash("0xFF", endereço do criador, salt, initcode). Este método permite que o endereço do contrato seja calculado antecipadamente.
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Operações com grandes números resolvem problemas de precisão
No Uniswap, envolve-se uma grande quantidade de cálculos, como calcular a quantidade de tokens a serem trocados com base no preço e na liquidez. Para evitar a perda de precisão nas operações de divisão, é comum usar a operação << FixedPoint96.RESOLUTION no processo de cálculo, que é equivalente a deslocar 96 bits para a esquerda, ou seja, multiplicar por 2^96.
Deslocar para a esquerda e depois fazer a divisão pode garantir a precisão, desde que as transações normais não causem estouro. Embora ainda haja uma pequena perda de precisão em teoria, já é aceitável.
Cálculo de lucros por meio de compartilhamento
A Uniswap precisa registar os rendimentos de taxa dos provedores de liquidez LP). É evidente que não se pode registar as taxas para cada LP a cada transação, pois isso consumiria uma grande quantidade de Gas.
A solução é registrar a taxa total de serviço e a taxa de serviço a ser alocada por unidade de liquidez. A taxa de serviço que pode ser retirada é calculada com base na liquidez mantida pelo LP, semelhante a um dividendo de ações.
Distinção entre informações on-chain e off-chain
O armazenamento em cadeia é relativamente caro, nem todas as informações precisam estar na cadeia ou serem obtidas da cadeia. Muitos dos interfaces chamados pela interface do Uniswap são interfaces tradicionais da Web2.
A lista de pools de negociação, informações, etc. podem ser armazenadas em um banco de dados comum, sincronizando regularmente a partir da blockchain. Não é necessário chamar a interface RPC em tempo real para obter dados relevantes. Claro que transações-chave ainda ocorrem na blockchain.
Divisão de contratos e reutilização de contratos padrão
Um projeto pode conter vários contratos efetivamente implantados. Mesmo que apenas um contrato seja implantado, o código pode ser dividido em vários contratos mantidos por meio de herança.
Como o contrato NonfungiblePositionManager da Uniswap herda vários contratos. O ERC721Permit utiliza diretamente o contrato ERC721 da OpenZeppelin, facilitando a gestão de posições através de NFTs e aumentando a eficiência do desenvolvimento.
Resumo
Desenvolver por conta própria é mais eficaz do que simplesmente ler artigos. Tente implementar uma versão simples de uma exchange descentralizada, para entender melhor a implementação do código do Uniswap e aprender pontos de conhecimento em projetos reais.