当尝试使用solc-js编译智能合约时,我收到了错误
克里希纳:投票krishnakankipati $ node deploy.js 编制合同 assert.js:350 扔错了; ^…
您没有正确使用solc-js。您需要对输入进行字符串化,然后传递1而不是导入回调。在发布问题之前请阅读文档: https://github.com/ethereum/solc-js
考虑使用etherjs,更好的文档和比web3更强大。
请务必阅读 solc docs 对于solc v0.5.0 +,以确保您正在调整Solidity编译器的更改。
这样的东西应该与最新版本的solc兼容:
// Note: You should be defining your contract sources as objects now. // Note: You must also provide the compiler output selection as well. const compilerInput = { language: "Solidity", sources: { 'Voter': { content: fs.readFileSync('Voter.sol', 'utf8') } }, settings: { outputSelection: { "*": { "*": [ "abi", "evm.bytecode" ] } } } }; console.log('Compiling the contract') // Note: You have to pass the input in with JSON.stringify now. const compiledContract = JSON.parse(solc.compile(JSON.stringify(compilerInput))); if(compiledContract.errors) { compiledContract.errors.forEach(err => console.log(err.formattedMessage)); } // Note: This changed slightly since I'm using JSON.parse above. const contract = compiledContract.contracts['Voter'].Voter; // Voter contract from Voter file. // Note: This is now called 'abi' and not 'interface' const abi = contract.abi; fs.writeFileSync('abi.json', JSON.stringify(abi, null, 2));
你还需要更新你的 deployContract 函数与solc v0.5.0 +同步
deployContract
async function deployContract(web3, contract, sender) { let Voter = new web3.eth.Contract(JSON.parse(JSON.stringify(abi))); let bytecode = '0x' + contract.evm.bytecode.object; let gasEstimate = await web3.eth.estimateGas({data: bytecode}); // The rest should work fine... }