mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 18:45:52 +00:00
AccountSet set/clear, asfDefaultRipple = 8 AccountRoot flag, lsfDefaultRipple = 0x00800000 In trustCreate, set no ripple flag if appropriate. If an account does not have the default ripple flag set, new ripple lines created as a result of its offers being taken or people creating trust lines to it have no ripple set by that account's side automatically Trust lines can be deleted if the no ripple flag matches its default setting based on the account's default ripple setting. Fix default no-rippling in integration tests.
215 lines
5.6 KiB
JavaScript
215 lines
5.6 KiB
JavaScript
var async = require('async');
|
|
var assert = require('assert-diff');
|
|
var Account = require('ripple-lib').UInt160;
|
|
var Remote = require('ripple-lib').Remote;
|
|
var Transaction = require('ripple-lib').Transaction;
|
|
var testutils = require('./testutils');
|
|
var config = testutils.init_config();
|
|
|
|
assert.options.strict = true;
|
|
|
|
suite('Order Book', function() {
|
|
var $ = { };
|
|
|
|
setup(function(done) {
|
|
testutils.build_setup().call($, done);
|
|
});
|
|
|
|
teardown(function(done) {
|
|
testutils.build_teardown().call($, done);
|
|
});
|
|
|
|
test('Track offers', function (done) {
|
|
var self = this;
|
|
|
|
var steps = [
|
|
function(callback) {
|
|
self.what = 'Create accounts';
|
|
|
|
testutils.create_accounts(
|
|
$.remote,
|
|
'root',
|
|
'20000.0',
|
|
[ 'mtgox', 'alice', 'bob' ],
|
|
callback
|
|
);
|
|
},
|
|
|
|
function waitLedgers(callback) {
|
|
self.what = 'Wait ledger';
|
|
|
|
$.remote.once('ledger_closed', function() {
|
|
callback();
|
|
});
|
|
|
|
$.remote.ledger_accept();
|
|
},
|
|
|
|
function verifyBalance(callback) {
|
|
self.what = 'Verify balance';
|
|
|
|
testutils.verify_balance(
|
|
$.remote,
|
|
[ 'mtgox', 'alice', 'bob' ],
|
|
'19999999988',
|
|
callback
|
|
);
|
|
},
|
|
|
|
function (callback) {
|
|
self.what = 'Set transfer rate';
|
|
|
|
var tx = $.remote.transaction('AccountSet', {
|
|
account: 'mtgox'
|
|
});
|
|
|
|
tx.transferRate(1.1 * 1e9);
|
|
|
|
tx.submit(function(err, m) {
|
|
assert.ifError(err);
|
|
assert.strictEqual(m.engine_result, 'tesSUCCESS');
|
|
callback();
|
|
});
|
|
|
|
testutils.ledger_wait($.remote, tx);
|
|
},
|
|
|
|
function (callback) {
|
|
self.what = 'Set limits';
|
|
|
|
testutils.credit_limits($.remote, {
|
|
'alice' : '1000/USD/mtgox',
|
|
'bob' : '1000/USD/mtgox'
|
|
},
|
|
callback);
|
|
},
|
|
|
|
function (callback) {
|
|
self.what = 'Distribute funds';
|
|
|
|
testutils.payments($.remote, {
|
|
'mtgox' : [ '100/USD/alice', '50/USD/bob' ]
|
|
},
|
|
callback);
|
|
},
|
|
|
|
function (callback) {
|
|
self.what = 'Create offer';
|
|
|
|
// get 4000/XRP pay 10/USD : offer pays 10 USD for 4000 XRP
|
|
var tx = $.remote.transaction('OfferCreate', {
|
|
account: 'alice',
|
|
taker_pays: '4000',
|
|
taker_gets: '10/USD/mtgox'
|
|
});
|
|
|
|
tx.submit(function(err, m) {
|
|
assert.ifError(err);
|
|
assert.strictEqual(m.engine_result, 'tesSUCCESS');
|
|
callback();
|
|
});
|
|
|
|
testutils.ledger_wait($.remote, tx);
|
|
},
|
|
|
|
function (callback) {
|
|
self.what = 'Create order book';
|
|
|
|
var ob = $.remote.createOrderBook({
|
|
currency_pays: 'XRP',
|
|
issuer_gets: Account.json_rewrite('mtgox'),
|
|
currency_gets: 'USD'
|
|
});
|
|
|
|
ob.on('model', function(){});
|
|
|
|
ob.getOffers(function(err, offers) {
|
|
assert.ifError(err);
|
|
|
|
//console.log('OFFERS', offers);
|
|
|
|
var expected = [
|
|
{ Account: 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn',
|
|
BookDirectory: 'AE0A97F385FFE42E3096BA3F98A0173090FE66A3C2482FE0570E35FA931A0000',
|
|
BookNode: '0000000000000000',
|
|
Flags: 0,
|
|
LedgerEntryType: 'Offer',
|
|
OwnerNode: '0000000000000000',
|
|
Sequence: 3,
|
|
TakerGets: { currency: 'USD',
|
|
issuer: 'rGihwhaqU8g7ahwAvTq6iX5rvsfcbgZw6v',
|
|
value: '10'
|
|
},
|
|
TakerPays: '4000',
|
|
index: '2A432F386EF28151AF60885CE201CC9331FF494A163D40531A9D253C97E81D61',
|
|
owner_funds: '100',
|
|
is_fully_funded: true,
|
|
taker_gets_funded: '10',
|
|
taker_pays_funded: '4000' }
|
|
]
|
|
|
|
assert.deepEqual(offers, expected);
|
|
|
|
callback(null, ob);
|
|
});
|
|
},
|
|
|
|
function (ob, callback) {
|
|
self.what = 'Create offer';
|
|
|
|
// get 5/USD pay 2000/XRP: offer pays 2000 XRP for 5 USD
|
|
var tx = $.remote.transaction('OfferCreate', {
|
|
account: 'bob',
|
|
taker_pays: '5/USD/mtgox',
|
|
taker_gets: '2000',
|
|
});
|
|
|
|
tx.submit(function(err, m) {
|
|
assert.ifError(err);
|
|
assert.strictEqual(m.engine_result, 'tesSUCCESS');
|
|
callback(null, ob);
|
|
});
|
|
|
|
testutils.ledger_wait($.remote, tx);
|
|
},
|
|
|
|
function (ob, callback) {
|
|
self.what = 'Check order book tracking';
|
|
|
|
ob.getOffers(function(err, offers) {
|
|
assert.ifError(err);
|
|
//console.log('OFFERS', offers);
|
|
|
|
var expected = [
|
|
{ Account: 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn',
|
|
BookDirectory: 'AE0A97F385FFE42E3096BA3F98A0173090FE66A3C2482FE0570E35FA931A0000',
|
|
BookNode: '0000000000000000',
|
|
Flags: 0,
|
|
LedgerEntryType: 'Offer',
|
|
OwnerNode: '0000000000000000',
|
|
Sequence: 3,
|
|
TakerGets:
|
|
{ currency: 'USD',
|
|
issuer: 'rGihwhaqU8g7ahwAvTq6iX5rvsfcbgZw6v',
|
|
value: '5' },
|
|
TakerPays: '2000',
|
|
index: '2A432F386EF28151AF60885CE201CC9331FF494A163D40531A9D253C97E81D61',
|
|
owner_funds: '94.5',
|
|
is_fully_funded: true,
|
|
taker_gets_funded: '5',
|
|
taker_pays_funded: '2000' }
|
|
]
|
|
assert.deepEqual(offers, expected);
|
|
|
|
callback();
|
|
});
|
|
},
|
|
];
|
|
|
|
async.waterfall(steps, function (error) {
|
|
assert(!error, self.what + ': ' + error);
|
|
done();
|
|
});
|
|
});
|
|
});
|