Compartilhamento de Dicas de Desenvolvimento de Contratos
Recentemente, ao participar de um projeto de desenvolvimento de uma exchange descentralizada, aprendi algumas técnicas interessantes de desenvolvimento de contratos. Essas técnicas podem ser inspiradoras para iniciantes que estão começando a desenvolver contratos inteligentes.
Endereço de contrato previsível
Ao usar o opcode CREATE2, podemos implantar contratos com endereços previsíveis. O método específico é adicionar o parâmetro salt ao criar o contrato:
solidez
pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
O endereço do contrato gerado desta forma pode ser deduzido a partir dos parâmetros relevantes, o que é muito útil em muitos cenários.
Uso inteligente de funções de callback
Em certas situações, é um padrão útil que o contrato A chame um método do contrato B, e B faça uma chamada de retorno a um determinado método de A. Por exemplo, em uma DEX, ao chamar o método swap, ele chamará o swapCallback, onde a transferência de tokens é concluída na chamada de retorno, garantindo a integridade e segurança de todo o processo de transação.
Transmitindo informações com exceções
Às vezes, é possível usar habilmente o try-catch para capturar exceções específicas e obter informações. Por exemplo, ao simular uma negociação, pode-se obter dados estimados capturando exceções específicas lançadas pelo método swap, sem precisar modificar especificamente o método swap.
Cálculo de grandes números garante precisão
Ao lidar com cálculos financeiros, para evitar a perda de precisão causada por operações de divisão, pode-se primeiro realizar uma operação de deslocamento à esquerda. ( é equivalente a multiplicar por 2^96). Após a conclusão do cálculo, faz-se um deslocamento à direita, garantindo assim a precisão sem transbordamento.
Cálculo de ganhos no modo Share
Para cenários que requerem a distribuição de lucros, pode-se adotar um modelo semelhante ao de dividendos de ações. Basta registrar o lucro total e o lucro a ser recebido por unidade; quando o usuário retirar, pode calcular a parte que lhe cabe com base na sua quota, evitando a atualização frequente dos registros de lucro de cada usuário.
Uso Razoável de Dados Off-Chain
Nem todos os dados precisam ser armazenados na blockchain. Algumas informações que não envolvem lógica de transação crítica podem ser armazenadas em bancos de dados tradicionais e acessadas através de APIs Web2, reduzindo assim custos e aumentando a eficiência.
Divisão e Reutilização de Contratos
Grandes projetos costumam dividir contratos em vários módulos, utilizando a herança em combinação. Ao mesmo tempo, é importante aproveitar os contratos padrão existentes, como o ERC721, pois isso pode aumentar a eficiência de desenvolvimento e a qualidade do código.
Essas dicas são pequenas, mas muito práticas, espero que inspirem o desenvolvimento de contratos inteligentes de todos. Para realmente dominar essas dicas, a melhor maneira é praticar pessoalmente, aplicando e vivenciando em projetos reais.
Ver original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
26 Curtidas
Recompensa
26
9
Compartilhar
Comentário
0/400
GateUser-a180694b
· 18h atrás
Escreveste bem, se tivesses dado mais exemplos seria ainda melhor.
Ver originalResponder0
MetaMisfit
· 20h atrás
Está muito básico, não está?
Ver originalResponder0
ProbablyNothing
· 07-13 01:00
Estou muito preguiçoso, vou direto usar a biblioteca.
Ver originalResponder0
TeaTimeTrader
· 07-11 02:06
Tutorial de habilidades essenciais para contratos iniciais
Ver originalResponder0
FudVaccinator
· 07-11 02:04
Os que entendem, entendem. A previsão do Endereço de implantação é realmente boa.
Ver originalResponder0
HackerWhoCares
· 07-11 02:03
Fui embora, fui embora. O programador iniciante vem aprender novamente.
Ver originalResponder0
SchrodingerProfit
· 07-11 02:03
São apenas essas dicas... já são tudo conversas habituais.
Ver originalResponder0
MonkeySeeMonkeyDo
· 07-11 01:55
Você já é um veterano em contratos, certo? Vamos lá~
Sete dicas práticas para o desenvolvimento de contratos inteligentes
Compartilhamento de Dicas de Desenvolvimento de Contratos
Recentemente, ao participar de um projeto de desenvolvimento de uma exchange descentralizada, aprendi algumas técnicas interessantes de desenvolvimento de contratos. Essas técnicas podem ser inspiradoras para iniciantes que estão começando a desenvolver contratos inteligentes.
Endereço de contrato previsível
Ao usar o opcode CREATE2, podemos implantar contratos com endereços previsíveis. O método específico é adicionar o parâmetro salt ao criar o contrato:
solidez pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());
O endereço do contrato gerado desta forma pode ser deduzido a partir dos parâmetros relevantes, o que é muito útil em muitos cenários.
Uso inteligente de funções de callback
Em certas situações, é um padrão útil que o contrato A chame um método do contrato B, e B faça uma chamada de retorno a um determinado método de A. Por exemplo, em uma DEX, ao chamar o método swap, ele chamará o swapCallback, onde a transferência de tokens é concluída na chamada de retorno, garantindo a integridade e segurança de todo o processo de transação.
Transmitindo informações com exceções
Às vezes, é possível usar habilmente o try-catch para capturar exceções específicas e obter informações. Por exemplo, ao simular uma negociação, pode-se obter dados estimados capturando exceções específicas lançadas pelo método swap, sem precisar modificar especificamente o método swap.
Cálculo de grandes números garante precisão
Ao lidar com cálculos financeiros, para evitar a perda de precisão causada por operações de divisão, pode-se primeiro realizar uma operação de deslocamento à esquerda. ( é equivalente a multiplicar por 2^96). Após a conclusão do cálculo, faz-se um deslocamento à direita, garantindo assim a precisão sem transbordamento.
Cálculo de ganhos no modo Share
Para cenários que requerem a distribuição de lucros, pode-se adotar um modelo semelhante ao de dividendos de ações. Basta registrar o lucro total e o lucro a ser recebido por unidade; quando o usuário retirar, pode calcular a parte que lhe cabe com base na sua quota, evitando a atualização frequente dos registros de lucro de cada usuário.
Uso Razoável de Dados Off-Chain
Nem todos os dados precisam ser armazenados na blockchain. Algumas informações que não envolvem lógica de transação crítica podem ser armazenadas em bancos de dados tradicionais e acessadas através de APIs Web2, reduzindo assim custos e aumentando a eficiência.
Divisão e Reutilização de Contratos
Grandes projetos costumam dividir contratos em vários módulos, utilizando a herança em combinação. Ao mesmo tempo, é importante aproveitar os contratos padrão existentes, como o ERC721, pois isso pode aumentar a eficiência de desenvolvimento e a qualidade do código.
Essas dicas são pequenas, mas muito práticas, espero que inspirem o desenvolvimento de contratos inteligentes de todos. Para realmente dominar essas dicas, a melhor maneira é praticar pessoalmente, aplicando e vivenciando em projetos reais.