代码未在nodejs中编译,抛出意外错误(Web3.js)

时间:2018-11-21 09:13:04

标签: node.js blockchain solidity web3js

我尝试遵循此repo:-

但是在使用:-

编译代码时出现以下错误
import traceback

def func():
    try:
        -- do something --
    except:
        traceback.print_exc()

它抛出此错误:-

code = fs.readFileSync('Voting.sol').toString()
solc = require('solc')
compiledCode = solc.compile(code)

6 个答案:

答案 0 :(得分:0)

您必须指定用于实体文件的编码类型。

code = fs.readFileSync('Voting.sol', 'utf8');

,您必须指定要编制的合同数量。

compiledCode = solc.compile(code, 1);

答案 1 :(得分:0)

我发现答案是因为npm版本冲突。确保您具有正确的solc版本。请参阅此repo

答案 2 :(得分:0)

我找到了另一个解决方案。在我的案例中,问题是File.sol是原始固体智能合约,但是您需要将Compiler Standard Input JSON放入solc.compile()中。这适用于Solidity 0.5.1。在this thread中,我是逐步完成交易发送之前的整个过程。

答案 3 :(得分:0)

我发现,如果您根据Solidity文档将输入信息放入JSON格式,那么无论使用哪种编译器,您都很好。在编译“ stringify”文件(JSON.stringify)之前。编译文件后,该对象将采用字符串形式,因此您可能要解析它(JSON.parse),以便从那里开始使用它。这是一个带有JSON格式合同的console.log()的代码示例,因此您可以查看正在使用的代码。

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


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

var solcInput = {
    language: "Solidity",
    sources: { 
        contract: {
            content: source
        }
     },
    settings: {
        optimizer: {
            enabled: true
        },
        evmVersion: "byzantium",
        outputSelection: {
            "*": {
              "": [
                "legacyAST",
                "ast"
              ],
              "*": [
                "abi",
                "evm.bytecode.object",
                "evm.bytecode.sourceMap",
                "evm.deployedBytecode.object",
                "evm.deployedBytecode.sourceMap",
                "evm.gasEstimates"
              ]
            },
        }
    }
};

solcInput = JSON.stringify(solcInput);
var contractObject = solc.compile(solcInput);
contractObject = JSON.parse(contractObject);

console.log(contractObject);

答案 4 :(得分:0)

solc的版本和您的合同应该相同。

例如,如果您的合同使用pragma solidity ^0.4.18;,则应该使用npm install solc@0.4.18安装相同版本的solc。

答案 5 :(得分:0)

我也面临着同样的问题。下载并检查是否安装了solc版本的正确版本,否则会出现错误。我未指定要下载的版本,而是下载了默认版本。

npm install --save solc@0.4.17 (指定版本)

“'{” errors“:[{” component“:” general“,” formattedMessage“:” *第1行,第1列\ n语法错误:期望值,对象或数组。\ n *第1行,第Column 2 \ n JSON值后有额外的非空格。\ n“,” message“:” *第1行,第1列\ n语法错误:值,对象或数组是预期的。\ n *第1行,第2列\ n额外非-JSON值后的空白。\ n“,”严重性“:”错误“,”类型“:” JSONError“}]}'”