首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web3J: TypeError: MyContract不是构造函数

Web3J: TypeError: MyContract不是构造函数
EN

Ethereum用户
提问于 2017-03-01 21:11:50
回答 1查看 1.2K关注 0票数 1

在浏览器调用之后,我只是试图从nodeJS应用程序调用私有区块链上的契约,但我一直在节点中得到这个错误:

代码语言:javascript
复制
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

这是我如何称呼我的合同,我做错了什么?

代码语言:javascript
复制
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");
});
EN

回答 1

Ethereum用户

回答已采纳

发布于 2017-03-01 21:43:43

而不是:

代码语言:javascript
复制
var myContractInstance =
    new MyContract('0x90eb73c0bb07b0a5428b3d3ac2a5b7461bdd038b');

你应该有

代码语言:javascript
复制
var myContractInstance =
    MyContract.new({from:<fromAddr>, data:<compiledContractCode>, gas:<value>});

例如:

代码语言:javascript
复制
var myContractInstance =
    MyContract.new({from:'0xbc4773626fed4d763e5d02e3aaef85be6ec67994',
                    data:'0x... <compiledCode in hex> ...', gas:1000000});

另外,获取上述调用的ABI和编译代码的简单方法如下(其中MyContractSource是您的稳固代码作为字符串,而MyContractCompiled下的字段名(它有infocode子字段)是您在source中契约的名称):

代码语言:javascript
复制
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});
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/12644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档