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 <test/jtx/Account.h>
25 #include <test/jtx/amount.h>
26 #include <test/jtx/owners.h>
27 #include <test/jtx/tags.h>
28 
29 namespace ripple {
30 namespace test {
31 namespace jtx {
32 
34 struct signer
35 {
38 
39  signer(Account account_, std::uint32_t weight_ = 1)
40  : weight(weight_), account(std::move(account_))
41  {
42  }
43 };
44 
46 signers(
47  Account const& account,
48  std::uint32_t quorum,
49  std::vector<signer> const& v);
50 
53 signers(Account const& account, none_t);
54 
55 //------------------------------------------------------------------------------
56 
58 class msig
59 {
60 public:
61  struct Reg
62  {
65 
66  Reg(Account const& masterSig) : acct(masterSig), sig(masterSig)
67  {
68  }
69 
70  Reg(Account const& acct_, Account const& regularSig)
71  : acct(acct_), sig(regularSig)
72  {
73  }
74 
75  Reg(char const* masterSig) : acct(masterSig), sig(masterSig)
76  {
77  }
78 
79  Reg(char const* acct_, char const* regularSig)
80  : acct(acct_), sig(regularSig)
81  {
82  }
83 
84  bool
85  operator<(Reg const& rhs) const
86  {
87  return acct < rhs.acct;
88  }
89  };
90 
92 
93 public:
94  msig(std::vector<Reg> signers_);
95 
96  template <class AccountType, class... Accounts>
97  explicit msig(AccountType&& a0, Accounts&&... aN)
99  std::forward<AccountType>(a0),
100  std::forward<Accounts>(aN)...}}
101  {
102  }
103 
104  void
105  operator()(Env&, JTx& jt) const;
106 };
107 
108 //------------------------------------------------------------------------------
109 
112 
113 } // namespace jtx
114 } // namespace test
115 } // namespace ripple
116 
117 #endif
ripple::test::jtx::msig::Reg::Reg
Reg(char const *masterSig)
Definition: multisign.h:75
std::vector
STL class.
ripple::test::jtx::signer::account
Account account
Definition: multisign.h:37
ripple::test::jtx::msig::msig
msig(std::vector< Reg > signers_)
Definition: multisign.cpp:65
ripple::test::jtx::msig::Reg::operator<
bool operator<(Reg const &rhs) const
Definition: multisign.h:85
ripple::test::jtx::msig::Reg
Definition: multisign.h:61
ripple::test::jtx::none_t
Definition: tags.h:28
ripple::test::jtx::msig
Set a multisignature on a JTx.
Definition: multisign.h:58
ripple::test::jtx::signer
A signer in a SignerList.
Definition: multisign.h:34
ripple::test::jtx::msig::Reg::acct
Account acct
Definition: multisign.h:63
ripple::test::jtx::signers
Json::Value signers(Account const &account, std::uint32_t quorum, std::vector< signer > const &v)
Definition: multisign.cpp:33
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:77
ripple::test::jtx::msig::signers
std::vector< Reg > signers
Definition: multisign.h:91
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::test::jtx::signer::signer
signer(Account account_, std::uint32_t weight_=1)
Definition: multisign.h:39
ripple::test::jtx::msig::Reg::sig
Account sig
Definition: multisign.h:64
std
STL namespace.
ripple::test::jtx::msig::Reg::Reg
Reg(char const *acct_, char const *regularSig)
Definition: multisign.h:79
ripple::test::jtx::msig::Reg::Reg
Reg(Account const &acct_, Account const &regularSig)
Definition: multisign.h:70
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:97
ripple::test::jtx::msig::Reg::Reg
Reg(Account const &masterSig)
Definition: multisign.h:66
ripple::test::jtx::Env
A transaction testing environment.
Definition: Env.h:116
ripple::test::jtx::signer::weight
std::uint32_t weight
Definition: multisign.h:36
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::test::jtx::owner_count
Definition: owners.h:49