mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Modify RPC and transactions to use quality flags for ripple.
This commit is contained in:
@@ -1316,15 +1316,15 @@ Json::Value RPCServer::doPeers(const Json::Value& params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ripple <regular_seed> <paying_account>
|
// ripple <regular_seed> <paying_account>
|
||||||
// <source_max> <source_currency> [<source_issuerID>] // XXX [noredeem] [noissue]
|
// <source_max> <source_currency> [<source_issuerID>]
|
||||||
// <path>+
|
// <path>+
|
||||||
// full|partial <dest_account> <dest_amount> <dest_currency> [<dest_issuerID>]
|
// full|partial limit|average <dest_account> <dest_amount> <dest_currency> [<dest_issuerID>]
|
||||||
//
|
//
|
||||||
// path:
|
// path:
|
||||||
// path <path_element>+
|
// path <path_element>+
|
||||||
//
|
//
|
||||||
// path_element:
|
// path_element:
|
||||||
// account <accountID> [<currency>] [<issuerID>] [noredeem] [noissue]
|
// account <accountID> [<currency>] [<issuerID>]
|
||||||
// offer <currency> [<issuerID>]
|
// offer <currency> [<issuerID>]
|
||||||
Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
||||||
{
|
{
|
||||||
@@ -1333,10 +1333,10 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
|||||||
uint160 uSrcCurrencyID;
|
uint160 uSrcCurrencyID;
|
||||||
NewcoinAddress naSrcAccountID;
|
NewcoinAddress naSrcAccountID;
|
||||||
NewcoinAddress naSrcIssuerID;
|
NewcoinAddress naSrcIssuerID;
|
||||||
bool bSrcRedeem = true;
|
|
||||||
bool bSrcIssue = true;
|
|
||||||
bool bPartial;
|
bool bPartial;
|
||||||
bool bFull;
|
bool bFull;
|
||||||
|
bool bLimit;
|
||||||
|
bool bAverage;
|
||||||
NewcoinAddress naDstAccountID;
|
NewcoinAddress naDstAccountID;
|
||||||
STAmount saDstAmount;
|
STAmount saDstAmount;
|
||||||
uint160 uDstCurrencyID;
|
uint160 uDstCurrencyID;
|
||||||
@@ -1366,18 +1366,6 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
|||||||
|
|
||||||
int iArg = 4 + naSrcIssuerID.isValid();
|
int iArg = 4 + naSrcIssuerID.isValid();
|
||||||
|
|
||||||
if (params[iArg].asString() == "noredeem") // [noredeem]
|
|
||||||
{
|
|
||||||
++iArg;
|
|
||||||
bSrcRedeem = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params[iArg].asString() == "noissue") // [noissue]
|
|
||||||
{
|
|
||||||
++iArg;
|
|
||||||
bSrcIssue = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX bSrcRedeem & bSrcIssue not used.
|
// XXX bSrcRedeem & bSrcIssue not used.
|
||||||
STPath spPath;
|
STPath spPath;
|
||||||
|
|
||||||
@@ -1417,8 +1405,6 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
|||||||
NewcoinAddress naAccountID;
|
NewcoinAddress naAccountID;
|
||||||
uint160 uCurrencyID;
|
uint160 uCurrencyID;
|
||||||
NewcoinAddress naIssuerID;
|
NewcoinAddress naIssuerID;
|
||||||
bool bRedeem = true;
|
|
||||||
bool bIssue = true;
|
|
||||||
|
|
||||||
++iArg;
|
++iArg;
|
||||||
|
|
||||||
@@ -1437,24 +1423,10 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
|||||||
++iArg;
|
++iArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.size() != iArg && params[iArg].asString() == "noredeem") // [noredeem]
|
|
||||||
{
|
|
||||||
++iArg;
|
|
||||||
bRedeem = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.size() != iArg && params[iArg].asString() == "noissue") // [noissue]
|
|
||||||
{
|
|
||||||
++iArg;
|
|
||||||
bIssue = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
spPath.addElement(STPathElement(
|
spPath.addElement(STPathElement(
|
||||||
naAccountID.getAccountID(),
|
naAccountID.getAccountID(),
|
||||||
uCurrencyID,
|
uCurrencyID,
|
||||||
naIssuerID.isValid() ? naIssuerID.getAccountID() : uint160(0),
|
naIssuerID.isValid() ? naIssuerID.getAccountID() : uint160(0)));
|
||||||
bRedeem,
|
|
||||||
bIssue));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1486,6 +1458,19 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
|||||||
++iArg;
|
++iArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// limit|average
|
||||||
|
bLimit = params.size() != iArg ? params[iArg].asString() == "limit" : false;
|
||||||
|
bAverage = params.size() != iArg ? params[iArg].asString() == "average" : false;
|
||||||
|
|
||||||
|
if (!bPartial && !bFull)
|
||||||
|
{
|
||||||
|
return RPCError(rpcINVALID_PARAMS);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++iArg;
|
||||||
|
}
|
||||||
|
|
||||||
if (params.size() != iArg && !naDstAccountID.setAccountID(params[iArg++].asString())) // <dest_account>
|
if (params.size() != iArg && !naDstAccountID.setAccountID(params[iArg++].asString())) // <dest_account>
|
||||||
{
|
{
|
||||||
return RPCError(rpcDST_ACT_MALFORMED);
|
return RPCError(rpcDST_ACT_MALFORMED);
|
||||||
@@ -1543,7 +1528,9 @@ Json::Value RPCServer::doRipple(const Json::Value ¶ms)
|
|||||||
naDstAccountID,
|
naDstAccountID,
|
||||||
saDstAmount,
|
saDstAmount,
|
||||||
saSrcAmountMax,
|
saSrcAmountMax,
|
||||||
spsPaths);
|
spsPaths,
|
||||||
|
bPartial,
|
||||||
|
bLimit);
|
||||||
|
|
||||||
trans = mNetOps->submitTransaction(trans);
|
trans = mNetOps->submitTransaction(trans);
|
||||||
|
|
||||||
@@ -2564,7 +2551,7 @@ Json::Value RPCServer::doCommand(const std::string& command, Json::Value& params
|
|||||||
{ "password_fund", &RPCServer::doPasswordFund, 2, 3, false, optCurrent },
|
{ "password_fund", &RPCServer::doPasswordFund, 2, 3, false, optCurrent },
|
||||||
{ "password_set", &RPCServer::doPasswordSet, 2, 3, false, optNetwork },
|
{ "password_set", &RPCServer::doPasswordSet, 2, 3, false, optNetwork },
|
||||||
{ "peers", &RPCServer::doPeers, 0, 0, true },
|
{ "peers", &RPCServer::doPeers, 0, 0, true },
|
||||||
{ "ripple", &RPCServer::doRipple, 8, -1, false, optCurrent|optClosed },
|
{ "ripple", &RPCServer::doRipple, 9, -1, false, optCurrent|optClosed },
|
||||||
{ "ripple_lines_get", &RPCServer::doRippleLinesGet, 1, 2, false, optCurrent },
|
{ "ripple_lines_get", &RPCServer::doRippleLinesGet, 1, 2, false, optCurrent },
|
||||||
{ "ripple_line_set", &RPCServer::doRippleLineSet, 4, 7, false, optCurrent },
|
{ "ripple_line_set", &RPCServer::doRippleLineSet, 4, 7, false, optCurrent },
|
||||||
{ "send", &RPCServer::doSend, 3, 9, false, optCurrent },
|
{ "send", &RPCServer::doSend, 3, 9, false, optCurrent },
|
||||||
|
|||||||
@@ -332,8 +332,6 @@ STPathSet* STPathSet::construct(SerializerIterator& s, const char *name)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
const bool bAccount = !!(iType & STPathElement::typeAccount);
|
const bool bAccount = !!(iType & STPathElement::typeAccount);
|
||||||
const bool bRedeem = !!(iType & STPathElement::typeRedeem);
|
|
||||||
const bool bIssue = !!(iType & STPathElement::typeIssue);
|
|
||||||
const bool bCurrency = !!(iType & STPathElement::typeCurrency);
|
const bool bCurrency = !!(iType & STPathElement::typeCurrency);
|
||||||
const bool bIssuer = !!(iType & STPathElement::typeIssuer);
|
const bool bIssuer = !!(iType & STPathElement::typeIssuer);
|
||||||
|
|
||||||
@@ -350,7 +348,7 @@ STPathSet* STPathSet::construct(SerializerIterator& s, const char *name)
|
|||||||
if (bIssuer)
|
if (bIssuer)
|
||||||
uIssuerID = s.get160();
|
uIssuerID = s.get160();
|
||||||
|
|
||||||
path.push_back(STPathElement(uAccountID, uCurrency, uIssuerID, bRedeem, bIssue));
|
path.push_back(STPathElement(uAccountID, uCurrency, uIssuerID));
|
||||||
}
|
}
|
||||||
} while(1);
|
} while(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -564,15 +564,13 @@ protected:
|
|||||||
uint160 mIssuerID;
|
uint160 mIssuerID;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
STPathElement(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bRedeem=false, bool bIssue=false)
|
STPathElement(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID)
|
||||||
: mAccountID(uAccountID), mCurrencyID(uCurrencyID), mIssuerID(uIssuerID)
|
: mAccountID(uAccountID), mCurrencyID(uCurrencyID), mIssuerID(uIssuerID)
|
||||||
{
|
{
|
||||||
mType =
|
mType =
|
||||||
(uAccountID.isZero() ? 0 : STPathElement::typeAccount)
|
(uAccountID.isZero() ? 0 : STPathElement::typeAccount)
|
||||||
| (uCurrencyID.isZero() ? 0 : STPathElement::typeCurrency)
|
| (uCurrencyID.isZero() ? 0 : STPathElement::typeCurrency)
|
||||||
| (uIssuerID.isZero() ? 0 : STPathElement::typeIssuer)
|
| (uIssuerID.isZero() ? 0 : STPathElement::typeIssuer);
|
||||||
| (bRedeem ? STPathElement::typeRedeem : 0)
|
|
||||||
| (bIssue ? STPathElement::typeIssue : 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int getNodeType() const { return mType; }
|
int getNodeType() const { return mType; }
|
||||||
|
|||||||
@@ -489,7 +489,9 @@ Transaction::pointer Transaction::setPayment(
|
|||||||
const NewcoinAddress& naDstAccountID,
|
const NewcoinAddress& naDstAccountID,
|
||||||
const STAmount& saAmount,
|
const STAmount& saAmount,
|
||||||
const STAmount& saSendMax,
|
const STAmount& saSendMax,
|
||||||
const STPathSet& spsPaths)
|
const STPathSet& spsPaths,
|
||||||
|
const bool bPartial,
|
||||||
|
const bool bLimit)
|
||||||
{
|
{
|
||||||
mTransaction->setITFieldAccount(sfDestination, naDstAccountID);
|
mTransaction->setITFieldAccount(sfDestination, naDstAccountID);
|
||||||
mTransaction->setITFieldAmount(sfAmount, saAmount);
|
mTransaction->setITFieldAmount(sfAmount, saAmount);
|
||||||
@@ -518,11 +520,13 @@ Transaction::pointer Transaction::sharedPayment(
|
|||||||
const NewcoinAddress& naDstAccountID,
|
const NewcoinAddress& naDstAccountID,
|
||||||
const STAmount& saAmount,
|
const STAmount& saAmount,
|
||||||
const STAmount& saSendMax,
|
const STAmount& saSendMax,
|
||||||
const STPathSet& spsPaths)
|
const STPathSet& spsPaths,
|
||||||
|
const bool bPartial,
|
||||||
|
const bool bLimit)
|
||||||
{
|
{
|
||||||
pointer tResult = boost::make_shared<Transaction>(ttPAYMENT, naPublicKey, naSourceAccount, uSeq, saFee, uSourceTag);
|
pointer tResult = boost::make_shared<Transaction>(ttPAYMENT, naPublicKey, naSourceAccount, uSeq, saFee, uSourceTag);
|
||||||
|
|
||||||
return tResult->setPayment(naPrivateKey, naDstAccountID, saAmount, saSendMax, spsPaths);
|
return tResult->setPayment(naPrivateKey, naDstAccountID, saAmount, saSendMax, spsPaths, bPartial, bLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -116,7 +116,9 @@ private:
|
|||||||
const NewcoinAddress& naDstAccountID,
|
const NewcoinAddress& naDstAccountID,
|
||||||
const STAmount& saAmount,
|
const STAmount& saAmount,
|
||||||
const STAmount& saSendMax,
|
const STAmount& saSendMax,
|
||||||
const STPathSet& spsPaths);
|
const STPathSet& spsPaths,
|
||||||
|
const bool bPartial,
|
||||||
|
const bool bLimit);
|
||||||
|
|
||||||
Transaction::pointer setWalletAdd(
|
Transaction::pointer setWalletAdd(
|
||||||
const NewcoinAddress& naPrivateKey,
|
const NewcoinAddress& naPrivateKey,
|
||||||
@@ -231,7 +233,9 @@ public:
|
|||||||
const NewcoinAddress& naDstAccountID,
|
const NewcoinAddress& naDstAccountID,
|
||||||
const STAmount& saAmount,
|
const STAmount& saAmount,
|
||||||
const STAmount& saSendMax,
|
const STAmount& saSendMax,
|
||||||
const STPathSet& spsPaths);
|
const STPathSet& spsPaths,
|
||||||
|
const bool bPartial = false,
|
||||||
|
const bool bLimit = false);
|
||||||
|
|
||||||
// Place an offer.
|
// Place an offer.
|
||||||
static Transaction::pointer sharedOfferCreate(
|
static Transaction::pointer sharedOfferCreate(
|
||||||
|
|||||||
@@ -2770,11 +2770,12 @@ TER TransactionEngine::calcNodeAccountRev(const unsigned int uIndex, const PathS
|
|||||||
return terResult;
|
return terResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The previous node: specifies what to push through to current.
|
// Perfrom balance adjustments between previous and current node.
|
||||||
|
// - The previous node: specifies what to push through to current.
|
||||||
// - All of previous output is consumed.
|
// - All of previous output is consumed.
|
||||||
// The current node: specify what to push through to next.
|
// Then, compute output for next node.
|
||||||
// - Output to next node minus fees.
|
// - Current node: specify what to push through to next.
|
||||||
// Perform balance adjustment with previous.
|
// - Output to next node is computed as input minus quality or transfer fee.
|
||||||
TER TransactionEngine::calcNodeAccountFwd(
|
TER TransactionEngine::calcNodeAccountFwd(
|
||||||
const unsigned int uIndex, // 0 <= uIndex <= uLast
|
const unsigned int uIndex, // 0 <= uIndex <= uLast
|
||||||
const PathState::pointer& pspCur,
|
const PathState::pointer& pspCur,
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ const uint32 tfPassive = 0x00010000;
|
|||||||
// Payment flags:
|
// Payment flags:
|
||||||
const uint32 tfCreateAccount = 0x00010000;
|
const uint32 tfCreateAccount = 0x00010000;
|
||||||
const uint32 tfPartialPayment = 0x00020000;
|
const uint32 tfPartialPayment = 0x00020000;
|
||||||
const uint32 tfNoRippleDirect = 0x00040000;
|
const uint32 tfLimitQuality = 0x00040000;
|
||||||
|
const uint32 tfNoRippleDirect = 0x00080000;
|
||||||
|
|
||||||
extern TransactionFormat InnerTxnFormats[];
|
extern TransactionFormat InnerTxnFormats[];
|
||||||
extern TransactionFormat* getTxnFormat(TransactionType t);
|
extern TransactionFormat* getTxnFormat(TransactionType t);
|
||||||
|
|||||||
Reference in New Issue
Block a user