xrpld
Loading...
Searching...
No Matches
batch.h
1#pragma once
2
3#include <test/jtx/Account.h>
4#include <test/jtx/Env.h>
5#include <test/jtx/JTx.h>
6#include <test/jtx/SignerUtils.h>
7
8#include <xrpl/json/json_value.h>
9#include <xrpl/protocol/SField.h>
10#include <xrpl/protocol/STAmount.h>
11#include <xrpl/protocol/TxFlags.h>
12#include <xrpl/protocol/XRPAmount.h>
13#include <xrpl/protocol/jss.h>
14
15#include <concepts>
16#include <cstdint>
17#include <optional>
18#include <source_location>
19#include <string>
20#include <utility>
21#include <vector>
22
27
37calcBatchFee(jtx::Env const& env, uint32_t const& numSigners, uint32_t const& txns = 0);
38
50calcConfidentialBatchFee(jtx::Env const& env, uint32_t const& numSigners, uint32_t const& txns = 0);
51
62outer(jtx::Account const& account, uint32_t seq, STAmount const& fee, std::uint32_t flags);
63
78void
80 Env& env,
81 std::string const& batchID,
82 std::string const& txHash,
83 std::string const& txType,
84 std::string const& result,
86
90class Inner
91{
92private:
95
96public:
98 json::Value txn,
99 std::uint32_t const& sequence,
100 std::optional<std::uint32_t> const& ticket = std::nullopt)
101 : txn_(std::move(txn)), ticket_(ticket)
102 {
103 txn_[jss::SigningPubKey] = "";
104 txn_[jss::Sequence] = sequence;
105 txn_[jss::Fee] = "0";
106 txn_[jss::Flags] = txn_[jss::Flags].asUInt() | tfInnerBatchTxn;
107
108 // Optionally set ticket sequence
109 if (ticket_.has_value())
110 {
111 txn_[jss::Sequence] = 0;
112 txn_[sfTicketSequence.jsonName] = *ticket_;
113 }
114 }
115
116 void
117 operator()(Env&, JTx& jtx) const;
118
121 {
122 return txn_[key];
123 }
124
125 void
127 {
128 txn_.removeMember(key);
129 }
130
131 [[nodiscard]] json::Value const&
132 getTxn() const
133 {
134 return txn_;
135 }
136};
137
141class Sig
142{
143public:
145
147 {
149 }
150
151 template <class AccountType, class... Accounts>
152 requires std::convertible_to<AccountType, Reg>
153 explicit Sig(AccountType&& a0, Accounts&&... aN)
154 : signers{std::forward<AccountType>(a0), std::forward<Accounts>(aN)...}
155 {
157 }
158
159 void
160 operator()(Env&, JTx& jt) const;
161};
162
166class Msig
167{
168public:
171
172 Msig(Account masterAccount, std::vector<Reg> s)
173 : master(std::move(masterAccount)), signers(std::move(s))
174 {
176 }
177
178 template <class AccountType, class... Accounts>
179 requires std::convertible_to<AccountType, Reg>
180 explicit Msig(Account masterAccount, AccountType&& a0, Accounts&&... aN)
181 : master(std::move(masterAccount))
182 , signers{std::forward<AccountType>(a0), std::forward<Accounts>(aN)...}
183 {
185 }
186
187 void
188 operator()(Env&, JTx& jt) const;
189};
190
191} // namespace xrpl::test::jtx::batch
Lightweight wrapper to tag static string.
Definition json_value.h:48
Represents a JSON value.
Definition json_value.h:117
Immutable cryptographic account descriptor.
Definition jtx/Account.h:21
A transaction testing environment.
Definition Env.h:161
json::Value & operator[](json::StaticString const &key)
Definition batch.h:120
void removeMember(json::StaticString const &key)
Definition batch.h:126
std::optional< std::uint32_t > ticket_
Definition batch.h:94
void operator()(Env &, JTx &jtx) const
Definition batch.cpp:92
json::Value const & getTxn() const
Definition batch.h:132
Inner(json::Value txn, std::uint32_t const &sequence, std::optional< std::uint32_t > const &ticket=std::nullopt)
Definition batch.h:97
Msig(Account masterAccount, AccountType &&a0, Accounts &&... aN)
Definition batch.h:180
Msig(Account masterAccount, std::vector< Reg > s)
Definition batch.h:172
std::vector< Reg > signers
Definition batch.h:170
void operator()(Env &, JTx &jt) const
Definition batch.cpp:142
Sig(std::vector< Reg > s)
Definition batch.h:146
std::vector< Reg > signers
Definition batch.h:144
Sig(AccountType &&a0, Accounts &&... aN)
Definition batch.h:153
void operator()(Env &, JTx &jt) const
Definition batch.cpp:103
T current(T... args)
STL namespace.
Helpers for constructing Batch test transactions.
Definition batch.h:26
XRPAmount calcConfidentialBatchFee(jtx::Env const &env, uint32_t const &numSigners, uint32_t const &txns=0)
Calculate the expected Batch fee when inner transactions are confidential MPT transactions.
Definition batch.cpp:44
void validateInnerTxn(Env &env, std::string const &batchID, std::string const &txHash, std::string const &txType, std::string const &result, std::source_location const &loc=std::source_location::current())
Expect an inner Batch transaction to be recorded with the given type and result, and with ParentBatch...
Definition batch.cpp:68
json::Value outer(jtx::Account const &account, uint32_t seq, STAmount const &fee, std::uint32_t flags)
Build an outer Batch transaction JSON object.
Definition batch.cpp:55
XRPAmount calcBatchFee(jtx::Env const &env, uint32_t const &numSigners, uint32_t const &txns=0)
Calculate the expected outer Batch transaction fee.
Definition batch.cpp:37
Ticket operations.
Definition ticket.cpp:13
void sortSigners(std::vector< Reg > &signers)
Definition SignerUtils.h:41
constexpr XRPAmount
Convert XRP to drops (integral types).
Definition TxTest.h:54
constexpr FlagValue tfInnerBatchTxn
Definition TxFlags.h:44
Execution context for applying a JSON transaction.
Definition JTx.h:27