rippled
XChainAttestations.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2022 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_PROTOCOL_STXATTESTATIONS_H_INCLUDED
21 #define RIPPLE_PROTOCOL_STXATTESTATIONS_H_INCLUDED
22 
23 #include <ripple/basics/Buffer.h>
24 #include <ripple/basics/Expected.h>
25 #include <ripple/protocol/AccountID.h>
26 #include <ripple/protocol/Issue.h>
27 #include <ripple/protocol/PublicKey.h>
28 #include <ripple/protocol/SField.h>
29 #include <ripple/protocol/STBase.h>
30 #include <ripple/protocol/STXChainBridge.h>
31 #include <ripple/protocol/SecretKey.h>
32 #include <ripple/protocol/TER.h>
33 
34 #include <boost/container/flat_set.hpp>
35 #include <boost/container/vector.hpp>
36 
37 #include <cstddef>
38 #include <type_traits>
39 #include <unordered_map>
40 #include <vector>
41 
42 namespace ripple {
43 
44 namespace Attestations {
45 
47 {
48  // Account associated with the public key
50  // Public key from the witness server attesting to the event
52  // Signature from the witness server attesting to the event
54  // Account on the sending chain that triggered the event (sent the
55  // transaction)
57  // Amount transfered on the sending chain
59  // Account on the destination chain that collects a share of the attestation
60  // reward
62  // Amount was transfered on the locking chain
64 
65  explicit AttestationBase(
66  AccountID attestationSignerAccount_,
67  PublicKey const& publicKey_,
68  Buffer signature_,
69  AccountID const& sendingAccount_,
70  STAmount const& sendingAmount_,
71  AccountID const& rewardAccount_,
72  bool wasLockingChainSend_);
73 
74  AttestationBase(AttestationBase const&) = default;
75 
76  virtual ~AttestationBase() = default;
77 
79  operator=(AttestationBase const&) = default;
80 
81  // verify that the signature attests to the data.
82  bool
83  verify(STXChainBridge const& bridge) const;
84 
85 protected:
86  explicit AttestationBase(STObject const& o);
87  explicit AttestationBase(Json::Value const& v);
88 
89  [[nodiscard]] static bool
90  equalHelper(AttestationBase const& lhs, AttestationBase const& rhs);
91 
92  [[nodiscard]] static bool
93  sameEventHelper(AttestationBase const& lhs, AttestationBase const& rhs);
94 
95  void
96  addHelper(STObject& o) const;
97 
98 private:
99  [[nodiscard]] virtual std::vector<std::uint8_t>
100  message(STXChainBridge const& bridge) const = 0;
101 };
102 
103 // Attest to a regular cross-chain transfer
105 {
108 
109  explicit AttestationClaim(
110  AccountID attestationSignerAccount_,
111  PublicKey const& publicKey_,
112  Buffer signature_,
113  AccountID const& sendingAccount_,
114  STAmount const& sendingAmount_,
115  AccountID const& rewardAccount_,
116  bool wasLockingChainSend_,
117  std::uint64_t claimID_,
118  std::optional<AccountID> const& dst_);
119 
120  explicit AttestationClaim(
121  STXChainBridge const& bridge,
122  AccountID attestationSignerAccount_,
123  PublicKey const& publicKey_,
124  SecretKey const& secretKey_,
125  AccountID const& sendingAccount_,
126  STAmount const& sendingAmount_,
127  AccountID const& rewardAccount_,
128  bool wasLockingChainSend_,
129  std::uint64_t claimID_,
130  std::optional<AccountID> const& dst_);
131 
132  explicit AttestationClaim(STObject const& o);
133  explicit AttestationClaim(Json::Value const& v);
134 
135  [[nodiscard]] STObject
136  toSTObject() const;
137 
138  // return true if the two attestations attest to the same thing
139  [[nodiscard]] bool
140  sameEvent(AttestationClaim const& rhs) const;
141 
142  [[nodiscard]] static std::vector<std::uint8_t>
143  message(
144  STXChainBridge const& bridge,
145  AccountID const& sendingAccount,
146  STAmount const& sendingAmount,
147  AccountID const& rewardAccount,
148  bool wasLockingChainSend,
151 
152  [[nodiscard]] bool
153  validAmounts() const;
154 
155 private:
156  [[nodiscard]] std::vector<std::uint8_t>
157  message(STXChainBridge const& bridge) const override;
158 
159  friend bool
160  operator==(AttestationClaim const& lhs, AttestationClaim const& rhs);
161 };
162 
164 {
165  bool
166  operator()(AttestationClaim const& lhs, AttestationClaim const& rhs) const
167  {
168  return lhs.claimID < rhs.claimID;
169  }
170 };
171 
172 // Attest to a cross-chain transfer that creates an account
174 {
175  // createCount on the sending chain. This is the value of the `CreateCount`
176  // field of the bridge on the sending chain when the transaction was
177  // executed.
179  // Account to create on the destination chain
181  // Total amount of the reward pool
183 
184  explicit AttestationCreateAccount(STObject const& o);
185 
186  explicit AttestationCreateAccount(Json::Value const& v);
187 
188  explicit AttestationCreateAccount(
189  AccountID attestationSignerAccount_,
190  PublicKey const& publicKey_,
191  Buffer signature_,
192  AccountID const& sendingAccount_,
193  STAmount const& sendingAmount_,
194  STAmount const& rewardAmount_,
195  AccountID const& rewardAccount_,
196  bool wasLockingChainSend_,
197  std::uint64_t createCount_,
198  AccountID const& toCreate_);
199 
200  explicit AttestationCreateAccount(
201  STXChainBridge const& bridge,
202  AccountID attestationSignerAccount_,
203  PublicKey const& publicKey_,
204  SecretKey const& secretKey_,
205  AccountID const& sendingAccount_,
206  STAmount const& sendingAmount_,
207  STAmount const& rewardAmount_,
208  AccountID const& rewardAccount_,
209  bool wasLockingChainSend_,
210  std::uint64_t createCount_,
211  AccountID const& toCreate_);
212 
213  [[nodiscard]] STObject
214  toSTObject() const;
215 
216  // return true if the two attestations attest to the same thing
217  [[nodiscard]] bool
218  sameEvent(AttestationCreateAccount const& rhs) const;
219 
220  friend bool
221  operator==(
222  AttestationCreateAccount const& lhs,
223  AttestationCreateAccount const& rhs);
224 
225  [[nodiscard]] static std::vector<std::uint8_t>
226  message(
227  STXChainBridge const& bridge,
228  AccountID const& sendingAccount,
229  STAmount const& sendingAmount,
230  STAmount const& rewardAmount,
231  AccountID const& rewardAccount,
232  bool wasLockingChainSend,
234  AccountID const& dst);
235 
236  [[nodiscard]] bool
237  validAmounts() const;
238 
239 private:
240  [[nodiscard]] std::vector<std::uint8_t>
241  message(STXChainBridge const& bridge) const override;
242 };
243 
245 {
246  bool
248  AttestationCreateAccount const& lhs,
249  AttestationCreateAccount const& rhs) const
250  {
251  return lhs.createCount < rhs.createCount;
252  }
253 };
254 
255 }; // namespace Attestations
256 
257 // Result when checking when two attestation match.
258 enum class AttestationMatch {
259  // One of the fields doesn't match, and it isn't the dst field
261  // all of the fields match, except the dst field
263  // all of the fields match
264  match
265 };
266 
268 {
270  static SField const& ArrayFieldName;
271 
278 
279  struct MatchFields
280  {
284  MatchFields(TSignedAttestation const& att);
286  STAmount const& a,
287  bool b,
288  std::optional<AccountID> const& d)
289  : amount{a}, wasLockingChainSend{b}, dst{d}
290  {
291  }
292  };
293 
294  explicit XChainClaimAttestation(
295  AccountID const& keyAccount_,
296  PublicKey const& publicKey_,
297  STAmount const& amount_,
298  AccountID const& rewardAccount_,
299  bool wasLockingChainSend_,
301 
302  explicit XChainClaimAttestation(
303  STAccount const& keyAccount_,
304  PublicKey const& publicKey_,
305  STAmount const& amount_,
306  STAccount const& rewardAccount_,
307  bool wasLockingChainSend_,
309 
310  explicit XChainClaimAttestation(TSignedAttestation const& claimAtt);
311 
312  explicit XChainClaimAttestation(STObject const& o);
313 
314  explicit XChainClaimAttestation(Json::Value const& v);
315 
317  match(MatchFields const& rhs) const;
318 
319  [[nodiscard]] STObject
320  toSTObject() const;
321 
322  friend bool
323  operator==(
324  XChainClaimAttestation const& lhs,
325  XChainClaimAttestation const& rhs);
326 };
327 
329 {
331  static SField const& ArrayFieldName;
332 
340 
341  struct MatchFields
342  {
347 
348  MatchFields(TSignedAttestation const& att);
349  };
350 
352  AccountID const& keyAccount_,
353  PublicKey const& publicKey_,
354  STAmount const& amount_,
355  STAmount const& rewardAmount_,
356  AccountID const& rewardAccount_,
357  bool wasLockingChainSend_,
358  AccountID const& dst_);
359 
360  explicit XChainCreateAccountAttestation(TSignedAttestation const& claimAtt);
361 
362  explicit XChainCreateAccountAttestation(STObject const& o);
363 
364  explicit XChainCreateAccountAttestation(Json::Value const& v);
365 
366  [[nodiscard]] STObject
367  toSTObject() const;
368 
370  match(MatchFields const& rhs) const;
371 
372  friend bool
373  operator==(
375  XChainCreateAccountAttestation const& rhs);
376 };
377 
378 // Attestations from witness servers for a particular claimid and bridge.
379 // Only one attestation per signature is allowed.
380 template <class TAttestation>
382 {
383 public:
385 
386 private:
387  // Set a max number of allowed attestations to limit the amount of memory
388  // allocated and processing time. This number is much larger than the actual
389  // number of attestation a server would ever expect.
390  static constexpr std::uint32_t maxAttestations = 256;
392 
393 protected:
394  // Prevent slicing to the base class
395  ~XChainAttestationsBase() = default;
396 
397 public:
398  XChainAttestationsBase() = default;
399  XChainAttestationsBase(XChainAttestationsBase const& rhs) = default;
401  operator=(XChainAttestationsBase const& rhs) = default;
402 
403  explicit XChainAttestationsBase(AttCollection&& sigs);
404 
405  explicit XChainAttestationsBase(Json::Value const& v);
406 
407  explicit XChainAttestationsBase(STArray const& arr);
408 
409  [[nodiscard]] STArray
410  toSTArray() const;
411 
412  typename AttCollection::const_iterator
413  begin() const;
414 
415  typename AttCollection::const_iterator
416  end() const;
417 
418  typename AttCollection::iterator
419  begin();
420 
421  typename AttCollection::iterator
422  end();
423 
424  template <class F>
426  erase_if(F&& f);
427 
429  size() const;
430 
431  bool
432  empty() const;
433 
434  AttCollection const&
435  attestations() const;
436 
437  template <class T>
438  void
439  emplace_back(T&& att);
440 };
441 
442 template <class TAttestation>
443 [[nodiscard]] inline bool
447 {
448  return lhs.attestations() == rhs.attestations();
449 }
450 
451 template <class TAttestation>
454 {
455  return attestations_;
456 };
457 
458 template <class TAttestation>
459 template <class T>
460 inline void
462 {
463  attestations_.emplace_back(std::forward<T>(att));
464 };
465 
466 template <class TAttestation>
467 template <class F>
468 inline std::size_t
470 {
471  return std::erase_if(attestations_, std::forward<F>(f));
472 }
473 
474 template <class TAttestation>
475 inline std::size_t
477 {
478  return attestations_.size();
479 }
480 
481 template <class TAttestation>
482 inline bool
484 {
485  return attestations_.empty();
486 }
487 
489  : public XChainAttestationsBase<XChainClaimAttestation>
490 {
492  using TBase::TBase;
493 };
494 
496  : public XChainAttestationsBase<XChainCreateAccountAttestation>
497 {
499  using TBase::TBase;
500 };
501 
502 } // namespace ripple
503 
504 #endif // STXCHAINATTESTATIONS_H_
ripple::XChainAttestationsBase::maxAttestations
static constexpr std::uint32_t maxAttestations
Definition: XChainAttestations.h:390
ripple::Attestations::AttestationBase::AttestationBase
AttestationBase(AccountID attestationSignerAccount_, PublicKey const &publicKey_, Buffer signature_, AccountID const &sendingAccount_, STAmount const &sendingAmount_, AccountID const &rewardAccount_, bool wasLockingChainSend_)
Definition: XChainAttestations.cpp:44
ripple::Attestations::AttestationCreateAccount::operator==
friend bool operator==(AttestationCreateAccount const &lhs, AttestationCreateAccount const &rhs)
Definition: XChainAttestations.cpp:415
ripple::Attestations::CmpByCreateCount::operator()
bool operator()(AttestationCreateAccount const &lhs, AttestationCreateAccount const &rhs) const
Definition: XChainAttestations.h:247
ripple::XChainCreateAccountAttestation::XChainCreateAccountAttestation
XChainCreateAccountAttestation(AccountID const &keyAccount_, PublicKey const &publicKey_, STAmount const &amount_, STAmount const &rewardAmount_, AccountID const &rewardAccount_, bool wasLockingChainSend_, AccountID const &dst_)
Definition: XChainAttestations.cpp:554
ripple::Attestations::AttestationBase::attestationSignerAccount
AccountID attestationSignerAccount
Definition: XChainAttestations.h:49
ripple::Attestations::AttestationCreateAccount
Definition: XChainAttestations.h:173
ripple::Attestations::AttestationBase::operator=
AttestationBase & operator=(AttestationBase const &)=default
ripple::XChainAttestationsBase::AttCollection
std::vector< TAttestation > AttCollection
Definition: XChainAttestations.h:384
ripple::XChainCreateAccountAttestation::MatchFields::dst
AccountID dst
Definition: XChainAttestations.h:346
ripple::Attestations::AttestationClaim::message
static std::vector< std::uint8_t > message(STXChainBridge const &bridge, AccountID const &sendingAccount, STAmount const &sendingAmount, AccountID const &rewardAccount, bool wasLockingChainSend, std::uint64_t claimID, std::optional< AccountID > const &dst)
Definition: XChainAttestations.cpp:215
ripple::Attestations::CmpByClaimID
Definition: XChainAttestations.h:163
ripple::XChainClaimAttestation::MatchFields::MatchFields
MatchFields(TSignedAttestation const &att)
Definition: XChainAttestations.cpp:532
ripple::XChainCreateAccountAttestation::match
AttestationMatch match(MatchFields const &rhs) const
Definition: XChainAttestations.cpp:637
vector
ripple::XChainAttestationsBase::empty
bool empty() const
Definition: XChainAttestations.h:483
ripple::Attestations::AttestationBase
Definition: XChainAttestations.h:46
ripple::Attestations::AttestationBase::addHelper
void addHelper(STObject &o) const
Definition: XChainAttestations.cpp:130
ripple::XChainCreateAccountAttestation::publicKey
PublicKey publicKey
Definition: XChainAttestations.h:334
ripple::Attestations::AttestationClaim::AttestationClaim
AttestationClaim(AccountID attestationSignerAccount_, PublicKey const &publicKey_, Buffer signature_, AccountID const &sendingAccount_, STAmount const &sendingAmount_, AccountID const &rewardAccount_, bool wasLockingChainSend_, std::uint64_t claimID_, std::optional< AccountID > const &dst_)
Definition: XChainAttestations.cpp:141
ripple::XChainClaimAttestation::ArrayFieldName
static SField const & ArrayFieldName
Definition: XChainAttestations.h:270
ripple::Attestations::AttestationCreateAccount::validAmounts
bool validAmounts() const
Definition: XChainAttestations.cpp:401
ripple::Attestations::AttestationCreateAccount::AttestationCreateAccount
AttestationCreateAccount(STObject const &o)
Definition: XChainAttestations.cpp:274
ripple::Buffer
Like std::vector<char> but better.
Definition: Buffer.h:35
ripple::XChainCreateAccountAttestation::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:338
ripple::XChainClaimAttestation::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:276
ripple::XChainAttestationsBase::toSTArray
STArray toSTArray() const
Definition: XChainAttestations.cpp:748
ripple::Attestations::AttestationClaim::dst
std::optional< AccountID > dst
Definition: XChainAttestations.h:107
ripple::Attestations::AttestationBase::sameEventHelper
static bool sameEventHelper(AttestationBase const &lhs, AttestationBase const &rhs)
Definition: XChainAttestations.cpp:86
ripple::operator==
bool operator==(Manifest const &lhs, Manifest const &rhs)
Definition: Manifest.h:165
ripple::Attestations::AttestationCreateAccount::rewardAmount
STAmount rewardAmount
Definition: XChainAttestations.h:182
ripple::XChainCreateAccountAttestation::MatchFields::amount
STAmount amount
Definition: XChainAttestations.h:343
ripple::base_uint< 160, detail::AccountIDTag >
ripple::Attestations::CmpByCreateCount
Definition: XChainAttestations.h:244
ripple::XChainAttestationsBase::begin
AttCollection::const_iterator begin() const
Definition: XChainAttestations.cpp:682
ripple::Attestations::AttestationClaim::sameEvent
bool sameEvent(AttestationClaim const &rhs) const
Definition: XChainAttestations.cpp:261
ripple::XChainClaimAttestation::MatchFields::MatchFields
MatchFields(STAmount const &a, bool b, std::optional< AccountID > const &d)
Definition: XChainAttestations.h:285
ripple::Attestations::AttestationCreateAccount::sameEvent
bool sameEvent(AttestationCreateAccount const &rhs) const
Definition: XChainAttestations.cpp:407
ripple::XChainAttestationsBase::attestations_
AttCollection attestations_
Definition: XChainAttestations.h:391
ripple::XChainCreateAccountAttestation
Definition: XChainAttestations.h:328
ripple::XChainAttestationsBase::~XChainAttestationsBase
~XChainAttestationsBase()=default
ripple::Attestations::AttestationBase::signature
Buffer signature
Definition: XChainAttestations.h:53
ripple::PublicKey
A public key.
Definition: PublicKey.h:61
ripple::XChainClaimAttestation::TSignedAttestation
Attestations::AttestationClaim TSignedAttestation
Definition: XChainAttestations.h:269
ripple::XChainCreateAccountAttestation::amount
STAmount amount
Definition: XChainAttestations.h:335
cstddef
ripple::XChainAttestationsBase::operator=
XChainAttestationsBase & operator=(XChainAttestationsBase const &rhs)=default
ripple::Attestations::AttestationBase::~AttestationBase
virtual ~AttestationBase()=default
ripple::Attestations::AttestationBase::message
virtual std::vector< std::uint8_t > message(STXChainBridge const &bridge) const =0
ripple::STArray
Definition: STArray.h:28
ripple::XChainAttestationsBase::XChainAttestationsBase
XChainAttestationsBase()=default
ripple::XChainAttestationsBase::erase_if
std::size_t erase_if(F &&f)
Definition: XChainAttestations.h:469
ripple::XChainAttestationsBase::size
std::size_t size() const
Definition: XChainAttestations.h:476
ripple::Attestations::AttestationBase::rewardAccount
AccountID rewardAccount
Definition: XChainAttestations.h:61
ripple::XChainAttestationsBase::emplace_back
void emplace_back(T &&att)
Definition: XChainAttestations.h:461
ripple::STAmount
Definition: STAmount.h:46
ripple::XChainClaimAttestation::keyAccount
AccountID keyAccount
Definition: XChainAttestations.h:272
ripple::XChainClaimAttestation::MatchFields::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:282
ripple::XChainClaimAttestation::operator==
friend bool operator==(XChainClaimAttestation const &lhs, XChainClaimAttestation const &rhs)
Definition: XChainAttestations.cpp:514
std::uint64_t
ripple::Attestations::AttestationBase::sendingAmount
STAmount sendingAmount
Definition: XChainAttestations.h:58
ripple::XChainClaimAttestation::MatchFields::dst
std::optional< AccountID > dst
Definition: XChainAttestations.h:283
ripple::SecretKey
A secret key.
Definition: SecretKey.h:36
ripple::XChainClaimAttestation::dst
std::optional< AccountID > dst
Definition: XChainAttestations.h:277
ripple::XChainCreateAccountAttestation::ArrayFieldName
static SField const & ArrayFieldName
Definition: XChainAttestations.h:331
ripple::XChainClaimAttestations
Definition: XChainAttestations.h:488
ripple::XChainClaimAttestation
Definition: XChainAttestations.h:267
ripple::XChainCreateAccountAttestation::MatchFields::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:345
ripple::Attestations::AttestationCreateAccount::createCount
std::uint64_t createCount
Definition: XChainAttestations.h:178
ripple::STXChainBridge
Definition: STXChainBridge.h:32
ripple::Attestations::AttestationBase::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:63
ripple::XChainClaimAttestation::MatchFields
Definition: XChainAttestations.h:279
ripple::Attestations::AttestationBase::publicKey
PublicKey publicKey
Definition: XChainAttestations.h:51
ripple::STObject
Definition: STObject.h:52
ripple::XChainCreateAccountAttestation::keyAccount
AccountID keyAccount
Definition: XChainAttestations.h:333
ripple::XChainClaimAttestation::rewardAccount
AccountID rewardAccount
Definition: XChainAttestations.h:275
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::Attestations::AttestationCreateAccount::toCreate
AccountID toCreate
Definition: XChainAttestations.h:180
ripple::Attestations::AttestationClaim::validAmounts
bool validAmounts() const
Definition: XChainAttestations.cpp:255
ripple::XChainClaimAttestation::match
AttestationMatch match(MatchFields const &rhs) const
Definition: XChainAttestations.cpp:541
ripple::Attestations::AttestationBase::equalHelper
static bool equalHelper(AttestationBase const &lhs, AttestationBase const &rhs)
Definition: XChainAttestations.cpp:63
ripple::XChainCreateAccountAttestation::MatchFields::MatchFields
MatchFields(TSignedAttestation const &att)
Definition: XChainAttestations.cpp:627
ripple::SField
Identifies fields.
Definition: SField.h:117
ripple::Attestations::AttestationClaim
Definition: XChainAttestations.h:104
ripple::XChainClaimAttestation::MatchFields::amount
STAmount amount
Definition: XChainAttestations.h:281
ripple::Attestations::AttestationBase::verify
bool verify(STXChainBridge const &bridge) const
Definition: XChainAttestations.cpp:99
ripple::Attestations::CmpByClaimID::operator()
bool operator()(AttestationClaim const &lhs, AttestationClaim const &rhs) const
Definition: XChainAttestations.h:166
ripple::AttestationMatch::matchExceptDst
@ matchExceptDst
ripple::Attestations::AttestationCreateAccount::message
static std::vector< std::uint8_t > message(STXChainBridge const &bridge, AccountID const &sendingAccount, STAmount const &sendingAmount, STAmount const &rewardAmount, AccountID const &rewardAccount, bool wasLockingChainSend, std::uint64_t createCount, AccountID const &dst)
Definition: XChainAttestations.cpp:359
ripple::XChainCreateAccountAttestation::rewardAccount
AccountID rewardAccount
Definition: XChainAttestations.h:337
ripple::XChainCreateAccountAttestation::rewardAmount
STAmount rewardAmount
Definition: XChainAttestations.h:336
ripple::XChainClaimAttestation::XChainClaimAttestation
XChainClaimAttestation(AccountID const &keyAccount_, PublicKey const &publicKey_, STAmount const &amount_, AccountID const &rewardAccount_, bool wasLockingChainSend_, std::optional< AccountID > const &dst)
Definition: XChainAttestations.cpp:430
ripple::XChainCreateAccountAttestation::operator==
friend bool operator==(XChainCreateAccountAttestation const &lhs, XChainCreateAccountAttestation const &rhs)
Definition: XChainAttestations.cpp:649
ripple::XChainClaimAttestation::toSTObject
STObject toSTObject() const
Definition: XChainAttestations.cpp:498
ripple::XChainCreateAccountAttestation::MatchFields::rewardAmount
STAmount rewardAmount
Definition: XChainAttestations.h:344
ripple::Attestations::AttestationClaim::claimID
std::uint64_t claimID
Definition: XChainAttestations.h:106
ripple::AttestationMatch
AttestationMatch
Definition: XChainAttestations.h:258
ripple::Attestations::AttestationCreateAccount::toSTObject
STObject toSTObject() const
Definition: XChainAttestations.cpp:346
std::optional
std::size_t
ripple::XChainCreateAccountAttestation::dst
AccountID dst
Definition: XChainAttestations.h:339
ripple::Attestations::AttestationBase::sendingAccount
AccountID sendingAccount
Definition: XChainAttestations.h:56
ripple::XChainAttestationsBase::end
AttCollection::const_iterator end() const
Definition: XChainAttestations.cpp:689
ripple::XChainCreateAccountAttestations
Definition: XChainAttestations.h:495
ripple::AttestationMatch::match
@ match
ripple::XChainClaimAttestation::publicKey
PublicKey publicKey
Definition: XChainAttestations.h:273
unordered_map
ripple::Attestations::AttestationClaim::operator==
friend bool operator==(AttestationClaim const &lhs, AttestationClaim const &rhs)
Definition: XChainAttestations.cpp:268
ripple::XChainClaimAttestation::amount
STAmount amount
Definition: XChainAttestations.h:274
ripple::XChainCreateAccountAttestation::MatchFields
Definition: XChainAttestations.h:341
ripple::XChainAttestationsBase
Definition: XChainAttestations.h:381
type_traits
ripple::XChainAttestationsBase::attestations
AttCollection const & attestations() const
Definition: XChainAttestations.h:453
ripple::AccountID
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition: AccountID.h:49
ripple::Attestations::AttestationClaim::toSTObject
STObject toSTObject() const
Definition: XChainAttestations.cpp:204
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::XChainCreateAccountAttestation::toSTObject
STObject toSTObject() const
Definition: XChainAttestations.cpp:610
ripple::AttestationMatch::nonDstMismatch
@ nonDstMismatch