rippled
Loading...
Searching...
No Matches
token.cpp
1#include <test/jtx/flags.h>
2#include <test/jtx/token.h>
3
4#include <xrpl/protocol/SField.h>
5#include <xrpl/protocol/jss.h>
6#include <xrpl/tx/transactors/nft/NFTokenMint.h>
7
8namespace xrpl {
9namespace test {
10namespace jtx {
11namespace token {
12
14mint(jtx::Account const& account, std::uint32_t nfTokenTaxon)
15{
16 Json::Value jv;
17 jv[sfAccount.jsonName] = account.human();
18 jv[sfNFTokenTaxon.jsonName] = nfTokenTaxon;
19 jv[sfTransactionType.jsonName] = jss::NFTokenMint;
20 return jv;
21}
22
23void
24xferFee::operator()(Env& env, JTx& jt) const
25{
26 jt.jv[sfTransferFee.jsonName] = xferFee_;
27}
28
29void
30issuer::operator()(Env& env, JTx& jt) const
31{
32 jt.jv[sfIssuer.jsonName] = issuer_;
33}
34
35void
36uri::operator()(Env& env, JTx& jt) const
37{
38 jt.jv[sfURI.jsonName] = uri_;
39}
40
41void
42amount::operator()(Env& env, JTx& jt) const
43{
44 jt.jv[sfAmount.jsonName] = amount_.getJson(JsonOptions::none);
45}
46
49 jtx::Env const& env,
50 jtx::Account const& issuer,
51 std::uint32_t nfTokenTaxon,
54{
55 // Get the nftSeq from the account root of the issuer.
56 std::uint32_t const nftSeq = {env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
57 return token::getID(env, issuer, nfTokenTaxon, nftSeq, flags, xferFee);
58}
59
62 jtx::Env const& env,
63 jtx::Account const& issuer,
64 std::uint32_t nfTokenTaxon,
65 std::uint32_t nftSeq,
68{
69 // We must add issuer's FirstNFTokenSequence to offset the starting NFT
70 // sequence number.
71 nftSeq += env.le(issuer)->at(~sfFirstNFTokenSequence).value_or(env.seq(issuer));
73 flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
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
171 jtx::Account const& account,
172 uint256 const& buyOfferIndex,
173 uint256 const& sellOfferIndex)
174{
175 Json::Value jv;
176 jv[sfAccount.jsonName] = account.human();
177 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
178 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
179 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
180 return jv;
181}
182
183void
185{
186 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::none);
187}
188
190setMinter(jtx::Account const& account, jtx::Account const& minter)
191{
192 Json::Value jt = fset(account, asfAuthorizedNFTokenMinter);
193 jt[sfNFTokenMinter.fieldName] = minter.human();
194 return jt;
195}
196
199{
200 return fclear(account, asfAuthorizedNFTokenMinter);
201}
202
204modify(jtx::Account const& account, uint256 const& nftokenID)
205{
206 Json::Value jv;
207 jv[sfAccount.jsonName] = account.human();
208 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
209 jv[jss::TransactionType] = jss::NFTokenModify;
210 return jv;
211}
212
213} // namespace token
214} // namespace jtx
215} // namespace test
216} // namespace xrpl
Represents a JSON value.
Definition json_value.h:130
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:744
Immutable cryptographic account descriptor.
Definition Account.h:19
std::string const & human() const
Returns the human readable public key.
Definition Account.h:94
A transaction testing environment.
Definition Env.h:122
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition Env.cpp:258
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition Env.cpp:249
Match set account flags.
Definition flags.h:108
Sets the optional amount field on an NFTokenMint.
Definition token.h:68
void operator()(Env &, JTx &jtx) const
Definition token.cpp:42
STAmount const amount_
Definition token.h:70
void operator()(Env &, JTx &jtx) const
Definition token.cpp:184
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:38
void operator()(Env &, JTx &jtx) const
Definition token.cpp:30
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:36
Sets the optional TransferFee on an NFTokenMint.
Definition token.h:23
void operator()(Env &, JTx &jtx) const
Definition token.cpp:24
@ arrayValue
array value (ordered list)
Definition json_value.h:25
Taxon toTaxon(std::uint32_t i)
Definition nft.h:22
Json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition token.cpp:190
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:61
Json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition token.cpp:14
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:198
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:204
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:48
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
Definition flags.h:101
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:5
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:602
Execution context for applying a JSON transaction.
Definition JTx.h:25
Json::Value jv
Definition JTx.h:26