xrpld
Loading...
Searching...
No Matches
paychan.cpp
1#include <test/jtx/paychan.h>
2
3#include <xrpl/basics/Buffer.h>
4#include <xrpl/basics/Slice.h>
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/basics/chrono.h>
7#include <xrpl/basics/strHex.h>
8#include <xrpl/json/json_value.h>
9#include <xrpl/ledger/ReadView.h>
10#include <xrpl/protocol/AccountID.h>
11#include <xrpl/protocol/Indexes.h>
12#include <xrpl/protocol/LedgerFormats.h>
13#include <xrpl/protocol/PayChan.h>
14#include <xrpl/protocol/PublicKey.h>
15#include <xrpl/protocol/SField.h>
16#include <xrpl/protocol/STAmount.h>
17#include <xrpl/protocol/SecretKey.h>
18#include <xrpl/protocol/SeqProxy.h>
19#include <xrpl/protocol/Serializer.h>
20#include <xrpl/protocol/jss.h>
21
22#include <cstdint>
23#include <optional>
24
29
32 AccountID const& account,
33 AccountID const& to,
34 STAmount const& amount,
35 NetClock::duration const& settleDelay,
36 PublicKey const& pk,
37 std::optional<NetClock::time_point> const& cancelAfter,
38 std::optional<std::uint32_t> const& dstTag)
39{
40 json::Value jv;
41 jv[jss::TransactionType] = jss::PaymentChannelCreate;
42 jv[jss::Account] = to_string(account);
43 jv[jss::Destination] = to_string(to);
44 jv[jss::Amount] = amount.getJson(JsonOptions::Values::None);
45 jv[jss::SettleDelay] = settleDelay.count();
46 jv[sfPublicKey.fieldName] = strHex(pk.slice());
47 if (cancelAfter)
48 jv[sfCancelAfter.fieldName] = cancelAfter->time_since_epoch().count();
49 if (dstTag)
50 jv[sfDestinationTag.fieldName] = *dstTag;
51 return jv;
52}
53
56 AccountID const& account,
57 uint256 const& channel,
58 STAmount const& amount,
60{
61 json::Value jv;
62 jv[jss::TransactionType] = jss::PaymentChannelFund;
63 jv[jss::Account] = to_string(account);
64 jv[sfChannel.fieldName] = to_string(channel);
65 jv[jss::Amount] = amount.getJson(JsonOptions::Values::None);
66 if (expiration)
67 jv[sfExpiration.fieldName] = expiration->time_since_epoch().count();
68 return jv;
69}
70
73 AccountID const& account,
74 uint256 const& channel,
75 std::optional<STAmount> const& balance,
76 std::optional<STAmount> const& amount,
77 std::optional<Slice> const& signature,
79{
80 json::Value jv;
81 jv[jss::TransactionType] = jss::PaymentChannelClaim;
82 jv[jss::Account] = to_string(account);
83 jv["Channel"] = to_string(channel);
84 if (amount)
85 jv[jss::Amount] = amount->getJson(JsonOptions::Values::None);
86 if (balance)
87 jv["Balance"] = balance->getJson(JsonOptions::Values::None);
88 if (signature)
89 jv["Signature"] = strHex(*signature);
90 if (pk)
91 jv["PublicKey"] = strHex(pk->slice());
92 return jv;
93}
94
96channel(AccountID const& account, AccountID const& dst, std::uint32_t seqProxyValue)
97{
98 auto const seqProxy = SeqProxy::rawSequence(seqProxyValue);
99 auto const k = keylet::payChannel(account, dst, seqProxy);
100 return k.key;
101}
102
104channelBalance(ReadView const& view, uint256 const& chan)
105{
106 auto const slep = view.read({ltPAYCHAN, chan});
107 if (!slep)
108 return XRPAmount{-1};
109 return (*slep)[sfBalance];
110}
111
113channelAmount(ReadView const& view, uint256 const& chan)
114{
115 auto const slep = view.read({ltPAYCHAN, chan});
116 if (!slep)
117 return XRPAmount{-1};
118 return (*slep)[sfAmount];
119}
120
121bool
122channelExists(ReadView const& view, uint256 const& chan)
123{
124 auto const slep = view.read({ltPAYCHAN, chan});
125 return bool(slep);
126}
127
128Buffer
130 PublicKey const& pk,
131 SecretKey const& sk,
132 uint256 const& channel,
133 STAmount const& authAmt)
134{
135 Serializer msg;
137 return sign(pk, sk, msg.slice());
138}
139
140} // namespace xrpl::test::jtx::paychan
Represents a JSON value.
Definition json_value.h:117
Like std::vector<char> but better.
Definition Buffer.h:19
std::chrono::duration< rep, period > duration
Definition chrono.h:47
A public key.
Definition PublicKey.h:53
Slice slice() const noexcept
Definition PublicKey.h:115
A view into a ledger.
Definition ReadView.h:41
virtual SLE::const_pointer read(Keylet const &k) const =0
Return the state item associated with a key.
json::Value getJson(JsonOptions=JsonOptions::Values::None) const override
Definition STAmount.cpp:735
XRPAmount xrp() const
Definition STAmount.cpp:272
A secret key.
Definition SecretKey.h:24
static constexpr SeqProxy rawSequence(std::uint32_t v)
Factory function to return a sequence-based SeqProxy.
Definition SeqProxy.h:62
Slice slice() const noexcept
Definition Serializer.h:141
Keylet payChannel(AccountID const &src, AccountID const &dst, SeqProxy const &seq) noexcept
A PaymentChannel.
Definition Indexes.cpp:424
Paychan operations.
Definition paychan.cpp:28
json::Value fund(AccountID const &account, uint256 const &channel, STAmount const &amount, std::optional< NetClock::time_point > const &expiration)
Definition paychan.cpp:55
STAmount channelBalance(ReadView const &view, uint256 const &chan)
Definition paychan.cpp:104
json::Value create(AccountID const &account, AccountID const &to, STAmount const &amount, NetClock::duration const &settleDelay, PublicKey const &pk, std::optional< NetClock::time_point > const &cancelAfter, std::optional< std::uint32_t > const &dstTag)
Definition paychan.cpp:31
uint256 channel(AccountID const &account, AccountID const &dst, std::uint32_t seqProxyValue)
Definition paychan.cpp:96
json::Value claim(AccountID const &account, uint256 const &channel, std::optional< STAmount > const &balance, std::optional< STAmount > const &amount, std::optional< Slice > const &signature, std::optional< PublicKey > const &pk)
Definition paychan.cpp:72
STAmount channelAmount(ReadView const &view, uint256 const &chan)
Definition paychan.cpp:113
bool channelExists(ReadView const &view, uint256 const &chan)
Definition paychan.cpp:122
Buffer signClaimAuth(PublicKey const &pk, SecretKey const &sk, uint256 const &channel, STAmount const &authAmt)
Definition paychan.cpp:129
void sign(json::Value &jv, Account const &account, json::Value &sigObject, HashPrefix prefix)
Sign automatically into a specific Json field of the jv object.
Definition utility.cpp:52
constexpr XRPAmount
Convert XRP to drops (integral types).
Definition TxTest.h:54
void serializePayChanAuthorization(Serializer &msg, UInt256 const &key, XRPAmount const &amt)
Definition PayChan.h:11
std::string strHex(FwdIt begin, FwdIt end)
Definition strHex.h:13
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:657
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:34
UInt256 uint256
Definition base_uint.h:586