diff --git a/AccountSet__test_8cpp_source.html b/AccountSet__test_8cpp_source.html
index 3653808dbe..e1db68921d 100644
--- a/AccountSet__test_8cpp_source.html
+++ b/AccountSet__test_8cpp_source.html
@@ -662,10 +662,11 @@ $(function() {
-
+
+BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBaseUtil, tx, ripple, 2)
Keylet ownerDir(AccountID const &id) noexcept
The root page of an account's directory.
Rate transferRate(ReadView const &view, AccountID const &issuer)
@@ -705,7 +706,6 @@ $(function() {
void rawReplace(std::shared_ptr< SLE > const &sle) override
Unconditionally replace a state item.
-BEAST_DEFINE_TESTSUITE_PRIO(NFToken0, tx, ripple, 2)
bool set(T &target, std::string const &name, Section const §ion)
Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...
const SF_UINT256 sfAccountTxnID
const SF_UINT32 sfTransferRate
diff --git a/LedgerData__test_8cpp_source.html b/LedgerData__test_8cpp_source.html
index cc142596b7..f673a07799 100644
--- a/LedgerData__test_8cpp_source.html
+++ b/LedgerData__test_8cpp_source.html
@@ -582,10 +582,11 @@ $(function() {
-
+
+BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBaseUtil, tx, ripple, 2)
majorityAmendments_t getMajorityAmendments(ReadView const &view)
@@ -597,7 +598,6 @@ $(function() {
T time_since_epoch(T... args)
static bool checkMarker(Json::Value const &val)
-BEAST_DEFINE_TESTSUITE_PRIO(NFToken0, tx, ripple, 2)
UInt size() const
Number of values in array or object.
diff --git a/Main_8cpp_source.html b/Main_8cpp_source.html
index 8b34d1df1f..0bea36d4f2 100644
--- a/Main_8cpp_source.html
+++ b/Main_8cpp_source.html
@@ -502,433 +502,432 @@ $(function() {
431 po::value<std::string>()->implicit_value(
""),
432 "Perform unit tests. The optional argument specifies one or "
433 "more comma-separated selectors. Each selector specifies a suite name, "
- 434 "full-name (lib.module.suite), module, or library "
-
-
-
- 438 po::value<std::string>()->implicit_value(
""),
- 439 "Supplies an argument string to unit tests. If provided, this argument "
- 440 "is made available to each suite that runs. Interpretation of the "
- 441 "argument is handled individually by any suite that accesses it -- "
- 442 "as such, it typically only make sense to provide this when running "
-
-
- 445 "Use IPv6 localhost when running unittests (default is IPv4).")(
-
- 447 "Force unit test log message output. Only useful in combination with "
- 448 "--quiet, in which case log messages will print but suite/case names "
-
-
- 451 po::value<std::size_t>(),
- 452 "Number of unittest jobs to run in parallel (child processes).");
- 453 #endif // ENABLE_TESTS
-
-
-
- 457 po::options_description hidden(
"Hidden Options");
- 458 hidden.add_options()(
-
- 460 po::value<vector<string>>(),
- 461 "Specify rpc command and parameters. This option must be repeated "
- 462 "for each command/param. Positional parameters also serve this "
-
- 464 "so this option is not needed for users")
-
-
- 467 "For internal use only when spawning child unit test processes.")
-
- 469 (
"unittest",
"Disabled in this build.")(
- 470 "unittest-child",
"Disabled in this build.")
-
- 472 (
"fg",
"Deprecated: server always in foreground mode.");
-
-
- 475 po::positional_options_description p;
- 476 p.add(
"parameters", -1);
-
- 478 po::options_description
all;
-
-
-
-
-
- 484 #endif // ENABLE_TESTS
-
-
- 487 po::options_description desc;
-
-
-
-
-
- 493 #endif // ENABLE_TESTS
-
-
-
-
-
-
- 500 po::command_line_parser(argc, argv)
-
-
-
-
-
-
-
-
-
-
-
-
-
- 514 if (vm.count(
"help"))
-
-
-
-
-
- 520 if (vm.count(
"version"))
-
-
-
-
-
-
-
- 528 if (vm.count(
"unittest") || vm.count(
"unittest-child"))
-
-
-
-
-
-
-
-
-
- 538 if (vm.count(
"unittest"))
-
-
-
- 542 if (vm.count(
"unittest-arg"))
-
-
-
- 546 bool unittestChild =
false;
- 547 if (vm.count(
"unittest-jobs"))
- 548 numJobs =
std::max(numJobs, vm[
"unittest-jobs"].as<std::size_t>());
- 549 unittestChild = bool(vm.count(
"unittest-child"));
-
-
- 552 vm[
"unittest"].as<std::string>(),
-
- 554 bool(vm.count(
"quiet")),
- 555 bool(vm.count(
"unittest-log")),
-
- 557 bool(vm.count(
"unittest-ipv6")),
-
-
-
-
-
-
- 564 if (vm.count(
"unittest-jobs"))
-
-
- 567 std::cerr <<
"rippled: '--unittest-jobs' specified without "
-
- 569 std::cerr <<
"To run the unit tests the '--unittest' option must "
-
-
-
-
- 574 #endif // ENABLE_TESTS
-
- 576 auto config = std::make_unique<Config>();
-
-
-
-
-
-
-
- 584 bool(vm.count(
"quiet")),
- 585 bool(vm.count(
"silent")),
- 586 bool(vm.count(
"standalone")));
-
- 588 if (vm.count(
"vacuum"))
-
- 590 if (config->standalone())
-
- 592 std::cerr <<
"vacuum not applicable in standalone mode.\n";
-
-
-
-
-
-
-
-
-
-
-
- 604 std::cerr <<
"exception " << e.
what() <<
" in function " << __func__
-
-
-
-
-
-
-
- 612 if (vm.contains(
"force_ledger_present_range"))
-
-
-
-
-
-
-
- 620 vm[
"force_ledger_present_range"].as<std::string>(),
- 621 boost::algorithm::is_any_of(
","));
-
- 623 for (
auto& s : strVec)
-
-
-
-
-
-
-
-
-
-
-
-
-
- 637 "Invalid force_ledger_present_range parameter");
-
- 639 config->FORCED_LEDGER_RANGE_PRESENT.emplace(r[0], r[1]);
-
-
-
-
- 644 "Invalid force_ledger_present_range parameter");
-
-
-
-
- 649 std::cerr <<
"invalid 'force_ledger_present_range' parameter. The "
- 650 "parameter must be two numbers separated by a comma. "
- 651 "The first number must be <= the second."
-
-
-
-
-
- 657 if (vm.count(
"start"))
-
-
-
-
- 662 if (vm.count(
"startReporting"))
-
-
- 665 config->START_LEDGER = vm[
"startReporting"].as<
std::string>();
-
-
- 668 if (vm.count(
"reportingReadOnly"))
-
- 670 config->setReportingReadOnly(
true);
-
-
- 673 if (vm.count(
"import"))
- 674 config->doImport =
true;
-
- 676 if (vm.count(
"nodetoshard"))
- 677 config->nodeToShard =
true;
-
- 679 if (vm.count(
"ledger"))
-
- 681 config->START_LEDGER = vm[
"ledger"].as<
std::string>();
- 682 if (vm.count(
"replay"))
-
-
-
-
- 687 else if (vm.count(
"ledgerfile"))
-
- 689 config->START_LEDGER = vm[
"ledgerfile"].as<
std::string>();
-
-
- 692 else if (vm.count(
"load") || config->FAST_LOAD)
-
-
-
-
- 697 if (vm.count(
"net") && !config->FAST_LOAD)
-
-
-
-
- 702 std::cerr <<
"Net and load/replay options are incompatible"
-
-
-
-
-
-
-
- 710 if (vm.count(
"valid"))
-
- 712 config->START_VALID =
true;
-
-
-
-
- 717 if (vm.count(
"rpc_ip"))
-
-
- 720 vm[
"rpc_ip"].as<std::string>());
-
-
-
-
-
-
-
- 728 if (endpoint->port() == 0)
-
- 730 std::cerr <<
"No port specified in rpc_ip.\n";
- 731 if (vm.count(
"rpc_port"))
-
- 733 std::cerr <<
"WARNING: using deprecated rpc_port param.\n";
-
-
-
- 737 endpoint->at_port(vm[
"rpc_port"].as<std::uint16_t>());
- 738 if (endpoint->port() == 0)
-
-
-
-
-
-
-
-
-
-
-
-
- 751 config->rpc_ip = std::move(*endpoint);
-
-
- 754 if (vm.count(
"quorum"))
-
-
-
- 758 config->VALIDATION_QUORUM = vm[
"quorum"].as<
std::size_t>();
-
-
-
-
-
-
-
- 766 std::cerr <<
"Invalid value specified for --quorum (" << e.
what()
-
-
-
-
-
-
-
-
-
- 776 if (vm.count(
"quiet"))
-
- 778 else if (vm.count(
"verbose"))
-
-
- 781 auto logs = std::make_unique<Logs>(thresh);
-
-
- 784 if (!vm.count(
"parameters"))
-
-
-
- 788 if (config->had_trailing_comments())
-
- 790 JLOG(logs->journal(
"Application").warn())
- 791 <<
"Trailing comments were seen in your config file. "
- 792 <<
"The treatment of inline/trailing comments has changed "
-
- 794 <<
"Any `#` characters NOT intended to delimit comments should "
-
- 796 <<
"preceded by a \\";
-
-
-
-
-
-
-
- 804 if (vm.count(
"debug"))
-
-
-
- 808 std::move(config), std::move(logs), std::make_unique<TimeKeeper>());
-
-
-
-
-
-
-
- 816 app->fdRequired(), app->logs().journal(
"Application")))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 837 main(
int argc,
char** argv)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 857 atexit(&google::protobuf::ShutdownProtobufLibrary);
-
- 859 return ripple::run(argc, argv);
-
+ 434 "suite name prefix, full-name (lib.module.suite), module, or library "
+ 435 "(checked in that order).")(
+
+ 437 po::value<std::string>()->implicit_value(
""),
+ 438 "Supplies an argument string to unit tests. If provided, this argument "
+ 439 "is made available to each suite that runs. Interpretation of the "
+ 440 "argument is handled individually by any suite that accesses it -- "
+ 441 "as such, it typically only make sense to provide this when running "
+
+
+ 444 "Use IPv6 localhost when running unittests (default is IPv4).")(
+
+ 446 "Force unit test log message output. Only useful in combination with "
+ 447 "--quiet, in which case log messages will print but suite/case names "
+
+
+ 450 po::value<std::size_t>(),
+ 451 "Number of unittest jobs to run in parallel (child processes).");
+ 452 #endif // ENABLE_TESTS
+
+
+
+ 456 po::options_description hidden(
"Hidden Options");
+ 457 hidden.add_options()(
+
+ 459 po::value<vector<string>>(),
+ 460 "Specify rpc command and parameters. This option must be repeated "
+ 461 "for each command/param. Positional parameters also serve this "
+
+ 463 "so this option is not needed for users")
+
+
+ 466 "For internal use only when spawning child unit test processes.")
+
+ 468 (
"unittest",
"Disabled in this build.")(
+ 469 "unittest-child",
"Disabled in this build.")
+
+ 471 (
"fg",
"Deprecated: server always in foreground mode.");
+
+
+ 474 po::positional_options_description p;
+ 475 p.add(
"parameters", -1);
+
+ 477 po::options_description
all;
+
+
+
+
+
+ 483 #endif // ENABLE_TESTS
+
+
+ 486 po::options_description desc;
+
+
+
+
+
+ 492 #endif // ENABLE_TESTS
+
+
+
+
+
+
+ 499 po::command_line_parser(argc, argv)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 513 if (vm.count(
"help"))
+
+
+
+
+
+ 519 if (vm.count(
"version"))
+
+
+
+
+
+
+
+ 527 if (vm.count(
"unittest") || vm.count(
"unittest-child"))
+
+
+
+
+
+
+
+
+
+ 537 if (vm.count(
"unittest"))
+
+
+
+ 541 if (vm.count(
"unittest-arg"))
+
+
+
+ 545 bool unittestChild =
false;
+ 546 if (vm.count(
"unittest-jobs"))
+ 547 numJobs =
std::max(numJobs, vm[
"unittest-jobs"].as<std::size_t>());
+ 548 unittestChild = bool(vm.count(
"unittest-child"));
+
+
+ 551 vm[
"unittest"].as<std::string>(),
+
+ 553 bool(vm.count(
"quiet")),
+ 554 bool(vm.count(
"unittest-log")),
+
+ 556 bool(vm.count(
"unittest-ipv6")),
+
+
+
+
+
+
+ 563 if (vm.count(
"unittest-jobs"))
+
+
+ 566 std::cerr <<
"rippled: '--unittest-jobs' specified without "
+
+ 568 std::cerr <<
"To run the unit tests the '--unittest' option must "
+
+
+
+
+ 573 #endif // ENABLE_TESTS
+
+ 575 auto config = std::make_unique<Config>();
+
+
+
+
+
+
+
+ 583 bool(vm.count(
"quiet")),
+ 584 bool(vm.count(
"silent")),
+ 585 bool(vm.count(
"standalone")));
+
+ 587 if (vm.count(
"vacuum"))
+
+ 589 if (config->standalone())
+
+ 591 std::cerr <<
"vacuum not applicable in standalone mode.\n";
+
+
+
+
+
+
+
+
+
+
+
+ 603 std::cerr <<
"exception " << e.
what() <<
" in function " << __func__
+
+
+
+
+
+
+
+ 611 if (vm.contains(
"force_ledger_present_range"))
+
+
+
+
+
+
+
+ 619 vm[
"force_ledger_present_range"].as<std::string>(),
+ 620 boost::algorithm::is_any_of(
","));
+
+ 622 for (
auto& s : strVec)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 636 "Invalid force_ledger_present_range parameter");
+
+ 638 config->FORCED_LEDGER_RANGE_PRESENT.emplace(r[0], r[1]);
+
+
+
+
+ 643 "Invalid force_ledger_present_range parameter");
+
+
+
+
+ 648 std::cerr <<
"invalid 'force_ledger_present_range' parameter. The "
+ 649 "parameter must be two numbers separated by a comma. "
+ 650 "The first number must be <= the second."
+
+
+
+
+
+ 656 if (vm.count(
"start"))
+
+
+
+
+ 661 if (vm.count(
"startReporting"))
+
+
+ 664 config->START_LEDGER = vm[
"startReporting"].as<
std::string>();
+
+
+ 667 if (vm.count(
"reportingReadOnly"))
+
+ 669 config->setReportingReadOnly(
true);
+
+
+ 672 if (vm.count(
"import"))
+ 673 config->doImport =
true;
+
+ 675 if (vm.count(
"nodetoshard"))
+ 676 config->nodeToShard =
true;
+
+ 678 if (vm.count(
"ledger"))
+
+ 680 config->START_LEDGER = vm[
"ledger"].as<
std::string>();
+ 681 if (vm.count(
"replay"))
+
+
+
+
+ 686 else if (vm.count(
"ledgerfile"))
+
+ 688 config->START_LEDGER = vm[
"ledgerfile"].as<
std::string>();
+
+
+ 691 else if (vm.count(
"load") || config->FAST_LOAD)
+
+
+
+
+ 696 if (vm.count(
"net") && !config->FAST_LOAD)
+
+
+
+
+ 701 std::cerr <<
"Net and load/replay options are incompatible"
+
+
+
+
+
+
+
+ 709 if (vm.count(
"valid"))
+
+ 711 config->START_VALID =
true;
+
+
+
+
+ 716 if (vm.count(
"rpc_ip"))
+
+
+ 719 vm[
"rpc_ip"].as<std::string>());
+
+
+
+
+
+
+
+ 727 if (endpoint->port() == 0)
+
+ 729 std::cerr <<
"No port specified in rpc_ip.\n";
+ 730 if (vm.count(
"rpc_port"))
+
+ 732 std::cerr <<
"WARNING: using deprecated rpc_port param.\n";
+
+
+
+ 736 endpoint->at_port(vm[
"rpc_port"].as<std::uint16_t>());
+ 737 if (endpoint->port() == 0)
+
+
+
+
+
+
+
+
+
+
+
+
+ 750 config->rpc_ip = std::move(*endpoint);
+
+
+ 753 if (vm.count(
"quorum"))
+
+
+
+ 757 config->VALIDATION_QUORUM = vm[
"quorum"].as<
std::size_t>();
+
+
+
+
+
+
+
+ 765 std::cerr <<
"Invalid value specified for --quorum (" << e.
what()
+
+
+
+
+
+
+
+
+
+ 775 if (vm.count(
"quiet"))
+
+ 777 else if (vm.count(
"verbose"))
+
+
+ 780 auto logs = std::make_unique<Logs>(thresh);
+
+
+ 783 if (!vm.count(
"parameters"))
+
+
+
+ 787 if (config->had_trailing_comments())
+
+ 789 JLOG(logs->journal(
"Application").warn())
+ 790 <<
"Trailing comments were seen in your config file. "
+ 791 <<
"The treatment of inline/trailing comments has changed "
+
+ 793 <<
"Any `#` characters NOT intended to delimit comments should "
+
+ 795 <<
"preceded by a \\";
+
+
+
+
+
+
+
+ 803 if (vm.count(
"debug"))
+
+
+
+ 807 std::move(config), std::move(logs), std::make_unique<TimeKeeper>());
+
+
+
+
+
+
+
+ 815 app->fdRequired(), app->logs().journal(
"Application")))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 836 main(
int argc,
char** argv)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 856 atexit(&google::protobuf::ShutdownProtobufLibrary);
+
+ 858 return ripple::run(argc, argv);
+
diff --git a/NFTokenBurn__test_8cpp_source.html b/NFTokenBurn__test_8cpp_source.html
index 8a4f44969f..36cfd83e69 100644
--- a/NFTokenBurn__test_8cpp_source.html
+++ b/NFTokenBurn__test_8cpp_source.html
@@ -97,11 +97,11 @@ $(function() {
-
+
-
+
36 if (
auto const sleAcct = env.
le(acct))
@@ -111,7 +111,7 @@ $(function() {
-
+
46 params[jss::account] = acct.
human();
@@ -123,7 +123,7 @@ $(function() {
-
+
@@ -152,7 +152,7 @@ $(function() {
-
+
87 testcase(
"Burn random");
@@ -259,9 +259,9 @@ $(function() {
- 191 BEAST_EXPECT(
nftCount(env, alice.acct) == 70);
- 192 BEAST_EXPECT(
nftCount(env, becky.acct) == 70);
- 193 BEAST_EXPECT(
nftCount(env, minter.acct) == 70);
+ 191 BEAST_EXPECT(
nftCount(env, alice.acct) == 70);
+ 192 BEAST_EXPECT(
nftCount(env, becky.acct) == 70);
+ 193 BEAST_EXPECT(
nftCount(env, minter.acct) == 70);
@@ -295,9 +295,9 @@ $(function() {
224 addOffers(alice, becky, minter);
225 addOffers(becky, minter, alice);
226 addOffers(minter, alice, becky);
-
-
-
+
+
+
@@ -337,23 +337,23 @@ $(function() {
- 269 BEAST_EXPECT(
nftCount(env, alice.acct) == alice.nfts.size());
- 270 BEAST_EXPECT(
nftCount(env, becky.acct) == becky.nfts.size());
- 271 BEAST_EXPECT(
nftCount(env, minter.acct) == minter.nfts.size());
+ 269 BEAST_EXPECT(
nftCount(env, alice.acct) == alice.nfts.size());
+ 270 BEAST_EXPECT(
nftCount(env, becky.acct) == becky.nfts.size());
+ 271 BEAST_EXPECT(
nftCount(env, minter.acct) == minter.nfts.size());
- 273 BEAST_EXPECT(
nftCount(env, alice.acct) == 0);
- 274 BEAST_EXPECT(
nftCount(env, becky.acct) == 0);
- 275 BEAST_EXPECT(
nftCount(env, minter.acct) == 0);
+ 273 BEAST_EXPECT(
nftCount(env, alice.acct) == 0);
+ 274 BEAST_EXPECT(
nftCount(env, becky.acct) == 0);
+ 275 BEAST_EXPECT(
nftCount(env, minter.acct) == 0);
-
-
-
+
+
+
-
+
@@ -519,16 +519,16 @@ $(function() {
450 genPackedTokens(nfts);
- 451 BEAST_EXPECT(
nftCount(env, alice) == 96);
-
+ 451 BEAST_EXPECT(
nftCount(env, alice) == 96);
+
454 for (
uint256 const& nft : nfts)
456 env(token::burn(alice, {nft}));
- 459 BEAST_EXPECT(
nftCount(env, alice) == 0);
-
+ 459 BEAST_EXPECT(
nftCount(env, alice) == 0);
+
463 auto checkNoTokenPages = [
this, &env]() {
@@ -555,8 +555,8 @@ $(function() {
486 genPackedTokens(nfts);
- 487 BEAST_EXPECT(
nftCount(env, alice) == 96);
-
+ 487 BEAST_EXPECT(
nftCount(env, alice) == 96);
+
491 for (
uint256 const& nft : nfts)
@@ -564,16 +564,16 @@ $(function() {
493 env(token::burn(alice, {nft}));
- 496 BEAST_EXPECT(
nftCount(env, alice) == 0);
-
+ 496 BEAST_EXPECT(
nftCount(env, alice) == 0);
+
503 genPackedTokens(nfts);
- 504 BEAST_EXPECT(
nftCount(env, alice) == 96);
-
+ 504 BEAST_EXPECT(
nftCount(env, alice) == 96);
+
@@ -581,8 +581,8 @@ $(function() {
512 nfts.erase(nfts.begin() + 32, nfts.begin() + 64);
- 513 BEAST_EXPECT(
nftCount(env, alice) == 64);
-
+ 513 BEAST_EXPECT(
nftCount(env, alice) == 64);
+
517 for (
uint256 const& nft : nfts)
@@ -590,12 +590,12 @@ $(function() {
519 env(token::burn(alice, {nft}));
- 522 BEAST_EXPECT(
nftCount(env, alice) == 0);
+ 522 BEAST_EXPECT(
nftCount(env, alice) == 0);
-
+
530 testcase(
"Burn too many offers");
@@ -694,8 +694,8 @@ $(function() {
-
-
+
+
@@ -715,7 +715,7 @@ $(function() {
-
+
@@ -747,8 +747,8 @@ $(function() {
-
-
+
+
@@ -766,7 +766,7 @@ $(function() {
-
+
@@ -793,7 +793,7 @@ $(function() {
-
+
@@ -812,7 +812,7 @@ $(function() {
-
+
@@ -842,24 +842,24 @@ $(function() {
-
+
-
+
-
+
-
-
-
+
+
+
-
+
793 using namespace test::jtx;
@@ -873,82 +873,73 @@ $(function() {
803 if (BEAST_EXPECT(instance < feats.size()))
-
+
807 BEAST_EXPECT(!last || instance == feats.size() - 1);
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
constexpr std::uint16_t maxTransferFee
The maximum token transfer fee allowed.
+BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBaseUtil, tx, ripple, 2)
const SF_UINT32 sfOwnerCount
const SF_UINT32 sfFirstNFTokenSequence
-static std::uint32_t nftCount(test::jtx::Env &env, test::jtx::Account const &acct)
constexpr const std::uint32_t tfTransferable
-void testBurnTooManyOffers(FeatureBitset features)
-
-void testBurnRandom(FeatureBitset features)
constexpr std::size_t maxDeletableTokenOfferEntries
The maximum number of offers in an offer directory for NFT to be burnable.
Json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
-
-void testWithFeats(FeatureBitset features)
-static std::uint32_t ownerCount(test::jtx::Env const &env, test::jtx::Account const &acct)
-
const SF_UINT32 sfMintedNFTokens
Keylet nftoffer(AccountID const &owner, std::uint32_t seq)
An offer from an account to buy or sell an NFT.
std::string const & human() const
Returns the human readable public key.
-
-
std::string toStyledString() const
Taxon toTaxon(std::uint32_t i)
@@ -957,41 +948,50 @@ $(function() {
const uint256 fixNFTokenRemint
+void testWithFeats(FeatureBitset features)
constexpr const std::uint32_t tfBurnable
-
-BEAST_DEFINE_TESTSUITE_PRIO(NFToken0, tx, ripple, 2)
+void testBurnRandom(FeatureBitset features)
+
+void testBurnSequential(FeatureBitset features)
+
+
+
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
UInt size() const
Number of values in array or object.
constexpr const std::uint32_t tfSellNFToken
-
bool isMember(const char *key) const
Return true if the object has a member named key.
constexpr std::size_t maxTokenOfferCancelCount
The maximum number of token offers that can be canceled at once.
+uint256 createNftAndOffers(test::jtx::Env &env, test::jtx::Account const &owner, std::vector< uint256 > &offerIndexes, size_t const tokenCancelCount)
-uint256 createNftAndOffers(test::jtx::Env &env, test::jtx::Account const &owner, std::vector< uint256 > &offerIndexes, size_t const tokenCancelCount)
+
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
const uint256 fixNFTokenDirV1
constexpr std::size_t maxTokenURILength
The maximum length of a URI inside an NFT.
-void testBurnSequential(FeatureBitset features)
+void run(std::uint32_t instance, bool last=false)
-
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
+static std::uint32_t ownerCount(test::jtx::Env const &env, test::jtx::Account const &acct)
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
+
+
std::string to_string(Manifest const &m)
Format the specified manifest to a string for debugging purposes.
Immutable cryptographic account descriptor.
const uint256 fixNonFungibleTokensV1_2
Taxon cipheredTaxon(std::uint32_t tokenSeq, Taxon taxon)
-void run(std::uint32_t instance, bool last=false)
+void testBurnTooManyOffers(FeatureBitset features)
+
A transaction testing environment.
+static std::uint32_t nftCount(test::jtx::Env &env, test::jtx::Account const &acct)
std::string asString() const
Returns the unquoted string value.
diff --git a/NFTokenDir__test_8cpp_source.html b/NFTokenDir__test_8cpp_source.html
index a9ba5028ed..44e481cb9b 100644
--- a/NFTokenDir__test_8cpp_source.html
+++ b/NFTokenDir__test_8cpp_source.html
@@ -1179,7 +1179,7 @@ $(function() {
-
+
@@ -1694,6 +1694,7 @@ $(function() {
+BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBaseUtil, tx, ripple, 2)
constexpr const std::uint32_t tfTransferable
void testWithFeats(FeatureBitset features)
@@ -1729,7 +1730,6 @@ $(function() {
void printNFTPages(test::jtx::Env &env, Volume vol)
-BEAST_DEFINE_TESTSUITE_PRIO(NFToken0, tx, ripple, 2)
UInt size() const
Number of values in array or object.
diff --git a/NFToken__test_8cpp_source.html b/NFToken__test_8cpp_source.html
index 12f851f10c..408ceebb00 100644
--- a/NFToken__test_8cpp_source.html
+++ b/NFToken__test_8cpp_source.html
@@ -98,13 +98,13 @@ $(function() {
-
+
-
+
-
+
39 if (
auto const sleAcct = env.
le(acct))
@@ -114,7 +114,7 @@ $(function() {
-
+
49 if (
auto const sleIssuer = env.
le(issuer))
@@ -124,7 +124,7 @@ $(function() {
-
+
59 if (
auto const sleIssuer = env.
le(issuer))
@@ -134,7 +134,7 @@ $(function() {
-
+
69 params[jss::account] = acct.
human();
@@ -145,7 +145,7 @@ $(function() {
-
+
80 if (
auto const sleAcct = env.
le(acct))
@@ -155,13 +155,13 @@ $(function() {
-
+
89 return env.
current()->info().parentCloseTime.time_since_epoch().count();
-
+
@@ -175,42 +175,42 @@ $(function() {
105 Account
const& master = env.master;
-
-
-
+
+
+
111 uint256 const nftId{token::getNextID(env, master, 0u)};
-
-
-
+
+
+
-
-
-
+
+
+
126 env(token::createOffer(master, nftId, XRP(10)), ter(
temDISABLED));
-
-
-
+
+
+
132 env(token::cancelOffer(master, {offerIndex}), ter(
temDISABLED));
-
-
-
+
+
+
138 env(token::acceptBuyOffer(master, offerIndex), ter(
temDISABLED));
-
-
-
+
+
+
@@ -218,30 +218,30 @@ $(function() {
147 Env env{*
this, features};
148 Account
const& master = env.master;
-
-
-
+
+
+
154 uint256 const nftId0{token::getNextID(env, env.master, 0u)};
155 env(token::mint(env.master, 0u));
-
-
-
+
+
+
161 env(token::burn(env.master, nftId0));
-
-
-
+
+
+
-
-
-
+
+
+
175 Account
const alice{
"alice"};
176 env.fund(XRP(10000), alice);
@@ -252,29 +252,29 @@ $(function() {
181 token::owner(master));
-
-
-
+
+
+
-
-
-
+
+
+
192 env(token::acceptBuyOffer(master, aliceOfferIndex));
-
-
-
+
+
+
-
-
-
+
+
+
-
+
209 testcase(
"Mint reserve");
@@ -293,16 +293,16 @@ $(function() {
223 BEAST_EXPECT(env.balance(alice) == acctReserve);
224 BEAST_EXPECT(env.balance(minter) == acctReserve);
-
-
+
+
-
-
-
+
+
+
237 env(pay(env.master, alice, incReserve + drops(9)));
@@ -328,9 +328,9 @@ $(function() {
257 fail(ss.
str(), __FILE__, line);
- 260 oneCheck(
"owner",
ownerCount(env, alice), owners);
- 261 oneCheck(
"minted",
mintedCount(env, alice), minted);
- 262 oneCheck(
"burned",
burnedCount(env, alice), burned);
+ 260 oneCheck(
"owner",
ownerCount(env, alice), owners);
+ 261 oneCheck(
"minted",
mintedCount(env, alice), minted);
+ 262 oneCheck(
"burned",
burnedCount(env, alice), burned);
@@ -430,17 +430,17 @@ $(function() {
359 fail(ss.
str(), __FILE__, line);
- 362 oneCheck(
"alice owner",
ownerCount(env, alice), aliceOwners, line);
+ 362 oneCheck(
"alice owner",
ownerCount(env, alice), aliceOwners, line);
- 364 "alice minted",
mintedCount(env, alice), aliceMinted, line);
+ 364 "alice minted",
mintedCount(env, alice), aliceMinted, line);
- 366 "alice burned",
burnedCount(env, alice), aliceBurned, line);
+ 366 "alice burned",
burnedCount(env, alice), aliceBurned, line);
- 368 "minter owner",
ownerCount(env, minter), minterOwners, line);
+ 368 "minter owner",
ownerCount(env, minter), minterOwners, line);
- 370 "minter minted",
mintedCount(env, minter), minterMinted, line);
+ 370 "minter minted",
mintedCount(env, minter), minterMinted, line);
- 372 "minter burned",
burnedCount(env, minter), minterBurned, line);
+ 372 "minter burned",
burnedCount(env, minter), minterBurned, line);
@@ -523,7 +523,7 @@ $(function() {
-
+
@@ -593,7 +593,7 @@ $(function() {
- 525 testMintInvalid(FeatureBitset features)
+ 525 testMintInvalid(FeatureBitset features)
527 // Explore many of the invalid ways to mint an NFT.
528 testcase("Mint invalid");
@@ -669,7 +669,7 @@ $(function() {
-
+
604 testcase(
"Burn invalid");
@@ -688,13 +688,13 @@ $(function() {
618 env.fund(XRP(250), alice, buyer, minter, gw);
-
+
-
+
@@ -704,14 +704,14 @@ $(function() {
-
+
639 env(token::burn(alice, nftAlice0ID),
-
+
@@ -720,7 +720,7 @@ $(function() {
649 env(token::burn(alice, token::getID(env, alice, 0, 1)),
-
+
@@ -730,7 +730,7 @@ $(function() {
-
+
664 testcase(
"Invalid NFT offer create");
@@ -747,7 +747,7 @@ $(function() {
677 env.fund(XRP(250), alice, buyer, gw);
-
+
@@ -755,18 +755,18 @@ $(function() {
-
+
-
+
695 uint256 nftNoXferID = token::getNextID(env, alice, 0);
696 env(token::mint(alice, 0));
-
+
@@ -781,21 +781,21 @@ $(function() {
-
+
716 env(token::createOffer(buyer, nftAlice0ID, XRP(1000)),
-
+
723 env(token::createOffer(buyer, nftAlice0ID, XRP(1000)),
-
+
730 env(token::createOffer(buyer, nftXrpOnlyID, buyer[
"USD"](1)),
@@ -805,21 +805,21 @@ $(function() {
734 env(token::createOffer(buyer, nftXrpOnlyID, drops(0)),
-
+
740 env(token::createOffer(buyer, nftAlice0ID, buyer[
"USD"](1)),
741 token::expiration(0),
-
+
748 env(token::createOffer(buyer, nftXrpOnlyID, XRP(1000)),
-
+
754 env(token::createOffer(alice, nftXrpOnlyID, XRP(1000)),
@@ -827,14 +827,14 @@ $(function() {
-
+
762 env(token::createOffer(alice, nftXrpOnlyID, XRP(1000)),
-
+
769 env(token::createOffer(alice, nftXrpOnlyID, XRP(1000)),
@@ -842,7 +842,7 @@ $(function() {
-
+
777 env(token::createOffer(alice, nftXrpOnlyID, XRP(1000)),
@@ -850,7 +850,7 @@ $(function() {
-
+
@@ -858,10 +858,10 @@ $(function() {
788 env(token::createOffer(buyer, nftXrpOnlyID, XRP(1000)),
-
+
-
+
796 env(token::createOffer(
@@ -869,7 +869,7 @@ $(function() {
-
+
804 env(token::createOffer(
@@ -877,18 +877,18 @@ $(function() {
-
+
812 env(token::createOffer(buyer, nftAlice0ID, gwAUD(1000)),
-
+
818 env(trust(buyer, gwAUD(1000)));
-
+
@@ -896,7 +896,7 @@ $(function() {
-
+
@@ -908,7 +908,7 @@ $(function() {
-
+
@@ -919,7 +919,7 @@ $(function() {
-
+
@@ -929,7 +929,7 @@ $(function() {
-
+
@@ -941,7 +941,7 @@ $(function() {
-
+
@@ -956,7 +956,7 @@ $(function() {
-
+
891 env(pay(env.master, buyer, XRP(50) + drops(119)));
@@ -966,7 +966,7 @@ $(function() {
-
+
901 env(pay(env.master, buyer, drops(11)));
@@ -978,11 +978,11 @@ $(function() {
-
+
-
+
916 testcase(
"Invalid NFT offer cancel");
@@ -996,13 +996,13 @@ $(function() {
926 env.fund(XRP(1000), alice, buyer, gw);
-
+
-
+
937 uint256 const buyerOfferIndex =
@@ -1011,7 +1011,7 @@ $(function() {
-
+
@@ -1021,14 +1021,14 @@ $(function() {
-
+
956 env(token::cancelOffer(buyer, {buyerOfferIndex}),
-
+
@@ -1036,7 +1036,7 @@ $(function() {
-
+
@@ -1046,19 +1046,19 @@ $(function() {
976 env(token::cancelOffer(buyer, offers), ter(
temMALFORMED));
-
+
982 env(token::cancelOffer(buyer, {buyerOfferIndex, buyerOfferIndex}),
-
+
-
+
@@ -1089,7 +1089,7 @@ $(function() {
-
+
@@ -1098,11 +1098,11 @@ $(function() {
1028 env(token::cancelOffer(buyer, {buyerOfferIndex}));
-
+
-
+
1036 testcase(
"Invalid NFT offer accept");
@@ -1116,24 +1116,24 @@ $(function() {
1046 env.fund(XRP(1000), alice, buyer, gw);
-
+
-
+
-
+
1062 uint256 nftNoXferID = token::getNextID(env, alice, 0);
1063 env(token::mint(alice, 0));
-
+
1068 uint256 const plainOfferIndex =
@@ -1141,37 +1141,37 @@ $(function() {
1070 env(token::createOffer(alice, nftAlice0ID, XRP(10)),
-
+
1077 env(token::createOffer(alice, nftAlice0ID, gwAUD(30)),
-
+
1082 uint256 const xrpOnlyOfferIndex =
1084 env(token::createOffer(alice, nftXrpOnlyID, XRP(20)),
-
+
1089 uint256 const noXferOfferIndex =
1091 env(token::createOffer(alice, nftNoXferID, XRP(30)),
-
+
1097 uint256 const aliceExpOfferIndex =
1099 env(token::createOffer(alice, nftNoXferID, XRP(40)),
-
+
-
+
@@ -1181,14 +1181,14 @@ $(function() {
-
+
1116 env(token::acceptSellOffer(buyer, noXferOfferIndex),
1117 txflags(0x00008000),
-
+
@@ -1196,7 +1196,7 @@ $(function() {
-
+
@@ -1206,7 +1206,7 @@ $(function() {
-
+
@@ -1216,7 +1216,7 @@ $(function() {
-
+
@@ -1224,7 +1224,7 @@ $(function() {
1153 token::brokerFee(gwAUD(0)),
-
+
@@ -1233,36 +1233,36 @@ $(function() {
1162 env(token::acceptBuyOffer(buyer, beast::zero),
-
+
1169 env(token::acceptBuyOffer(buyer, missingOfferIndex),
-
+
1175 env(token::acceptBuyOffer(buyer, aliceExpOfferIndex), ter(
tecEXPIRED));
-
+
1180 env(token::acceptSellOffer(buyer, beast::zero),
-
+
1186 env(token::acceptSellOffer(buyer, missingOfferIndex),
-
+
1192 env(token::acceptSellOffer(buyer, aliceExpOfferIndex), ter(
tecEXPIRED));
-
+
@@ -1274,8 +1274,8 @@ $(function() {
1204 env(pay(gw, buyer, gwAUD(30)));
-
-
+
+
@@ -1286,31 +1286,31 @@ $(function() {
1215 env(token::createOffer(buyer, nftAlice0ID, gwAUD(29)),
1216 token::owner(alice));
-
+
1221 env(token::brokerOffers(gw, buyerOfferIndex, xrpOnlyOfferIndex),
-
+
1227 env(token::brokerOffers(gw, buyerOfferIndex, plainOfferIndex),
-
+
1234 env(token::brokerOffers(gw, buyerOfferIndex, audOfferIndex),
-
+
1240 env(token::cancelOffer(buyer, {buyerOfferIndex}));
-
+
@@ -1319,7 +1319,7 @@ $(function() {
1248 env(token::createOffer(buyer, nftAlice0ID, gwAUD(31)),
1249 token::owner(alice));
-
+
@@ -1327,14 +1327,14 @@ $(function() {
1256 token::brokerFee(XRP(40)),
-
+
1262 env(token::brokerOffers(gw, buyerOfferIndex, audOfferIndex),
1263 token::brokerFee(gwAUD(31)),
-
+
@@ -1342,12 +1342,12 @@ $(function() {
1271 token::brokerFee(gwAUD(1.5)),
-
+
1277 env(token::cancelOffer(buyer, {buyerOfferIndex}));
-
+
@@ -1358,19 +1358,19 @@ $(function() {
1287 env(token::createOffer(buyer, nftAlice0ID, gwAUD(30)),
1288 token::owner(alice));
-
+
1293 env(token::acceptBuyOffer(buyer, plainOfferIndex),
-
+
1299 env(token::acceptBuyOffer(buyer, buyerOfferIndex),
-
+
1305 env(pay(buyer, gw, gwAUD(30)));
@@ -1379,7 +1379,7 @@ $(function() {
1308 env(token::acceptBuyOffer(alice, buyerOfferIndex),
-
+
@@ -1390,7 +1390,7 @@ $(function() {
1320 env(token::acceptSellOffer(gw, offerIndex));
-
+
1324 env(pay(gw, buyer, gwAUD(30)));
@@ -1399,12 +1399,12 @@ $(function() {
1328 env(token::acceptBuyOffer(alice, buyerOfferIndex),
-
+
1334 env(token::cancelOffer(buyer, {buyerOfferIndex}));
-
+
@@ -1415,26 +1415,26 @@ $(function() {
1344 env(token::createOffer(buyer, nftXrpOnlyID, XRP(30)),
1345 token::owner(alice));
-
+
1350 env(token::acceptSellOffer(alice, buyerOfferIndex),
-
+
1356 env(token::acceptSellOffer(alice, plainOfferIndex),
-
+
1363 env(token::acceptSellOffer(buyer, plainOfferIndex),
-
+
@@ -1447,7 +1447,7 @@ $(function() {
1377 env(token::acceptSellOffer(alice, offerIndex));
-
+
1381 env(pay(buyer, gw, gwAUD(30)));
@@ -1455,7 +1455,7 @@ $(function() {
1384 env(token::acceptSellOffer(buyer, audOfferIndex),
-
+
@@ -1466,7 +1466,7 @@ $(function() {
-
+
1401 testcase(
"Mint flagBurnable");
@@ -1481,7 +1481,7 @@ $(function() {
1411 env.fund(XRP(1000), alice, buyer, minter1, minter2);
-
+
1416 env(token::setMinter(alice, minter1));
@@ -1525,10 +1525,10 @@ $(function() {
-
+
1458 env(token::burn(buyer, noBurnID), token::owner(buyer));
-
+
@@ -1538,32 +1538,32 @@ $(function() {
-
+
1471 env(token::burn(alice, burnableID), token::owner(buyer));
-
+
-
+
1479 env(token::burn(buyer, burnableID));
-
+
-
+
1487 env(token::burn(buyer, burnableID), token::owner(buyer));
-
+
-
+
1497 env(token::setMinter(alice, minter2));
@@ -1574,17 +1574,17 @@ $(function() {
1503 token::owner(buyer),
-
+
1509 env(token::burn(minter2, burnableID), token::owner(buyer));
-
+
-
+
1519 testcase(
"Mint flagOnlyXRP");
@@ -1612,33 +1612,33 @@ $(function() {
-
+
1545 uint256 const aliceOfferIndex =
1547 env(token::createOffer(alice, nftIOUsOkayID, gwAUD(50)),
-
+
-
+
1553 uint256 const buyerOfferIndex =
1555 env(token::createOffer(buyer, nftIOUsOkayID, gwAUD(50)),
1556 token::owner(alice));
-
+
1561 env(token::cancelOffer(alice, {aliceOfferIndex}));
1562 env(token::cancelOffer(buyer, {buyerOfferIndex}));
-
-
+
+
1568 env(token::burn(alice, nftIOUsOkayID));
-
+
@@ -1648,37 +1648,37 @@ $(function() {
-
+
1581 env(token::createOffer(alice, nftOnlyXRPID, gwAUD(50)),
-
+
-
+
1588 env(token::createOffer(buyer, nftOnlyXRPID, gwAUD(50)),
1589 token::owner(alice),
-
+
-
+
1596 env(token::createOffer(alice, nftOnlyXRPID, XRP(60)),
-
+
-
+
1602 env(token::createOffer(buyer, nftOnlyXRPID, XRP(60)),
1603 token::owner(alice));
-
+
-
+
1613 testcase(
"Mint flagCreateTrustLines");
@@ -1870,7 +1870,7 @@ $(function() {
-
+
1805 testcase(
"Mint flagTransferable");
@@ -1888,15 +1888,15 @@ $(function() {
-
+
1821 uint256 const nftAliceNoTransferID{
1822 token::getNextID(env, alice, 0u)};
1823 env(token::mint(alice, 0u), token::xferFee(0));
-
+
-
+
1829 env(token::createOffer(becky, nftAliceNoTransferID, XRP(20)),
1830 token::owner(alice),
@@ -1909,16 +1909,16 @@ $(function() {
1839 env(token::acceptSellOffer(becky, aliceSellOfferIndex));
-
-
+
+
1845 env(token::createOffer(becky, nftAliceNoTransferID, XRP(21)),
-
-
+
+
@@ -1927,8 +1927,8 @@ $(function() {
1856 token::destination(alice),
-
-
+
+
@@ -1939,46 +1939,46 @@ $(function() {
1869 env(token::acceptBuyOffer(becky, aliceBuyOfferIndex));
-
-
+
+
1875 env(token::burn(alice, nftAliceNoTransferID));
-
-
+
+
1882 env(token::setMinter(alice, minter));
-
+
1886 uint256 const nftMinterNoTransferID{
1887 token::getNextID(env, alice, 0u)};
1888 env(token::mint(minter), token::issuer(alice));
-
+
-
+
1894 env(token::createOffer(becky, nftMinterNoTransferID, XRP(20)),
1895 token::owner(minter),
-
+
1901 env(token::clearMinter(alice));
-
+
1906 env(token::createOffer(minter, nftMinterNoTransferID, XRP(21)),
-
+
@@ -1987,16 +1987,16 @@ $(function() {
1917 env(token::setMinter(alice, minter));
-
+
-
+
1923 uint256 const minterSellOfferIndex =
1925 env(token::createOffer(minter, nftMinterNoTransferID, XRP(22)),
-
+
@@ -2005,11 +2005,11 @@ $(function() {
-
+
1938 env(token::acceptSellOffer(becky, minterSellOfferIndex));
-
-
+
+
1944 env(token::createOffer(becky, nftMinterNoTransferID, XRP(23)),
@@ -2019,21 +2019,21 @@ $(function() {
-
+
1952 env(token::createOffer(minter, nftMinterNoTransferID, XRP(24)),
1953 token::owner(becky),
-
+
-
+
1960 uint256 const aliceBuyOfferIndex =
1962 env(token::createOffer(alice, nftMinterNoTransferID, XRP(25)),
1963 token::owner(becky));
-
+
@@ -2044,13 +2044,13 @@ $(function() {
-
+
1977 uint256 const minterBuyOfferIndex =
1979 env(token::createOffer(minter, nftMinterNoTransferID, XRP(26)),
1980 token::owner(becky));
-
+
@@ -2058,13 +2058,13 @@ $(function() {
-
-
+
+
1992 env(token::acceptBuyOffer(becky, minterBuyOfferIndex));
-
-
-
+
+
+
@@ -2072,19 +2072,19 @@ $(function() {
2002 env(token::cancelOffer(alice, {aliceBuyOfferIndex}));
-
-
-
+
+
+
-
+
-
+
2019 uint256 const aliceSellOfferIndex =
@@ -2092,20 +2092,20 @@ $(function() {
2021 env(token::createOffer(alice, nftAliceID, XRP(20)),
-
+
2026 uint256 const beckyBuyOfferIndex =
2028 env(token::createOffer(becky, nftAliceID, XRP(21)),
2029 token::owner(alice));
-
+
2034 env(token::acceptSellOffer(becky, aliceSellOfferIndex));
-
-
+
+
2040 uint256 const beckySellOfferIndex =
@@ -2113,16 +2113,16 @@ $(function() {
2042 env(token::createOffer(becky, nftAliceID, XRP(22)),
-
-
+
+
2050 env(token::acceptSellOffer(minter, beckySellOfferIndex));
-
-
-
+
+
+
2057 uint256 const minterSellOfferIndex =
@@ -2130,37 +2130,37 @@ $(function() {
2059 env(token::createOffer(minter, nftAliceID, XRP(23)),
-
-
-
+
+
+
2067 env(token::acceptSellOffer(alice, minterSellOfferIndex));
-
-
-
+
+
+
2075 env(token::acceptBuyOffer(alice, beckyBuyOfferIndex));
-
-
-
+
+
+
2083 env(token::burn(becky, nftAliceID));
-
-
-
+
+
+
-
+
2095 testcase(
"Mint transferFee");
@@ -2198,10 +2198,10 @@ $(function() {
-
-
-
-
+
+
+
+
@@ -2264,10 +2264,10 @@ $(function() {
2194 env(token::burn(alice, nftID));
-
-
-
-
+
+
+
+
@@ -2347,10 +2347,10 @@ $(function() {
2277 env(token::burn(alice, nftID));
-
-
-
-
+
+
+
+
@@ -2438,10 +2438,10 @@ $(function() {
2368 env(token::burn(alice, nftID));
-
-
-
-
+
+
+
+
@@ -2597,7 +2597,7 @@ $(function() {
-
+
2532 testcase(
"Mint taxon");
@@ -2672,7 +2672,7 @@ $(function() {
-
+
@@ -2782,7 +2782,7 @@ $(function() {
-
+
2717 testcase(
"Create offer destination");
@@ -2838,9 +2838,9 @@ $(function() {
2767 token::destination(buyer));
-
-
-
+
+
+
@@ -2858,9 +2858,9 @@ $(function() {
2787 env(token::cancelOffer(minter, {offerIssuerToBuyer}),
-
-
-
+
+
+
@@ -2869,9 +2869,9 @@ $(function() {
2798 env(token::cancelOffer(buyer, {offerIssuerToBuyer}));
2799 env(token::cancelOffer(issuer, {offerIssuerToMinter}));
-
-
-
+
+
+
@@ -2883,25 +2883,25 @@ $(function() {
2812 token::destination(buyer),
-
-
-
+
+
+
2821 env(token::acceptSellOffer(issuer, offerMinterSellsToBuyer),
-
-
-
+
+
+
2829 env(token::acceptSellOffer(buyer, offerMinterSellsToBuyer));
-
-
-
+
+
+
@@ -2913,25 +2913,25 @@ $(function() {
2842 token::owner(buyer),
2843 token::destination(buyer));
-
-
-
+
+
+
2851 env(token::acceptBuyOffer(issuer, offerMinterBuysFromBuyer),
-
-
-
+
+
+
2859 env(token::acceptBuyOffer(buyer, offerMinterBuysFromBuyer));
-
-
-
+
+
+
@@ -2942,9 +2942,9 @@ $(function() {
2871 token::owner(minter),
2872 token::destination(broker));
-
-
-
+
+
+
2878 env(token::acceptBuyOffer(minter, offerBuyerBuysFromMinter),
@@ -2953,9 +2953,9 @@ $(function() {
2883 env(token::cancelOffer(buyer, {offerBuyerBuysFromMinter}));
-
-
-
+
+
+
@@ -2973,9 +2973,9 @@ $(function() {
2902 token::owner(minter));
-
-
-
+
+
+
@@ -2987,9 +2987,9 @@ $(function() {
2916 issuer, offerBuyerToMinter, offerMinterToBroker),
-
-
-
+
+
+
@@ -2997,9 +2997,9 @@ $(function() {
2926 env(token::brokerOffers(
2927 broker, offerBuyerToMinter, offerMinterToBroker));
-
-
-
+
+
+
@@ -3023,9 +3023,9 @@ $(function() {
2952 token::owner(buyer));
-
-
-
+
+
+
@@ -3038,9 +3038,9 @@ $(function() {
-
-
-
+
+
+
@@ -3061,16 +3061,16 @@ $(function() {
2990 env(token::cancelOffer(buyer, {offerBuyerToMinter}));
-
-
-
+
+
+
2998 env(token::cancelOffer(issuer, {offerIssuerToBuyer}));
-
-
-
+
+
+
@@ -3100,23 +3100,23 @@ $(function() {
3029 issuer, offerBuyerToBroker, offerMinterToBroker),
-
-
-
+
+
+
3038 env(token::brokerOffers(
3039 broker, offerBuyerToBroker, offerMinterToBroker));
-
-
-
+
+
+
-
+
3050 testcase(
"Create offer destination disallow incoming");
@@ -3124,7 +3124,7 @@ $(function() {
-
+
3057 Account
const alice{
"alice"};
3058 env.fund(XRP(10000), alice);
@@ -3134,7 +3134,7 @@ $(function() {
-
+
3068 Account
const issuer{
"issuer"};
3069 Account
const minter{
"minter"};
@@ -3164,9 +3164,9 @@ $(function() {
-
-
-
+
+
+
@@ -3245,7 +3245,7 @@ $(function() {
-
+
3180 testcase(
"Create offer expiration");
@@ -3282,7 +3282,7 @@ $(function() {
-
+
3216 uint256 const offerMinterToIssuer =
@@ -3309,9 +3309,9 @@ $(function() {
3238 token::owner(minter),
3239 token::expiration(expiration));
-
-
-
+
+
+
@@ -3324,10 +3324,10 @@ $(function() {
3253 env(token::cancelOffer(buyer, {offerIssuerToMinter}),
- 3256 BEAST_EXPECT(
lastClose(env) < expiration);
-
-
-
+ 3256 BEAST_EXPECT(
lastClose(env) < expiration);
+
+
+
3262 env(token::cancelOffer(minter, {offerMinterToAnyone}));
@@ -3337,27 +3337,27 @@ $(function() {
3266 env(token::cancelOffer(issuer, {offerMinterToIssuer}));
-
+
-
-
-
+
+
+
3277 env(token::cancelOffer(issuer, {offerBuyerToMinter}));
3278 env(token::cancelOffer(buyer, {offerIssuerToMinter}));
-
-
-
+
+
+
-
+
@@ -3371,21 +3371,21 @@ $(function() {
3300 token::expiration(expiration),
- 3303 BEAST_EXPECT(
lastClose(env) < expiration);
-
-
-
+ 3303 BEAST_EXPECT(
lastClose(env) < expiration);
+
+
+
3309 env(token::acceptSellOffer(buyer, offer0));
-
+
-
-
-
+
+
+
3320 env(token::acceptSellOffer(buyer, offer1), ter(
tecEXPIRED));
@@ -3393,16 +3393,16 @@ $(function() {
-
-
-
+
+
+
3330 env(token::cancelOffer(issuer, {offer1}));
-
-
-
+
+
+
@@ -3414,16 +3414,16 @@ $(function() {
3344 env(token::acceptSellOffer(minter, offerSellBack));
-
-
-
+
+
+
-
+
3358 env(token::createOffer(buyer, nftokenID0, drops(1)),
@@ -3435,21 +3435,21 @@ $(function() {
3364 token::owner(minter),
3365 token::expiration(expiration));
- 3367 BEAST_EXPECT(
lastClose(env) < expiration);
-
-
-
+ 3367 BEAST_EXPECT(
lastClose(env) < expiration);
+
+
+
3373 env(token::acceptBuyOffer(minter, offer0));
-
+
-
-
-
+
+
+
3384 env(token::acceptBuyOffer(minter, offer1), ter(
tecEXPIRED));
@@ -3457,16 +3457,16 @@ $(function() {
-
-
-
+
+
+
3394 env(token::cancelOffer(issuer, {offer1}));
-
-
-
+
+
+
@@ -3478,16 +3478,16 @@ $(function() {
3408 env(token::acceptSellOffer(minter, offerSellBack));
-
-
-
+
+
+
-
+
@@ -3512,21 +3512,21 @@ $(function() {
3441 token::owner(minter));
- 3444 BEAST_EXPECT(
lastClose(env) < expiration);
-
-
-
+ 3444 BEAST_EXPECT(
lastClose(env) < expiration);
+
+
+
3450 env(token::brokerOffers(issuer, buyOffer0, sellOffer0));
-
+
-
-
-
+
+
+
3461 env(token::brokerOffers(issuer, buyOffer1, sellOffer1),
@@ -3534,16 +3534,16 @@ $(function() {
-
-
-
+
+
+
3471 env(token::cancelOffer(buyer, {buyOffer1, sellOffer1}));
-
-
-
+
+
+
@@ -3555,16 +3555,16 @@ $(function() {
3485 env(token::acceptSellOffer(minter, offerSellBack));
-
-
-
+
+
+
-
+
@@ -3589,21 +3589,21 @@ $(function() {
3518 token::owner(minter));
- 3521 BEAST_EXPECT(
lastClose(env) < expiration);
-
-
-
+ 3521 BEAST_EXPECT(
lastClose(env) < expiration);
+
+
+
3527 env(token::brokerOffers(issuer, buyOffer0, sellOffer0));
-
+
-
-
-
+
+
+
3538 env(token::brokerOffers(issuer, buyOffer1, sellOffer1),
@@ -3611,16 +3611,16 @@ $(function() {
-
-
-
+
+
+
3548 env(token::cancelOffer(minter, {buyOffer1, sellOffer1}));
-
-
-
+
+
+
@@ -3632,9 +3632,9 @@ $(function() {
3562 env(token::acceptSellOffer(minter, offerSellBack));
-
-
-
+
+
+
@@ -3642,7 +3642,7 @@ $(function() {
-
+
@@ -3669,21 +3669,21 @@ $(function() {
3598 token::owner(minter));
- 3601 BEAST_EXPECT(
lastClose(env) < expiration);
-
-
-
+ 3601 BEAST_EXPECT(
lastClose(env) < expiration);
+
+
+
3607 env(token::brokerOffers(issuer, buyOffer0, sellOffer0));
-
+
-
-
-
+
+
+
3618 env(token::brokerOffers(issuer, buyOffer1, sellOffer1),
@@ -3691,16 +3691,16 @@ $(function() {
-
-
-
+
+
+
3628 env(token::cancelOffer(issuer, {buyOffer1, sellOffer1}));
-
-
-
+
+
+
@@ -3712,14 +3712,14 @@ $(function() {
3642 env(token::acceptSellOffer(minter, offerSellBack));
-
-
-
+
+
+
-
+
3654 testcase(
"Cancel offers");
@@ -3749,11 +3749,11 @@ $(function() {
3679 env(token::createOffer(alice, nftokenID, XRP(1000)),
- 3681 token::expiration(
lastClose(env) + 13));
+ 3681 token::expiration(
lastClose(env) + 13));
-
+
3686 env(token::cancelOffer(becky, {expiredOfferIndex}),
@@ -3764,7 +3764,7 @@ $(function() {
3694 env(token::cancelOffer(becky, {expiredOfferIndex}));
-
+
@@ -3775,17 +3775,17 @@ $(function() {
3704 token::destination(becky),
-
+
3710 env(token::cancelOffer(minter, {dest1OfferIndex}),
-
+
3715 env(token::cancelOffer(becky, {dest1OfferIndex}));
-
+
3720 uint256 const dest2OfferIndex =
@@ -3795,11 +3795,11 @@ $(function() {
3724 token::destination(becky),
-
+
3729 env(token::cancelOffer(alice, {dest2OfferIndex}));
-
+
@@ -3817,7 +3817,7 @@ $(function() {
3746 env(token::createOffer(minter, mintersNFTokenID, XRP(1000)),
-
+
3752 env(token::cancelOffer(alice, {minterOfferIndex}),
@@ -3825,15 +3825,15 @@ $(function() {
3754 env(token::cancelOffer(becky, {minterOfferIndex}),
-
+
3759 env(token::cancelOffer(minter, {minterOfferIndex}));
-
+
-
+
3768 testcase(
"Cancel too many offers");
@@ -3881,7 +3881,7 @@ $(function() {
3811 env(token::createOffer(offerAcct, nftokenID, drops(1)),
3812 token::owner(nftAcct),
-
+
@@ -3922,7 +3922,7 @@ $(function() {
-
+
@@ -3935,7 +3935,7 @@ $(function() {
-
+
3868 offerIndexes.pop_back();
@@ -3952,7 +3952,7 @@ $(function() {
-
+
3887 testcase(
"Brokered NFT offer accept");
@@ -3998,14 +3998,14 @@ $(function() {
3928 for (Account
const& acct : accounts)
-
-
-
+
+
+
3935 ss <<
"Account " << acct.human()
3936 <<
" expected ownerCount == 1. Got "
-
+
3938 fail(ss.
str(), __FILE__, line);
@@ -4332,10 +4332,10 @@ $(function() {
4261 broker, buyOfferIndex, minterOfferIndex));
-
-
-
-
+
+
+
+
4268 BEAST_EXPECT(env.balance(issuer, gwXAU) == gwXAU(1000));
4269 BEAST_EXPECT(env.balance(minter, gwXAU) == gwXAU(2000));
4270 BEAST_EXPECT(env.balance(buyer, gwXAU) == gwXAU(0));
@@ -4422,10 +4422,10 @@ $(function() {
4351 token::brokerFee(gwXAU(100)));
-
-
-
-
+
+
+
+
4358 BEAST_EXPECT(env.balance(issuer, gwXAU) == gwXAU(1450));
4359 BEAST_EXPECT(env.balance(minter, gwXAU) == gwXAU(1450));
4360 BEAST_EXPECT(env.balance(buyer, gwXAU) == gwXAU(0));
@@ -4466,10 +4466,10 @@ $(function() {
4395 token::brokerFee(gwXAU(50)));
-
-
-
-
+
+
+
+
4402 BEAST_EXPECT(env.balance(issuer, gwXAU) == gwXAU(1237.5));
4403 BEAST_EXPECT(env.balance(minter, gwXAU) == gwXAU(1712.5));
4404 BEAST_EXPECT(env.balance(buyer, gwXAU) == gwXAU(0));
@@ -4506,10 +4506,10 @@ $(function() {
4435 broker, buyOfferIndex, minterOfferIndex),
4436 token::brokerFee(gwXAU(50)));
-
-
-
-
+
+
+
+
4442 BEAST_EXPECT(env.balance(issuer, gwXAU) == gwXAU(1237.5));
4443 BEAST_EXPECT(env.balance(minter, gwXAU) == gwXAU(1712.5));
4444 BEAST_EXPECT(env.balance(buyer, gwXAU) == gwXAU(0));
@@ -4526,10 +4526,10 @@ $(function() {
4455 token::brokerFee(gwXAU(50)),
-
-
-
-
+
+
+
+
4462 BEAST_EXPECT(env.balance(issuer, gwXAU) == gwXAU(1000));
4463 BEAST_EXPECT(env.balance(minter, gwXAU) == gwXAU(1000));
4464 BEAST_EXPECT(env.balance(buyer, gwXAU) == gwXAU(1000));
@@ -4544,7 +4544,7 @@ $(function() {
-
+
4479 testcase(
"NFToken offer owner");
@@ -4565,9 +4565,9 @@ $(function() {
- 4497 BEAST_EXPECT(
nftCount(env, issuer) == 1);
- 4498 BEAST_EXPECT(
nftCount(env, buyer1) == 0);
- 4499 BEAST_EXPECT(
nftCount(env, buyer2) == 0);
+ 4497 BEAST_EXPECT(
nftCount(env, issuer) == 1);
+ 4498 BEAST_EXPECT(
nftCount(env, buyer1) == 0);
+ 4499 BEAST_EXPECT(
nftCount(env, buyer2) == 0);
4502 uint256 const buyer1OfferIndex =
@@ -4602,9 +4602,9 @@ $(function() {
- 4534 BEAST_EXPECT(
nftCount(env, issuer) == 0);
- 4535 BEAST_EXPECT(
nftCount(env, buyer1) == 1);
- 4536 BEAST_EXPECT(
nftCount(env, buyer2) == 0);
+ 4534 BEAST_EXPECT(
nftCount(env, issuer) == 0);
+ 4535 BEAST_EXPECT(
nftCount(env, buyer1) == 1);
+ 4536 BEAST_EXPECT(
nftCount(env, buyer2) == 0);
@@ -4616,16 +4616,16 @@ $(function() {
- 4548 BEAST_EXPECT(
nftCount(env, issuer) == 0);
- 4549 BEAST_EXPECT(
nftCount(env, buyer1) == 0);
- 4550 BEAST_EXPECT(
nftCount(env, buyer2) == 1);
+ 4548 BEAST_EXPECT(
nftCount(env, issuer) == 0);
+ 4549 BEAST_EXPECT(
nftCount(env, buyer1) == 0);
+ 4550 BEAST_EXPECT(
nftCount(env, buyer2) == 1);
4553 BEAST_EXPECT(nftBuyOfferCount(nftId) == 0);
-
+
4560 testcase(
"NFToken transactions with tickets");
@@ -4646,40 +4646,40 @@ $(function() {
4575 env(ticket::create(issuer, 10));
-
+
4581 env(ticket::create(buyer, 10));
-
+
-
+
4589 env(token::mint(issuer, 0u),
4591 ticket::use(issuerTicketSeq++));
-
-
+
+
-
+
4599 env(token::createOffer(buyer, nftId, XRP(1)),
4600 token::owner(issuer),
4601 ticket::use(buyerTicketSeq++));
-
-
+
+
4607 env(token::cancelOffer(buyer, {offerIndex0}),
4608 ticket::use(buyerTicketSeq++));
-
-
+
+
@@ -4687,23 +4687,23 @@ $(function() {
4616 token::owner(issuer),
4617 ticket::use(buyerTicketSeq++));
-
-
+
+
4623 env(token::acceptBuyOffer(issuer, offerIndex1),
4624 ticket::use(issuerTicketSeq++));
-
-
-
+
+
+
4631 env(token::burn(buyer, nftId), ticket::use(buyerTicketSeq++));
-
-
-
+
+
+
4638 BEAST_EXPECT(env.seq(issuer) == issuerSeq);
@@ -4711,7 +4711,7 @@ $(function() {
-
+
@@ -4804,7 +4804,7 @@ $(function() {
-
+
4738 testcase(
"nft_buy_offers and nft_sell_offers");
@@ -5033,7 +5033,7 @@ $(function() {
-
+
4968 using namespace test::jtx;
@@ -5277,7 +5277,7 @@ $(function() {
-
+
5211 using namespace test::jtx;
@@ -6029,7 +6029,7 @@ $(function() {
-
+
@@ -6104,7 +6104,7 @@ $(function() {
- 6036 BEAST_EXPECT(
nftCount(env, bob) == 1);
+ 6036 BEAST_EXPECT(
nftCount(env, bob) == 1);
6037 auto const bobsPriorBalance = env.balance(bob);
6038 auto const brokersPriorBalance = env.balance(broker);
@@ -6120,7 +6120,7 @@ $(function() {
- 6052 BEAST_EXPECT(
nftCount(env, bob) == 1);
+ 6052 BEAST_EXPECT(
nftCount(env, bob) == 1);
6053 BEAST_EXPECT(env.balance(bob) == bobsPriorBalance - XRP(1));
6055 env.balance(broker) ==
@@ -6130,7 +6130,7 @@ $(function() {
- 6062 BEAST_EXPECT(
nftCount(env, bob) == 1);
+ 6062 BEAST_EXPECT(
nftCount(env, bob) == 1);
6063 BEAST_EXPECT(env.balance(bob) == bobsPriorBalance);
6065 env.balance(broker) == brokersPriorBalance - drops(10));
@@ -6138,7 +6138,7 @@ $(function() {
-
+
6072 using namespace test::jtx;
@@ -6393,8 +6393,8 @@ $(function() {
6322 env(ticket::create(alice, 100));
-
-
+
+
@@ -6414,7 +6414,7 @@ $(function() {
-
+
@@ -6547,8 +6547,8 @@ $(function() {
6476 env(ticket::create(minter, 100));
-
- 6480 BEAST_EXPECT(
ownerCount(env, minter) == 100);
+
+ 6480 BEAST_EXPECT(
ownerCount(env, minter) == 100);
@@ -6571,7 +6571,7 @@ $(function() {
-
+
@@ -6638,7 +6638,7 @@ $(function() {
-
+
@@ -6870,43 +6870,43 @@ $(function() {
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
6840 using namespace test::jtx;
@@ -6914,7 +6914,7 @@ $(function() {
-
+
@@ -6922,65 +6922,65 @@ $(function() {
6852 if (BEAST_EXPECT(instance < feats.size()))
-
+
6856 BEAST_EXPECT(!last || instance == feats.size() - 1);
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-void testMintTransferFee(FeatureBitset features)
constexpr std::uint16_t maxTransferFee
The maximum token transfer fee allowed.
+BEAST_DEFINE_TESTSUITE_PRIO(NFTokenBaseUtil, tx, ripple, 2)
const SF_UINT32 sfOwnerCount
const uint256 fixRemoveNFTokenAutoTrustLine
const SF_UINT32 sfFirstNFTokenSequence
@@ -6988,73 +6988,70 @@ $(function() {
constexpr const std::uint32_t tfTransferable
const uint256 fixNFTokenNegOffer
+void testMintTransferFee(FeatureBitset features)
+void testMintFlagOnlyXRP(FeatureBitset features)
A pair of SHAMap key and LedgerEntryType.
-void testBrokeredSaleToSelf(FeatureBitset features)
+void testMintFlagTransferable(FeatureBitset features)
static const std::uint64_t cMinValue
-void testAcceptOfferInvalid(FeatureBitset features)
+std::uint32_t lastClose(test::jtx::Env &env)
+void testMintFlagCreateTrustLine(FeatureBitset features)
+void testCreateOfferDestination(FeatureBitset features)
+void testFixNFTokenNegOffer(FeatureBitset features)
Json::Value rpc(unsigned apiVersion, std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
-void testTxJsonMetaFields(FeatureBitset features)
-void testMintFlagTransferable(FeatureBitset features)
-void testMintFlagOnlyXRP(FeatureBitset features)
+void testMintInvalid(FeatureBitset features)
const SF_VECTOR256 sfNFTokenOffers
-const FeatureBitset disallowIncoming
+static std::uint32_t ticketCount(test::jtx::Env const &env, test::jtx::Account const &acct)
+
+void testBrokeredSaleToSelf(FeatureBitset features)
@ arrayValue
array value (ordered list)
-void testCreateOfferDestinationDisallowIncoming(FeatureBitset features)
-
Writable ledger view that accumulates state and tx changes.
-void testWithFeats(FeatureBitset features)
+void testEnabled(FeatureBitset features)
+void testMintMaxTokens(FeatureBitset features)
+void testBrokeredAccept(FeatureBitset features)
Json::Value getJson(JsonOptions) const override
T back_inserter(T... args)
const SF_UINT32 sfMintedNFTokens
-void testNFTokenWithTickets(FeatureBitset features)
Keylet nftoffer(AccountID const &owner, std::uint32_t seq)
An offer from an account to buy or sell an NFT.
-std::uint32_t lastClose(test::jtx::Env &env)
std::string const & human() const
Returns the human readable public key.
-
static const int cMinOffset
-
-
-void testCancelOffers(FeatureBitset features)
@ tecCANT_ACCEPT_OWN_NFTOKEN_OFFER
Taxon toTaxon(std::uint32_t i)
-void testMintMaxTokens(FeatureBitset features)
-void testNFTokenDeleteAccount(FeatureBitset features)
const Json::StaticString jsonName
-
-void testEnabled(FeatureBitset features)
+
+static std::uint32_t nftCount(test::jtx::Env &env, test::jtx::Account const &acct)
const uint256 fixNFTokenRemint
-void testBurnInvalid(FeatureBitset features)
+void testNFTokenWithTickets(FeatureBitset features)
-void testMintInvalid(FeatureBitset features)
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
+void testMintURI(FeatureBitset features)
Value & append(const Value &value)
Append value to array at the end.
-static std::uint32_t ownerCount(test::jtx::Env const &env, test::jtx::Account const &acct)
+void testCancelOffers(FeatureBitset features)
std::enable_if_t< std::is_integral< Integral >::value &&detail::is_engine< Engine >::value, Integral > rand_int(Engine &engine, Integral min, Integral max)
Return a uniformly distributed random integer.
constexpr const std::uint32_t tfBurnable
-void testMintTaxon(FeatureBitset features)
Keylet account(AccountID const &id) noexcept
AccountID root.
@ tefNFTOKEN_IS_NOT_TRANSFERABLE
const uint256 featureDisallowIncoming
const SF_ACCOUNT sfNFTokenMinter
+void testCreateOfferDestinationDisallowIncoming(FeatureBitset features)
+void testWithFeats(FeatureBitset features)
+void testCreateOfferExpiration(FeatureBitset features)
-
-void testMintReserve(FeatureBitset features)
-BEAST_DEFINE_TESTSUITE_PRIO(NFToken0, tx, ripple, 2)
-static std::uint32_t mintedCount(test::jtx::Env const &env, test::jtx::Account const &issuer)
+void testAcceptOfferInvalid(FeatureBitset features)
+void testCancelTooManyOffers(FeatureBitset features)
TERSubset< CanCvtToTER > TER
std::enable_if_t<(std::is_same< Byte, unsigned char >::value||std::is_same< Byte, std::uint8_t >::value) &&detail::is_engine< Engine >::value, Byte > rand_byte(Engine &engine)
Return a random byte.
@@ -7065,51 +7062,60 @@ $(function() {
UInt size() const
Number of values in array or object.
constexpr const std::uint32_t tfSellNFToken
-
-void testIOUWithTransferFee(FeatureBitset features)
+void testMintTaxon(FeatureBitset features)
+const FeatureBitset disallowIncoming
bool isMember(const char *key) const
Return true if the object has a member named key.
A generic endpoint for log messages.
constexpr std::size_t maxTokenOfferCancelCount
The maximum number of token offers that can be canceled at once.
-
-void testCancelTooManyOffers(FeatureBitset features)
+
const uint256 fixNFTokenDirV1
constexpr std::size_t maxTokenURILength
The maximum length of a URI inside an NFT.
-void testCreateOfferInvalid(FeatureBitset features)
+
+void testBurnInvalid(FeatureBitset features)
+void testTxJsonMetaFields(FeatureBitset features)
+void run(std::uint32_t instance, bool last=false)
T emplace_back(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
-void testMintURI(FeatureBitset features)
+void testCreateOfferInvalid(FeatureBitset features)
const uint256 featureNonFungibleTokensV1
+
Value removeMember(const char *key)
Remove and return the named member.
@ tecNFTOKEN_BUY_SELL_MISMATCH
@ tecINSUFFICIENT_PAYMENT
+static std::uint32_t burnedCount(test::jtx::Env const &env, test::jtx::Account const &issuer)
constexpr std::uint32_t tfSetFreeze
@ lsfDisallowIncomingNFTokenOffer
+void testIOUWithTransferFee(FeatureBitset features)
-void testMintFlagCreateTrustLine(FeatureBitset features)
+
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
-void testCreateOfferExpiration(FeatureBitset features)
+void testMintFlagBurnable(FeatureBitset features)
const uint256 featureNonFungibleTokensV1_1
-void testNftXxxOffers(FeatureBitset features)
const uint256 fixUniversalNumber
-static std::uint32_t ticketCount(test::jtx::Env const &env, test::jtx::Account const &acct)
-void testBrokeredAccept(FeatureBitset features)
+
+void testMintReserve(FeatureBitset features)
+void testNFTokenOfferOwner(FeatureBitset features)
+
@ tecINSUFFICIENT_RESERVE
+void testCancelOfferInvalid(FeatureBitset features)
+void testFixNFTokenRemint(FeatureBitset features)
+void testNFTokenDeleteAccount(FeatureBitset features)
std::shared_ptr< SLE const > read(Keylet const &k) const override
Return the state item associated with a key.
constexpr const std::uint32_t tfTrustLine
@@ -7117,6 +7123,7 @@ $(function() {
constexpr std::uint32_t tfClearFreeze
std::string to_string(Manifest const &m)
Format the specified manifest to a string for debugging purposes.
+
constexpr const std::uint32_t tfOnlyXRP
const SF_UINT32 sfNFTokenTaxon
Immutable cryptographic account descriptor.
@@ -7124,36 +7131,29 @@ $(function() {
+
A type-safe wrap around standard integral types.
-
const uint256 fixNonFungibleTokensV1_2
-void run(std::uint32_t instance, bool last=false)
+static std::uint32_t mintedCount(test::jtx::Env const &env, test::jtx::Account const &issuer)
constexpr bool parseHex(std::string_view sv)
Parse a hex string into a base_uint.
const SF_UINT32 sfBurnedNFTokens
Keylet check(AccountID const &id, std::uint32_t seq) noexcept
A Check.
-void testCancelOfferInvalid(FeatureBitset features)
Taxon getTaxon(uint256 const &id)
+void testNftXxxOffers(FeatureBitset features)
@ temBAD_NFTOKEN_TRANSFER_FEE
const SF_UINT256 sfNFTokenSellOffer
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
-void testCreateOfferDestination(FeatureBitset features)
-void testNFTokenOfferOwner(FeatureBitset features)
-static std::uint32_t nftCount(test::jtx::Env &env, test::jtx::Account const &acct)
A transaction testing environment.
-void testFixNFTokenRemint(FeatureBitset features)
constexpr std::uint32_t asfDisallowIncomingNFTokenOffer
-void testMintFlagBurnable(FeatureBitset features)
const SF_AMOUNT sfNFTokenBrokerFee
-
-static std::uint32_t burnedCount(test::jtx::Env const &env, test::jtx::Account const &issuer)
-void testFixNFTokenNegOffer(FeatureBitset features)
std::string asString() const
Returns the unquoted string value.
+static std::uint32_t ownerCount(test::jtx::Env const &env, test::jtx::Account const &acct)