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: