Адрес контракта возвращается в консоли как неопределенный - PullRequest
0 голосов
/ 09 июня 2018
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"

, но я не хочу запускать каждую команду каждый раз вручную, поэтому попытался запустить ее в сценарии

1 Ответ

0 голосов
/ 09 июня 2018

За документацию , если вы развернете контракт синхронно, функция немедленно вернется с хешем транзакции, но вам нужно будет опрашивать статус транзакции, пока она не будет добыта.(Только тогда адрес контракта будет доступен.)

В качестве альтернативы вы можете развернуть контракт асинхронно:

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
    }
});
...