Dicas de desenvolvimento de contratos aprendidas com o código do Uniswap
Recentemente, ao escrever um tutorial de desenvolvimento de uma exchange descentralizada, consultei a implementação do código do Uniswap V3 e aprendi muitos pontos valiosos. Como desenvolvedor que está tentando criar contratos DeFi pela primeira vez, essas dicas serão muito úteis para iniciantes que desejam aprender a desenvolver contratos.
Endereço de implantação de contrato previsível
Geralmente, o endereço obtido ao implantar um contrato parece aleatório, pois está relacionado ao nonce. Mas em algumas situações, precisamos inferir o endereço do contrato a partir do par de negociação e informações relacionadas. O Uniswap utiliza o método CREATE2 para criar contratos, adicionando um parâmetro salt, tornando o endereço do contrato gerado previsível. A lógica de geração do endereço é: novo endereço = hash("0xFF", endereço do criador, salt, initcode).
Uso inteligente de funções de retorno
Em certos cenários, a chamada e retorno mútuo entre contratos é muito útil. Por exemplo, no método swap do Uniswap, será chamado o swapCallback, passando a quantidade real de Tokens necessária. A parte que faz a chamada deve transferir os Tokens necessários para o pool no retorno, garantindo a integridade e segurança de toda a lógica da transação.
Utilizando a transmissão de informações de exceção, estimar transações com try catch
No contrato Quoter do Uniswap, utiliza-se try catch para envolver a execução do método swap para estimar a transação. Através do lançamento de um erro especial na função de callback e, em seguida, capturando e analisando a mensagem de erro, foi implementada a funcionalidade de estimativa de transação, sem a necessidade de modificar especificamente o método swap para a estimativa.
Resolução de problemas de precisão com grandes números
A lógica de cálculo no Uniswap utiliza frequentemente a operação de deslocamento à esquerda em 96 bits (equivalente a multiplicar por 2^96). Este método garante que as transações normais não transbordem, ao mesmo tempo que assegura a precisão. Embora teoricamente ainda haja uma perda de precisão muito pequena, na prática isso é aceitável.
Cálculo de rendimento do mecanismo de compartilhamento
Para registar de forma eficiente os rendimentos das taxas de transação dos LPs, a Uniswap adotou um sistema semelhante ao das ações. Ao registar a taxa total de transação e a taxa que deve ser atribuída por cada unidade de liquidez, os LPs podem retirar as taxas de transação com base na liquidez que possuem, reduzindo significativamente o consumo de gas.
Uso razoável de informações off-chain
Considerando o alto custo de armazenamento em blockchain, nem todas as informações precisam ser armazenadas na blockchain ou obtidas dela. Por exemplo, a lista de pools de negociação, informações sobre pools, etc. podem ser armazenadas em bancos de dados tradicionais e sincronizadas periodicamente com os dados da blockchain. Este método pode aumentar a eficiência e reduzir os custos.
Divisão de contratos e reutilização de contratos padrão
Um projeto pode conter vários contratos realmente implementados, mesmo que apenas um contrato seja implementado, é possível dividir o código em vários contratos para manutenção através de herança. Ao mesmo tempo, utilizar contratos padrão existentes (como ERC721) pode aumentar a eficiência do desenvolvimento e melhorar a confiabilidade dos contratos.
Conclusão
A prática é o melhor método de aprendizagem. Ao tentar implementar uma versão simples de uma exchange descentralizada, é possível entender mais profundamente a implementação do código do Uniswap e aprender com a valiosa experiência de projetos reais. Para desenvolvedores interessados em aprender mais sobre o desenvolvimento de projetos Web3 e DeFi, participar de cursos práticos será uma excelente escolha.
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.
12 gostos
Recompensa
12
6
Partilhar
Comentar
0/400
GateUser-9ad11037
· 17h atrás
Tutorial para novatos entrar numa posição
Ver originalResponder0
WalletManager
· 17h atrás
A auditoria rigorosa antes do contrato é a base da engenharia... aprender um pouco de impulso
Ver originalResponder0
SmartContractRebel
· 17h atrás
O desenvolvedor está vivendo do passado.
Ver originalResponder0
GateUser-a606bf0c
· 17h atrás
Só isso? É muito básico, não?
Ver originalResponder0
BlockchainBouncer
· 17h atrás
Escorrega tão rápido que não consigo entender.
Ver originalResponder0
GasGuzzler
· 17h atrás
Mesmo que eu repita dez vezes, eu não consigo escrever.
Uniswap código revelado: 7 grandes dicas de desenvolvimento de contratos inteligentes
Dicas de desenvolvimento de contratos aprendidas com o código do Uniswap
Recentemente, ao escrever um tutorial de desenvolvimento de uma exchange descentralizada, consultei a implementação do código do Uniswap V3 e aprendi muitos pontos valiosos. Como desenvolvedor que está tentando criar contratos DeFi pela primeira vez, essas dicas serão muito úteis para iniciantes que desejam aprender a desenvolver contratos.
Endereço de implantação de contrato previsível
Geralmente, o endereço obtido ao implantar um contrato parece aleatório, pois está relacionado ao nonce. Mas em algumas situações, precisamos inferir o endereço do contrato a partir do par de negociação e informações relacionadas. O Uniswap utiliza o método CREATE2 para criar contratos, adicionando um parâmetro salt, tornando o endereço do contrato gerado previsível. A lógica de geração do endereço é: novo endereço = hash("0xFF", endereço do criador, salt, initcode).
Uso inteligente de funções de retorno
Em certos cenários, a chamada e retorno mútuo entre contratos é muito útil. Por exemplo, no método swap do Uniswap, será chamado o swapCallback, passando a quantidade real de Tokens necessária. A parte que faz a chamada deve transferir os Tokens necessários para o pool no retorno, garantindo a integridade e segurança de toda a lógica da transação.
Utilizando a transmissão de informações de exceção, estimar transações com try catch
No contrato Quoter do Uniswap, utiliza-se try catch para envolver a execução do método swap para estimar a transação. Através do lançamento de um erro especial na função de callback e, em seguida, capturando e analisando a mensagem de erro, foi implementada a funcionalidade de estimativa de transação, sem a necessidade de modificar especificamente o método swap para a estimativa.
Resolução de problemas de precisão com grandes números
A lógica de cálculo no Uniswap utiliza frequentemente a operação de deslocamento à esquerda em 96 bits (equivalente a multiplicar por 2^96). Este método garante que as transações normais não transbordem, ao mesmo tempo que assegura a precisão. Embora teoricamente ainda haja uma perda de precisão muito pequena, na prática isso é aceitável.
Cálculo de rendimento do mecanismo de compartilhamento
Para registar de forma eficiente os rendimentos das taxas de transação dos LPs, a Uniswap adotou um sistema semelhante ao das ações. Ao registar a taxa total de transação e a taxa que deve ser atribuída por cada unidade de liquidez, os LPs podem retirar as taxas de transação com base na liquidez que possuem, reduzindo significativamente o consumo de gas.
Uso razoável de informações off-chain
Considerando o alto custo de armazenamento em blockchain, nem todas as informações precisam ser armazenadas na blockchain ou obtidas dela. Por exemplo, a lista de pools de negociação, informações sobre pools, etc. podem ser armazenadas em bancos de dados tradicionais e sincronizadas periodicamente com os dados da blockchain. Este método pode aumentar a eficiência e reduzir os custos.
Divisão de contratos e reutilização de contratos padrão
Um projeto pode conter vários contratos realmente implementados, mesmo que apenas um contrato seja implementado, é possível dividir o código em vários contratos para manutenção através de herança. Ao mesmo tempo, utilizar contratos padrão existentes (como ERC721) pode aumentar a eficiência do desenvolvimento e melhorar a confiabilidade dos contratos.
Conclusão
A prática é o melhor método de aprendizagem. Ao tentar implementar uma versão simples de uma exchange descentralizada, é possível entender mais profundamente a implementação do código do Uniswap e aprender com a valiosa experiência de projetos reais. Para desenvolvedores interessados em aprender mais sobre o desenvolvimento de projetos Web3 e DeFi, participar de cursos práticos será uma excelente escolha.