rippled
Loading...
Searching...
No Matches
Oracle.h
1#pragma once
2
3#include <test/jtx.h>
4
5#include <date/date.h>
6
7namespace xrpl {
8namespace test {
9namespace jtx {
10namespace oracle {
11
14
15// Special string value, which is converted to unquoted string in the string
16// passed to rpc.
17constexpr char const* NoneTag = "%None%";
18constexpr char const* UnquotedNone = "None";
19constexpr char const* NonePattern = "\"%None%\"";
20
22asUInt(AnyValue const& v);
23
24bool
26
27void
28toJson(Json::Value& jv, AnyValue const& v);
29
30void
31toJsonHex(Json::Value& jv, AnyValue const& v);
32
33// base asset, quote asset, price, scale
36
37// Typical defaults for Create
54
55// Typical defaults for Update
71
82
83// Simulate testStartTime as 10'000s from Ripple epoch time to make
84// LastUpdateTime validation to work and to make unit-test consistent.
85// The value doesn't matter much, it has to be greater
86// than maxLastUpdateTimeDelta in order to pass LastUpdateTime
87// validation {close-maxLastUpdateTimeDelta,close+maxLastUpdateTimeDelta}.
89
94class Oracle
95{
96private:
97 // Global fee if not 0
98 static inline std::uint32_t fee = 0;
102
103private:
104 void
105 submit(
106 Json::Value const& jv,
109 std::optional<ter> const& err);
110
111public:
112 Oracle(Env& env, CreateArg const& arg, bool submit = true);
113
114 void
115 remove(RemoveArg const& arg);
116
117 void
118 set(CreateArg const& arg);
119 void
120 set(UpdateArg const& arg);
121
122 static Json::Value
124 Env& env,
125 std::optional<AnyValue> const& baseAsset,
126 std::optional<AnyValue> const& quoteAsset,
129 std::optional<AnyValue> const& timeThreshold = std::nullopt);
130
133 {
134 return documentID_;
135 }
136
137 [[nodiscard]] bool
138 exists() const
139 {
140 return exists(env_, owner_, documentID_);
141 }
142
143 [[nodiscard]] static bool
144 exists(Env& env, AccountID const& account, std::uint32_t documentID);
145
146 [[nodiscard]] bool
147 expectPrice(DataSeries const& prices) const;
148
149 [[nodiscard]] bool
150 expectLastUpdateTime(std::uint32_t lastUpdateTime) const;
151
152 static Json::Value
154 Env& env,
158
161 {
163 }
164
165 static void
167 {
168 fee = f;
169 }
170
172 operator<<(std::ostream& strm, Oracle const& oracle)
173 {
174 strm << oracle.ledgerEntry().toStyledString();
175 return strm;
176 }
177};
178
179} // namespace oracle
180} // namespace jtx
181} // namespace test
182} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
A transaction testing environment.
Definition Env.h:119
Set the fee on a JTx.
Definition fee.h:17
Match set account flags.
Definition flags.h:108
Set a multisignature on a JTx.
Definition multisign.h:41
Oracle class facilitates unit-testing of the Price Oracle feature.
Definition Oracle.h:95
void set(CreateArg const &arg)
Definition Oracle.cpp:238
static Json::Value ledgerEntry(Env &env, std::optional< std::variant< AccountID, std::string > > const &account, std::optional< AnyValue > const &documentID, std::optional< std::string > const &index=std::nullopt)
Definition Oracle.cpp:256
static Json::Value aggregatePrice(Env &env, std::optional< AnyValue > const &baseAsset, std::optional< AnyValue > const &quoteAsset, std::optional< OraclesData > const &oracles=std::nullopt, std::optional< AnyValue > const &trim=std::nullopt, std::optional< AnyValue > const &timeThreshold=std::nullopt)
Definition Oracle.cpp:120
friend std::ostream & operator<<(std::ostream &strm, Oracle const &oracle)
Definition Oracle.h:172
void submit(Json::Value const &jv, std::optional< jtx::msig > const &msig, std::optional< jtx::seq > const &seq, std::optional< ter > const &err)
Definition Oracle.cpp:52
bool expectLastUpdateTime(std::uint32_t lastUpdateTime) const
Definition Oracle.cpp:113
std::uint32_t documentID() const
Definition Oracle.h:132
bool expectPrice(DataSeries const &prices) const
Definition Oracle.cpp:88
static void setFee(std::uint32_t f)
Definition Oracle.h:166
Json::Value ledgerEntry(std::optional< std::string > const &index=std::nullopt) const
Definition Oracle.h:160
void remove(RemoveArg const &arg)
Definition Oracle.cpp:34
T is_same_v
Keylet oracle(AccountID const &account, std::uint32_t const &documentID) noexcept
Definition Indexes.cpp:456
constexpr char const * NoneTag
Definition Oracle.h:17
std::uint32_t asUInt(AnyValue const &v)
Definition Oracle.cpp:320
constexpr char const * UnquotedNone
Definition Oracle.h:18
static constexpr std::chrono::seconds testStartTime
Definition Oracle.h:88
bool validDocumentID(AnyValue const &v)
Definition Oracle.cpp:328
constexpr char const * NonePattern
Definition Oracle.h:19
void toJsonHex(Json::Value &jv, AnyValue const &v)
Definition Oracle.cpp:302
void toJson(Json::Value &jv, AnyValue const &v)
Definition Oracle.cpp:296
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
static constexpr std::chrono::seconds epoch_offset
Clock for measuring the network time.
Definition chrono.h:32
std::optional< ter > err
Definition Oracle.h:51
std::optional< AnyValue > documentID
Definition Oracle.h:41
std::optional< AccountID > owner
Definition Oracle.h:40
std::optional< AnyValue > lastUpdateTime
Definition Oracle.h:46
std::optional< AnyValue > provider
Definition Oracle.h:44
std::optional< AnyValue > assetClass
Definition Oracle.h:43
std::optional< AnyValue > uri
Definition Oracle.h:45
std::optional< AnyValue > const & documentID
Definition Oracle.h:75
std::optional< ter > const & err
Definition Oracle.h:80
std::optional< AccountID > const & owner
Definition Oracle.h:74
std::optional< AccountID > owner
Definition Oracle.h:58
std::optional< AnyValue > documentID
Definition Oracle.h:59
std::optional< AnyValue > uri
Definition Oracle.h:63
std::optional< ter > err
Definition Oracle.h:69
std::optional< AnyValue > provider
Definition Oracle.h:62
std::optional< AnyValue > lastUpdateTime
Definition Oracle.h:64
std::optional< AnyValue > assetClass
Definition Oracle.h:61
Set the sequence number on a JTx.
Definition seq.h:14