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 if (env.current()->rules().enabled(fixNFTokenRemint))
91 {
92 // If fixNFTokenRemint is enabled, we must add issuer's
93 // FirstNFTokenSequence to offset the starting NFT sequence number.
94 nftSeq += env.le(issuer)
95 ->at(~sfFirstNFTokenSequence)
96 .value_or(env.seq(issuer));
97 }
99 flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
100}
101
103burn(jtx::Account const& account, uint256 const& nftokenID)
104{
105 Json::Value jv;
106 jv[sfAccount.jsonName] = account.human();
107 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
108 jv[jss::TransactionType] = jss::NFTokenBurn;
109 return jv;
110}
111
114 jtx::Account const& account,
115 uint256 const& nftokenID,
116 STAmount const& amount)
117{
118 Json::Value jv;
119 jv[sfAccount.jsonName] = account.human();
120 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
121 jv[sfAmount.jsonName] = amount.getJson(JsonOptions::none);
122 jv[jss::TransactionType] = jss::NFTokenCreateOffer;
123 return jv;
124}
125
126void
127owner::operator()(Env& env, JTx& jt) const
128{
129 jt.jv[sfOwner.jsonName] = owner_;
130}
131
132void
134{
135 jt.jv[sfExpiration.jsonName] = expires_;
136}
137
138void
140{
141 jt.jv[sfDestination.jsonName] = dest_;
142}
143
144template <typename T>
145static Json::Value
146cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
147{
148 Json::Value jv;
149 jv[sfAccount.jsonName] = account.human();
150 if (!empty(nftokenOffers))
151 {
152 jv[sfNFTokenOffers.jsonName] = Json::arrayValue;
153 for (uint256 const& nftokenOffer : nftokenOffers)
154 jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
155 }
156 jv[jss::TransactionType] = jss::NFTokenCancelOffer;
157 return jv;
158}
159
162 jtx::Account const& account,
163 std::initializer_list<uint256> const& nftokenOffers)
164{
165 return cancelOfferImpl(account, nftokenOffers);
166}
167
170 jtx::Account const& account,
171 std::vector<uint256> const& nftokenOffers)
172{
173 return cancelOfferImpl(account, nftokenOffers);
174}
175
176void
178{
179 jt.jv[sfRootIndex.jsonName] = rootIndex_;
180}
181
183acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
184{
185 Json::Value jv;
186 jv[sfAccount.jsonName] = account.human();
187 jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
188 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
189 return jv;
190}
191
193acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
194{
195 Json::Value jv;
196 jv[sfAccount.jsonName] = account.human();
197 jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
198 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
199 return jv;
200}
201
204 jtx::Account const& account,
205 uint256 const& buyOfferIndex,
206 uint256 const& sellOfferIndex)
207{
208 Json::Value jv;
209 jv[sfAccount.jsonName] = account.human();
210 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
211 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
212 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
213 return jv;
214}
215
216void
218{
219 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::none);
220}
221
223setMinter(jtx::Account const& account, jtx::Account const& minter)
224{
226 jt[sfNFTokenMinter.fieldName] = minter.human();
227 return jt;
228}
229
232{
233 return fclear(account, asfAuthorizedNFTokenMinter);
234}
235
237modify(jtx::Account const& account, uint256 const& nftokenID)
238{
239 Json::Value jv;
240 jv[sfAccount.jsonName] = account.human();
241 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
242 jv[jss::TransactionType] = jss::NFTokenModify;
243 return jv;
244}
245
246} // namespace token
247} // namespace jtx
248} // namespace test
249} // 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:795
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:268
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
Definition Env.h:331
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition Env.cpp:277
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:217
void operator()(Env &, JTx &jtx) const
Definition token.cpp:139
void operator()(Env &, JTx &jtx) const
Definition token.cpp:133
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:127
void operator()(Env &, JTx &jtx) const
Definition token.cpp:177
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:231
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:223
Json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition token.cpp:113
Json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition token.cpp:193
Json::Value modify(jtx::Account const &account, uint256 const &nftokenID)
Modify an NFToken.
Definition token.cpp:237
Json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition token.cpp:183
static Json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition token.cpp:146
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:103
Json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition token.cpp:161
Json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition token.cpp:203
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