rippled
Loading...
Searching...
No Matches
multisign.h
1#ifndef XRPL_TEST_JTX_MULTISIGN_H_INCLUDED
2#define XRPL_TEST_JTX_MULTISIGN_H_INCLUDED
3
4#include <test/jtx/Account.h>
5#include <test/jtx/SignerUtils.h>
6#include <test/jtx/amount.h>
7#include <test/jtx/owners.h>
8#include <test/jtx/tags.h>
9
10#include <concepts>
11#include <cstdint>
12#include <optional>
13
14namespace ripple {
15namespace test {
16namespace jtx {
17
19struct signer
20{
24
26 Account account_,
27 std::uint32_t weight_ = 1,
29 : weight(weight_), account(std::move(account_)), tag(std::move(tag_))
30 {
31 }
32};
33
36 Account const& account,
37 std::uint32_t quorum,
38 std::vector<signer> const& v);
39
42signers(Account const& account, none_t);
43
44//------------------------------------------------------------------------------
45
47class msig
48{
49public:
55 SField const* const subField = nullptr;
58 static constexpr SField* const topLevel = nullptr;
59
60 msig(SField const* subField_, std::vector<Reg> signers_)
61 : signers(std::move(signers_)), subField(subField_)
62 {
64 }
65
66 msig(SField const& subField_, std::vector<Reg> signers_)
67 : msig{&subField_, signers_}
68 {
69 }
70
71 msig(std::vector<Reg> signers_) : msig(topLevel, signers_)
72 {
73 }
74
75 template <class AccountType, class... Accounts>
77 explicit msig(SField const* subField_, AccountType&& a0, Accounts&&... aN)
78 : msig{
79 subField_,
80 std::vector<Reg>{
83 {
84 }
85
86 template <class AccountType, class... Accounts>
88 explicit msig(SField const& subField_, AccountType&& a0, Accounts&&... aN)
89 : msig{
90 &subField_,
91 std::vector<Reg>{
94 {
95 }
96
97 template <class AccountType, class... Accounts>
98 requires(
101 explicit msig(AccountType&& a0, Accounts&&... aN)
102 : msig{
103 topLevel,
107 {
108 }
109
110 void
111 operator()(Env&, JTx& jt) const;
112};
113
114//------------------------------------------------------------------------------
115
118
119} // namespace jtx
120} // namespace test
121} // namespace ripple
122
123#endif
Represents a JSON value.
Definition json_value.h:130
Identifies fields.
Definition SField.h:127
Immutable cryptographic account descriptor.
Definition Account.h:20
A transaction testing environment.
Definition Env.h:102
Set a multisignature on a JTx.
Definition multisign.h:48
msig(AccountType &&a0, Accounts &&... aN)
Definition multisign.h:101
SField const *const subField
Alternative transaction object field in which to place the signer list.
Definition multisign.h:55
msig(SField const *subField_, std::vector< Reg > signers_)
Definition multisign.h:60
msig(SField const &subField_, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:88
msig(SField const &subField_, std::vector< Reg > signers_)
Definition multisign.h:66
msig(SField const *subField_, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:77
static constexpr SField *const topLevel
Used solely as a convenience placeholder for ctors that do not specify a subfield.
Definition multisign.h:58
msig(std::vector< Reg > signers_)
Definition multisign.h:71
std::vector< Reg > signers
Definition multisign.h:50
T is_same_v
Json::Value signers(Account const &account, std::uint32_t quorum, std::vector< signer > const &v)
Definition multisign.cpp:15
void sortSigners(std::vector< Reg > &signers)
Definition SignerUtils.h:44
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
STL namespace.
Execution context for applying a JSON transaction.
Definition JTx.h:26
A signer in a SignerList.
Definition multisign.h:20
std::optional< uint256 > tag
Definition multisign.h:23
signer(Account account_, std::uint32_t weight_=1, std::optional< uint256 > tag_=std::nullopt)
Definition multisign.h:25