WEB3DEV

Cover image for Como Chamar um Contrato Inteligente de outro Contrato Inteligente (Parte 3/3)
Fatima Lima
Fatima Lima

Posted on

Como Chamar um Contrato Inteligente de outro Contrato Inteligente (Parte 3/3)

Todo bom tutorial deve terminar com uma experiência prática e, portanto, aqui está algo que vocês podem fazer para explorar as Chamadas Entre Contratos por vocês mesmos.

Passamos um bom tempo explorando métodos para completar chamadas entre contratos nos dois últimos artigos desta série em andamento. Vamos culminar tudo isso com uma simples missão que você pode concluir para garantir que está tudo preparado!

Na Parte 1, exploramos a criação de nossos próprios contratos e a realização de uma chamada de uma função em outra.

Na Parte 2, exploramos o contrato de Minimum Viable OO Integration (Integração Mínima Viável OO) fornecido pelo Protocolo UMA e chamamos o Oracle Optmistic implantado na Testnet Goerli da ETH para nos fornecer dados.

Image description

Nesta Parte 3, revisaremos rapidamente o método para criar chamadas entre contratos também dentro de suas dapps. Este código é possível usando o prático recurso de "Code Snippets" (Trechos de Código) de seu espaço de trabalho Laika!

Image description

Trechos de código Laika!

Nota:
Para completar uma chamada entre contratos, você precisará ter o endereço do contrato de destino e a ABI (Application Binary Interface) das funções do contrato de destino que você deseja chamar. A ABI é um arquivo JSON que descreve as funções de um contrato e seus inputs e outputs.

Aqui está um exemplo de como completar uma chamada entre contratos usando Solidity e web3.js:

  1. Primeiro, importe a biblioteca do web3.js e crie uma nova instância do objeto web3:
import Web3 from 'web3';
const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

Enter fullscreen mode Exit fullscreen mode
  1. A seguir, defina o endereço e a ABI do contrato de destino:
const targetContractAddress = '0x1234567890abcdef';
const targetContractABI = [{...}];
Enter fullscreen mode Exit fullscreen mode
  1. Use a ABI e o endereço do contrato para criar uma nova instância do contrato de destino:
const targetContract = new web3.eth.Contract(targetContractABI, targetContractAddress);
Enter fullscreen mode Exit fullscreen mode
  1. Agora você pode chamar as funções do contrato de destino usando o objeto targetContract.methods. \ Por exemplo, para chamar a função transfer do contrato de destino:
const value = web3.utils.toWei('1', 'ether');
const toAddress = '0x0987654321fedcba';
targetContract.methods.transfer(toAddress, value).send({from: '0xYourAddress'}).then(console.log);
Enter fullscreen mode Exit fullscreen mode
  1. Se a função for definida como uma função view, você pode chamá-la diretamente assim:
targetContract.methods.get().call().then(console.log);
Enter fullscreen mode Exit fullscreen mode

Nota: Neste exemplo, estamos usando o HttpProvider para conectar a um nó da blockchain local, mas você também pode conectar a um nó remoto usando um provedor diferente. Além disso, tenha em mente que a execução de chamadas entre contratos normalmente exigirá que o remetente pague taxas de gas.

É importante ter em mente que as chamadas entre contratos podem ser complexas e podem ter consequências não desejadas se não forem usadas com cuidado. Sempre teste e reveja cuidadosamente seu código antes de implantar em um ambiente vivo.

Agora que já exploramos completamente as Chamadas entre Contratos, estamos prontos para concluir uma missão!

Crie um contrato inteligente chamado "ProxyContract" que chama a função de "transfer" do contrato inteligente "TargetContract". A função "transfer" do "TargetContract" deve ter dois inputs: um endereço de destino e um valor em wei. A função "transfer" deve transferir o valor especificado do "ProxyContract" para o endereço de destino.

Os seguintes requisitos devem ser atendidos:

  • O “ProxyContract” deve ter uma função pública chamada “executeTransfer” que leva dois inputs: um endereço de destino e um valor em wei.
  • Quando a função "executeTransfer" é chamada, ela deve chamar a função "transfer" do "TargetContract" com o endereço de destino fornecido e o valor como inputs.
  • O endereço do "TargetContract" deve ser armazenado em uma variável pública chamada "targetContractAddress" no "ProxyContract".
  • A ABI do "TargetContract" deve ser armazenada em uma variável pública chamada "targetContractABI" no "ProxyContract".
  • Opcional: O "ProxyContract" deve ser testado usando um conjunto de testes, para garantir que ele chame corretamente a função "transfer" do "TargetContract" e transfira o valor correto para o endereço de destino.

Para completar a missão, você precisará usar uma linguagem de programação compatível com o desenvolvimento de contratos inteligentes, como Solidity, e uma ferramenta para implantar e testar contratos inteligentes, como Truffle ou Hardhat.

A maneira mais fácil de fazer isso seria usar a IDE Remix, como fizemos em todos os artigos anteriores.

P.S. Será bom ler os dois últimos artigos e revisar os métodos para completar a missão.

E é isso! Laika é sua própria primeira-ABI "one-stop-shop" (locais que oferecem soluções completas nas quais os clientes conseguem encontrar, em um único lugar, tudo o que precisam) para interação contratual em muitas, se não todas as redes EVM! Mais chains estão sendo acrescentadas em breve, então fique de olho! Compartilhe conosco suas experiências de uso da Laika, em nossas redes sociais.

Adios por enquanto e nos vemos em breve!

🐶❤💛

Conecte-se conosco:

Facebook: https://www.facebook.com/getlaikaapp/ \
Discord: https://discord.gg/4DzwHuxhcf \
Website: https://getlaika.app

Esse artigo foi escrito por Ishan Pandey e traduzido por Fátima Lima. O original pode ser lido aqui.

Top comments (0)