rippled
multisign.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_TEST_JTX_MULTISIGN_H_INCLUDED
21 #define RIPPLE_TEST_JTX_MULTISIGN_H_INCLUDED
22 
23 #include <cstdint>
24 #include <optional>
25 #include <test/jtx/Account.h>
26 #include <test/jtx/amount.h>
27 #include <test/jtx/owners.h>
28 #include <test/jtx/tags.h>
29 
30 namespace ripple {
31 namespace test {
32 namespace jtx {
33 
35 struct signer
36 {
40 
42  Account account_,
43  std::uint32_t weight_ = 1,
44  std::optional<uint256> tag_ = std::nullopt)
45  : weight(weight_), account(std::move(account_)), tag(std::move(tag_))
46  {
47  }
48 };
49 
51 signers(
52  Account const& account,
53  std::uint32_t quorum,
54  std::vector<signer> const& v);
55 
58 signers(Account const& account, none_t);
59 
60 //------------------------------------------------------------------------------
61 
63 class msig
64 {
65 public:
66  struct Reg
67  {
70 
71  Reg(Account const& masterSig) : acct(masterSig), sig(masterSig)
72  {
73  }
74 
75  Reg(Account const& acct_, Account const& regularSig)
76  : acct(acct_), sig(regularSig)
77  {
78  }
79 
80  Reg(char const* masterSig) : acct(masterSig), sig(masterSig)
81  {
82  }
83 
84  Reg(char const* acct_, char const* regularSig)
85  : acct(acct_), sig(regularSig)
86  {
87  }
88 
89  bool
90  operator<(Reg const& rhs) const
91  {
92  return acct < rhs.acct;
93  }
94  };
95 
97 
98 public:
99  msig(std::vector<Reg> signers_);
100 
101  template <class AccountType, class... Accounts>
102  explicit msig(AccountType&& a0, Accounts&&... aN)
104  std::forward<AccountType>(a0),
105  std::forward<Accounts>(aN)...}}
106  {
107  }
108 
109  void
110  operator()(Env&, JTx& jt) const;
111 };
112 
113 //------------------------------------------------------------------------------
114 
117 
118 } // namespace jtx
119 } // namespace test
120 } // namespace ripple
121 
122 #endif
ripple::test::jtx::msig::Reg::Reg
Reg(char const *masterSig)
Definition: multisign.h:80
std::vector
STL class.
ripple::test::jtx::signer::tag
std::optional< uint256 > tag
Definition: multisign.h:39
ripple::test::jtx::signer::account
Account account
Definition: multisign.h:38
ripple::test::jtx::msig::msig
msig(std::vector< Reg > signers_)
Definition: multisign.cpp:69
ripple::test::jtx::msig::Reg::operator<
bool operator<(Reg const &rhs) const
Definition: multisign.h:90
ripple::test::jtx::msig::Reg
Definition: multisign.h:66
ripple::test::jtx::none_t
Definition: tags.h:28
ripple::test::jtx::msig
Set a multisignature on a JTx.
Definition: multisign.h:63
ripple::test::jtx::signer
A signer in a SignerList.
Definition: multisign.h:35
ripple::test::jtx::msig::Reg::acct
Account acct
Definition: multisign.h:68
ripple::test::jtx::signers
Json::Value signers(Account const &account, std::uint32_t quorum, std::vector< signer > const &v)
Definition: multisign.cpp:35
ripple::test::jtx::JTx
Execution context for applying a JSON transaction.
Definition: JTx.h:42
cstdint
std::uint32_t
ripple::test::jtx::sig
Set the regular signature on a JTx.
Definition: sig.h:34
ripple::test::jtx::msig::operator()
void operator()(Env &, JTx &jt) const
Definition: multisign.cpp:81
ripple::test::jtx::msig::signers
std::vector< Reg > signers
Definition: multisign.h:96
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::test::jtx::msig::Reg::sig
Account sig
Definition: multisign.h:69
std
STL namespace.
ripple::test::jtx::msig::Reg::Reg
Reg(char const *acct_, char const *regularSig)
Definition: multisign.h:84
optional
ripple::test::jtx::msig::Reg::Reg
Reg(Account const &acct_, Account const &regularSig)
Definition: multisign.h:75
ripple::test::jtx::Account
Immutable cryptographic account descriptor.
Definition: Account.h:37
ripple::test::jtx::msig::msig
msig(AccountType &&a0, Accounts &&... aN)
Definition: multisign.h:102
ripple::test::jtx::msig::Reg::Reg
Reg(Account const &masterSig)
Definition: multisign.h:71
ripple::test::jtx::signer::signer
signer(Account account_, std::uint32_t weight_=1, std::optional< uint256 > tag_=std::nullopt)
Definition: multisign.h:41
ripple::test::jtx::Env
A transaction testing environment.
Definition: Env.h:116
ripple::test::jtx::signer::weight
std::uint32_t weight
Definition: multisign.h:37
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::test::jtx::owner_count
Definition: owners.h:49