简体   繁体   English

Solidity编译器-HelloWorld智能合约的问题

[英]Solidity compiler - problem with HelloWorld smart contract

Im trying to run my first HelloWorld smart contract on the Enthereum network. 我试图在Enthereum网络上运行我的第一个HelloWorld智能合约。 This is my HelloWorld.sol contract. 这是我的HelloWorld.sol合同。

pragma solidity ^0.5.0;

contract HelloWorld {
  bytes32 message;
  constructor (bytes32 myMessage) public {
    message = myMessage;
  }
  function getMessage() public returns(bytes32) {
    return message;
  }
}

When I try to build this using solcjs HelloWorld.sol --bin , there is just one Warning and no errors. 当我尝试使用solcjs HelloWorld.sol --bin构建此solcjs HelloWorld.sol --bin ,只有一个警告,没有错误。 I have installed web3 and solc using npm. 我已经使用npm安装了web3和solc。 When I run this on a node 当我在节点上运行

var solc = require('solc');
var x = fs.readFileSync('./HelloWorld.sol').toString();
var compiledContract = solc.compile(x);

the compiledContract contains this: compiledContract包含以下内容:

'{"errors":[{"component":"general","formattedMessage":"* Line 1, Column 1\\n  Syntax error: value, object or array expected.\\n* Line 1, Column 2\\n  Extra non-whitespace after JSON value.\\n","message":"* Line 1, Column 1\\n  Syntax error: value, object or array expected.\\n* Line 1, Column 2\\n  Extra non-whitespace after JSON value.\\n","severity":"error","type":"JSONError"}]}'

Where is the problem? 问题出在哪儿?

The problem was, that you I can not put raw solidity smart contract into solc.compile() function. 问题是,您无法将原始固体智能合约放入solc.compile()函数中。 There must be Compiler Standard Input JSON . 必须有Compiler Standard Input JSON Based on my another thread I found this solution: 根据另一个线程,我找到了以下解决方案:

> var Web3 = require('web3');
> var solc = require('solc');
> var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
> var CONTRACT_FILE = 'HelloWorld.sol'
> var content =fs.readFileSync(CONTRACT_FILE).toString()
> var input = {
  language: 'Solidity',
  sources: {
    [CONTRACT_FILE]: {
      content: content
    }
  },
  settings: {
    outputSelection: {
      '*': {
        '*': ['*']
      }
    }
  }
}

> var compiled = solc.compile(JSON.stringify(input))
> var output = JSON.parse(compiled)
> var abi = output.contracts[CONTRACT_FILE]['HelloWorld'].abi
> var bytecode = output.contracts[CONTRACT_FILE]['HelloWorld'].evm.bytecode.object
> var HelloWorld = new web3.eth.Contract(abi);
> var HelloWorldTx = HelloWorld.deploy({data: bytecode, arguments: [web3.utils.asciiToHex('Hello')]});
> web3.eth.estimateGas(HelloWorldTx).then(console.log); //this does not work, because it can not connect to the localhost:8545. I don't know why.
> HelloWorldTx.send({from: '0x99d54a45f2cd3b9c6443d623003416aaf944338e', gas: 1000000}).then(console.log);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM