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#include <xrpl/protocol/SField.h>
25#include <xrpl/protocol/jss.h>
26
27namespace ripple {
28namespace test {
29namespace jtx {
30namespace token {
31
33mint(jtx::Account const& account, std::uint32_t nfTokenTaxon)
34{
35 Json::Value jv;
36 jv[sfAccount.jsonName] = account.human();
37 jv[sfNFTokenTaxon.jsonName] = nfTokenTaxon;
38 jv[sfTransactionType.jsonName] = jss::NFTokenMint;
39 return jv;
40}
41
42void
43xferFee::operator()(Env& env, JTx& jt) const
44{
45 jt.jv[sfTransferFee.jsonName] = xferFee_;
46}
47
48void
49issuer::operator()(Env& env, JTx& jt) const
50{
51 jt.jv[sfIssuer.jsonName] = issuer_;
52}
53
54void
55uri::operator()(Env& env, JTx& jt) const
56{
57 jt.jv[sfURI.jsonName] = uri_;
58}
59
60void
61amount::operator()(Env& env, JTx& jt) const
62{
63 jt.jv[sfAmount.jsonName] = amount_.getJson(JsonOptions::none);
64}
65
68 jtx::Env const& env,
69 jtx::Account const& issuer,
70 std::uint32_t nfTokenTaxon,
73{
74 // Get the nftSeq from the account root of the issuer.
75 std::uint32_t const nftSeq = {
76 env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
77 return token::getID(env, issuer, nfTokenTaxon, nftSeq, flags, xferFee);
78}
79
82 jtx::Env const& env,
83 jtx::Account const& issuer,
84 std::uint32_t nfTokenTaxon,
85 std::uint32_t nftSeq,
88{
89 if (env.current()->rules().enabled(fixNFTokenRemint))
90 {
91 // If fixNFTokenRemint is enabled, we must add issuer's
92 // FirstNFTokenSequence to offset the starting NFT sequence number.
93 nftSeq += env.le(issuer)
94 ->at(~sfFirstNFTokenSequence)
95 .value_or(env.seq(issuer));
96 }
98 flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
99}
100
102burn(jtx::Account const& account, uint256 const& nftokenID)
103{
104 Json::Value jv;
105 jv[sfAccount.jsonName] = account.human();
106 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
107 jv[jss::TransactionType] = jss::NFTokenBurn;
108 return jv;
109}
110
113 jtx::Account const& account,
114 uint256 const& nftokenID,
115 STAmount const& amount)
116{
117 Json::Value jv;
118 jv[sfAccount.jsonName] = account.human();
119 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
120 jv[sfAmount.jsonName] = amount.getJson(JsonOptions::none);
121 jv[jss::TransactionType] = jss::NFTokenCreateOffer;
122 return jv;
123}
124
125void
126owner::operator()(Env& env, JTx& jt) const
127{
128 jt.jv[sfOwner.jsonName] = owner_;
129}
130
131void
133{
134 jt.jv[sfExpiration.jsonName] = expires_;
135}
136
137void
139{
140 jt.jv[sfDestination.jsonName] = dest_;
141}
142
143template <typename T>
144static Json::Value
145cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
146{
147 Json::Value jv;
148 jv[sfAccount.jsonName] = account.human();
149 if (!empty(nftokenOffers))
150 {
151 jv[sfNFTokenOffers.jsonName] = Json::arrayValue;
152 for (uint256 const& nftokenOffer : nftokenOffers)
153 jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
154 }
155 jv[jss::TransactionType] = jss::NFTokenCancelOffer;
156 return jv;
157}
158
161 jtx::Account const& account,
162 std::initializer_list<uint256> const& nftokenOffers)
163{
164 return cancelOfferImpl(account, nftokenOffers);
165}
166
169 jtx::Account const& account,
170 std::vector<uint256> const& nftokenOffers)
171{
172 return cancelOfferImpl(account, nftokenOffers);
173}
174
175void
177{
178 jt.jv[sfRootIndex.jsonName] = rootIndex_;
179}
180
182acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
183{
184 Json::Value jv;
185 jv[sfAccount.jsonName] = account.human();
186 jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
187 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
188 return jv;
189}
190
192acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
193{
194 Json::Value jv;
195 jv[sfAccount.jsonName] = account.human();
196 jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
197 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
198 return jv;
199}
200
203 jtx::Account const& account,
204 uint256 const& buyOfferIndex,
205 uint256 const& sellOfferIndex)
206{
207 Json::Value jv;
208 jv[sfAccount.jsonName] = account.human();
209 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
210 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
211 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
212 return jv;
213}
214
215void
217{
218 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::none);
219}
220
222setMinter(jtx::Account const& account, jtx::Account const& minter)
223{
225 jt[sfNFTokenMinter.fieldName] = minter.human();
226 return jt;
227}
228
231{
232 return fclear(account, asfAuthorizedNFTokenMinter);
233}
234
236modify(jtx::Account const& account, uint256 const& nftokenID)
237{
238 Json::Value jv;
239 jv[sfAccount.jsonName] = account.human();
240 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
241 jv[jss::TransactionType] = jss::NFTokenModify;
242 return jv;
243}
244
245} // namespace token
246} // namespace jtx
247} // namespace test
248} // namespace ripple
Represents a JSON value.
Definition: json_value.h:147
Value & append(const Value &value)
Append value to array at the end.
Definition: json_value.cpp:891
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) const override
Definition: STAmount.cpp:604
Immutable cryptographic account descriptor.
Definition: Account.h:38
std::string const & human() const
Returns the human readable public key.
Definition: Account.h:113
A transaction testing environment.
Definition: Env.h:117
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition: Env.cpp:216
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
Definition: Env.h:325
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition: Env.cpp:225
Match set account flags.
Definition: flags.h:112
Sets the optional amount field on an NFTokenMint.
Definition: token.h:88
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:61
STAmount const amount_
Definition: token.h:90
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:216
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:138
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:132
Sets the optional Issuer on an NFTokenMint.
Definition: token.h:58
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:49
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:126
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:176
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:55
Sets the optional TransferFee on an NFTokenMint.
Definition: token.h:43
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:43
@ arrayValue
array value (ordered list)
Definition: json_value.h:42
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:230
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:67
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:81
Json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition: token.cpp:222
Json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition: token.cpp:112
Json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition: token.cpp:192
Json::Value modify(jtx::Account const &account, uint256 const &nftokenID)
Modify an NFToken.
Definition: token.cpp:236
Json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition: token.cpp:182
static Json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition: token.cpp:145
Json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition: token.cpp:33
Json::Value burn(jtx::Account const &account, uint256 const &nftokenID)
Burn an NFToken.
Definition: token.cpp:102
Json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition: token.cpp:160
Json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition: token.cpp:202
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
Definition: flags.h:40
Json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
Definition: flags.cpp:28
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
constexpr std::uint32_t asfAuthorizedNFTokenMinter
Definition: TxFlags.h:85
std::string to_string(base_uint< Bits, Tag > const &a)
Definition: base_uint.h:629
Execution context for applying a JSON transaction.
Definition: JTx.h:44
Json::Value jv
Definition: JTx.h:45