From ea64ee3e5898160e731891f7559aa731d16e1e18 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 5 Jun 2012 13:04:42 -0700 Subject: [PATCH] Implement doNicknameSet. --- src/TransactionEngine.cpp | 62 +++++++++++++++++++++++++++++++++++++-- src/TransactionEngine.h | 2 ++ 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/src/TransactionEngine.cpp b/src/TransactionEngine.cpp index 39691b3d3d..6a39913884 100644 --- a/src/TransactionEngine.cpp +++ b/src/TransactionEngine.cpp @@ -259,7 +259,7 @@ TransactionEngineResult TransactionEngine::setAuthorized(const SerializedTransac sleGen = boost::make_shared(ltGENERATOR_MAP); sleGen->setIndex(Ledger::getGeneratorIndex(hGeneratorID)); - sleGen->setIFieldH160(sfGeneratorID, hGeneratorID); +// sleGen->setIFieldH160(sfGeneratorID, hGeneratorID); sleGen->setIFieldVL(sfGenerator, vucCipher); accounts.push_back(std::make_pair(taaCREATE, sleGen)); @@ -548,7 +548,7 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran { nothing(); } - else if (saCost) + else if (saCost.isZero()) { uint32 a_seq = sleSrc->getIFieldU32(sfSequence); @@ -622,6 +622,10 @@ TransactionEngineResult TransactionEngine::applyTransaction(const SerializedTran result = doOffer(txn, accounts); break; + case ttNICKNAME_SET: + result = doNicknameSet(txn, accounts, srcAccountID); + break; + case ttPASSWORD_FUND: result = doPasswordFund(txn, accounts, srcAccountID); break; @@ -869,6 +873,60 @@ TransactionEngineResult TransactionEngine::doCreditSet(const SerializedTransacti return terResult; } +TransactionEngineResult TransactionEngine::doNicknameSet(const SerializedTransaction& txn, std::vector& accounts, const uint160& uSrcAccountID) +{ + std::cerr << "doNicknameSet>" << std::endl; + + SLE::pointer sleSrc = accounts[0].second; + + uint256 uNickname = txn.getITFieldH256(sfWalletLocator); + bool bMinOffer = txn.getITFieldPresent(sfMinimumOffer); + STAmount saMinOffer = bMinOffer ? txn.getITFieldAmount(sfAmount) : STAmount(); + + LedgerStateParms qry = lepNONE; + SLE::pointer sleNickname = mLedger->getNickname(qry, uNickname); + + if (sleNickname) + { + // Edit old entry. + sleNickname->setIFieldAccount(sfAccount, uSrcAccountID); + + if (bMinOffer && !saMinOffer.isZero()) + { + sleNickname->setIFieldAmount(sfMinimumOffer, saMinOffer); + } + else + { + sleNickname->makeIFieldAbsent(sfMinimumOffer); + } + + accounts.push_back(std::make_pair(taaCREATE, sleNickname)); + } + else + { + // Make a new entry. + // XXX Need to include authorization limiting. + + sleNickname = boost::make_shared(ltNICKNAME); + + sleNickname->setIndex(Ledger::getNicknameIndex(uNickname)); + std::cerr << "doNicknameSet: Creating nickname node: " << sleNickname->getIndex().ToString() << std::endl; + + sleNickname->setIFieldAccount(sfAccount, uSrcAccountID); + + if (bMinOffer && !saMinOffer.isZero()) + sleNickname->setIFieldAmount(sfMinimumOffer, saMinOffer); + +// sleNickname->setIFieldH256(sfNickname, uNickname); + + accounts.push_back(std::make_pair(taaCREATE, sleNickname)); + } + + std::cerr << "doNicknameSet<" << std::endl; + + return terSUCCESS; +} + TransactionEngineResult TransactionEngine::doPasswordFund(const SerializedTransaction& txn, std::vector& accounts, const uint160& uSrcAccountID) { std::cerr << "doPasswordFund>" << std::endl; diff --git a/src/TransactionEngine.h b/src/TransactionEngine.h index 75b79aca07..9d79ff37f9 100644 --- a/src/TransactionEngine.h +++ b/src/TransactionEngine.h @@ -108,6 +108,8 @@ protected: 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 doNicknameSet(const SerializedTransaction& txn, std::vector& accounts, + const uint160& uSrcAccountID); TransactionEngineResult doPasswordFund(const SerializedTransaction& txn, std::vector& accounts, const uint160& uSrcAccountID); TransactionEngineResult doPasswordSet(const SerializedTransaction& txn, std::vector& accounts);