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 <utility>
19#include <vector>
20
25
35calcBatchFee(jtx::Env const& env, uint32_t const& numSigners, uint32_t const& txns = 0);
36
48calcConfidentialBatchFee(jtx::Env const& env, uint32_t const& numSigners, uint32_t const& txns = 0);
49
60outer(jtx::Account const& account, uint32_t seq, STAmount const& fee, std::uint32_t flags);
61
65class Inner
66{
67private:
70
71public:
73 json::Value txn,
74 std::uint32_t const& sequence,
75 std::optional<std::uint32_t> const& ticket = std::nullopt)
76 : txn_(std::move(txn)), ticket_(ticket)
77 {
78 txn_[jss::SigningPubKey] = "";
79 txn_[jss::Sequence] = sequence;
80 txn_[jss::Fee] = "0";
81 txn_[jss::Flags] = txn_[jss::Flags].asUInt() | tfInnerBatchTxn;
82
83 // Optionally set ticket sequence
84 if (ticket_.has_value())
85 {
86 txn_[jss::Sequence] = 0;
87 txn_[sfTicketSequence.jsonName] = *ticket_;
88 }
89 }
90
91 void
92 operator()(Env&, JTx& jtx) const;
93
96 {
97 return txn_[key];
98 }
99
100 void
102 {
103 txn_.removeMember(key);
104 }
105
106 [[nodiscard]] json::Value const&
107 getTxn() const
108 {
109 return txn_;
110 }
111};
112
116class Sig
117{
118public:
120
122 {
124 }
125
126 template <class AccountType, class... Accounts>
127 requires std::convertible_to<AccountType, Reg>
128 explicit Sig(AccountType&& a0, Accounts&&... aN)
129 : signers{std::forward<AccountType>(a0), std::forward<Accounts>(aN)...}
130 {
132 }
133
134 void
135 operator()(Env&, JTx& jt) const;
136};
137
141class Msig
142{
143public:
146
147 Msig(Account masterAccount, std::vector<Reg> s)
148 : master(std::move(masterAccount)), signers(std::move(s))
149 {
151 }
152
153 template <class AccountType, class... Accounts>
154 requires std::convertible_to<AccountType, Reg>
155 explicit Msig(Account masterAccount, AccountType&& a0, Accounts&&... aN)
156 : master(std::move(masterAccount))
157 , signers{std::forward<AccountType>(a0), std::forward<Accounts>(aN)...}
158 {
160 }
161
162 void
163 operator()(Env&, JTx& jt) const;
164};
165
166} // 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:95
void removeMember(json::StaticString const &key)
Definition batch.h:101
std::optional< std::uint32_t > ticket_
Definition batch.h:69
void operator()(Env &, JTx &jtx) const
Definition batch.cpp:66
json::Value const & getTxn() const
Definition batch.h:107
Inner(json::Value txn, std::uint32_t const &sequence, std::optional< std::uint32_t > const &ticket=std::nullopt)
Definition batch.h:72
Msig(Account masterAccount, AccountType &&a0, Accounts &&... aN)
Definition batch.h:155
Msig(Account masterAccount, std::vector< Reg > s)
Definition batch.h:147
std::vector< Reg > signers
Definition batch.h:145
void operator()(Env &, JTx &jt) const
Definition batch.cpp:116
Sig(AccountType &&a0, Accounts &&... aN)
Definition batch.h:128
Sig(std::vector< Reg > s)
Definition batch.h:121
std::vector< Reg > signers
Definition batch.h:119
void operator()(Env &, JTx &jt) const
Definition batch.cpp:77
STL namespace.
Helpers for constructing Batch test transactions.
Definition batch.h:24
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:42
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:53
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:35
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