Fix RPC ripple_line_set & TA credit_set to correctly handle issuer.

This commit is contained in:
Arthur Britto
2012-09-29 17:49:57 -07:00
parent de27b41277
commit 68ee1a4fa7
2 changed files with 8 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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)