rippled
Loading...
Searching...
No Matches
token.cpp
1#include <test/jtx/flags.h>
2#include <test/jtx/token.h>
3
4#include <xrpld/app/tx/detail/NFTokenMint.h>
5
6#include <xrpl/protocol/SField.h>
7#include <xrpl/protocol/jss.h>
8
9namespace xrpl {
10namespace test {
11namespace jtx {
12namespace token {
13
15mint(jtx::Account const& account, std::uint32_t nfTokenTaxon)
16{
17 Json::Value jv;
18 jv[sfAccount.jsonName] = account.human();
19 jv[sfNFTokenTaxon.jsonName] = nfTokenTaxon;
20 jv[sfTransactionType.jsonName] = jss::NFTokenMint;
21 return jv;
22}
23
24void
25xferFee::operator()(Env& env, JTx& jt) const
26{
27 jt.jv[sfTransferFee.jsonName] = xferFee_;
28}
29
30void
31issuer::operator()(Env& env, JTx& jt) const
32{
33 jt.jv[sfIssuer.jsonName] = issuer_;
34}
35
36void
37uri::operator()(Env& env, JTx& jt) const
38{
39 jt.jv[sfURI.jsonName] = uri_;
40}
41
42void
43amount::operator()(Env& env, JTx& jt) const
44{
45 jt.jv[sfAmount.jsonName] = amount_.getJson(JsonOptions::none);
46}
47
50 jtx::Env const& env,
51 jtx::Account const& issuer,
52 std::uint32_t nfTokenTaxon,
55{
56 // Get the nftSeq from the account root of the issuer.
57 std::uint32_t const nftSeq = {env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
58 return token::getID(env, issuer, nfTokenTaxon, nftSeq, flags, xferFee);
59}
60
63 jtx::Env const& env,
64 jtx::Account const& issuer,
65 std::uint32_t nfTokenTaxon,
66 std::uint32_t nftSeq,
69{
70 // We must add issuer's FirstNFTokenSequence to offset the starting NFT
71 // sequence number.
72 nftSeq += env.le(issuer)->at(~sfFirstNFTokenSequence).value_or(env.seq(issuer));
74}
75
77burn(jtx::Account const& account, uint256 const& nftokenID)
78{
79 Json::Value jv;
80 jv[sfAccount.jsonName] = account.human();
81 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
82 jv[jss::TransactionType] = jss::NFTokenBurn;
83 return jv;
84}
85
87createOffer(jtx::Account const& account, uint256 const& nftokenID, STAmount const& amount)
88{
89 Json::Value jv;
90 jv[sfAccount.jsonName] = account.human();
91 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
92 jv[sfAmount.jsonName] = amount.getJson(JsonOptions::none);
93 jv[jss::TransactionType] = jss::NFTokenCreateOffer;
94 return jv;
95}
96
97void
98owner::operator()(Env& env, JTx& jt) const
99{
100 jt.jv[sfOwner.jsonName] = owner_;
101}
102
103void
105{
106 jt.jv[sfExpiration.jsonName] = expires_;
107}
108
109void
111{
112 jt.jv[sfDestination.jsonName] = dest_;
113}
114
115template <typename T>
116static Json::Value
117cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
118{
119 Json::Value jv;
120 jv[sfAccount.jsonName] = account.human();
121 if (!empty(nftokenOffers))
122 {
123 jv[sfNFTokenOffers.jsonName] = Json::arrayValue;
124 for (uint256 const& nftokenOffer : nftokenOffers)
125 jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
126 }
127 jv[jss::TransactionType] = jss::NFTokenCancelOffer;
128 return jv;
129}
130
132cancelOffer(jtx::Account const& account, std::initializer_list<uint256> const& nftokenOffers)
133{
134 return cancelOfferImpl(account, nftokenOffers);
135}
136
138cancelOffer(jtx::Account const& account, std::vector<uint256> const& nftokenOffers)
139{
140 return cancelOfferImpl(account, nftokenOffers);
141}
142
143void
145{
146 jt.jv[sfRootIndex.jsonName] = rootIndex_;
147}
148
150acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
151{
152 Json::Value jv;
153 jv[sfAccount.jsonName] = account.human();
154 jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
155 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
156 return jv;
157}
158
160acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
161{
162 Json::Value jv;
163 jv[sfAccount.jsonName] = account.human();
164 jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
165 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
166 return jv;
167}
168
170brokerOffers(jtx::Account const& account, uint256 const& buyOfferIndex, uint256 const& sellOfferIndex)
171{
172 Json::Value jv;
173 jv[sfAccount.jsonName] = account.human();
174 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
175 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
176 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
177 return jv;
178}
179
180void
182{
183 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::none);
184}
185
187setMinter(jtx::Account const& account, jtx::Account const& minter)
188{
190 jt[sfNFTokenMinter.fieldName] = minter.human();
191 return jt;
192}
193
196{
197 return fclear(account, asfAuthorizedNFTokenMinter);
198}
199
201modify(jtx::Account const& account, uint256 const& nftokenID)
202{
203 Json::Value jv;
204 jv[sfAccount.jsonName] = account.human();
205 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
206 jv[jss::TransactionType] = jss::NFTokenModify;
207 return jv;
208}
209
210} // namespace token
211} // namespace jtx
212} // namespace test
213} // namespace xrpl
Represents a JSON value.
Definition json_value.h:131
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:721
Immutable cryptographic account descriptor.
Definition Account.h:20
std::string const & human() const
Returns the human readable public key.
Definition Account.h:95
A transaction testing environment.
Definition Env.h:98
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition Env.cpp:248
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition Env.cpp:239
Match set account flags.
Definition flags.h:109
Sets the optional amount field on an NFTokenMint.
Definition token.h:69
void operator()(Env &, JTx &jtx) const
Definition token.cpp:43
STAmount const amount_
Definition token.h:71
void operator()(Env &, JTx &jtx) const
Definition token.cpp:181
void operator()(Env &, JTx &jtx) const
Definition token.cpp:110
void operator()(Env &, JTx &jtx) const
Definition token.cpp:104
Sets the optional Issuer on an NFTokenMint.
Definition token.h:39
void operator()(Env &, JTx &jtx) const
Definition token.cpp:31
void operator()(Env &, JTx &jtx) const
Definition token.cpp:98
void operator()(Env &, JTx &jtx) const
Definition token.cpp:144
void operator()(Env &, JTx &jtx) const
Definition token.cpp:37
Sets the optional TransferFee on an NFTokenMint.
Definition token.h:24
void operator()(Env &, JTx &jtx) const
Definition token.cpp:25
@ arrayValue
array value (ordered list)
Definition json_value.h:26
Taxon toTaxon(std::uint32_t i)
Definition nft.h:23
Json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition token.cpp:187
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:62
Json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition token.cpp:15
Json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition token.cpp:150
Json::Value burn(jtx::Account const &account, uint256 const &nftokenID)
Burn an NFToken.
Definition token.cpp:77
Json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition token.cpp:170
Json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition token.cpp:160
Json::Value clearMinter(jtx::Account const &account)
Clear any authorized minter from an account root.
Definition token.cpp:195
static Json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition token.cpp:117
Json::Value modify(jtx::Account const &account, uint256 const &nftokenID)
Modify an NFToken.
Definition token.cpp:201
Json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition token.cpp:132
Json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition token.cpp:87
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:49
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
Definition flags.h:102
Json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
Definition flags.cpp:10
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:598
constexpr std::uint32_t asfAuthorizedNFTokenMinter
Definition TxFlags.h:67
Execution context for applying a JSON transaction.
Definition JTx.h:26
Json::Value jv
Definition JTx.h:27