У меня есть две функции,
Тот, который возвращает web.eth.sendTransaction, который запускает метамаску в первый раз,
И тот, который возвращает contractInstance.function, который обновляет массив в моем контракте. Что также запускает метамаску.
Оба находятся в одной и той же большой функции в моем app.js,
Я хотел бы получить тот же результат, что и получение платежа, а затем обновить книгу в контракте, вызвав метамаску только один раз.
Какова наилучшая практика?
markAdopted: function(adopters, account) {
var adoptionInstance;
App.contracts.Adoption.deployed().then(function(instance) {
adoptionInstance = instance;
return adoptionInstance.getAdopters.call();
}).then(function(adopters) {
for (i = 0; i < adopters.length; i++) {
console.log(adopters[i]);
if (adopters[i] !== '0x0000000000000000000000000000000000000000') {
$('.panel-pet').eq(i).find('button').text('Coped').attr('disabled', true);
}
}
}).catch(function(err) {
console.log(err.message);
});
},
handleAdopt: function(event) {
event.preventDefault();
var petId = parseInt($(event.target).data('id'));
var adoptionInstance;
var account;
var transactionStatus;
web3.eth.getAccounts(function(error, accounts) {
if (error) {
console.log(error);
}
account = accounts[0];
});
web3.eth.sendTransaction({
from: account,
to: '0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef',
value: '1000000000000000000'
}, function(error, result){
if(!error) {
console.log(result);
transactionStatus = true;
if (transactionStatus) {
App.contracts.Adoption.deployed().then(function(instance) {
adoptionInstance = instance;
return adoptionInstance.adopt(petId, {from: account});
}).then(function(result) {
return App.markAdopted();
}).catch(function(err) {
console.log(err.message);
});
}
}
else {
console.error(error);
transactionStatus = false;
}
});
}
};
Если вы не хотите сделать эту функцию массива обновления платной и объединить код, вы, по сути, запрашиваете 2 действия, которые должны быть выполнены, для чего потребуются 2 триггера.
В качестве альтернативы вы можете безопасно подключить среднюю учетную запись на серверной части, чтобы подключиться и инициировать второй вызов через… К сожалению, вы также понесете расходы на газ.
Лучше всего попытаться переосмыслить то, как запрограммирован контракт, и попытаться сделать больше с меньшим количеством вызовов функций.
Илан
РейХейнс
data
параметр? Я рекомендую вам показать нам код самой транзакции.Илан
РейХейнс
Илан
Илан