rippled
Loading...
Searching...
No Matches
STTx.h
1#ifndef XRPL_PROTOCOL_STTX_H_INCLUDED
2#define XRPL_PROTOCOL_STTX_H_INCLUDED
3
4#include <xrpl/basics/Expected.h>
5#include <xrpl/protocol/Feature.h>
6#include <xrpl/protocol/PublicKey.h>
7#include <xrpl/protocol/Rules.h>
8#include <xrpl/protocol/STObject.h>
9#include <xrpl/protocol/SecretKey.h>
10#include <xrpl/protocol/SeqProxy.h>
11#include <xrpl/protocol/TxFormats.h>
12
13#include <boost/container/flat_set.hpp>
14
15#include <functional>
16
17namespace ripple {
18
27
28class STTx final : public STObject, public CountedObject<STTx>
29{
32
33public:
34 static std::size_t const minMultiSigners = 1;
35
36 // if rules are not supplied then the largest possible value is returned
37 static std::size_t
38 maxMultiSigners(Rules const* rules = 0)
39 {
40 if (rules && !rules->enabled(featureExpandedSignerList))
41 return 8;
42
43 return 32;
44 }
45
46 STTx() = delete;
47 STTx(STTx const& other) = default;
48 STTx&
49 operator=(STTx const& other) = delete;
50
51 explicit STTx(SerialIter& sit);
52 explicit STTx(SerialIter&& sit);
53 explicit STTx(STObject&& object);
54
61 STTx(TxType type, std::function<void(STObject&)> assembler);
62
63 // STObject functions.
65 getSType() const override;
66
68 getFullText() const override;
69
70 // Outer transaction functions / signature functions.
71 static Blob
72 getSignature(STObject const& sigObject);
73
74 Blob
76 {
77 return getSignature(*this);
78 }
79
81 getSigningHash() const;
82
83 TxType
84 getTxnType() const;
85
86 Blob
87 getSigningPubKey() const;
88
90 getSeqProxy() const;
91
94 getSeqValue() const;
95
96 boost::container::flat_set<AccountID>
98
100 getTransactionID() const;
101
103 getJson(JsonOptions options) const override;
104
106 getJson(JsonOptions options, bool binary) const;
107
108 void
109 sign(
110 PublicKey const& publicKey,
111 SecretKey const& secretKey,
113 {});
114
115 enum class RequireFullyCanonicalSig : bool { no, yes };
116
124 checkSign(RequireFullyCanonicalSig requireCanonicalSig, Rules const& rules)
125 const;
126
129 RequireFullyCanonicalSig requireCanonicalSig,
130 Rules const& rules) const;
131
132 // SQL Functions with metadata.
133 static std::string const&
135
137 getMetaSQL(std::uint32_t inLedger, std::string const& escapedMetaData)
138 const;
139
142 Serializer rawTxn,
143 std::uint32_t inLedger,
144 char status,
145 std::string const& escapedMetaData) const;
146
149
150private:
160 checkSign(
161 RequireFullyCanonicalSig requireCanonicalSig,
162 Rules const& rules,
163 STObject const& sigObject) const;
164
167 RequireFullyCanonicalSig requireCanonicalSig,
168 STObject const& sigObject) const;
169
172 RequireFullyCanonicalSig requireCanonicalSig,
173 Rules const& rules,
174 STObject const& sigObject) const;
175
178 STObject const& batchSigner,
179 RequireFullyCanonicalSig requireCanonicalSig) const;
180
183 STObject const& batchSigner,
184 RequireFullyCanonicalSig requireCanonicalSig,
185 Rules const& rules) const;
186
187 STBase*
188 copy(std::size_t n, void* buf) const override;
189 STBase*
190 move(std::size_t n, void* buf) override;
191
192 friend class detail::STVar;
194};
195
196bool
198
207sterilize(STTx const& stx);
208
210bool
211isPseudoTx(STObject const& tx);
212
213inline STTx::STTx(SerialIter&& sit) : STTx(sit)
214{
215}
216
217inline TxType
219{
220 return tx_type_;
221}
222
223inline Blob
225{
226 return getFieldVL(sfSigningPubKey);
227}
228
229inline uint256
231{
232 return tid_;
233}
234
235} // namespace ripple
236
237#endif
Represents a JSON value.
Definition json_value.h:130
Tracks the number of instances of an object.
A public key.
Definition PublicKey.h:43
Rules controlling protocol behavior.
Definition Rules.h:19
A type which can be exported to a well known binary format.
Definition STBase.h:116
Blob getFieldVL(SField const &field) const
Definition STObject.cpp:644
boost::container::flat_set< AccountID > getMentionedAccounts() const
Definition STTx.cpp:143
uint256 getSigningHash() const
Definition STTx.cpp:178
static std::string const & getMetaSQLInsertReplaceHeader()
Definition STTx.cpp:356
std::vector< uint256 > batchTxnIds_
Definition STTx.h:193
Expected< void, std::string > checkSingleSign(RequireFullyCanonicalSig requireCanonicalSig, STObject const &sigObject) const
Definition STTx.cpp:435
SeqProxy getSeqProxy() const
Definition STTx.cpp:197
Json::Value getJson(JsonOptions options) const override
Definition STTx.cpp:319
Expected< void, std::string > checkBatchSingleSign(STObject const &batchSigner, RequireFullyCanonicalSig requireCanonicalSig) const
Definition STTx.cpp:446
std::vector< uint256 > const & getBatchTransactionIDs() const
Retrieves a batch of transaction IDs from the STTx.
Definition STTx.cpp:610
STBase * move(std::size_t n, void *buf) override
Definition STTx.cpp:119
static std::size_t const minMultiSigners
Definition STTx.h:34
Blob getSigningPubKey() const
Definition STTx.h:224
Expected< void, std::string > checkSign(RequireFullyCanonicalSig requireCanonicalSig, Rules const &rules) const
Check the signature.
Definition STTx.cpp:263
static std::size_t maxMultiSigners(Rules const *rules=0)
Definition STTx.h:38
RequireFullyCanonicalSig
Definition STTx.h:115
TxType tx_type_
Definition STTx.h:31
uint256 tid_
Definition STTx.h:30
Expected< void, std::string > checkBatchMultiSign(STObject const &batchSigner, RequireFullyCanonicalSig requireCanonicalSig, Rules const &rules) const
Definition STTx.cpp:538
STTx & operator=(STTx const &other)=delete
Blob getSignature() const
Definition STTx.h:75
STTx()=delete
std::uint32_t getSeqValue() const
Returns the first non-zero value of (Sequence, TicketSequence).
Definition STTx.cpp:212
STTx(STTx const &other)=default
void sign(PublicKey const &publicKey, SecretKey const &secretKey, std::optional< std::reference_wrapper< SField const > > signatureTarget={})
Definition STTx.cpp:218
TxType getTxnType() const
Definition STTx.h:218
std::string getMetaSQL(std::uint32_t inLedger, std::string const &escapedMetaData) const
Definition STTx.cpp:368
uint256 getTransactionID() const
Definition STTx.h:230
Expected< void, std::string > checkMultiSign(RequireFullyCanonicalSig requireCanonicalSig, Rules const &rules, STObject const &sigObject) const
Definition STTx.cpp:564
SerializedTypeID getSType() const override
Definition STTx.cpp:126
std::string getFullText() const override
Definition STTx.cpp:132
Expected< void, std::string > checkBatchSign(RequireFullyCanonicalSig requireCanonicalSig, Rules const &rules) const
Definition STTx.cpp:283
STBase * copy(std::size_t n, void *buf) const override
Definition STTx.cpp:113
A secret key.
Definition SecretKey.h:19
A type that represents either a sequence value or a ticket value.
Definition SeqProxy.h:37
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
std::shared_ptr< STTx const > sterilize(STTx const &stx)
Sterilize a transaction.
Definition STTx.cpp:842
TxType
Transaction type identifiers.
Definition TxFormats.h:38
bool isPseudoTx(STObject const &tx)
Check whether a transaction is a pseudo-transaction.
Definition STTx.cpp:851
SerializedTypeID
Definition SField.h:91
TxnSql
Definition STTx.h:19
@ txnSqlIncluded
Definition STTx.h:24
@ txnSqlUnknown
Definition STTx.h:25
@ txnSqlConflict
Definition STTx.h:21
@ txnSqlHeld
Definition STTx.h:22
@ txnSqlNew
Definition STTx.h:20
@ txnSqlValidated
Definition STTx.h:23
bool passesLocalChecks(STObject const &st, std::string &)
Definition STTx.cpp:812
Note, should be treated as flags that can be | and &.
Definition STBase.h:18