No se pudo encontrar ABI de la respuesta de solc.compile web3.js

Soy muy nuevo en ethereum y estaba tratando de obtener el código de bytes y ABI de solc.compile usando web3js pero no pude encontrar el ABI. Tengo el código de bytes. Guardé la respuesta json en los archivos y solo pude obtener estos resultados.

  1. ensamblado.json
  2. bytecode.json
  3. desplegadoBytecode.json
  4. Estimacionesgas.json
  5. legacyAssembly.json
  6. identificadores de método.json

Aquí está mi código:

const inboxPath = path.resolve(__dirname,'contracts','inbox.sol');
const source = fs.readFileSync(inboxPath,'utf8');

// build path
const buildPath = path.resolve(__dirname, 'compiled');


/**
 * the new version only supports standard JSON in and out
 * @type {{settings: {outputSelection: {"*": {"*": string[]}}}, sources: {"inbox.sol": {content: string}}, language: string}}
 */
const input = {
    language: 'Solidity',
    sources: {
        'inbox.sol':{
            content: source,
        },
    },
    settings:{
        outputSelection: {
            '*': {
                '*': ['evm', 'bytecode'],
            },
        },
    },
};

async function compile() {
    const response = await solc.compile(JSON.stringify(input));

    const output = await JSON.parse(solc.compile(JSON.stringify(input)));

    const contracts = output.contracts['inbox.sol']["Inbox"].evm;

    const compiledResults = JSON.parse(response)["contracts"]["inbox.sol"]["Inbox"]["evm"];

    for (const contractName in contracts) {
        fs.writeFileSync(`${buildPath}/${contractName}.json`, JSON.stringify(contracts[contractName]))
    }
}

compile().then();

Aquí están las versiones de web3js, solidity y otros paquetes necesarios que estoy usando:

  "dependencies": {
    "ganache-cli": "^6.12.2",
    "mocha": "^9.2.0",
    "solc": "^0.8.11",
    "web3": "^1.0.0-beta.26"
  }

Respuestas (1)

Tengo la solución. Olvidé agregar abi en la selección de salida. Aquí está la variable de entrada corregida.

const input = {
    language: 'Solidity',
    sources: {
        'inbox.sol':{
            content: source,
        },
    },
    settings:{
        outputSelection: {
            '*': {
                '*': ['evm', 'bytecode', 'abi'],
                // use * to get all the fields
                // '*': ["*"]
            },
        },
    },
};