mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Transactor for change/fee.
This commit is contained in:
74
src/cpp/ripple/ChangeTransactor.cpp
Normal file
74
src/cpp/ripple/ChangeTransactor.cpp
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#include "ChangeTransactor.h"
|
||||||
|
|
||||||
|
TER ChangeTransactor::doApply()
|
||||||
|
{
|
||||||
|
if (mTxn.getTxnType() == ttFEATURE)
|
||||||
|
return applyFeature();
|
||||||
|
|
||||||
|
if (mTxn.getTxnType() == ttFEE)
|
||||||
|
return applyFee();
|
||||||
|
|
||||||
|
return temUNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
TER ChangeTransactor::checkSig()
|
||||||
|
{
|
||||||
|
if (mTxn.getFieldAccount160(sfAccount).isNonZero())
|
||||||
|
return temBAD_SRC_ACCOUNT;
|
||||||
|
|
||||||
|
if (!mTxn.getSigningPubKey().empty() || !mTxn.getSignature().empty())
|
||||||
|
return temBAD_SIGNATURE;
|
||||||
|
|
||||||
|
return tesSUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
TER ChangeTransactor::checkSeq()
|
||||||
|
{
|
||||||
|
if (mTxn.getSequence() != 0)
|
||||||
|
return temBAD_SEQUENCE;
|
||||||
|
|
||||||
|
return tesSUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
TER ChangeTransactor::payFee()
|
||||||
|
{
|
||||||
|
if (mTxn.getTransactionFee() != STAmount())
|
||||||
|
return temBAD_FEE;
|
||||||
|
|
||||||
|
return tesSUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
TER ChangeTransactor::applyFeature()
|
||||||
|
{
|
||||||
|
uint256 feature = mTxn.getFieldH256(sfFeature);
|
||||||
|
|
||||||
|
SLE::pointer featureObject = mEngine->entryCache(ltFEATURES, Ledger::getLedgerFeatureIndex());
|
||||||
|
if (!featureObject)
|
||||||
|
featureObject = mEngine->entryCreate(ltFEATURES, Ledger::getLedgerFeatureIndex());
|
||||||
|
|
||||||
|
STVector256 features = featureObject->getFieldV256(sfFeatures);
|
||||||
|
if (features.hasValue(feature))
|
||||||
|
return tefALREADY;
|
||||||
|
|
||||||
|
features.addValue(feature);
|
||||||
|
featureObject->setFieldV256(sfFeatures, features);
|
||||||
|
mEngine->entryModify(featureObject);
|
||||||
|
|
||||||
|
return tesSUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
TER ChangeTransactor::applyFee()
|
||||||
|
{
|
||||||
|
|
||||||
|
SLE::pointer feeObject = mEngine->entryCache(ltFEE_SETTINGS, Ledger::getLedgerFeeIndex());
|
||||||
|
if (!feeObject)
|
||||||
|
feeObject = mEngine->entryCreate(ltFEE_SETTINGS, Ledger::getLedgerFeeIndex());
|
||||||
|
|
||||||
|
feeObject->setFieldU64(sfBaseFee, mTxn.getFieldU64(sfBaseFee));
|
||||||
|
feeObject->setFieldU32(sfReferenceFeeUnits, mTxn.getFieldU32(sfReferenceFeeUnits));
|
||||||
|
feeObject->setFieldU32(sfReserveBase, mTxn.getFieldU32(sfReserveBase));
|
||||||
|
feeObject->setFieldU32(sfReserveIncrement, mTxn.getFieldU32(sfReserveIncrement));
|
||||||
|
|
||||||
|
mEngine->entryModify(feeObject);
|
||||||
|
return tesSUCCESS;
|
||||||
|
}
|
||||||
21
src/cpp/ripple/ChangeTransactor.h
Normal file
21
src/cpp/ripple/ChangeTransactor.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#include "Transactor.h"
|
||||||
|
|
||||||
|
class ChangeTransactor : public Transactor
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
TER applyFeature();
|
||||||
|
TER applyFee();
|
||||||
|
|
||||||
|
public:
|
||||||
|
ChangeTransactor(const SerializedTransaction& txn, TransactionEngineParams params, TransactionEngine *engine)
|
||||||
|
: Transactor(txn, params, engine)
|
||||||
|
{ ; }
|
||||||
|
|
||||||
|
TER doApply();
|
||||||
|
TER checkSig();
|
||||||
|
TER checkSeq();
|
||||||
|
TER payFee();
|
||||||
|
};
|
||||||
|
|
||||||
|
// vim:ts=4
|
||||||
Reference in New Issue
Block a user