mirror of
https://github.com/Xahau/xahau.js.git
synced 2026-06-03 08:46:40 +00:00
Merge pull request #146 from ripple/unfunded-orders
Update unfunded order tracking - fix native/non-native currency discrepancies
This commit is contained in:
@@ -369,40 +369,33 @@ OrderBook.prototype.setFundedAmount = function(offer, fundedAmount) {
|
||||
return offer;
|
||||
}
|
||||
|
||||
function sixFigures(str) {
|
||||
return str.substring(0, str.indexOf('.') + 7);
|
||||
};
|
||||
var iouSuffix = '/' + this._currencyGets.to_json()
|
||||
+ '/' + this._issuerGets;
|
||||
|
||||
var takerGetsValue = (typeof offer.TakerGets === 'object')
|
||||
? offer.TakerGets.value
|
||||
: offer.TakerGets;
|
||||
|
||||
var takerPaysValue = (typeof offer.TakerPays === 'object')
|
||||
? offer.TakerPays.value
|
||||
: offer.TakerPays;
|
||||
|
||||
var iouSuffix = '/USD/rrrrrrrrrrrrrrrrrrrrBZbvji';
|
||||
var fundedTakerGets = Amount.from_json(fundedAmount + iouSuffix);
|
||||
var takerGets = Amount.from_json(takerGetsValue + iouSuffix);
|
||||
var takerPays = Amount.from_json(takerPaysValue + iouSuffix);
|
||||
|
||||
offer.is_fully_funded = fundedTakerGets.compareTo(takerGets) >= 0;
|
||||
offer.is_fully_funded = Amount.from_json(
|
||||
this._currencyGets.is_native() ? fundedAmount : fundedAmount + iouSuffix
|
||||
).compareTo(Amount.from_json(offer.TakerGets)) >= 0;
|
||||
|
||||
if (offer.is_fully_funded) {
|
||||
offer.taker_gets_funded = takerGetsValue;
|
||||
offer.taker_pays_funded = takerPaysValue;
|
||||
return offer;
|
||||
}
|
||||
|
||||
offer.taker_gets_funded = fundedAmount;
|
||||
|
||||
var rate = Amount.from_json(offer.TakerPays).divide(offer.TakerGets);
|
||||
var takerPaysFunded = fundedTakerGets.multiply(rate);
|
||||
|
||||
if (takerPaysFunded.compareTo(takerPays) <= 0) {
|
||||
offer.taker_pays_funded = takerPaysFunded.to_text();
|
||||
offer.taker_gets_funded = Amount.from_json(offer.TakerGets).to_text();
|
||||
offer.taker_pays_funded = Amount.from_json(offer.TakerPays).to_text();
|
||||
} else {
|
||||
offer.taker_pays_funded = takerPaysValue;
|
||||
offer.taker_gets_funded = fundedAmount;
|
||||
|
||||
var rate = Amount.from_json(offer.TakerPays)
|
||||
.divide(Amount.from_json(offer.TakerGets));
|
||||
|
||||
var fundedPays = Amount.from_json(
|
||||
this._currencyPays.is_native()
|
||||
? fundedAmount
|
||||
: fundedAmount + '/' + this._currencyPays.to_json() + '/' + this._issuerPays
|
||||
).multiply(rate);
|
||||
|
||||
if (fundedPays.compareTo(Amount.from_json(offer.TakerPays)) <= 0) {
|
||||
offer.taker_pays_funded = fundedPays.to_text();
|
||||
} else {
|
||||
offer.taker_pays_funded = Amount.from_json(offer.TakerPays).to_text();
|
||||
}
|
||||
}
|
||||
|
||||
return offer;
|
||||
|
||||
@@ -349,13 +349,15 @@ describe('OrderBook', function() {
|
||||
|
||||
book.setFundedAmount(offer, '100.1234');
|
||||
|
||||
assert.deepEqual(offer, {
|
||||
var expected = {
|
||||
TakerGets: offer.TakerGets,
|
||||
TakerPays: offer.TakerPays,
|
||||
is_fully_funded: true,
|
||||
taker_gets_funded: '100',
|
||||
taker_pays_funded: '123456'
|
||||
});
|
||||
};
|
||||
|
||||
assert.deepEqual(offer, expected);
|
||||
});
|
||||
|
||||
it('Set funded amount - unfunded', function() {
|
||||
@@ -367,23 +369,25 @@ describe('OrderBook', function() {
|
||||
});
|
||||
|
||||
var offer = {
|
||||
TakerGets: {
|
||||
value: '100',
|
||||
TakerPays: {
|
||||
value: '123456',
|
||||
currency: 'BTC',
|
||||
issuer: 'rrrrrrrrrrrrrrrrrrrrBZbvji'
|
||||
},
|
||||
TakerPays: '123456'
|
||||
TakerGets: '100'
|
||||
};
|
||||
|
||||
book.setFundedAmount(offer, '99');
|
||||
|
||||
assert.deepEqual(offer, {
|
||||
var expected = {
|
||||
TakerGets: offer.TakerGets,
|
||||
TakerPays: offer.TakerPays,
|
||||
is_fully_funded: false,
|
||||
taker_gets_funded: '99',
|
||||
taker_pays_funded: '122166'
|
||||
});
|
||||
taker_pays_funded: '122221.44'
|
||||
};
|
||||
|
||||
assert.deepEqual(offer, expected);
|
||||
});
|
||||
|
||||
it('Set funded amount - native currency - funded', function() {
|
||||
@@ -421,7 +425,7 @@ describe('OrderBook', function() {
|
||||
var book = remote.createOrderBook({
|
||||
currency_gets: 'XRP',
|
||||
issuer_pays: 'rrrrrrrrrrrrrrrrrrrrBZbvji',
|
||||
currency_pays: 'BTC'
|
||||
currency_pays: 'USD'
|
||||
});
|
||||
|
||||
var offer = {
|
||||
@@ -435,13 +439,15 @@ describe('OrderBook', function() {
|
||||
|
||||
book.setFundedAmount(offer, '99');
|
||||
|
||||
assert.deepEqual(offer, {
|
||||
var expected = {
|
||||
TakerGets: offer.TakerGets,
|
||||
TakerPays: offer.TakerPays,
|
||||
is_fully_funded: false,
|
||||
taker_gets_funded: '99',
|
||||
taker_pays_funded: '99.122166'
|
||||
});
|
||||
};
|
||||
|
||||
assert.deepEqual(offer, expected);
|
||||
});
|
||||
|
||||
it('Set funded amount - zero funds', function() {
|
||||
@@ -1372,7 +1378,7 @@ describe('OrderBook', function() {
|
||||
Sequence: 561,
|
||||
TransferRate: 1002000000,
|
||||
index: 'B7D526FDDF9E3B3F95C3DC97C353065B0482302500BBB8051A5C090B596C6133',
|
||||
urlgravatar: 'http://www.gravatar.com/avatar/5b33b93c7ffe384d53450fc666bb11fb'
|
||||
urlgravatar: 'http:www.gravatar.com/avatar/5b33b93c7ffe384d53450fc666bb11fb'
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1484,9 +1490,8 @@ describe('OrderBook', function() {
|
||||
|
||||
book._issuerTransferRate = 1002000000;
|
||||
|
||||
book.once('model', function(model) {
|
||||
assert.deepEqual(model, [
|
||||
{ Account: 'rGCHV41NxoK7wHQJhmao2RqjWZvBrTUhW1',
|
||||
var expected = [
|
||||
{ Account: 'rGCHV41NxoK7wHQJhmao2RqjWZvBrTUhW1',
|
||||
BookDirectory: '6EAB7C172DEFA430DBFAD120FDC373B5F5AF8B191649EC985711A3A4254F5000',
|
||||
BookNode: '0000000000000000',
|
||||
Flags: 131072,
|
||||
@@ -1537,9 +1542,14 @@ describe('OrderBook', function() {
|
||||
is_fully_funded: true,
|
||||
taker_gets_funded: '0.2',
|
||||
taker_pays_funded: '99.72233516476456'
|
||||
}])
|
||||
assert.strictEqual(book._synchronized, true);
|
||||
done();
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
book.once('model', function(model) {
|
||||
assert.deepEqual(model, expected);
|
||||
assert.strictEqual(book._synchronized, true);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user