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 ripple {
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 = {
58 env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
59 return token::getID(env, issuer, nfTokenTaxon, nftSeq, flags, xferFee);
60}
61
64 jtx::Env const& env,
65 jtx::Account const& issuer,
66 std::uint32_t nfTokenTaxon,
67 std::uint32_t nftSeq,
70{
71 // We must add issuer's FirstNFTokenSequence to offset the starting NFT
72 // sequence number.
73 nftSeq +=
74 env.le(issuer)->at(~sfFirstNFTokenSequence).value_or(env.seq(issuer));
76 flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
77}
78
80burn(jtx::Account const& account, uint256 const& nftokenID)
81{
82 Json::Value jv;
83 jv[sfAccount.jsonName] = account.human();
84 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
85 jv[jss::TransactionType] = jss::NFTokenBurn;
86 return jv;
87}
88
91 jtx::Account const& account,
92 uint256 const& nftokenID,
93 STAmount const& amount)
94{
95 Json::Value jv;
96 jv[sfAccount.jsonName] = account.human();
97 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
98 jv[sfAmount.jsonName] = amount.getJson(JsonOptions::none);
99 jv[jss::TransactionType] = jss::NFTokenCreateOffer;
100 return jv;
101}
102
103void
104owner::operator()(Env& env, JTx& jt) const
105{
106 jt.jv[sfOwner.jsonName] = owner_;
107}
108
109void
111{
112 jt.jv[sfExpiration.jsonName] = expires_;
113}
114
115void
117{
118 jt.jv[sfDestination.jsonName] = dest_;
119}
120
121template <typename T>
122static Json::Value
123cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
124{
125 Json::Value jv;
126 jv[sfAccount.jsonName] = account.human();
127 if (!empty(nftokenOffers))
128 {
129 jv[sfNFTokenOffers.jsonName] = Json::arrayValue;
130 for (uint256 const& nftokenOffer : nftokenOffers)
131 jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
132 }
133 jv[jss::TransactionType] = jss::NFTokenCancelOffer;
134 return jv;
135}
136
139 jtx::Account const& account,
140 std::initializer_list<uint256> const& nftokenOffers)
141{
142 return cancelOfferImpl(account, nftokenOffers);
143}
144
147 jtx::Account const& account,
148 std::vector<uint256> const& nftokenOffers)
149{
150 return cancelOfferImpl(account, nftokenOffers);
151}
152
153void
155{
156 jt.jv[sfRootIndex.jsonName] = rootIndex_;
157}
158
160acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
161{
162 Json::Value jv;
163 jv[sfAccount.jsonName] = account.human();
164 jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
165 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
166 return jv;
167}
168
170acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
171{
172 Json::Value jv;
173 jv[sfAccount.jsonName] = account.human();
174 jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
175 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
176 return jv;
177}
178
181 jtx::Account const& account,
182 uint256 const& buyOfferIndex,
183 uint256 const& sellOfferIndex)
184{
185 Json::Value jv;
186 jv[sfAccount.jsonName] = account.human();
187 jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
188 jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
189 jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
190 return jv;
191}
192
193void
195{
196 jt.jv[sfNFTokenBrokerFee.jsonName] = brokerFee_.getJson(JsonOptions::none);
197}
198
200setMinter(jtx::Account const& account, jtx::Account const& minter)
201{
203 jt[sfNFTokenMinter.fieldName] = minter.human();
204 return jt;
205}
206
209{
210 return fclear(account, asfAuthorizedNFTokenMinter);
211}
212
214modify(jtx::Account const& account, uint256 const& nftokenID)
215{
216 Json::Value jv;
217 jv[sfAccount.jsonName] = account.human();
218 jv[sfNFTokenID.jsonName] = to_string(nftokenID);
219 jv[jss::TransactionType] = jss::NFTokenModify;
220 return jv;
221}
222
223} // namespace token
224} // namespace jtx
225} // namespace test
226} // namespace ripple
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:753
Immutable cryptographic account descriptor.
Definition Account.h:20
std::string const & human() const
Returns the human readable public key.
Definition Account.h:99
A transaction testing environment.
Definition Env.h:102
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition Env.cpp:250
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition Env.cpp:259
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
void operator()(Env &, JTx &jtx) const
Definition token.cpp:194
void operator()(Env &, JTx &jtx) const
Definition token.cpp:116
void operator()(Env &, JTx &jtx) const
Definition token.cpp:110
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:104
void operator()(Env &, JTx &jtx) const
Definition token.cpp:154
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:25
Taxon toTaxon(std::uint32_t i)
Definition nft.h:23
Json::Value clearMinter(jtx::Account const &account)
Clear any authorized minter from an account root.
Definition token.cpp:208
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
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:63
Json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition token.cpp:200
Json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition token.cpp:90
Json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition token.cpp:170
Json::Value modify(jtx::Account const &account, uint256 const &nftokenID)
Modify an NFToken.
Definition token.cpp:214
Json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition token.cpp:160
static Json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition token.cpp:123
Json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition token.cpp:15
Json::Value burn(jtx::Account const &account, uint256 const &nftokenID)
Burn an NFToken.
Definition token.cpp:80
Json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition token.cpp:138
Json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition token.cpp:180
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
constexpr std::uint32_t asfAuthorizedNFTokenMinter
Definition TxFlags.h:67
std::string to_string(base_uint< Bits, Tag > const &a)
Definition base_uint.h:611
Execution context for applying a JSON transaction.
Definition JTx.h:26
Json::Value jv
Definition JTx.h:27