3#include <xrpld/app/tx/apply.h> 
    5#include <xrpl/protocol/AmountConversions.h> 
    6#include <xrpl/protocol/Feature.h> 
    7#include <xrpl/protocol/Quality.h> 
    8#include <xrpl/protocol/Rate.h> 
    9#include <xrpl/protocol/jss.h> 
   21        using namespace test::jtx;
 
   23        Account 
const alice(
"alice");
 
   24        env.fund(XRP(10000), noripple(alice));
 
   26        auto const jrr = env.le(alice);
 
   27        BEAST_EXPECT(jrr && jrr->at(sfFlags) == 0u);
 
 
   35        using namespace test::jtx;
 
   36        Account 
const alice(
"alice");
 
   39        Env env(*
this, testable_amendments() - featureDepositAuth);
 
   40        env.fund(XRP(10000), noripple(alice));
 
   45        env(regkey(alice, alie));
 
   48        auto testFlags = [
this, &alice, &alie, &env](
 
   52                 flag < std::numeric_limits<std::uint32_t>::digits;
 
   92                if (
std::find(goodFlags.begin(), goodFlags.end(), flag) !=
 
   96                    env.require(nflags(alice, flag));
 
   97                    env(fset(alice, flag), sig(alice));
 
   99                    env.require(flags(alice, flag));
 
  100                    env(fclear(alice, flag), sig(alie));
 
  102                    env.require(nflags(alice, flag));
 
  104                    BEAST_EXPECT(now_flags == orig_flags);
 
  109                    BEAST_EXPECT((*env.le(alice))[sfFlags] == orig_flags);
 
  110                    env(fset(alice, flag), sig(alice));
 
  112                    BEAST_EXPECT((*env.le(alice))[sfFlags] == orig_flags);
 
  113                    env(fclear(alice, flag), sig(alie));
 
  115                    BEAST_EXPECT((*env.le(alice))[sfFlags] == orig_flags);
 
  130        env.enableFeature(featureDepositAuth);
 
 
  145        testcase(
"Set and reset AccountTxnID");
 
  147        using namespace test::jtx;
 
  149        Account 
const alice(
"alice");
 
  150        env.fund(XRP(10000), noripple(alice));
 
  156        BEAST_EXPECT(!env.le(alice)->isFieldPresent(sfAccountTxnID));
 
  158        BEAST_EXPECT(env.le(alice)->isFieldPresent(sfAccountTxnID));
 
  160        BEAST_EXPECT(!env.le(alice)->isFieldPresent(sfAccountTxnID));
 
  162        BEAST_EXPECT(now_flags == orig_flags);
 
 
  170        using namespace test::jtx;
 
  172        Account 
const alice(
"alice");
 
  173        env.fund(XRP(10000), noripple(alice));
 
  175        env(regkey(alice, 
"eric"));
 
 
  191        using namespace test::jtx;
 
  193        Account 
const alice(
"alice");
 
  194        env.fund(XRP(10000), alice);
 
  195        auto jt = 
noop(alice);
 
  203        jt[sfDomain.fieldName] = 
strHex(domain);
 
  205        BEAST_EXPECT((*env.le(alice))[sfDomain] == 
makeSlice(domain));
 
  207        jt[sfDomain.fieldName] = 
"";
 
  209        BEAST_EXPECT(!env.le(alice)->isFieldPresent(sfDomain));
 
  215        for (
std::size_t len = maxLength - 1; len <= maxLength + 1; ++len)
 
  220            BEAST_EXPECT(domain2.
length() == len);
 
  222            jt[sfDomain.fieldName] = 
strHex(domain2);
 
  224            if (len <= maxLength)
 
  227                BEAST_EXPECT((*env.le(alice))[sfDomain] == 
makeSlice(domain2));
 
 
  241        using namespace test::jtx;
 
  243        Account 
const alice(
"alice");
 
  244        env.fund(XRP(10000), alice);
 
  245        auto jt = 
noop(alice);
 
  248        jt[sfMessageKey.fieldName] = 
strHex(rkp.first.slice());
 
  251            strHex((*env.le(alice))[sfMessageKey]) ==
 
  252            strHex(rkp.first.slice()));
 
  254        jt[sfMessageKey.fieldName] = 
"";
 
  256        BEAST_EXPECT(!env.le(alice)->isFieldPresent(sfMessageKey));
 
  258        using namespace std::string_literals;
 
  259        jt[sfMessageKey.fieldName] = 
strHex(
"NOT_REALLY_A_PUBKEY"s);
 
 
  268        using namespace test::jtx;
 
  270        Account 
const alice(
"alice");
 
  271        env.fund(XRP(10000), alice);
 
  272        auto jt = 
noop(alice);
 
  275            "9633EC8AF54F16B5286DB1D7B519EF49EEFC050C0C8AC4384F1D88ACD1BFDF05";
 
  276        jt[sfWalletLocator.fieldName] = locator;
 
  278        BEAST_EXPECT(
to_string((*env.le(alice))[sfWalletLocator]) == locator);
 
  280        jt[sfWalletLocator.fieldName] = 
"";
 
  282        BEAST_EXPECT(!env.le(alice)->isFieldPresent(sfWalletLocator));
 
 
  290        using namespace test::jtx;
 
  292        Account 
const alice(
"alice");
 
  293        env.fund(XRP(10000), alice);
 
  294        auto jt = 
noop(alice);
 
  296        std::string const mh(
"5F31A79367DC3137FADA860C05742EE6");
 
  297        jt[sfEmailHash.fieldName] = mh;
 
  299        BEAST_EXPECT(
to_string((*env.le(alice))[sfEmailHash]) == mh);
 
  301        jt[sfEmailHash.fieldName] = 
"";
 
  303        BEAST_EXPECT(!env.le(alice)->isFieldPresent(sfEmailHash));
 
 
  318        using namespace test::jtx;
 
  319        auto doTests = [
this](
 
  322            Env env(*
this, features);
 
  324            Account 
const alice(
"alice");
 
  325            env.fund(XRP(10000), alice);
 
  327            for (
auto const& r : testData)
 
  329                env(rate(alice, r.set), ter(r.code));
 
  333                if (!(*env.le(alice))[~sfTransferRate])
 
  334                    BEAST_EXPECT(r.get == 1.0);
 
  337                        *(*env.le(alice))[~sfTransferRate] ==
 
  338                        r.get * QUALITY_ONE);
 
  343            testable_amendments(),
 
 
  358        using namespace test::jtx;
 
  360        Account 
const alice(
"alice");
 
  361        Account 
const bob(
"bob");
 
  362        Account 
const gw(
"gateway");
 
  363        auto const USD = gw[
"USD"];
 
  370            env.fund(XRP(10000), gw, alice, bob);
 
  372            env.trust(USD(10), alice, bob);
 
  377            auto const amount = USD(1);
 
  379            auto const amountWithRate =
 
  382            env(pay(gw, alice, USD(10)));
 
  384            env(pay(alice, bob, USD(1)), sendmax(USD(10)));
 
  387            env.require(balance(alice, USD(10) - amountWithRate));
 
  388            env.require(balance(bob, USD(1)));
 
  402            env.fund(XRP(10000), gw, alice, bob);
 
  404            env.trust(USD(10), alice, bob);
 
  418                uint256 const nftId0{token::getNextID(env, gw, 0u)};
 
  419                env(token::mint(gw, 0u));
 
  422                env(token::burn(gw, nftId0));
 
  429            env.app().openLedger().modify(
 
  439                    (*replacement)[sfTransferRate] =
 
  445            auto const amount = USD(1);
 
  449            env(pay(gw, alice, USD(10)));
 
  450            env(pay(alice, bob, amount), sendmax(USD(10)));
 
  452            env.require(balance(alice, USD(10) - amountWithRate));
 
  453            env.require(balance(bob, amount));
 
 
  462        using namespace test::jtx;
 
  464        Account 
const alice(
"alice");
 
  465        env.fund(XRP(10000), alice);
 
 
  505        using namespace test::jtx;
 
  507        Account 
const alice(
"alice");
 
  508        Account 
const bob(
"bob");
 
  510        env.fund(XRP(10000), alice);
 
  517        env(signers(alice, 1, {{bob, 1}}));
 
 
  534        using namespace test::jtx;
 
  536        Account 
const alice(
"alice");
 
  538        env.fund(XRP(10000), alice);
 
  542        env(ticket::create(alice, 1));
 
  544        env.require(owners(alice, 1), tickets(alice, 1));
 
  549        env.require(owners(alice, 1), tickets(alice, 1));
 
  554        env(
noop(alice), ticket::use(ticketSeq));
 
  556        env.require(owners(alice, 0), tickets(alice, 0));
 
  557        BEAST_EXPECT(aliceSeq == env.seq(alice));
 
 
  567        using namespace test::jtx;
 
  570        Account 
const alice(
"alice");
 
  572        env.fund(XRP(10000), alice);
 
  576        if (!BEAST_EXPECT(jtx.stx))
 
  585            BEAST_EXPECT(!result.applied);
 
  586            return result.applied;
 
 
 
A generic endpoint for log messages.
 
testcase_t testcase
Memberspace for declaring test cases.
 
void testNullAccountSet()
 
void testSetAndResetAccountTxnID()
 
void testRequireAuthWithDir()
 
void run() override
Runs the suite.
 
Writable ledger view that accumulates state and tx changes.
 
std::shared_ptr< SLE const > read(Keylet const &k) const override
Return the state item associated with a key.
 
void rawReplace(std::shared_ptr< SLE > const &sle) override
Unconditionally replace a state item.
 
Keylet account(AccountID const &id) noexcept
AccountID root.
 
Keylet ownerDir(AccountID const &id) noexcept
The root page of an account's directory.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
constexpr std::uint32_t tfAllowXRP
 
constexpr std::uint32_t asfGlobalFreeze
 
constexpr std::uint32_t asfDepositAuth
 
constexpr std::uint32_t asfDisallowIncomingNFTokenOffer
 
constexpr std::uint32_t asfAllowTrustLineLocking
 
constexpr std::uint32_t asfRequireDest
 
STAmount toAmount< STAmount >(STAmount const &amt)
 
constexpr std::uint32_t asfAuthorizedNFTokenMinter
 
constexpr std::uint32_t tfOptionalDestTag
 
constexpr std::uint32_t tfAccountSetMask
 
bool set(T &target, std::string const &name, Section const §ion)
Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...
 
STAmount multiply(STAmount const &amount, Rate const &rate)
 
constexpr std::uint32_t asfNoFreeze
 
constexpr std::uint32_t asfDisableMaster
 
bool dirIsEmpty(ReadView const &view, Keylet const &k)
Returns true if the directory is empty.
 
constexpr std::uint32_t asfDisallowIncomingTrustline
 
std::string strHex(FwdIt begin, FwdIt end)
 
constexpr std::uint32_t asfAccountTxnID
 
constexpr std::uint32_t asfDefaultRipple
 
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
 
constexpr std::uint32_t asfDisallowIncomingCheck
 
Rate transferRate(ReadView const &view, AccountID const &issuer)
Returns IOU issuer transfer fee as Rate.
 
constexpr std::uint32_t tfOptionalAuth
 
ApplyResult apply(Application &app, OpenView &view, STTx const &tx, ApplyFlags flags, beast::Journal journal)
Apply a transaction to an OpenView.
 
std::string to_string(base_uint< Bits, Tag > const &a)
 
constexpr std::uint32_t asfDisallowIncomingPayChan
 
T get(Section const §ion, std::string const &name, T const &defaultValue=T{})
Retrieve a key/value pair from a section.
 
std::pair< PublicKey, SecretKey > randomKeyPair(KeyType type)
Create a key pair using secure random numbers.
 
constexpr std::uint32_t asfAllowTrustLineClawback
 
constexpr std::uint32_t asfRequireAuth
 
constexpr std::uint32_t asfDisallowXRP
 
Represents a transfer rate.