mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-01 08:25:51 +00:00
Fee change bugfixes.
This commit is contained in:
@@ -54,9 +54,9 @@ Application::Application() :
|
|||||||
mSNTPClient(mAuxService), mJobQueue(mIOService), mFeeTrack(),
|
mSNTPClient(mAuxService), mJobQueue(mIOService), mFeeTrack(),
|
||||||
|
|
||||||
#ifdef RESERVE_BASE_100
|
#ifdef RESERVE_BASE_100
|
||||||
mFeeVote(10, 100, 25),
|
mFeeVote(10, 100 * SYSTEM_CURRENCY_PARTS, 25 * SYSTEM_CURRENCY_PARTS),
|
||||||
#else
|
#else
|
||||||
mFeeVote(10, 200, 50),
|
mFeeVote(10, 200 * SYSTEM_CURRENCY_PARTS, 50 * SYSTEM_CURRENCY_PARTS),
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mRpcDB(NULL), mTxnDB(NULL), mLedgerDB(NULL), mWalletDB(NULL),
|
mRpcDB(NULL), mTxnDB(NULL), mLedgerDB(NULL), mWalletDB(NULL),
|
||||||
|
|||||||
@@ -43,12 +43,6 @@ TER ChangeTransactor::checkSeq()
|
|||||||
|
|
||||||
TER ChangeTransactor::payFee()
|
TER ChangeTransactor::payFee()
|
||||||
{
|
{
|
||||||
if (isSetBit(mParams, tapOPEN_LEDGER))
|
|
||||||
{
|
|
||||||
cLog(lsWARNING) << "Change transaction against open ledger";
|
|
||||||
return temINVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mTxn.getTransactionFee() != STAmount())
|
if (mTxn.getTransactionFee() != STAmount())
|
||||||
{
|
{
|
||||||
cLog(lsWARNING) << "Change transaction with non-zero fee";
|
cLog(lsWARNING) << "Change transaction with non-zero fee";
|
||||||
@@ -58,6 +52,25 @@ TER ChangeTransactor::payFee()
|
|||||||
return tesSUCCESS;
|
return tesSUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TER ChangeTransactor::preCheck()
|
||||||
|
{
|
||||||
|
mTxnAccountID = mTxn.getSourceAccount().getAccountID();
|
||||||
|
if (mTxnAccountID.isNonZero())
|
||||||
|
{
|
||||||
|
cLog(lsWARNING) << "applyTransaction: bad source id";
|
||||||
|
|
||||||
|
return temBAD_SRC_ACCOUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSetBit(mParams, tapOPEN_LEDGER))
|
||||||
|
{
|
||||||
|
cLog(lsWARNING) << "Change transaction against open ledger";
|
||||||
|
return temINVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tesSUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
TER ChangeTransactor::applyFeature()
|
TER ChangeTransactor::applyFeature()
|
||||||
{
|
{
|
||||||
uint256 feature = mTxn.getFieldH256(sfFeature);
|
uint256 feature = mTxn.getFieldH256(sfFeature);
|
||||||
@@ -84,12 +97,16 @@ TER ChangeTransactor::applyFee()
|
|||||||
if (!feeObject)
|
if (!feeObject)
|
||||||
feeObject = mEngine->entryCreate(ltFEE_SETTINGS, Ledger::getLedgerFeeIndex());
|
feeObject = mEngine->entryCreate(ltFEE_SETTINGS, Ledger::getLedgerFeeIndex());
|
||||||
|
|
||||||
|
cLog(lsINFO) << "Previous fee object: " << feeObject->getJson(0);
|
||||||
|
|
||||||
feeObject->setFieldU64(sfBaseFee, mTxn.getFieldU64(sfBaseFee));
|
feeObject->setFieldU64(sfBaseFee, mTxn.getFieldU64(sfBaseFee));
|
||||||
feeObject->setFieldU32(sfReferenceFeeUnits, mTxn.getFieldU32(sfReferenceFeeUnits));
|
feeObject->setFieldU32(sfReferenceFeeUnits, mTxn.getFieldU32(sfReferenceFeeUnits));
|
||||||
feeObject->setFieldU32(sfReserveBase, mTxn.getFieldU32(sfReserveBase));
|
feeObject->setFieldU32(sfReserveBase, mTxn.getFieldU32(sfReserveBase));
|
||||||
feeObject->setFieldU32(sfReserveIncrement, mTxn.getFieldU32(sfReserveIncrement));
|
feeObject->setFieldU32(sfReserveIncrement, mTxn.getFieldU32(sfReserveIncrement));
|
||||||
|
|
||||||
mEngine->entryModify(feeObject);
|
mEngine->entryModify(feeObject);
|
||||||
|
|
||||||
|
cLog(lsINFO) << "New fee object: " << feeObject->getJson(0);
|
||||||
cLog(lsWARNING) << "Fees have been changed";
|
cLog(lsWARNING) << "Fees have been changed";
|
||||||
return tesSUCCESS;
|
return tesSUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ protected:
|
|||||||
TER applyFeature();
|
TER applyFeature();
|
||||||
TER applyFee();
|
TER applyFee();
|
||||||
|
|
||||||
|
bool mustHaveValidAccount() { return false; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ChangeTransactor(const SerializedTransaction& txn, TransactionEngineParams params, TransactionEngine *engine)
|
ChangeTransactor(const SerializedTransaction& txn, TransactionEngineParams params, TransactionEngine *engine)
|
||||||
: Transactor(txn, params, engine)
|
: Transactor(txn, params, engine)
|
||||||
@@ -16,6 +18,7 @@ public:
|
|||||||
TER checkSig();
|
TER checkSig();
|
||||||
TER checkSeq();
|
TER checkSeq();
|
||||||
TER payFee();
|
TER payFee();
|
||||||
|
TER preCheck();
|
||||||
};
|
};
|
||||||
|
|
||||||
// vim:ts=4
|
// vim:ts=4
|
||||||
|
|||||||
@@ -352,17 +352,16 @@ void FeeVote::doFeeVoting(Ledger::ref lastClosedLedger, SHAMap::ref initialPosit
|
|||||||
{
|
{
|
||||||
cLog(lsWARNING) << "We are voting for a fee change: " << baseFee << "/" << baseReserve << "/" << incReserve;
|
cLog(lsWARNING) << "We are voting for a fee change: " << baseFee << "/" << baseReserve << "/" << incReserve;
|
||||||
SerializedTransaction trans(ttFEE);
|
SerializedTransaction trans(ttFEE);
|
||||||
|
trans.setFieldAccount(sfAccount, uint160());
|
||||||
trans.setFieldU64(sfBaseFee, baseFee);
|
trans.setFieldU64(sfBaseFee, baseFee);
|
||||||
trans.setFieldU32(sfReferenceFeeUnits, 10);
|
trans.setFieldU32(sfReferenceFeeUnits, 10);
|
||||||
trans.setFieldU32(sfReserveBase, baseReserve);
|
trans.setFieldU32(sfReserveBase, baseReserve);
|
||||||
trans.setFieldU32(sfReserveIncrement, incReserve);
|
trans.setFieldU32(sfReserveIncrement, incReserve);
|
||||||
|
uint256 txID = trans.getTransactionID();
|
||||||
|
cLog(lsWARNING) << "Vote: " << txID;
|
||||||
|
|
||||||
Serializer s;
|
Serializer s;
|
||||||
s.add32(sHP_TransactionID);
|
|
||||||
trans.add(s, true);
|
trans.add(s, true);
|
||||||
uint256 txID = s.getSHA512Half();
|
|
||||||
cLog(lsWARNING) << "Vote: " << txID;
|
|
||||||
|
|
||||||
SHAMapItem::pointer tItem = boost::make_shared<SHAMapItem>(txID, s.peekData());
|
SHAMapItem::pointer tItem = boost::make_shared<SHAMapItem>(txID, s.peekData());
|
||||||
if (!initialPosition->addGiveItem(tItem, true, false))
|
if (!initialPosition->addGiveItem(tItem, true, false))
|
||||||
|
|||||||
@@ -319,7 +319,8 @@ void LedgerConsensus::takeInitialPosition(Ledger& initialLedger)
|
|||||||
{
|
{
|
||||||
SHAMap::pointer initialSet;
|
SHAMap::pointer initialSet;
|
||||||
|
|
||||||
if (mProposing && mHaveCorrectLCL && ((mPreviousLedger->getLedgerSeq() % 256) == 0))
|
if ((theConfig.RUN_STANDALONE || (mProposing && mHaveCorrectLCL))
|
||||||
|
&& ((mPreviousLedger->getLedgerSeq() % 256) == 0))
|
||||||
{ // previous ledger was flag ledger
|
{ // previous ledger was flag ledger
|
||||||
SHAMap::pointer preSet = initialLedger.peekTransactionMap()->snapShot(true);
|
SHAMap::pointer preSet = initialLedger.peekTransactionMap()->snapShot(true);
|
||||||
theApp->getFeeVote().doFeeVoting(mPreviousLedger, preSet);
|
theApp->getFeeVote().doFeeVoting(mPreviousLedger, preSet);
|
||||||
|
|||||||
@@ -203,12 +203,15 @@ TER Transactor::apply()
|
|||||||
// If are only forwarding, due to resource limitations, we might verifying only some transactions, this would be probabilistic.
|
// If are only forwarding, due to resource limitations, we might verifying only some transactions, this would be probabilistic.
|
||||||
|
|
||||||
if (!mTxnAccount)
|
if (!mTxnAccount)
|
||||||
|
{
|
||||||
|
if (mustHaveValidAccount())
|
||||||
{
|
{
|
||||||
cLog(lsTRACE) << boost::str(boost::format("applyTransaction: Delay transaction: source account does not exist: %s") %
|
cLog(lsTRACE) << boost::str(boost::format("applyTransaction: Delay transaction: source account does not exist: %s") %
|
||||||
mTxn.getSourceAccount().humanAccountID());
|
mTxn.getSourceAccount().humanAccountID());
|
||||||
|
|
||||||
return terNO_ACCOUNT;
|
return terNO_ACCOUNT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mPriorBalance = mTxnAccount->getFieldAmount(sfBalance);
|
mPriorBalance = mTxnAccount->getFieldAmount(sfBalance);
|
||||||
@@ -225,6 +228,7 @@ TER Transactor::apply()
|
|||||||
terResult = checkSig();
|
terResult = checkSig();
|
||||||
if (terResult != tesSUCCESS) return(terResult);
|
if (terResult != tesSUCCESS) return(terResult);
|
||||||
|
|
||||||
|
if (mTxnAccount)
|
||||||
mEngine->entryModify(mTxnAccount);
|
mEngine->entryModify(mTxnAccount);
|
||||||
|
|
||||||
return doApply();
|
return doApply();
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ protected:
|
|||||||
|
|
||||||
Transactor(const SerializedTransaction& txn, TransactionEngineParams params, TransactionEngine* engine);
|
Transactor(const SerializedTransaction& txn, TransactionEngineParams params, TransactionEngine* engine);
|
||||||
|
|
||||||
|
virtual bool mustHaveValidAccount() { return true; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef boost::shared_ptr<Transactor> pointer;
|
typedef boost::shared_ptr<Transactor> pointer;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user