rippled
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 <ripple/app/tx/impl/NFTokenMint.h>
24 #include <ripple/protocol/SField.h>
25 #include <ripple/protocol/jss.h>
26 
27 namespace ripple {
28 namespace test {
29 namespace jtx {
30 namespace token {
31 
33 mint(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 
42 void
43 xferFee::operator()(Env& env, JTx& jt) const
44 {
46 }
47 
48 void
49 issuer::operator()(Env& env, JTx& jt) const
50 {
52 }
53 
54 void
55 uri::operator()(Env& env, JTx& jt) const
56 {
57  jt.jv[sfURI.jsonName] = uri_;
58 }
59 
60 uint256
62  jtx::Env const& env,
63  jtx::Account const& issuer,
64  std::uint32_t nfTokenTaxon,
67 {
68  // Get the nftSeq from the account root of the issuer.
69  std::uint32_t const nftSeq = {
70  env.le(issuer)->at(~sfMintedNFTokens).value_or(0)};
71  return getID(issuer, nfTokenTaxon, nftSeq, flags, xferFee);
72 }
73 
74 uint256
76  jtx::Account const& issuer,
77  std::uint32_t nfTokenTaxon,
78  std::uint32_t nftSeq,
81 {
83  flags, xferFee, issuer, nft::toTaxon(nfTokenTaxon), nftSeq);
84 }
85 
87 burn(jtx::Account const& account, uint256 const& nftokenID)
88 {
89  Json::Value jv;
90  jv[sfAccount.jsonName] = account.human();
91  jv[sfNFTokenID.jsonName] = to_string(nftokenID);
92  jv[jss::TransactionType] = jss::NFTokenBurn;
93  return jv;
94 }
95 
98  jtx::Account const& account,
99  uint256 const& nftokenID,
100  STAmount const& amount)
101 {
102  Json::Value jv;
103  jv[sfAccount.jsonName] = account.human();
104  jv[sfNFTokenID.jsonName] = to_string(nftokenID);
106  jv[jss::TransactionType] = jss::NFTokenCreateOffer;
107  return jv;
108 }
109 
110 void
111 owner::operator()(Env& env, JTx& jt) const
112 {
113  jt.jv[sfOwner.jsonName] = owner_;
114 }
115 
116 void
118 {
120 }
121 
122 void
124 {
126 }
127 
128 template <typename T>
129 static Json::Value
130 cancelOfferImpl(jtx::Account const& account, T const& nftokenOffers)
131 {
132  Json::Value jv;
133  jv[sfAccount.jsonName] = account.human();
134  if (!empty(nftokenOffers))
135  {
137  for (uint256 const& nftokenOffer : nftokenOffers)
138  jv[sfNFTokenOffers.jsonName].append(to_string(nftokenOffer));
139  }
140  jv[jss::TransactionType] = jss::NFTokenCancelOffer;
141  return jv;
142 }
143 
146  jtx::Account const& account,
147  std::initializer_list<uint256> const& nftokenOffers)
148 {
149  return cancelOfferImpl(account, nftokenOffers);
150 }
151 
154  jtx::Account const& account,
155  std::vector<uint256> const& nftokenOffers)
156 {
157  return cancelOfferImpl(account, nftokenOffers);
158 }
159 
160 void
161 rootIndex::operator()(Env& env, JTx& jt) const
162 {
164 }
165 
167 acceptBuyOffer(jtx::Account const& account, uint256 const& offerIndex)
168 {
169  Json::Value jv;
170  jv[sfAccount.jsonName] = account.human();
171  jv[sfNFTokenBuyOffer.jsonName] = to_string(offerIndex);
172  jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
173  return jv;
174 }
175 
177 acceptSellOffer(jtx::Account const& account, uint256 const& offerIndex)
178 {
179  Json::Value jv;
180  jv[sfAccount.jsonName] = account.human();
181  jv[sfNFTokenSellOffer.jsonName] = to_string(offerIndex);
182  jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
183  return jv;
184 }
185 
188  jtx::Account const& account,
189  uint256 const& buyOfferIndex,
190  uint256 const& sellOfferIndex)
191 {
192  Json::Value jv;
193  jv[sfAccount.jsonName] = account.human();
194  jv[sfNFTokenBuyOffer.jsonName] = to_string(buyOfferIndex);
195  jv[sfNFTokenSellOffer.jsonName] = to_string(sellOfferIndex);
196  jv[jss::TransactionType] = jss::NFTokenAcceptOffer;
197  return jv;
198 }
199 
200 void
201 brokerFee::operator()(Env& env, JTx& jt) const
202 {
204 }
205 
207 setMinter(jtx::Account const& account, jtx::Account const& minter)
208 {
210  jt[sfNFTokenMinter.fieldName] = minter.human();
211  return jt;
212 }
213 
215 clearMinter(jtx::Account const& account)
216 {
217  return fclear(account, asfAuthorizedNFTokenMinter);
218 }
219 
220 } // namespace token
221 } // namespace jtx
222 } // namespace test
223 } // namespace ripple
ripple::test::jtx::token::cancelOfferImpl
static Json::Value cancelOfferImpl(jtx::Account const &account, T const &nftokenOffers)
Definition: token.cpp:130
ripple::sfRootIndex
const SF_UINT256 sfRootIndex
ripple::test::jtx::token::uri::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:55
ripple::test::jtx::token::acceptBuyOffer
Json::Value acceptBuyOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken buy offer.
Definition: token.cpp:167
ripple::sfNFTokenOffers
const SF_VECTOR256 sfNFTokenOffers
ripple::sfDestination
const SF_ACCOUNT sfDestination
ripple::sfAmount
const SF_AMOUNT sfAmount
ripple::sfNFTokenID
const SF_UINT256 sfNFTokenID
ripple::test::jtx::token::rootIndex::rootIndex_
std::string rootIndex_
Definition: token.h:175
Json::arrayValue
@ arrayValue
array value (ordered list)
Definition: json_value.h:42
ripple::test::jtx::token::issuer::issuer_
std::string issuer_
Definition: token.h:60
ripple::sfOwner
const SF_ACCOUNT sfOwner
ripple::test::jtx::token::brokerOffers
Json::Value brokerOffers(jtx::Account const &account, uint256 const &buyOfferIndex, uint256 const &sellOfferIndex)
Broker two NFToken offers.
Definition: token.cpp:187
std::vector
STL class.
ripple::test::jtx::token::issuer
Sets the optional Issuer on an NFTokenMint.
Definition: token.h:57
ripple::SField::fieldName
const std::string fieldName
Definition: SField.h:132
ripple::test::jtx::token::getID
uint256 getID(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:75
ripple::STAmount::getJson
Json::Value getJson(JsonOptions) const override
Definition: STAmount.cpp:634
ripple::sfMintedNFTokens
const SF_UINT32 sfMintedNFTokens
ripple::test::jtx::Account::human
std::string const & human() const
Returns the human readable public key.
Definition: Account.h:113
ripple::test::jtx::token::acceptSellOffer
Json::Value acceptSellOffer(jtx::Account const &account, uint256 const &offerIndex)
Accept an NFToken sell offer.
Definition: token.cpp:177
ripple::nft::toTaxon
Taxon toTaxon(std::uint32_t i)
Definition: NFTokenUtils.h:40
ripple::test::jtx::token::rootIndex::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:161
ripple::test::jtx::token::getNextID
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:61
ripple::SField::jsonName
const Json::StaticString jsonName
Definition: SField.h:136
ripple::test::jtx::token::brokerFee::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:201
ripple::sfTransferFee
const SF_UINT16 sfTransferFee
ripple::test::jtx::token::uri::uri_
std::string uri_
Definition: token.h:75
ripple::sfExpiration
const SF_UINT32 sfExpiration
ripple::test::jtx::token::cancelOffer
Json::Value cancelOffer(jtx::Account const &account, std::initializer_list< uint256 > const &nftokenOffers)
Cancel NFTokenOffers.
Definition: token.cpp:145
ripple::base_uint
Integers of any length that is a multiple of 32-bits.
Definition: base_uint.h:81
ripple::sfTransactionType
const SF_UINT16 sfTransactionType
ripple::test::jtx::token::xferFee
Sets the optional TransferFee on an NFTokenMint.
Definition: token.h:42
Json::Value::append
Value & append(const Value &value)
Append value to array at the end.
Definition: json_value.cpp:882
ripple::test::jtx::token::brokerFee::brokerFee_
const STAmount brokerFee_
Definition: token.h:205
ripple::test::jtx::token::xferFee::xferFee_
std::uint16_t xferFee_
Definition: token.h:45
ripple::sfNFTokenMinter
const SF_ACCOUNT sfNFTokenMinter
ripple::test::jtx::token::burn
Json::Value burn(jtx::Account const &account, uint256 const &nftokenID)
Burn an NFToken.
Definition: token.cpp:87
ripple::JsonOptions::none
@ none
ripple::test::jtx::JTx
Execution context for applying a JSON transaction.
Definition: JTx.h:42
ripple::test::jtx::JTx::jv
Json::Value jv
Definition: JTx.h:44
ripple::test::jtx::fset
Json::Value fset(Account const &account, std::uint32_t on, std::uint32_t off=0)
Add and/or remove flag.
Definition: flags.cpp:28
ripple::NFTokenMint::createNFTokenID
static uint256 createNFTokenID(std::uint16_t flags, std::uint16_t fee, AccountID const &issuer, nft::Taxon taxon, std::uint32_t tokenSeq)
Definition: NFTokenMint.cpp:87
ripple::STAmount
Definition: STAmount.h:45
ripple::test::jtx::token::issuer::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:49
std::uint32_t
ripple::test::jtx::token::mint
Json::Value mint(jtx::Account const &account, std::uint32_t nfTokenTaxon)
Mint an NFToken.
Definition: token.cpp:33
ripple::test::jtx::fclear
Json::Value fclear(Account const &account, std::uint32_t off)
Remove account flag.
Definition: flags.h:40
ripple::test::jtx::token::xferFee::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:43
ripple::sfNFTokenBuyOffer
const SF_UINT256 sfNFTokenBuyOffer
ripple::test::jtx::token::createOffer
Json::Value createOffer(jtx::Account const &account, uint256 const &nftokenID, STAmount const &amount)
Create an NFTokenOffer.
Definition: token.cpp:97
ripple::sfURI
const SF_VL sfURI
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::test::jtx::token::destination::dest_
std::string dest_
Definition: token.h:149
ripple::test::jtx::flags
Match set account flags.
Definition: flags.h:108
ripple::test::jtx::token::destination::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:123
ripple::sfIssuer
const SF_ACCOUNT sfIssuer
ripple::test::jtx::Env::le
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition: Env.cpp:213
ripple::test::jtx::token::expiration::expires_
std::uint32_t expires_
Definition: token.h:134
ripple::to_string
std::string to_string(Manifest const &m)
Format the specified manifest to a string for debugging purposes.
Definition: app/misc/impl/Manifest.cpp:41
ripple::sfNFTokenTaxon
const SF_UINT32 sfNFTokenTaxon
ripple::test::jtx::Account
Immutable cryptographic account descriptor.
Definition: Account.h:37
ripple::sfAccount
const SF_ACCOUNT sfAccount
ripple::test::jtx::token::owner::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:111
ripple::sfNFTokenSellOffer
const SF_UINT256 sfNFTokenSellOffer
ripple::test::jtx::Env
A transaction testing environment.
Definition: Env.h:116
ripple::test::jtx::token::clearMinter
Json::Value clearMinter(jtx::Account const &account)
Clear any authorized minter from an account root.
Definition: token.cpp:215
ripple::sfNFTokenBrokerFee
const SF_AMOUNT sfNFTokenBrokerFee
ripple::test::jtx::token::owner::owner_
std::string owner_
Definition: token.h:119
ripple::test::jtx::token::setMinter
Json::Value setMinter(jtx::Account const &account, jtx::Account const &minter)
Set the authorized minter on an account root.
Definition: token.cpp:207
Json::Value
Represents a JSON value.
Definition: json_value.h:145
std::initializer_list
ripple::asfAuthorizedNFTokenMinter
constexpr std::uint32_t asfAuthorizedNFTokenMinter
Definition: TxFlags.h:83
ripple::test::jtx::token::expiration::operator()
void operator()(Env &, JTx &jtx) const
Definition: token.cpp:117