如何从节点与我的智能合约进行交互?我正在使用松露将合同部署到我的私人连锁店。但是我的nodejs代码没有得到部署合同的实例。
我有一个看起来像这样的小合同
pragma solidity ^0.5.1;
contract MyContract {
uint num;
function someFunction(uint _num) public {
num = _num;
}
}
然后我将合同编译并迁移到我的私有链(ganache-cli)
>truffle compile
...
>truffle migrate
...
2_deploy_contracts.js
=====================
Deploying 'MyContract'
----------------------
> transaction hash: 0xa9161613e7c398c5425b3bb7c306d494a657193c965203902c5732192b394979
> Blocks: 0 Seconds: 0
> contract address: 0x93Da9d36ECcd5eeceBe9b469A65cBbA397b6c85E
> account: 0x9576316A79287D03c92F9157056e5BCde1cAEc5C
> balance: 99.99152546
> gas used: 98463
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.00196926 ETH
MyContract Address: 0x93Da9d36ECcd5eeceBe9b469A65cBbA397b6c85E
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00196926 ETH
Summary
=======
> Total deployments: 2
> Final cost: 0.00763398 ETH
>
这么久一切似乎都很好。但是,然后我想与我的私人链上的合同进行互动。因此,我正在使用此代码:
const path = require('path');
var MyContractABI = require(path.join(__dirname, '../build/contracts/MyContract'))
var Web3 = require('web3');
var provider = new Web3.providers.HttpProvider("http://localhost:8545");
var contract = require("truffle-contract");
var MyContract = contract(MyContractABI);
MyContract.setProvider(provider);
var deployed;
MyContract.deployed().then(function(instance) {
var deployed = instance;
return instance.someFunction(5);
}).then(function(result) {
// Do something with the result or continue with more transactions.
console.log(result);
});
但这是当一切都崩溃的时候。 MyContractABI包含合同jsons接口。但是我收到一个“ UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性'apply'”。在MyContract.deployed()上失败。
节点版本:v8.11.3 松露版本:v5.0.0-beta.2
示例代码在这里: https://github.com/manmountain/truffle-example
完整堆栈跟踪
(节点:5888)UnhandledPromiseRejectionWarning:TypeError:无法读取 未定义的属性“应用” 在Provider.sendAsync(C:\ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ contract.js:24:36) 在RequestManager.sendAsync(C:\ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ node_modules \ web3 \ lib \ web3 \ requestmanager.js:80:19) 在Object.get [作为getNetwork]处(C:\ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ node_modules \ web3 \ lib \ web3 \ property.js:116:33) 在C:\ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ contract.js:512:27 在新的Promise() 在Function.detectNetwork(C:\ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ contract.js:503:14) 在Function.deployed(C:\ Users \ goran \ Documents \ development \ truffle-example \ node_modules \ truffle-contract \ contract.js:451:19) 在对象。 (C:\ Users \ goran \ Documents \ development \ truffle-example \ example \ example.js:11:12) 在Module._compile(module.js:652:30) 在Object.Module._extensions..js(module.js:663:10) 在Module.load(module.js:565:32) 在tryModuleLoad(module.js:505:12) 在Function.Module._load(module.js:497:3) 在Function.Module.runMain(module.js:693:10) 在启动时(bootstrap_node.js:191:16) 在bootstrap_node.js:612:3(node:5888)处UnhandledPromiseRejectionWarning:未处理的诺言拒绝。这个 由抛出异步函数引起的错误 没有障碍,或者拒绝了没有处理的承诺 使用.catch()。 (拒绝ID:2)(节点:5888)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的Node.js进程。
答案 0 :(得分:0)
由于这是您的专用网络,因此您需要指定松露控制台中的网络-network testnet(给出truffle.config文件中的网络名称)。您应该能够进入松露外壳对应于您的网络。默认情况下,松露控制台将使用本地网络,即开发默认网络。