38 lines
1.9 KiB
Solidity
38 lines
1.9 KiB
Solidity
/**
|
|
Interagindo com outros contratos
|
|
|
|
Para que o nosso contrato converse com outro contrato na blockchain que não é nosso, primeiro temos que definir uma interface.
|
|
Vamos ver um simples exemplo. Digamos que existe um contrato na blockchain que se parece com isto:
|
|
*/
|
|
|
|
contract LuckyNumber {
|
|
mapping(address => uint) numbers;
|
|
|
|
function setNum(uint _num) public {
|
|
numbers[msg.sender] = _num;
|
|
}
|
|
|
|
function getNum(address _myAddress) public view returns (uint) {
|
|
return numbers[_myAddress];
|
|
}
|
|
}
|
|
|
|
/**
|
|
Este seria um simples contrato onde qualquer um pode guardar um número da sorte, e esse número seria associado ao seu endereço no Ethereum. Então qualquer um pode olhar o número desta pessoa somente passando o endereço dessa pessoa.
|
|
Agora digamos que nós temos um contrato externo que quer ler o dado deste contrato usando a função getNum.
|
|
Primeiro nós gostaríamos de definir uma interface para o contrato LuckyNumber:
|
|
*/
|
|
|
|
contract NumberInterface {
|
|
function getNum(address _myAddress) public view returns (uint);
|
|
}
|
|
|
|
/**
|
|
Perceba que isto parece com a definição de um contrato, com poucas diferenças. Primeiro, declaramos somente as funções que queremos interagir - neste caso getNum - e nós não mencionamos qualquer outra função ou variáveis de estado.
|
|
Segundo, nós não definimos os corpos das funções. Ao invés dos "braces" ({ e }), nós simplesmente terminamos declaração da função com um ponto-e-vírgula (;).
|
|
Então isso se parece com um esqueleto de contrato. Isto é como o compilador sabe sobre uma interface.
|
|
Ao incluir esta interface no código da nossa aplicação distribuída (dapp) nosso contrato sabe como as funções do outro contrato se parecem, e como executá-las, e qual tipo de resposta esperar.
|
|
Iremos na verdade executar funções em um outro contrato em nossa próxima lição, mas por enquanto vamos declarar as nossas interfaces para o contrato do CryptoKitties.
|
|
*/
|
|
|
|
|