xrpld
Loading...
Searching...
No Matches
token.cpp
1#include <test/jtx/token.h>
2
3#include <test/jtx/Account.h>
4#include <test/jtx/Env.h>
5#include <test/jtx/JTx.h>
6#include <test/jtx/flags.h>
7
8#include <xrpl/basics/base_uint.h>
9#include <xrpl/json/json_value.h>
10#include <xrpl/protocol/SField.h>
11#include <xrpl/protocol/TxFlags.h>
12#include <xrpl/protocol/jss.h>
13#include <xrpl/protocol/nft.h>
14#include <xrpl/tx/transactors/nft/NFTokenMint.h>
15
16#include <cstdint>
17#include <initializer_list>
18#include <vector>
19
21
23mint(jtx::Account const& account, std::uint32_t nfTokenTaxon)
24{
25 json::Value jv;
26 jv[sfAccount.jsonName] = account.human();
27 jv[sfNFTokenTaxon.jsonName] = nfTokenTaxon;
28 jv[sfTransactionType.jsonName] = jss::NFTokenMint;
29 return jv;
30}
31
32void
33XferFee::operator()(Env& env, JTx& jt) const
34{
35 jt.jv[sfTransferFee.jsonName] = xferFee_;
36}
37
38void
39Issuer::operator()(Env& env, JTx& jt) const
40{
41 jt.jv[sfIssuer.jsonName] = issuer_;
42}
43
44void
45Uri::operator()(Env& env, JTx& jt) const
46{
47 jt.jv[sfURI.jsonName] = uri_;
48}
49
50void
51Amount::operator()(Env& env, JTx& jt) const
52{
53 jt.jv[sfAmount.jsonName] = amount_.getJson(JsonOptions::Values::None);
54}
55
58 jtx::Env const& env,
59 jtx::Account const& issuer,
60 std::uint32_t nfTokenTaxon,
61 std::uint16_t flags,
62 std::uint16_t xferFee)
63{
64 // Get the nftSeq from the account root of the issuer.
65 std::uint32_t const nftSeq = {env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
66 return token::getID(env, issuer, nfTokenTaxon, nftSeq, flags, xferFee);
67}
68
71 jtx::Env const& env,
72 jtx::Account const& issuer,
73 std::uint32_t nfTokenTaxon,
74 std::uint32_t nftSeq,
75 std::uint16_t flags,
76 std::uint16_t xferFee)
77{
78 // We must add issuer's FirstNFTokenSequence to offset the starting NFT
79 // sequence number.
80 nftSeq += env.le(issuer)->at(~sfFirstNFTokenSequence).value_or(env.seq(issuer));
82 flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
83}
84
86burn(jtx::Account const& account, uint256 const& nftokenID)
87{
88 json::Value jv;
89 jv[sfAccount.jsonName] = account.human();
90 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
91 jv[jss::TransactionType] = jss::NFTokenBurn;
92 return jv;
93}
94
96createOffer(jtx::Account const& account, uint256 const& nftokenID, STAmount const& amount)
97{
98 json::Value jv;
99 jv[sfAccount.jsonName] = account.human();
100 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
101 jv[sfAmount.jsonName] = amount.getJson(JsonOptions::Values::None);
102 jv[jss::TransactionType] = jss::NFTokenCreateOffer;
103 return jv;
104}
105
106void
107Owner::operator()(Env& env, JTx& jt) const
108{
109 jt.jv[sfOwner.jsonName] = owner_;
110}
111
112void
114{
115 jt.jv[sfExpiration.jsonName] = expires_;
116}
117
118void
120{
121 jt.jv[sfDestination.jsonName] = dest_;
122}
123
124template <typename T>
125static json::Value
126cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
127{
128 json::Value jv;
129 jv[sfAccount.jsonName] = account.human();
130 if (!empty(nftokenOffers))
131 {
132 jv[sfNFTokenOffers.jsonName] = json::ValueType::Array;
133 for (uint256 const& nftokenOffer : nftokenOffers)
134 jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
135 }
136 jv[jss::TransactionType] = jss::NFTokenCancelOffer;
137 return jv;
138}
139
141cancelOffer(jtx::Account const& account, std::initializer_list<uint256> const& nftokenOffers)
142{
143 return cancelOfferImpl(account, nftokenOffers);
144}
145
147cancelOffer(jtx::Account const& account, std::vector<uint256> const& nftokenOffers)
148{
149 return cancelOfferImpl(account, nftokenOffers);
150}
151
152void
154{
155 jt.jv[sfRootIndex.jsonName] = rootIndex_;
156}
157
159acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
160{
161 json::Value jv;
162 jv[sfAccount.jsonName] = account.human();
163 jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
164 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
165 return jv;
166}
167
169acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
170{
171 json::Value jv;
172 jv[sfAccount.jsonName] = account.human();
173 jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
174 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
175 return jv;
176}
177
180 jtx::Account const& account,
181 uint256 const& buyOfferIndex,
182 uint256 const& sellOfferIndex)
183{
184 json::Value jv;
185 jv[sfAccount.jsonName] = account.human();
186 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
187 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
188 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
189 return jv;
190}
191
192void
194{
195 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::Values::None);
196}
197
199setMinter(jtx::Account const& account, jtx::Account const& minter)
200{
201 json::Value jt = fset(account, asfAuthorizedNFTokenMinter);
202 jt[sfNFTokenMinter.fieldName] = minter.human();
203 return jt;
204}
205
208{
209 return fclear(account, asfAuthorizedNFTokenMinter);
210}
211
213modify(jtx::Account const& account, uint256 const& nftokenID)
214{
215 json::Value jv;
216 jv[sfAccount.jsonName] = account.human();
217 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
218 jv[jss::TransactionType] = jss::NFTokenModify;
219 return jv;
220}
221
222} // namespace xrpl::test::jtx::token
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::Values::None) const override
Definition STAmount.cpp:734
Immutable cryptographic account descriptor.
Definition jtx/Account.h:17
std::string const & human() const
Returns the human readable public key.
Definition jtx/Account.h:92
A transaction testing environment.
Definition Env.h:143
SLE::const_pointer le(Account const &account) const
Return an account root.
Definition Env.cpp:284
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition Env.cpp:275
void operator()(Env &, JTx &jtx) const
Definition token.cpp:51
STAmount const amount_
Definition token.h:66
void operator()(Env &, JTx &jtx) const
Definition token.cpp:193
void operator()(Env &, JTx &jtx) const
Definition token.cpp:119
void operator()(Env &, JTx &jtx) const
Definition token.cpp:113
void operator()(Env &, JTx &jtx) const
Definition token.cpp:39
void operator()(Env &, JTx &jtx) const
Definition token.cpp:107
void operator()(Env &, JTx &jtx) const
Definition token.cpp:153
void operator()(Env &, JTx &jtx) const
Definition token.cpp:45
void operator()(Env &, JTx &jtx) const
Definition token.cpp:33
@ Array
array value (ordered list)
Definition json_value.h:25
Taxon toTaxon(std::uint32_t i)
Definition nft.h:21
static json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition token.cpp:126
json::Value clearMinter(jtx::Account const &account)
Clear any authorized minter from an account root.
Definition token.cpp:207
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:70
json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition token.cpp:179
json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition token.cpp:23
json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition token.cpp:141
json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition token.cpp:96
json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition token.cpp:159
json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition token.cpp:169
json::Value modify(jtx::Account const &account, uint256 const &nftokenID)
Modify an NFToken.
Definition token.cpp:213
json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition token.cpp:199
json::Value burn(jtx::Account const &account, uint256 const &nftokenID)
Burn an NFToken.
Definition token.cpp:86
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:57
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:15
std::string to_string(BaseUInt< Bits, Tag > const &a)
Definition base_uint.h:633
BaseUInt< 256 > uint256
Definition base_uint.h:562
Execution context for applying a JSON transaction.
Definition JTx.h:23
json::Value jv
Definition JTx.h:24