mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 12:15:51 +00:00
JS: Hotfix for sequence issue.
This commit is contained in:
@@ -1082,7 +1082,8 @@ Remote.prototype.account_seq = function (account, advance) {
|
||||
{
|
||||
seq = account_info.seq;
|
||||
|
||||
if (advance) account_info.seq += 1;
|
||||
if (advance === "ADVANCE") account_info.seq += 1;
|
||||
if (advance === "REWIND") account_info.seq -= 1;
|
||||
|
||||
// console.log("cached: %s current=%d next=%d", account, seq, account_info.seq);
|
||||
}
|
||||
|
||||
@@ -312,9 +312,8 @@ Transaction.prototype.submit = function (callback) {
|
||||
if (self.remote.local_sequence && !self.tx_json.Sequence) {
|
||||
self.tx_json.Sequence = this.remote.account_seq(self.tx_json.Account, 'ADVANCE');
|
||||
// console.log("Sequence: %s", self.tx_json.Sequence);
|
||||
}
|
||||
|
||||
if (self.remote.local_sequence && !self.tx_json.Sequence) {
|
||||
if (!self.tx_json.Sequence) {
|
||||
// Look in the last closed ledger.
|
||||
this.remote.account_seq_cache(self.tx_json.Account, false)
|
||||
.on('success_account_seq_cache', function () {
|
||||
@@ -340,13 +339,45 @@ Transaction.prototype.submit = function (callback) {
|
||||
return this;
|
||||
}
|
||||
|
||||
// If the transaction fails we want to either undo incrementing the sequence
|
||||
// or submit a noop transaction to consume the sequence remotely.
|
||||
this.on('success', function (res) {
|
||||
if (!res || "string" !== typeof res.engine_result) return;
|
||||
|
||||
switch (res.engine_result.slice(0, 3)) {
|
||||
// Synchronous local error
|
||||
case 'tej':
|
||||
self.remote.account_seq(self.tx_json.Account, 'REWIND');
|
||||
break;
|
||||
// XXX: What do we do in case of ter?
|
||||
case 'tel':
|
||||
case 'tem':
|
||||
case 'tef':
|
||||
// XXX Once we have a transaction submission manager class, we can
|
||||
// check if there are any other transactions pending. If there are,
|
||||
// we should submit a dummy transaction to ensure those
|
||||
// transactions are still valid.
|
||||
//var noop = self.remote.transaction().account_set(self.tx_json.Account);
|
||||
//noop.submit();
|
||||
|
||||
// XXX Hotfix. This only works if no other transactions are pending.
|
||||
self.remote.account_seq(self.tx_json.Account, 'REWIND');
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Prepare request
|
||||
|
||||
var request = this.remote.request_submit();
|
||||
|
||||
// Forward successes and errors.
|
||||
request.on('success', function (message) { self.emit('success', message); });
|
||||
request.on('error', function (message) { self.emit('error', message); });
|
||||
request.on('success', function (message) {
|
||||
self.emit('success', message);
|
||||
});
|
||||
request.on('error', function (message) {
|
||||
self.emit('error', message);
|
||||
});
|
||||
|
||||
if (!this._secret && !this.tx_json.Signature) {
|
||||
this.emit('error', {
|
||||
|
||||
Reference in New Issue
Block a user