diff --git a/src/RPCServer.cpp b/src/RPCServer.cpp index 91bb578b4b..5e2f78454b 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 786ed762f3..6a28a89ebc 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)