Como acessar funcoes de outros contratos solidity? (Tambem vale para Javascript :-)
Para acessar funções de outros contratos em Solidity, você primeiro precisa ter uma referência ao contrato alvo. Isso pode ser feito criando uma variável do tipo address que contenha o endereço do contrato alvo e, em seguida, utilizando a palavra-chave contract para criar uma referência ao contrato.
Por exemplo, suponha que você tenha um contrato chamado MyContract e queira acessar uma função chamada functionA em outro contrato chamado OtherContract. Você pode fazer isso da seguinte maneira:
pragma solidity ^0.6.0;
contract MyContract {
address otherContractAddress;
OtherContract otherContract;
constructor(address _otherContractAddress) public {
otherContractAddress = _otherContractAddress;
otherContract = OtherContract(otherContractAddress);
}
function callFunctionA() public {
otherContract.functionA();
}
}
Aqui, criamos uma variável otherContractAddress do tipo address que armazena o endereço do contrato OtherContract. Em seguida, criamos uma variável otherContract do tipo OtherContract, que é uma referência ao contrato alvo. Isso é feito através da chamada de construtor do contrato OtherContract com o endereço do contrato alvo.
Uma vez que você tenha uma referência ao contrato alvo, você pode chamar qualquer função pública dele da mesma maneira que você chamar qualquer outra função, usando o nome da função seguido de parênteses e, se necessário, passando quaisquer argumentos necessários. No exemplo acima, chamamos a função functionA do contrato OtherContract através da chamada otherContract.functionA().
É importante lembrar que, para poder acessar funções de outros contratos, você precisa ter acesso ao código-fonte do contrato alvo e deve incluir um import ou uma declaração de interface para o contrato alvo no seu código. Além disso, é importante levar em consideração que acessar funções de outros contratos pode resultar em chamadas de contrato, o que pode ter custos de gás.