mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 10:35:50 +00:00
Add quality to account_offers
This commit is contained in:
committed by
Vinnie Falco
parent
361f1da5b8
commit
d8d51e8103
@@ -23,6 +23,19 @@
|
|||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
|
|
||||||
|
void appendOfferJson (std::shared_ptr<SLE const> const& offer,
|
||||||
|
Json::Value& offers)
|
||||||
|
{
|
||||||
|
STAmount dirRate = amountFromQuality (
|
||||||
|
getQuality (offer->getFieldH256 (sfBookDirectory)));
|
||||||
|
Json::Value& obj (offers.append (Json::objectValue));
|
||||||
|
offer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
|
||||||
|
offer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
|
||||||
|
obj[jss::seq] = offer->getFieldU32 (sfSequence);
|
||||||
|
obj[jss::flags] = offer->getFieldU32 (sfFlags);
|
||||||
|
obj[jss::quality] = dirRate.getText ();
|
||||||
|
};
|
||||||
|
|
||||||
// {
|
// {
|
||||||
// account: <account>|<account_public_key>
|
// account: <account>|<account_public_key>
|
||||||
// ledger_hash : <ledger>
|
// ledger_hash : <ledger>
|
||||||
@@ -105,14 +118,8 @@ Json::Value doAccountOffers (RPC::Context& context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
startHint = sleOffer->getFieldU64(sfOwnerNode);
|
startHint = sleOffer->getFieldU64(sfOwnerNode);
|
||||||
|
|
||||||
// Caller provided the first offer (startAfter), add it as first result
|
// Caller provided the first offer (startAfter), add it as first result
|
||||||
Json::Value& obj (jsonOffers.append (Json::objectValue));
|
appendOfferJson(sleOffer, jsonOffers);
|
||||||
sleOffer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
|
|
||||||
sleOffer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
|
|
||||||
obj[jss::seq] = sleOffer->getFieldU32 (sfSequence);
|
|
||||||
obj[jss::flags] = sleOffer->getFieldU32 (sfFlags);
|
|
||||||
|
|
||||||
offers.reserve (reserve);
|
offers.reserve (reserve);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -150,11 +157,7 @@ Json::Value doAccountOffers (RPC::Context& context)
|
|||||||
|
|
||||||
for (auto const& offer : offers)
|
for (auto const& offer : offers)
|
||||||
{
|
{
|
||||||
Json::Value& obj (jsonOffers.append (Json::objectValue));
|
appendOfferJson(offer, jsonOffers);
|
||||||
offer->getFieldAmount (sfTakerPays).setJson (obj[jss::taker_pays]);
|
|
||||||
offer->getFieldAmount (sfTakerGets).setJson (obj[jss::taker_gets]);
|
|
||||||
obj[jss::seq] = offer->getFieldU32 (sfSequence);
|
|
||||||
obj[jss::flags] = offer->getFieldU32 (sfFlags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context.loadType = Resource::feeMediumBurdenRPC;
|
context.loadType = Resource::feeMediumBurdenRPC;
|
||||||
|
|||||||
91
test/account_offers-test.js
Normal file
91
test/account_offers-test.js
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/* -------------------------------- REQUIRES -------------------------------- */
|
||||||
|
|
||||||
|
var assert = require('assert-diff');
|
||||||
|
var lodash = require('lodash');
|
||||||
|
|
||||||
|
var testutils = require('./testutils');
|
||||||
|
var LedgerState = require('./ledger-state').LedgerState;
|
||||||
|
|
||||||
|
var config = testutils.init_config();
|
||||||
|
// We just use equal instead of strictEqual everywhere.
|
||||||
|
assert.options.strict = true;
|
||||||
|
|
||||||
|
/* ---------------------------------- TEST ---------------------------------- */
|
||||||
|
|
||||||
|
function makeSuite(name, ledger_state, tests) {
|
||||||
|
suite(name, function() {
|
||||||
|
// build_(setup|teardown) utils functions set state on this context var.
|
||||||
|
var context = {};
|
||||||
|
|
||||||
|
// This runs only once
|
||||||
|
suiteSetup(function(done) {
|
||||||
|
testutils.build_setup().call(context, function() {
|
||||||
|
var ledger = new LedgerState(ledger_state,
|
||||||
|
assert, context.remote,
|
||||||
|
config);
|
||||||
|
// Run the ledger setup util. This compiles the declarative description
|
||||||
|
// into a series of transactions and executes them.
|
||||||
|
ledger.setup(lodash.noop /*logger*/, function(){
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
suiteTeardown(function(done) {
|
||||||
|
testutils.build_teardown().call(context, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
lodash.forOwn(tests, function(func, name) {
|
||||||
|
test(name, function(done) {
|
||||||
|
func.call(this, context.remote, context, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
makeSuite (
|
||||||
|
'account_offers',
|
||||||
|
{
|
||||||
|
accounts: {
|
||||||
|
G1 : {balance: ["1000.0"]},
|
||||||
|
|
||||||
|
bob : {
|
||||||
|
balance: ["1000.0", "1000/USD/G1"],
|
||||||
|
// these offers will be in `Sequence`
|
||||||
|
offers: [["100.0", "1/USD/bob"],
|
||||||
|
["100.0", "1/USD/G1"],
|
||||||
|
["10.0", "2/USD/G1"]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
quality: function(remote, _, done) {
|
||||||
|
remote.requestAccountOffers({account: 'bob'}, function(err, response) {
|
||||||
|
var expected = [
|
||||||
|
{"flags": 65536,
|
||||||
|
"quality": "100000000",
|
||||||
|
"seq": 3,
|
||||||
|
"taker_gets": {"currency": "USD",
|
||||||
|
"issuer": "rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK",
|
||||||
|
"value": "1"},
|
||||||
|
"taker_pays": "100000000"},
|
||||||
|
{"flags": 65536,
|
||||||
|
"quality": "100000000",
|
||||||
|
"seq": 4,
|
||||||
|
"taker_gets": {"currency": "USD",
|
||||||
|
"issuer": "r32rQHyesiTtdWFU7UJVtff4nCR5SHCbJW",
|
||||||
|
"value": "1"},
|
||||||
|
"taker_pays": "100000000"},
|
||||||
|
{"flags": 65536,
|
||||||
|
"quality": "5000000",
|
||||||
|
"seq": 5,
|
||||||
|
"taker_gets": {"currency": "USD",
|
||||||
|
"issuer": "r32rQHyesiTtdWFU7UJVtff4nCR5SHCbJW",
|
||||||
|
"value": "2"},
|
||||||
|
"taker_pays": "10000000"}];
|
||||||
|
|
||||||
|
assert.deepEqual(response.offers, expected);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user