¿Cómo compilo contratos interdependientes por separado en Mist?

Estoy trabajando con este ejemplo de Solidity, usando la consola geth y/o el compilador de Mist:

contract InfoFeed {
    function info() payable returns (uint ret) { return 42; }
}

contract Consumer {
  InfoFeed feed;
  function setFeed(address addr) { feed = InfoFeed(addr); }
  function callFeed() { attribut = feed.info.value(10).gas(800); }  
}

Si, en el compilador Mist, solo incluyo:

contract Consumer {
  InfoFeed feed;
  function setFeed(address addr) { feed = InfoFeed(addr); }
  function callFeed() { attribut = feed.info.value(10).gas(800); }  
}

lo que tendría sentido si, por ejemplo, tuviera que confiar en otra persona para (tener) proporcionar (d) el código para InfoFeed , obtengo el siguiente mensaje de error de compilación:

 Identifier not found or not unique.
  InfoFeed feed;
  ^------^

¿Cómo compilar Consumer de forma aislada, por favor? Los tutoriales que miré contienen bits de código de contratos interdependientes, pero no me digan cómo compilarlos.

Respuestas (1)

Algunas herramientas son inteligentes para vincular contratos almacenados en diferentes archivos, pero todo lo que necesita para compilar su contrato cuando llama al contrato de otra persona es la definición de función (nombre de función, parámetros, valores devueltos) para los contratos que desea llamar. Ya debe conocer esta información, de lo contrario no sabría cómo escribir el código para llamarlo. Lo más simple es pegarlo en la parte superior del archivo donde define el contrato de llamada.

Así que aquí podrías haber hecho:

contract InfoFeed {
    function info() payable returns (uint ret) { }
}

contract Consumer {
  InfoFeed feed;
  function setFeed(address addr) { feed = InfoFeed(addr); }
  function callFeed() { attribut = feed.info.value(10).gas(800)(); }  
}

Tenga en cuenta que saqué el return 42;de la info()función. El compilador no necesita esta información para compilar Consumer. Tampoco necesita definiciones de funciones a las que no llamará.

El nombre del contrato al que llama tampoco importa; A algunas personas les gusta cambiar el nombre de estos contratos de resguardo algo así como InfoFeedAPI, pero podría llamarlo Bobpor si al compilador le importará.