rippled
Loading...
Searching...
No Matches
token.cpp
1//------------------------------------------------------------------------------
2/*
3 This file is part of rippled: https://github.com/ripple/rippled
4 Copyright (c) 2012, 2013 Ripple Labs Inc.
5
6 Permission to use, copy, modify, and/or distribute this software for any
7 purpose with or without fee is hereby granted, provided that the above
8 copyright notice and this permission notice appear in all copies.
9
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*/
18//==============================================================================
19
20#include <test/jtx/flags.h>
21#include <test/jtx/token.h>
22
23#include <xrpld/app/tx/detail/NFTokenMint.h>
24
25#include <xrpl/protocol/SField.h>
26#include <xrpl/protocol/jss.h>
27
28namespace ripple {
29namespace test {
30namespace jtx {
31namespace token {
32
34mint(jtx::Account const& account, std::uint32_t nfTokenTaxon)
35{
36 Json::Value jv;
37 jv[sfAccount.jsonName] = account.human();
38 jv[sfNFTokenTaxon.jsonName] = nfTokenTaxon;
39 jv[sfTransactionType.jsonName] = jss::NFTokenMint;
40 return jv;
41}
42
43void
44xferFee::operator()(Env& env, JTx& jt) const
45{
46 jt.jv[sfTransferFee.jsonName] = xferFee_;
47}
48
49void
50issuer::operator()(Env& env, JTx& jt) const
51{
52 jt.jv[sfIssuer.jsonName] = issuer_;
53}
54
55void
56uri::operator()(Env& env, JTx& jt) const
57{
58 jt.jv[sfURI.jsonName] = uri_;
59}
60
61void
62amount::operator()(Env& env, JTx& jt) const
63{
64 jt.jv[sfAmount.jsonName] = amount_.getJson(JsonOptions::none);
65}
66
69 jtx::Env const& env,
70 jtx::Account const& issuer,
71 std::uint32_t nfTokenTaxon,
74{
75 // Get the nftSeq from the account root of the issuer.
76 std::uint32_t const nftSeq = {
77 env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
78 return token::getID(env, issuer, nfTokenTaxon, nftSeq, flags, xferFee);
79}
80
83 jtx::Env const& env,
84 jtx::Account const& issuer,
85 std::uint32_t nfTokenTaxon,
86 std::uint32_t nftSeq,
89{
90 // We must add issuer's FirstNFTokenSequence to offset the starting NFT
91 // sequence number.
92 nftSeq +=
93 env.le(issuer)->at(~sfFirstNFTokenSequence).value_or(env.seq(issuer));
95 flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
96}
97
99burn(jtx::Account const& account, uint256 const& nftokenID)
100{
101 Json::Value jv;
102 jv[sfAccount.jsonName] = account.human();
103 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
104 jv[jss::TransactionType] = jss::NFTokenBurn;
105 return jv;
106}
107
110 jtx::Account const& account,
111 uint256 const& nftokenID,
112 STAmount const& amount)
113{
114 Json::Value jv;
115 jv[sfAccount.jsonName] = account.human();
116 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
117 jv[sfAmount.jsonName] = amount.getJson(JsonOptions::none);
118 jv[jss::TransactionType] = jss::NFTokenCreateOffer;
119 return jv;
120}
121
122void
123owner::operator()(Env& env, JTx& jt) const
124{
125 jt.jv[sfOwner.jsonName] = owner_;
126}
127
128void
130{
131 jt.jv[sfExpiration.jsonName] = expires_;
132}
133
134void
136{
137 jt.jv[sfDestination.jsonName] = dest_;
138}
139
140template <typename T>
141static Json::Value
142cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
143{
144 Json::Value jv;
145 jv[sfAccount.jsonName] = account.human();
146 if (!empty(nftokenOffers))
147 {
148 jv[sfNFTokenOffers.jsonName] = Json::arrayValue;
149 for (uint256 const& nftokenOffer : nftokenOffers)
150 jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
151 }
152 jv[jss::TransactionType] = jss::NFTokenCancelOffer;
153 return jv;
154}
155
158 jtx::Account const& account,
159 std::initializer_list<uint256> const& nftokenOffers)
160{
161 return cancelOfferImpl(account, nftokenOffers);
162}
163
166 jtx::Account const& account,
167 std::vector<uint256> const& nftokenOffers)
168{
169 return cancelOfferImpl(account, nftokenOffers);
170}
171
172void
174{
175 jt.jv[sfRootIndex.jsonName] = rootIndex_;
176}
177
179acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
180{
181 Json::Value jv;
182 jv[sfAccount.jsonName] = account.human();
183 jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
184 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
185 return jv;
186}
187
189acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
190{
191 Json::Value jv;
192 jv[sfAccount.jsonName] = account.human();
193 jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
194 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
195 return jv;
196}
197
200 jtx::Account const& account,
201 uint256 const& buyOfferIndex,
202 uint256 const& sellOfferIndex)
203{
204 Json::Value jv;
205 jv[sfAccount.jsonName] = account.human();
206 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
207 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
208 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
209 return jv;
210}
211
212void
214{
215 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::none);
216}
217
219setMinter(jtx::Account const& account, jtx::Account const& minter)
220{
222 jt[sfNFTokenMinter.fieldName] = minter.human();
223 return jt;
224}
225
228{
229 return fclear(account, asfAuthorizedNFTokenMinter);
230}
231
233modify(jtx::Account const& account, uint256 const& nftokenID)
234{
235 Json::Value jv;
236 jv[sfAccount.jsonName] = account.human();
237 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
238 jv[jss::TransactionType] = jss::NFTokenModify;
239 return jv;
240}
241
242} // namespace token
243} // namespace jtx
244} // namespace test
245} // namespace ripple
Represents a JSON value.
Definition json_value.h:149
Value & append(Value const &value)
Append value to array at the end.
static uint256 createNFTokenID(std::uint16_t flags, std::uint16_t fee, AccountID const &issuer, nft::Taxon taxon, std::uint32_t tokenSeq)
Json::Value getJson(JsonOptions=JsonOptions::none) const override
Definition STAmount.cpp:772
Immutable cryptographic account descriptor.
Definition Account.h:39
std::string const & human() const
Returns the human readable public key.
Definition Account.h:118
A transaction testing environment.
Definition Env.h:121
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition Env.cpp:269
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition Env.cpp:278
Match set account flags.
Definition flags.h:128
Sets the optional amount field on an NFTokenMint.
Definition token.h:88
void operator()(Env &, JTx &jtx) const
Definition token.cpp:62
void operator()(Env &, JTx &jtx) const
Definition token.cpp:213
void operator()(Env &, JTx &jtx) const
Definition token.cpp:135
void operator()(Env &, JTx &jtx) const
Definition token.cpp:129
Sets the optional Issuer on an NFTokenMint.
Definition token.h:58
void operator()(Env &, JTx &jtx) const
Definition token.cpp:50
void operator()(Env &, JTx &jtx) const
Definition token.cpp:123
void operator()(Env &, JTx &jtx) const
Definition token.cpp:173
void operator()(Env &, JTx &jtx) const
Definition token.cpp:56
Sets the optional TransferFee on an NFTokenMint.
Definition token.h:43
void operator()(Env &, JTx &jtx) const
Definition token.cpp:44
@ arrayValue
array value (ordered list)
Definition json_value.h:44
Taxon toTaxon(std::uint32_t i)
Definition nft.h:42
Json::Value clearMinter(jtx::Account const &account)
Clear any authorized minter from an account root.
Definition token.cpp:227
uint256 getNextID(jtx::Env const &env, jtx::Account const &issuer, std::uint32_t nfTokenTaxon, std::uint16_t flags, std::uint16_t xferFee)
Get the next NFTokenID that will be issued.
Definition token.cpp:68
uint256 getID(jtx::Env const &env, jtx::Account const &issuer, std::uint32_t nfTokenTaxon, std::uint32_t nftSeq, std::uint16_t flags, std::uint16_t xferFee)
Get the NFTokenID for a particular nftSequence.
Definition token.cpp:82
Json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition token.cpp:219
Json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition token.cpp:109
Json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition token.cpp:189
Json::Value modify(jtx::Account const &account, uint256 const &nftokenID)
Modify an NFToken.
Definition token.cpp:233
Json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition token.cpp:179
static Json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition token.cpp:142
Json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition token.cpp:34
Json::Value burn(jtx::Account const &account, uint256 const &nftokenID)
Burn an NFToken.
Definition token.cpp:99
Json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition token.cpp:157
Json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition token.cpp:199
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
Definition flags.h:121
Json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
Definition flags.cpp:29
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:25
constexpr std::uint32_t asfAuthorizedNFTokenMinter
Definition TxFlags.h:86
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:630
Execution context for applying a JSON transaction.
Definition JTx.h:45
Json::Value jv
Definition JTx.h:46