xrpld
Loading...
Searching...
No Matches
Env.h
1#pragma once
2
3#include <test/jtx/AbstractClient.h>
4#include <test/jtx/Account.h>
5#include <test/jtx/JTx.h>
6#include <test/jtx/ManualTimeKeeper.h>
7#include <test/jtx/amount.h>
8#include <test/jtx/envconfig.h>
9#include <test/jtx/require.h>
10#include <test/jtx/vault.h>
11#include <test/unit_test/SuiteJournal.h>
12
13#include <xrpld/app/ledger/OpenLedger.h>
14#include <xrpld/app/main/Application.h>
15#include <xrpld/core/Config.h>
16#include <xrpld/rpc/detail/Pathfinder.h>
17
18#include <xrpl/basics/Log.h>
19#include <xrpl/basics/base_uint.h>
20#include <xrpl/basics/chrono.h>
21#include <xrpl/basics/contract.h>
22#include <xrpl/beast/unit_test/suite.h>
23#include <xrpl/beast/utility/Journal.h>
24#include <xrpl/beast/utility/instrumentation.h>
25#include <xrpl/json/json_value.h>
26#include <xrpl/ledger/OpenView.h>
27#include <xrpl/ledger/ReadView.h>
28#include <xrpl/protocol/AccountID.h>
29#include <xrpl/protocol/ApiVersion.h>
30#include <xrpl/protocol/Asset.h>
31#include <xrpl/protocol/ErrorCodes.h>
32#include <xrpl/protocol/Feature.h>
33#include <xrpl/protocol/Issue.h>
34#include <xrpl/protocol/Keylet.h>
35#include <xrpl/protocol/STAmount.h>
36#include <xrpl/protocol/STObject.h>
37#include <xrpl/protocol/STTx.h>
38#include <xrpl/protocol/TER.h>
39
40#include <array>
41#include <chrono>
42#include <cstddef>
43#include <cstdint>
44#include <future>
45#include <initializer_list>
46#include <memory>
47#include <optional>
48#include <source_location>
49#include <stdexcept>
50#include <string>
51#include <thread>
52#include <unordered_map>
53#include <utility>
54#include <vector>
55
56namespace xrpl::test::jtx {
57
67template <class T>
69{
72
73 // Non-explicit constructor allows implicit conversion.
74 // The default argument for loc is evaluated at the call site.
79};
80
84template <class... Args>
85std::array<Account, 1 + sizeof...(Args)>
86noripple(Account const& account, Args const&... args)
87{
88 return {{account, args...}};
89}
90
91inline FeatureBitset
93{
94 static FeatureBitset const kIds = [] {
95 auto const& sa = allAmendments();
97 feats.reserve(sa.size());
98 for (auto const& [s, vote] : sa)
99 {
100 (void)vote;
101 if (auto const f = getRegisteredFeature(s))
102 {
103 feats.push_back(*f);
104 }
105 else
106 {
107 Throw<std::runtime_error>("Unknown feature: " + s + " in allAmendments.");
108 }
109 }
110 return FeatureBitset(feats);
111 }();
112 return kIds;
113}
114
124{
125 std::vector<FeatureBitset> result{seed};
126 for (auto const& f : features)
127 {
128 auto const n = result.size();
129 for (std::size_t i = 0; i < n; ++i)
130 result.push_back(result[i] - f);
131 }
132 return result;
133}
134
135//------------------------------------------------------------------------------
136
137class SuiteLogs : public Logs
138{
140
141public:
142 explicit SuiteLogs(beast::unit_test::Suite& suite) : Logs(beast::Severity::Error), suite_(suite)
143 {
144 }
145
146 ~SuiteLogs() override = default;
147
149 makeSink(std::string const& partition, beast::Severity threshold) override
150 {
152 }
153};
154
155//------------------------------------------------------------------------------
156
160class Env
161{
162public:
164
166
171 {
173 // RPC errors tend to return either a "code" and a "message" (sometimes
174 // with an "error" that corresponds to the "code"), or with an "error"
175 // and an "exception". However, this structure allows all possible
176 // combinations.
181 };
182
183private:
200
202
203public:
205
206 Env() = delete;
207 Env&
208 operator=(Env const&) = delete;
209 Env(Env const&) = delete;
210
225 // VFALCO Could wrap the suite::log in a Journal here
228 FeatureBitset features,
229 std::unique_ptr<Logs> logs = nullptr,
231 : test(suite)
232 , bundle_(suite, std::move(config), std::move(logs), thresh)
233 , journal{bundle_.app->getJournal("Env")}
234 {
237 foreachFeature(features, [&appFeats = app().config().features](UInt256 const& f) {
238 appFeats.insert(f);
239 });
240 }
241
256 FeatureBitset features,
257 std::unique_ptr<Logs> logs = nullptr)
258 : Env(suite, envconfig(), features, std::move(logs))
259 {
260 }
261
276 std::unique_ptr<Logs> logs = nullptr,
278 : Env(suite, std::move(config), testableAmendments(), std::move(logs), thresh)
279 {
280 }
281
292 : Env(suite, envconfig(), nullptr, thresh)
293 {
294 }
295
296 virtual ~Env() = default;
297
299 // NOLINTNEXTLINE(readability-make-member-function-const)
301 {
302 return *bundle_.app;
303 }
304
305 [[nodiscard]] Application const&
306 app() const
307 {
308 return *bundle_.app;
309 }
310
312 // NOLINTNEXTLINE(readability-make-member-function-const)
314 {
315 return *bundle_.timeKeeper;
316 }
317
325 // NOLINTNEXTLINE(readability-make-member-function-const)
327 {
328 return timeKeeper().now();
329 }
330
335 // NOLINTNEXTLINE(readability-make-member-function-const)
337 {
338 return *bundle_.client;
339 }
340
347 template <class... Args>
349 rpc(unsigned apiVersion,
351 std::string const& cmd,
352 Args&&... args);
353
354 template <class... Args>
356 rpc(unsigned apiVersion, std::string const& cmd, Args&&... args);
357
358 template <class... Args>
361 std::string const& cmd,
362 Args&&... args);
363
364 template <class... Args>
366 rpc(std::string const& cmd, Args&&... args);
367
377 current() const
378 {
379 return app().getOpenLedger().current();
380 }
381
391 closed();
392
413 bool
414 close(
415 NetClock::time_point closeTime,
416 std::optional<std::chrono::milliseconds> consensusDelay = std::nullopt);
417
426 template <class Rep, class Period>
427 bool
429 {
430 // VFALCO Is this the correct time?
431 return close(now() + elapsed);
432 }
433
442 bool
444 {
445 // VFALCO Is this the correct time?
446 return close(std::chrono::seconds(5));
447 }
448
478 [[nodiscard]] bool
479 syncClose(std::chrono::steady_clock::duration timeout = std::chrono::seconds{1})
480 {
481 XRPL_ASSERT(
482 app().getNumberOfThreads() == 1,
483 "syncClose() is only useful on an application with a single thread");
484 auto const result = close();
485 return result && drainServerIo(timeout);
486 }
487
513 [[nodiscard]] bool
514 disconnectClient(std::chrono::steady_clock::duration timeout = std::chrono::seconds{1})
515 {
516 XRPL_ASSERT(
517 app().getNumberOfThreads() == 1,
518 "disconnectClient() is only useful on an application with a single "
519 "thread");
520
521 bundle_.client->disconnect();
522
523 // Drain the server's single io thread twice: the first barrier flushes
524 // the reactor's reap of the closed socket (queuing the peer teardown),
525 // the second flushes that teardown - and therefore the connection-count
526 // decrement. Both run unconditionally so a timed-out first drain does
527 // not short-circuit the second.
528 bool const reaped = drainServerIo(timeout);
529 bool const toreDown = drainServerIo(timeout);
530 return reaped && toreDown;
531 }
532
537 void
538 trace(int howMany = -1)
539 {
540 trace_ = howMany;
541 }
542
546 void
548 {
549 trace_ = 0;
550 }
551
552 void
554 {
556 }
557
564 {
566 bool const oldExpected_;
567
568 public:
569 ParseFailureGuard(Env& self, bool b)
571 {
572 self_.setParseFailureExpected(b);
573 }
574
576 {
577 self_.setParseFailureExpected(oldExpected_);
578 }
579
580 // No copy, no move
583 operator=(ParseFailureGuard const&) = delete;
587 };
588
595 [[nodiscard]] ParseFailureGuard
597 {
598 return ParseFailureGuard{*this, b};
599 }
600
604 void
606 {
607 app().checkSigs(false);
608 }
609
610 // set rpc retries
611 void
612 setRetries(unsigned r = 5)
613 {
614 retries_ = r;
615 }
616
617 // get rpc retries
618 [[nodiscard]] unsigned
619 retries() const
620 {
621 return retries_;
622 }
623
627 void
628 memoize(Account const& account);
629
634 [[nodiscard]] Account const&
635 lookup(AccountID const& id) const;
636
637 [[nodiscard]] Account const&
638 lookup(std::string const& base58ID) const;
640
645 [[nodiscard]] PrettyAmount
646 balance(Account const& account) const;
647
653 [[nodiscard]] std::uint32_t
654 seq(Account const& account) const;
655
660 // VFALCO NOTE This should return a unit-less amount
661 [[nodiscard]] PrettyAmount
662 balance(Account const& account, Asset const& asset) const;
663
668 [[nodiscard]] PrettyAmount
669 limit(Account const& account, Issue const& issue) const;
670
675 [[nodiscard]] std::uint32_t
676 ownerCount(Account const& account) const;
677
683 [[nodiscard]] std::uint32_t
684 sponsoredOwnerCount(Account const& account) const;
685
691 [[nodiscard]] std::uint32_t
692 sponsoringOwnerCount(Account const& account) const;
693
699 [[nodiscard]] std::uint32_t
700 sponsoringAccountCount(Account const& account) const;
701
707 [[nodiscard]] SLE::const_pointer
708 le(Account const& account) const;
709
715 [[nodiscard]] SLE::const_pointer
716 le(Keylet const& k) const;
717
721 template <class JsonValue, class... FN>
722 JTx
723 jt(JsonValue&& jv, FN const&... fN)
724 {
726 invoke(jt, fN...);
727 autofill(jt);
728 jt.stx = st(jt);
729 return jt;
730 }
731
735 template <class JsonValue, class... FN>
736 JTx
737 jtnofill(JsonValue&& jv, FN const&... fN)
738 {
740 invoke(jt, fN...);
742 jt.stx = st(jt);
743 return jt;
744 }
745
750 template <class JsonValue, class... FN>
752 json(JsonValue&& jv, FN const&... fN)
753 {
754 auto tj = jt(std::forward<JsonValue>(jv), fN...);
755 return std::move(tj.jv);
756 }
757
764 template <class... Args>
765 void
766 require(Args const&... args)
767 {
768 jtx::required(args...)(*this);
769 }
770
774 static ParsedResult
775 parseResult(json::Value const& jr);
776
781 virtual void
783
788 void
790 JTx const& jt,
793
798 void
800 JTx const& jt,
801 ParsedResult const& parsed,
802 json::Value const& jr = json::Value(),
804
809 template <class... FN>
810 Env&
812 {
813 submit(jt(std::move(jv.value), fN...), jv.loc);
814 return *this;
815 }
816
817 template <class... FN>
818 Env&
819 apply(WithSourceLocation<JTx> jv, FN const&... fN)
820 {
821 submit(jt(std::move(jv.value), fN...), jv.loc);
822 return *this;
823 }
824
825 template <class... FN>
826 Env&
828 {
829 return apply(std::move(jv), fN...);
830 }
831
832 template <class... FN>
833 Env&
835 {
836 return apply(std::move(jv), fN...);
837 }
838
839
843 [[nodiscard]] TER
844 ter() const
845 {
846 return ter_;
847 }
848
862 meta();
863
876 [[nodiscard]] std::shared_ptr<STTx const>
877 tx() const;
878
879 void
880 enableFeature(UInt256 const feature);
881
882 void
883 disableFeature(UInt256 const feature);
884
885 [[nodiscard]] bool
886 enabled(UInt256 feature) const
887 {
888 return current()->rules().enabled(feature);
889 }
890
891private:
902 [[nodiscard]] bool
903 drainServerIo(std::chrono::steady_clock::duration timeout)
904 {
905 auto barrier = std::make_shared<std::promise<void>>();
906 auto future = barrier->get_future();
907 boost::asio::post(app().getIOContext(), [barrier]() { barrier->set_value(); });
908 return future.wait_for(timeout) == std::future_status::ready;
909 }
910
911 void
912 fund(bool setDefaultRipple, STAmount const& amount, Account const& account);
913
914 void
915 fundArg(STAmount const& amount, Account const& account)
916 {
917 fund(true, amount, account);
918 }
919
920 template <std::size_t N>
921 void
922 fundArg(STAmount const& amount, std::array<Account, N> const& list)
923 {
924 for (auto const& account : list)
925 fund(false, amount, account);
926 }
927
928public:
956 template <class Arg, class... Args>
957 void
958 fund(STAmount const& amount, Arg const& arg, Args const&... args)
959 {
960 fundArg(amount, arg);
961 if constexpr (sizeof...(args) > 0)
962 fund(amount, args...);
963 }
964
984 void
985 trust(STAmount const& amount, Account const& account);
986
987 template <class... Accounts>
988 void
989 trust(STAmount const& amount, Account const& to0, Account const& to1, Accounts const&... toN)
990 {
991 trust(amount, to0);
992 trust(amount, to1, toN...); // NOLINT(readability-suspicious-call-argument)
993 }
994
995
1002 ust(JTx const& jt);
1003
1004protected:
1005 int trace_ = 0;
1010 unsigned retries_ = 5;
1011
1013 doRpc(
1014 unsigned apiVersion,
1015 std::vector<std::string> const& args,
1017
1018 void
1019 autofillSig(JTx& jt);
1020
1021 virtual void
1022 autofill(JTx& jt);
1023
1033 st(JTx const& jt);
1034
1035 // Invoke funclets on stx
1036 // Note: The STTx may not be modified
1037 template <class... FN>
1038 void
1039 invoke(STTx& stx, FN const&... fN)
1040 {
1041 (fN(*this, stx), ...);
1042 }
1043
1044 // Invoke funclets on jt
1045 template <class... FN>
1046 void
1047 invoke(JTx& jt, FN const&... fN)
1048 {
1049 (fN(*this, jt), ...);
1050 }
1051
1052 // Map of account IDs to Account
1054};
1055
1056template <class... Args>
1059 unsigned apiVersion,
1061 std::string const& cmd,
1062 Args&&... args)
1063{
1064 return doRpc(apiVersion, std::vector<std::string>{cmd, std::forward<Args>(args)...}, headers);
1065}
1066
1067template <class... Args>
1069Env::rpc(unsigned apiVersion, std::string const& cmd, Args&&... args)
1070{
1071 return rpc(
1072 apiVersion,
1074 cmd,
1075 std::forward<Args>(args)...);
1076}
1077
1078template <class... Args>
1082 std::string const& cmd,
1083 Args&&... args)
1084{
1085 return doRpc(
1088 headers);
1089}
1090
1091template <class... Args>
1093Env::rpc(std::string const& cmd, Args&&... args)
1094{
1096}
1097
1098} // namespace xrpl::test::jtx
A generic endpoint for log messages.
Definition Journal.h:44
A testsuite class.
Definition suite.h:52
Represents a JSON value.
Definition json_value.h:117
virtual bool checkSigs() const =0
A currency issued by an account.
Definition Issue.h:18
beast::Severity threshold() const
Definition Log.cpp:143
Logs(beast::Severity level)
Definition Log.cpp:112
std::chrono::time_point< NetClock > time_point
Definition chrono.h:48
std::shared_ptr< OpenView const > current() const
Returns a view to the current open ledger.
static void initPathTable()
std::shared_ptr< STLedgerEntry const > const_pointer
virtual OpenLedger & getOpenLedger()=0
time_point now() const override
Returns the current time.
Immutable cryptographic account descriptor.
Definition jtx/Account.h:21
static Account const kMaster
The master account.
Definition jtx/Account.h:32
RAII class to set and restore the parse failure flag (setParseFailureExpected).
Definition Env.h:564
ParseFailureGuard & operator=(ParseFailureGuard const &)=delete
ParseFailureGuard & operator=(ParseFailureGuard &&)=delete
ParseFailureGuard(ParseFailureGuard &&other)=delete
ParseFailureGuard(ParseFailureGuard const &)=delete
ParseFailureGuard(Env &self, bool b)
Definition Env.h:569
A transaction testing environment.
Definition Env.h:161
Application & app()
Definition Env.h:300
bool close(std::chrono::duration< Rep, Period > const &elapsed)
Close and advance the ledger.
Definition Env.h:428
void notrace()
Turn off JSON tracing.
Definition Env.h:547
bool syncClose(std::chrono::steady_clock::duration timeout=std::chrono::seconds{1})
Close and advance the ledger, then synchronize with the server's io_context to ensure all async opera...
Definition Env.h:479
std::shared_ptr< STTx const > st(JTx const &jt)
Create a STTx from a JTx The framework requires that JSON is valid.
Definition Env.cpp:638
TER ter() const
Return the TER for the last JTx.
Definition Env.h:844
std::uint32_t sponsoringAccountCount(Account const &account) const
Return the number of sponsoring accounts owned by an account.
Definition Env.cpp:293
void invoke(JTx &jt, FN const &... fN)
Definition Env.h:1047
void setRetries(unsigned r=5)
Definition Env.h:612
void disableSigs()
Turn off signature checks.
Definition Env.h:605
std::uint32_t sponsoringOwnerCount(Account const &account) const
Return the number of sponsoring objects owned by an account.
Definition Env.cpp:284
Env(Env const &)=delete
void fund(STAmount const &amount, Arg const &arg, Args const &... args)
Create a new account with some XRP.
Definition Env.h:958
Env(beast::unit_test::Suite &suite, FeatureBitset features, std::unique_ptr< Logs > logs=nullptr)
Create Env with default config and specified features.
Definition Env.h:255
Env(beast::unit_test::Suite &suite, beast::Severity thresh=beast::Severity::Error)
Create Env with only the current test suite.
Definition Env.h:291
Env(beast::unit_test::Suite &suite, std::unique_ptr< Config > config, std::unique_ptr< Logs > logs=nullptr, beast::Severity thresh=beast::Severity::Error)
Create Env using suite and Config pointer.
Definition Env.h:274
Env & operator()(WithSourceLocation< JTx > jv, FN const &... fN)
Definition Env.h:834
json::Value json(JsonValue &&jv, FN const &... fN)
Create JSON from parameters.
Definition Env.h:752
SLE::const_pointer le(Account const &account) const
Return an account root.
Definition Env.cpp:311
std::uint32_t ownerCount(Account const &account) const
Return the number of objects owned by an account.
Definition Env.cpp:266
bool enabled(UInt256 feature) const
Definition Env.h:886
void fundArg(STAmount const &amount, std::array< Account, N > const &list)
Definition Env.h:922
AppBundle bundle_
Definition Env.h:201
std::shared_ptr< ReadView const > closed()
Returns the last closed ledger.
Definition Env.cpp:127
static ParsedResult parseResult(json::Value const &jr)
Gets the TER result and didApply flag from a RPC Json result object.
Definition Env.cpp:373
Account const & lookup(AccountID const &id) const
Returns the Account given the AccountID.
Definition Env.cpp:180
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
Definition Env.cpp:323
virtual void submit(JTx const &jt, std::source_location const &loc=std::source_location::current())
Submit an existing JTx.
Definition Env.cpp:414
Env(beast::unit_test::Suite &suite, std::unique_ptr< Config > config, FeatureBitset features, std::unique_ptr< Logs > logs=nullptr, beast::Severity thresh=beast::Severity::Error)
Create Env using suite, Config pointer, and explicit features.
Definition Env.h:226
ParseFailureGuard getParseFailureGuard(bool b)
Gets an RAII guard to set and restore the parse failure flag.
Definition Env.h:596
Env & apply(WithSourceLocation< JTx > jv, FN const &... fN)
Definition Env.h:819
bool disconnectClient(std::chrono::steady_clock::duration timeout=std::chrono::seconds{1})
Disconnect the Env's built-in client and wait for the server to register the dropped connection.
Definition Env.h:514
PrettyAmount limit(Account const &account, Issue const &issue) const
Returns the IOU limit on an account.
Definition Env.cpp:254
json::Value doRpc(unsigned apiVersion, std::vector< std::string > const &args, std::unordered_map< std::string, std::string > const &headers={})
Definition Env.cpp:690
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition Env.cpp:302
virtual void autofill(JTx &jt)
Definition Env.cpp:609
void postconditions(JTx const &jt, ParsedResult const &parsed, json::Value const &jr=json::Value(), std::source_location const &loc=std::source_location::current())
Check expected postconditions of JTx submission.
Definition Env.cpp:480
bool close()
Close and advance the ledger.
Definition Env.h:443
Account const & master
Definition Env.h:165
json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
Definition Env.h:1058
void setParseFailureExpected(bool b)
Definition Env.h:553
Application const & app() const
Definition Env.h:306
void autofillSig(JTx &jt)
Definition Env.cpp:566
void signAndSubmit(JTx const &jt, json::Value params=json::ValueType::Null, std::source_location const &loc=std::source_location::current())
Use the submit RPC command with a provided JTx object.
Definition Env.cpp:442
Env & operator()(WithSourceLocation< json::Value > jv, FN const &... fN)
Definition Env.h:827
JTx jt(JsonValue &&jv, FN const &... fN)
Create a JTx from parameters.
Definition Env.h:723
std::uint32_t sponsoredOwnerCount(Account const &account) const
Return the number of sponsored objects owned by an account.
Definition Env.cpp:275
PrettyAmount balance(Account const &account) const
Returns the XRP balance on an account.
Definition Env.cpp:201
virtual ~Env()=default
unsigned retries_
Definition Env.h:1010
beast::unit_test::Suite & test
Definition Env.h:163
void trust(STAmount const &amount, Account const &to0, Account const &to1, Accounts const &... toN)
Definition Env.h:989
unsigned retries() const
Definition Env.h:619
void disableFeature(UInt256 const feature)
Definition Env.cpp:717
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
Definition Env.cpp:354
void enableFeature(UInt256 const feature)
Definition Env.cpp:709
std::shared_ptr< STTx const > ust(JTx const &jt)
Create a STTx from a JTx without sanitizing Use to inject bogus values into test transactions by firs...
Definition Env.cpp:664
std::shared_ptr< STObject const > meta()
Return metadata for the last JTx.
Definition Env.cpp:538
Env & apply(WithSourceLocation< json::Value > jv, FN const &... fN)
Apply funclets and submit.
Definition Env.h:811
JTx jtnofill(JsonValue &&jv, FN const &... fN)
Create a JTx from parameters.
Definition Env.h:737
void invoke(STTx &stx, FN const &... fN)
Definition Env.h:1039
std::unordered_map< AccountID, Account > map_
Definition Env.h:1053
void fundArg(STAmount const &amount, Account const &account)
Definition Env.h:915
TestStopwatch stopwatch_
Definition Env.h:1006
ManualTimeKeeper & timeKeeper()
Definition Env.h:313
bool parseFailureExpected_
Definition Env.h:1009
std::shared_ptr< STTx const > tx() const
Return the tx data for the last JTx.
Definition Env.cpp:560
bool drainServerIo(std::chrono::steady_clock::duration timeout)
Drain the (single) server io_context thread once.
Definition Env.h:903
Env & operator=(Env const &)=delete
void memoize(Account const &account)
Associate AccountID with account.
Definition Env.cpp:174
beast::Journal const journal
Definition Env.h:204
AbstractClient & client()
Returns the connected client.
Definition Env.h:336
void require(Args const &... args)
Check a set of requirements.
Definition Env.h:766
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
Definition Env.h:377
NetClock::time_point now()
Returns the current network time.
Definition Env.h:326
void trace(int howMany=-1)
Turn on JSON tracing.
Definition Env.h:538
~SuiteLogs() override=default
beast::unit_test::Suite & suite_
Definition Env.h:139
SuiteLogs(beast::unit_test::Suite &suite)
Definition Env.h:142
std::unique_ptr< beast::Journal::Sink > makeSink(std::string const &partition, beast::Severity threshold) override
Definition Env.h:149
T current(T... args)
T forward(T... args)
T make_shared(T... args)
T make_unique(T... args)
Severity
Severity level / threshold of a Journal message.
Definition Journal.h:16
@ Null
'null' value
Definition json_value.h:22
STL namespace.
API version numbers used in later API versions.
Definition ApiVersion.h:36
static constexpr auto kApiCommandLineVersion
Definition ApiVersion.h:45
RequireT required(Args const &... args)
Compose many condition functors into one.
Definition require.h:31
std::vector< FeatureBitset > amendmentCombinations(std::initializer_list< UInt256 > features, FeatureBitset seed)
Returns all 2^N permutations of a seed FeatureBitset with each subset of the given features excluded.
Definition Env.h:123
FeatureBitset testableAmendments()
Definition Env.h:92
std::array< Account, 1+sizeof...(Args)> noripple(Account const &account, Args const &... args)
Designate accounts as no-ripple in Env::fund.
Definition Env.h:86
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
Definition envconfig.h:38
std::optional< UInt256 > getRegisteredFeature(std::string const &name)
void foreachFeature(FeatureBitset bs, F &&f)
Definition Feature.h:383
BaseUInt< 256 > UInt256
Definition base_uint.h:580
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:34
std::map< std::string, AmendmentSupport > const & allAmendments()
All amendments libxrpl knows about.
TERSubset< CanCvtToTER > TER
Definition TER.h:654
beast::ManualClock< std::chrono::steady_clock > TestStopwatch
A manual Stopwatch for unit tests.
Definition chrono.h:95
@ tesSUCCESS
Definition TER.h:250
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:52
T push_back(T... args)
T reserve(T... args)
T size(T... args)
A pair of SHAMap key and LedgerEntryType.
Definition Keylet.h:20
ManualTimeKeeper * timeKeeper
Definition Env.h:188
std::unique_ptr< AbstractClient > client
Definition Env.h:190
std::unique_ptr< Application > owned
Definition Env.h:187
Used by parseResult() and postConditions().
Definition Env.h:171
std::optional< TER > ter
Definition Env.h:172
std::optional< ErrorCodeI > rpcCode
Definition Env.h:177
Execution context for applying a JSON transaction.
Definition JTx.h:27
Represents an XRP, IOU, or MPT quantity This customizes the string conversion and supports XRP conver...
Wrapper that captures std::source_location when implicitly constructed.
Definition Env.h:69
WithSourceLocation(T v, std::source_location l=std::source_location::current())
Definition Env.h:75
std::source_location loc
Definition Env.h:71