1#include <xrpl/protocol/XChainAttestations.h>
3#include <xrpl/basics/Buffer.h>
4#include <xrpl/basics/Slice.h>
5#include <xrpl/basics/contract.h>
6#include <xrpl/json/json_value.h>
7#include <xrpl/protocol/AccountID.h>
8#include <xrpl/protocol/PublicKey.h>
9#include <xrpl/protocol/SField.h>
10#include <xrpl/protocol/STAccount.h>
11#include <xrpl/protocol/STAmount.h>
12#include <xrpl/protocol/STArray.h>
13#include <xrpl/protocol/STObject.h>
14#include <xrpl/protocol/SecretKey.h>
15#include <xrpl/protocol/Serializer.h>
16#include <xrpl/protocol/json_get_or_throw.h>
17#include <xrpl/protocol/jss.h>
161 auto const toSign =
message(bridge);
173 if (v.
isMember(sfDestination.getJsonName()))
184 o[sfDestination] = *
dst;
203 o[sfDestination] = *
dst;
207 o[sfXChainBridge] = bridge;
307 auto const toSign =
message(bridge);
340 o[sfDestination] = dst;
344 o[sfXChainBridge] = bridge;
428 o[sfAttestationSignerAccount],
431 o[sfAttestationRewardAccount],
432 o[sfWasLockingChainSend] != 0,
433 o[~sfDestination]} {};
441 json::getOrThrow<bool>(v, sfWasLockingChainSend),
444 if (v.
isMember(sfDestination.getJsonName()))
451 claimAtt.attestationSignerAccount,
453 claimAtt.sendingAmount,
531 o[sfAttestationSignerAccount],
534 o[sfSignatureReward],
535 o[sfAttestationRewardAccount],
536 o[sfWasLockingChainSend] != 0,
537 o[sfDestination]} {};
539XChainCreateAccountAttestation ::XChainCreateAccountAttestation(
json::Value const& v)
546 json::getOrThrow<bool>(v, sfWasLockingChainSend),
554 createAtt.attestationSignerAccount,
556 createAtt.sendingAmount,
582 :
amount{att.sendingAmount}
623template <
class TAttestation>
626 : attestations_{
std::move(atts)}
630template <
class TAttestation>
631XChainAttestationsBase<TAttestation>::AttCollection::const_iterator
637template <
class TAttestation>
638XChainAttestationsBase<TAttestation>::AttCollection::const_iterator
644template <
class TAttestation>
645XChainAttestationsBase<TAttestation>::AttCollection::iterator
651template <
class TAttestation>
652XChainAttestationsBase<TAttestation>::AttCollection::iterator
658template <
class TAttestation>
664 "XChainAttestationsBase can only be specified with an 'object' "
669 auto const jAtts = v[jss::attestations];
676 for (
auto const& a : jAtts)
682template <
class TAttestation>
689 for (
auto const& o : arr)
693template <
class TAttestation>
bool isMember(char const *key) const
Return true if the object has a member named key.
Like std::vector<char> but better.
void emplaceBack(Args &&... args)
void add(Serializer &s) const override
static STObject makeInnerObject(SField const &name)
STArray toSTArray() const
std::vector< TAttestation > AttCollection
AttCollection::const_iterator end() const
AttCollection attestations_
static constexpr std::uint32_t kMaxAttestations
AttCollection::const_iterator begin() const
XChainAttestationsBase()=default
T emplace_back(T... args)
JSON (JavaScript Object Notation).
xrpl::AccountID getOrThrow(json::Value const &v, xrpl::SField const &field)
bool operator==(AttestationClaim const &lhs, AttestationClaim const &rhs)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
constexpr bool operator==(BaseUInt< Bits, Tag > const &lhs, BaseUInt< Bits, Tag > const &rhs)
bool verify(PublicKey const &publicKey, Slice const &m, Slice const &sig) noexcept
Verify a signature on a message.
bool isLegalNet(STAmount const &value)
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Buffer sign(PublicKey const &pk, SecretKey const &sk, Slice const &message)
Generate a signature for a message.
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
std::enable_if_t< std::is_same_v< T, char >||std::is_same_v< T, unsigned char >, Slice > makeSlice(std::array< T, N > const &a)
AccountID attestationSignerAccount
AttestationBase(AccountID attestationSignerAccount, PublicKey const &publicKey, Buffer signature, AccountID const &sendingAccount, STAmount sendingAmount, AccountID const &rewardAccount, bool wasLockingChainSend)
bool verify(STXChainBridge const &bridge) const
static bool equalHelper(AttestationBase const &lhs, AttestationBase const &rhs)
static bool sameEventHelper(AttestationBase const &lhs, AttestationBase const &rhs)
virtual std::vector< std::uint8_t > message(STXChainBridge const &bridge) const =0
void addHelper(STObject &o) const
bool sameEvent(AttestationClaim const &rhs) const
bool validAmounts() const
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)
STObject toSTObject() const
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)
std::optional< AccountID > dst
bool validAmounts() const
STObject toSTObject() const
bool sameEvent(AttestationCreateAccount const &rhs) const
std::uint64_t createCount
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)
AttestationCreateAccount(STObject const &o)
MatchFields(TSignedAttestation const &att)
std::optional< AccountID > dst
std::optional< AccountID > dst
Attestations::AttestationClaim TSignedAttestation
XChainClaimAttestation(AccountID const &keyAccount, PublicKey const &publicKey, STAmount const &amount, AccountID const &rewardAccount, bool wasLockingChainSend, std::optional< AccountID > const &dst)
STObject toSTObject() const
static SField const & arrayFieldName
AttestationMatch match(MatchFields const &rhs) const
MatchFields(TSignedAttestation const &att)
Attestations::AttestationCreateAccount TSignedAttestation
STObject toSTObject() const
XChainCreateAccountAttestation(AccountID const &keyAccount, PublicKey const &publicKey, STAmount const &amount, STAmount const &rewardAmount, AccountID const &rewardAccount, bool wasLockingChainSend, AccountID const &dst)
friend bool operator==(XChainCreateAccountAttestation const &lhs, XChainCreateAccountAttestation const &rhs)
AttestationMatch match(MatchFields const &rhs) const
static SField const & arrayFieldName