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 constexpr std::size_t minMultiSigners = 1;
35 static constexpr std::size_t maxMultiSigners = 32;
36
37 STTx() = delete;
38 STTx(STTx const& other) = default;
39 STTx&
40 operator=(STTx const& other) = delete;
41
42 explicit STTx(SerialIter& sit);
43 explicit STTx(SerialIter&& sit);
44 explicit STTx(STObject&& object);
45
52 STTx(TxType type, std::function<void(STObject&)> assembler);
53
54 // STObject functions.
56 getSType() const override;
57
59 getFullText() const override;
60
61 // Outer transaction functions / signature functions.
62 static Blob
63 getSignature(STObject const& sigObject);
64
65 Blob
67 {
68 return getSignature(*this);
69 }
70
72 getSigningHash() const;
73
74 TxType
75 getTxnType() const;
76
77 Blob
78 getSigningPubKey() const;
79
81 getSeqProxy() const;
82
85 getSeqValue() const;
86
87 boost::container::flat_set<AccountID>
89
91 getTransactionID() const;
92
94 getJson(JsonOptions options) const override;
95
97 getJson(JsonOptions options, bool binary) const;
98
99 void
100 sign(
101 PublicKey const& publicKey,
102 SecretKey const& secretKey,
104 {});
105
106 enum class RequireFullyCanonicalSig : bool { no, yes };
107
115 checkSign(RequireFullyCanonicalSig requireCanonicalSig, Rules const& rules)
116 const;
117
120 RequireFullyCanonicalSig requireCanonicalSig,
121 Rules const& rules) const;
122
123 // SQL Functions with metadata.
124 static std::string const&
126
128 getMetaSQL(std::uint32_t inLedger, std::string const& escapedMetaData)
129 const;
130
133 Serializer rawTxn,
134 std::uint32_t inLedger,
135 char status,
136 std::string const& escapedMetaData) const;
137
140
141private:
151 checkSign(
152 RequireFullyCanonicalSig requireCanonicalSig,
153 Rules const& rules,
154 STObject const& sigObject) const;
155
158 RequireFullyCanonicalSig requireCanonicalSig,
159 STObject const& sigObject) const;
160
163 RequireFullyCanonicalSig requireCanonicalSig,
164 Rules const& rules,
165 STObject const& sigObject) const;
166
169 STObject const& batchSigner,
170 RequireFullyCanonicalSig requireCanonicalSig) const;
171
174 STObject const& batchSigner,
175 RequireFullyCanonicalSig requireCanonicalSig,
176 Rules const& rules) const;
177
178 STBase*
179 copy(std::size_t n, void* buf) const override;
180 STBase*
181 move(std::size_t n, void* buf) override;
182
183 friend class detail::STVar;
185};
186
187bool
189
198sterilize(STTx const& stx);
199
201bool
202isPseudoTx(STObject const& tx);
203
204inline STTx::STTx(SerialIter&& sit) : STTx(sit)
205{
206}
207
208inline TxType
210{
211 return tx_type_;
212}
213
214inline Blob
216{
217 return getFieldVL(sfSigningPubKey);
218}
219
220inline uint256
222{
223 return tid_;
224}
225
226} // namespace ripple
227
228#endif
Represents a JSON value.
Definition json_value.h:131
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:184
Expected< void, std::string > checkSingleSign(RequireFullyCanonicalSig requireCanonicalSig, STObject const &sigObject) const
Definition STTx.cpp:435
SeqProxy getSeqProxy() const
Definition STTx.cpp:197
static constexpr std::size_t minMultiSigners
Definition STTx.h:34
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 constexpr std::size_t maxMultiSigners
Definition STTx.h:35
Blob getSigningPubKey() const
Definition STTx.h:215
Expected< void, std::string > checkSign(RequireFullyCanonicalSig requireCanonicalSig, Rules const &rules) const
Check the signature.
Definition STTx.cpp:263
RequireFullyCanonicalSig
Definition STTx.h:106
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:66
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:209
std::string getMetaSQL(std::uint32_t inLedger, std::string const &escapedMetaData) const
Definition STTx.cpp:368
uint256 getTransactionID() const
Definition STTx.h:221
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