Я сделал веб-приложение, которое взаимодействует со смарт-контрактом, используя веб-пакет truffle unbox. В моем контракте есть переменная с именем sum и 2 функции: одна, называемая answer, которая увеличивает переменную sum после ее выполнения, и другая функция, называемая total, которая возвращает значение переменной sum. В моем app.js у меня есть код:
SmartContract.deployed().then(function(contractInstance) {
contractInstance.answer(1, {gas: 140000, from: web3.eth.accounts[0]}).then(function(v) {
return contractInstance.total.call().then(function(total){
$("#total").html(total.toString());
});
});
}
Мой вопрос заключается в том, будет ли вызов contractInstance.total выполняться после вызова транзакции contractInstance.answer, так что переменная total в моем index.html будет иметь обновленное значение. Также необходимо слово «возврат» после вызова транзакции function , как answer в этом примере, для того, чтобы следующая функция вызова контракта, например total в этом примере, выполнялась после того, как транзакция будет добыта?
Я использовал testrpc, чтобы проверить, работает ли мое веб-приложение должным образом, но в testrpc блоки добываются мгновенно, поэтому я не уверен, будет ли написанный мной код правильным, если я буду использовать это приложение в сети testnet.
Большое спасибо за ваше время!
Мой вопрос заключается в том, будет ли выполняться вызов contractInstance.total после того, как транзакционный вызов contractInstance.answer будет добыт,
Нет, contractInstance.answer
вернет хеш транзакции (возможно, она еще не добыта).
Рассмотрите возможность использования версии web3 1.0.x. В нем есть события, которые вы можете прослушать http://web3js.readthedocs.io/en/1.0/web3-eth-contract.html?highlight=contract#id15 .
contractInstance.methods.answer().send({from: '_address'})
.on('transactionHash', function(hash){
...
})
.on('receipt', function(receipt){
...// your transaction is mined here
})
.on('confirmation', function(confirmationNumber, receipt){
...
})
.on('error', console.error);
Кэти
Виктор Баранов
npm view web3
, обновите свой package.json и установитеКэти
Виктор Баранов
getTxCallBack
здесь: ethereum.stackexchange.com/questions/18884/…Кэти
Дэвид Калланан