mirror of
https://github.com/Xahau/xahaud.git
synced 2026-04-09 05:12:22 +00:00
Compare commits
15 Commits
minor_fixe
...
litetshfix
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a6f5faacd | ||
|
|
4eba415e9b | ||
|
|
9d73b12713 | ||
|
|
d3d4f4dbad | ||
|
|
dd3b0447d5 | ||
|
|
bba014a27c | ||
|
|
617c896514 | ||
|
|
97ab309a09 | ||
|
|
6cb07b0000 | ||
|
|
049efbcdc0 | ||
|
|
9f449e97bc | ||
|
|
6561cd7f58 | ||
|
|
27b91f997c | ||
|
|
75b760debe | ||
|
|
3f7e15893e |
@@ -2030,20 +2030,19 @@ TxQ::doRPC(Application& app, std::optional<XRPAmount> hookFeeUnits) const
|
||||
levels[jss::median_level] = to_string(metrics.medFeeLevel);
|
||||
levels[jss::open_ledger_level] = to_string(metrics.openLedgerFeeLevel);
|
||||
|
||||
auto const baseFee =
|
||||
hookFeeUnits ? XRPAmount{hookFeeUnits->drops()} : view->fees().base;
|
||||
auto const txFee = XRPAmount{hookFeeUnits->drops()};
|
||||
auto const baseFee = view->fees().base;
|
||||
// If the base fee is 0 drops, but escalation has kicked in, treat the
|
||||
// base fee as if it is 1 drop, which makes the rest of the math
|
||||
// work.
|
||||
auto const effectiveBaseFee = [&baseFee, &metrics]() {
|
||||
if (!baseFee && metrics.openLedgerFeeLevel != metrics.referenceFeeLevel)
|
||||
auto const effectiveBaseFee = [&txFee, &metrics]() {
|
||||
if (!txFee && metrics.openLedgerFeeLevel != metrics.referenceFeeLevel)
|
||||
return XRPAmount{1};
|
||||
return baseFee;
|
||||
return txFee;
|
||||
}();
|
||||
|
||||
auto& drops = ret[jss::drops] = Json::Value();
|
||||
|
||||
drops[jss::base_fee_no_hooks] = to_string(view->fees().base);
|
||||
drops[jss::base_fee] = to_string(baseFee);
|
||||
drops[jss::median_fee] = to_string(toDrops(metrics.medFeeLevel, baseFee));
|
||||
drops[jss::minimum_fee] = to_string(toDrops(
|
||||
|
||||
@@ -111,14 +111,6 @@ CancelOffer::doApply()
|
||||
JLOG(j_.debug()) << "Trying to cancel offer :" << *offerID;
|
||||
else
|
||||
JLOG(j_.debug()) << "Trying to cancel offer #" << *offerSequence;
|
||||
|
||||
bool const fixV1 = view().rules().enabled(fixXahauV1);
|
||||
if (fixV1 && sleOffer->getFieldU16(sfLedgerEntryType) != ltOFFER)
|
||||
{
|
||||
JLOG(j_.debug()) << "OfferCancel specified non-offer ledger object";
|
||||
return tecINTERNAL;
|
||||
}
|
||||
|
||||
return offerDelete(view(), sleOffer, ctx_.app.journal("View"));
|
||||
}
|
||||
|
||||
|
||||
@@ -431,25 +431,9 @@ EscrowFinish::preflight(PreflightContext const& ctx)
|
||||
}
|
||||
}
|
||||
|
||||
// sfOfferSequence was changed to optional, so ensure the behaviour is the
|
||||
// same until amendment passes
|
||||
if (!ctx.rules.enabled(fixXahauV1))
|
||||
{
|
||||
if (!ctx.tx.isFieldPresent(sfOfferSequence))
|
||||
return temMALFORMED;
|
||||
|
||||
if (ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
ctx.tx.getFieldU32(sfOfferSequence) != 0)
|
||||
return temMALFORMED;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((!ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
!ctx.tx.isFieldPresent(sfOfferSequence)) ||
|
||||
ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
ctx.tx.isFieldPresent(sfOfferSequence))
|
||||
return temMALFORMED;
|
||||
}
|
||||
if (!ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
!ctx.tx.isFieldPresent(sfOfferSequence))
|
||||
return temMALFORMED;
|
||||
|
||||
return tesSUCCESS;
|
||||
}
|
||||
@@ -478,7 +462,16 @@ EscrowFinish::doApply()
|
||||
std::optional<uint256> escrowID = ctx_.tx[~sfEscrowID];
|
||||
std::optional<std::uint32_t> offerSequence = ctx_.tx[~sfOfferSequence];
|
||||
|
||||
bool const fixV1 = view().rules().enabled(fixXahauV1);
|
||||
if (!view().rules().enabled(fixXahauV1))
|
||||
{
|
||||
if (escrowID && ctx_.tx[sfOfferSequence] != 0)
|
||||
return temMALFORMED;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (escrowID && offerSequence)
|
||||
return temMALFORMED;
|
||||
}
|
||||
|
||||
Keylet k = escrowID ? Keylet(ltESCROW, *escrowID)
|
||||
: keylet::escrow(ctx_.tx[sfOwner], *offerSequence);
|
||||
@@ -487,9 +480,6 @@ EscrowFinish::doApply()
|
||||
if (!slep)
|
||||
return tecNO_TARGET;
|
||||
|
||||
if (fixV1 && slep->getFieldU16(sfLedgerEntryType) != ltESCROW)
|
||||
return tecINTERNAL;
|
||||
|
||||
AccountID const account = (*slep)[sfAccount];
|
||||
auto const sle = ctx_.view().peek(keylet::account(account));
|
||||
auto const amount = slep->getFieldAmount(sfAmount);
|
||||
@@ -714,25 +704,9 @@ EscrowCancel::preflight(PreflightContext const& ctx)
|
||||
if (auto const ret = preflight1(ctx); !isTesSuccess(ret))
|
||||
return ret;
|
||||
|
||||
// sfOfferSequence was changed to optional, so ensure the behaviour is the
|
||||
// same until amendment passes
|
||||
if (!ctx.rules.enabled(fixXahauV1))
|
||||
{
|
||||
if (!ctx.tx.isFieldPresent(sfOfferSequence))
|
||||
return temMALFORMED;
|
||||
|
||||
if (ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
ctx.tx.getFieldU32(sfOfferSequence) != 0)
|
||||
return temMALFORMED;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((!ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
!ctx.tx.isFieldPresent(sfOfferSequence)) ||
|
||||
ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
ctx.tx.isFieldPresent(sfOfferSequence))
|
||||
return temMALFORMED;
|
||||
}
|
||||
if (!ctx.tx.isFieldPresent(sfEscrowID) &&
|
||||
!ctx.tx.isFieldPresent(sfOfferSequence))
|
||||
return temMALFORMED;
|
||||
|
||||
return preflight2(ctx);
|
||||
}
|
||||
@@ -748,7 +722,16 @@ EscrowCancel::doApply()
|
||||
std::optional<uint256> escrowID = ctx_.tx[~sfEscrowID];
|
||||
std::optional<std::uint32_t> offerSequence = ctx_.tx[~sfOfferSequence];
|
||||
|
||||
bool const fixV1 = view().rules().enabled(fixXahauV1);
|
||||
if (!view().rules().enabled(fixXahauV1))
|
||||
{
|
||||
if (escrowID && ctx_.tx[sfOfferSequence] != 0)
|
||||
return temMALFORMED;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (escrowID && offerSequence)
|
||||
return temMALFORMED;
|
||||
}
|
||||
|
||||
Keylet k = escrowID ? Keylet(ltESCROW, *escrowID)
|
||||
: keylet::escrow(ctx_.tx[sfOwner], *offerSequence);
|
||||
@@ -757,9 +740,6 @@ EscrowCancel::doApply()
|
||||
if (!slep)
|
||||
return tecNO_TARGET;
|
||||
|
||||
if (fixV1 && slep->getFieldU16(sfLedgerEntryType) != ltESCROW)
|
||||
return tecINTERNAL;
|
||||
|
||||
if (ctx_.view().rules().enabled(fix1571))
|
||||
{
|
||||
auto const now = ctx_.view().info().parentCloseTime;
|
||||
|
||||
@@ -299,16 +299,10 @@ GenesisMint::doApply()
|
||||
auto const flags = dest[~sfGovernanceFlags];
|
||||
auto const marks = dest[~sfGovernanceMarks];
|
||||
auto const id = dest.getAccountID(sfDestination);
|
||||
auto const k = keylet::account(id);
|
||||
|
||||
bool const firstOccurance = mints.find(id) == mints.end();
|
||||
|
||||
if (dropsAdded + toCredit < dropsAdded)
|
||||
{
|
||||
JLOG(ctx_.journal.warn()) << "GenesisMint: cannot credit " << id
|
||||
<< " due to dropsAdded overflow";
|
||||
return tecINTERNAL;
|
||||
}
|
||||
|
||||
dropsAdded += toCredit;
|
||||
|
||||
// if flags / marks appear more than once we just take the first
|
||||
|
||||
@@ -817,17 +817,16 @@ Import::preflight(PreflightContext const& ctx)
|
||||
<< " validation count: " << validationCount;
|
||||
|
||||
// check if the validation count is adequate
|
||||
auto hasInsufficientQuorum =
|
||||
[&ctx](uint64_t quorum, uint64_t validationCount) {
|
||||
if (ctx.rules.enabled(fixXahauV1))
|
||||
{
|
||||
return quorum > validationCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
return quorum >= validationCount;
|
||||
}
|
||||
};
|
||||
auto hasInsufficientQuorum = [&ctx](int quorum, int validationCount) {
|
||||
if (ctx.rules.enabled(fixXahauV1))
|
||||
{
|
||||
return quorum > validationCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
return quorum >= validationCount;
|
||||
}
|
||||
};
|
||||
if (hasInsufficientQuorum(quorum, validationCount))
|
||||
{
|
||||
JLOG(ctx.j.warn()) << "Import: xpop did not contain an 80% quorum for "
|
||||
|
||||
@@ -86,27 +86,6 @@ Invoke::calculateBaseFee(ReadView const& view, STTx const& tx)
|
||||
extraFee +=
|
||||
XRPAmount{static_cast<XRPAmount>(tx.getFieldVL(sfBlob).size())};
|
||||
|
||||
// old code (prior to fixXahauV1)
|
||||
if (!view.rules().enabled(fixXahauV1))
|
||||
{
|
||||
if (tx.isFieldPresent(sfHookParameters))
|
||||
{
|
||||
uint64_t paramBytes = 0;
|
||||
auto const& params = tx.getFieldArray(sfHookParameters);
|
||||
for (auto const& param : params)
|
||||
{
|
||||
paramBytes +=
|
||||
(param.isFieldPresent(sfHookParameterName)
|
||||
? param.getFieldVL(sfHookParameterName).size()
|
||||
: 0) +
|
||||
(param.isFieldPresent(sfHookParameterValue)
|
||||
? param.getFieldVL(sfHookParameterValue).size()
|
||||
: 0);
|
||||
}
|
||||
extraFee += XRPAmount{static_cast<XRPAmount>(paramBytes)};
|
||||
}
|
||||
}
|
||||
|
||||
return Transactor::calculateBaseFee(view, tx) + extraFee;
|
||||
}
|
||||
|
||||
|
||||
@@ -351,7 +351,7 @@ Transactor::calculateBaseFee(ReadView const& view, STTx const& tx)
|
||||
XRPAmount accumulator = baseFee;
|
||||
|
||||
if (view.rules().enabled(featureHooks) &&
|
||||
view.rules().enabled(fixXahauV1) && tx.isFieldPresent(sfHookParameters))
|
||||
tx.isFieldPresent(sfHookParameters))
|
||||
{
|
||||
uint64_t paramBytes = 0;
|
||||
auto const& params = tx.getFieldArray(sfHookParameters);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -27,7 +27,6 @@
|
||||
#include <ripple/ledger/OpenView.h>
|
||||
#include <ripple/ledger/RawView.h>
|
||||
#include <ripple/ledger/ReadView.h>
|
||||
#include <ripple/ledger/Sandbox.h>
|
||||
#include <ripple/protocol/Feature.h>
|
||||
#include <ripple/protocol/Protocol.h>
|
||||
#include <ripple/protocol/Rate.h>
|
||||
@@ -395,8 +394,7 @@ accountSend(
|
||||
AccountID const& from,
|
||||
AccountID const& to,
|
||||
const STAmount& saAmount,
|
||||
beast::Journal j,
|
||||
bool const senderPaysXferFees = true);
|
||||
beast::Journal j);
|
||||
|
||||
[[nodiscard]] TER
|
||||
issueIOU(
|
||||
@@ -629,7 +627,7 @@ trustTransferAllowed(
|
||||
{
|
||||
static_assert(
|
||||
std::is_same<V, ReadView const>::value ||
|
||||
std::is_same<V, ApplyView>::value || std::is_same<V, Sandbox>::value);
|
||||
std::is_same<V, ApplyView>::value);
|
||||
|
||||
typedef typename std::conditional<
|
||||
std::is_same<V, ApplyView>::value,
|
||||
|
||||
@@ -1157,8 +1157,7 @@ rippleSend(
|
||||
AccountID const& uReceiverID,
|
||||
STAmount const& saAmount,
|
||||
STAmount& saActual,
|
||||
beast::Journal j,
|
||||
bool const senderPaysXferFees)
|
||||
beast::Journal j)
|
||||
{
|
||||
auto const issuer = saAmount.getIssuer();
|
||||
|
||||
@@ -1180,30 +1179,17 @@ rippleSend(
|
||||
|
||||
// Calculate the amount to transfer accounting
|
||||
// for any transfer fees:
|
||||
|
||||
STAmount senderPays = saAmount;
|
||||
STAmount destReceives = saAmount;
|
||||
if (senderPaysXferFees)
|
||||
{
|
||||
senderPays = multiply(saAmount, transferRate(view, issuer));
|
||||
saActual = senderPays;
|
||||
}
|
||||
else
|
||||
{
|
||||
destReceives = divide(saAmount, transferRate(view, issuer));
|
||||
saActual = destReceives;
|
||||
}
|
||||
saActual = multiply(saAmount, transferRate(view, issuer));
|
||||
|
||||
JLOG(j.debug()) << "rippleSend> " << to_string(uSenderID) << " - > "
|
||||
<< to_string(uReceiverID)
|
||||
<< " : deliver=" << saAmount.getFullText()
|
||||
<< " cost=" << saActual.getFullText();
|
||||
|
||||
TER terResult =
|
||||
rippleCredit(view, issuer, uReceiverID, destReceives, true, j);
|
||||
TER terResult = rippleCredit(view, issuer, uReceiverID, saAmount, true, j);
|
||||
|
||||
if (tesSUCCESS == terResult)
|
||||
terResult = rippleCredit(view, uSenderID, issuer, senderPays, true, j);
|
||||
terResult = rippleCredit(view, uSenderID, issuer, saActual, true, j);
|
||||
|
||||
return terResult;
|
||||
}
|
||||
@@ -1214,8 +1200,7 @@ accountSend(
|
||||
AccountID const& uSenderID,
|
||||
AccountID const& uReceiverID,
|
||||
STAmount const& saAmount,
|
||||
beast::Journal j,
|
||||
bool const senderPaysXferFees)
|
||||
beast::Journal j)
|
||||
{
|
||||
assert(saAmount >= beast::zero);
|
||||
|
||||
@@ -1233,14 +1218,7 @@ accountSend(
|
||||
<< to_string(uReceiverID) << " : "
|
||||
<< saAmount.getFullText();
|
||||
|
||||
return rippleSend(
|
||||
view,
|
||||
uSenderID,
|
||||
uReceiverID,
|
||||
saAmount,
|
||||
saActual,
|
||||
j,
|
||||
senderPaysXferFees);
|
||||
return rippleSend(view, uSenderID, uReceiverID, saAmount, saActual, j);
|
||||
}
|
||||
|
||||
/* XRP send which does not check reserve and can do pure adjustment.
|
||||
@@ -1249,6 +1227,7 @@ accountSend(
|
||||
* ensure that transfers are balanced.
|
||||
*/
|
||||
TER terResult(tesSUCCESS);
|
||||
|
||||
SLE::pointer sender = uSenderID != beast::zero
|
||||
? view.peek(keylet::account(uSenderID))
|
||||
: SLE::pointer();
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace detail {
|
||||
// Feature.cpp. Because it's only used to reserve storage, and determine how
|
||||
// large to make the FeatureBitset, it MAY be larger. It MUST NOT be less than
|
||||
// the actual number of amendments. A LogicError on startup will verify this.
|
||||
static constexpr std::size_t numFeatures = 66;
|
||||
static constexpr std::size_t numFeatures = 67;
|
||||
|
||||
/** Amendments that this server supports and the default voting behavior.
|
||||
Whether they are enabled depends on the Rules defined in the validated
|
||||
@@ -353,6 +353,7 @@ extern uint256 const fixNFTokenRemint;
|
||||
extern uint256 const featureImport;
|
||||
extern uint256 const featureXahauGenesis;
|
||||
extern uint256 const featureHooksUpdate1;
|
||||
extern uint256 const fixURITokenV1;
|
||||
extern uint256 const fixXahauV1;
|
||||
|
||||
} // namespace ripple
|
||||
|
||||
@@ -337,7 +337,6 @@ enum TECcodes : TERUnderlyingType {
|
||||
tecXCHAIN_PAYMENT_FAILED = 184, // RESERVED - XCHAIN
|
||||
tecXCHAIN_SELF_COMMIT = 185, // RESERVED - XCHAIN
|
||||
tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR = 186, // RESERVED - XCHAIN
|
||||
tecINSUF_RESERVE_SELLER = 187,
|
||||
tecLAST_POSSIBLE_ENTRY = 255,
|
||||
};
|
||||
|
||||
|
||||
@@ -459,6 +459,7 @@ REGISTER_FEATURE(URIToken, Supported::yes, VoteBehavior::De
|
||||
REGISTER_FEATURE(Import, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FEATURE(XahauGenesis, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FEATURE(HooksUpdate1, Supported::yes, VoteBehavior::DefaultYes);
|
||||
REGISTER_FIX (fixURITokenV1, Supported::yes, VoteBehavior::DefaultNo);
|
||||
REGISTER_FIX (fixXahauV1, Supported::yes, VoteBehavior::DefaultNo);
|
||||
|
||||
|
||||
|
||||
@@ -91,7 +91,6 @@ transResults()
|
||||
MAKE_ERROR(tecHOOK_REJECTED, "Rejected by hook on sending or receiving account."),
|
||||
MAKE_ERROR(tecREQUIRES_FLAG, "The transaction or part-thereof requires a flag that wasn't set."),
|
||||
MAKE_ERROR(tecPRECISION_LOSS, "The amounts used by the transaction cannot interact."),
|
||||
MAKE_ERROR(tecINSUF_RESERVE_SELLER, "The seller of an object has insufficient reserves, and thus cannot complete the sale."),
|
||||
MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."),
|
||||
MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."),
|
||||
MAKE_ERROR(tefBAD_AUTH, "Transaction's public key is not authorized."),
|
||||
|
||||
@@ -173,30 +173,29 @@ JSS(accounts); // in: LedgerEntry, Subscribe,
|
||||
JSS(accounts_proposed); // in: Subscribe, Unsubscribe
|
||||
JSS(acroot);
|
||||
JSS(action);
|
||||
JSS(acquiring); // out: LedgerRequest
|
||||
JSS(address); // out: PeerImp
|
||||
JSS(affected); // out: AcceptedLedgerTx
|
||||
JSS(age); // out: NetworkOPs, Peers
|
||||
JSS(alternatives); // out: PathRequest, RipplePathFind
|
||||
JSS(amendment_blocked); // out: NetworkOPs
|
||||
JSS(amendments); // in: AccountObjects, out: NetworkOPs
|
||||
JSS(amount); // out: AccountChannels
|
||||
JSS(api_version); // in: many, out: Version
|
||||
JSS(api_version_low); // out: Version
|
||||
JSS(applied); // out: SubmitTransaction
|
||||
JSS(asks); // out: Subscribe
|
||||
JSS(assets); // out: GatewayBalances
|
||||
JSS(authorized); // out: AccountLines
|
||||
JSS(auth_change); // out: AccountInfo
|
||||
JSS(auth_change_queued); // out: AccountInfo
|
||||
JSS(available); // out: ValidatorList
|
||||
JSS(avg_bps_recv); // out: Peers
|
||||
JSS(avg_bps_sent); // out: Peers
|
||||
JSS(balance); // out: AccountLines
|
||||
JSS(balances); // out: GatewayBalances
|
||||
JSS(base); // out: LogLevel
|
||||
JSS(base_fee); // out: NetworkOPs
|
||||
JSS(base_fee_no_hooks);
|
||||
JSS(acquiring); // out: LedgerRequest
|
||||
JSS(address); // out: PeerImp
|
||||
JSS(affected); // out: AcceptedLedgerTx
|
||||
JSS(age); // out: NetworkOPs, Peers
|
||||
JSS(alternatives); // out: PathRequest, RipplePathFind
|
||||
JSS(amendment_blocked); // out: NetworkOPs
|
||||
JSS(amendments); // in: AccountObjects, out: NetworkOPs
|
||||
JSS(amount); // out: AccountChannels
|
||||
JSS(api_version); // in: many, out: Version
|
||||
JSS(api_version_low); // out: Version
|
||||
JSS(applied); // out: SubmitTransaction
|
||||
JSS(asks); // out: Subscribe
|
||||
JSS(assets); // out: GatewayBalances
|
||||
JSS(authorized); // out: AccountLines
|
||||
JSS(auth_change); // out: AccountInfo
|
||||
JSS(auth_change_queued); // out: AccountInfo
|
||||
JSS(available); // out: ValidatorList
|
||||
JSS(avg_bps_recv); // out: Peers
|
||||
JSS(avg_bps_sent); // out: Peers
|
||||
JSS(balance); // out: AccountLines
|
||||
JSS(balances); // out: GatewayBalances
|
||||
JSS(base); // out: LogLevel
|
||||
JSS(base_fee); // out: NetworkOPs
|
||||
JSS(base_fee_xrp); // out: NetworkOPs
|
||||
JSS(base_fee_native); // out: NetworkOPs
|
||||
JSS(bids); // out: Subscribe
|
||||
|
||||
@@ -59,7 +59,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
|
||||
// verify base fee & open ledger fee
|
||||
auto const drops = jrr[jss::result][jss::drops];
|
||||
auto const baseFee = drops[jss::base_fee_no_hooks];
|
||||
auto const baseFee = drops[jss::base_fee];
|
||||
BEAST_EXPECT(baseFee == to_string(feeDrops));
|
||||
auto const openLedgerFee = drops[jss::open_ledger_fee];
|
||||
BEAST_EXPECT(openLedgerFee == expected);
|
||||
@@ -77,7 +77,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -87,9 +87,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = fset(account, asfTshCollect);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -100,7 +98,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const bene = Account("bob");
|
||||
@@ -111,9 +109,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = acctdelete(account, bene);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "200000" : "200000";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "200000");
|
||||
}
|
||||
|
||||
static uint256
|
||||
@@ -130,7 +126,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -141,9 +137,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = check::cancel(account, checkId);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -154,7 +148,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -166,9 +160,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = check::cash(dest, checkId, XRP(100));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -179,7 +171,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -190,9 +182,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = check::create(account, dest, XRP(100));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -203,7 +193,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -213,9 +203,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = reward::claim(account);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -226,7 +214,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const authed = Account("bob");
|
||||
@@ -237,9 +225,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = deposit::auth(account, authed);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -250,7 +236,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -261,9 +247,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = escrow::cancel(account, account, seq1);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -274,7 +258,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -285,9 +269,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = escrow::create(account, dest, XRP(10));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -298,7 +280,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -309,9 +291,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = escrow::finish(account, account, seq1);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -322,7 +302,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -333,9 +313,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
account, import::loadXpop(ImportTCAccountSet::w_seed));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "106" : "100";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "106");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -346,7 +324,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -356,9 +334,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = invoke::invoke(account);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "16";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -369,7 +345,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -380,9 +356,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = offer_cancel(account, offerSeq);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -393,7 +367,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const gw = Account("gw");
|
||||
@@ -405,9 +379,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = offer(account, USD(1000), XRP(1000));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -418,7 +390,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -429,9 +401,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = pay(account, dest, XRP(1));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
static uint256
|
||||
@@ -452,7 +422,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -467,9 +437,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = paychan::claim(account, chan, reqBal, authAmt);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -480,7 +448,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -493,9 +461,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = paychan::create(account, dest, XRP(10), settleDelay, pk);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -506,7 +472,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -518,9 +484,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = paychan::fund(account, chan, XRP(1));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -531,7 +495,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -551,9 +515,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
hookParams[jss::HookParameter][jss::HookParameterValue] = "DEADBEEF";
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "73022" : "73016";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "73022");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -564,7 +526,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const dest = Account("bob");
|
||||
@@ -575,9 +537,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = regkey(account, dest);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "0" : "0";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "0");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -588,7 +548,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const signer1 = Account("bob");
|
||||
@@ -600,9 +560,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = signers(account, 2, {{signer1, 1}, {signer2, 1}});
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -613,7 +571,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -623,9 +581,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = ticket::create(account, 2);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -636,7 +592,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
auto const gw = Account("gw");
|
||||
@@ -648,9 +604,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = trust(account, USD(1000));
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -661,7 +615,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const issuer = Account("alice");
|
||||
env.fund(XRP(1000), issuer);
|
||||
@@ -674,9 +628,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = uritoken::burn(issuer, hexid);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -687,7 +639,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const issuer = Account("alice");
|
||||
env.fund(XRP(1000), issuer);
|
||||
@@ -701,9 +653,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
tx[jss::Amount] = "1000000";
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -714,7 +664,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const issuer = Account("alice");
|
||||
env.fund(XRP(1000), issuer);
|
||||
@@ -727,9 +677,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = uritoken::cancel(issuer, hexid);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -740,7 +688,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const issuer = Account("alice");
|
||||
auto const buyer = Account("bob");
|
||||
@@ -756,9 +704,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
tx[jss::Amount] = "1000000";
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -769,7 +715,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
using namespace test::jtx;
|
||||
using namespace std::literals;
|
||||
|
||||
Env env{*this, network::makeNetworkConfig(21337), features};
|
||||
Env env{*this, network::makeNetworkConfig(21337)};
|
||||
|
||||
auto const account = Account("alice");
|
||||
env.fund(XRP(1000), account);
|
||||
@@ -780,9 +726,7 @@ class BaseFee_test : public beast::unit_test::suite
|
||||
auto tx = uritoken::mint(account, uri);
|
||||
|
||||
// verify hooks fee
|
||||
std::string const feeResult =
|
||||
env.current()->rules().enabled(fixXahauV1) ? "16" : "10";
|
||||
testRPCCall(env, tx, feeResult);
|
||||
testRPCCall(env, tx, "16");
|
||||
}
|
||||
|
||||
void
|
||||
@@ -826,7 +770,6 @@ public:
|
||||
using namespace test::jtx;
|
||||
auto const sa = supported_amendments();
|
||||
testWithFeats(sa);
|
||||
testWithFeats(sa - fixXahauV1);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -5298,6 +5298,7 @@ public:
|
||||
// both offer id and offer sequence 0
|
||||
{
|
||||
uint256 const offerId{getOfferIndex(alice, env.seq(alice))};
|
||||
std::uint32_t const offerSeqId{env.seq(alice)};
|
||||
env(offer(alice, XRP(50), USD(50)));
|
||||
env.close();
|
||||
|
||||
@@ -5403,12 +5404,12 @@ public:
|
||||
FeatureBitset const rmSmallIncreasedQOffers{fixRmSmallIncreasedQOffers};
|
||||
FeatureBitset const immediateOfferKilled{featureImmediateOfferKilled};
|
||||
|
||||
testAll(all - takerDryOffer - immediateOfferKilled);
|
||||
testAll(all - flowCross - takerDryOffer - immediateOfferKilled);
|
||||
testAll(all - flowCross - immediateOfferKilled);
|
||||
testAll(all - rmSmallIncreasedQOffers - immediateOfferKilled);
|
||||
testAll(all);
|
||||
testFalseAssert();
|
||||
// testAll(all - takerDryOffer - immediateOfferKilled);
|
||||
// testAll(all - flowCross - takerDryOffer - immediateOfferKilled);
|
||||
// testAll(all - flowCross - immediateOfferKilled);
|
||||
// testAll(all - rmSmallIncreasedQOffers - immediateOfferKilled);
|
||||
// testAll(all);
|
||||
// testFalseAssert();
|
||||
testOfferID(all);
|
||||
}
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -191,25 +191,30 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
using namespace jtx;
|
||||
using namespace std::literals::chrono_literals;
|
||||
|
||||
// fixXahauV1
|
||||
// fixURITokenV1
|
||||
{
|
||||
Env env{*this, features};
|
||||
auto const alice = Account("alice");
|
||||
auto const bob = Account("bob");
|
||||
env.fund(XRP(1000), alice, bob);
|
||||
env.close();
|
||||
for (bool const withFixURITokenV1 : {true, false})
|
||||
{
|
||||
auto const amend =
|
||||
withFixURITokenV1 ? features : features - fixURITokenV1;
|
||||
|
||||
std::string const uri(2, '?');
|
||||
auto const tid = uritoken::tokenid(alice, uri);
|
||||
std::string const hexid{strHex(tid)};
|
||||
auto const txResult =
|
||||
withFixURITokenV1 ? ter(temMALFORMED) : ter(tefINTERNAL);
|
||||
|
||||
// temMALFORMED - cannot include sfDestination without sfAmount
|
||||
bool const withFixXahauV1 =
|
||||
env.current()->rules().enabled(fixXahauV1);
|
||||
auto const txResult =
|
||||
withFixXahauV1 ? ter(temMALFORMED) : ter(tefINTERNAL);
|
||||
env(uritoken::mint(alice, uri), uritoken::dest(bob), txResult);
|
||||
env.close();
|
||||
Env env{*this, amend};
|
||||
auto const alice = Account("alice");
|
||||
auto const bob = Account("bob");
|
||||
env.fund(XRP(1000), alice, bob);
|
||||
env.close();
|
||||
|
||||
std::string const uri(2, '?');
|
||||
auto const tid = uritoken::tokenid(alice, uri);
|
||||
std::string const hexid{strHex(tid)};
|
||||
|
||||
// temMALFORMED - cannot include sfDestination without sfAmount
|
||||
env(uritoken::mint(alice, uri), uritoken::dest(bob), txResult);
|
||||
env.close();
|
||||
}
|
||||
}
|
||||
|
||||
// setup env
|
||||
@@ -454,10 +459,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
using namespace std::literals::chrono_literals;
|
||||
|
||||
// setup env
|
||||
Env env{
|
||||
*this, envconfig(), features, nullptr, beast::severities::kWarning
|
||||
// beast::severities::kTrace
|
||||
};
|
||||
Env env{*this, features};
|
||||
auto const alice = Account("alice");
|
||||
auto const bob = Account("bob");
|
||||
auto const carol = Account("carol");
|
||||
@@ -600,7 +602,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
// tecNO_LINE_INSUF_RESERVE - insuficient xrp to create line
|
||||
{
|
||||
// fund echo 251 xrp (not enough for line reserve)
|
||||
// fund dave 251 xrp (not enough for line reserve)
|
||||
env.fund(XRP(251), echo);
|
||||
env.fund(XRP(301), dave);
|
||||
env.close();
|
||||
@@ -618,12 +620,9 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
|
||||
// tecNO_LINE_INSUF_RESERVE - insuficient xrp to create line
|
||||
auto const txResult = env.current()->rules().enabled(fixXahauV1)
|
||||
? ter(tecINSUF_RESERVE_SELLER)
|
||||
: ter(tecNO_LINE_INSUF_RESERVE);
|
||||
|
||||
env(noop(echo), fee(XRP(50)), ter(tesSUCCESS));
|
||||
env(uritoken::buy(dave, hexid), uritoken::amt(USD(1)), txResult);
|
||||
env(uritoken::buy(dave, hexid),
|
||||
uritoken::amt(USD(1)),
|
||||
ter(tecNO_LINE_INSUF_RESERVE));
|
||||
env.close();
|
||||
}
|
||||
|
||||
@@ -712,14 +711,12 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
json(sfDigest.fieldName, digestval));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(
|
||||
to_string(tokenDigest(*env.current(), tid)) == digestval);
|
||||
// cleanup
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
}
|
||||
// has digest - has uri - burnable flag
|
||||
{
|
||||
@@ -729,14 +726,12 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
json(sfDigest.fieldName, digestval));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(
|
||||
to_string(tokenDigest(*env.current(), tid)) == digestval);
|
||||
// cleanup
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
}
|
||||
// has uri - no flags
|
||||
{
|
||||
@@ -744,12 +739,10 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
// cleanup
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
}
|
||||
// has uri - burnable flag
|
||||
{
|
||||
@@ -757,12 +750,10 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri), txflags(tfBurnable));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
// cleanup
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
}
|
||||
|
||||
// 0 amount and destination
|
||||
@@ -775,23 +766,14 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// buy
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(0)));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// cleanup
|
||||
env(uritoken::burn(bob, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
}
|
||||
|
||||
// has amount and destination
|
||||
@@ -804,23 +786,14 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// buy
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(10)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// cleanup
|
||||
env(uritoken::burn(bob, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
}
|
||||
|
||||
// has amount and no destination
|
||||
@@ -832,23 +805,14 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// buy
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(10)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// cleanup
|
||||
env(uritoken::burn(bob, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -876,30 +840,16 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri), txflags(tfBurnable));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(XRP(1)));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// bob buys
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(1)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice burns
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
}
|
||||
// issuer cannot burn
|
||||
{
|
||||
@@ -907,33 +857,21 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(XRP(1)));
|
||||
env.close();
|
||||
// bob buys
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(1)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice tries to burn
|
||||
env(uritoken::burn(alice, hexid), ter(tecNO_PERMISSION));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// burn for test reset
|
||||
env(uritoken::burn(bob, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
}
|
||||
// owner can burn
|
||||
{
|
||||
@@ -941,30 +879,18 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(XRP(1)));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
env.close();
|
||||
// bob buys
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(1)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// bob burns
|
||||
env(uritoken::burn(bob, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1004,9 +930,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
BEAST_EXPECT(env.balance(alice) == preAlice - (1 * feeDrops));
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(delta));
|
||||
@@ -1016,10 +939,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 2);
|
||||
BEAST_EXPECT(
|
||||
env.balance(alice) == preAlice + delta - (2 * feeDrops));
|
||||
BEAST_EXPECT(env.balance(bob) == preBob - delta - feeDrops);
|
||||
@@ -1030,8 +950,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
// bob can buy with USD
|
||||
{
|
||||
@@ -1044,9 +962,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
BEAST_EXPECT(env.balance(alice) == preAliceXrp - (1 * feeDrops));
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(delta));
|
||||
@@ -1056,10 +971,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
// bob buys
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 2);
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == preAlice + delta);
|
||||
BEAST_EXPECT(env.balance(alice) == preAliceXrp - (2 * feeDrops));
|
||||
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - delta);
|
||||
@@ -1071,8 +983,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1114,9 +1024,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
@@ -1134,10 +1041,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
// bob buys at higher price
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(XRP(11)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 2);
|
||||
BEAST_EXPECT(
|
||||
env.balance(alice) == preAlice + XRP(11) - (4 * feeDrops));
|
||||
BEAST_EXPECT(env.balance(bob) == preBob - XRP(11) - (2 * feeDrops));
|
||||
@@ -1148,8 +1052,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
// alice can sell with XRP and dest
|
||||
{
|
||||
@@ -1160,9 +1062,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid),
|
||||
uritoken::amt(delta),
|
||||
@@ -1177,10 +1076,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
// bob buys
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 2);
|
||||
BEAST_EXPECT(
|
||||
env.balance(alice) == preAlice + delta - (2 * feeDrops));
|
||||
BEAST_EXPECT(env.balance(bob) == preBob - delta - (1 * feeDrops));
|
||||
@@ -1191,8 +1087,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
|
||||
// alice can sell with USD
|
||||
@@ -1206,9 +1100,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
@@ -1227,10 +1118,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(USD(11)));
|
||||
env.close();
|
||||
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 2);
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == preAlice + USD(11));
|
||||
BEAST_EXPECT(env.balance(alice) == preAliceXrp - (4 * feeDrops));
|
||||
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - USD(11));
|
||||
@@ -1242,8 +1130,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
// alice can sell with USD and dest
|
||||
{
|
||||
@@ -1256,9 +1142,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid),
|
||||
uritoken::amt(delta),
|
||||
@@ -1274,10 +1157,7 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 2);
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == preAlice + delta);
|
||||
BEAST_EXPECT(env.balance(alice) == preAliceXrp - (2 * feeDrops));
|
||||
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - delta);
|
||||
@@ -1289,8 +1169,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1331,9 +1209,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
@@ -1353,9 +1228,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
// alice can clear / reset USD amount
|
||||
{
|
||||
@@ -1364,9 +1236,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::mint(alice, uri));
|
||||
env.close();
|
||||
BEAST_EXPECT(inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sells
|
||||
env(uritoken::sell(alice, hexid), uritoken::amt(delta));
|
||||
env.close();
|
||||
@@ -1386,9 +1255,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::burn(alice, hexid));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1428,8 +1294,8 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sets the sell offer
|
||||
// bob sets the buy offer
|
||||
// // alice sets the sell offer
|
||||
// // bob sets the buy offer
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(USD(10)));
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);
|
||||
@@ -1455,8 +1321,8 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 2);
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), bob, tid));
|
||||
BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);
|
||||
// alice sets the sell offer
|
||||
// bob sets the buy offer
|
||||
// // alice sets the sell offer
|
||||
// // bob sets the buy offer
|
||||
env(uritoken::buy(bob, hexid), uritoken::amt(USD(10)));
|
||||
env.close();
|
||||
BEAST_EXPECT(!inOwnerDir(*env.current(), alice, tid));
|
||||
@@ -1967,27 +1833,11 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
auto const gw = Account{"gateway"};
|
||||
auto const USD = gw["USD"];
|
||||
|
||||
struct TestRateData
|
||||
{
|
||||
double rate;
|
||||
STAmount delta;
|
||||
std::string multiply;
|
||||
std::string divide;
|
||||
};
|
||||
std::array<TestRateData, 6> testCases = {{
|
||||
{1, USD(100), "1100", "1100"},
|
||||
{1.1, USD(100), "1110", "1090.909090909091"},
|
||||
{1.0005, USD(100), "1100.05", "1099.950024987506"},
|
||||
{1.005, USD(100), "1100.4999999", "1099.502487661197"},
|
||||
{1.25, USD(100), "1125", "1080"},
|
||||
{2, USD(100), "1200", "1050"},
|
||||
}};
|
||||
|
||||
for (auto const& tc : testCases)
|
||||
// test transfer rate
|
||||
{
|
||||
Env env{*this, features};
|
||||
env.fund(XRP(10000), alice, bob, gw);
|
||||
env(rate(gw, tc.rate));
|
||||
env(rate(gw, 1.25));
|
||||
env.close();
|
||||
env.trust(USD(100000), alice, bob);
|
||||
env.close();
|
||||
@@ -1995,7 +1845,6 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(pay(gw, bob, USD(1000)));
|
||||
env.close();
|
||||
|
||||
auto const preAlice = env.balance(alice, USD.issue());
|
||||
auto const preBob = env.balance(bob, USD.issue());
|
||||
|
||||
// setup mint
|
||||
@@ -2008,19 +1857,9 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
|
||||
env(uritoken::buy(bob, id), uritoken::amt(delta));
|
||||
env.close();
|
||||
auto xferRate = transferRate(*env.current(), gw);
|
||||
auto const postAlice = env.balance(alice, USD.issue());
|
||||
if (!env.current()->rules().enabled(fixXahauV1))
|
||||
{
|
||||
BEAST_EXPECT(to_string(postAlice.value()) == tc.multiply);
|
||||
}
|
||||
else
|
||||
{
|
||||
BEAST_EXPECT(to_string(postAlice.value()) == tc.divide);
|
||||
}
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == USD(1125));
|
||||
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - delta);
|
||||
}
|
||||
|
||||
// test rate change
|
||||
{
|
||||
Env env{*this, features};
|
||||
@@ -2043,16 +1882,29 @@ struct URIToken_test : public beast::unit_test::suite
|
||||
env(uritoken::sell(alice, id), uritoken::amt(delta));
|
||||
env.close();
|
||||
|
||||
// bob buys at higher rate and burns
|
||||
env(uritoken::buy(bob, id), uritoken::amt(delta));
|
||||
env.close();
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == USD(10125));
|
||||
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - delta);
|
||||
env(uritoken::burn(bob, id));
|
||||
|
||||
// issuer changes rate lower
|
||||
env(rate(gw, 1.00));
|
||||
env.close();
|
||||
|
||||
// bob buys at higher rate and burns
|
||||
preBob = env.balance(bob, USD.issue());
|
||||
|
||||
// alice mints and sells
|
||||
env(uritoken::mint(alice, uri));
|
||||
env(uritoken::sell(alice, id), uritoken::amt(delta));
|
||||
env.close();
|
||||
|
||||
// bob buys at lower rate
|
||||
env(uritoken::buy(bob, id), uritoken::amt(delta));
|
||||
env.close();
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == USD(10100));
|
||||
BEAST_EXPECT(env.balance(alice, USD.issue()) == USD(10225));
|
||||
BEAST_EXPECT(env.balance(bob, USD.issue()) == preBob - delta);
|
||||
env(uritoken::burn(bob, id));
|
||||
}
|
||||
// test issuer doesnt pay own rate
|
||||
{
|
||||
@@ -2525,7 +2377,6 @@ public:
|
||||
using namespace test::jtx;
|
||||
auto const sa = supported_amendments();
|
||||
testWithFeats(sa);
|
||||
testWithFeats(sa - fixXahauV1);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1750,10 +1750,13 @@ public:
|
||||
|
||||
env.fund(XRP(10000), "alice");
|
||||
env.close();
|
||||
std::cout << to_string(env.closed()->info().hash) << "\n";
|
||||
env.fund(XRP(10000), "bob");
|
||||
env.close();
|
||||
std::cout << to_string(env.closed()->info().hash) << "\n";
|
||||
env.fund(XRP(10000), "jim");
|
||||
env.close();
|
||||
std::cout << to_string(env.closed()->info().hash) << "\n";
|
||||
env.fund(XRP(10000), "jill");
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user