4.5 – Ethereum, Smart Contracts en Ethereum y comunicación entre contratos. Solidity
Ethereum y Solidity
A continuación vamos a crear un ejemplo para entender como se comunican los smart contracts.
pragma solidity ^0.4.0; // ------- INICIO: Los contratos estan en el mismo documento // Contrato que llamara a otro contrato contract ContratoA { // Variable que va ser del tipo contract ContratoB llamarContrato = new ContratoB(); // consultar un número de contrato function getNumeroContratoA() constant returns(uint) { // Devuelve el número del contrato al que vamos a llamar return llamarContrato.getNumeroContratoB(); } } contract ContratoB { uint numero = 40; // Funcion a la que llamamos function getNumeroContratoB() constant returns(uint) { return numero; } } // ------- FIN: Los contratos estan en el mismo documento // ------- INICIO: Simular la llamada a cualquier contrato // Para que funcione vamos a crear primero el contratoD y asi poder añadir la dirección en el contrato C contract ContratoC { // Dentro del new ContratoD(Dirección del contrato); address direccionContratoALlamar = 0x0f9d1a92533348818f6d0103d982e17f36335c54; ContratoD callContract = ContratoD(direccionContratoALlamar); // consultar un número de contrato function getNumeroContratoC() constant returns(uint) { // Devuelve el número del contrato al que vamos a llamar return callContract.getNumeroContratoD(); } } // Dirección de este contrato: 0x0f9d1a92533348818f6d0103d982e17f36335c54 contract ContratoD { uint numero = 400; // Funcion a la que llamamos function getNumeroContratoD() constant returns(uint) { return numero; } }
A programar!!!
Vamos a crear dos contratos para comunicarlos entre ellos. En la linea 6 podemos observar como definimos una variable que va ser del tipo contract (nombre del contrato con el que nos comunicaremos). En la linea 9 vamos a definir la función que usaremos en este contrato para devolver la llamada del otro contrato (linea 11).
El segundo contrato que comienza en la linea 15 únicamente vamos a definir una variable con un valor y la función que a la cual llamaremos desde otro contrato para obtener el valor de la variable de ese contrato (linea 17).
Con los contratos ContratoA y ContratoB hemos usado el mismo documento usando la palabra reservada new, ¿pero que ocurre si queremos comunicarnos con otro contrato?. Para poder comunicarnos necesitamos indicar la dirección del contrato y el nombre del contrato (linea 26 y 27). El resto del código no cambia nada.
Con el siguiente vídeo podemos comprobar como funciona la comunicación entre contratos: