1#include <test/jtx/batch.h>
3#include <test/jtx/Account.h>
4#include <test/jtx/Env.h>
5#include <test/jtx/JTx.h>
6#include <test/jtx/utility.h>
8#include <xrpl/basics/Number.h>
9#include <xrpl/basics/contract.h>
10#include <xrpl/basics/strHex.h>
11#include <xrpl/json/json_value.h>
12#include <xrpl/json/to_string.h>
13#include <xrpl/protocol/Batch.h>
14#include <xrpl/protocol/Protocol.h>
15#include <xrpl/protocol/PublicKey.h>
16#include <xrpl/protocol/SField.h>
17#include <xrpl/protocol/STAmount.h>
18#include <xrpl/protocol/STObject.h>
19#include <xrpl/protocol/STTx.h>
20#include <xrpl/protocol/SecretKey.h>
21#include <xrpl/protocol/Serializer.h>
22#include <xrpl/protocol/Sign.h>
23#include <xrpl/protocol/XRPAmount.h>
24#include <xrpl/protocol/jss.h>
38 return ((numSigners + 2) * feeDrops) + feeDrops * txns;
44 uint32_t
const& numSigners,
56 jv[jss::TransactionType] = jss::Batch;
57 jv[jss::Account] = account.human();
59 jv[jss::Sequence] = seq;
60 jv[jss::Flags] = flags;
68 auto const index = jt.
jv[jss::RawTransactions].
size();
69 json::Value& batchTransaction = jt.
jv[jss::RawTransactions][index];
73 batchTransaction[jss::RawTransaction] =
txn_;
84 jt.
jv[jss::SigningPubKey] =
"";
92 STTx const& stx =
STTx{std::move(*st)};
93 auto& js = jt[sfBatchSigners.getJsonName()];
96 auto const& e = mySigners[i];
97 auto& jo = js[i][sfBatchSigner.getJsonName()];
98 jo[jss::Account] = e.acct.human();
99 jo[jss::SigningPubKey] =
strHex(e.sig.pk().slice());
105 jo[sfTxnSignature.getJsonName()] =
strHex(
Slice{sig.data(), sig.size()});
112 auto const mySigners =
signers;
117 jt.
jv[jss::SigningPubKey] =
"";
125 STTx const& stx =
STTx{std::move(*st)};
126 auto& bs = jt[sfBatchSigners.getJsonName()];
127 auto const index = jt[sfBatchSigners.jsonName].size();
128 auto& bso = bs[index][sfBatchSigner.getJsonName()];
129 bso[jss::Account] =
master.human();
130 bso[jss::SigningPubKey] =
"";
131 auto& is = bso[sfSigners.getJsonName()];
134 auto const& e = mySigners[i];
135 auto& iso = is[i][sfSigner.getJsonName()];
136 iso[jss::Account] = e.acct.human();
137 iso[jss::SigningPubKey] =
strHex(e.sig.pk().slice());
144 iso[sfTxnSignature.getJsonName()] =
strHex(
Slice{sig.data(), sig.size()});
LogOs< char > log
Logging output stream.
UInt size() const
Number of values in array or object.
std::uint32_t getFlags() const
std::vector< uint256 > const & getBatchTransactionIDs() const
Retrieves a batch of transaction IDs from the STTx.
Slice slice() const noexcept
An immutable linear range of bytes.
Immutable cryptographic account descriptor.
A transaction testing environment.
beast::unit_test::Suite & test
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
void operator()(Env &, JTx &jtx) const
std::vector< Reg > signers
void operator()(Env &, JTx &jt) const
std::vector< Reg > signers
void operator()(Env &, JTx &jt) const
@ Array
array value (ordered list)
Helpers for constructing Batch test transactions.
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.
json::Value outer(jtx::Account const &account, uint32_t seq, STAmount const &fee, std::uint32_t flags)
Build an outer Batch transaction JSON object.
XRPAmount calcBatchFee(jtx::Env const &env, uint32_t const &numSigners, uint32_t const &txns=0)
Calculate the expected outer Batch transaction fee.
STObject parse(json::Value const &jv)
Convert JSON to STObject.
constexpr XRPAmount
Convert XRP to drops (integral types).
std::string strHex(FwdIt begin, FwdIt end)
constexpr std::uint32_t kConfidentialFeeMultiplier
Extra base fee multiplier charged to confidential MPT transactions.
std::string to_string(BaseUInt< Bits, Tag > const &a)
std::optional< KeyType > publicKeyType(Slice const &slice)
Returns the type of public key.
XRPL_NO_SANITIZE_ADDRESS void rethrow()
Rethrow the exception currently being handled.
void finishMultiSigningData(AccountID const &signingID, Serializer &s)
Buffer sign(PublicKey const &pk, SecretKey const &sk, Slice const &message)
Generate a signature for a message.
void serializeBatch(Serializer &msg, std::uint32_t const &flags, std::vector< uint256 > const &txids)
Execution context for applying a JSON transaction.