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:
