我想通过 web3 与 javascript 进行合约交互
我参考了这个tutorial
并有如下javascript代码:
//ignored
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
web3.eth.defaultAccount = web3.eth.accounts[0];
var Coursetro = new web3.eth.Contract(abi, 'addr of contract');
var version = web3.version;
console.log(Coursetro);
Coursetro.methods.getInstructor().call(function(error, result){
if(!error)
{
$("#instructor").html(result[0]+' ('+result[1]+' years old)');
console.log(result);
}
else
console.error(error);
});
$("#button").click(function() {
Coursetro.methods.setInstructor($("#name").val(), $("#age").val());
});
当我启动 testrpc 并想使用 Remix 部署合约时
网络断开并在powershell中显示以下消息:
Error: Callback was already called.
at C:\Users\USER\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:23011:36
at WriteStream.<anonymous> (C:\Users\USER\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:23326:17)
at WriteStream.emit (events.js:376:20)
at WriteStream.destroy (C:\Users\USER\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:69792:8)
at finish (internal/streams/writable.js:670:14)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
和智能合约如下:
pragma solidity ^0.4.18;
contract Coursetro {
string fName;
uint age;
function setInstructor(string _fName, uint _age) public {
fName = _fName;
age = _age;
}
function getInstructor() public constant returns (string, uint) {
return (fName, age);
}
}
发生了什么,我该如何解决?