【问题标题】:ParserError: Expected pragma, import directive or contract/interface/library definitionParserError:预期的编译指示、导入指令或合同/接口/库定义
【发布时间】:2019-09-11 13:31:00
【问题描述】:

每次我使用compile.jsnode compile.js 命令编译我的solidity 文件Inbox.sol 时,我都会收到此错误"ParserError: Expected pragma, import directive or contract/interface/library definition"。这个错误我google了一下,有两种解决方法,一种是因为我的语法错误,比如没有;,另一种是因为solidity编译器。我检查了我的solidity 版本和语法,我找不到任何错误。请帮忙!

我试过this,但它不是我的solidity版本,如果我将代码更改为contructorsyntax,它会弹出错误。

收件箱.sol

pragma solidity ^0.4.17;
contract Inbox{
  string public message;
  function Inbox(string initialMessage)public{
    message = initialMessage;
  }
  function setMessage(string newMessage) public{
    message = newMessage;
  }

}

编译.js

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');

console.log(solc.compile(JSON.stringify({
    language: 'Solidity',
    sources: {
      'Inbox.sol': {
        content: source,
      },
    },
    settings: {
      outputSelection: {
        '*': {
          '*': ['evm', 'bytecode'],
        },
      },
    },
  })));

package.json

{
  "name": "error",
  "version": "1.0.0",
  "description": "",
  "main": "compile.js",
  "scripts": {
    "test": "mocha"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "solc": "^0.4.17"
  }
}

package-lock.json

"solc": {
      "version": "0.4.17",
      "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.17.tgz",
      "integrity": "sha512-39Tmo2r+qclwW7ooLXMLzMSxmoGtHy3/p2sDKdA9NM/+MRtzLm/AFKj4BY2Cocg3gwkfJzKTEx6X0wiI4fIZ/A==",
      "requires": {
        "fs-extra": "^0.30.0",
        "memorystream": "^0.3.1",
        "require-from-string": "^1.1.0",
        "semver": "^5.3.0",
        "yargs": "^4.7.1"
      }
  },

【问题讨论】:

    标签: javascript compiler-errors solidity


    【解决方案1】:

    我把我的 compile.js 代码改成了这个

    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');
    
    console.log(solc.compile(source,1));
    

    然后就成功了!!!

    【讨论】:

      猜你喜欢
      • 2019-05-25
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多