Transactor for change/fee.

This commit is contained in:
JoelKatz
2013-04-16 11:16:52 -07:00
parent efb3c24518
commit 148b5b42a5
2 changed files with 95 additions and 0 deletions

View 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;
}

View 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