合同地址在控制台中返回为未定义
Contract address returning as undefined in console
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var accounts_list = web3.eth.accounts;
var code = fs.readFileSync('Voting.sol').toString();
var compiledCode = solc.compile(code);
var abiDefinition = JSON.parse(compiledCode.contracts[':Voting'].interface)
var VotingContract = web3.eth.contract(abiDefinition)
var byteCode = compiledCode.contracts[':Voting'].bytecode
var deployedContract = VotingContract.new(['Itachi','Luffy','Midoriya'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
var deployedContractAddress = deployedContract.address;
var contractInstance = VotingContract.at(deployedContract.address);
// contractInstance.voteForCandidate('Itachi', {from: web3.eth.accounts[0]}) // function to vote for Itachi
// contractInstance.totalVotesFor.call('Itachi').toLocaleString() // function to return Itachi's votes
var deployedAddress = contractInstance.address;
console.log(contractInstance.address);
输出是:undefined
但是当我手动 运行 节点控制台上的每个命令时,情况并非如此。
当我尝试 typeof contractInstance.address
它输出为 "String"
但我不想 运行 每次都手动执行每个命令
因此尝试 运行在脚本中使用它
Per the documentation,如果您同步部署合约,函数 returns 会立即使用交易哈希,但您需要轮询交易的状态,直到它被挖掘。 (只有这样合约的地址才可用。)
作为替代方案,您可以异步部署合约:
VotingContract.new(['Itachi','Luffy','Midoriya'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000}, function (err, deployedContract) {
if (deployedContract.address) {
console.log(`Address: ${deployedContract.address}`);
// use deployedContract here
}
});
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
var accounts_list = web3.eth.accounts;
var code = fs.readFileSync('Voting.sol').toString();
var compiledCode = solc.compile(code);
var abiDefinition = JSON.parse(compiledCode.contracts[':Voting'].interface)
var VotingContract = web3.eth.contract(abiDefinition)
var byteCode = compiledCode.contracts[':Voting'].bytecode
var deployedContract = VotingContract.new(['Itachi','Luffy','Midoriya'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
var deployedContractAddress = deployedContract.address;
var contractInstance = VotingContract.at(deployedContract.address);
// contractInstance.voteForCandidate('Itachi', {from: web3.eth.accounts[0]}) // function to vote for Itachi
// contractInstance.totalVotesFor.call('Itachi').toLocaleString() // function to return Itachi's votes
var deployedAddress = contractInstance.address;
console.log(contractInstance.address);
输出是:undefined
但是当我手动 运行 节点控制台上的每个命令时,情况并非如此。
当我尝试 typeof contractInstance.address
它输出为 "String"
但我不想 运行 每次都手动执行每个命令 因此尝试 运行在脚本中使用它
Per the documentation,如果您同步部署合约,函数 returns 会立即使用交易哈希,但您需要轮询交易的状态,直到它被挖掘。 (只有这样合约的地址才可用。)
作为替代方案,您可以异步部署合约:
VotingContract.new(['Itachi','Luffy','Midoriya'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000}, function (err, deployedContract) {
if (deployedContract.address) {
console.log(`Address: ${deployedContract.address}`);
// use deployedContract here
}
});