¿Cómo usar Solidity solc para compilar A.sol que importa el archivo B.sol?

Sé cómo instalar solc a través de "npm install --save solc" y luego uso solc.compile para compilar un archivo sol. Pero ahora tengo un archivo A.sol que importa el archivo B.sol, y cuando ejecuto node compile.js, no hay error en mi terminal, ¡pero no se genera ningún archivo json!

Pero cuando uso el mismo compile.js para compilar B.sol, funciona. ¿¿¿Por qué??? ¿Cómo solucionar esta función de importación en archivos SOL de Solidity? Gracias.

Respuestas (4)

const pathA = path.resolve(__dirname, 'contracts', 'A.sol');
//to find the path of A.sol inside the folder 'contract' in your project
const pathB = path.resolve(__dirname, 'contracts', 'B.sol');
const solA = fs.readFileSync(pathA, 'utf8');
const solB = fs.readFileSync(pathB, 'utf8');

const input = {
  sources: {
    'A.sol': solA,
    'B.sol': solB
  }
};
console.log(solc.compile(input, 1));
Para aquellos que buscan en Google, es posible que vea un error en el sentido de: Source "<contract>.sol" not found: File import callback not supportedantes de implementar la solución.

Agréguelos como fuentes, sí, pero también agregue una devolución de llamada de importación si usa solcjs.

https://github.com/ethereum/solc-js/issues/114#issuecomment-354752466

Estoy usando @remix-project/remix-solidityen el navegador, funciona muy bien para mí

Simplemente llame:

const response = await compile(
                {
                    [CONTRACT_FILE_NAME]: {
                        content: source
                    }
                }
                , {
                    version: SOLIDITY_COMPILER_VERSION
                }, handleNpmImport) as CompilerAbstract;

Código fuente: https://github.com/vanduc1102/samples/blob/master/reactjs/cra-solidity-etherjs/package.json

No he podido hacer que solc js importe archivos .sol entre sí; no estoy seguro de si es posible. Mi solución es simplemente combinar todos los archivos .sol en un solo archivo y compilarlo.

Ver esta pregunta.