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.
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"
}
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
// '*': ["*"]
},
},
},
};