rippled
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 {
14namespace test {
15namespace jtx {
16
18struct signer
19{
23
25 : weight(weight_), account(std::move(account_)), tag(tag_)
26 {
27 }
28};
29
31signers(Account const& account, std::uint32_t quorum, std::vector<signer> const& v);
32
35signers(Account const& account, none_t);
36
37//------------------------------------------------------------------------------
38
40class msig
41{
42public:
48 SField const* const subField = nullptr;
51 static constexpr SField* const topLevel = nullptr;
52
53 msig(SField const* subField_, std::vector<Reg> signers_)
54 : signers(std::move(signers_)), subField(subField_)
55 {
57 }
58
59 msig(SField const& subField_, std::vector<Reg> signers_) : msig{&subField_, signers_}
60 {
61 }
62
63 msig(std::vector<Reg> signers_) : msig(topLevel, signers_)
64 {
65 }
66
67 template <class AccountType, class... Accounts>
69 explicit msig(SField const* subField_, AccountType&& a0, Accounts&&... aN)
70 : msig{
71 subField_,
73 {
74 }
75
76 template <class AccountType, class... Accounts>
78 explicit msig(SField const& subField_, AccountType&& a0, Accounts&&... aN)
79 : msig{
80 &subField_,
82 {
83 }
84
85 template <class AccountType, class... Accounts>
87 explicit msig(AccountType&& a0, Accounts&&... aN)
88 : msig{
89 topLevel,
91 {
92 }
93
94 void
95 operator()(Env&, JTx& jt) const;
96};
97
98//------------------------------------------------------------------------------
99
102
103} // namespace jtx
104} // namespace test
105} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
Identifies fields.
Definition SField.h:126
Immutable cryptographic account descriptor.
Definition Account.h:19
A transaction testing environment.
Definition Env.h:122
Set a multisignature on a JTx.
Definition multisign.h:41
msig(SField const *subField_, std::vector< Reg > signers_)
Definition multisign.h:53
msig(SField const &subField_, std::vector< Reg > signers_)
Definition multisign.h:59
msig(AccountType &&a0, Accounts &&... aN)
Definition multisign.h:87
msig(std::vector< Reg > signers_)
Definition multisign.h:63
static constexpr SField *const topLevel
Used solely as a convenience placeholder for ctors that do not specify a subfield.
Definition multisign.h:51
SField const *const subField
Alternative transaction object field in which to place the signer list.
Definition multisign.h:48
msig(SField const *subField_, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:69
std::vector< Reg > signers
Definition multisign.h:43
msig(SField const &subField_, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:78
T is_same_v
STL namespace.
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:41
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Execution context for applying a JSON transaction.
Definition JTx.h:25
A signer in a SignerList.
Definition multisign.h:19
std::uint32_t weight
Definition multisign.h:20
signer(Account account_, std::uint32_t weight_=1, std::optional< uint256 > tag_=std::nullopt)
Definition multisign.h:24
std::optional< uint256 > tag
Definition multisign.h:22