rippled
Loading...
Searching...
No Matches
STXChainBridge.h
1#pragma once
2
3#include <xrpl/basics/CountedObject.h>
4#include <xrpl/protocol/STAccount.h>
5#include <xrpl/protocol/STBase.h>
6#include <xrpl/protocol/STIssue.h>
7
8namespace xrpl {
9
10class Serializer;
11class STObject;
12
13class STXChainBridge final : public STBase, public CountedObject<STXChainBridge>
14{
15 STAccount lockingChainDoor_{sfLockingChainDoor};
16 STIssue lockingChainIssue_{sfLockingChainIssue};
17 STAccount issuingChainDoor_{sfIssuingChainDoor};
18 STIssue issuingChainIssue_{sfIssuingChainIssue};
19
20public:
22
23 enum class ChainType { locking, issuing };
24
25 static ChainType
27
28 static ChainType
29 srcChain(bool wasLockingChainSend);
30
31 static ChainType
32 dstChain(bool wasLockingChainSend);
33
35
36 explicit STXChainBridge(SField const& name);
37
38 STXChainBridge(STXChainBridge const& rhs) = default;
39
40 STXChainBridge(STObject const& o);
41
43 AccountID const& srcChainDoor,
44 Issue const& srcChainIssue,
45 AccountID const& dstChainDoor,
46 Issue const& dstChainIssue);
47
48 explicit STXChainBridge(Json::Value const& v);
49
50 explicit STXChainBridge(SField const& name, Json::Value const& v);
51
52 explicit STXChainBridge(SerialIter& sit, SField const& name);
53
55 operator=(STXChainBridge const& rhs) = default;
56
58 getText() const override;
59
61 toSTObject() const;
62
63 AccountID const&
64 lockingChainDoor() const;
65
66 Issue const&
67 lockingChainIssue() const;
68
69 AccountID const&
70 issuingChainDoor() const;
71
72 Issue const&
73 issuingChainIssue() const;
74
75 AccountID const&
76 door(ChainType ct) const;
77
78 Issue const&
79 issue(ChainType ct) const;
80
82 getSType() const override;
83
84 Json::Value getJson(JsonOptions) const override;
85
86 void
87 add(Serializer& s) const override;
88
89 bool
90 isEquivalent(STBase const& t) const override;
91
92 bool
93 isDefault() const override;
94
95 value_type const&
96 value() const noexcept;
97
98private:
99 static std::unique_ptr<STXChainBridge>
100 construct(SerialIter&, SField const& name);
101
102 STBase*
103 copy(std::size_t n, void* buf) const override;
104 STBase*
105 move(std::size_t n, void* buf) override;
106
107 friend bool
108 operator==(STXChainBridge const& lhs, STXChainBridge const& rhs);
109
110 friend bool
111 operator<(STXChainBridge const& lhs, STXChainBridge const& rhs);
112};
113
114inline bool
115operator==(STXChainBridge const& lhs, STXChainBridge const& rhs)
116{
117 return std::tie(lhs.lockingChainDoor_, lhs.lockingChainIssue_, lhs.issuingChainDoor_, lhs.issuingChainIssue_) ==
118 std::tie(rhs.lockingChainDoor_, rhs.lockingChainIssue_, rhs.issuingChainDoor_, rhs.issuingChainIssue_);
119}
120
127
128inline AccountID const&
133
134inline Issue const&
136{
137 return lockingChainIssue_.value().get<Issue>();
138};
139
140inline AccountID const&
145
146inline Issue const&
148{
149 return issuingChainIssue_.value().get<Issue>();
150};
151
152inline STXChainBridge::value_type const&
153STXChainBridge::value() const noexcept
154{
155 return *this;
156}
157
158inline AccountID const&
160{
161 if (ct == ChainType::locking)
162 return lockingChainDoor();
163 return issuingChainDoor();
164}
165
166inline Issue const&
168{
169 if (ct == ChainType::locking)
170 return lockingChainIssue();
171 return issuingChainIssue();
172}
173
181
183STXChainBridge::srcChain(bool wasLockingChainSend)
184{
185 if (wasLockingChainSend)
186 return ChainType::locking;
187 return ChainType::issuing;
188}
189
191STXChainBridge::dstChain(bool wasLockingChainSend)
192{
193 if (wasLockingChainSend)
194 return ChainType::issuing;
195 return ChainType::locking;
196}
197
198} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
Tracks the number of instances of an object.
A currency issued by an account.
Definition Issue.h:13
Identifies fields.
Definition SField.h:126
AccountID const & value() const noexcept
Definition STAccount.h:72
A type which can be exported to a well known binary format.
Definition STBase.h:115
value_type const & value() const noexcept
Definition STIssue.h:111
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
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)
bool isDefault() const override
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)
SerializedTypeID getSType() const override
Issue const & issue(ChainType ct) const
Json::Value getJson(JsonOptions) const override
Issue const & issuingChainIssue() const
static ChainType otherChain(ChainType ct)
STObject toSTObject() const
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:90
Note, should be treated as flags that can be | and &.
Definition STBase.h:17
T tie(T... args)