npm solc: AssertionError [ERR_ASSERTION]: Invalid callback specified

13,036

Solution 1

Which version of solc are you using?

Solc released a breaking version the other day, this error is related to that.

npm uninstall solc
npm install [email protected]

Solution 2

If you are using latest version ie. 0.5.9 there is change in how you compile the code.

const path = require('path');
const fs = require('fs');
const solc = require('solc');



const helloPath = path.resolve(__dirname, 'contracts', 'hello.sol');
const source = fs.readFileSync(helloPath, 'UTF-8');

var input = {
    language: 'Solidity',
    sources: {
        'hello.sol' : {
            content: source
        }
    },
    settings: {
        outputSelection: {
            '*': {
                '*': [ '*' ]
            }
        }
    }
}; 
console.log(JSON.parse(solc.compile(JSON.stringify(input))));

Solution 3

This is because of version mismatch of solidity compiler installed during solc package installation and the compiler mentioned in the solidity file.To solve this issue try

install:

npm install [email protected]

in solidity file use :

pragma solidity^0.4.25;

Solution 4

This is because the version mismatch of Solidity compiler. Please note or verify the solidity compiler version in which you want to work. For example: If you are doing work in

pragma solidity ^0.4.17

then you have to install 0.4.17 solidity compiler version like this:

npm install [email protected]

in the command prompt or terminal.

Solution 5

with solc 0.7.1:


function compileContract() {
    let voterSOl = fs.readFileSync('./contracts/voter.sol' , 'utf8')
    let complierInput = {
        language: 'Solidity',
        sources:
        {
            'voter.sol': 
            {
                content: voterSOl
            }
        },
        settings:
        {
            optimizer:
            {
                enabled: true
            },
            outputSelection:
            {
                '*':{
                    '*':['*']
                }
            }
        }
    };
    console.log('compiling contract');
    let compiledContract = JSON.parse(solc.compile(JSON.stringify(complierInput)));
    console.log('Contract Compiled');
    for (let contractName in compiledContract.contracts['voter.sol']) {
        console.log(contractName , compiledContract.contracts['voter.sol'][contractName].abi);      
        let abi = compiledContract.contracts['voter.sol'][contractName].abi;
        fs.writeFileSync(`./contracts/bin/${contractName}_abi.json` , JSON.stringify(abi));
        return compiledContract.contracts['voter.sol'][contractName];
    }
}
Share:
13,036
Mouazzam
Author by

Mouazzam

I love blockchain!

Updated on June 06, 2022

Comments

  • Mouazzam
    Mouazzam almost 2 years

    I am trying to compile solidity smart contract using npm solc. I tried to follow different examples. Link to example: https://medium.com/coinmonks/how-to-compile-a-solidity-smart-contract-using-node-js-51ea7c6bf440

    I wrote my code like following:

    const path = require('path');
    const fs = require('fs');
    const solc = require('solc');
    
    
    
    const helloPath = path.resolve(__dirname, 'contracts', 'hello.sol');
    console.log("First" + helloPath);
    const source = fs.readFileSync(helloPath, 'UTF-8');
    console.log("Second" + source);
    console.log(solc.compile(source, 1));
    

    I am getting following error when running the above code.

    AssertionError [ERR_ASSERTION]: Invalid callback specified.
        at wrapCallback (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:16:5)
        at runWithReadCallback (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:37:42)
        at compileStandard (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:78:14)
        at Object.compileStandardWrapper (C:\Users\mouazzamj058\solc_example\node_modules\solc\wrapper.js:85:14)
        at Object.<anonymous> (C:\Users\mouazzamj058\solc_example\example.js:4:19)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32)
        at tryModuleLoad (module.js:505:12)
        at Function.Module._load (module.js:497:3)
    

    Please help.