¿Cómo llamar a un contrato importado usando Solidity?

Dentro de mi contrato, quiero usar una importpalabra clave para cargar otros contratos y bibliotecas para que mi código sea más limpio. Como ejemplo, llevé el contrato DateTime.sol a otro archivo y lo importé dentro del archivo myContract sin ningún problema.

miContrato.sol:

import "/Users/avatar/populus/contracts/DateTime.sol"; //works.
contract myContract{
   DateTime date = new DateTime(); //does not work.
   <Some_Code>
}

Pero desde el contrato myContract, cuando intento llamar al contrato DateTime como: DateTime date = new DateTime()Me he encontrado con el siguiente error:

/usr/local/lib/python2.7/site-packages/populus/chain.py:580: in get_contract
    if contract_name not in self.contract_factories:
/usr/local/lib/python2.7/site-packages/populus/utils/functional.py:50: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
/usr/local/lib/python2.7/site-packages/populus/chain.py:198: in contract_factories
    compiled_contracts = self.project.compiled_contracts
/usr/local/lib/python2.7/site-packages/populus/project.py:153: in compiled_contracts
    optimize=True,
/usr/local/lib/python2.7/site-packages/populus/compilation.py:42: in compile_project_contracts
    compiled_sources = compile_files(contract_source_paths, **compiler_kwargs)
/usr/local/lib/python2.7/site-packages/solc/main.py:129: in compile_files
    **kwargs
/usr/local/lib/python2.7/site-packages/solc/utils/string.py:91: in inner
    return force_obj_to_text(fn(*args, **kwargs))

E Dynamic exception type: boost::exception_detail::clone_impl<dev::solidity::InternalCompilerError>
E std::exception::what: std::exception
E [dev::tag_comment*] = Compiled contract not found.

Pero cuando DateTime contractestaba incrustado dentro myContract.soldel archivo, pude llamar DateTime date = new DateTime();desde el myContractcontrato sin tener ningún problema. He utilizado el siguiente enfoque: cómo llamar a un contrato desde un enfoque de contrato existente .

miContrato.sol:

contract myContract{
   DateTime date = new DateTime(); //works now.
   <Some_Code>
}
contract DateTime{
   <Some_Code>
}

[P] Probé este enfoque en Solidity Browser y funciona. ¿Cómo podría solucionar este problema en Populus?

Alguna información:

  • plataforma darwin -- Python 2.7.12, pytest-3.0.2, py-1.4.31,
    pluggy-0.3.1
  • complementos: populus-1.1.0
  • Sistema operativo: Mac OS X

solc --version: la interfaz de línea de comandos del compilador de solidity Versión: 0.4.8+commit.60cc1668.Darwin.appleclang

Gracias por su tiempo y ayuda.

Respuestas (1)

El error que tiene no está relacionado con Populus:

   Dynamic exception type: boost::exception_detail::clone_impl<dev::solidity::InternalCompilerError>
   E std::exception::what: std::exception

Dice que Solidity no puede compilar su contrato debido a un error. Repita el problema compilando manualmente los contratos desde la línea de comando y luego emitiendo un informe de error contra Solidity con pasos repetibles.

Además, actualice su Solidity a la última versión antes de hacer esto.

Estoy usando la última versión de solc, pero todavía me enfrento al mismo problema. Tampoco puedo importar archivos library.sol.
Le sugiero que haga la compilación a mano y, si eso aún falla, informe un error según las instrucciones.