xrpld
Loading...
Searching...
No Matches
multisign.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#include <test/jtx/owners.h>
8#include <test/jtx/tags.h>
9
10#include <xrpl/basics/base_uint.h>
11#include <xrpl/json/json_value.h>
12#include <xrpl/protocol/LedgerFormats.h>
13#include <xrpl/protocol/SField.h>
14
15#include <concepts>
16#include <cstdint>
17#include <optional>
18#include <utility>
19#include <vector>
20
21namespace xrpl::test::jtx {
22
37
39signers(Account const& account, std::uint32_t quorum, std::vector<Signer> const& v);
40
45signers(Account const& account, NoneT);
46
47//------------------------------------------------------------------------------
48
52class Msig
53{
54public:
61 SField const* const subField = nullptr;
66 static constexpr SField const* kTopLevel = nullptr;
67
70 {
71 sortSigners(this->signers);
72 }
73
77
81
82 template <class AccountType, class... Accounts>
83 requires std::convertible_to<AccountType, Reg>
84 explicit Msig(SField const* subField, AccountType&& a0, Accounts&&... aN)
85 : Msig{
88 {
89 }
90
91 template <class AccountType, class... Accounts>
92 requires std::convertible_to<AccountType, Reg>
93 explicit Msig(SField const& subField, AccountType&& a0, Accounts&&... aN)
94 : Msig{
95 &subField,
97 {
98 }
99
100 template <class AccountType, class... Accounts>
101 requires(std::convertible_to<AccountType, Reg> && !std::is_same_v<AccountType, SField*>)
102 explicit Msig(AccountType&& a0, Accounts&&... aN)
103 : Msig{
104 kTopLevel,
106 {
107 }
108
109 void
110 operator()(Env&, JTx& jt) const;
111};
112
113//------------------------------------------------------------------------------
114
119
120} // namespace xrpl::test::jtx
Represents a JSON value.
Definition json_value.h:117
Identifies fields.
Definition SField.h:132
Immutable cryptographic account descriptor.
Definition jtx/Account.h:21
A transaction testing environment.
Definition Env.h:161
static constexpr SField const * kTopLevel
Used solely as a convenience placeholder for ctors that do not specify a subfield.
Definition multisign.h:66
Msig(AccountType &&a0, Accounts &&... aN)
Definition multisign.h:102
Msig(std::vector< Reg > signers)
Definition multisign.h:78
Msig(SField const &subField, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:93
std::vector< Reg > signers
Definition multisign.h:55
Msig(SField const *subField, std::vector< Reg > signers)
Definition multisign.h:68
Msig(SField const &subField, std::vector< Reg > signers)
Definition multisign.h:74
SField const *const subField
Alternative transaction object field in which to place the signer list.
Definition multisign.h:61
Msig(SField const *subField, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:84
T forward(T... args)
T is_same_v
STL namespace.
OwnerCount< ltSIGNER_LIST > siglists
The number of signer lists matches.
Definition multisign.h:118
json::Value signers(Account const &account, std::uint32_t quorum, std::vector< Signer > const &v)
Definition multisign.cpp:31
void sortSigners(std::vector< Reg > &signers)
Definition SignerUtils.h:41
Execution context for applying a JSON transaction.
Definition JTx.h:27
std::optional< uint256 > tag
Definition multisign.h:30
std::uint32_t weight
Definition multisign.h:28
Signer(Account account, std::uint32_t weight=1, std::optional< uint256 > tag=std::nullopt)
Definition multisign.h:32