Partilha de Dicas para Desenvolvimento de Contratos
Recentemente, ao escrever um tutorial de desenvolvimento de exchanges descentralizadas, consultei a implementação de código de alguns projetos conhecidos e aprendi várias técnicas interessantes de desenvolvimento de contratos. Como um novato que está tentando desenvolver contratos DeFi pela primeira vez, essas técnicas foram muito inspiradoras para mim e acredito que também ajudarão outros amigos 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, devido ao nonce. Mas em certos cenários, precisamos inferir o endereço do contrato a partir de informações de transação, o que é útil para determinar permissões de transação ou obter o endereço do pool.
Uma forma é usar o método CREATE2 para criar contratos, tornando o endereço gerado previsível ao adicionar o parâmetro salt. A lógica para a geração do novo endereço é: hash("0xFF", endereço do criador, salt, initcode).
Uso inteligente de funções de callback
Em certos cenários, é útil que o contrato A chame o método do contrato B e que B faça um callback ao método de A.
Por exemplo, ao negociar, o método swap do contrato pool chamará swapCallback, passando a quantidade real de Tokens necessária. O chamador, na callback, transferirá os Tokens para o pool, o que garante a segurança e a integridade do método swap, sem necessidade de registos de variáveis complicados.
Usar exceções para transmitir informações
Ao simular transações para estimar os Tokens necessários, é possível lançar erros especiais dentro da função de retorno de chamada e, em seguida, capturar esses erros e extrair as informações necessárias. Assim, não é necessário modificar o método de swap especificamente para a estimativa de demanda, tornando a lógica mais simples.
Resolver problemas de precisão com grandes números
Em cenários que envolvem cálculos, para evitar a perda de precisão em operações de divisão, pode-se primeiro deslocar à esquerda 96 bits (, o que é equivalente a multiplicar por 2^96), e então realizar a operação de divisão. Desta forma, é possível garantir a precisão sem transbordamentos.
Cálculo de ganhos por meio de compartilhamento
Para cenários que precisam registrar os ganhos de taxa de LP, não é viável registrar a cada transação para cada LP, pois isso consumiria uma grande quantidade de Gas. Pode-se adotar um método semelhante ao pagamento de dividendos de ações, registrando apenas a taxa total e a taxa que deve ser atribuída a cada unidade de liquidez, e, ao retirar, calcular com base na liquidez detida.
Armazenamento off-chain de informações auxiliares
Nem toda a informação precisa ser colocada na blockchain ou obtida dela. Alguns dados não críticos, como listas de pools de negociação e informações sobre pools, podem ser armazenados em bases de dados comuns, sendo sincronizados periodicamente com a blockchain. Isso pode aumentar o desempenho e a eficiência.
Divisão de Contratos e Reutilização de Contratos Padrão
Grandes projetos podem dividir contratos em múltiplos ou mantê-los por meio de herança. Ao mesmo tempo, contratos padrão como o ERC721 podem ser reutilizados, aumentando a eficiência do desenvolvimento.
Desenvolver um intercâmbio descentralizado simples pode ajudar a entender mais profundamente a aplicação dessas técnicas. Espero que estas partilhas sejam úteis para todos.
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.
19 Curtidas
Recompensa
19
7
Compartilhar
Comentário
0/400
HappyMinerUncle
· 08-04 03:00
Isto é demasiado complexo. Todos os mineiros, preparem-se para a tarefa.
Ver originalResponder0
SadMoneyMeow
· 08-03 20:33
Este modo de contrato é demasiado luxuoso, não é?.
Ver originalResponder0
SandwichTrader
· 08-01 04:28
Um novo fluxo que não é rug pull.
Ver originalResponder0
LayerZeroHero
· 08-01 03:29
Sugiro usar diretamente o dapptools para testes, usar gás para testar é mais confiável.
Ver originalResponder0
hodl_therapist
· 08-01 03:21
Tem certeza de que tudo isso é tecnologia de ponta? Parece um pouco ultrapassado.
7 dicas práticas de desenvolvimento de contratos para ajudar projetos DeFi
Partilha de Dicas para Desenvolvimento de Contratos
Recentemente, ao escrever um tutorial de desenvolvimento de exchanges descentralizadas, consultei a implementação de código de alguns projetos conhecidos e aprendi várias técnicas interessantes de desenvolvimento de contratos. Como um novato que está tentando desenvolver contratos DeFi pela primeira vez, essas técnicas foram muito inspiradoras para mim e acredito que também ajudarão outros amigos 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, devido ao nonce. Mas em certos cenários, precisamos inferir o endereço do contrato a partir de informações de transação, o que é útil para determinar permissões de transação ou obter o endereço do pool.
Uma forma é usar o método CREATE2 para criar contratos, tornando o endereço gerado previsível ao adicionar o parâmetro salt. A lógica para a geração do novo endereço é: hash("0xFF", endereço do criador, salt, initcode).
Uso inteligente de funções de callback
Em certos cenários, é útil que o contrato A chame o método do contrato B e que B faça um callback ao método de A.
Por exemplo, ao negociar, o método swap do contrato pool chamará swapCallback, passando a quantidade real de Tokens necessária. O chamador, na callback, transferirá os Tokens para o pool, o que garante a segurança e a integridade do método swap, sem necessidade de registos de variáveis complicados.
Usar exceções para transmitir informações
Ao simular transações para estimar os Tokens necessários, é possível lançar erros especiais dentro da função de retorno de chamada e, em seguida, capturar esses erros e extrair as informações necessárias. Assim, não é necessário modificar o método de swap especificamente para a estimativa de demanda, tornando a lógica mais simples.
Resolver problemas de precisão com grandes números
Em cenários que envolvem cálculos, para evitar a perda de precisão em operações de divisão, pode-se primeiro deslocar à esquerda 96 bits (, o que é equivalente a multiplicar por 2^96), e então realizar a operação de divisão. Desta forma, é possível garantir a precisão sem transbordamentos.
Cálculo de ganhos por meio de compartilhamento
Para cenários que precisam registrar os ganhos de taxa de LP, não é viável registrar a cada transação para cada LP, pois isso consumiria uma grande quantidade de Gas. Pode-se adotar um método semelhante ao pagamento de dividendos de ações, registrando apenas a taxa total e a taxa que deve ser atribuída a cada unidade de liquidez, e, ao retirar, calcular com base na liquidez detida.
Armazenamento off-chain de informações auxiliares
Nem toda a informação precisa ser colocada na blockchain ou obtida dela. Alguns dados não críticos, como listas de pools de negociação e informações sobre pools, podem ser armazenados em bases de dados comuns, sendo sincronizados periodicamente com a blockchain. Isso pode aumentar o desempenho e a eficiência.
Divisão de Contratos e Reutilização de Contratos Padrão
Grandes projetos podem dividir contratos em múltiplos ou mantê-los por meio de herança. Ao mesmo tempo, contratos padrão como o ERC721 podem ser reutilizados, aumentando a eficiência do desenvolvimento.
Desenvolver um intercâmbio descentralizado simples pode ajudar a entender mais profundamente a aplicação dessas técnicas. Espero que estas partilhas sejam úteis para todos.