在浏览器调用之后,我只是试图从nodeJS应用程序调用私有区块链上的契约,但我一直在节点中得到这个错误:
2017-03-01T21:07:34.782560+00:00 app[web.1]: TypeError: MyContract is not a constructor
2017-03-01T21:07:34.782562+00:00 app[web.1]: at /app/app.js:77:30
2017-03-01T21:07:34.782563+00:00 app[web.1]: at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
2017-03-01T21:07:34.782563+00:00 app[web.1]: at next (/app/node_modules/express/lib/router/route.js:131:13)
2017-03-01T21:07:34.782567+00:00 app[web.1]: at module.exports (/app/node_modules/express-stormpath/lib/middleware/authentication-required.js:25:12)
2017-03-01T21:07:34.782567+00:00 app[web.1]: at /app/node_modules/express-stormpath/lib/middleware/get-user.js:154:11
2017-03-01T21:07:34.782568+00:00 app[web.1]: at /app/node_modules/express-stormpath/lib/helpers/expand-account.js:145:5
2017-03-01T21:07:34.782568+00:00 app[web.1]: at /app/node_modules/async/dist/async.js:3694:9
2017-03-01T21:07:34.782569+00:00 app[web.1]: at /app/node_modules/async/dist/async.js:359:16
2017-03-01T21:07:34.782569+00:00 app[web.1]: at iteratorCallback (/app/node_modules/async/dist/async.js:935:13)
2017-03-01T21:07:34.782570+00:00 app[web.1]: at /app/node_modules/async/dist/async.js:843:16这是我如何称呼我的合同,我做错了什么?
app.post('/api/getOrganisationDetails', stormpath.authenticationRequired, function(req, res){
var rawString = req.user.customData;
var stringJson = JSON.stringify(rawString);
var customData = JSON.parse(stringJson);
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider(customData.ethereum_provider));
var coinbase = web3.eth.coinbase;
var balance = web3.eth.getBalance(coinbase);
var name = req.body.name;
var ABI = [{"constant":false,"inputs":[],
"name":"get",
"outputs":[{"name":"","type":"int8"}],
"type":"function"}];
// creation of contract object
var MyContract = web3.eth.contract(ABI);
var myContractInstance = new MyContract('0x90eb73c0bb07b0a5428b3d3ac2a5b7461bdd038b');
var result = myContractInstance.get(name);
console.log(result);
res.status(200);
res.end("hello world");
});发布于 2017-03-01 21:43:43
而不是:
var myContractInstance =
new MyContract('0x90eb73c0bb07b0a5428b3d3ac2a5b7461bdd038b');你应该有
var myContractInstance =
MyContract.new({from:<fromAddr>, data:<compiledContractCode>, gas:<value>});例如:
var myContractInstance =
MyContract.new({from:'0xbc4773626fed4d763e5d02e3aaef85be6ec67994',
data:'0x... <compiledCode in hex> ...', gas:1000000});另外,获取上述调用的ABI和编译代码的简单方法如下(其中MyContractSource是您的稳固代码作为字符串,而MyContractCompiled下的字段名(它有info和code子字段)是您在source中契约的名称):
var MyContractCompiled = web3.eth.compile.solidity(MyContractSource);
var MyContract = web3.eth.contract(MyContractCompiled.MyContract.info.abiDefinition);
var myContractInstance =
MyContract.new({from:'0xbc4773626fed4d763e5d02e3aaef85be6ec67994',
data:MyContractCompiled.MyContract.code, gas:1000000});https://ethereum.stackexchange.com/questions/12644
复制相似问题