From dd44fd7908f3b2eddd02dea81a9c737f6aacaabe Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Sep 2012 14:40:35 -0700 Subject: [PATCH 1/5] Cosmetic --- src/WSDoor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/WSDoor.cpp b/src/WSDoor.cpp index 1092e8c03..208c5c71c 100644 --- a/src/WSDoor.cpp +++ b/src/WSDoor.cpp @@ -22,6 +22,9 @@ // This is a light weight, untrusted interface for web clients. // For now we don't provide proof. Later we will. // +// Might need to support this header for browsers: Access-Control-Allow-Origin: * +// - https://developer.mozilla.org/en-US/docs/HTTP_access_control +// // // Strategy: From 68ee1a4fa71636090d5956c5a387ceef0cfc7580 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Sep 2012 17:49:57 -0700 Subject: [PATCH 2/5] Fix RPC ripple_line_set & TA credit_set to correctly handle issuer. --- src/RPCServer.cpp | 2 +- src/TransactionAction.cpp | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 91bb578b4..5e2f78454 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -1562,7 +1562,7 @@ Json::Value RPCServer::doRippleLineSet(const Json::Value& params) { return RPCError(rpcDST_ACT_MALFORMED); } - else if (!saLimitAmount.setFullValue(params[3u].asString(), params.size() >= 5 ? params[4u].asString() : "")) + else if (!saLimitAmount.setFullValue(params[3u].asString(), params.size() >= 5 ? params[4u].asString() : "", params[1u].asString())) { return RPCError(rpcSRC_AMT_MALFORMED); } diff --git a/src/TransactionAction.cpp b/src/TransactionAction.cpp index 786ed762f..6a28a89eb 100644 --- a/src/TransactionAction.cpp +++ b/src/TransactionAction.cpp @@ -275,13 +275,16 @@ TER TransactionEngine::doCreditSet(const SerializedTransaction& txn) const uint160 uCurrencyID = saLimitAmount.getCurrency(); bool bDelIndex = false; - if (bLimitAmount && saLimitAmount.getIssuer() != mTxnAccountID) + if (bLimitAmount && saLimitAmount.getIssuer() != uDstAccountID) { - Log(lsINFO) << "doCreditSet: Malformed transaction: issuer must be signer"; + Log(lsINFO) << "doCreditSet: Malformed transaction: issuer must be destination account."; return temBAD_ISSUER; } + STAmount saLimitAllow = saLimitAmount; + saLimitAllow.setIssuer(mTxnAccountID); + SLE::pointer sleRippleState = entryCache(ltRIPPLE_STATE, Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID)); if (sleRippleState) { @@ -313,7 +316,7 @@ TER TransactionEngine::doCreditSet(const SerializedTransaction& txn) if (!bDelIndex) { if (bLimitAmount) - sleRippleState->setIFieldAmount(bFlipped ? sfHighLimit: sfLowLimit, saLimitAmount); + sleRippleState->setIFieldAmount(bFlipped ? sfHighLimit: sfLowLimit, saLimitAllow); if (!bQualityIn) { @@ -361,7 +364,7 @@ TER TransactionEngine::doCreditSet(const SerializedTransaction& txn) Log(lsINFO) << "doCreditSet: Creating ripple line: " << sleRippleState->getIndex().ToString(); sleRippleState->setIFieldAmount(sfBalance, STAmount(uCurrencyID, ACCOUNT_ONE)); // Zero balance in currency. - sleRippleState->setIFieldAmount(bFlipped ? sfHighLimit : sfLowLimit, saLimitAmount); + sleRippleState->setIFieldAmount(bFlipped ? sfHighLimit : sfLowLimit, saLimitAllow); sleRippleState->setIFieldAmount(bFlipped ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uDstAccountID)); if (uQualityIn) From ed94c2f4a8f47607ab84ddefde2d2a98e648ac26 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Sep 2012 17:58:07 -0700 Subject: [PATCH 3/5] Really fix RPC ripple_line_set. --- src/RPCServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 5e2f78454..ba6415daf 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -1562,7 +1562,7 @@ Json::Value RPCServer::doRippleLineSet(const Json::Value& params) { return RPCError(rpcDST_ACT_MALFORMED); } - else if (!saLimitAmount.setFullValue(params[3u].asString(), params.size() >= 5 ? params[4u].asString() : "", params[1u].asString())) + else if (!saLimitAmount.setFullValue(params[3u].asString(), params.size() >= 5 ? params[4u].asString() : "", params[2u].asString())) { return RPCError(rpcSRC_AMT_MALFORMED); } From 22873ff73de6d81a7e1118c7df4a94fc1e12fb22 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Sep 2012 18:28:05 -0700 Subject: [PATCH 4/5] Remove destination field from credit_set transaction. --- src/RPCServer.cpp | 4 +--- src/RippleCalc.cpp | 2 +- src/Transaction.cpp | 13 +++---------- src/Transaction.h | 4 ---- src/TransactionAction.cpp | 31 +++++++++++-------------------- src/TransactionFormats.cpp | 9 ++++----- 6 files changed, 20 insertions(+), 43 deletions(-) diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index ba6415daf..ffa8d0d43 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -1544,7 +1544,6 @@ Json::Value RPCServer::doRippleLineSet(const Json::Value& params) NewcoinAddress naSrcAccountID; NewcoinAddress naDstAccountID; STAmount saLimitAmount; - bool bLimitAmount = true; bool bQualityIn = params.size() >= 6; bool bQualityOut = params.size() >= 7; uint32 uQualityIn = 0; @@ -1593,8 +1592,7 @@ Json::Value RPCServer::doRippleLineSet(const Json::Value& params) asSrc->getSeq(), theConfig.FEE_DEFAULT, 0, // YYY No source tag - naDstAccountID, - bLimitAmount, saLimitAmount, + saLimitAmount, bQualityIn, uQualityIn, bQualityOut, uQualityOut); diff --git a/src/RippleCalc.cpp b/src/RippleCalc.cpp index 7b88303bc..3a1b1cc2f 100644 --- a/src/RippleCalc.cpp +++ b/src/RippleCalc.cpp @@ -744,7 +744,7 @@ void RippleCalc::calcNodeRipple( { const uint160 uCurrencyID = saCur.getCurrency(); const uint160 uCurIssuerID = saCur.getIssuer(); - const uint160 uPrvIssuerID = saPrv.getIssuer(); + // const uint160 uPrvIssuerID = saPrv.getIssuer(); STAmount saCurIn = STAmount::divide(STAmount::multiply(saCur, uQualityOut, uCurrencyID, uCurIssuerID), uQualityIn, uCurrencyID, uCurIssuerID); diff --git a/src/Transaction.cpp b/src/Transaction.cpp index 526f433bf..c6488cb8a 100644 --- a/src/Transaction.cpp +++ b/src/Transaction.cpp @@ -256,18 +256,13 @@ Transaction::pointer Transaction::sharedCreate( Transaction::pointer Transaction::setCreditSet( const NewcoinAddress& naPrivateKey, - const NewcoinAddress& naDstAccountID, - bool bLimitAmount, const STAmount& saLimitAmount, bool bQualityIn, uint32 uQualityIn, bool bQualityOut, uint32 uQualityOut) { - mTransaction->setITFieldAccount(sfDestination, naDstAccountID); - - if (bLimitAmount) - mTransaction->setITFieldAmount(sfLimitAmount, saLimitAmount); + mTransaction->setITFieldAmount(sfLimitAmount, saLimitAmount); if (bQualityIn) mTransaction->setITFieldU32(sfQualityIn, uQualityIn); @@ -286,8 +281,6 @@ Transaction::pointer Transaction::sharedCreditSet( uint32 uSeq, const STAmount& saFee, uint32 uSourceTag, - const NewcoinAddress& naDstAccountID, - bool bLimitAmount, const STAmount& saLimitAmount, bool bQualityIn, uint32 uQualityIn, @@ -296,8 +289,8 @@ Transaction::pointer Transaction::sharedCreditSet( { pointer tResult = boost::make_shared(ttCREDIT_SET, naPublicKey, naSourceAccount, uSeq, saFee, uSourceTag); - return tResult->setCreditSet(naPrivateKey, naDstAccountID, - bLimitAmount, saLimitAmount, + return tResult->setCreditSet(naPrivateKey, + saLimitAmount, bQualityIn, uQualityIn, bQualityOut, uQualityOut); } diff --git a/src/Transaction.h b/src/Transaction.h index abe612853..d8dc7fa7c 100644 --- a/src/Transaction.h +++ b/src/Transaction.h @@ -74,8 +74,6 @@ private: Transaction::pointer setCreditSet( const NewcoinAddress& naPrivateKey, - const NewcoinAddress& naDstAccountID, - bool bLimitAmount, const STAmount& saLimitAmount, bool bQualityIn, uint32 uQualityIn, @@ -185,8 +183,6 @@ public: uint32 uSeq, const STAmount& saFee, uint32 uSourceTag, - const NewcoinAddress& naDstAccountID, - bool bLimitAmount, const STAmount& saLimitAmount, bool bQualityIn, uint32 uQualityIn, diff --git a/src/TransactionAction.cpp b/src/TransactionAction.cpp index 6a28a89eb..9c4cf6a1d 100644 --- a/src/TransactionAction.cpp +++ b/src/TransactionAction.cpp @@ -241,8 +241,17 @@ TER TransactionEngine::doCreditSet(const SerializedTransaction& txn) TER terResult = tesSUCCESS; Log(lsINFO) << "doCreditSet>"; + const STAmount saLimitAmount = txn.getITFieldAmount(sfLimitAmount); + const bool bQualityIn = txn.getITFieldPresent(sfQualityIn); + const uint32 uQualityIn = bQualityIn ? txn.getITFieldU32(sfQualityIn) : 0; + const bool bQualityOut = txn.getITFieldPresent(sfQualityOut); + const uint32 uQualityOut = bQualityIn ? txn.getITFieldU32(sfQualityOut) : 0; + const uint160 uCurrencyID = saLimitAmount.getCurrency(); + uint160 uDstAccountID = saLimitAmount.getIssuer(); + const bool bFlipped = mTxnAccountID > uDstAccountID; // true, iff current is not lowest. + bool bDelIndex = false; + // Check if destination makes sense. - uint160 uDstAccountID = txn.getITFieldAccount(sfDestination); if (!uDstAccountID) { @@ -265,23 +274,6 @@ TER TransactionEngine::doCreditSet(const SerializedTransaction& txn) return terNO_DST; } - const bool bFlipped = mTxnAccountID > uDstAccountID; // true, iff current is not lowest. - const bool bLimitAmount = txn.getITFieldPresent(sfLimitAmount); - const STAmount saLimitAmount = bLimitAmount ? txn.getITFieldAmount(sfLimitAmount) : STAmount(); - const bool bQualityIn = txn.getITFieldPresent(sfQualityIn); - const uint32 uQualityIn = bQualityIn ? txn.getITFieldU32(sfQualityIn) : 0; - const bool bQualityOut = txn.getITFieldPresent(sfQualityOut); - const uint32 uQualityOut = bQualityIn ? txn.getITFieldU32(sfQualityOut) : 0; - const uint160 uCurrencyID = saLimitAmount.getCurrency(); - bool bDelIndex = false; - - if (bLimitAmount && saLimitAmount.getIssuer() != uDstAccountID) - { - Log(lsINFO) << "doCreditSet: Malformed transaction: issuer must be destination account."; - - return temBAD_ISSUER; - } - STAmount saLimitAllow = saLimitAmount; saLimitAllow.setIssuer(mTxnAccountID); @@ -315,8 +307,7 @@ TER TransactionEngine::doCreditSet(const SerializedTransaction& txn) if (!bDelIndex) { - if (bLimitAmount) - sleRippleState->setIFieldAmount(bFlipped ? sfHighLimit: sfLowLimit, saLimitAllow); + sleRippleState->setIFieldAmount(bFlipped ? sfHighLimit: sfLowLimit, saLimitAllow); if (!bQualityIn) { diff --git a/src/TransactionFormats.cpp b/src/TransactionFormats.cpp index 3ab00f7de..a66f36d41 100644 --- a/src/TransactionFormats.cpp +++ b/src/TransactionFormats.cpp @@ -27,11 +27,10 @@ TransactionFormat InnerTxnFormats[]= }, { "CreditSet", ttCREDIT_SET, { { S_FIELD(Flags), STI_UINT32, SOE_FLAGS, 0 }, - { S_FIELD(Destination), STI_ACCOUNT, SOE_REQUIRED, 0 }, - { S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 1 }, - { S_FIELD(LimitAmount), STI_AMOUNT, SOE_IFFLAG, 2 }, - { S_FIELD(QualityIn), STI_UINT32, SOE_IFFLAG, 4 }, - { S_FIELD(QualityOut), STI_UINT32, SOE_IFFLAG, 8 }, + { S_FIELD(LimitAmount), STI_AMOUNT, SOE_REQUIRED, 0 }, + { S_FIELD(QualityIn), STI_UINT32, SOE_IFFLAG, 1 }, + { S_FIELD(QualityOut), STI_UINT32, SOE_IFFLAG, 2 }, + { S_FIELD(SourceTag), STI_UINT32, SOE_IFFLAG, 4 }, { sfInvalid, NULL, STI_DONE, SOE_NEVER, -1 } } }, /* From 9496050bdf55d69369d3c8238f14e0a370f61ce5 Mon Sep 17 00:00:00 2001 From: MJK Date: Sat, 29 Sep 2012 18:29:02 -0700 Subject: [PATCH 5/5] Towards pathfinder() changes --- src/RPCServer.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index ba6415daf..17c2b4b6b 100644 --- a/src/RPCServer.cpp +++ b/src/RPCServer.cpp @@ -1779,17 +1779,17 @@ Json::Value RPCServer::doSend(const Json::Value& params) // Destination exists, ordinary send. STPathSet spsPaths; - /* uint160 srcCurrencyID; - bool ret_b; - ret_b = false; - STAmount::currencyFromString(srcCurrencyID, sSrcCurrency); + bool ret_b; + ret_b = false; - Pathfinder pf(naSrcAccountID, naDstAccountID, srcCurrencyID, saDstAmount); - - ret_b = pf.findPaths(5, 1, spsPaths); - // TODO: Nope; the above can't be right - */ + if (!saSrcAmountMax.isNative() || !saDstAmount.isNative()) + { + STAmount::currencyFromString(srcCurrencyID, sSrcCurrency); + Pathfinder pf(naSrcAccountID, naDstAccountID, srcCurrencyID, saDstAmount); + ret_b = pf.findPaths(5, 1, spsPaths); + } + trans = Transaction::sharedPayment( naAccountPublic, naAccountPrivate, naSrcAccountID,