xrpld
Loading...
Searching...
No Matches
multisign.h
1#pragma once
2
3#include <test/jtx/Account.h>
4#include <test/jtx/SignerUtils.h>
5#include <test/jtx/amount.h>
6#include <test/jtx/owners.h>
7#include <test/jtx/tags.h>
8
9#include <concepts>
10#include <cstdint>
11#include <optional>
12
13namespace xrpl::test::jtx {
14
27
29signers(Account const& account, std::uint32_t quorum, std::vector<Signer> const& v);
30
33signers(Account const& account, NoneT);
34
35//------------------------------------------------------------------------------
36
38class Msig
39{
40public:
46 SField const* const subField = nullptr;
49 static constexpr SField const* kTopLevel = nullptr;
50
53 {
54 sortSigners(this->signers);
55 }
56
60
64
65 template <class AccountType, class... Accounts>
66 requires std::convertible_to<AccountType, Reg>
67 explicit Msig(SField const* subField, AccountType&& a0, Accounts&&... aN)
68 : Msig{
71 {
72 }
73
74 template <class AccountType, class... Accounts>
75 requires std::convertible_to<AccountType, Reg>
76 explicit Msig(SField const& subField, AccountType&& a0, Accounts&&... aN)
77 : Msig{
78 &subField,
80 {
81 }
82
83 template <class AccountType, class... Accounts>
84 requires(std::convertible_to<AccountType, Reg> && !std::is_same_v<AccountType, SField*>)
85 explicit Msig(AccountType&& a0, Accounts&&... aN)
86 : Msig{
89 {
90 }
91
92 void
93 operator()(Env&, JTx& jt) const;
94};
95
96//------------------------------------------------------------------------------
97
100
101} // namespace xrpl::test::jtx
Represents a JSON value.
Definition json_value.h:130
Identifies fields.
Definition SField.h:130
Immutable cryptographic account descriptor.
Definition jtx/Account.h:17
A transaction testing environment.
Definition Env.h:143
static constexpr SField const * kTopLevel
Used solely as a convenience placeholder for ctors that do not specify a subfield.
Definition multisign.h:49
Msig(AccountType &&a0, Accounts &&... aN)
Definition multisign.h:85
Msig(std::vector< Reg > signers)
Definition multisign.h:61
Msig(SField const &subField, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:76
std::vector< Reg > signers
Definition multisign.h:41
Msig(SField const *subField, std::vector< Reg > signers)
Definition multisign.h:51
Msig(SField const &subField, std::vector< Reg > signers)
Definition multisign.h:57
SField const *const subField
Alternative transaction object field in which to place the signer list.
Definition multisign.h:46
Msig(SField const *subField, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:67
T forward(T... args)
T is_same_v
STL namespace.
OwnerCount< ltSIGNER_LIST > siglists
The number of signer lists matches.
Definition multisign.h:99
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:23
std::optional< uint256 > tag
Definition multisign.h:20
std::uint32_t weight
Definition multisign.h:18
Signer(Account account, std::uint32_t weight=1, std::optional< uint256 > tag=std::nullopt)
Definition multisign.h:22