Correct delivered_amount reporting for minor ledgers (RIPD-1051)

The existing delivered_amount logic will erroneously report
unavailable for ledgers that aren't in the network's live
chain because it is based solely on ledger sequence number.
This adds a check based on the ledger close time to permit
the code to give correct results in standalone mode and on
test networks.
This commit is contained in:
JoelKatz
2015-11-10 11:02:56 -08:00
committed by Nik Bougalis
parent d9905ec719
commit 9f96d7ea38

View File

@@ -18,6 +18,7 @@
//==============================================================================
#include <ripple/rpc/impl/Utilities.h>
#include <ripple/app/ledger/LedgerMaster.h>
#include <ripple/app/misc/Transaction.h>
#include <ripple/json/json_value.h>
#include <ripple/protocol/JsonFields.h>
@@ -65,6 +66,19 @@ addPaymentDeliveredAmount (
return;
}
// If the ledger closed long after the DeliveredAmount code was deployed
// then its absence indicates that the amount delivered is listed in the
// Amount field. DeliveredAmount went live January 24, 2014.
auto ct =
context.ledgerMaster.getCloseTimeBySeq (transaction->getLedger ());
if (ct && (*ct > 446000000))
{
// 446000000 is in Feb 2014, well after DeliveredAmount went live
meta[jss::delivered_amount] =
serializedTx->getFieldAmount (sfAmount).getJson (1);
return;
}
// Otherwise we report "unavailable" which cannot be parsed into a
// sensible amount.
meta[jss::delivered_amount] = Json::Value ("unavailable");