Add owner_funds to client subscription data (RIPD-377)

Conflicts:
	src/ripple/module/app/ledger/AcceptedLedger.cpp
This commit is contained in:
Miguel Portilla
2014-07-21 13:09:33 -04:00
committed by Vinnie Falco
parent 6e934ee6a1
commit ce2cecf046
5 changed files with 47 additions and 18 deletions

View File

@@ -111,6 +111,7 @@ JSS ( none );
JSS ( no_ripple );
JSS ( no_ripple_peer );
JSS ( offers );
JSS ( owner_funds );
JSS ( params );
JSS ( parent_hash );
JSS ( peer );

View File

@@ -34,8 +34,7 @@ AcceptedLedger::AcceptedLedger (Ledger::ref ledger) : mLedger (ledger)
item = txSet.peekNextItem (item->getTag ()))
{
SerializerIterator sit (item->peekSerializer ());
insert (std::make_shared<AcceptedLedgerTx> (
ledger->getLedgerSeq (), sit));
insert (std::make_shared<AcceptedLedgerTx> (ledger, std::ref (sit)));
}
}

View File

@@ -19,28 +19,38 @@
namespace ripple {
AcceptedLedgerTx::AcceptedLedgerTx (std::uint32_t seq, SerializerIterator& sit)
AcceptedLedgerTx::AcceptedLedgerTx (Ledger::ref ledger, SerializerIterator& sit)
: mLedger (ledger)
{
Serializer txnSer (sit.getVL ());
SerializerIterator txnIt (txnSer);
mTxn = std::make_shared<SerializedTransaction> (std::ref (txnIt));
mRawMeta = sit.getVL ();
mMeta = std::make_shared<TransactionMetaSet> (mTxn->getTransactionID (), seq, mRawMeta);
mMeta = std::make_shared<TransactionMetaSet> (mTxn->getTransactionID (),
ledger->getLedgerSeq (), mRawMeta);
mAffected = mMeta->getAffectedAccounts ();
mResult = mMeta->getResultTER ();
buildJson ();
}
AcceptedLedgerTx::AcceptedLedgerTx (SerializedTransaction::ref txn, TransactionMetaSet::ref met) :
mTxn (txn), mMeta (met), mAffected (met->getAffectedAccounts ())
AcceptedLedgerTx::AcceptedLedgerTx (Ledger::ref ledger,
SerializedTransaction::ref txn, TransactionMetaSet::ref met)
: mLedger (ledger)
, mTxn (txn)
, mMeta (met)
, mAffected (met->getAffectedAccounts ())
{
mResult = mMeta->getResultTER ();
buildJson ();
}
AcceptedLedgerTx::AcceptedLedgerTx (SerializedTransaction::ref txn, TER result) :
mTxn (txn), mResult (result), mAffected (txn->getMentionedAccounts ())
AcceptedLedgerTx::AcceptedLedgerTx (Ledger::ref ledger,
SerializedTransaction::ref txn, TER result)
: mLedger (ledger)
, mTxn (txn)
, mResult (result)
, mAffected (txn->getMentionedAccounts ())
{
buildJson ();
}
@@ -71,6 +81,21 @@ void AcceptedLedgerTx::buildJson ()
{
affected.append (ra.humanAccountID ());
}
}
if (mTxn->getTxnType () == ttOFFER_CREATE)
{
auto const account (mTxn->getSourceAccount ().getAccountID ());
auto const amount (mTxn->getFieldAmount (sfTakerGets));
// If the offer create is not self funded then add the owner balance
if (account != amount.issue ().account)
{
LedgerEntrySet les (mLedger, tapNONE, true);
auto const ownerFunds (les.accountFunds (account, amount, fhIGNORE_FREEZE));
mJson[jss::owner_funds] = ownerFunds.getText ();
}
}
}

View File

@@ -48,9 +48,10 @@ public:
typedef const pointer& ref;
public:
AcceptedLedgerTx (LedgerIndex ledgerSeq, SerializerIterator& sit);
AcceptedLedgerTx (SerializedTransaction::ref, TransactionMetaSet::ref);
AcceptedLedgerTx (SerializedTransaction::ref, TER result);
AcceptedLedgerTx (Ledger::ref ledger, SerializerIterator& sit);
AcceptedLedgerTx (Ledger::ref ledger, SerializedTransaction::ref,
TransactionMetaSet::ref);
AcceptedLedgerTx (Ledger::ref ledger, SerializedTransaction::ref, TER result);
SerializedTransaction::ref getTxn () const
{
@@ -97,6 +98,7 @@ public:
}
private:
Ledger::pointer mLedger;
SerializedTransaction::pointer mTxn;
TransactionMetaSet::pointer mMeta;
TER mResult;

View File

@@ -2546,7 +2546,7 @@ void NetworkOPsImp::pubProposedTransaction (
}
}
}
AcceptedLedgerTx alt (stTxn, terResult);
AcceptedLedgerTx alt (lpCurrent, stTxn, terResult);
m_journal.trace << "pubProposed: " << alt.getJson ();
pubAccountTransaction (lpCurrent, alt, false);
}
@@ -3133,6 +3133,7 @@ void NetworkOPsImp::getBookPage (
auto const& saTakerPays =
sleOffer->getFieldAmount (sfTakerPays);
STAmount saOwnerFunds;
bool firstOwnerOffer (true);
if (book.out.account == uOfferOwnerID)
{
@@ -3154,6 +3155,7 @@ void NetworkOPsImp::getBookPage (
// Found in running balance table.
saOwnerFunds = umBalanceEntry->second;
firstOwnerOffer = false;
}
else
{
@@ -3227,12 +3229,12 @@ void NetworkOPsImp::getBookPage (
umBalance[uOfferOwnerID] = saOwnerFunds - saOwnerPays;
if (saOwnerFunds != zero || uOfferOwnerID == uTakerID)
{
// Only provide funded offers and offers of the taker.
Json::Value& jvOf = jvOffers.append (jvOffer);
jvOf[jss::quality] = saDirRate.getText ();
}
// Include all offers funded and unfunded
Json::Value& jvOf = jvOffers.append (jvOffer);
jvOf[jss::quality] = saDirRate.getText ();
if (firstOwnerOffer)
jvOf[jss::owner_funds] = saOwnerFunds.getText ();
}
else
{