From 87844a60538c423c43eadb5a16ee15e1f43ade31 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 24 Feb 2013 14:18:07 -0800 Subject: [PATCH] Make Payment use new mPriorBalance. --- src/cpp/ripple/PaymentTransactor.cpp | 8 +++----- src/cpp/ripple/Transactor.cpp | 5 +++-- src/cpp/ripple/Transactor.h | 17 +++++++++-------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 0f72167c7..9af301117 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -190,24 +190,22 @@ TER PaymentTransactor::doApply() { // Direct XRP payment. - const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); const uint64 uReserve = mEngine->getLedger()->getReserve(uOwnerCount); - STAmount saPaid = mTxn.getTransactionFee(); // Make sure have enough reserve to send. Allow final spend to use reserve for fee. - if (saSrcXRPBalance + saPaid < saDstAmount + uReserve) // Reserve is not scaled by fee. + if (mPriorBalance < saDstAmount + uReserve) // Reserve is not scaled by fee. { // Vote no. However, transaction might succeed, if applied in a different order. cLog(lsINFO) << ""; cLog(lsINFO) << boost::str(boost::format("Payment: Delay transaction: Insufficient funds: %s / %s (%d)") - % saSrcXRPBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); + % mPriorBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); terResult = tecUNFUNDED_PAYMENT; } else { - mTxnAccount->setFieldAmount(sfBalance, saSrcXRPBalance - saDstAmount); + mTxnAccount->setFieldAmount(sfBalance, mSourceBalance - saDstAmount); sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount); // re-arm the password change fee if we can and need to diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index f3bd4e1a4..a95d4f398 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -202,8 +202,9 @@ TER Transactor::apply() } else { - mSourceBalance = mTxnAccount->getFieldAmount(sfBalance); - mHasAuthKey = mTxnAccount->isFieldPresent(sfRegularKey); + mPriorBalance = mTxnAccount->getFieldAmount(sfBalance); + mSourceBalance = mPriorBalance; + mHasAuthKey = mTxnAccount->isFieldPresent(sfRegularKey); } terResult = checkSeq(); diff --git a/src/cpp/ripple/Transactor.h b/src/cpp/ripple/Transactor.h index bce4c4e36..8a2d276d3 100644 --- a/src/cpp/ripple/Transactor.h +++ b/src/cpp/ripple/Transactor.h @@ -10,15 +10,16 @@ class Transactor { protected: const SerializedTransaction& mTxn; - TransactionEngine* mEngine; - TransactionEngineParams mParams; + TransactionEngine* mEngine; + TransactionEngineParams mParams; - uint160 mTxnAccountID; - STAmount mFeeDue; - STAmount mSourceBalance; - SLE::pointer mTxnAccount; - bool mHasAuthKey; - RippleAddress mSigningPubKey; + uint160 mTxnAccountID; + STAmount mFeeDue; + STAmount mPriorBalance; // Balance before fees. + STAmount mSourceBalance; // Balance after fees. + SLE::pointer mTxnAccount; + bool mHasAuthKey; + RippleAddress mSigningPubKey; TER preCheck(); TER checkSeq();