Ich habe zwei Funktionen,
Eine, die web.eth.sendTransaction zurückgibt, die zum ersten Mal eine Metamaske auslöst,
Und eine, die contractInstance.function zurückgibt, die ein Array in meinem Vertrag aktualisiert. Was auch Metamask auslöst.
Beide sind in meiner app.js in der gleichen großen Funktion,
Ich möchte das gleiche Ergebnis erhalten, nämlich eine Zahlung erhalten und dann das Buch im Vertrag aktualisieren, indem ich nur einmal metamask aufrufe.
Was ist die beste Vorgehensweise?
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;
}
});
}
};
Sofern Sie nicht bereit sind, diese Update-Array-Funktion kostenpflichtig zu machen und den Code zusammenzuführen, fordern Sie im Wesentlichen die Ausführung von 2 Aktionen an, für die 2 Trigger erforderlich sind.
Eine Alternative besteht darin, dass Sie ein mittleres Konto sicher im Backend verbinden, um eine Verbindung herzustellen und den zweiten Anruf auszulösen ... Leider fallen auch die Benzinkosten an.
Am besten überdenken Sie, wie der Vertrag programmiert ist, und versuchen, mit weniger Funktionsaufrufen mehr zu erreichen.
Ilan
ReyHaynes
data
Parameter? Ich empfehle Ihnen, uns den Code für die Transaktion selbst zu zeigen.Ilan
ReyHaynes
Ilan
Ilan