From 3332bf474f96a75a630cf6b19a3fb1ea7570c3db Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 2 Jun 2012 14:24:32 -0700 Subject: [PATCH] Add support for AccountSet to TransactionEngine. --- src/TransactionEngine.cpp | 77 ++++++++++++++++++++++++++++++++++++++- src/TransactionEngine.h | 22 ++++++----- 2 files changed, 87 insertions(+), 12 deletions(-) diff --git a/src/TransactionEngine.cpp b/src/TransactionEngine.cpp index 62cd01c418..e8ae14ec53 100644 --- a/src/TransactionEngine.cpp +++ b/src/TransactionEngine.cpp @@ -297,12 +297,13 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran } break; + case ttACCOUNT_SET: + case ttCREDIT_SET: case ttINVOICE: case ttOFFER: - case ttCREDIT_SET: case ttTRANSIT_SET: case ttWALLET_ADD: - result = terSUCCESS; + nothing(); break; case ttINVALID: @@ -455,6 +456,10 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran switch(txn.getTxnType()) { + case ttACCOUNT_SET: + result = doAccountSet(txn, accounts); + break; + case ttCLAIM: result = doClaim(txn, accounts); break; @@ -527,6 +532,74 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran return result; } +TransactionEngineResult TransactionEngine::doAccountSet(const SerializedTransaction& txn, std::vector& accounts) +{ + std::cerr << "doAccountSet>" << std::endl; + + SLE::pointer sleSrc = accounts[0].second; + uint32 txFlags = txn.getFlags(); + + // + // EmailHash + // + + if (txFlags & tfUnsetEmailHash) + { + std::cerr << "doClaim: unset email hash" << std::endl; + + sleSrc->makeIFieldAbsent(sfEmailHash); + } + else if (txn.getITFieldPresent(sfEmailHash)) + { + std::cerr << "doClaim: set email hash" << std::endl; + + sleSrc->setIFieldH128(sfEmailHash, txn.getITFieldH128(sfEmailHash)); + } + + // + // WalletLocator + // + + if (txFlags & tfUnsetWalletLocator) + { + std::cerr << "doClaim: unset wallet locator" << std::endl; + + sleSrc->makeIFieldAbsent(sfWalletLocator); + } + else if (txn.getITFieldPresent(sfWalletLocator)) + { + std::cerr << "doClaim: set wallet locator" << std::endl; + + sleSrc->setIFieldH256(sfWalletLocator, txn.getITFieldH256(sfWalletLocator)); + } + + // + // MessageKey + // + + if (!txn.getITFieldPresent(sfMessageKey)) + { + nothing(); + + } + else if (sleSrc->getIFieldPresent(sfMessageKey)) + { + std::cerr << "doClaim: can not change message key" << std::endl; + + return tenMSG_SET; + } + else + { + std::cerr << "doClaim: set message key" << std::endl; + + sleSrc->setIFieldVL(sfMessageKey, txn.getITFieldVL(sfMessageKey)); + } + + std::cerr << "doAccountSet<" << std::endl; + + return terSUCCESS; +} + TransactionEngineResult TransactionEngine::doClaim(const SerializedTransaction& txn, std::vector& accounts) { diff --git a/src/TransactionEngine.h b/src/TransactionEngine.h index c7afa28753..aa1b23247e 100644 --- a/src/TransactionEngine.h +++ b/src/TransactionEngine.h @@ -25,6 +25,7 @@ enum TransactionEngineResult tenUNCLAIMED = -200, // Can not use an unclaimed account. tenBAD_AUTH, // Transaction's public key is not authorized. tenCREATED, // Can't add an already created account. + tenMSG_SET, // Can't change a message key. // Other tenFAILED = -100, // Something broke horribly @@ -93,18 +94,19 @@ private: protected: Ledger::pointer mLedger; - TransactionEngineResult doClaim(const SerializedTransaction&, std::vector&); - TransactionEngineResult doCreditSet(const SerializedTransaction&, std::vector&, + TransactionEngineResult doAccountSet(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doClaim(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doCreditSet(const SerializedTransaction& txn, std::vector& accounts, const uint160& srcAccountID); - TransactionEngineResult doDelete(const SerializedTransaction&, std::vector&); - TransactionEngineResult doInvoice(const SerializedTransaction&, std::vector&); - TransactionEngineResult doOffer(const SerializedTransaction&, std::vector&); - TransactionEngineResult doPayment(const SerializedTransaction&, std::vector&, + TransactionEngineResult doDelete(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doInvoice(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doOffer(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doPayment(const SerializedTransaction& txn, std::vector& accounts, const uint160& srcAccountID); - TransactionEngineResult doStore(const SerializedTransaction&, std::vector&); - TransactionEngineResult doTake(const SerializedTransaction&, std::vector&); - TransactionEngineResult doTransitSet(const SerializedTransaction&, std::vector&); - TransactionEngineResult doWalletAdd(const SerializedTransaction&, std::vector&); + TransactionEngineResult doStore(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doTake(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doTransitSet(const SerializedTransaction& txn, std::vector& accounts); + TransactionEngineResult doWalletAdd(const SerializedTransaction& txn, std::vector& accounts); public: TransactionEngine() { ; }