1#include <xrpld/rpc/Context.h>
2#include <xrpld/rpc/detail/RPCHelpers.h>
4#include <xrpl/basics/Slice.h>
5#include <xrpl/basics/StringUtilities.h>
6#include <xrpl/basics/base_uint.h>
7#include <xrpl/json/json_value.h>
8#include <xrpl/protocol/ErrorCodes.h>
9#include <xrpl/protocol/PayChan.h>
10#include <xrpl/protocol/PublicKey.h>
11#include <xrpl/protocol/RPCErr.h>
12#include <xrpl/protocol/Serializer.h>
13#include <xrpl/protocol/XRPAmount.h>
14#include <xrpl/protocol/jss.h>
15#include <xrpl/protocol/tokens.h>
32 auto const& params(context.
params);
33 for (
auto const& p : {jss::public_key, jss::channel_id, jss::amount, jss::signature})
35 if (!params.isMember(p))
41 std::string const strPk = params[jss::public_key].asString();
57 if (!channelId.
parseHex(params[jss::channel_id].asString()))
61 params[jss::amount].isString() ?
toUInt64(params[jss::amount].asString()) : std::nullopt;
68 auto sig =
strUnHex(params[jss::signature].asString());
69 if (!sig || sig->empty())
constexpr bool parseHex(std::string_view sv)
Parse a hex string into a base_uint.
Slice slice() const noexcept
json::Value missingFieldError(std::string const &name)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::optional< AccountID > parseBase58(std::string const &s)
Parse AccountID from checked, base58 string.
bool verify(PublicKey const &publicKey, Slice const &m, Slice const &sig) noexcept
Verify a signature on a message.
void serializePayChanAuthorization(Serializer &msg, uint256 const &key, XRPAmount const &amt)
std::optional< KeyType > publicKeyType(Slice const &slice)
Returns the type of public key.
json::Value rpcError(ErrorCodeI iError)
std::optional< Blob > strUnHex(std::size_t strSize, Iterator begin, Iterator end)
std::optional< std::uint64_t > toUInt64(std::string const &s)
json::Value doChannelVerify(RPC::JsonContext &context)
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)