rippled
XChainAttestations.cpp
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 #include <ripple/protocol/XChainAttestations.h>
21 
22 #include <ripple/basics/Expected.h>
23 #include <ripple/basics/Log.h>
24 #include <ripple/basics/StringUtilities.h>
25 #include <ripple/protocol/AccountID.h>
26 #include <ripple/protocol/Indexes.h>
27 #include <ripple/protocol/PublicKey.h>
28 #include <ripple/protocol/SField.h>
29 #include <ripple/protocol/STAccount.h>
30 #include <ripple/protocol/STAmount.h>
31 #include <ripple/protocol/STArray.h>
32 #include <ripple/protocol/STObject.h>
33 #include <ripple/protocol/Serializer.h>
34 #include <ripple/protocol/XChainAttestations.h>
35 #include <ripple/protocol/json_get_or_throw.h>
36 #include <ripple/protocol/jss.h>
37 
38 #include <algorithm>
39 #include <optional>
40 
41 namespace ripple {
42 namespace Attestations {
43 
45  AccountID attestationSignerAccount_,
46  PublicKey const& publicKey_,
47  Buffer signature_,
48  AccountID const& sendingAccount_,
49  STAmount const& sendingAmount_,
50  AccountID const& rewardAccount_,
51  bool wasLockingChainSend_)
52  : attestationSignerAccount{attestationSignerAccount_}
53  , publicKey{publicKey_}
54  , signature{std::move(signature_)}
55  , sendingAccount{sendingAccount_}
56  , sendingAmount{sendingAmount_}
57  , rewardAccount{rewardAccount_}
58  , wasLockingChainSend{wasLockingChainSend_}
59 {
60 }
61 
62 bool
64  AttestationBase const& lhs,
65  AttestationBase const& rhs)
66 {
67  return std::tie(
69  lhs.publicKey,
70  lhs.signature,
71  lhs.sendingAccount,
72  lhs.sendingAmount,
73  lhs.rewardAccount,
74  lhs.wasLockingChainSend) ==
75  std::tie(
77  rhs.publicKey,
78  rhs.signature,
79  rhs.sendingAccount,
80  rhs.sendingAmount,
81  rhs.rewardAccount,
83 }
84 
85 bool
87  AttestationBase const& lhs,
88  AttestationBase const& rhs)
89 {
90  return std::tie(
91  lhs.sendingAccount,
92  lhs.sendingAmount,
93  lhs.wasLockingChainSend) ==
94  std::tie(
96 }
97 
98 bool
100 {
101  std::vector<std::uint8_t> msg = message(bridge);
103 }
104 
106  : attestationSignerAccount{o[sfAttestationSignerAccount]}
107  , publicKey{o[sfPublicKey]}
108  , signature{o[sfSignature]}
109  , sendingAccount{o[sfAccount]}
110  , sendingAmount{o[sfAmount]}
111  , rewardAccount{o[sfAttestationRewardAccount]}
112  , wasLockingChainSend{bool(o[sfWasLockingChainSend])}
113 {
114 }
115 
117  : attestationSignerAccount{Json::getOrThrow<AccountID>(
118  v,
120  , publicKey{Json::getOrThrow<PublicKey>(v, sfPublicKey)}
121  , signature{Json::getOrThrow<Buffer>(v, sfSignature)}
122  , sendingAccount{Json::getOrThrow<AccountID>(v, sfAccount)}
123  , sendingAmount{Json::getOrThrow<STAmount>(v, sfAmount)}
124  , rewardAccount{Json::getOrThrow<AccountID>(v, sfAttestationRewardAccount)}
125  , wasLockingChainSend{Json::getOrThrow<bool>(v, sfWasLockingChainSend)}
126 {
127 }
128 
129 void
131 {
133  o[sfPublicKey] = publicKey;
134  o[sfSignature] = signature;
135  o[sfAmount] = sendingAmount;
139 }
140 
142  AccountID attestationSignerAccount_,
143  PublicKey const& publicKey_,
144  Buffer signature_,
145  AccountID const& sendingAccount_,
146  STAmount const& sendingAmount_,
147  AccountID const& rewardAccount_,
148  bool wasLockingChainSend_,
149  std::uint64_t claimID_,
150  std::optional<AccountID> const& dst_)
151  : AttestationBase(
152  attestationSignerAccount_,
153  publicKey_,
154  std::move(signature_),
155  sendingAccount_,
156  sendingAmount_,
157  rewardAccount_,
158  wasLockingChainSend_)
159  , claimID{claimID_}
160  , dst{dst_}
161 {
162 }
163 
165  STXChainBridge const& bridge,
166  AccountID attestationSignerAccount_,
167  PublicKey const& publicKey_,
168  SecretKey const& secretKey_,
169  AccountID const& sendingAccount_,
170  STAmount const& sendingAmount_,
171  AccountID const& rewardAccount_,
172  bool wasLockingChainSend_,
173  std::uint64_t claimID_,
174  std::optional<AccountID> const& dst_)
176  attestationSignerAccount_,
177  publicKey_,
178  Buffer{},
179  sendingAccount_,
180  sendingAmount_,
181  rewardAccount_,
182  wasLockingChainSend_,
183  claimID_,
184  dst_}
185 {
186  auto const toSign = message(bridge);
187  signature = sign(publicKey_, secretKey_, makeSlice(toSign));
188 }
189 
191  : AttestationBase(o), claimID{o[sfXChainClaimID]}, dst{o[~sfDestination]}
192 {
193 }
194 
196  : AttestationBase{v}
197  , claimID{Json::getOrThrow<std::uint64_t>(v, sfXChainClaimID)}
198 {
199  if (v.isMember(sfDestination.getJsonName()))
200  dst = Json::getOrThrow<AccountID>(v, sfDestination);
201 }
202 
203 STObject
205 {
207  addHelper(o);
209  if (dst)
210  o[sfDestination] = *dst;
211  return o;
212 }
213 
216  STXChainBridge const& bridge,
217  AccountID const& sendingAccount,
218  STAmount const& sendingAmount,
219  AccountID const& rewardAccount,
220  bool wasLockingChainSend,
221  std::uint64_t claimID,
222  std::optional<AccountID> const& dst)
223 {
224  STObject o{sfGeneric};
225  // Serialize in SField order to make python serializers easier to write
227  o[sfAmount] = sendingAmount;
228  if (dst)
229  o[sfDestination] = *dst;
233  o[sfXChainBridge] = bridge;
234 
235  Serializer s;
236  o.add(s);
237 
238  return std::move(s.modData());
239 }
240 
243 {
245  bridge,
250  claimID,
251  dst);
252 }
253 
254 bool
256 {
257  return isLegalNet(sendingAmount);
258 }
259 
260 bool
262 {
263  return AttestationClaim::sameEventHelper(*this, rhs) &&
264  tie(claimID, dst) == tie(rhs.claimID, rhs.dst);
265 }
266 
267 bool
269 {
270  return AttestationClaim::equalHelper(lhs, rhs) &&
271  tie(lhs.claimID, lhs.dst) == tie(rhs.claimID, rhs.dst);
272 }
273 
275  : AttestationBase(o)
276  , createCount{o[sfXChainAccountCreateCount]}
277  , toCreate{o[sfDestination]}
278  , rewardAmount{o[sfSignatureReward]}
279 {
280 }
281 
283  : AttestationBase{v}
284  , createCount{Json::getOrThrow<std::uint64_t>(
285  v,
287  , toCreate{Json::getOrThrow<AccountID>(v, sfDestination)}
288  , rewardAmount{Json::getOrThrow<STAmount>(v, sfSignatureReward)}
289 {
290 }
291 
293  AccountID attestationSignerAccount_,
294  PublicKey const& publicKey_,
295  Buffer signature_,
296  AccountID const& sendingAccount_,
297  STAmount const& sendingAmount_,
298  STAmount const& rewardAmount_,
299  AccountID const& rewardAccount_,
300  bool wasLockingChainSend_,
301  std::uint64_t createCount_,
302  AccountID const& toCreate_)
303  : AttestationBase(
304  attestationSignerAccount_,
305  publicKey_,
306  std::move(signature_),
307  sendingAccount_,
308  sendingAmount_,
309  rewardAccount_,
310  wasLockingChainSend_)
311  , createCount{createCount_}
312  , toCreate{toCreate_}
313  , rewardAmount{rewardAmount_}
314 {
315 }
316 
318  STXChainBridge const& bridge,
319  AccountID attestationSignerAccount_,
320  PublicKey const& publicKey_,
321  SecretKey const& secretKey_,
322  AccountID const& sendingAccount_,
323  STAmount const& sendingAmount_,
324  STAmount const& rewardAmount_,
325  AccountID const& rewardAccount_,
326  bool wasLockingChainSend_,
327  std::uint64_t createCount_,
328  AccountID const& toCreate_)
330  attestationSignerAccount_,
331  publicKey_,
332  Buffer{},
333  sendingAccount_,
334  sendingAmount_,
335  rewardAmount_,
336  rewardAccount_,
337  wasLockingChainSend_,
338  createCount_,
339  toCreate_}
340 {
341  auto const toSign = message(bridge);
342  signature = sign(publicKey_, secretKey_, makeSlice(toSign));
343 }
344 
345 STObject
347 {
349  addHelper(o);
350 
352  o[sfDestination] = toCreate;
354 
355  return o;
356 }
357 
360  STXChainBridge const& bridge,
361  AccountID const& sendingAccount,
362  STAmount const& sendingAmount,
363  STAmount const& rewardAmount,
364  AccountID const& rewardAccount,
365  bool wasLockingChainSend,
366  std::uint64_t createCount,
367  AccountID const& dst)
368 {
369  STObject o{sfGeneric};
370  // Serialize in SField order to make python serializers easier to write
372  o[sfAmount] = sendingAmount;
374  o[sfDestination] = dst;
378  o[sfXChainBridge] = bridge;
379 
380  Serializer s;
381  o.add(s);
382 
383  return std::move(s.modData());
384 }
385 
388 {
390  bridge,
393  rewardAmount,
396  createCount,
397  toCreate);
398 }
399 
400 bool
402 {
404 }
405 
406 bool
408 {
409  return AttestationCreateAccount::sameEventHelper(*this, rhs) &&
411  std::tie(rhs.createCount, rhs.toCreate, rhs.rewardAmount);
412 }
413 
414 bool
416  AttestationCreateAccount const& lhs,
417  AttestationCreateAccount const& rhs)
418 {
419  return AttestationCreateAccount::equalHelper(lhs, rhs) &&
420  std::tie(lhs.createCount, lhs.toCreate, lhs.rewardAmount) ==
421  std::tie(rhs.createCount, rhs.toCreate, rhs.rewardAmount);
422 }
423 
424 } // namespace Attestations
425 
429 
431  AccountID const& keyAccount_,
432  PublicKey const& publicKey_,
433  STAmount const& amount_,
434  AccountID const& rewardAccount_,
435  bool wasLockingChainSend_,
436  std::optional<AccountID> const& dst_)
437  : keyAccount(keyAccount_)
438  , publicKey(publicKey_)
439  , amount(sfAmount, amount_)
440  , rewardAccount(rewardAccount_)
441  , wasLockingChainSend(wasLockingChainSend_)
442  , dst(dst_)
443 {
444 }
445 
447  STAccount const& keyAccount_,
448  PublicKey const& publicKey_,
449  STAmount const& amount_,
450  STAccount const& rewardAccount_,
451  bool wasLockingChainSend_,
452  std::optional<STAccount> const& dst_)
454  keyAccount_.value(),
455  publicKey_,
456  amount_,
457  rewardAccount_.value(),
458  wasLockingChainSend_,
459  dst_ ? std::optional<AccountID>{dst_->value()} : std::nullopt}
460 {
461 }
462 
467  o[sfAmount],
469  o[sfWasLockingChainSend] != 0,
470  o[~sfDestination]} {};
471 
474  Json::getOrThrow<AccountID>(v, sfAttestationSignerAccount),
475  Json::getOrThrow<PublicKey>(v, sfPublicKey),
476  Json::getOrThrow<STAmount>(v, sfAmount),
477  Json::getOrThrow<AccountID>(v, sfAttestationRewardAccount),
478  Json::getOrThrow<bool>(v, sfWasLockingChainSend),
479  std::nullopt}
480 {
481  if (v.isMember(sfDestination.getJsonName()))
482  dst = Json::getOrThrow<AccountID>(v, sfDestination);
483 };
484 
488  claimAtt.attestationSignerAccount,
489  claimAtt.publicKey,
490  claimAtt.sendingAmount,
491  claimAtt.rewardAccount,
492  claimAtt.wasLockingChainSend,
493  claimAtt.dst}
494 {
495 }
496 
497 STObject
499 {
503  o[sfPublicKey] = publicKey;
508  if (dst)
510  return o;
511 }
512 
513 bool
515 {
516  return std::tie(
517  lhs.keyAccount,
518  lhs.publicKey,
519  lhs.amount,
520  lhs.rewardAccount,
522  lhs.dst) ==
523  std::tie(
524  rhs.keyAccount,
525  rhs.publicKey,
526  rhs.amount,
527  rhs.rewardAccount,
529  rhs.dst);
530 }
531 
534  : amount{att.sendingAmount}
535  , wasLockingChainSend{att.wasLockingChainSend}
536  , dst{att.dst}
537 {
538 }
539 
542  XChainClaimAttestation::MatchFields const& rhs) const
543 {
547  if (dst != rhs.dst)
550 }
551 
552 //------------------------------------------------------------------------------
553 
555  AccountID const& keyAccount_,
556  PublicKey const& publicKey_,
557  STAmount const& amount_,
558  STAmount const& rewardAmount_,
559  AccountID const& rewardAccount_,
560  bool wasLockingChainSend_,
561  AccountID const& dst_)
562  : keyAccount(keyAccount_)
563  , publicKey(publicKey_)
564  , amount(sfAmount, amount_)
565  , rewardAmount(sfSignatureReward, rewardAmount_)
566  , rewardAccount(rewardAccount_)
567  , wasLockingChainSend(wasLockingChainSend_)
568  , dst(dst_)
569 {
570 }
571 
573  STObject const& o)
577  o[sfAmount],
580  o[sfWasLockingChainSend] != 0,
581  o[sfDestination]} {};
582 
584  Json::Value const& v)
586  Json::getOrThrow<AccountID>(v, sfAttestationSignerAccount),
587  Json::getOrThrow<PublicKey>(v, sfPublicKey),
588  Json::getOrThrow<STAmount>(v, sfAmount),
589  Json::getOrThrow<STAmount>(v, sfSignatureReward),
590  Json::getOrThrow<AccountID>(v, sfAttestationRewardAccount),
591  Json::getOrThrow<bool>(v, sfWasLockingChainSend),
592  Json::getOrThrow<AccountID>(v, sfDestination)}
593 {
594 }
595 
599  createAtt.attestationSignerAccount,
600  createAtt.publicKey,
601  createAtt.sendingAmount,
602  createAtt.rewardAmount,
603  createAtt.rewardAccount,
604  createAtt.wasLockingChainSend,
605  createAtt.toCreate}
606 {
607 }
608 
609 STObject
611 {
613 
616  o[sfPublicKey] = publicKey;
623 
624  return o;
625 }
626 
629  : amount{att.sendingAmount}
630  , rewardAmount(att.rewardAmount)
631  , wasLockingChainSend{att.wasLockingChainSend}
632  , dst{att.toCreate}
633 {
634 }
635 
639 {
643  if (dst != rhs.dst)
646 }
647 
648 bool
652 {
653  return std::tie(
654  lhs.keyAccount,
655  lhs.publicKey,
656  lhs.amount,
657  lhs.rewardAmount,
658  lhs.rewardAccount,
660  lhs.dst) ==
661  std::tie(
662  rhs.keyAccount,
663  rhs.publicKey,
664  rhs.amount,
665  rhs.rewardAmount,
666  rhs.rewardAccount,
668  rhs.dst);
669 }
670 
671 //------------------------------------------------------------------------------
672 //
673 template <class TAttestation>
676  : attestations_{std::move(atts)}
677 {
678 }
679 
680 template <class TAttestation>
681 typename XChainAttestationsBase<TAttestation>::AttCollection::const_iterator
683 {
684  return attestations_.begin();
685 }
686 
687 template <class TAttestation>
690 {
691  return attestations_.end();
692 }
693 
694 template <class TAttestation>
697 {
698  return attestations_.begin();
699 }
700 
701 template <class TAttestation>
702 typename XChainAttestationsBase<TAttestation>::AttCollection::iterator
703 XChainAttestationsBase<TAttestation>::end()
704 {
705  return attestations_.end();
706 }
707 
708 template <class TAttestation>
710  Json::Value const& v)
711 {
712  if (!v.isObject())
713  {
714  Throw<std::runtime_error>(
715  "XChainAttestationsBase can only be specified with an 'object' "
716  "Json value");
717  }
718 
719  attestations_ = [&] {
720  auto const jAtts = v[jss::attestations];
721 
722  if (jAtts.size() > maxAttestations)
723  Throw<std::runtime_error>(
724  "XChainAttestationsBase exceeded max number of attestations");
725 
727  r.reserve(jAtts.size());
728  for (auto const& a : jAtts)
729  r.emplace_back(a);
730  return r;
731  }();
732 }
733 
734 template <class TAttestation>
736 {
737  if (arr.size() > maxAttestations)
738  Throw<std::runtime_error>(
739  "XChainAttestationsBase exceeded max number of attestations");
740 
741  attestations_.reserve(arr.size());
742  for (auto const& o : arr)
743  attestations_.emplace_back(o);
744 }
745 
746 template <class TAttestation>
747 STArray
749 {
750  STArray r{TAttestation::ArrayFieldName, attestations_.size()};
751  for (auto const& e : attestations_)
752  r.emplace_back(e.toSTObject());
753  return r;
754 }
755 
758 
759 } // namespace ripple
ripple::STArray::size
size_type size() const
Definition: STArray.h:248
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::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::makeSlice
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
Definition: Slice.h:241
ripple::Attestations::AttestationBase::attestationSignerAccount
AccountID attestationSignerAccount
Definition: XChainAttestations.h:49
ripple::Attestations::AttestationCreateAccount
Definition: XChainAttestations.h:173
Json::Value::isObject
bool isObject() const
Definition: json_value.cpp:1027
ripple::sfGeneric
const SField sfGeneric(access, 0)
Definition: SField.h:356
ripple::sfDestination
const SF_ACCOUNT sfDestination
ripple::sfAmount
const SF_AMOUNT sfAmount
ripple::Serializer::modData
Blob & modData()
Definition: Serializer.h:179
ripple::XChainAttestationsBase::AttCollection
std::vector< TAttestation > AttCollection
Definition: XChainAttestations.h:384
ripple::XChainCreateAccountAttestation::MatchFields::dst
AccountID dst
Definition: XChainAttestations.h:346
std::vector::reserve
T reserve(T... args)
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::verify
bool verify(PublicKey const &publicKey, Slice const &m, Slice const &sig, bool mustBeFullyCanonical) noexcept
Verify a signature on a message.
Definition: PublicKey.cpp:272
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
std::vector
STL class.
ripple::Attestations::AttestationBase
Definition: XChainAttestations.h:46
ripple::Attestations::AttestationBase::addHelper
void addHelper(STObject &o) const
Definition: XChainAttestations.cpp:130
ripple::sfXChainCreateAccountAttestationCollectionElement
const SField sfXChainCreateAccountAttestationCollectionElement
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::sfOtherChainSource
const SF_ACCOUNT sfOtherChainSource
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::isLegalNet
bool isLegalNet(STAmount const &value)
Definition: STAmount.h:449
ripple::XChainCreateAccountAttestation::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:338
ripple::sfWasLockingChainSend
const SF_UINT8 sfWasLockingChainSend
ripple::XChainClaimAttestation::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:276
ripple::SField::getJsonName
Json::StaticString const & getJsonName() const
Definition: SField.h:214
ripple::Attestations::AttestationClaim::dst
std::optional< AccountID > dst
Definition: XChainAttestations.h:107
ripple::Attestations::operator==
bool operator==(AttestationClaim const &lhs, AttestationClaim const &rhs)
Definition: XChainAttestations.cpp:268
ripple::Attestations::AttestationBase::sameEventHelper
static bool sameEventHelper(AttestationBase const &lhs, AttestationBase const &rhs)
Definition: XChainAttestations.cpp:86
algorithm
ripple::operator==
bool operator==(Manifest const &lhs, Manifest const &rhs)
Definition: Manifest.h:165
ripple::sfXChainClaimID
const SF_UINT64 sfXChainClaimID
ripple::Attestations::AttestationCreateAccount::rewardAmount
STAmount rewardAmount
Definition: XChainAttestations.h:182
ripple::XChainCreateAccountAttestation::MatchFields::amount
STAmount amount
Definition: XChainAttestations.h:343
std::tie
T tie(T... args)
ripple::base_uint< 160, detail::AccountIDTag >
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::Attestations::AttestationCreateAccount::sameEvent
bool sameEvent(AttestationCreateAccount const &rhs) const
Definition: XChainAttestations.cpp:407
ripple::XChainCreateAccountAttestation
Definition: XChainAttestations.h:328
ripple::sfSignatureReward
const SF_AMOUNT sfSignatureReward
ripple::Attestations::AttestationBase::signature
Buffer signature
Definition: XChainAttestations.h:53
ripple::PublicKey
A public key.
Definition: PublicKey.h:61
ripple::XChainCreateAccountAttestation::amount
STAmount amount
Definition: XChainAttestations.h:335
ripple::sfXChainClaimAttestations
const SField sfXChainClaimAttestations
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::Attestations::AttestationBase::rewardAccount
AccountID rewardAccount
Definition: XChainAttestations.h:61
ripple::STAmount
Definition: STAmount.h:46
ripple::XChainClaimAttestation::keyAccount
AccountID keyAccount
Definition: XChainAttestations.h:272
ripple::sfXChainClaimProofSig
const SField sfXChainClaimProofSig
ripple::sfXChainCreateAccountProofSig
const SField sfXChainCreateAccountProofSig
ripple::XChainClaimAttestation::MatchFields::wasLockingChainSend
bool wasLockingChainSend
Definition: XChainAttestations.h:282
ripple::sfAttestationSignerAccount
const SF_ACCOUNT sfAttestationSignerAccount
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::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::Serializer
Definition: Serializer.h:40
ripple::STAccount
Definition: STAccount.h:29
std::optional::value
T value(T... args)
ripple::STObject
Definition: STObject.h:52
ripple::XChainCreateAccountAttestation::keyAccount
AccountID keyAccount
Definition: XChainAttestations.h:333
ripple::XChainClaimAttestation::rewardAccount
AccountID rewardAccount
Definition: XChainAttestations.h:275
std::vector::emplace_back
T emplace_back(T... args)
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::sign
Buffer sign(PublicKey const &pk, SecretKey const &sk, Slice const &m)
Generate a signature for a message.
Definition: SecretKey.cpp:238
ripple::Attestations::AttestationClaim
Definition: XChainAttestations.h:104
ripple::XChainClaimAttestation::MatchFields::amount
STAmount amount
Definition: XChainAttestations.h:281
ripple::sfXChainClaimAttestationCollectionElement
const SField sfXChainClaimAttestationCollectionElement
std
STL namespace.
ripple::Attestations::AttestationBase::verify
bool verify(STXChainBridge const &bridge) const
Definition: XChainAttestations.cpp:99
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::sfXChainAccountCreateCount
const SF_UINT64 sfXChainAccountCreateCount
ripple::sfSignature
const SF_VL sfSignature
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::sfXChainCreateAccountAttestations
const SField sfXChainCreateAccountAttestations
ripple::AttestationMatch
AttestationMatch
Definition: XChainAttestations.h:258
ripple::Attestations::AttestationCreateAccount::toSTObject
STObject toSTObject() const
Definition: XChainAttestations.cpp:346
optional
ripple::XChainCreateAccountAttestation::dst
AccountID dst
Definition: XChainAttestations.h:339
ripple::sfAccount
const SF_ACCOUNT sfAccount
ripple::sfAttestationRewardAccount
const SF_ACCOUNT sfAttestationRewardAccount
ripple::Attestations::AttestationBase::sendingAccount
AccountID sendingAccount
Definition: XChainAttestations.h:56
ripple::XChainAttestationsBase::end
AttCollection::const_iterator end() const
Definition: XChainAttestations.cpp:689
ripple::STAccount::value
AccountID const & value() const noexcept
Definition: STAccount.h:90
ripple::AttestationMatch::match
@ match
ripple::XChainClaimAttestation::publicKey
PublicKey publicKey
Definition: XChainAttestations.h:273
ripple::XChainClaimAttestation::amount
STAmount amount
Definition: XChainAttestations.h:274
ripple::sfXChainBridge
const SF_XCHAIN_BRIDGE sfXChainBridge
ripple::XChainCreateAccountAttestation::MatchFields
Definition: XChainAttestations.h:341
ripple::sfPublicKey
const SF_VL sfPublicKey
ripple::XChainAttestationsBase
Definition: XChainAttestations.h:381
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