xrpld
Loading...
Searching...
No Matches
STXChainBridge.h
1#pragma once
2
3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/json/json_value.h>
5#include <xrpl/protocol/AccountID.h>
6#include <xrpl/protocol/Issue.h>
7#include <xrpl/protocol/SField.h>
8#include <xrpl/protocol/STAccount.h>
9#include <xrpl/protocol/STBase.h>
10#include <xrpl/protocol/STIssue.h>
11#include <xrpl/protocol/Serializer.h>
12
13#include <cstddef>
14#include <memory>
15#include <string>
16#include <tuple>
17
18namespace xrpl {
19
20class Serializer;
21class STObject;
22
23class STXChainBridge final : public STBase, public CountedObject<STXChainBridge>
24{
25 STAccount lockingChainDoor_{sfLockingChainDoor};
26 STIssue lockingChainIssue_{sfLockingChainIssue};
27 STAccount issuingChainDoor_{sfIssuingChainDoor};
28 STIssue issuingChainIssue_{sfIssuingChainIssue};
29
30public:
32
33 enum class ChainType { Locking, Issuing };
34
35 static ChainType
37
38 static ChainType
39 srcChain(bool wasLockingChainSend);
40
41 static ChainType
42 dstChain(bool wasLockingChainSend);
43
45
46 explicit STXChainBridge(SField const& name);
47
48 STXChainBridge(STXChainBridge const& rhs) = default;
49
50 STXChainBridge(STObject const& o);
51
53 AccountID const& srcChainDoor,
54 Issue const& srcChainIssue,
55 AccountID const& dstChainDoor,
56 Issue const& dstChainIssue);
57
58 explicit STXChainBridge(json::Value const& v);
59
60 explicit STXChainBridge(SField const& name, json::Value const& v);
61
62 explicit STXChainBridge(SerialIter& sit, SField const& name);
63
65 operator=(STXChainBridge const& rhs) = default;
66
67 [[nodiscard]] std::string
68 getText() const override;
69
70 [[nodiscard]] STObject
71 toSTObject() const;
72
73 [[nodiscard]] AccountID const&
74 lockingChainDoor() const;
75
76 [[nodiscard]] Issue const&
77 lockingChainIssue() const;
78
79 [[nodiscard]] AccountID const&
80 issuingChainDoor() const;
81
82 [[nodiscard]] Issue const&
83 issuingChainIssue() const;
84
85 [[nodiscard]] AccountID const&
86 door(ChainType ct) const;
87
88 [[nodiscard]] Issue const&
89 issue(ChainType ct) const;
90
91 [[nodiscard]] SerializedTypeID
92 getSType() const override;
93
94 [[nodiscard]] json::Value getJson(JsonOptions) const override;
95
96 void
97 add(Serializer& s) const override;
98
99 [[nodiscard]] bool
100 isEquivalent(STBase const& t) const override;
101
102 [[nodiscard]] bool
103 isDefault() const override;
104
105 [[nodiscard]] value_type const&
106 value() const noexcept;
107
108private:
109 static std::unique_ptr<STXChainBridge>
110 construct(SerialIter&, SField const& name);
111
112 STBase*
113 copy(std::size_t n, void* buf) const override;
114 STBase*
115 move(std::size_t n, void* buf) override;
116
117 friend bool
118 operator==(STXChainBridge const& lhs, STXChainBridge const& rhs);
119
120 friend bool
121 operator<(STXChainBridge const& lhs, STXChainBridge const& rhs);
122};
123
124inline bool
125operator==(STXChainBridge const& lhs, STXChainBridge const& rhs)
126{
127 return std::tie(
128 lhs.lockingChainDoor_,
129 lhs.lockingChainIssue_,
130 lhs.issuingChainDoor_,
131 lhs.issuingChainIssue_) ==
132 std::tie(
133 rhs.lockingChainDoor_,
134 rhs.lockingChainIssue_,
135 rhs.issuingChainDoor_,
136 rhs.issuingChainIssue_);
137}
138
139inline bool
140operator<(STXChainBridge const& lhs, STXChainBridge const& rhs)
141{
142 return std::tie(
146 lhs.issuingChainIssue_) <
147 std::tie(
152}
153
154inline AccountID const&
156{
157 return lockingChainDoor_.value();
158};
159
160inline Issue const&
162{
163 return lockingChainIssue_.value().get<Issue>();
164};
165
166inline AccountID const&
168{
169 return issuingChainDoor_.value();
170};
171
172inline Issue const&
174{
175 return issuingChainIssue_.value().get<Issue>();
176};
177
178inline STXChainBridge::value_type const&
179STXChainBridge::value() const noexcept
180{
181 return *this;
182}
183
184inline AccountID const&
186{
187 if (ct == ChainType::Locking)
188 return lockingChainDoor();
189 return issuingChainDoor();
190}
191
192inline Issue const&
194{
195 if (ct == ChainType::Locking)
196 return lockingChainIssue();
197 return issuingChainIssue();
198}
199
207
209STXChainBridge::srcChain(bool wasLockingChainSend)
210{
211 if (wasLockingChainSend)
212 return ChainType::Locking;
213 return ChainType::Issuing;
214}
215
217STXChainBridge::dstChain(bool wasLockingChainSend)
218{
219 if (wasLockingChainSend)
220 return ChainType::Issuing;
221 return ChainType::Locking;
222}
223
224} // namespace xrpl
Represents a JSON value.
Definition json_value.h:117
A currency issued by an account.
Definition Issue.h:18
Identifies fields.
Definition SField.h:132
static std::unique_ptr< STXChainBridge > construct(SerialIter &, SField const &name)
std::string getText() const override
STXChainBridge & operator=(STXChainBridge const &rhs)=default
AccountID const & issuingChainDoor() const
AccountID const & door(ChainType ct) const
static ChainType dstChain(bool wasLockingChainSend)
STBase * move(std::size_t n, void *buf) override
json::Value getJson(JsonOptions) const override
void add(Serializer &s) const override
AccountID const & lockingChainDoor() const
value_type const & value() const noexcept
friend bool operator<(STXChainBridge const &lhs, STXChainBridge const &rhs)
STBase * copy(std::size_t n, void *buf) const override
bool isEquivalent(STBase const &t) const override
STXChainBridge(STXChainBridge const &rhs)=default
static ChainType srcChain(bool wasLockingChainSend)
STXChainBridge value_type
SerializedTypeID getSType() const override
Issue const & issue(ChainType ct) const
Issue const & issuingChainIssue() const
static ChainType otherChain(ChainType ct)
Issue const & lockingChainIssue() const
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
SerializedTypeID
Definition SField.h:94
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:34
Note, should be treated as flags that can be | and &.
Definition STBase.h:22
T tie(T... args)