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(std::move(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_) : signers(std::move(signers_)), subField(subField_)
54 {
56 }
57
58 msig(SField const& subField_, std::vector<Reg> signers_) : msig{&subField_, signers_}
59 {
60 }
61
62 msig(std::vector<Reg> signers_) : msig(topLevel, signers_)
63 {
64 }
65
66 template <class AccountType, class... Accounts>
68 explicit msig(SField const* subField_, AccountType&& a0, Accounts&&... aN)
69 : msig{subField_, std::vector<Reg>{std::forward<AccountType>(a0), std::forward<Accounts>(aN)...}}
70 {
71 }
72
73 template <class AccountType, class... Accounts>
75 explicit msig(SField const& subField_, AccountType&& a0, Accounts&&... aN)
76 : msig{&subField_, std::vector<Reg>{std::forward<AccountType>(a0), std::forward<Accounts>(aN)...}}
77 {
78 }
79
80 template <class AccountType, class... Accounts>
82 explicit msig(AccountType&& a0, Accounts&&... aN)
84 {
85 }
86
87 void
88 operator()(Env&, JTx& jt) const;
89};
90
91//------------------------------------------------------------------------------
92
95
96} // namespace jtx
97} // namespace test
98} // 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:119
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:58
msig(AccountType &&a0, Accounts &&... aN)
Definition multisign.h:82
msig(std::vector< Reg > signers_)
Definition multisign.h:62
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:68
std::vector< Reg > signers
Definition multisign.h:43
msig(SField const &subField_, AccountType &&a0, Accounts &&... aN)
Definition multisign.h:75
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