From cf1b2bc8e43a57da9a990f414c8a805026ce12ff Mon Sep 17 00:00:00 2001 From: bthomee Date: Mon, 2 Jun 2025 16:17:46 +0000 Subject: [PATCH] deploy: 7e24adbdd0b61fb50967c4c6d4b27cc6d81b33f3 --- Freeze__test_8cpp_source.html | 385 +- NFTokenAcceptOffer_8cpp_source.html | 883 ++-- NFTokenAcceptOffer_8h_source.html | 66 +- NFTokenAuth__test_8cpp_source.html | 748 ++++ NFTokenCreateOffer_8cpp_source.html | 2 +- NFTokenMint_8cpp_source.html | 2 +- NFTokenUtils_8cpp_source.html | 290 +- NFTokenUtils_8h_source.html | 29 +- annotated.html | 839 ++-- ...d__associative__container__test__base.html | 2 +- classbeast_1_1unit__test_1_1suite.html | 4 +- classes.html | 2 +- classripple_1_1Freeze__test.html | 8 +- ...sripple_1_1NFTokenAcceptOffer-members.html | 73 +- classripple_1_1NFTokenAcceptOffer.html | 70 +- classripple_1_1NFTokenAuth__test-members.html | 128 + classripple_1_1NFTokenAuth__test.html | 1357 ++++++ ...pple_1_1NFTokenAuth__test__coll__graph.map | 20 + ...pple_1_1NFTokenAuth__test__coll__graph.md5 | 1 + ...pple_1_1NFTokenAuth__test__coll__graph.png | Bin 0 -> 68427 bytes ...e_1_1NFTokenAuth__test__inherit__graph.map | 4 + ...e_1_1NFTokenAuth__test__inherit__graph.md5 | 1 + ...e_1_1NFTokenAuth__test__inherit__graph.png | Bin 0 -> 3839 bytes classripple_1_1NodeStore_1_1TestBase.html | 2 +- classripple_1_1TestSuite.html | 2 +- classripple_1_1test_1_1AccountInfo__test.html | 2 +- classripple_1_1test_1_1TestOutputSuite.html | 2 +- classripple_1_1test_1_1jtx_1_1AMMTest.html | 2 +- ...sripple_1_1test_1_1jtx_1_1AMMTestBase.html | 2 +- dir_7ab758b8a77751d62709b12ccae53e10.html | 2 + functions_a.html | 4 +- functions_b.html | 2 +- functions_c.html | 34 +- functions_d.html | 14 +- functions_e.html | 8 +- functions_f.html | 4 +- functions_func_c.html | 12 +- functions_func_e.html | 10 +- functions_func_j.html | 6 +- functions_func_l.html | 6 +- functions_func_m.html | 3 +- functions_func_r.html | 26 +- functions_func_s.html | 24 +- functions_func_t.html | 19 +- functions_h.html | 2 +- functions_i.html | 22 +- functions_k.html | 2 +- functions_l.html | 12 +- functions_m.html | 7 +- functions_n.html | 4 +- functions_r.html | 2 +- functions_s.html | 48 +- functions_t.html | 41 +- functions_w.html | 4 +- hierarchy.html | 467 +-- inherit_graph_94.map | 477 +-- inherit_graph_94.md5 | 2 +- inherit_graph_94.png | Bin 2354392 -> 2366373 bytes inherits.html | 427 +- namespacemembers_b.html | 8 +- namespacemembers_c.html | 6 +- namespacemembers_f.html | 2 +- namespacemembers_func_b.html | 4 +- namespacemembers_func_c.html | 2 + namespacemembers_t.html | 2 +- namespaceripple.html | 78 +- namespaceripple_1_1nft.html | 90 +- namespaces.html | 847 ++-- search/all_10.js | 835 ++-- search/all_11.js | 163 +- search/all_13.js | 1148 ++--- search/all_14.js | 2676 ++++++------ search/all_15.js | 3691 +++++++++-------- search/all_16.js | 638 +-- search/all_17.js | 540 +-- search/all_18.js | 10 +- search/all_1a.js | 20 +- search/all_1b.js | 4 +- search/all_1c.js | 4 +- search/all_2.js | 1451 ++++--- search/all_3.js | 523 ++- search/all_4.js | 1487 +++---- search/all_5.js | 521 +-- search/all_6.js | 650 ++- search/all_7.js | 294 +- search/all_9.js | 408 +- search/all_a.js | 1709 ++++---- search/all_b.js | 26 +- search/all_c.js | 8 +- search/all_d.js | 903 ++-- search/all_e.js | 920 ++-- search/all_f.js | 467 +-- search/classes_d.js | 143 +- search/enums_2.js | 4 +- search/enumvalues_1.js | 25 +- search/enumvalues_19.js | 7 +- search/enumvalues_2.js | 4 +- search/enumvalues_3.js | 4 +- search/enumvalues_5.js | 4 +- search/enumvalues_6.js | 5 +- search/enumvalues_e.js | 69 +- search/enumvalues_f.js | 4 +- search/functions_1.js | 14 +- search/functions_10.js | 77 +- search/functions_12.js | 251 +- search/functions_13.js | 917 ++-- search/functions_14.js | 2622 ++++++------ search/functions_15.js | 209 +- search/functions_1a.js | 13 +- search/functions_1b.js | 4 +- search/functions_2.js | 307 +- search/functions_3.js | 872 ++-- search/functions_4.js | 8 +- search/functions_5.js | 16 +- search/functions_6.js | 10 +- search/functions_8.js | 4 +- search/functions_9.js | 888 ++-- search/functions_a.js | 12 +- search/functions_b.js | 37 +- search/functions_c.js | 10 +- search/functions_d.js | 183 +- search/functions_e.js | 161 +- search/typedefs_1.js | 4 +- search/typedefs_8.js | 57 +- search/typedefs_c.js | 4 +- search/variables_16.js | 6 +- search/variables_3.js | 4 +- search/variables_d.js | 4 +- 128 files changed, 18175 insertions(+), 15540 deletions(-) create mode 100644 NFTokenAuth__test_8cpp_source.html create mode 100644 classripple_1_1NFTokenAuth__test-members.html create mode 100644 classripple_1_1NFTokenAuth__test.html create mode 100644 classripple_1_1NFTokenAuth__test__coll__graph.map create mode 100644 classripple_1_1NFTokenAuth__test__coll__graph.md5 create mode 100644 classripple_1_1NFTokenAuth__test__coll__graph.png create mode 100644 classripple_1_1NFTokenAuth__test__inherit__graph.map create mode 100644 classripple_1_1NFTokenAuth__test__inherit__graph.md5 create mode 100644 classripple_1_1NFTokenAuth__test__inherit__graph.png diff --git a/Freeze__test_8cpp_source.html b/Freeze__test_8cpp_source.html index fb73eae01e..566fa71762 100644 --- a/Freeze__test_8cpp_source.html +++ b/Freeze__test_8cpp_source.html @@ -1963,152 +1963,245 @@ $(function() {
1885 env.close();
1886 }
1887
-
1888 // Testing A2 nft offer sell when A2 frozen by currency holder
-
1889 {
-
1890 auto const sellOfferIndex = createNFTSellOffer(env, A2, USD(10));
-
1891 env(trust(A2, limit, tfSetFreeze));
-
1892 env.close();
-
1893
-
1894 // test: offer can still be accepted.
-
1895 env(token::acceptSellOffer(A1, sellOfferIndex));
-
1896 env.close();
-
1897
-
1898 env(trust(A2, limit, tfClearFreeze));
-
1899 env.close();
-
1900 }
-
1901
-
1902 // Testing A2 nft offer sell when A2 deep frozen by currency holder
-
1903 if (features[featureDeepFreeze])
-
1904 {
-
1905 auto const sellOfferIndex = createNFTSellOffer(env, A2, USD(10));
-
1906
-
1907 env(trust(A2, limit, tfSetFreeze | tfSetDeepFreeze));
-
1908 env.close();
-
1909
-
1910 // test: A2 cannot receive USD for his NFT
-
1911 env(token::acceptSellOffer(A1, sellOfferIndex), ter(tecFROZEN));
-
1912 env.close();
-
1913
-
1914 env(trust(A2, limit, tfClearFreeze | tfClearDeepFreeze));
-
1915 env.close();
-
1916 }
-
1917
-
1918 // Testing A1 nft offer sell when A2 frozen by currency holder
-
1919 {
-
1920 auto const sellOfferIndex = createNFTSellOffer(env, A1, USD(10));
-
1921 env(trust(A2, limit, tfSetFreeze));
-
1922 env.close();
-
1923
-
1924 // test: A2 cannot send USD for NFT
-
1925 env(token::acceptSellOffer(A2, sellOfferIndex));
-
1926 env.close();
-
1927
-
1928 env(trust(A2, limit, tfClearFreeze));
-
1929 env.close();
-
1930 }
+
1888 // Testing A1 nft buy offer when A2 deep frozen by issuer
+
1889 if (features[featureDeepFreeze] &&
+
1890 features[fixEnforceNFTokenTrustlineV2])
+
1891 {
+
1892 env(trust(G1, A2["USD"](0), tfSetFreeze | tfSetDeepFreeze));
+
1893 env.close();
+
1894
+
1895 uint256 const nftID{token::getNextID(env, A2, 0u, tfTransferable)};
+
1896 env(token::mint(A2, 0), txflags(tfTransferable));
+
1897 env.close();
+
1898
+
1899 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
1900 env(token::createOffer(A1, nftID, USD(10)), token::owner(A2));
+
1901 env.close();
+
1902
+
1903 env(token::acceptBuyOffer(A2, buyIdx), ter(tecFROZEN));
+
1904 env.close();
+
1905
+
1906 env(trust(G1, A2["USD"](0), tfClearFreeze | tfClearDeepFreeze));
+
1907 env.close();
+
1908
+
1909 env(token::acceptBuyOffer(A2, buyIdx));
+
1910 env.close();
+
1911 }
+
1912
+
1913 // Testing A2 nft offer sell when A2 frozen by currency holder
+
1914 {
+
1915 auto const sellOfferIndex = createNFTSellOffer(env, A2, USD(10));
+
1916 env(trust(A2, limit, tfSetFreeze));
+
1917 env.close();
+
1918
+
1919 // test: offer can still be accepted.
+
1920 env(token::acceptSellOffer(A1, sellOfferIndex));
+
1921 env.close();
+
1922
+
1923 env(trust(A2, limit, tfClearFreeze));
+
1924 env.close();
+
1925 }
+
1926
+
1927 // Testing A2 nft offer sell when A2 deep frozen by currency holder
+
1928 if (features[featureDeepFreeze])
+
1929 {
+
1930 auto const sellOfferIndex = createNFTSellOffer(env, A2, USD(10));
1931
-
1932 // Testing A1 nft offer sell when A2 deep frozen by currency holder
-
1933 if (features[featureDeepFreeze])
-
1934 {
-
1935 auto const sellOfferIndex = createNFTSellOffer(env, A1, USD(10));
-
1936 env(trust(A2, limit, tfSetFreeze | tfSetDeepFreeze));
+
1932 env(trust(A2, limit, tfSetFreeze | tfSetDeepFreeze));
+
1933 env.close();
+
1934
+
1935 // test: A2 cannot receive USD for his NFT
+
1936 env(token::acceptSellOffer(A1, sellOfferIndex), ter(tecFROZEN));
1937 env.close();
1938
-
1939 // test: A2 cannot send USD for NFT
-
1940 env(token::acceptSellOffer(A2, sellOfferIndex),
-
1941 ter(tecINSUFFICIENT_FUNDS));
-
1942 env.close();
-
1943
-
1944 env(trust(A2, limit, tfClearFreeze | tfClearDeepFreeze));
-
1945 env.close();
-
1946 }
-
1947 }
+
1939 env(trust(A2, limit, tfClearFreeze | tfClearDeepFreeze));
+
1940 env.close();
+
1941 }
+
1942
+
1943 // Testing A1 nft offer sell when A2 frozen by currency holder
+
1944 {
+
1945 auto const sellOfferIndex = createNFTSellOffer(env, A1, USD(10));
+
1946 env(trust(A2, limit, tfSetFreeze));
+
1947 env.close();
1948
-
1949 // Helper function to extract trustline flags from open ledger
-
1950 uint32_t
-
1951 getTrustlineFlags(
-
1952 test::jtx::Env& env,
-
1953 size_t expectedArraySize,
-
1954 size_t expectedArrayIndex,
-
1955 bool modified = true)
-
1956 {
-
1957 using namespace test::jtx;
-
1958 auto const affected =
-
1959 env.meta()->getJson(JsonOptions::none)[sfAffectedNodes.fieldName];
-
1960 if (!BEAST_EXPECT(checkArraySize(affected, expectedArraySize)))
-
1961 return 0;
-
1962
-
1963 if (modified)
-
1964 {
-
1965 return affected[expectedArrayIndex][sfModifiedNode.fieldName]
-
1966 [sfFinalFields.fieldName][jss::Flags]
-
1967 .asUInt();
-
1968 }
-
1969
-
1970 return affected[expectedArrayIndex][sfCreatedNode.fieldName]
-
1971 [sfNewFields.fieldName][jss::Flags]
-
1972 .asUInt();
-
1973 }
-
1974
-
1975 // Helper function that returns the index of the next check on account
-
1976 uint256
-
1977 getCheckIndex(AccountID const& account, std::uint32_t uSequence)
-
1978 {
-
1979 return keylet::check(account, uSequence).key;
-
1980 }
-
1981
-
1982 uint256
-
1983 createNFTSellOffer(
-
1984 test::jtx::Env& env,
-
1985 test::jtx::Account const& account,
-
1986 test::jtx::PrettyAmount const& currency)
-
1987 {
-
1988 using namespace test::jtx;
-
1989 uint256 const nftID{token::getNextID(env, account, 0u, tfTransferable)};
-
1990 env(token::mint(account, 0), txflags(tfTransferable));
-
1991 env.close();
-
1992
-
1993 uint256 const sellOfferIndex =
-
1994 keylet::nftoffer(account, env.seq(account)).key;
-
1995 env(token::createOffer(account, nftID, currency),
-
1996 txflags(tfSellNFToken));
-
1997 env.close();
-
1998
-
1999 return sellOfferIndex;
-
2000 }
-
2001
-
2002public:
-
2003 void
-
2004 run() override
-
2005 {
-
2006 auto testAll = [this](FeatureBitset features) {
-
2007 testRippleState(features);
-
2008 testDeepFreeze(features);
-
2009 testCreateFrozenTrustline(features);
-
2010 testSetAndClear(features);
-
2011 testGlobalFreeze(features);
-
2012 testNoFreeze(features);
-
2013 testOffersWhenFrozen(features);
-
2014 testOffersWhenDeepFrozen(features);
-
2015 testPaymentsWhenDeepFrozen(features);
-
2016 testChecksWhenFrozen(features);
-
2017 testAMMWhenFreeze(features);
-
2018 testPathsWhenFrozen(features);
-
2019 testNFTOffersWhenFreeze(features);
-
2020 };
-
2021 using namespace test::jtx;
-
2022 auto const sa = supported_amendments();
-
2023 testAll(
-
2024 sa - featureFlowCross - featureDeepFreeze - featurePermissionedDEX);
-
2025 testAll(sa - featureFlowCross - featurePermissionedDEX);
-
2026 testAll(sa - featureDeepFreeze - featurePermissionedDEX);
-
2027 testAll(sa - featurePermissionedDEX);
-
2028 testAll(sa);
-
2029 }
-
2030};
-
2031
-
2032BEAST_DEFINE_TESTSUITE(Freeze, app, ripple);
-
2033} // namespace ripple
+
1949 // test: A2 cannot send USD for NFT
+
1950 env(token::acceptSellOffer(A2, sellOfferIndex));
+
1951 env.close();
+
1952
+
1953 env(trust(A2, limit, tfClearFreeze));
+
1954 env.close();
+
1955 }
+
1956
+
1957 // Testing A1 nft offer sell when A2 deep frozen by currency holder
+
1958 if (features[featureDeepFreeze])
+
1959 {
+
1960 auto const sellOfferIndex = createNFTSellOffer(env, A1, USD(10));
+
1961 env(trust(A2, limit, tfSetFreeze | tfSetDeepFreeze));
+
1962 env.close();
+
1963
+
1964 // test: A2 cannot send USD for NFT
+
1965 env(token::acceptSellOffer(A2, sellOfferIndex),
+
1966 ter(tecINSUFFICIENT_FUNDS));
+
1967 env.close();
+
1968
+
1969 env(trust(A2, limit, tfClearFreeze | tfClearDeepFreeze));
+
1970 env.close();
+
1971 }
+
1972
+
1973 // Testing brokered offer acceptance
+
1974 if (features[featureDeepFreeze] &&
+
1975 features[fixEnforceNFTokenTrustlineV2])
+
1976 {
+
1977 Account broker{"broker"};
+
1978 env.fund(XRP(10000), broker);
+
1979 env.close();
+
1980 env(trust(G1, broker["USD"](1000), tfSetFreeze | tfSetDeepFreeze));
+
1981 env.close();
+
1982
+
1983 uint256 const nftID{token::getNextID(env, A2, 0u, tfTransferable)};
+
1984 env(token::mint(A2, 0), txflags(tfTransferable));
+
1985 env.close();
+
1986
+
1987 uint256 const sellIdx = keylet::nftoffer(A2, env.seq(A2)).key;
+
1988 env(token::createOffer(A2, nftID, USD(10)), txflags(tfSellNFToken));
+
1989 env.close();
+
1990 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
1991 env(token::createOffer(A1, nftID, USD(11)), token::owner(A2));
+
1992 env.close();
+
1993
+
1994 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
1995 token::brokerFee(USD(1)),
+
1996 ter(tecFROZEN));
+
1997 env.close();
+
1998 }
+
1999
+
2000 // Testing transfer fee
+
2001 if (features[featureDeepFreeze] &&
+
2002 features[fixEnforceNFTokenTrustlineV2])
+
2003 {
+
2004 Account minter{"minter"};
+
2005 env.fund(XRP(10000), minter);
+
2006 env.close();
+
2007 env(trust(G1, minter["USD"](1000)));
+
2008 env.close();
+
2009
+
2010 uint256 const nftID{
+
2011 token::getNextID(env, minter, 0u, tfTransferable, 1u)};
+
2012 env(token::mint(minter, 0),
+
2013 token::xferFee(1u),
+
2014 txflags(tfTransferable));
+
2015 env.close();
+
2016
+
2017 uint256 const minterSellIdx =
+
2018 keylet::nftoffer(minter, env.seq(minter)).key;
+
2019 env(token::createOffer(minter, nftID, drops(1)),
+
2020 txflags(tfSellNFToken));
+
2021 env.close();
+
2022 env(token::acceptSellOffer(A2, minterSellIdx));
+
2023 env.close();
+
2024
+
2025 uint256 const sellIdx = keylet::nftoffer(A2, env.seq(A2)).key;
+
2026 env(token::createOffer(A2, nftID, USD(100)),
+
2027 txflags(tfSellNFToken));
+
2028 env.close();
+
2029 env(trust(G1, minter["USD"](1000), tfSetFreeze | tfSetDeepFreeze));
+
2030 env.close();
+
2031 env(token::acceptSellOffer(A1, sellIdx), ter(tecFROZEN));
+
2032 env.close();
+
2033 }
+
2034 }
+
2035
+
2036 // Helper function to extract trustline flags from open ledger
+
2037 uint32_t
+
2038 getTrustlineFlags(
+
2039 test::jtx::Env& env,
+
2040 size_t expectedArraySize,
+
2041 size_t expectedArrayIndex,
+
2042 bool modified = true)
+
2043 {
+
2044 using namespace test::jtx;
+
2045 auto const affected =
+
2046 env.meta()->getJson(JsonOptions::none)[sfAffectedNodes.fieldName];
+
2047 if (!BEAST_EXPECT(checkArraySize(affected, expectedArraySize)))
+
2048 return 0;
+
2049
+
2050 if (modified)
+
2051 {
+
2052 return affected[expectedArrayIndex][sfModifiedNode.fieldName]
+
2053 [sfFinalFields.fieldName][jss::Flags]
+
2054 .asUInt();
+
2055 }
+
2056
+
2057 return affected[expectedArrayIndex][sfCreatedNode.fieldName]
+
2058 [sfNewFields.fieldName][jss::Flags]
+
2059 .asUInt();
+
2060 }
+
2061
+
2062 // Helper function that returns the index of the next check on account
+
2063 uint256
+
2064 getCheckIndex(AccountID const& account, std::uint32_t uSequence)
+
2065 {
+
2066 return keylet::check(account, uSequence).key;
+
2067 }
+
2068
+
2069 uint256
+
2070 createNFTSellOffer(
+
2071 test::jtx::Env& env,
+
2072 test::jtx::Account const& account,
+
2073 test::jtx::PrettyAmount const& currency)
+
2074 {
+
2075 using namespace test::jtx;
+
2076 uint256 const nftID{token::getNextID(env, account, 0u, tfTransferable)};
+
2077 env(token::mint(account, 0), txflags(tfTransferable));
+
2078 env.close();
+
2079
+
2080 uint256 const sellOfferIndex =
+
2081 keylet::nftoffer(account, env.seq(account)).key;
+
2082 env(token::createOffer(account, nftID, currency),
+
2083 txflags(tfSellNFToken));
+
2084 env.close();
+
2085
+
2086 return sellOfferIndex;
+
2087 }
+
2088
+
2089public:
+
2090 void
+
2091 run() override
+
2092 {
+
2093 auto testAll = [this](FeatureBitset features) {
+
2094 testRippleState(features);
+
2095 testDeepFreeze(features);
+
2096 testCreateFrozenTrustline(features);
+
2097 testSetAndClear(features);
+
2098 testGlobalFreeze(features);
+
2099 testNoFreeze(features);
+
2100 testOffersWhenFrozen(features);
+
2101 testOffersWhenDeepFrozen(features);
+
2102 testPaymentsWhenDeepFrozen(features);
+
2103 testChecksWhenFrozen(features);
+
2104 testAMMWhenFreeze(features);
+
2105 testPathsWhenFrozen(features);
+
2106 testNFTOffersWhenFreeze(features);
+
2107 };
+
2108 using namespace test::jtx;
+
2109 auto const sa = supported_amendments();
+
2110 testAll(
+
2111 sa - featureFlowCross - featureDeepFreeze - featurePermissionedDEX -
+
2112 fixEnforceNFTokenTrustlineV2);
+
2113 testAll(
+
2114 sa - featureFlowCross - featurePermissionedDEX -
+
2115 fixEnforceNFTokenTrustlineV2);
+
2116 testAll(
+
2117 sa - featureDeepFreeze - featurePermissionedDEX -
+
2118 fixEnforceNFTokenTrustlineV2);
+
2119 testAll(sa - featurePermissionedDEX - fixEnforceNFTokenTrustlineV2);
+
2120 testAll(sa - fixEnforceNFTokenTrustlineV2);
+
2121 testAll(sa);
+
2122 }
+
2123};
+
2124
+
2125BEAST_DEFINE_TESTSUITE(Freeze, app, ripple);
+
2126} // namespace ripple
Represents a JSON value.
Definition: json_value.h:150
A testsuite class.
Definition: suite.h:55
@@ -2116,8 +2209,8 @@ $(function() {
Definition: Feature.h:147
Definition: Freeze_test.cpp:32
void testOffersWhenDeepFrozen(FeatureBitset features)
-
uint256 createNFTSellOffer(test::jtx::Env &env, test::jtx::Account const &account, test::jtx::PrettyAmount const &currency)
-
uint32_t getTrustlineFlags(test::jtx::Env &env, size_t expectedArraySize, size_t expectedArrayIndex, bool modified=true)
+
uint256 createNFTSellOffer(test::jtx::Env &env, test::jtx::Account const &account, test::jtx::PrettyAmount const &currency)
+
uint32_t getTrustlineFlags(test::jtx::Env &env, size_t expectedArraySize, size_t expectedArrayIndex, bool modified=true)
void testGlobalFreeze(FeatureBitset features)
void testDeepFreeze(FeatureBitset features)
void testPaymentsWhenDeepFrozen(FeatureBitset features)
@@ -2125,8 +2218,8 @@ $(function() {
void testNFTOffersWhenFreeze(FeatureBitset features)
void testAMMWhenFreeze(FeatureBitset features)
void testPathsWhenFrozen(FeatureBitset features)
-
void run() override
Runs the suite.
-
uint256 getCheckIndex(AccountID const &account, std::uint32_t uSequence)
+
void run() override
Runs the suite.
+
uint256 getCheckIndex(AccountID const &account, std::uint32_t uSequence)
void testCreateFrozenTrustline(FeatureBitset features)
void testRippleState(FeatureBitset features)
Definition: Freeze_test.cpp:34
void testSetAndClear(FeatureBitset features)
diff --git a/NFTokenAcceptOffer_8cpp_source.html b/NFTokenAcceptOffer_8cpp_source.html index e30ea9b6c5..39b0b7b283 100644 --- a/NFTokenAcceptOffer_8cpp_source.html +++ b/NFTokenAcceptOffer_8cpp_source.html @@ -238,460 +238,478 @@ $(function() {
160
161 if ((*so)[sfAmount] > (*bo)[sfAmount] - *brokerFee)
162 return tecINSUFFICIENT_PAYMENT;
-
163 }
-
164 }
-
165
-
166 if (bo)
-
167 {
-
168 if (((*bo)[sfFlags] & lsfSellNFToken) == lsfSellNFToken)
-
169 return tecNFTOKEN_OFFER_TYPE_MISMATCH;
-
170
-
171 // An account can't accept an offer it placed:
-
172 if ((*bo)[sfOwner] == ctx.tx[sfAccount])
-
173 return tecCANT_ACCEPT_OWN_NFTOKEN_OFFER;
-
174
-
175 // If not in bridged mode, the account must own the token:
-
176 if (!so &&
-
177 !nft::findToken(ctx.view, ctx.tx[sfAccount], (*bo)[sfNFTokenID]))
-
178 return tecNO_PERMISSION;
-
179
-
180 // If not in bridged mode...
-
181 if (!so)
-
182 {
-
183 // If the offer has a Destination field, the acceptor must be the
-
184 // Destination.
-
185 if (auto const dest = bo->at(~sfDestination);
-
186 dest.has_value() && *dest != ctx.tx[sfAccount])
-
187 return tecNO_PERMISSION;
-
188 }
-
189
-
190 // The account offering to buy must have funds:
-
191 //
-
192 // After this amendment, we allow an IOU issuer to buy an NFT with their
-
193 // own currency
-
194 auto const needed = bo->at(sfAmount);
-
195 if (ctx.view.rules().enabled(fixNonFungibleTokensV1_2))
-
196 {
-
197 if (accountFunds(
-
198 ctx.view, (*bo)[sfOwner], needed, fhZERO_IF_FROZEN, ctx.j) <
-
199 needed)
-
200 return tecINSUFFICIENT_FUNDS;
-
201 }
-
202 else if (
-
203 accountHolds(
-
204 ctx.view,
-
205 (*bo)[sfOwner],
-
206 needed.getCurrency(),
-
207 needed.getIssuer(),
-
208 fhZERO_IF_FROZEN,
-
209 ctx.j) < needed)
-
210 return tecINSUFFICIENT_FUNDS;
-
211 }
-
212
-
213 if (so)
-
214 {
-
215 if (((*so)[sfFlags] & lsfSellNFToken) != lsfSellNFToken)
-
216 return tecNFTOKEN_OFFER_TYPE_MISMATCH;
-
217
-
218 // An account can't accept an offer it placed:
-
219 if ((*so)[sfOwner] == ctx.tx[sfAccount])
-
220 return tecCANT_ACCEPT_OWN_NFTOKEN_OFFER;
-
221
-
222 // The seller must own the token.
-
223 if (!nft::findToken(ctx.view, (*so)[sfOwner], (*so)[sfNFTokenID]))
-
224 return tecNO_PERMISSION;
-
225
-
226 // If not in bridged mode...
-
227 if (!bo)
-
228 {
-
229 // If the offer has a Destination field, the acceptor must be the
-
230 // Destination.
-
231 if (auto const dest = so->at(~sfDestination);
-
232 dest.has_value() && *dest != ctx.tx[sfAccount])
-
233 return tecNO_PERMISSION;
-
234 }
-
235
-
236 // The account offering to buy must have funds:
-
237 auto const needed = so->at(sfAmount);
-
238 if (!ctx.view.rules().enabled(fixNonFungibleTokensV1_2))
+
163
+
164 // Check if broker is allowed to receive the fee with these IOUs.
+
165 if (!brokerFee->native() &&
+
166 ctx.view.rules().enabled(fixEnforceNFTokenTrustlineV2))
+
167 {
+
168 auto res = nft::checkTrustlineAuthorized(
+
169 ctx.view,
+
170 ctx.tx[sfAccount],
+
171 ctx.j,
+
172 brokerFee->asset().get<Issue>());
+
173 if (res != tesSUCCESS)
+
174 return res;
+
175
+
176 res = nft::checkTrustlineDeepFrozen(
+
177 ctx.view,
+
178 ctx.tx[sfAccount],
+
179 ctx.j,
+
180 brokerFee->asset().get<Issue>());
+
181 if (res != tesSUCCESS)
+
182 return res;
+
183 }
+
184 }
+
185 }
+
186
+
187 if (bo)
+
188 {
+
189 if (((*bo)[sfFlags] & lsfSellNFToken) == lsfSellNFToken)
+
190 return tecNFTOKEN_OFFER_TYPE_MISMATCH;
+
191
+
192 // An account can't accept an offer it placed:
+
193 if ((*bo)[sfOwner] == ctx.tx[sfAccount])
+
194 return tecCANT_ACCEPT_OWN_NFTOKEN_OFFER;
+
195
+
196 // If not in bridged mode, the account must own the token:
+
197 if (!so &&
+
198 !nft::findToken(ctx.view, ctx.tx[sfAccount], (*bo)[sfNFTokenID]))
+
199 return tecNO_PERMISSION;
+
200
+
201 // If not in bridged mode...
+
202 if (!so)
+
203 {
+
204 // If the offer has a Destination field, the acceptor must be the
+
205 // Destination.
+
206 if (auto const dest = bo->at(~sfDestination);
+
207 dest.has_value() && *dest != ctx.tx[sfAccount])
+
208 return tecNO_PERMISSION;
+
209 }
+
210
+
211 // The account offering to buy must have funds:
+
212 //
+
213 // After this amendment, we allow an IOU issuer to buy an NFT with their
+
214 // own currency
+
215 auto const needed = bo->at(sfAmount);
+
216 if (ctx.view.rules().enabled(fixNonFungibleTokensV1_2))
+
217 {
+
218 if (accountFunds(
+
219 ctx.view, (*bo)[sfOwner], needed, fhZERO_IF_FROZEN, ctx.j) <
+
220 needed)
+
221 return tecINSUFFICIENT_FUNDS;
+
222 }
+
223 else if (
+
224 accountHolds(
+
225 ctx.view,
+
226 (*bo)[sfOwner],
+
227 needed.getCurrency(),
+
228 needed.getIssuer(),
+
229 fhZERO_IF_FROZEN,
+
230 ctx.j) < needed)
+
231 return tecINSUFFICIENT_FUNDS;
+
232
+
233 // Check that the account accepting the buy offer (he's selling the NFT)
+
234 // is allowed to receive IOUs. Also check that this offer's creator is
+
235 // authorized. But we need to exclude the case when the transaction is
+
236 // created by the broker.
+
237 if (ctx.view.rules().enabled(fixEnforceNFTokenTrustlineV2) &&
+
238 !needed.native())
239 {
-
240 if (accountHolds(
-
241 ctx.view,
-
242 ctx.tx[sfAccount],
-
243 needed.getCurrency(),
-
244 needed.getIssuer(),
-
245 fhZERO_IF_FROZEN,
-
246 ctx.j) < needed)
-
247 return tecINSUFFICIENT_FUNDS;
-
248 }
-
249 else if (!bo)
-
250 {
-
251 // After this amendment, we allow buyers to buy with their own
-
252 // issued currency.
-
253 //
-
254 // In the case of brokered mode, this check is essentially
-
255 // redundant, since we have already confirmed that buy offer is >
-
256 // than the sell offer, and that the buyer can cover the buy
-
257 // offer.
-
258 //
-
259 // We also _must not_ check the tx submitter in brokered
-
260 // mode, because then we are confirming that the broker can
-
261 // cover what the buyer will pay, which doesn't make sense, causes
-
262 // an unnecessary tec, and is also resolved with this amendment.
-
263 if (accountFunds(
-
264 ctx.view,
-
265 ctx.tx[sfAccount],
-
266 needed,
-
267 fhZERO_IF_FROZEN,
-
268 ctx.j) < needed)
-
269 return tecINSUFFICIENT_FUNDS;
-
270 }
-
271
-
272 // Make sure that we are allowed to hold what the taker will pay us.
-
273 // This is a similar approach taken by usual offers.
-
274 if (!needed.native())
-
275 {
-
276 auto const result = checkAcceptAsset(
-
277 ctx.view,
-
278 ctx.flags,
-
279 (*so)[sfOwner],
-
280 ctx.j,
-
281 needed.asset().get<Issue>());
-
282 if (result != tesSUCCESS)
-
283 return result;
-
284 }
-
285 }
-
286
-
287 // Fix a bug where the transfer of an NFToken with a transfer fee could
-
288 // give the NFToken issuer an undesired trust line.
-
289 if (ctx.view.rules().enabled(fixEnforceNFTokenTrustline))
-
290 {
-
291 std::shared_ptr<SLE const> const& offer = bo ? bo : so;
-
292 if (!offer)
-
293 // Should be caught in preflight.
-
294 return tecINTERNAL;
-
295
-
296 uint256 const& tokenID = offer->at(sfNFTokenID);
-
297 STAmount const& amount = offer->at(sfAmount);
-
298 if (nft::getTransferFee(tokenID) != 0 &&
-
299 (nft::getFlags(tokenID) & nft::flagCreateTrustLines) == 0 &&
-
300 !amount.native())
-
301 {
-
302 auto const issuer = nft::getIssuer(tokenID);
-
303 // Issuer doesn't need a trust line to accept their own currency.
-
304 if (issuer != amount.getIssuer() &&
-
305 !ctx.view.read(keylet::line(issuer, amount.issue())))
-
306 return tecNO_LINE;
-
307 }
-
308 }
-
309 return tesSUCCESS;
-
310}
-
311
-
312TER
-
313NFTokenAcceptOffer::pay(
-
314 AccountID const& from,
-
315 AccountID const& to,
-
316 STAmount const& amount)
-
317{
-
318 // This should never happen, but it's easy and quick to check.
-
319 if (amount < beast::zero)
-
320 return tecINTERNAL;
-
321
-
322 auto const result = accountSend(view(), from, to, amount, j_);
-
323
-
324 // After this amendment, if any payment would cause a non-IOU-issuer to
-
325 // have a negative balance, or an IOU-issuer to have a positive balance in
-
326 // their own currency, we know that something went wrong. This was
-
327 // originally found in the context of IOU transfer fees. Since there are
-
328 // several payouts in this tx, just confirm that the end state is OK.
-
329 if (!view().rules().enabled(fixNonFungibleTokensV1_2))
-
330 return result;
-
331 if (result != tesSUCCESS)
-
332 return result;
-
333 if (accountFunds(view(), from, amount, fhZERO_IF_FROZEN, j_).signum() < 0)
-
334 return tecINSUFFICIENT_FUNDS;
-
335 if (accountFunds(view(), to, amount, fhZERO_IF_FROZEN, j_).signum() < 0)
-
336 return tecINSUFFICIENT_FUNDS;
-
337 return tesSUCCESS;
-
338}
-
339
-
340TER
-
341NFTokenAcceptOffer::transferNFToken(
-
342 AccountID const& buyer,
-
343 AccountID const& seller,
-
344 uint256 const& nftokenID)
-
345{
-
346 auto tokenAndPage = nft::findTokenAndPage(view(), seller, nftokenID);
-
347
-
348 if (!tokenAndPage)
-
349 return tecINTERNAL;
-
350
-
351 if (auto const ret = nft::removeToken(
-
352 view(), seller, nftokenID, std::move(tokenAndPage->page));
-
353 !isTesSuccess(ret))
-
354 return ret;
-
355
-
356 auto const sleBuyer = view().read(keylet::account(buyer));
-
357 if (!sleBuyer)
-
358 return tecINTERNAL;
-
359
-
360 std::uint32_t const buyerOwnerCountBefore =
-
361 sleBuyer->getFieldU32(sfOwnerCount);
-
362
-
363 auto const insertRet =
-
364 nft::insertToken(view(), buyer, std::move(tokenAndPage->token));
-
365
-
366 // if fixNFTokenReserve is enabled, check if the buyer has sufficient
-
367 // reserve to own a new object, if their OwnerCount changed.
-
368 //
-
369 // There was an issue where the buyer accepts a sell offer, the ledger
-
370 // didn't check if the buyer has enough reserve, meaning that buyer can get
-
371 // NFTs free of reserve.
-
372 if (view().rules().enabled(fixNFTokenReserve))
-
373 {
-
374 // To check if there is sufficient reserve, we cannot use mPriorBalance
-
375 // because NFT is sold for a price. So we must use the balance after
-
376 // the deduction of the potential offer price. A small caveat here is
-
377 // that the balance has already deducted the transaction fee, meaning
-
378 // that the reserve requirement is a few drops higher.
-
379 auto const buyerBalance = sleBuyer->getFieldAmount(sfBalance);
-
380
-
381 auto const buyerOwnerCountAfter = sleBuyer->getFieldU32(sfOwnerCount);
-
382 if (buyerOwnerCountAfter > buyerOwnerCountBefore)
-
383 {
-
384 if (auto const reserve =
-
385 view().fees().accountReserve(buyerOwnerCountAfter);
-
386 buyerBalance < reserve)
-
387 return tecINSUFFICIENT_RESERVE;
-
388 }
-
389 }
-
390
-
391 return insertRet;
-
392}
+
240 auto res = nft::checkTrustlineAuthorized(
+
241 ctx.view, bo->at(sfOwner), ctx.j, needed.asset().get<Issue>());
+
242 if (res != tesSUCCESS)
+
243 return res;
+
244
+
245 if (!so)
+
246 {
+
247 res = nft::checkTrustlineAuthorized(
+
248 ctx.view,
+
249 ctx.tx[sfAccount],
+
250 ctx.j,
+
251 needed.asset().get<Issue>());
+
252 if (res != tesSUCCESS)
+
253 return res;
+
254
+
255 res = nft::checkTrustlineDeepFrozen(
+
256 ctx.view,
+
257 ctx.tx[sfAccount],
+
258 ctx.j,
+
259 needed.asset().get<Issue>());
+
260 if (res != tesSUCCESS)
+
261 return res;
+
262 }
+
263 }
+
264 }
+
265
+
266 if (so)
+
267 {
+
268 if (((*so)[sfFlags] & lsfSellNFToken) != lsfSellNFToken)
+
269 return tecNFTOKEN_OFFER_TYPE_MISMATCH;
+
270
+
271 // An account can't accept an offer it placed:
+
272 if ((*so)[sfOwner] == ctx.tx[sfAccount])
+
273 return tecCANT_ACCEPT_OWN_NFTOKEN_OFFER;
+
274
+
275 // The seller must own the token.
+
276 if (!nft::findToken(ctx.view, (*so)[sfOwner], (*so)[sfNFTokenID]))
+
277 return tecNO_PERMISSION;
+
278
+
279 // If not in bridged mode...
+
280 if (!bo)
+
281 {
+
282 // If the offer has a Destination field, the acceptor must be the
+
283 // Destination.
+
284 if (auto const dest = so->at(~sfDestination);
+
285 dest.has_value() && *dest != ctx.tx[sfAccount])
+
286 return tecNO_PERMISSION;
+
287 }
+
288
+
289 // The account offering to buy must have funds:
+
290 auto const needed = so->at(sfAmount);
+
291 if (!ctx.view.rules().enabled(fixNonFungibleTokensV1_2))
+
292 {
+
293 if (accountHolds(
+
294 ctx.view,
+
295 ctx.tx[sfAccount],
+
296 needed.getCurrency(),
+
297 needed.getIssuer(),
+
298 fhZERO_IF_FROZEN,
+
299 ctx.j) < needed)
+
300 return tecINSUFFICIENT_FUNDS;
+
301 }
+
302 else if (!bo)
+
303 {
+
304 // After this amendment, we allow buyers to buy with their own
+
305 // issued currency.
+
306 //
+
307 // In the case of brokered mode, this check is essentially
+
308 // redundant, since we have already confirmed that buy offer is >
+
309 // than the sell offer, and that the buyer can cover the buy
+
310 // offer.
+
311 //
+
312 // We also _must not_ check the tx submitter in brokered
+
313 // mode, because then we are confirming that the broker can
+
314 // cover what the buyer will pay, which doesn't make sense, causes
+
315 // an unnecessary tec, and is also resolved with this amendment.
+
316 if (accountFunds(
+
317 ctx.view,
+
318 ctx.tx[sfAccount],
+
319 needed,
+
320 fhZERO_IF_FROZEN,
+
321 ctx.j) < needed)
+
322 return tecINSUFFICIENT_FUNDS;
+
323 }
+
324
+
325 // Make sure that we are allowed to hold what the taker will pay us.
+
326 if (!needed.native())
+
327 {
+
328 if (ctx.view.rules().enabled(fixEnforceNFTokenTrustlineV2))
+
329 {
+
330 auto res = nft::checkTrustlineAuthorized(
+
331 ctx.view,
+
332 (*so)[sfOwner],
+
333 ctx.j,
+
334 needed.asset().get<Issue>());
+
335 if (res != tesSUCCESS)
+
336 return res;
+
337
+
338 if (!bo)
+
339 {
+
340 res = nft::checkTrustlineAuthorized(
+
341 ctx.view,
+
342 ctx.tx[sfAccount],
+
343 ctx.j,
+
344 needed.asset().get<Issue>());
+
345 if (res != tesSUCCESS)
+
346 return res;
+
347 }
+
348 }
+
349
+
350 auto const res = nft::checkTrustlineDeepFrozen(
+
351 ctx.view, (*so)[sfOwner], ctx.j, needed.asset().get<Issue>());
+
352 if (res != tesSUCCESS)
+
353 return res;
+
354 }
+
355 }
+
356
+
357 // Additional checks are required in case a minter set a transfer fee for
+
358 // this nftoken
+
359 auto const& offer = bo ? bo : so;
+
360 if (!offer)
+
361 // Purely defensive, should be caught in preflight.
+
362 return tecINTERNAL;
+
363
+
364 auto const& tokenID = offer->at(sfNFTokenID);
+
365 auto const& amount = offer->at(sfAmount);
+
366 auto const nftMinter = nft::getIssuer(tokenID);
+
367
+
368 if (nft::getTransferFee(tokenID) != 0 && !amount.native())
+
369 {
+
370 // Fix a bug where the transfer of an NFToken with a transfer fee could
+
371 // give the NFToken issuer an undesired trust line.
+
372 // Issuer doesn't need a trust line to accept their own currency.
+
373 if (ctx.view.rules().enabled(fixEnforceNFTokenTrustline) &&
+
374 (nft::getFlags(tokenID) & nft::flagCreateTrustLines) == 0 &&
+
375 nftMinter != amount.getIssuer() &&
+
376 !ctx.view.read(keylet::line(nftMinter, amount.issue())))
+
377 return tecNO_LINE;
+
378
+
379 // Check that the issuer is allowed to receive IOUs.
+
380 if (ctx.view.rules().enabled(fixEnforceNFTokenTrustlineV2))
+
381 {
+
382 auto res = nft::checkTrustlineAuthorized(
+
383 ctx.view, nftMinter, ctx.j, amount.asset().get<Issue>());
+
384 if (res != tesSUCCESS)
+
385 return res;
+
386
+
387 res = nft::checkTrustlineDeepFrozen(
+
388 ctx.view, nftMinter, ctx.j, amount.asset().get<Issue>());
+
389 if (res != tesSUCCESS)
+
390 return res;
+
391 }
+
392 }
393
-
394TER
-
395NFTokenAcceptOffer::acceptOffer(std::shared_ptr<SLE> const& offer)
-
396{
-
397 bool const isSell = offer->isFlag(lsfSellNFToken);
-
398 AccountID const owner = (*offer)[sfOwner];
-
399 AccountID const& seller = isSell ? owner : account_;
-
400 AccountID const& buyer = isSell ? account_ : owner;
-
401
-
402 auto const nftokenID = (*offer)[sfNFTokenID];
-
403
-
404 if (auto amount = offer->getFieldAmount(sfAmount); amount != beast::zero)
-
405 {
-
406 // Calculate the issuer's cut from this sale, if any:
-
407 if (auto const fee = nft::getTransferFee(nftokenID); fee != 0)
-
408 {
-
409 auto const cut = multiply(amount, nft::transferFeeAsRate(fee));
-
410
-
411 if (auto const issuer = nft::getIssuer(nftokenID);
-
412 cut != beast::zero && seller != issuer && buyer != issuer)
-
413 {
-
414 if (auto const r = pay(buyer, issuer, cut); !isTesSuccess(r))
-
415 return r;
-
416 amount -= cut;
-
417 }
-
418 }
-
419
-
420 // Send the remaining funds to the seller of the NFT
-
421 if (auto const r = pay(buyer, seller, amount); !isTesSuccess(r))
-
422 return r;
-
423 }
+
394 return tesSUCCESS;
+
395}
+
396
+
397TER
+
398NFTokenAcceptOffer::pay(
+
399 AccountID const& from,
+
400 AccountID const& to,
+
401 STAmount const& amount)
+
402{
+
403 // This should never happen, but it's easy and quick to check.
+
404 if (amount < beast::zero)
+
405 return tecINTERNAL;
+
406
+
407 auto const result = accountSend(view(), from, to, amount, j_);
+
408
+
409 // After this amendment, if any payment would cause a non-IOU-issuer to
+
410 // have a negative balance, or an IOU-issuer to have a positive balance in
+
411 // their own currency, we know that something went wrong. This was
+
412 // originally found in the context of IOU transfer fees. Since there are
+
413 // several payouts in this tx, just confirm that the end state is OK.
+
414 if (!view().rules().enabled(fixNonFungibleTokensV1_2))
+
415 return result;
+
416 if (result != tesSUCCESS)
+
417 return result;
+
418 if (accountFunds(view(), from, amount, fhZERO_IF_FROZEN, j_).signum() < 0)
+
419 return tecINSUFFICIENT_FUNDS;
+
420 if (accountFunds(view(), to, amount, fhZERO_IF_FROZEN, j_).signum() < 0)
+
421 return tecINSUFFICIENT_FUNDS;
+
422 return tesSUCCESS;
+
423}
424
-
425 // Now transfer the NFT:
-
426 return transferNFToken(buyer, seller, nftokenID);
-
427}
-
428
-
429TER
-
430NFTokenAcceptOffer::doApply()
-
431{
-
432 auto const loadToken = [this](std::optional<uint256> const& id) {
-
433 std::shared_ptr<SLE> sle;
-
434 if (id)
-
435 sle = view().peek(keylet::nftoffer(*id));
-
436 return sle;
-
437 };
-
438
-
439 auto bo = loadToken(ctx_.tx[~sfNFTokenBuyOffer]);
-
440 auto so = loadToken(ctx_.tx[~sfNFTokenSellOffer]);
-
441
-
442 if (bo && !nft::deleteTokenOffer(view(), bo))
-
443 {
-
444 JLOG(j_.fatal()) << "Unable to delete buy offer '"
-
445 << to_string(bo->key()) << "': ignoring";
-
446 return tecINTERNAL;
-
447 }
-
448
-
449 if (so && !nft::deleteTokenOffer(view(), so))
-
450 {
-
451 JLOG(j_.fatal()) << "Unable to delete sell offer '"
-
452 << to_string(so->key()) << "': ignoring";
-
453 return tecINTERNAL;
-
454 }
-
455
-
456 // Bridging two different offers
-
457 if (bo && so)
+
425TER
+
426NFTokenAcceptOffer::transferNFToken(
+
427 AccountID const& buyer,
+
428 AccountID const& seller,
+
429 uint256 const& nftokenID)
+
430{
+
431 auto tokenAndPage = nft::findTokenAndPage(view(), seller, nftokenID);
+
432
+
433 if (!tokenAndPage)
+
434 return tecINTERNAL;
+
435
+
436 if (auto const ret = nft::removeToken(
+
437 view(), seller, nftokenID, std::move(tokenAndPage->page));
+
438 !isTesSuccess(ret))
+
439 return ret;
+
440
+
441 auto const sleBuyer = view().read(keylet::account(buyer));
+
442 if (!sleBuyer)
+
443 return tecINTERNAL;
+
444
+
445 std::uint32_t const buyerOwnerCountBefore =
+
446 sleBuyer->getFieldU32(sfOwnerCount);
+
447
+
448 auto const insertRet =
+
449 nft::insertToken(view(), buyer, std::move(tokenAndPage->token));
+
450
+
451 // if fixNFTokenReserve is enabled, check if the buyer has sufficient
+
452 // reserve to own a new object, if their OwnerCount changed.
+
453 //
+
454 // There was an issue where the buyer accepts a sell offer, the ledger
+
455 // didn't check if the buyer has enough reserve, meaning that buyer can get
+
456 // NFTs free of reserve.
+
457 if (view().rules().enabled(fixNFTokenReserve))
458 {
-
459 AccountID const buyer = (*bo)[sfOwner];
-
460 AccountID const seller = (*so)[sfOwner];
-
461
-
462 auto const nftokenID = (*so)[sfNFTokenID];
-
463
-
464 // The amount is what the buyer of the NFT pays:
-
465 STAmount amount = (*bo)[sfAmount];
-
466
-
467 // Three different folks may be paid. The order of operations is
-
468 // important.
-
469 //
-
470 // o The broker is paid the cut they requested.
-
471 // o The issuer's cut is calculated from what remains after the
-
472 // broker is paid. The issuer can take up to 50% of the remainder.
-
473 // o Finally, the seller gets whatever is left.
-
474 //
-
475 // It is important that the issuer's cut be calculated after the
-
476 // broker's portion is already removed. Calculating the issuer's
-
477 // cut before the broker's cut is removed can result in more money
-
478 // being paid out than the seller authorized. That would be bad!
-
479
-
480 // Send the broker the amount they requested.
-
481 if (auto const cut = ctx_.tx[~sfNFTokenBrokerFee];
-
482 cut && cut.value() != beast::zero)
-
483 {
-
484 if (auto const r = pay(buyer, account_, cut.value());
-
485 !isTesSuccess(r))
-
486 return r;
-
487
-
488 amount -= cut.value();
-
489 }
-
490
-
491 // Calculate the issuer's cut, if any.
-
492 if (auto const fee = nft::getTransferFee(nftokenID);
-
493 amount != beast::zero && fee != 0)
-
494 {
-
495 auto cut = multiply(amount, nft::transferFeeAsRate(fee));
-
496
-
497 if (auto const issuer = nft::getIssuer(nftokenID);
-
498 seller != issuer && buyer != issuer)
-
499 {
-
500 if (auto const r = pay(buyer, issuer, cut); !isTesSuccess(r))
-
501 return r;
-
502
-
503 amount -= cut;
-
504 }
-
505 }
-
506
-
507 // And send whatever remains to the seller.
-
508 if (amount > beast::zero)
-
509 {
-
510 if (auto const r = pay(buyer, seller, amount); !isTesSuccess(r))
-
511 return r;
-
512 }
+
459 // To check if there is sufficient reserve, we cannot use mPriorBalance
+
460 // because NFT is sold for a price. So we must use the balance after
+
461 // the deduction of the potential offer price. A small caveat here is
+
462 // that the balance has already deducted the transaction fee, meaning
+
463 // that the reserve requirement is a few drops higher.
+
464 auto const buyerBalance = sleBuyer->getFieldAmount(sfBalance);
+
465
+
466 auto const buyerOwnerCountAfter = sleBuyer->getFieldU32(sfOwnerCount);
+
467 if (buyerOwnerCountAfter > buyerOwnerCountBefore)
+
468 {
+
469 if (auto const reserve =
+
470 view().fees().accountReserve(buyerOwnerCountAfter);
+
471 buyerBalance < reserve)
+
472 return tecINSUFFICIENT_RESERVE;
+
473 }
+
474 }
+
475
+
476 return insertRet;
+
477}
+
478
+
479TER
+
480NFTokenAcceptOffer::acceptOffer(std::shared_ptr<SLE> const& offer)
+
481{
+
482 bool const isSell = offer->isFlag(lsfSellNFToken);
+
483 AccountID const owner = (*offer)[sfOwner];
+
484 AccountID const& seller = isSell ? owner : account_;
+
485 AccountID const& buyer = isSell ? account_ : owner;
+
486
+
487 auto const nftokenID = (*offer)[sfNFTokenID];
+
488
+
489 if (auto amount = offer->getFieldAmount(sfAmount); amount != beast::zero)
+
490 {
+
491 // Calculate the issuer's cut from this sale, if any:
+
492 if (auto const fee = nft::getTransferFee(nftokenID); fee != 0)
+
493 {
+
494 auto const cut = multiply(amount, nft::transferFeeAsRate(fee));
+
495
+
496 if (auto const issuer = nft::getIssuer(nftokenID);
+
497 cut != beast::zero && seller != issuer && buyer != issuer)
+
498 {
+
499 if (auto const r = pay(buyer, issuer, cut); !isTesSuccess(r))
+
500 return r;
+
501 amount -= cut;
+
502 }
+
503 }
+
504
+
505 // Send the remaining funds to the seller of the NFT
+
506 if (auto const r = pay(buyer, seller, amount); !isTesSuccess(r))
+
507 return r;
+
508 }
+
509
+
510 // Now transfer the NFT:
+
511 return transferNFToken(buyer, seller, nftokenID);
+
512}
513
-
514 // Now transfer the NFT:
-
515 return transferNFToken(buyer, seller, nftokenID);
-
516 }
-
517
-
518 if (bo)
-
519 return acceptOffer(bo);
-
520
-
521 if (so)
-
522 return acceptOffer(so);
+
514TER
+
515NFTokenAcceptOffer::doApply()
+
516{
+
517 auto const loadToken = [this](std::optional<uint256> const& id) {
+
518 std::shared_ptr<SLE> sle;
+
519 if (id)
+
520 sle = view().peek(keylet::nftoffer(*id));
+
521 return sle;
+
522 };
523
-
524 return tecINTERNAL;
-
525}
+
524 auto bo = loadToken(ctx_.tx[~sfNFTokenBuyOffer]);
+
525 auto so = loadToken(ctx_.tx[~sfNFTokenSellOffer]);
526
-
527TER
-
528NFTokenAcceptOffer::checkAcceptAsset(
-
529 ReadView const& view,
-
530 ApplyFlags const flags,
-
531 AccountID const id,
-
532 beast::Journal const j,
-
533 Issue const& issue)
-
534{
-
535 // Only valid for custom currencies
-
536
-
537 if (!view.rules().enabled(featureDeepFreeze))
-
538 {
-
539 return tesSUCCESS;
-
540 }
-
541
-
542 XRPL_ASSERT(
-
543 !isXRP(issue.currency),
-
544 "NFTokenAcceptOffer::checkAcceptAsset : valid to check.");
-
545 auto const issuerAccount = view.read(keylet::account(issue.account));
+
527 if (bo && !nft::deleteTokenOffer(view(), bo))
+
528 {
+
529 JLOG(j_.fatal()) << "Unable to delete buy offer '"
+
530 << to_string(bo->key()) << "': ignoring";
+
531 return tecINTERNAL;
+
532 }
+
533
+
534 if (so && !nft::deleteTokenOffer(view(), so))
+
535 {
+
536 JLOG(j_.fatal()) << "Unable to delete sell offer '"
+
537 << to_string(so->key()) << "': ignoring";
+
538 return tecINTERNAL;
+
539 }
+
540
+
541 // Bridging two different offers
+
542 if (bo && so)
+
543 {
+
544 AccountID const buyer = (*bo)[sfOwner];
+
545 AccountID const seller = (*so)[sfOwner];
546
-
547 if (!issuerAccount)
-
548 {
-
549 JLOG(j.debug())
-
550 << "delay: can't receive IOUs from non-existent issuer: "
-
551 << to_string(issue.account);
-
552
-
553 return tecNO_ISSUER;
-
554 }
-
555
-
556 // An account can not create a trustline to itself, so no line can exist
-
557 // to be frozen. Additionally, an issuer can always accept its own
-
558 // issuance.
-
559 if (issue.account == id)
-
560 {
-
561 return tesSUCCESS;
-
562 }
-
563
-
564 auto const trustLine =
-
565 view.read(keylet::line(id, issue.account, issue.currency));
-
566
-
567 if (!trustLine)
-
568 {
-
569 return tesSUCCESS;
-
570 }
-
571
-
572 // There's no difference which side enacted deep freeze, accepting
-
573 // tokens shouldn't be possible.
-
574 bool const deepFrozen =
-
575 (*trustLine)[sfFlags] & (lsfLowDeepFreeze | lsfHighDeepFreeze);
-
576
-
577 if (deepFrozen)
-
578 {
-
579 return tecFROZEN;
-
580 }
+
547 auto const nftokenID = (*so)[sfNFTokenID];
+
548
+
549 // The amount is what the buyer of the NFT pays:
+
550 STAmount amount = (*bo)[sfAmount];
+
551
+
552 // Three different folks may be paid. The order of operations is
+
553 // important.
+
554 //
+
555 // o The broker is paid the cut they requested.
+
556 // o The issuer's cut is calculated from what remains after the
+
557 // broker is paid. The issuer can take up to 50% of the remainder.
+
558 // o Finally, the seller gets whatever is left.
+
559 //
+
560 // It is important that the issuer's cut be calculated after the
+
561 // broker's portion is already removed. Calculating the issuer's
+
562 // cut before the broker's cut is removed can result in more money
+
563 // being paid out than the seller authorized. That would be bad!
+
564
+
565 // Send the broker the amount they requested.
+
566 if (auto const cut = ctx_.tx[~sfNFTokenBrokerFee];
+
567 cut && cut.value() != beast::zero)
+
568 {
+
569 if (auto const r = pay(buyer, account_, cut.value());
+
570 !isTesSuccess(r))
+
571 return r;
+
572
+
573 amount -= cut.value();
+
574 }
+
575
+
576 // Calculate the issuer's cut, if any.
+
577 if (auto const fee = nft::getTransferFee(nftokenID);
+
578 amount != beast::zero && fee != 0)
+
579 {
+
580 auto cut = multiply(amount, nft::transferFeeAsRate(fee));
581
-
582 return tesSUCCESS;
-
583}
-
584
-
585} // namespace ripple
-
A generic endpoint for log messages.
Definition: Journal.h:60
+
582 if (auto const issuer = nft::getIssuer(nftokenID);
+
583 seller != issuer && buyer != issuer)
+
584 {
+
585 if (auto const r = pay(buyer, issuer, cut); !isTesSuccess(r))
+
586 return r;
+
587
+
588 amount -= cut;
+
589 }
+
590 }
+
591
+
592 // And send whatever remains to the seller.
+
593 if (amount > beast::zero)
+
594 {
+
595 if (auto const r = pay(buyer, seller, amount); !isTesSuccess(r))
+
596 return r;
+
597 }
+
598
+
599 // Now transfer the NFT:
+
600 return transferNFToken(buyer, seller, nftokenID);
+
601 }
+
602
+
603 if (bo)
+
604 return acceptOffer(bo);
+
605
+
606 if (so)
+
607 return acceptOffer(so);
+
608
+
609 return tecINTERNAL;
+
610}
+
611
+
612} // namespace ripple
Stream fatal() const
Definition: Journal.h:352
-
Stream debug() const
Definition: Journal.h:328
STTx const & tx
Definition: ApplyContext.h:72
virtual std::shared_ptr< SLE > peek(Keylet const &k)=0
Prepare to modify the SLE associated with key.
A currency issued by an account.
Definition: Issue.h:36
-
AccountID account
Definition: Issue.h:39
-
Currency currency
Definition: Issue.h:38
-
TER acceptOffer(std::shared_ptr< SLE > const &offer)
+
TER acceptOffer(std::shared_ptr< SLE > const &offer)
static TER preclaim(PreclaimContext const &ctx)
-
TER pay(AccountID const &from, AccountID const &to, STAmount const &amount)
-
TER transferNFToken(AccountID const &buyer, AccountID const &seller, uint256 const &nfTokenID)
-
static TER checkAcceptAsset(ReadView const &view, ApplyFlags const flags, AccountID const id, beast::Journal const j, Issue const &issue)
-
TER doApply() override
+
TER pay(AccountID const &from, AccountID const &to, STAmount const &amount)
+
TER transferNFToken(AccountID const &buyer, AccountID const &seller, uint256 const &nfTokenID)
+
TER doApply() override
static NotTEC preflight(PreflightContext const &ctx)
-
A view into a ledger.
Definition: ReadView.h:52
virtual std::shared_ptr< SLE const > read(Keylet const &k) const =0
Return the state item associated with a key.
virtual Rules const & rules() const =0
Returns the tx processing rules.
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
Definition: Rules.cpp:130
Definition: STAmount.h:50
STAmount const & value() const noexcept
Definition: STAmount.h:594
-
AccountID const & getIssuer() const
Definition: STAmount.h:508
-
Issue const & issue() const
Definition: STAmount.h:496
-
bool native() const noexcept
Definition: STAmount.h:458
std::uint32_t getFlags() const
Definition: STObject.cpp:537
AccountID const account_
Definition: Transactor.h:143
ApplyView & view()
Definition: Transactor.h:159
beast::Journal const j_
Definition: Transactor.h:141
ApplyContext & ctx_
Definition: Transactor.h:140
-
+
Keylet line(AccountID const &id0, AccountID const &id1, Currency const &currency) noexcept
The index of a trust line for a given currency.
Definition: Indexes.cpp:244
Keylet account(AccountID const &id) noexcept
AccountID root.
Definition: Indexes.cpp:184
@@ -700,26 +718,23 @@ $(function() {
std::uint16_t getFlags(uint256 const &id)
Definition: nft.h:60
TER removeToken(ApplyView &view, AccountID const &owner, uint256 const &nftokenID)
Remove the token from the owner's token directory.
AccountID getIssuer(uint256 const &id)
Definition: nft.h:120
+
TER checkTrustlineDeepFrozen(ReadView const &view, AccountID const id, beast::Journal const j, Issue const &issue)
bool deleteTokenOffer(ApplyView &view, std::shared_ptr< SLE > const &offer)
Deletes the given token offer.
std::optional< TokenAndPage > findTokenAndPage(ApplyView &view, AccountID const &owner, uint256 const &nftokenID)
TER insertToken(ApplyView &view, AccountID owner, STObject &&nft)
Insert the token in the owner's token directory.
std::optional< STObject > findToken(ReadView const &view, AccountID const &owner, uint256 const &nftokenID)
Finds the specified token in the owner's token directory.
constexpr std::uint16_t const flagCreateTrustLines
Definition: nft.h:55
+
TER checkTrustlineAuthorized(ReadView const &view, AccountID const id, beast::Journal const j, Issue const &issue)
Rate transferFeeAsRate(std::uint16_t fee)
Given a transfer fee (in basis points) convert it to a transfer rate.
Definition: Rate2.cpp:45
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
STAmount accountFunds(ReadView const &view, AccountID const &id, STAmount const &saDefault, FreezeHandling freezeHandling, beast::Journal j)
Definition: View.cpp:553
@ fhZERO_IF_FROZEN
Definition: View.h:78
-
bool isXRP(AccountID const &c)
Definition: AccountID.h:91
-
@ lsfHighDeepFreeze
-
@ lsfLowDeepFreeze
@ lsfSellNFToken
STAmount multiply(STAmount const &amount, Rate const &rate)
Definition: Rate2.cpp:53
NotTEC preflight1(PreflightContext const &ctx)
Performs early sanity checks on the account and fee fields.
Definition: Transactor.cpp:91
NotTEC preflight2(PreflightContext const &ctx)
Checks whether the signature appears valid.
Definition: Transactor.cpp:160
@ tecOBJECT_NOT_FOUND
Definition: TER.h:326
-
@ tecNO_ISSUER
Definition: TER.h:299
@ tecNFTOKEN_OFFER_TYPE_MISMATCH
Definition: TER.h:323
-
@ tecFROZEN
Definition: TER.h:303
@ tecINSUFFICIENT_FUNDS
Definition: TER.h:325
@ tecNFTOKEN_BUY_SELL_MISMATCH
Definition: TER.h:322
@ tecINTERNAL
Definition: TER.h:310
@@ -733,7 +748,6 @@ $(function() {
STAmount accountHolds(ReadView const &view, AccountID const &account, Currency const &currency, AccountID const &issuer, FreezeHandling zeroIfFrozen, beast::Journal j)
Definition: View.cpp:386
bool isTesSuccess(TER x) noexcept
Definition: TER.h:672
std::string to_string(base_uint< Bits, Tag > const &a)
Definition: base_uint.h:630
-
ApplyFlags
Definition: ApplyView.h:31
bool hasExpired(ReadView const &view, std::optional< std::uint32_t > const &exp)
Determines whether the given expiration time has passed.
Definition: View.cpp:175
constexpr std::uint32_t const tfNFTokenAcceptOfferMask
Definition: TxFlags.h:208
TER accountSend(ApplyView &view, AccountID const &uSenderID, AccountID const &uReceiverID, STAmount const &saAmount, beast::Journal j, WaiveTransferFee waiveFee)
Calls static accountSendIOU if saAmount represents Issue.
Definition: View.cpp:1998
@@ -748,7 +762,6 @@ $(function() {
State information when determining if a tx is likely to claim a fee.
Definition: Transactor.h:79
ReadView const & view
Definition: Transactor.h:82
STTx const & tx
Definition: Transactor.h:85
-
ApplyFlags flags
Definition: Transactor.h:84
beast::Journal const j
Definition: Transactor.h:87
State information when preflighting a tx.
Definition: Transactor.h:34
Rules const rules
Definition: Transactor.h:38
diff --git a/NFTokenAcceptOffer_8h_source.html b/NFTokenAcceptOffer_8h_source.html index 86b10d32b1..88443e3e15 100644 --- a/NFTokenAcceptOffer_8h_source.html +++ b/NFTokenAcceptOffer_8h_source.html @@ -122,59 +122,45 @@ $(function() {
44 AccountID const& seller,
45 uint256 const& nfTokenID);
46
-
47 static TER
-
48 checkAcceptAsset(
-
49 ReadView const& view,
-
50 ApplyFlags const flags,
-
51 AccountID const id,
-
52 beast::Journal const j,
-
53 Issue const& issue);
-
54
-
55public:
-
56 static constexpr ConsequencesFactoryType ConsequencesFactory{Normal};
-
57
-
58 explicit NFTokenAcceptOffer(ApplyContext& ctx) : Transactor(ctx)
-
59 {
-
60 }
-
61
-
62 static NotTEC
-
63 preflight(PreflightContext const& ctx);
-
64
-
65 static TER
-
66 preclaim(PreclaimContext const& ctx);
-
67
-
68 TER
-
69 doApply() override;
-
70};
-
71
-
72} // namespace ripple
-
73
-
74#endif
-
A generic endpoint for log messages.
Definition: Journal.h:60
+
47public:
+
48 static constexpr ConsequencesFactoryType ConsequencesFactory{Normal};
+
49
+
50 explicit NFTokenAcceptOffer(ApplyContext& ctx) : Transactor(ctx)
+
51 {
+
52 }
+
53
+
54 static NotTEC
+
55 preflight(PreflightContext const& ctx);
+
56
+
57 static TER
+
58 preclaim(PreclaimContext const& ctx);
+
59
+
60 TER
+
61 doApply() override;
+
62};
+
63
+
64} // namespace ripple
+
65
+
66#endif
State information when applying a tx.
Definition: ApplyContext.h:37
-
A currency issued by an account.
Definition: Issue.h:36
-
NFTokenAcceptOffer(ApplyContext &ctx)
-
TER acceptOffer(std::shared_ptr< SLE > const &offer)
+
NFTokenAcceptOffer(ApplyContext &ctx)
+
TER acceptOffer(std::shared_ptr< SLE > const &offer)
static TER preclaim(PreclaimContext const &ctx)
-
TER pay(AccountID const &from, AccountID const &to, STAmount const &amount)
+
TER pay(AccountID const &from, AccountID const &to, STAmount const &amount)
TER bridgeOffers(std::shared_ptr< SLE > const &buy, std::shared_ptr< SLE > const &sell)
-
TER transferNFToken(AccountID const &buyer, AccountID const &seller, uint256 const &nfTokenID)
-
static TER checkAcceptAsset(ReadView const &view, ApplyFlags const flags, AccountID const id, beast::Journal const j, Issue const &issue)
-
TER doApply() override
-
static constexpr ConsequencesFactoryType ConsequencesFactory
+
TER transferNFToken(AccountID const &buyer, AccountID const &seller, uint256 const &nfTokenID)
+
TER doApply() override
+
static constexpr ConsequencesFactoryType ConsequencesFactory
static NotTEC preflight(PreflightContext const &ctx)
-
A view into a ledger.
Definition: ReadView.h:52
Definition: STAmount.h:50
Definition: Transactor.h:138
ConsequencesFactoryType
Definition: Transactor.h:153
@ Normal
Definition: Transactor.h:153
-
ApplyView & view()
Definition: Transactor.h:159
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
@ sell
Definition: Steps.h:45
-
ApplyFlags
Definition: ApplyView.h:31
State information when determining if a tx is likely to claim a fee.
Definition: Transactor.h:79
State information when preflighting a tx.
Definition: Transactor.h:34
diff --git a/NFTokenAuth__test_8cpp_source.html b/NFTokenAuth__test_8cpp_source.html new file mode 100644 index 0000000000..c119ce0d3f --- /dev/null +++ b/NFTokenAuth__test_8cpp_source.html @@ -0,0 +1,748 @@ + + + + + + + +rippled: NFTokenAuth_test.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
rippled +
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
NFTokenAuth_test.cpp
+
+
+
1//------------------------------------------------------------------------------
+
2/*
+
3 This file is part of rippled: https://github.com/ripple/rippled
+
4 Copyright (c) 2025 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.h>
+
21
+
22#include <xrpld/app/tx/detail/NFTokenUtils.h>
+
23
+
24namespace ripple {
+
25
+ +
27{
+
28 auto
+ +
30 test::jtx::Env& env,
+
31 test::jtx::Account const& account,
+
32 test::jtx::PrettyAmount const& currency,
+
33 uint32_t xfee = 0u)
+
34 {
+
35 using namespace test::jtx;
+
36 auto const nftID{
+
37 token::getNextID(env, account, 0u, tfTransferable, xfee)};
+
38 env(token::mint(account, 0),
+
39 token::xferFee(xfee),
+
40 txflags(tfTransferable));
+
41 env.close();
+
42
+
43 auto const sellIdx = keylet::nftoffer(account, env.seq(account)).key;
+
44 env(token::createOffer(account, nftID, currency),
+
45 txflags(tfSellNFToken));
+
46 env.close();
+
47
+
48 return std::make_tuple(nftID, sellIdx);
+
49 }
+
50
+
51public:
+
52 void
+ +
54 {
+
55 testcase("Unauthorized seller tries to accept buy offer");
+
56 using namespace test::jtx;
+
57
+
58 Env env(*this, features);
+
59 Account G1{"G1"};
+
60 Account A1{"A1"};
+
61 Account A2{"A2"};
+
62 auto const USD{G1["USD"]};
+
63
+
64 env.fund(XRP(10000), G1, A1, A2);
+
65 env(fset(G1, asfRequireAuth));
+
66 env.close();
+
67
+
68 auto const limit = USD(10000);
+
69
+
70 env(trust(A1, limit));
+
71 env(trust(G1, limit, A1, tfSetfAuth));
+
72 env(pay(G1, A1, USD(1000)));
+
73
+
74 auto const [nftID, _] = mintAndOfferNFT(env, A2, drops(1));
+
75 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
76
+
77 // It should be possible to create a buy offer even if NFT owner is not
+
78 // authorized
+
79 env(token::createOffer(A1, nftID, USD(10)), token::owner(A2));
+
80
+
81 if (features[fixEnforceNFTokenTrustlineV2])
+
82 {
+
83 // test: G1 requires authorization of A2, no trust line exists
+
84 env(token::acceptBuyOffer(A2, buyIdx), ter(tecNO_LINE));
+
85 env.close();
+
86
+
87 // trust line created, but not authorized
+
88 env(trust(A2, limit));
+
89
+
90 // test: G1 requires authorization of A2
+
91 env(token::acceptBuyOffer(A2, buyIdx), ter(tecNO_AUTH));
+
92 env.close();
+
93 }
+
94 else
+
95 {
+
96 // Old behavior: it is possible to sell tokens and receive IOUs
+
97 // without the authorization
+
98 env(token::acceptBuyOffer(A2, buyIdx));
+
99 env.close();
+
100
+
101 BEAST_EXPECT(env.balance(A2, USD) == USD(10));
+
102 }
+
103 }
+
104
+
105 void
+ +
107 {
+
108 testcase("Unauthorized buyer tries to create buy offer");
+
109 using namespace test::jtx;
+
110
+
111 Env env(*this, features);
+
112 Account G1{"G1"};
+
113 Account A1{"A1"};
+
114 Account A2{"A2"};
+
115 auto const USD{G1["USD"]};
+
116
+
117 env.fund(XRP(10000), G1, A1, A2);
+
118 env(fset(G1, asfRequireAuth));
+
119 env.close();
+
120
+
121 auto const [nftID, _] = mintAndOfferNFT(env, A2, drops(1));
+
122
+
123 // test: check that buyer can't make an offer if they're not authorized.
+
124 env(token::createOffer(A1, nftID, USD(10)),
+
125 token::owner(A2),
+
126 ter(tecUNFUNDED_OFFER));
+
127 env.close();
+
128
+
129 // Artificially create an unauthorized trustline with balance. Don't
+
130 // close ledger before running the actual tests against this trustline.
+
131 // After ledger is closed, the trustline will not exist.
+
132 auto const unauthTrustline = [&](OpenView& view,
+
133 beast::Journal) -> bool {
+
134 auto const sleA1 =
+
135 std::make_shared<SLE>(keylet::line(A1, G1, G1["USD"].currency));
+
136 sleA1->setFieldAmount(sfBalance, A1["USD"](-1000));
+
137 view.rawInsert(sleA1);
+
138 return true;
+
139 };
+
140 env.app().openLedger().modify(unauthTrustline);
+
141
+
142 if (features[fixEnforceNFTokenTrustlineV2])
+
143 {
+
144 // test: check that buyer can't make an offer even with balance
+
145 env(token::createOffer(A1, nftID, USD(10)),
+
146 token::owner(A2),
+
147 ter(tecNO_AUTH));
+
148 }
+
149 else
+
150 {
+
151 // old behavior: can create an offer if balance allows, regardless
+
152 // ot authorization
+
153 env(token::createOffer(A1, nftID, USD(10)), token::owner(A2));
+
154 }
+
155 }
+
156
+
157 void
+ +
159 {
+
160 testcase("Seller tries to accept buy offer from unauth buyer");
+
161 using namespace test::jtx;
+
162
+
163 Env env(*this, features);
+
164 Account G1{"G1"};
+
165 Account A1{"A1"};
+
166 Account A2{"A2"};
+
167 auto const USD{G1["USD"]};
+
168
+
169 env.fund(XRP(10000), G1, A1, A2);
+
170 env(fset(G1, asfRequireAuth));
+
171 env.close();
+
172
+
173 auto const limit = USD(10000);
+
174
+
175 auto const [nftID, _] = mintAndOfferNFT(env, A2, drops(1));
+
176
+
177 // First we authorize buyer and seller so that he can create buy offer
+
178 env(trust(A1, limit));
+
179 env(trust(G1, limit, A1, tfSetfAuth));
+
180 env(pay(G1, A1, USD(10)));
+
181 env(trust(A2, limit));
+
182 env(trust(G1, limit, A2, tfSetfAuth));
+
183 env(pay(G1, A2, USD(10)));
+
184 env.close();
+
185
+
186 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
187 env(token::createOffer(A1, nftID, USD(10)), token::owner(A2));
+
188 env.close();
+
189
+
190 env(pay(A1, G1, USD(10)));
+
191 env(trust(A1, USD(0)));
+
192 env(trust(G1, A1["USD"](0)));
+
193 env.close();
+
194
+
195 // Replace an existing authorized trustline with artificial unauthorized
+
196 // trustline with balance. Don't close ledger before running the actual
+
197 // tests against this trustline. After ledger is closed, the trustline
+
198 // will not exist.
+
199 auto const unauthTrustline = [&](OpenView& view,
+
200 beast::Journal) -> bool {
+
201 auto const sleA1 =
+
202 std::make_shared<SLE>(keylet::line(A1, G1, G1["USD"].currency));
+
203 sleA1->setFieldAmount(sfBalance, A1["USD"](-1000));
+
204 view.rawInsert(sleA1);
+
205 return true;
+
206 };
+
207 env.app().openLedger().modify(unauthTrustline);
+
208 if (features[fixEnforceNFTokenTrustlineV2])
+
209 {
+
210 // test: check that offer can't be accepted even with balance
+
211 env(token::acceptBuyOffer(A2, buyIdx), ter(tecNO_AUTH));
+
212 }
+
213 }
+
214
+
215 void
+ +
217 {
+
218 testcase(
+
219 "Authorized buyer tries to accept sell offer from unauthorized "
+
220 "seller");
+
221 using namespace test::jtx;
+
222
+
223 Env env(*this, features);
+
224 Account G1{"G1"};
+
225 Account A1{"A1"};
+
226 Account A2{"A2"};
+
227 auto const USD{G1["USD"]};
+
228
+
229 env.fund(XRP(10000), G1, A1, A2);
+
230 env(fset(G1, asfRequireAuth));
+
231 env.close();
+
232
+
233 auto const limit = USD(10000);
+
234
+
235 env(trust(A1, limit));
+
236 env(trust(G1, limit, A1, tfSetfAuth));
+
237 env(pay(G1, A1, USD(1000)));
+
238
+
239 auto const [nftID, _] = mintAndOfferNFT(env, A2, drops(1));
+
240 if (features[fixEnforceNFTokenTrustlineV2])
+
241 {
+
242 // test: can't create sell offer if there is no trustline but auth
+
243 // required
+
244 env(token::createOffer(A2, nftID, USD(10)),
+
245 txflags(tfSellNFToken),
+
246 ter(tecNO_LINE));
+
247
+
248 env(trust(A2, limit));
+
249 // test: can't create sell offer if not authorized to hold token
+
250 env(token::createOffer(A2, nftID, USD(10)),
+
251 txflags(tfSellNFToken),
+
252 ter(tecNO_AUTH));
+
253
+
254 // Authorizing trustline to make an offer creation possible
+
255 env(trust(G1, USD(0), A2, tfSetfAuth));
+
256 env.close();
+
257 auto const sellIdx = keylet::nftoffer(A2, env.seq(A2)).key;
+
258 env(token::createOffer(A2, nftID, USD(10)), txflags(tfSellNFToken));
+
259 env.close();
+
260 //
+
261
+
262 // Reseting trustline to delete it. This allows to check if
+
263 // already existing offers handled correctly
+
264 env(trust(A2, USD(0)));
+
265 env.close();
+
266
+
267 // test: G1 requires authorization of A1, no trust line exists
+
268 env(token::acceptSellOffer(A1, sellIdx), ter(tecNO_LINE));
+
269 env.close();
+
270
+
271 // trust line created, but not authorized
+
272 env(trust(A2, limit));
+
273 env.close();
+
274
+
275 // test: G1 requires authorization of A1
+
276 env(token::acceptSellOffer(A1, sellIdx), ter(tecNO_AUTH));
+
277 env.close();
+
278 }
+
279 else
+
280 {
+
281 auto const sellIdx = keylet::nftoffer(A2, env.seq(A2)).key;
+
282
+
283 // Old behavior: sell offer can be created without authorization
+
284 env(token::createOffer(A2, nftID, USD(10)), txflags(tfSellNFToken));
+
285 env.close();
+
286
+
287 // Old behavior: it is possible to sell NFT and receive IOUs
+
288 // without the authorization
+
289 env(token::acceptSellOffer(A1, sellIdx));
+
290 env.close();
+
291
+
292 BEAST_EXPECT(env.balance(A2, USD) == USD(10));
+
293 }
+
294 }
+
295
+
296 void
+ +
298 {
+
299 testcase("Unauthorized buyer tries to accept sell offer");
+
300 using namespace test::jtx;
+
301
+
302 Env env(*this, features);
+
303 Account G1{"G1"};
+
304 Account A1{"A1"};
+
305 Account A2{"A2"};
+
306 auto const USD{G1["USD"]};
+
307
+
308 env.fund(XRP(10000), G1, A1, A2);
+
309 env(fset(G1, asfRequireAuth));
+
310 env.close();
+
311
+
312 auto const limit = USD(10000);
+
313
+
314 env(trust(A2, limit));
+
315 env(trust(G1, limit, A2, tfSetfAuth));
+
316
+
317 auto const [_, sellIdx] = mintAndOfferNFT(env, A2, USD(10));
+
318
+
319 // test: check that buyer can't accept an offer if they're not
+
320 // authorized.
+
321 env(token::acceptSellOffer(A1, sellIdx), ter(tecINSUFFICIENT_FUNDS));
+
322 env.close();
+
323
+
324 // Creating an artificial unauth trustline
+
325 auto const unauthTrustline = [&](OpenView& view,
+
326 beast::Journal) -> bool {
+
327 auto const sleA1 =
+
328 std::make_shared<SLE>(keylet::line(A1, G1, G1["USD"].currency));
+
329 sleA1->setFieldAmount(sfBalance, A1["USD"](-1000));
+
330 view.rawInsert(sleA1);
+
331 return true;
+
332 };
+
333 env.app().openLedger().modify(unauthTrustline);
+
334 if (features[fixEnforceNFTokenTrustlineV2])
+
335 {
+
336 env(token::acceptSellOffer(A1, sellIdx), ter(tecNO_AUTH));
+
337 }
+
338 }
+
339
+
340 void
+ +
342 {
+
343 testcase("Unauthorized broker bridges authorized buyer and seller.");
+
344 using namespace test::jtx;
+
345
+
346 Env env(*this, features);
+
347 Account G1{"G1"};
+
348 Account A1{"A1"};
+
349 Account A2{"A2"};
+
350 Account broker{"broker"};
+
351 auto const USD{G1["USD"]};
+
352
+
353 env.fund(XRP(10000), G1, A1, A2, broker);
+
354 env(fset(G1, asfRequireAuth));
+
355 env.close();
+
356
+
357 auto const limit = USD(10000);
+
358
+
359 env(trust(A1, limit));
+
360 env(trust(G1, limit, A1, tfSetfAuth));
+
361 env(pay(G1, A1, USD(1000)));
+
362 env(trust(A2, limit));
+
363 env(trust(G1, limit, A2, tfSetfAuth));
+
364 env(pay(G1, A2, USD(1000)));
+
365 env.close();
+
366
+
367 auto const [nftID, sellIdx] = mintAndOfferNFT(env, A2, USD(10));
+
368 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
369 env(token::createOffer(A1, nftID, USD(11)), token::owner(A2));
+
370 env.close();
+
371
+
372 if (features[fixEnforceNFTokenTrustlineV2])
+
373 {
+
374 // test: G1 requires authorization of broker, no trust line exists
+
375 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
376 token::brokerFee(USD(1)),
+
377 ter(tecNO_LINE));
+
378 env.close();
+
379
+
380 // trust line created, but not authorized
+
381 env(trust(broker, limit));
+
382 env.close();
+
383
+
384 // test: G1 requires authorization of broker
+
385 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
386 token::brokerFee(USD(1)),
+
387 ter(tecNO_AUTH));
+
388 env.close();
+
389
+
390 // test: can still be brokered without broker fee.
+
391 env(token::brokerOffers(broker, buyIdx, sellIdx));
+
392 env.close();
+
393 }
+
394 else
+
395 {
+
396 // Old behavior: broker can receive IOUs without the authorization
+
397 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
398 token::brokerFee(USD(1)));
+
399 env.close();
+
400
+
401 BEAST_EXPECT(env.balance(broker, USD) == USD(1));
+
402 }
+
403 }
+
404
+
405 void
+ +
407 {
+
408 testcase(
+
409 "Authorized broker tries to bridge offers from unauthorized "
+
410 "buyer.");
+
411 using namespace test::jtx;
+
412
+
413 Env env(*this, features);
+
414 Account G1{"G1"};
+
415 Account A1{"A1"};
+
416 Account A2{"A2"};
+
417 Account broker{"broker"};
+
418 auto const USD{G1["USD"]};
+
419
+
420 env.fund(XRP(10000), G1, A1, A2, broker);
+
421 env(fset(G1, asfRequireAuth));
+
422 env.close();
+
423
+
424 auto const limit = USD(10000);
+
425
+
426 env(trust(A1, limit));
+
427 env(trust(G1, USD(0), A1, tfSetfAuth));
+
428 env(pay(G1, A1, USD(1000)));
+
429 env(trust(A2, limit));
+
430 env(trust(G1, USD(0), A2, tfSetfAuth));
+
431 env(pay(G1, A2, USD(1000)));
+
432 env(trust(broker, limit));
+
433 env(trust(G1, USD(0), broker, tfSetfAuth));
+
434 env(pay(G1, broker, USD(1000)));
+
435 env.close();
+
436
+
437 auto const [nftID, sellIdx] = mintAndOfferNFT(env, A2, USD(10));
+
438 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
439 env(token::createOffer(A1, nftID, USD(11)), token::owner(A2));
+
440 env.close();
+
441
+
442 // Resetting buyer's trust line to delete it
+
443 env(pay(A1, G1, USD(1000)));
+
444 env(trust(A1, USD(0)));
+
445 env.close();
+
446
+
447 auto const unauthTrustline = [&](OpenView& view,
+
448 beast::Journal) -> bool {
+
449 auto const sleA1 =
+
450 std::make_shared<SLE>(keylet::line(A1, G1, G1["USD"].currency));
+
451 sleA1->setFieldAmount(sfBalance, A1["USD"](-1000));
+
452 view.rawInsert(sleA1);
+
453 return true;
+
454 };
+
455 env.app().openLedger().modify(unauthTrustline);
+
456
+
457 if (features[fixEnforceNFTokenTrustlineV2])
+
458 {
+
459 // test: G1 requires authorization of A2
+
460 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
461 token::brokerFee(USD(1)),
+
462 ter(tecNO_AUTH));
+
463 env.close();
+
464 }
+
465 }
+
466
+
467 void
+ +
469 {
+
470 testcase(
+
471 "Authorized broker tries to bridge offers from unauthorized "
+
472 "seller.");
+
473 using namespace test::jtx;
+
474
+
475 Env env(*this, features);
+
476 Account G1{"G1"};
+
477 Account A1{"A1"};
+
478 Account A2{"A2"};
+
479 Account broker{"broker"};
+
480 auto const USD{G1["USD"]};
+
481
+
482 env.fund(XRP(10000), G1, A1, A2, broker);
+
483 env(fset(G1, asfRequireAuth));
+
484 env.close();
+
485
+
486 auto const limit = USD(10000);
+
487
+
488 env(trust(A1, limit));
+
489 env(trust(G1, limit, A1, tfSetfAuth));
+
490 env(pay(G1, A1, USD(1000)));
+
491 env(trust(broker, limit));
+
492 env(trust(G1, limit, broker, tfSetfAuth));
+
493 env(pay(G1, broker, USD(1000)));
+
494 env.close();
+
495
+
496 // Authorizing trustline to make an offer creation possible
+
497 env(trust(G1, USD(0), A2, tfSetfAuth));
+
498 env.close();
+
499
+
500 auto const [nftID, sellIdx] = mintAndOfferNFT(env, A2, USD(10));
+
501 auto const buyIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
502 env(token::createOffer(A1, nftID, USD(11)), token::owner(A2));
+
503 env.close();
+
504
+
505 // Reseting trustline to delete it. This allows to check if
+
506 // already existing offers handled correctly
+
507 env(trust(A2, USD(0)));
+
508 env.close();
+
509
+
510 if (features[fixEnforceNFTokenTrustlineV2])
+
511 {
+
512 // test: G1 requires authorization of broker, no trust line exists
+
513 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
514 token::brokerFee(USD(1)),
+
515 ter(tecNO_LINE));
+
516 env.close();
+
517
+
518 // trust line created, but not authorized
+
519 env(trust(A2, limit));
+
520 env.close();
+
521
+
522 // test: G1 requires authorization of A2
+
523 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
524 token::brokerFee(USD(1)),
+
525 ter(tecNO_AUTH));
+
526 env.close();
+
527
+
528 // test: cannot be brokered even without broker fee.
+
529 env(token::brokerOffers(broker, buyIdx, sellIdx), ter(tecNO_AUTH));
+
530 env.close();
+
531 }
+
532 else
+
533 {
+
534 // Old behavior: broker can receive IOUs without the authorization
+
535 env(token::brokerOffers(broker, buyIdx, sellIdx),
+
536 token::brokerFee(USD(1)));
+
537 env.close();
+
538
+
539 BEAST_EXPECT(env.balance(A2, USD) == USD(10));
+
540 return;
+
541 }
+
542 }
+
543
+
544 void
+ +
546 {
+
547 testcase("Unauthorized minter receives transfer fee.");
+
548 using namespace test::jtx;
+
549
+
550 Env env(*this, features);
+
551 Account G1{"G1"};
+
552 Account minter{"minter"};
+
553 Account A1{"A1"};
+
554 Account A2{"A2"};
+
555 auto const USD{G1["USD"]};
+
556
+
557 env.fund(XRP(10000), G1, minter, A1, A2);
+
558 env(fset(G1, asfRequireAuth));
+
559 env.close();
+
560
+
561 auto const limit = USD(10000);
+
562
+
563 env(trust(A1, limit));
+
564 env(trust(G1, limit, A1, tfSetfAuth));
+
565 env(pay(G1, A1, USD(1000)));
+
566 env(trust(A2, limit));
+
567 env(trust(G1, limit, A2, tfSetfAuth));
+
568 env(pay(G1, A2, USD(1000)));
+
569
+
570 env(trust(minter, limit));
+
571 env.close();
+
572
+
573 // We authorized A1 and A2, but not the minter.
+
574 // Now mint NFT
+
575 auto const [nftID, minterSellIdx] =
+
576 mintAndOfferNFT(env, minter, drops(1), 1);
+
577 env(token::acceptSellOffer(A1, minterSellIdx));
+
578
+
579 uint256 const sellIdx = keylet::nftoffer(A1, env.seq(A1)).key;
+
580 env(token::createOffer(A1, nftID, USD(100)), txflags(tfSellNFToken));
+
581
+
582 if (features[fixEnforceNFTokenTrustlineV2])
+
583 {
+
584 // test: G1 requires authorization
+
585 env(token::acceptSellOffer(A2, sellIdx), ter(tecNO_AUTH));
+
586 env.close();
+
587 }
+
588 else
+
589 {
+
590 // Old behavior: can sell for USD. Minter can receive tokens
+
591 env(token::acceptSellOffer(A2, sellIdx));
+
592 env.close();
+
593
+
594 BEAST_EXPECT(env.balance(minter, USD) == USD(0.001));
+
595 }
+
596 }
+
597
+
598 void
+
599 run() override
+
600 {
+
601 using namespace test::jtx;
+
602 static FeatureBitset const all{supported_amendments()};
+
603
+
604 static std::array const features = {
+
605 all - fixEnforceNFTokenTrustlineV2, all};
+
606
+
607 for (auto const feature : features)
+
608 {
+ + + + + + + + + +
618 }
+
619 }
+
620};
+
621
+
622BEAST_DEFINE_TESTSUITE_PRIO(NFTokenAuth, tx, ripple, 2);
+
623
+
624} // namespace ripple
+ +
A generic endpoint for log messages.
Definition: Journal.h:60
+
A testsuite class.
Definition: suite.h:55
+
testcase_t testcase
Memberspace for declaring test cases.
Definition: suite.h:155
+ + +
void testSellOffer_UnauthorizedBuyer(FeatureBitset features)
+
void run() override
Runs the suite.
+
void testCreateBuyOffer_UnauthorizedBuyer(FeatureBitset features)
+
void testBrokeredAcceptOffer_UnauthorizedBroker(FeatureBitset features)
+
void testBrokeredAcceptOffer_UnauthorizedSeller(FeatureBitset features)
+
void testTransferFee_UnauthorizedMinter(FeatureBitset features)
+
void testSellOffer_UnauthorizedSeller(FeatureBitset features)
+
void testBuyOffer_UnauthorizedSeller(FeatureBitset features)
+
auto mintAndOfferNFT(test::jtx::Env &env, test::jtx::Account const &account, test::jtx::PrettyAmount const &currency, uint32_t xfee=0u)
+
void testBrokeredAcceptOffer_UnauthorizedBuyer(FeatureBitset features)
+
void testAcceptBuyOffer_UnauthorizedBuyer(FeatureBitset features)
+
Writable ledger view that accumulates state and tx changes.
Definition: OpenView.h:66
+
void rawInsert(std::shared_ptr< SLE > const &sle) override
Unconditionally insert a state item.
Definition: OpenView.cpp:238
+ +
Immutable cryptographic account descriptor.
Definition: Account.h:39
+
A transaction testing environment.
Definition: Env.h:121
+
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition: Env.cpp:212
+
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Definition: Env.cpp:117
+
T make_tuple(T... args)
+
Keylet line(AccountID const &id0, AccountID const &id1, Currency const &currency) noexcept
The index of a trust line for a given currency.
Definition: Indexes.cpp:244
+
Keylet nftoffer(AccountID const &owner, std::uint32_t seq)
An offer from an account to buy or sell an NFT.
Definition: Indexes.cpp:427
+
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
+
constexpr std::uint32_t const tfSellNFToken
Definition: TxFlags.h:200
+ +
constexpr std::uint32_t tfSetfAuth
Definition: TxFlags.h:114
+
@ tecUNFUNDED_OFFER
Definition: TER.h:284
+
@ tecINSUFFICIENT_FUNDS
Definition: TER.h:325
+
@ tecNO_LINE
Definition: TER.h:301
+
@ tecNO_AUTH
Definition: TER.h:300
+
constexpr std::uint32_t asfRequireAuth
Definition: TxFlags.h:78
+
constexpr std::uint32_t const tfTransferable
Definition: TxFlags.h:145
+
uint256 key
Definition: Keylet.h:40
+
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...
+
+ + + + diff --git a/NFTokenCreateOffer_8cpp_source.html b/NFTokenCreateOffer_8cpp_source.html index 5259b69649..e28393a2a1 100644 --- a/NFTokenCreateOffer_8cpp_source.html +++ b/NFTokenCreateOffer_8cpp_source.html @@ -200,7 +200,7 @@ $(function() {
std::uint16_t getTransferFee(uint256 const &id)
Definition: nft.h:68
std::uint16_t getFlags(uint256 const &id)
Definition: nft.h:60
NotTEC tokenOfferCreatePreflight(AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, std::uint16_t nftFlags, Rules const &rules, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preflight checks shared by NFTokenCreateOffer and NFTokenMint.
-
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
+
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
AccountID getIssuer(uint256 const &id)
Definition: nft.h:120
TER tokenOfferCreatePreclaim(ReadView const &view, AccountID const &acctID, AccountID const &nftIssuer, STAmount const &amount, std::optional< AccountID > const &dest, std::uint16_t nftFlags, std::uint16_t xferFee, beast::Journal j, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preclaim checks shared by NFTokenCreateOffer and NFTokenMint.
std::optional< STObject > findToken(ReadView const &view, AccountID const &owner, uint256 const &nftokenID)
Finds the specified token in the owner's token directory.
diff --git a/NFTokenMint_8cpp_source.html b/NFTokenMint_8cpp_source.html index 028c61a5c2..3757d9666e 100644 --- a/NFTokenMint_8cpp_source.html +++ b/NFTokenMint_8cpp_source.html @@ -478,7 +478,7 @@ $(function() {
Keylet account(AccountID const &id) noexcept
AccountID root.
Definition: Indexes.cpp:184
std::uint32_t toUInt32(Taxon t)
Definition: nft.h:48
NotTEC tokenOfferCreatePreflight(AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, std::uint16_t nftFlags, Rules const &rules, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preflight checks shared by NFTokenCreateOffer and NFTokenMint.
-
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
+
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
Taxon cipheredTaxon(std::uint32_t tokenSeq, Taxon taxon)
Definition: nft.h:84
TER tokenOfferCreatePreclaim(ReadView const &view, AccountID const &acctID, AccountID const &nftIssuer, STAmount const &amount, std::optional< AccountID > const &dest, std::uint16_t nftFlags, std::uint16_t xferFee, beast::Journal j, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preclaim checks shared by NFTokenCreateOffer and NFTokenMint.
TER insertToken(ApplyView &view, AccountID owner, STObject &&nft)
Insert the token in the owner's token directory.
diff --git a/NFTokenUtils_8cpp_source.html b/NFTokenUtils_8cpp_source.html index 1c9ccd98b0..dea48908bb 100644 --- a/NFTokenUtils_8cpp_source.html +++ b/NFTokenUtils_8cpp_source.html @@ -1079,87 +1079,210 @@ $(function() {
1004 }
1005 }
1006
-
1007 return tesSUCCESS;
-
1008}
-
1009
-
1010TER
-
1011tokenOfferCreateApply(
-
1012 ApplyView& view,
-
1013 AccountID const& acctID,
-
1014 STAmount const& amount,
-
1015 std::optional<AccountID> const& dest,
-
1016 std::optional<std::uint32_t> const& expiration,
-
1017 SeqProxy seqProxy,
-
1018 uint256 const& nftokenID,
-
1019 XRPAmount const& priorBalance,
-
1020 beast::Journal j,
-
1021 std::uint32_t txFlags)
-
1022{
-
1023 Keylet const acctKeylet = keylet::account(acctID);
-
1024 if (auto const acct = view.read(acctKeylet);
-
1025 priorBalance < view.fees().accountReserve((*acct)[sfOwnerCount] + 1))
-
1026 return tecINSUFFICIENT_RESERVE;
-
1027
-
1028 auto const offerID = keylet::nftoffer(acctID, seqProxy.value());
-
1029
-
1030 // Create the offer:
-
1031 {
-
1032 // Token offers are always added to the owner's owner directory:
-
1033 auto const ownerNode = view.dirInsert(
-
1034 keylet::ownerDir(acctID), offerID, describeOwnerDir(acctID));
-
1035
-
1036 if (!ownerNode)
-
1037 return tecDIR_FULL;
-
1038
-
1039 bool const isSellOffer = txFlags & tfSellNFToken;
-
1040
-
1041 // Token offers are also added to the token's buy or sell offer
-
1042 // directory
-
1043 auto const offerNode = view.dirInsert(
-
1044 isSellOffer ? keylet::nft_sells(nftokenID)
-
1045 : keylet::nft_buys(nftokenID),
-
1046 offerID,
-
1047 [&nftokenID, isSellOffer](std::shared_ptr<SLE> const& sle) {
-
1048 (*sle)[sfFlags] =
-
1049 isSellOffer ? lsfNFTokenSellOffers : lsfNFTokenBuyOffers;
-
1050 (*sle)[sfNFTokenID] = nftokenID;
-
1051 });
+
1007 if (view.rules().enabled(fixEnforceNFTokenTrustlineV2) && !amount.native())
+
1008 {
+
1009 // If this is a sell offer, check that the account is allowed to
+
1010 // receive IOUs. If this is a buy offer, we have to check that trustline
+
1011 // is authorized, even though we previosly checked it's balance via
+
1012 // accountHolds. This is due to a possibility of existence of
+
1013 // unauthorized trustlines with balance
+
1014 auto const res = nft::checkTrustlineAuthorized(
+
1015 view, acctID, j, amount.asset().get<Issue>());
+
1016 if (res != tesSUCCESS)
+
1017 return res;
+
1018 }
+
1019 return tesSUCCESS;
+
1020}
+
1021
+
1022TER
+
1023tokenOfferCreateApply(
+
1024 ApplyView& view,
+
1025 AccountID const& acctID,
+
1026 STAmount const& amount,
+
1027 std::optional<AccountID> const& dest,
+
1028 std::optional<std::uint32_t> const& expiration,
+
1029 SeqProxy seqProxy,
+
1030 uint256 const& nftokenID,
+
1031 XRPAmount const& priorBalance,
+
1032 beast::Journal j,
+
1033 std::uint32_t txFlags)
+
1034{
+
1035 Keylet const acctKeylet = keylet::account(acctID);
+
1036 if (auto const acct = view.read(acctKeylet);
+
1037 priorBalance < view.fees().accountReserve((*acct)[sfOwnerCount] + 1))
+
1038 return tecINSUFFICIENT_RESERVE;
+
1039
+
1040 auto const offerID = keylet::nftoffer(acctID, seqProxy.value());
+
1041
+
1042 // Create the offer:
+
1043 {
+
1044 // Token offers are always added to the owner's owner directory:
+
1045 auto const ownerNode = view.dirInsert(
+
1046 keylet::ownerDir(acctID), offerID, describeOwnerDir(acctID));
+
1047
+
1048 if (!ownerNode)
+
1049 return tecDIR_FULL;
+
1050
+
1051 bool const isSellOffer = txFlags & tfSellNFToken;
1052
-
1053 if (!offerNode)
-
1054 return tecDIR_FULL;
-
1055
-
1056 std::uint32_t sleFlags = 0;
-
1057
-
1058 if (isSellOffer)
-
1059 sleFlags |= lsfSellNFToken;
-
1060
-
1061 auto offer = std::make_shared<SLE>(offerID);
-
1062 (*offer)[sfOwner] = acctID;
-
1063 (*offer)[sfNFTokenID] = nftokenID;
-
1064 (*offer)[sfAmount] = amount;
-
1065 (*offer)[sfFlags] = sleFlags;
-
1066 (*offer)[sfOwnerNode] = *ownerNode;
-
1067 (*offer)[sfNFTokenOfferNode] = *offerNode;
-
1068
-
1069 if (expiration)
-
1070 (*offer)[sfExpiration] = *expiration;
-
1071
-
1072 if (dest)
-
1073 (*offer)[sfDestination] = *dest;
-
1074
-
1075 view.insert(offer);
-
1076 }
-
1077
-
1078 // Update owner count.
-
1079 adjustOwnerCount(view, view.peek(acctKeylet), 1, j);
+
1053 // Token offers are also added to the token's buy or sell offer
+
1054 // directory
+
1055 auto const offerNode = view.dirInsert(
+
1056 isSellOffer ? keylet::nft_sells(nftokenID)
+
1057 : keylet::nft_buys(nftokenID),
+
1058 offerID,
+
1059 [&nftokenID, isSellOffer](std::shared_ptr<SLE> const& sle) {
+
1060 (*sle)[sfFlags] =
+
1061 isSellOffer ? lsfNFTokenSellOffers : lsfNFTokenBuyOffers;
+
1062 (*sle)[sfNFTokenID] = nftokenID;
+
1063 });
+
1064
+
1065 if (!offerNode)
+
1066 return tecDIR_FULL;
+
1067
+
1068 std::uint32_t sleFlags = 0;
+
1069
+
1070 if (isSellOffer)
+
1071 sleFlags |= lsfSellNFToken;
+
1072
+
1073 auto offer = std::make_shared<SLE>(offerID);
+
1074 (*offer)[sfOwner] = acctID;
+
1075 (*offer)[sfNFTokenID] = nftokenID;
+
1076 (*offer)[sfAmount] = amount;
+
1077 (*offer)[sfFlags] = sleFlags;
+
1078 (*offer)[sfOwnerNode] = *ownerNode;
+
1079 (*offer)[sfNFTokenOfferNode] = *offerNode;
1080
-
1081 return tesSUCCESS;
-
1082}
+
1081 if (expiration)
+
1082 (*offer)[sfExpiration] = *expiration;
1083
-
1084} // namespace nft
-
1085} // namespace ripple
+
1084 if (dest)
+
1085 (*offer)[sfDestination] = *dest;
+
1086
+
1087 view.insert(offer);
+
1088 }
+
1089
+
1090 // Update owner count.
+
1091 adjustOwnerCount(view, view.peek(acctKeylet), 1, j);
+
1092
+
1093 return tesSUCCESS;
+
1094}
+
1095
+
1096TER
+
1097checkTrustlineAuthorized(
+
1098 ReadView const& view,
+
1099 AccountID const id,
+
1100 beast::Journal const j,
+
1101 Issue const& issue)
+
1102{
+
1103 // Only valid for custom currencies
+
1104 XRPL_ASSERT(
+
1105 !isXRP(issue.currency),
+
1106 "ripple::nft::checkTrustlineAuthorized : valid to check.");
+
1107
+
1108 if (view.rules().enabled(fixEnforceNFTokenTrustlineV2))
+
1109 {
+
1110 auto const issuerAccount = view.read(keylet::account(issue.account));
+
1111 if (!issuerAccount)
+
1112 {
+
1113 JLOG(j.debug()) << "ripple::nft::checkTrustlineAuthorized: can't "
+
1114 "receive IOUs from non-existent issuer: "
+
1115 << to_string(issue.account);
+
1116
+
1117 return tecNO_ISSUER;
+
1118 }
+
1119
+
1120 // An account can not create a trustline to itself, so no line can
+
1121 // exist to be authorized. Additionally, an issuer can always accept
+
1122 // its own issuance.
+
1123 if (issue.account == id)
+
1124 {
+
1125 return tesSUCCESS;
+
1126 }
+
1127
+
1128 if (issuerAccount->isFlag(lsfRequireAuth))
+
1129 {
+
1130 auto const trustLine =
+
1131 view.read(keylet::line(id, issue.account, issue.currency));
+
1132
+
1133 if (!trustLine)
+
1134 {
+
1135 return tecNO_LINE;
+
1136 }
+
1137
+
1138 // Entries have a canonical representation, determined by a
+
1139 // lexicographical "greater than" comparison employing strict
+
1140 // weak ordering. Determine which entry we need to access.
+
1141 if (!trustLine->isFlag(
+
1142 id > issue.account ? lsfLowAuth : lsfHighAuth))
+
1143 {
+
1144 return tecNO_AUTH;
+
1145 }
+
1146 }
+
1147 }
+
1148
+
1149 return tesSUCCESS;
+
1150}
+
1151
+
1152TER
+
1153checkTrustlineDeepFrozen(
+
1154 ReadView const& view,
+
1155 AccountID const id,
+
1156 beast::Journal const j,
+
1157 Issue const& issue)
+
1158{
+
1159 // Only valid for custom currencies
+
1160 XRPL_ASSERT(
+
1161 !isXRP(issue.currency),
+
1162 "ripple::nft::checkTrustlineDeepFrozen : valid to check.");
+
1163
+
1164 if (view.rules().enabled(featureDeepFreeze))
+
1165 {
+
1166 auto const issuerAccount = view.read(keylet::account(issue.account));
+
1167 if (!issuerAccount)
+
1168 {
+
1169 JLOG(j.debug()) << "ripple::nft::checkTrustlineDeepFrozen: can't "
+
1170 "receive IOUs from non-existent issuer: "
+
1171 << to_string(issue.account);
+
1172
+
1173 return tecNO_ISSUER;
+
1174 }
+
1175
+
1176 // An account can not create a trustline to itself, so no line can
+
1177 // exist to be frozen. Additionally, an issuer can always accept its
+
1178 // own issuance.
+
1179 if (issue.account == id)
+
1180 {
+
1181 return tesSUCCESS;
+
1182 }
+
1183
+
1184 auto const trustLine =
+
1185 view.read(keylet::line(id, issue.account, issue.currency));
+
1186
+
1187 if (!trustLine)
+
1188 {
+
1189 return tesSUCCESS;
+
1190 }
+
1191
+
1192 // There's no difference which side enacted deep freeze, accepting
+
1193 // tokens shouldn't be possible.
+
1194 bool const deepFrozen =
+
1195 (*trustLine)[sfFlags] & (lsfLowDeepFreeze | lsfHighDeepFreeze);
+
1196
+
1197 if (deepFrozen)
+
1198 {
+
1199 return tecFROZEN;
+
1200 }
+
1201 }
+
1202
+
1203 return tesSUCCESS;
+
1204}
+
1205
+
1206} // namespace nft
+
1207} // namespace ripple
T back_inserter(T... args)
A generic endpoint for log messages.
Definition: Journal.h:60
+
Stream debug() const
Definition: Journal.h:328
Writeable view to a ledger, for applying a transaction.
Definition: ApplyView.h:144
virtual void update(std::shared_ptr< SLE > const &sle)=0
Indicate changes to a peeked SLE.
bool dirRemove(Keylet const &directory, std::uint64_t page, uint256 const &key, bool keepRoot)
Remove an entry from a directory.
Definition: ApplyView.cpp:190
@@ -1167,10 +1290,14 @@ $(function() {
std::optional< std::uint64_t > dirInsert(Keylet const &directory, uint256 const &key, std::function< void(std::shared_ptr< SLE > const &)> const &describe)
Insert an entry to a directory.
Definition: ApplyView.h:318
virtual std::shared_ptr< SLE > peek(Keylet const &k)=0
Prepare to modify the SLE associated with key.
virtual void erase(std::shared_ptr< SLE > const &sle)=0
Remove a peeked SLE.
+
constexpr TIss const & get() const
const_iterator & next_page()
Definition: Dir.cpp:108
A class that simplifies iterating ledger directory pages.
Definition: Dir.h:42
const_iterator end() const
Definition: Dir.cpp:52
const_iterator begin() const
Definition: Dir.cpp:34
+
A currency issued by an account.
Definition: Issue.h:36
+
AccountID account
Definition: Issue.h:39
+
Currency currency
Definition: Issue.h:38
A view into a ledger.
Definition: ReadView.h:52
virtual std::shared_ptr< SLE const > read(Keylet const &k) const =0
Return the state item associated with a key.
virtual std::optional< key_type > succ(key_type const &key, std::optional< key_type > const &last=std::nullopt) const =0
Return the key of the next state item.
@@ -1180,6 +1307,7 @@ $(function() {
Rules controlling protocol behavior.
Definition: Rules.h:38
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
Definition: Rules.cpp:130
Definition: STAmount.h:50
+
Asset const & asset() const
Definition: STAmount.h:483
Currency const & getCurrency() const
Definition: STAmount.h:502
int signum() const noexcept
Definition: STAmount.h:514
bool negative() const noexcept
Definition: STAmount.h:471
@@ -1221,8 +1349,9 @@ $(function() {
static std::shared_ptr< SLE const > locatePage(ReadView const &view, AccountID const &owner, uint256 const &id)
TER removeToken(ApplyView &view, AccountID const &owner, uint256 const &nftokenID)
Remove the token from the owner's token directory.
NotTEC tokenOfferCreatePreflight(AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, std::uint16_t nftFlags, Rules const &rules, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preflight checks shared by NFTokenCreateOffer and NFTokenMint.
-
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
+
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
constexpr std::uint16_t const flagOnlyXRP
Definition: nft.h:54
+
TER checkTrustlineDeepFrozen(ReadView const &view, AccountID const id, beast::Journal const j, Issue const &issue)
TER tokenOfferCreatePreclaim(ReadView const &view, AccountID const &acctID, AccountID const &nftIssuer, STAmount const &amount, std::optional< AccountID > const &dest, std::uint16_t nftFlags, std::uint16_t xferFee, beast::Journal j, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preclaim checks shared by NFTokenCreateOffer and NFTokenMint.
bool repairNFTokenDirectoryLinks(ApplyView &view, AccountID const &owner)
Repairs the links in an NFTokenPage directory.
bool deleteTokenOffer(ApplyView &view, std::shared_ptr< SLE > const &offer)
Deletes the given token offer.
@@ -1235,6 +1364,7 @@ $(function() {
constexpr std::uint16_t const flagCreateTrustLines
Definition: nft.h:55
TER changeTokenURI(ApplyView &view, AccountID const &owner, uint256 const &nftokenID, std::optional< ripple::Slice > const &uri)
std::size_t removeTokenOffersWithLimit(ApplyView &view, Keylet const &directory, std::size_t maxDeletableOffers)
Delete up to a specified number of offers from the specified token offer directory.
+
TER checkTrustlineAuthorized(ReadView const &view, AccountID const id, beast::Journal const j, Issue const &issue)
static bool mergePages(ApplyView &view, std::shared_ptr< SLE > const &p1, std::shared_ptr< SLE > const &p2)
uint256 constexpr pageMask(std::string_view("0000000000000000000000000000000000000000ffffffffffffffffffffffff"))
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
@@ -1242,10 +1372,15 @@ $(function() {
@ fhZERO_IF_FROZEN
Definition: View.h:78
bool isXRP(AccountID const &c)
Definition: AccountID.h:91
constexpr std::uint32_t const tfSellNFToken
Definition: TxFlags.h:200
+
@ lsfHighDeepFreeze
+
@ lsfRequireAuth
@ lsfNFTokenBuyOffers
@ lsfNFTokenSellOffers
@ lsfDisallowIncomingNFTokenOffer
+
@ lsfLowDeepFreeze
+
@ lsfHighAuth
@ lsfSellNFToken
+
@ lsfLowAuth
std::size_t constexpr maxDeletableTokenOfferEntries
The maximum number of offers in an offer directory for NFT to be burnable.
Definition: Protocol.h:72
std::function< void(SLE::ref)> describeOwnerDir(AccountID const &account)
Definition: View.cpp:1036
std::size_t constexpr dirMaxTokensPerPage
The maximum number of items in an NFT page.
Definition: Protocol.h:63
@@ -1265,6 +1400,7 @@ $(function() {
@ tecNO_PERMISSION
Definition: TER.h:305
@ tecNO_LINE
Definition: TER.h:301
@ tecINSUFFICIENT_RESERVE
Definition: TER.h:307
+
@ tecNO_AUTH
Definition: TER.h:300
@ tesSUCCESS
Definition: TER.h:244
STAmount accountHolds(ReadView const &view, AccountID const &account, Currency const &currency, AccountID const &issuer, FreezeHandling zeroIfFrozen, beast::Journal j)
Definition: View.cpp:386
std::string to_string(base_uint< Bits, Tag > const &a)
Definition: base_uint.h:630
diff --git a/NFTokenUtils_8h_source.html b/NFTokenUtils_8h_source.html index 5ca85080b6..c30cd90a7e 100644 --- a/NFTokenUtils_8h_source.html +++ b/NFTokenUtils_8h_source.html @@ -207,13 +207,28 @@ $(function() {
152 beast::Journal j,
153 std::uint32_t txFlags = lsfSellNFToken);
154
-
155} // namespace nft
-
156
-
157} // namespace ripple
-
158
-
159#endif // RIPPLE_TX_IMPL_DETAILS_NFTOKENUTILS_H_INCLUDED
+
155TER
+
156checkTrustlineAuthorized(
+
157 ReadView const& view,
+
158 AccountID const id,
+
159 beast::Journal const j,
+
160 Issue const& issue);
+
161
+
162TER
+
163checkTrustlineDeepFrozen(
+
164 ReadView const& view,
+
165 AccountID const id,
+
166 beast::Journal const j,
+
167 Issue const& issue);
+
168
+
169} // namespace nft
+
170
+
171} // namespace ripple
+
172
+
173#endif // RIPPLE_TX_IMPL_DETAILS_NFTOKENUTILS_H_INCLUDED
A generic endpoint for log messages.
Definition: Journal.h:60
Writeable view to a ledger, for applying a transaction.
Definition: ApplyView.h:144
+
A currency issued by an account.
Definition: Issue.h:36
A view into a ledger.
Definition: ReadView.h:52
Rules controlling protocol behavior.
Definition: Rules.h:38
Definition: STAmount.h:50
@@ -225,7 +240,8 @@ $(function() {
TER removeToken(ApplyView &view, AccountID const &owner, uint256 const &nftokenID)
Remove the token from the owner's token directory.
NotTEC tokenOfferCreatePreflight(AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, std::uint16_t nftFlags, Rules const &rules, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preflight checks shared by NFTokenCreateOffer and NFTokenMint.
-
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
+
TER tokenOfferCreateApply(ApplyView &view, AccountID const &acctID, STAmount const &amount, std::optional< AccountID > const &dest, std::optional< std::uint32_t > const &expiration, SeqProxy seqProxy, uint256 const &nftokenID, XRPAmount const &priorBalance, beast::Journal j, std::uint32_t txFlags)
doApply implementation shared by NFTokenCreateOffer and NFTokenMint
+
TER checkTrustlineDeepFrozen(ReadView const &view, AccountID const id, beast::Journal const j, Issue const &issue)
TER tokenOfferCreatePreclaim(ReadView const &view, AccountID const &acctID, AccountID const &nftIssuer, STAmount const &amount, std::optional< AccountID > const &dest, std::uint16_t nftFlags, std::uint16_t xferFee, beast::Journal j, std::optional< AccountID > const &owner, std::uint32_t txFlags)
Preclaim checks shared by NFTokenCreateOffer and NFTokenMint.
bool repairNFTokenDirectoryLinks(ApplyView &view, AccountID const &owner)
Repairs the links in an NFTokenPage directory.
bool deleteTokenOffer(ApplyView &view, std::shared_ptr< SLE > const &offer)
Deletes the given token offer.
@@ -236,6 +252,7 @@ $(function() {
bool compareTokens(uint256 const &a, uint256 const &b)
TER changeTokenURI(ApplyView &view, AccountID const &owner, uint256 const &nftokenID, std::optional< ripple::Slice > const &uri)
std::size_t removeTokenOffersWithLimit(ApplyView &view, Keylet const &directory, std::size_t maxDeletableOffers)
Delete up to a specified number of offers from the specified token offer directory.
+
TER checkTrustlineAuthorized(ReadView const &view, AccountID const id, beast::Journal const j, Issue const &issue)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
base_uint< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition: AccountID.h:49
base_uint< 256 > uint256
Definition: base_uint.h:558
diff --git a/annotated.html b/annotated.html index 13a2232ac6..480dc2f2b2 100644 --- a/annotated.html +++ b/annotated.html @@ -1306,425 +1306,426 @@ $(function() {  CTransactionStatusTransaction with input flags and results to be applied in batches  CNFTokenAcceptOffer  CNFTokenAllFeatures_test - CNFTokenBaseUtil_test - CNFTokenBurn - CNFTokenBurnAllFeatures_test - CNFTokenBurnBaseUtil_test - CNFTokenBurnWOfixFungTokens_test - CNFTokenBurnWOFixNFTPageLinks_test - CNFTokenBurnWOFixTokenRemint_test - CNFTokenCancelOffer - CNFTokenCountTrackingInvariant: Validates counts of NFTokens after all transaction types - CNFTokenCreateOffer - CNFTokenDir_test - CNFTokenDisallowIncoming_test - CNFTokenMint - CNFTokenModify - CNFTokenWOfixV1_test - CNFTokenWOMintOffer_test - CNFTokenWOModify_test - CNFTokenWOTokenRemint_test - CNFTokenWOTokenReserve_test - CNoBadOffersInvariant: offers should be for non-negative amounts and must not be XRP to XRP - CNoDeepFreezeTrustLinesWithoutFreezeInvariant: Trust lines with deep freeze flag are not allowed if normal freeze flag is not set - CNodeFamily - CNodeObjectA simple object that the Ledger uses to store entries - CPrivateAccess - CNodeStoreSchedulerA NodeStore::Scheduler which uses the JobQueue - CNoRippleCheck_test - CNoRippleCheckLimits_test - CNoXRPTrustLinesInvariant: Trust lines using XRP are not allowed - CNoZeroEscrowInvariant: an escrow entry must take a value between 0 and INITIAL_XRP drops exclusive - CNumber - CGuard - Cunchecked - CNumber_test - CNumberParts - CNumberRoundModeGuard - CNumberSORAII class to set and restore the Number switchover - COfferStreamPresents and consumes the offers in an order book - COfferStream_test - Copen_ledger_tOpen ledger construction tag - COpenLedgerRepresents the open ledger - Copenssl_ripemd160_hasherMessage digest functions used in the codebase - Copenssl_sha256_hasherSHA-256 digest - Copenssl_sha512_hasherSHA-512 digest - COpenViewWritable ledger view that accumulates state and tx changes - CtxData - Ctxs_iter_impl - COptionaledFieldIndicate std::optional field semantics - COrderBookDB - COverlayManages the set of connected peers - CSetup - COverlayImpl - CChild - CStats - CTimer - CTrafficGauges - COwnerInfo_test - Cpacked_spinlockClasses to handle arrays of spinlocks packed into a single atomic integer: - CParsedPort - CparsedURL - Cpartitioned_unordered_map - Cconst_iterator - Citerator - CPathfinderCalculates payment paths - CPathRank - CPathFindTrustLine - CPathRequest - CPathRequests - CPayChanClaim - CPayChanCreate - CPayChanFund - CPayment - CPaymentSandboxA wrapper which makes credits unavailable to balances - CPeerRepresents a peer connection in the overlay - Cpeer_in_clusterSelect all peers (except optional excluded) that are in our cluster - Cpeer_in_setSelect all peers that are in the specified set - CPeerImp - CChargeWithContext - CMetrics - CPeerReservation - CPeerReservationTable - CPeers_test - CPeerSetSupports data retrieval by managing a set of peers - CPeerSetBuilder - CPeerSetBuilderImpl - CPeerSetImpl - CPendingSavesKeeps track of which ledgers haven't been fully saved - CPerfLog_test - CCur - CFixture - CPermission - CPermissionedDomainDelete - CPermissionedDomainSet - CPlainHTTPPeer - CPlainWSPeer - CPortConfiguration information for a Server listening port - CPreclaimContextState information when determining if a tx is likely to claim a fee - CPreclaimResultDescribes the results of the preclaim check - CPreflightContextState information when preflighting a tx - CPreflightResultDescribes the results of the preflight check - CProcessor - CProtocolVersion_test - CPublicKeyA public key - CPublicKey_test - CQuality_test - CQualityFunctionAverage quality of a path as a function of out: q(out) = m * out + b, where m = -1 / poolGets, b = poolPays / poolGets - CAMMTag - CCLOBLikeTag - CRangeSet_test - CRateRepresents a transfer rate - CRawViewInterface for ledger entry changes - CRCLCensorshipDetector - CTxIDSeq - CRCLConsensusManages the generic consensus algorithm for use by the RCL - CAdaptor - CRclConsensusLoggerCollects logging information - CRCLCxLedgerRepresents a ledger in RCLConsensus - CRCLCxPeerPosA peer's signed, proposed position for use in RCLConsensus - CRCLCxTxRepresents a transaction in RCLConsensus - CRCLTxSetRepresents a set of transactions in RCLConsensus - CMutableTxSet - CRCLValidatedLedgerWraps a ledger instance for use in generic Validations LedgerTrie - CMakeGenesis - CRCLValidationWrapper over STValidation for generic Validation code - CRCLValidationsAdaptorGeneric validations adaptor class for RCL - CReadViewA view into a ledger - Csles_type - Ctxs_type - CRelationalDatabase - CAccountTxArgs - CAccountTxMarker - CAccountTxOptions - CAccountTxPageOptions - CAccountTxResult - CCountMinMax - CResolver - CResolverAsio - CResolverAsioImpl - CWork - CRFC1751 - Cripesha_hasherReturns the RIPEMD-160 digest of the SHA256 hash of the message - CRippleLineCache - CAccountKey - CHash - CRPCCallImp - CRPCParser - CRPCSubSubscription object for JSON RPC - CRPCSubImp - CRPCTrustLine - CRulesRules controlling protocol behavior - CImpl - CSandboxDiscardable, editable view to a ledger - CSavedState - CsaveNumberRoundMode - Cscope_exit - Cscope_fail - Cscope_success - Cscope_unlockAutomatically unlocks and re-locks a unique_lock object - CSecretKeyA secret key - CSecretKey_test - CTestKeyData - CSectionHolds a collection of configuration values - CSeedSeeds are used to generate deterministic secret keys - CSeed_test - Csend_alwaysSends a message to all peers - Csend_if_not_predSends a message to non-matching peers - Csend_if_predSends a message to match peers - CSeqEnforcerEnforce validation increasing sequence requirement - CSeqProxyA type that represents either a sequence value or a ticket value - CSeqProxy_test - CSerialIter - CSerializer - CSerializer_test - CServerA multi-protocol server - CServerHandler - CServerHandlerCreator - CSetup - Cclient_t - CServerImpl - CSessionPersistent state information for a connection session - CSetAccount - CSetOraclePrice Oracle is a system that acts as a bridge between a blockchain network and the external world, providing off-chain price data to decentralized applications (dApps) on the blockchain - CSetRegularKey - CSetRegularKey_test - CSetSignerListSee the README.md for an overview of the SetSignerList transaction that this class implements - CSetTrust - CSFieldIdentifies fields - Cprivate_access_tag_t - CSHAMapA SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree - Cconst_iterator - CMissingNodes - CSHAMapAccountStateLeafNodeA leaf node for a state object - CSHAMapAddNode - CSHAMapHash - CSHAMapInnerNode - CSHAMapItem - CSHAMapLeafNode - CSHAMapMissingNode - CSHAMapNodeIDIdentifies a node inside a SHAMap - CSHAMapStoreClass to create database, launch online delete thread, and related SQLite database - CSHAMapStoreImp - CSavedStateDB - CSHAMapSyncFilter - CSHAMapTreeNode - CSHAMapTxLeafNodeA leaf node for a transaction - CSHAMapTxPlusMetaLeafNodeA leaf node for a transaction and its associated metadata - CSharedIntrusiveA shared intrusive pointer class that supports weak pointers - CSharedIntrusiveAdoptIncrementStrongTagWhen creating or adopting a raw pointer, controls whether the strong count is incremented or not - CSharedIntrusiveAdoptNoIncrementTagWhen creating or adopting a raw pointer, controls whether the strong count is incremented or not - CSharedWeakCachePointerA combination of a std::shared_ptr and a std::weak_pointer - CSharedWeakUnionA combination of a strong and a weak intrusive pointer stored in the space of a single pointer - Cshort_read_test - CBase - CChild - CClient - CConnection - CServer - CAcceptor - CConnection - CSignerEntries - CSignerEntry - CSimpleWriterDeprecated: Writer that serializes a HTTP/1 message - CSkipListAcquireManage the retrieval of a skip list in a ledger from the network - CSkipListData - CSlabAllocator - CSlabBlockA block of memory that is owned by a slab allocator - CSlabAllocatorSetA collection of slab allocators of various sizes for a given type - CSlabConfig - CSliceAn immutable linear range of bytes - CSociDB_test - CSOElementAn element in a SOTemplate - CSOTemplateDefines the fields and their attributes within a STObject - CSpanTipThe tip of a span of ledger ancestry - CspinlockA spinlock implemented on top of an atomic integer - CSQLiteDatabase - CSQLiteDatabaseImp - CSSLHTTPPeer - CSSLWSPeer - CSTAccount - CSTAccount_test - CSTAmount - Cunchecked - CSTAmount_test - CSTAmountSORAII class to set and restore the STAmount canonicalize switchover - CSTArray - CStaticCastTagSharedIntrusiveTag to create an intrusive pointer from another intrusive pointer by using a static cast - CSTBaseA type which can be exported to a well known binary format - CSTBitString - CSTBlob - CSTCurrency - CStepA step in a payment path - CSTExchangeConvert between serialized type U and C++ type T - CSTExchange< STBlob, Buffer > - CSTExchange< STBlob, PublicKey > - CSTExchange< STBlob, Slice > - CSTExchange< STInteger< U >, T > - CSTInteger - CSTIssue - CSTLedgerEntry - CSTNumberA serializable number - CSTNumber_test - CSTObject - CFieldErr - COptionalProxy - CProxy - CTransform - CValueProxy - CSTObject_test - CSTParsedJSONArrayHolds the serialized result of parsing an input JSON array - CSTParsedJSONObjectHolds the serialized result of parsing an input JSON object - CSTPath - CSTPathElement - CSTPathSet - CStrandContextContext needed to build Strand Steps and for error checking - CStrandResultResult of flow() execution of a single Strand - CStreambufWSMsg - CStringUtilities_test - CSTTx - CSTTx_test - CSTValidation - CSTValidation_test - CSTVector256 - CSTXChainBridge - Ctagged_integerA type-safe wrap around standard integral types - CTaggedCacheMap/cache combination - CKeyOnlyEntry - CStats - CValueEntry - CTaggedCache_test - CTaggedPointerTaggedPointer is a combination of a pointer and a mask stored in the lowest two bits - CRawAllocateTag - CTaker - CTaker_test - Ccross_attempt_offer - CTestTaker - CTER_test - CCheckComparable - CNotConvertible - CTERSubset - CTestSuite - CTicket_test - CTimeKeeperManages various times used by the server - CTimeoutCounterThis class is an "active" object - CQueueJobParameter - CTOffer - CTOfferBase - CTOfferBase< STAmount, STAmount > - CTOfferStreamBase - CStepCounter - CTrafficCountTrafficCount is used to count ingress and egress wire bytes and number of messages - CTrafficStats - CTransaction - CCurrentLedgerState - CLocator - CSubmitResult - CTransaction_test - CTransactionAcquire - CTransactionEntry_test - CTransactionFeeCheckInvariant: We should never charge a transaction a negative fee or a fee that is larger than what the transaction itself specifies - CTransactionHistory_test - CTransactionMaster - CTransactionStateSF - CTransactor - CTransfersNotFrozenInvariant: frozen trust line balance change is not allowed - CBalanceChange - CIssuerChanges - CTrustAndBalance_test - CTrustChangesChanges in trusted nodes after updating validator list - CTrustedVotesTrustedVotes records the most recent votes from trusted validators - CUpvotesAndTimeout - CTrustLineBaseWraps a trust line SLE for convenience - CTxArgs - CTxConsequencesClass describing the consequences to the account of applying a transaction if the transaction consumes the maximum XRP allowed - CTxFormatsManages the list of known transaction formats - CTxMeta - CCtorHelper - CTxQTransaction Queue - CFeeAndSeq - CFeeMetricsTrack and use the fee escalation metrics of the current open ledger - CSnapshotSnapshot of the externally relevant FeeMetrics fields at any given time - CMaybeTxRepresents a transaction in the queue which may be applied later to the open ledger - CMetricsStructure returned by TxQ::getMetrics, expressed in reference fee level units - COrderCandidatesUsed for sorting MaybeTx - CSetupStructure used to customize TxQ behavior - CTxDetailsStructure that describes a transaction in the queue waiting to be applied to the current open ledger - CTxQAccountUsed to represent an account to the queue, and stores the transactions queued for that account by SeqProxy - CTxResult - CTxsRawViewInterface for changing ledger entries with transactions - CTypedFieldA field with a type known at compile time - Ctypes_test - CUnexpected - Cunsigned_integer - CUptimeClockTracks program uptime to seconds precision - Cupdate_thread - CValidAMM - CValidationParmsTiming parameters to control validation staleness and expiration - CValidationsMaintains current and recent ledger validations - CKeepRange - CValidatorBlobInfoUsed to represent the information stored in the blobs_v2 Json array - CValidatorKeysValidator keys and manifest as set in configuration file - CKeys - CValidatorList - CMessageWithHash - CPublisherList - CPublisherListCollection - CPublisherListStatsDescribes the result of processing a Validator List (UNL), including some of the information from the list which can be used by the caller to know which list publisher is involved - CValidatorSite - CSite - CResource - CStatus - CValidatorToken - CValidClawbackInvariant: Token holder's trustline balance cannot be negative after Clawback - CValidMPTIssuance - CValidNewAccountRootInvariant: a new account root must be the consequence of a payment, must have the right starting sequence, and the payment may not create more than one new account root - CValidNFTokenPageInvariant: Validates several invariants for NFToken pages - CValidPermissionedDEX - CValidPermissionedDomainInvariants: Permissioned Domains must have some rules and AcceptedCredentials must have length between 1 and 10 inclusive - CSleStatus - CVault_test - CVaultClawback - CVaultCreate - CVaultDelete - CVaultDeposit - CVaultSet - CVaultWithdraw - CVersion_test - CWeakIntrusiveA weak intrusive pointer class for the SharedIntrusive pointer class - CWorkersWorkers is effectively a thread pool - CCallbackCalled to perform tasks as needed - CPausedTag - CWorker - CWorkers_test - CTestCallback - CWriter - CWSInfoSub - CWSMsg - CWSSession - CXChainAddAccountCreateAttestation - CXChainAddClaimAttestation - CXChainAttestationsBase - CXChainClaim - CXChainClaimAttestation - CMatchFields - CXChainClaimAttestations - CXChainCommit - CXChainCreateAccountAttestation - CMatchFields - CXChainCreateAccountAttestations - CXChainCreateAccountCommit - CXChainCreateBridge - CXChainCreateClaimID - CXRPAmount - CXRPAmount_test - CXRPBalanceChecksInvariant: An account XRP balance must be in XRP and take a value between 0 and INITIAL_XRP drops, inclusive - CXRPEndpointOfferCrossingStep - CXRPEndpointPaymentStep - CXRPEndpointStep - CXRPNotCreatedInvariant: A transaction must not create XRP and should only destroy the XRP fee - CZeroCopyInputStreamImplements ZeroCopyInputStream around a buffer sequence - CZeroCopyOutputStreamImplements ZeroCopyOutputStream around a Streambuf + CNFTokenAuth_test + CNFTokenBaseUtil_test + CNFTokenBurn + CNFTokenBurnAllFeatures_test + CNFTokenBurnBaseUtil_test + CNFTokenBurnWOfixFungTokens_test + CNFTokenBurnWOFixNFTPageLinks_test + CNFTokenBurnWOFixTokenRemint_test + CNFTokenCancelOffer + CNFTokenCountTrackingInvariant: Validates counts of NFTokens after all transaction types + CNFTokenCreateOffer + CNFTokenDir_test + CNFTokenDisallowIncoming_test + CNFTokenMint + CNFTokenModify + CNFTokenWOfixV1_test + CNFTokenWOMintOffer_test + CNFTokenWOModify_test + CNFTokenWOTokenRemint_test + CNFTokenWOTokenReserve_test + CNoBadOffersInvariant: offers should be for non-negative amounts and must not be XRP to XRP + CNoDeepFreezeTrustLinesWithoutFreezeInvariant: Trust lines with deep freeze flag are not allowed if normal freeze flag is not set + CNodeFamily + CNodeObjectA simple object that the Ledger uses to store entries + CPrivateAccess + CNodeStoreSchedulerA NodeStore::Scheduler which uses the JobQueue + CNoRippleCheck_test + CNoRippleCheckLimits_test + CNoXRPTrustLinesInvariant: Trust lines using XRP are not allowed + CNoZeroEscrowInvariant: an escrow entry must take a value between 0 and INITIAL_XRP drops exclusive + CNumber + CGuard + Cunchecked + CNumber_test + CNumberParts + CNumberRoundModeGuard + CNumberSORAII class to set and restore the Number switchover + COfferStreamPresents and consumes the offers in an order book + COfferStream_test + Copen_ledger_tOpen ledger construction tag + COpenLedgerRepresents the open ledger + Copenssl_ripemd160_hasherMessage digest functions used in the codebase + Copenssl_sha256_hasherSHA-256 digest + Copenssl_sha512_hasherSHA-512 digest + COpenViewWritable ledger view that accumulates state and tx changes + CtxData + Ctxs_iter_impl + COptionaledFieldIndicate std::optional field semantics + COrderBookDB + COverlayManages the set of connected peers + CSetup + COverlayImpl + CChild + CStats + CTimer + CTrafficGauges + COwnerInfo_test + Cpacked_spinlockClasses to handle arrays of spinlocks packed into a single atomic integer: + CParsedPort + CparsedURL + Cpartitioned_unordered_map + Cconst_iterator + Citerator + CPathfinderCalculates payment paths + CPathRank + CPathFindTrustLine + CPathRequest + CPathRequests + CPayChanClaim + CPayChanCreate + CPayChanFund + CPayment + CPaymentSandboxA wrapper which makes credits unavailable to balances + CPeerRepresents a peer connection in the overlay + Cpeer_in_clusterSelect all peers (except optional excluded) that are in our cluster + Cpeer_in_setSelect all peers that are in the specified set + CPeerImp + CChargeWithContext + CMetrics + CPeerReservation + CPeerReservationTable + CPeers_test + CPeerSetSupports data retrieval by managing a set of peers + CPeerSetBuilder + CPeerSetBuilderImpl + CPeerSetImpl + CPendingSavesKeeps track of which ledgers haven't been fully saved + CPerfLog_test + CCur + CFixture + CPermission + CPermissionedDomainDelete + CPermissionedDomainSet + CPlainHTTPPeer + CPlainWSPeer + CPortConfiguration information for a Server listening port + CPreclaimContextState information when determining if a tx is likely to claim a fee + CPreclaimResultDescribes the results of the preclaim check + CPreflightContextState information when preflighting a tx + CPreflightResultDescribes the results of the preflight check + CProcessor + CProtocolVersion_test + CPublicKeyA public key + CPublicKey_test + CQuality_test + CQualityFunctionAverage quality of a path as a function of out: q(out) = m * out + b, where m = -1 / poolGets, b = poolPays / poolGets + CAMMTag + CCLOBLikeTag + CRangeSet_test + CRateRepresents a transfer rate + CRawViewInterface for ledger entry changes + CRCLCensorshipDetector + CTxIDSeq + CRCLConsensusManages the generic consensus algorithm for use by the RCL + CAdaptor + CRclConsensusLoggerCollects logging information + CRCLCxLedgerRepresents a ledger in RCLConsensus + CRCLCxPeerPosA peer's signed, proposed position for use in RCLConsensus + CRCLCxTxRepresents a transaction in RCLConsensus + CRCLTxSetRepresents a set of transactions in RCLConsensus + CMutableTxSet + CRCLValidatedLedgerWraps a ledger instance for use in generic Validations LedgerTrie + CMakeGenesis + CRCLValidationWrapper over STValidation for generic Validation code + CRCLValidationsAdaptorGeneric validations adaptor class for RCL + CReadViewA view into a ledger + Csles_type + Ctxs_type + CRelationalDatabase + CAccountTxArgs + CAccountTxMarker + CAccountTxOptions + CAccountTxPageOptions + CAccountTxResult + CCountMinMax + CResolver + CResolverAsio + CResolverAsioImpl + CWork + CRFC1751 + Cripesha_hasherReturns the RIPEMD-160 digest of the SHA256 hash of the message + CRippleLineCache + CAccountKey + CHash + CRPCCallImp + CRPCParser + CRPCSubSubscription object for JSON RPC + CRPCSubImp + CRPCTrustLine + CRulesRules controlling protocol behavior + CImpl + CSandboxDiscardable, editable view to a ledger + CSavedState + CsaveNumberRoundMode + Cscope_exit + Cscope_fail + Cscope_success + Cscope_unlockAutomatically unlocks and re-locks a unique_lock object + CSecretKeyA secret key + CSecretKey_test + CTestKeyData + CSectionHolds a collection of configuration values + CSeedSeeds are used to generate deterministic secret keys + CSeed_test + Csend_alwaysSends a message to all peers + Csend_if_not_predSends a message to non-matching peers + Csend_if_predSends a message to match peers + CSeqEnforcerEnforce validation increasing sequence requirement + CSeqProxyA type that represents either a sequence value or a ticket value + CSeqProxy_test + CSerialIter + CSerializer + CSerializer_test + CServerA multi-protocol server + CServerHandler + CServerHandlerCreator + CSetup + Cclient_t + CServerImpl + CSessionPersistent state information for a connection session + CSetAccount + CSetOraclePrice Oracle is a system that acts as a bridge between a blockchain network and the external world, providing off-chain price data to decentralized applications (dApps) on the blockchain + CSetRegularKey + CSetRegularKey_test + CSetSignerListSee the README.md for an overview of the SetSignerList transaction that this class implements + CSetTrust + CSFieldIdentifies fields + Cprivate_access_tag_t + CSHAMapA SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree + Cconst_iterator + CMissingNodes + CSHAMapAccountStateLeafNodeA leaf node for a state object + CSHAMapAddNode + CSHAMapHash + CSHAMapInnerNode + CSHAMapItem + CSHAMapLeafNode + CSHAMapMissingNode + CSHAMapNodeIDIdentifies a node inside a SHAMap + CSHAMapStoreClass to create database, launch online delete thread, and related SQLite database + CSHAMapStoreImp + CSavedStateDB + CSHAMapSyncFilter + CSHAMapTreeNode + CSHAMapTxLeafNodeA leaf node for a transaction + CSHAMapTxPlusMetaLeafNodeA leaf node for a transaction and its associated metadata + CSharedIntrusiveA shared intrusive pointer class that supports weak pointers + CSharedIntrusiveAdoptIncrementStrongTagWhen creating or adopting a raw pointer, controls whether the strong count is incremented or not + CSharedIntrusiveAdoptNoIncrementTagWhen creating or adopting a raw pointer, controls whether the strong count is incremented or not + CSharedWeakCachePointerA combination of a std::shared_ptr and a std::weak_pointer + CSharedWeakUnionA combination of a strong and a weak intrusive pointer stored in the space of a single pointer + Cshort_read_test + CBase + CChild + CClient + CConnection + CServer + CAcceptor + CConnection + CSignerEntries + CSignerEntry + CSimpleWriterDeprecated: Writer that serializes a HTTP/1 message + CSkipListAcquireManage the retrieval of a skip list in a ledger from the network + CSkipListData + CSlabAllocator + CSlabBlockA block of memory that is owned by a slab allocator + CSlabAllocatorSetA collection of slab allocators of various sizes for a given type + CSlabConfig + CSliceAn immutable linear range of bytes + CSociDB_test + CSOElementAn element in a SOTemplate + CSOTemplateDefines the fields and their attributes within a STObject + CSpanTipThe tip of a span of ledger ancestry + CspinlockA spinlock implemented on top of an atomic integer + CSQLiteDatabase + CSQLiteDatabaseImp + CSSLHTTPPeer + CSSLWSPeer + CSTAccount + CSTAccount_test + CSTAmount + Cunchecked + CSTAmount_test + CSTAmountSORAII class to set and restore the STAmount canonicalize switchover + CSTArray + CStaticCastTagSharedIntrusiveTag to create an intrusive pointer from another intrusive pointer by using a static cast + CSTBaseA type which can be exported to a well known binary format + CSTBitString + CSTBlob + CSTCurrency + CStepA step in a payment path + CSTExchangeConvert between serialized type U and C++ type T + CSTExchange< STBlob, Buffer > + CSTExchange< STBlob, PublicKey > + CSTExchange< STBlob, Slice > + CSTExchange< STInteger< U >, T > + CSTInteger + CSTIssue + CSTLedgerEntry + CSTNumberA serializable number + CSTNumber_test + CSTObject + CFieldErr + COptionalProxy + CProxy + CTransform + CValueProxy + CSTObject_test + CSTParsedJSONArrayHolds the serialized result of parsing an input JSON array + CSTParsedJSONObjectHolds the serialized result of parsing an input JSON object + CSTPath + CSTPathElement + CSTPathSet + CStrandContextContext needed to build Strand Steps and for error checking + CStrandResultResult of flow() execution of a single Strand + CStreambufWSMsg + CStringUtilities_test + CSTTx + CSTTx_test + CSTValidation + CSTValidation_test + CSTVector256 + CSTXChainBridge + Ctagged_integerA type-safe wrap around standard integral types + CTaggedCacheMap/cache combination + CKeyOnlyEntry + CStats + CValueEntry + CTaggedCache_test + CTaggedPointerTaggedPointer is a combination of a pointer and a mask stored in the lowest two bits + CRawAllocateTag + CTaker + CTaker_test + Ccross_attempt_offer + CTestTaker + CTER_test + CCheckComparable + CNotConvertible + CTERSubset + CTestSuite + CTicket_test + CTimeKeeperManages various times used by the server + CTimeoutCounterThis class is an "active" object + CQueueJobParameter + CTOffer + CTOfferBase + CTOfferBase< STAmount, STAmount > + CTOfferStreamBase + CStepCounter + CTrafficCountTrafficCount is used to count ingress and egress wire bytes and number of messages + CTrafficStats + CTransaction + CCurrentLedgerState + CLocator + CSubmitResult + CTransaction_test + CTransactionAcquire + CTransactionEntry_test + CTransactionFeeCheckInvariant: We should never charge a transaction a negative fee or a fee that is larger than what the transaction itself specifies + CTransactionHistory_test + CTransactionMaster + CTransactionStateSF + CTransactor + CTransfersNotFrozenInvariant: frozen trust line balance change is not allowed + CBalanceChange + CIssuerChanges + CTrustAndBalance_test + CTrustChangesChanges in trusted nodes after updating validator list + CTrustedVotesTrustedVotes records the most recent votes from trusted validators + CUpvotesAndTimeout + CTrustLineBaseWraps a trust line SLE for convenience + CTxArgs + CTxConsequencesClass describing the consequences to the account of applying a transaction if the transaction consumes the maximum XRP allowed + CTxFormatsManages the list of known transaction formats + CTxMeta + CCtorHelper + CTxQTransaction Queue + CFeeAndSeq + CFeeMetricsTrack and use the fee escalation metrics of the current open ledger + CSnapshotSnapshot of the externally relevant FeeMetrics fields at any given time + CMaybeTxRepresents a transaction in the queue which may be applied later to the open ledger + CMetricsStructure returned by TxQ::getMetrics, expressed in reference fee level units + COrderCandidatesUsed for sorting MaybeTx + CSetupStructure used to customize TxQ behavior + CTxDetailsStructure that describes a transaction in the queue waiting to be applied to the current open ledger + CTxQAccountUsed to represent an account to the queue, and stores the transactions queued for that account by SeqProxy + CTxResult + CTxsRawViewInterface for changing ledger entries with transactions + CTypedFieldA field with a type known at compile time + Ctypes_test + CUnexpected + Cunsigned_integer + CUptimeClockTracks program uptime to seconds precision + Cupdate_thread + CValidAMM + CValidationParmsTiming parameters to control validation staleness and expiration + CValidationsMaintains current and recent ledger validations + CKeepRange + CValidatorBlobInfoUsed to represent the information stored in the blobs_v2 Json array + CValidatorKeysValidator keys and manifest as set in configuration file + CKeys + CValidatorList + CMessageWithHash + CPublisherList + CPublisherListCollection + CPublisherListStatsDescribes the result of processing a Validator List (UNL), including some of the information from the list which can be used by the caller to know which list publisher is involved + CValidatorSite + CSite + CResource + CStatus + CValidatorToken + CValidClawbackInvariant: Token holder's trustline balance cannot be negative after Clawback + CValidMPTIssuance + CValidNewAccountRootInvariant: a new account root must be the consequence of a payment, must have the right starting sequence, and the payment may not create more than one new account root + CValidNFTokenPageInvariant: Validates several invariants for NFToken pages + CValidPermissionedDEX + CValidPermissionedDomainInvariants: Permissioned Domains must have some rules and AcceptedCredentials must have length between 1 and 10 inclusive + CSleStatus + CVault_test + CVaultClawback + CVaultCreate + CVaultDelete + CVaultDeposit + CVaultSet + CVaultWithdraw + CVersion_test + CWeakIntrusiveA weak intrusive pointer class for the SharedIntrusive pointer class + CWorkersWorkers is effectively a thread pool + CCallbackCalled to perform tasks as needed + CPausedTag + CWorker + CWorkers_test + CTestCallback + CWriter + CWSInfoSub + CWSMsg + CWSSession + CXChainAddAccountCreateAttestation + CXChainAddClaimAttestation + CXChainAttestationsBase + CXChainClaim + CXChainClaimAttestation + CMatchFields + CXChainClaimAttestations + CXChainCommit + CXChainCreateAccountAttestation + CMatchFields + CXChainCreateAccountAttestations + CXChainCreateAccountCommit + CXChainCreateBridge + CXChainCreateClaimID + CXRPAmount + CXRPAmount_test + CXRPBalanceChecksInvariant: An account XRP balance must be in XRP and take a value between 0 and INITIAL_XRP drops, inclusive + CXRPEndpointOfferCrossingStep + CXRPEndpointPaymentStep + CXRPEndpointStep + CXRPNotCreatedInvariant: A transaction must not create XRP and should only destroy the XRP fee + CZeroCopyInputStreamImplements ZeroCopyInputStream around a buffer sequence + CZeroCopyOutputStreamImplements ZeroCopyOutputStream around a Streambuf  NstdSTL namespace  Chash< ripple::AccountID >  Chash< ripple::Book > diff --git a/classbeast_1_1aged__associative__container__test__base.html b/classbeast_1_1aged__associative__container__test__base.html index 2e4a1183a8..4c002bf916 100644 --- a/classbeast_1_1aged__associative__container__test__base.html +++ b/classbeast_1_1aged__associative__container__test__base.html @@ -2141,7 +2141,7 @@ template<class Condition >

Runs the suite.

-

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWOFlowCross_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLCensorshipDetector_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::Taker_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::base64_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::contract_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::test::feeunits_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::test::mulDiv_test, ripple::Number_test, ripple::PerfLog_test, ripple::RangeSet_test, ripple::test::scope_test, ripple::test::Slice_test, ripple::StringUtilities_test, ripple::test::tagged_integer_test, ripple::TaggedCache_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::CryptoPRNG_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::Invariants_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::types_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

+

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenAuth_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWOFlowCross_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLCensorshipDetector_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::Taker_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::base64_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::contract_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::test::feeunits_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::test::mulDiv_test, ripple::Number_test, ripple::PerfLog_test, ripple::RangeSet_test, ripple::test::scope_test, ripple::test::Slice_test, ripple::StringUtilities_test, ripple::test::tagged_integer_test, ripple::TaggedCache_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::CryptoPRNG_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::Invariants_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::types_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

diff --git a/classbeast_1_1unit__test_1_1suite.html b/classbeast_1_1unit__test_1_1suite.html index ece2f12504..6dd43173fd 100644 --- a/classbeast_1_1unit__test_1_1suite.html +++ b/classbeast_1_1unit__test_1_1suite.html @@ -92,7 +92,7 @@ $(function() {

#include <suite.h>

-

Inherited by beast::IP::IPEndpoint_test, beast::Journal_test, beast::LexicalCast_test, beast::PropertyStream_test, beast::SemanticVersion_test, beast::Zero_test, beast::abstract_clock_test, beast::aged_associative_container_test_base, beast::basic_seconds_clock_test, beast::unit_test::print_test, io_latency_probe_test, ripple::AccountCurrencies_test, ripple::AccountSet_test, ripple::AccountTxPaging_test, ripple::AmendmentBlocked_test, ripple::AmendmentTable_test, ripple::Apply_test, ripple::BuildInfo_test, ripple::Check_test, ripple::Clawback_test, ripple::Connect_test, ripple::CryptoPRNG_test, ripple::Discrepancy_test, ripple::Feature_test, ripple::FileUtilities_test, ripple::FixNFTokenPageLinks_test, ripple::Freeze_test, ripple::GetCounts_test, ripple::Hooks_test, ripple::IOUAmount_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::InnerObjectFormatsSerializer_test, ripple::Invariants_test, ripple::Issue_test, ripple::KeyCache_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::LedgerHeader_test, ripple::LedgerLoad_test, ripple::LoadFeeTrack_test, ripple::Memo_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenDir_test, ripple::NoRippleCheckLimits_test, ripple::NoRippleCheck_test, ripple::NodeStore::TestBase, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::Number_test, ripple::OfferStream_test, ripple::OwnerInfo_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::Peers_test, ripple::PerfLog_test, ripple::ProtocolVersion_test, ripple::PublicKey_test, ripple::Quality_test, ripple::RPC::AccountLines_test, ripple::RPC::JSONRPC_test, ripple::RPC::LedgerRequestRPC_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::RangeSet_test, ripple::Resource::ResourceManager_test, ripple::STAccount_test, ripple::STAmount_test, ripple::STNumber_test, ripple::STObject_test, ripple::STTx_test, ripple::STValidation_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::SetRegularKey_test, ripple::StringUtilities_test, ripple::TER_test, ripple::TaggedCache_test, ripple::Taker_test, ripple::TestSuite, ripple::Ticket_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::Transaction_test, ripple::TrustAndBalance_test, ripple::Vault_test, ripple::Version_test, ripple::Workers_test, ripple::XRPAmount_test, ripple::base64_test, ripple::contract_test, ripple::cryptoconditions::PreimageSha256_test, ripple::hardened_hash_test, ripple::json_value_test, ripple::short_read_test, ripple::test::AMMCalc_test, ripple::test::AccountDelete_test, ripple::test::AccountInfo_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::test::AccountTx_test, ripple::test::ApiVersion_test, ripple::test::BasicNetwork_test, ripple::test::Batch_test, ripple::test::BookChanges_test, ripple::test::BookDirs_test, ripple::test::Book_test, ripple::test::Buffer_test, ripple::test::ByzantineFailureSim_test, ripple::test::ClosureCounter_test, ripple::test::Consensus_test, ripple::test::Coroutine_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::CurrentThreadName_test, ripple::test::DID_test, ripple::test::DNS_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuth_test, ripple::test::DepositAuthorized_test, ripple::test::DepositPreauth_test, ripple::test::DetectCrash_test, ripple::test::Digraph_test, ripple::test::Directory_test, ripple::test::DistributedValidators_test, ripple::test::Env_test, ripple::test::Escrow_test, ripple::test::Expected_test, ripple::test::FeeVote_test, ripple::test::FindOversizeCross_test, ripple::test::Flow_test, ripple::test::GatewayBalances_test, ripple::test::GetAmendments_test, ripple::test::Handler_test, ripple::test::HashRouter_test, ripple::test::Histogram_test, ripple::test::JobQueue_test, ripple::test::LedgerEntry_XChain_test, ripple::test::LedgerEntry_test, ripple::test::LedgerHistory_test, ripple::test::LedgerMaster_test, ripple::test::LedgerRPC_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayerLong_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::MPToken_test, ripple::test::ManifestRPC_test, ripple::test::Manifest_test, ripple::test::MultiApiJson_test, ripple::test::MultiSign_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNL_test, ripple::test::NetworkID_test, ripple::test::NoRipple_test, ripple::test::OfferBaseUtil_test, ripple::test::OversizeMeta_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PlumpBook_test, ripple::test::PseudoTx_test, ripple::test::RCLCensorshipDetector_test, ripple::test::RCLValidations_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::SHAMapStore_test, ripple::test::STIssue_test, ripple::test::ScaleFreeSim_test, ripple::test::Scheduler_test, ripple::test::ServerInfo_test, ripple::test::ServerStatus_test, ripple::test::Server_test, ripple::test::SetAuth_test, ripple::test::SetTrust_test, ripple::test::Simulate_test, ripple::test::SkipList_test, ripple::test::Slice_test, ripple::test::Subscribe_test, ripple::test::TheoreticalQuality_test, ripple::test::Transaction_ordering_test, ripple::test::TxQPosNegFlows_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorRPC_test, ripple::test::ValidatorSite_test, ripple::test::View_test, ripple::test::WSClient_test, ripple::test::XChainSim_test, ripple::test::XChain_test, ripple::test::base_uint_test, ripple::test::compression_test, ripple::test::csf::Validations_test, ripple::test::feeunits_test, ripple::test::handshake_test, ripple::test::join_test, ripple::test::jtx::AMMTestBase, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::mulDiv_test, ripple::test::reduce_relay_test, ripple::test::scope_test, ripple::test::tagged_integer_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::tests::FetchPack_test, ripple::tests::IntrusiveShared_test, ripple::tests::SHAMapPathProof_test, ripple::tests::SHAMapSync_test, ripple::tests::SHAMap_test, and ripple::types_test.

+

Inherited by beast::IP::IPEndpoint_test, beast::Journal_test, beast::LexicalCast_test, beast::PropertyStream_test, beast::SemanticVersion_test, beast::Zero_test, beast::abstract_clock_test, beast::aged_associative_container_test_base, beast::basic_seconds_clock_test, beast::unit_test::print_test, io_latency_probe_test, ripple::AccountCurrencies_test, ripple::AccountSet_test, ripple::AccountTxPaging_test, ripple::AmendmentBlocked_test, ripple::AmendmentTable_test, ripple::Apply_test, ripple::BuildInfo_test, ripple::Check_test, ripple::Clawback_test, ripple::Connect_test, ripple::CryptoPRNG_test, ripple::Discrepancy_test, ripple::Feature_test, ripple::FileUtilities_test, ripple::FixNFTokenPageLinks_test, ripple::Freeze_test, ripple::GetCounts_test, ripple::Hooks_test, ripple::IOUAmount_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::InnerObjectFormatsSerializer_test, ripple::Invariants_test, ripple::Issue_test, ripple::KeyCache_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::LedgerHeader_test, ripple::LedgerLoad_test, ripple::LoadFeeTrack_test, ripple::Memo_test, ripple::NFTokenAuth_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenDir_test, ripple::NoRippleCheckLimits_test, ripple::NoRippleCheck_test, ripple::NodeStore::TestBase, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::Number_test, ripple::OfferStream_test, ripple::OwnerInfo_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::Peers_test, ripple::PerfLog_test, ripple::ProtocolVersion_test, ripple::PublicKey_test, ripple::Quality_test, ripple::RPC::AccountLines_test, ripple::RPC::JSONRPC_test, ripple::RPC::LedgerRequestRPC_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::RangeSet_test, ripple::Resource::ResourceManager_test, ripple::STAccount_test, ripple::STAmount_test, ripple::STNumber_test, ripple::STObject_test, ripple::STTx_test, ripple::STValidation_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::SetRegularKey_test, ripple::StringUtilities_test, ripple::TER_test, ripple::TaggedCache_test, ripple::Taker_test, ripple::TestSuite, ripple::Ticket_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::Transaction_test, ripple::TrustAndBalance_test, ripple::Vault_test, ripple::Version_test, ripple::Workers_test, ripple::XRPAmount_test, ripple::base64_test, ripple::contract_test, ripple::cryptoconditions::PreimageSha256_test, ripple::hardened_hash_test, ripple::json_value_test, ripple::short_read_test, ripple::test::AMMCalc_test, ripple::test::AccountDelete_test, ripple::test::AccountInfo_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::test::AccountTx_test, ripple::test::ApiVersion_test, ripple::test::BasicNetwork_test, ripple::test::Batch_test, ripple::test::BookChanges_test, ripple::test::BookDirs_test, ripple::test::Book_test, ripple::test::Buffer_test, ripple::test::ByzantineFailureSim_test, ripple::test::ClosureCounter_test, ripple::test::Consensus_test, ripple::test::Coroutine_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::CurrentThreadName_test, ripple::test::DID_test, ripple::test::DNS_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuth_test, ripple::test::DepositAuthorized_test, ripple::test::DepositPreauth_test, ripple::test::DetectCrash_test, ripple::test::Digraph_test, ripple::test::Directory_test, ripple::test::DistributedValidators_test, ripple::test::Env_test, ripple::test::Escrow_test, ripple::test::Expected_test, ripple::test::FeeVote_test, ripple::test::FindOversizeCross_test, ripple::test::Flow_test, ripple::test::GatewayBalances_test, ripple::test::GetAmendments_test, ripple::test::Handler_test, ripple::test::HashRouter_test, ripple::test::Histogram_test, ripple::test::JobQueue_test, ripple::test::LedgerEntry_XChain_test, ripple::test::LedgerEntry_test, ripple::test::LedgerHistory_test, ripple::test::LedgerMaster_test, ripple::test::LedgerRPC_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayerLong_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::MPToken_test, ripple::test::ManifestRPC_test, ripple::test::Manifest_test, ripple::test::MultiApiJson_test, ripple::test::MultiSign_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNL_test, ripple::test::NetworkID_test, ripple::test::NoRipple_test, ripple::test::OfferBaseUtil_test, ripple::test::OversizeMeta_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PlumpBook_test, ripple::test::PseudoTx_test, ripple::test::RCLCensorshipDetector_test, ripple::test::RCLValidations_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::SHAMapStore_test, ripple::test::STIssue_test, ripple::test::ScaleFreeSim_test, ripple::test::Scheduler_test, ripple::test::ServerInfo_test, ripple::test::ServerStatus_test, ripple::test::Server_test, ripple::test::SetAuth_test, ripple::test::SetTrust_test, ripple::test::Simulate_test, ripple::test::SkipList_test, ripple::test::Slice_test, ripple::test::Subscribe_test, ripple::test::TheoreticalQuality_test, ripple::test::Transaction_ordering_test, ripple::test::TxQPosNegFlows_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorRPC_test, ripple::test::ValidatorSite_test, ripple::test::View_test, ripple::test::WSClient_test, ripple::test::XChainSim_test, ripple::test::XChain_test, ripple::test::base_uint_test, ripple::test::compression_test, ripple::test::csf::Validations_test, ripple::test::feeunits_test, ripple::test::handshake_test, ripple::test::join_test, ripple::test::jtx::AMMTestBase, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::mulDiv_test, ripple::test::reduce_relay_test, ripple::test::scope_test, ripple::test::tagged_integer_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::tests::FetchPack_test, ripple::tests::IntrusiveShared_test, ripple::tests::SHAMapPathProof_test, ripple::tests::SHAMapSync_test, ripple::tests::SHAMap_test, and ripple::types_test.

Collaboration diagram for beast::unit_test::suite:
@@ -930,7 +930,7 @@ template<class Condition >

Runs the suite.

-

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWOFlowCross_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLCensorshipDetector_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::Taker_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::base64_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::contract_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::test::feeunits_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::test::mulDiv_test, ripple::Number_test, ripple::PerfLog_test, ripple::RangeSet_test, ripple::test::scope_test, ripple::test::Slice_test, ripple::StringUtilities_test, ripple::test::tagged_integer_test, ripple::TaggedCache_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::CryptoPRNG_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::Invariants_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::types_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

+

Implemented in ripple::test::AccountDelete_test, ripple::AccountTxPaging_test, ripple::AmendmentTable_test, ripple::test::AMM_test, ripple::test::AMMCalc_test, ripple::test::AMMClawback_test, ripple::test::AMMExtended_test, ripple::test::Batch_test, ripple::Check_test, ripple::Clawback_test, ripple::test::Credentials_test, ripple::test::CrossingLimits_test, ripple::test::Delegate_test, ripple::test::DeliverMin_test, ripple::test::DepositAuth_test, ripple::test::DepositPreauth_test, ripple::test::DID_test, ripple::Discrepancy_test, ripple::test::DNS_test, ripple::test::Escrow_test, ripple::test::FeeVote_test, ripple::FixNFTokenPageLinks_test, ripple::test::Flow_test, ripple::test::Flow_manual_test, ripple::Freeze_test, ripple::test::HashRouter_test, ripple::test::LedgerHistory_test, ripple::LedgerLoad_test, ripple::test::LedgerMaster_test, ripple::test::LedgerReplay_test, ripple::test::LedgerReplayer_test, ripple::test::LedgerReplayerTimeout_test, ripple::test::LedgerReplayerLong_test, ripple::LoadFeeTrack_test, ripple::test::LPTokenTransfer_test, ripple::test::Manifest_test, ripple::test::MPToken_test, ripple::test::MultiSign_test, ripple::test::NetworkID_test, ripple::NFTokenBaseUtil_test, ripple::NFTokenDisallowIncoming_test, ripple::NFTokenWOfixV1_test, ripple::NFTokenWOTokenRemint_test, ripple::NFTokenWOTokenReserve_test, ripple::NFTokenWOMintOffer_test, ripple::NFTokenWOModify_test, ripple::NFTokenAllFeatures_test, ripple::NFTokenAuth_test, ripple::NFTokenBurnBaseUtil_test, ripple::NFTokenBurnWOfixFungTokens_test, ripple::NFTokenBurnWOFixTokenRemint_test, ripple::NFTokenBurnWOFixNFTPageLinks_test, ripple::NFTokenBurnAllFeatures_test, ripple::NFTokenDir_test, ripple::test::OfferBaseUtil_test, ripple::test::OfferWOFlowCross_test, ripple::test::OfferWTakerDryOffer_test, ripple::test::OfferWOSmallQOffers_test, ripple::test::OfferWOFillOrKill_test, ripple::test::OfferWOPermDEX_test, ripple::test::OfferAllFeatures_test, ripple::test::Offer_manual_test, ripple::OfferStream_test, ripple::test::jtx::oracle::Oracle_test, ripple::test::PlumpBook_test, ripple::test::ThinBook_test, ripple::test::OversizeMeta_test, ripple::test::FindOversizeCross_test, ripple::test::Path_test, ripple::test::PayChan_test, ripple::test::PayStrand_test, ripple::test::PermissionedDEX_test, ripple::test::PermissionedDomains_test, ripple::test::PseudoTx_test, ripple::test::RCLCensorshipDetector_test, ripple::test::RCLValidations_test, ripple::test::ReducedOffer_test, ripple::test::Regression_test, ripple::test::SetAuth_test, ripple::SetRegularKey_test, ripple::test::SetTrust_test, ripple::test::SHAMapStore_test, ripple::Taker_test, ripple::test::TheoreticalQuality_test, ripple::Ticket_test, ripple::test::Transaction_ordering_test, ripple::TrustAndBalance_test, ripple::Apply_test, ripple::test::TxQPosNegFlows_test, ripple::test::TxQMetaInfo_test, ripple::test::ValidatorKeys_test, ripple::test::ValidatorList_test, ripple::test::ValidatorSite_test, ripple::Vault_test, ripple::test::XChain_test, ripple::test::XChainSim_test, ripple::base64_test, ripple::test::base_uint_test, ripple::test::Buffer_test, ripple::contract_test, ripple::test::DetectCrash_test, ripple::test::Expected_test, ripple::test::feeunits_test, ripple::FileUtilities_test, ripple::hardened_hash_test, ripple::tests::IntrusiveShared_test, ripple::IOUAmount_test, ripple::test::join_test, ripple::KeyCache_test, ripple::test::mulDiv_test, ripple::Number_test, ripple::PerfLog_test, ripple::RangeSet_test, ripple::test::scope_test, ripple::test::Slice_test, ripple::StringUtilities_test, ripple::test::tagged_integer_test, ripple::TaggedCache_test, ripple::XRPAmount_test, beast::aged_set_test, beast::aged_map_test, beast::aged_multiset_test, beast::aged_multimap_test, beast::aged_unordered_set_test, beast::aged_unordered_map_test, beast::aged_unordered_multiset_test, beast::aged_unordered_multimap_test, beast::abstract_clock_test, beast::basic_seconds_clock_test, ripple::test::CurrentThreadName_test, io_latency_probe_test, beast::Journal_test, beast::PropertyStream_test, beast::Zero_test, beast::unit_test::print_test, beast::IP::IPEndpoint_test, beast::LexicalCast_test, beast::SemanticVersion_test, ripple::cryptoconditions::PreimageSha256_test, ripple::test::ByzantineFailureSim_test, ripple::test::Consensus_test, ripple::test::DistributedValidators_test, ripple::test::LedgerTiming_test, ripple::test::LedgerTrie_test, ripple::test::NegativeUNL_test, ripple::test::NegativeUNLNoAmendment_test, ripple::test::NegativeUNLVoteInternal_test, ripple::test::NegativeUNLVoteScoreTable_test, ripple::test::NegativeUNLVoteGoodScore_test, ripple::test::NegativeUNLVoteOffline_test, ripple::test::NegativeUNLVoteMaxListed_test, ripple::test::NegativeUNLVoteRetiredValidator_test, ripple::test::NegativeUNLVoteNewValidator_test, ripple::test::NegativeUNLVoteFilterValidations_test, ripple::test::ScaleFreeSim_test, ripple::test::csf::Validations_test, ripple::test::ClosureCounter_test, ripple::Config_test, ripple::test::Coroutine_test, ripple::CryptoPRNG_test, ripple::test::JobQueue_test, ripple::SociDB_test, ripple::Workers_test, ripple::test::BasicNetwork_test, ripple::test::Digraph_test, ripple::test::Histogram_test, ripple::test::Scheduler_test, ripple::json_value_test, Json::JsonObject_test, Json::Output_test, Json::JsonWriter_test, ripple::test::Env_test, ripple::test::WSClient_test, ripple::test::BookDirs_test, ripple::test::Directory_test, ripple::Invariants_test, ripple::test::PaymentSandbox_test, ripple::test::PendingSaves_test, ripple::test::SkipList_test, ripple::test::View_test, ripple::test::GetAmendments_test, ripple::NodeStore::Backend_test, ripple::NodeStore::NodeStoreBasic_test, ripple::NodeStore::Database_test, ripple::NodeStore::Timing_test, ripple::NodeStore::tests::varint_test, ripple::tests::cluster_test, ripple::test::compression_test, ripple::test::handshake_test, ripple::ProtocolVersion_test, ripple::test::reduce_relay_test, ripple::test::reduce_relay_simulate_test, ripple::short_read_test, ripple::test::traffic_count_test, ripple::test::tx_reduce_relay_test, ripple::PeerFinder::Livecache_test, ripple::PeerFinder::PeerFinder_test, ripple::test::ApiVersion_test, ripple::BuildInfo_test, ripple::Hooks_test, ripple::InnerObjectFormatsParsedJSON_test, ripple::Issue_test, ripple::Memo_test, ripple::test::MultiApiJson_test, ripple::PublicKey_test, ripple::Quality_test, ripple::SecretKey_test, ripple::Seed_test, ripple::SeqProxy_test, ripple::Serializer_test, ripple::STAccount_test, ripple::STAmount_test, ripple::test::STIssue_test, ripple::STNumber_test, ripple::STObject_test, ripple::STTx_test, ripple::InnerObjectFormatsSerializer_test, ripple::STValidation_test, ripple::TER_test, ripple::types_test, ripple::Resource::ResourceManager_test, ripple::AccountCurrencies_test, ripple::RPC::AccountLines_test, ripple::test::AccountObjects_test, ripple::test::AccountOffers_test, ripple::AccountSet_test, ripple::test::AccountTx_test, ripple::AmendmentBlocked_test, ripple::test::AMMInfo_test, ripple::test::Book_test, ripple::test::BookChanges_test, ripple::Connect_test, ripple::test::DeliveredAmount_test, ripple::test::DepositAuthorized_test, ripple::Feature_test, ripple::test::GatewayBalances_test, ripple::test::jtx::oracle::GetAggregatePrice_test, ripple::GetCounts_test, ripple::test::Handler_test, ripple::RPC::JSONRPC_test, ripple::RPC::WalletPropose_test, ripple::LedgerClosed_test, ripple::LedgerData_test, ripple::test::LedgerEntry_test, ripple::test::LedgerEntry_XChain_test, ripple::LedgerHeader_test, ripple::RPC::LedgerRequestRPC_test, ripple::test::LedgerRPC_test, ripple::test::ManifestRPC_test, ripple::test::NoRipple_test, ripple::NoRippleCheck_test, ripple::NoRippleCheckLimits_test, ripple::OwnerInfo_test, ripple::Peers_test, ripple::test::RobustTransaction_test, ripple::test::Roles_test, ripple::test::RPCCall_test, ripple::test::RPCHelpers_test, ripple::test::RPCOverload_test, ripple::test::ServerInfo_test, ripple::test::Simulate_test, ripple::RPC::codeString_test, ripple::RPC::fillJson_test, ripple::test::Subscribe_test, ripple::Transaction_test, ripple::TransactionEntry_test, ripple::TransactionHistory_test, ripple::test::ValidatorInfo_test, ripple::test::ValidatorRPC_test, ripple::Version_test, ripple::test::Server_test, ripple::test::ServerStatus_test, ripple::tests::FetchPack_test, ripple::tests::SHAMap_test, ripple::tests::SHAMapPathProof_test, and ripple::tests::SHAMapSync_test.

diff --git a/classes.html b/classes.html index 8c7bd65c8f..4d2a3dd57f 100644 --- a/classes.html +++ b/classes.html @@ -115,7 +115,7 @@ $(function() {
MagicInboundLedgers (ripple::test)
RCLValidatedLedger::MakeGenesis (ripple)
Ledger::MakeGenesis (ripple::test::csf)
Manager (ripple::NodeStore)
Manager (ripple::Resource)
Manager (ripple::PeerFinder)
ManagerImp (ripple::NodeStore)
ManagerImp (ripple::PeerFinder)
ManagerImp (ripple::Resource)
Manifest (ripple)
Manifest_test (ripple::test)
ManifestCache (ripple)
ManifestRPC_test (ripple::test)
manual_clock (beast)
ManualClock (ripple::test)
ManualTimeKeeper (ripple::test)
PropertyStream::Map (beast)
match_peer (ripple)
XChainClaimAttestation::MatchFields (ripple)
XChainCreateAccountAttestation::MatchFields (ripple)
maybe_const (beast)
aged_associative_container_test_base::MaybeMap (beast)
aged_associative_container_test_base::MaybeMap< Base, true > (beast)
aged_associative_container_test_base::MaybeMulti (beast)
aged_associative_container_test_base::MaybeMulti< Base, true > (beast)
TxQ::MaybeTx (ripple)
aged_associative_container_test_base::MaybeUnordered (beast)
aged_associative_container_test_base::MaybeUnordered< Base, true > (beast)
memo (ripple::test::jtx)
Memo_test (ripple)
memodata (ripple::test::jtx)
memoformat (ripple::test::jtx)
memondata (ripple::test::jtx)
memonformat (ripple::test::jtx)
memontype (ripple::test::jtx)
MemoryBackend (ripple::NodeStore)
MemoryDB (ripple::NodeStore)
MemoryFactory (ripple::NodeStore)
memotype (ripple::test::jtx)
Message (ripple)
MessageHeader (ripple::detail)
ValidatorList::MessageWithHash (ripple)
Meter (beast::insight)
MeterImpl (beast::insight)
TxQ::Metrics (ripple)
PeerImp::Metrics (ripple)
SHAMap::MissingNodes (ripple)
Consensus::MonitoredMode (ripple)
MPT (ripple::test::jtx)
MPTAmount (ripple)
MPTAuthorize (ripple::test::jtx)
MPTAuthorizeArgs (ripple)
mptbalance (ripple::test::jtx)
MPTCreate (ripple::test::jtx)
MPTCreateArgs (ripple)
MPTDestroy (ripple::test::jtx)
mptflags (ripple::test::jtx)
MPTInit (ripple::test::jtx)
MPTIssue (ripple)
MPToken_test (ripple::test)
MPTokenAuthorize (ripple)
MPTokenIssuanceCreate (ripple)
MPTokenIssuanceDestroy (ripple)
MPTokenIssuanceSet (ripple)
MPTSet (ripple::test::jtx)
MPTTester (ripple::test::jtx)
WSClientImpl::msg (ripple::test)
msig (ripple::test::jtx::batch)
msig (ripple::test::jtx)
mulDiv_test (ripple::test)
multi_runner_base (ripple::test::detail)
multi_runner_child (ripple::test)
multi_runner_parent (ripple::test)
MultiApiJson (ripple::detail)
MultiApiJson_test (ripple::test)
MultipleMetrics (ripple::metrics)
MultiSign_test (ripple::test)
RCLTxSet::MutableTxSet (ripple)
TxSet::MutableTxSet (ripple::test::csf)
Peer::ValAdaptor::Mutex (ripple::test::csf)
Validations_test::Adaptor::Mutex (ripple::test::csf)
ServerStatus_test::myFields (ripple::test)
N
-
NegativeUNL_test (ripple::test)
NegativeUNLNoAmendment_test (ripple::test)
NegativeUNLVote (ripple)
NegativeUNLVoteFilterValidations_test (ripple::test)
NegativeUNLVoteGoodScore_test (ripple::test)
NegativeUNLVoteInternal_test (ripple::test)
NegativeUNLVoteMaxListed_test (ripple::test)
NegativeUNLVoteNewValidator_test (ripple::test)
NegativeUNLVoteOffline_test (ripple::test)
NegativeUNLVoteRetiredValidator_test (ripple::test)
NegativeUNLVoteScoreTable_test (ripple::test)
NetClock (ripple)
Network (ripple::test)
NetworkHistory (ripple::test)
NetworkID_test (ripple::test)
NetworkOfTwo (ripple::test)
NetworkOPs (ripple)
NetworkOPsImp (ripple)
next_t (ripple::keylet)
nflags (ripple::test::jtx)
NFTokenAcceptOffer (ripple)
NFTokenAllFeatures_test (ripple)
NFTokenBaseUtil_test (ripple)
NFTokenBurn (ripple)
NFTokenBurnAllFeatures_test (ripple)
NFTokenBurnBaseUtil_test (ripple)
NFTokenBurnWOfixFungTokens_test (ripple)
NFTokenBurnWOFixNFTPageLinks_test (ripple)
NFTokenBurnWOFixTokenRemint_test (ripple)
NFTokenCancelOffer (ripple)
NFTokenCountTracking (ripple)
NFTokenCreateOffer (ripple)
NFTokenDir_test (ripple)
NFTokenDisallowIncoming_test (ripple)
NFTokenMint (ripple)
NFTokenModify (ripple)
NFTokenWOfixV1_test (ripple)
NFTokenWOMintOffer_test (ripple)
NFTokenWOModify_test (ripple)
NFTokenWOTokenRemint_test (ripple)
NFTokenWOTokenReserve_test (ripple)
NoBadOffers (ripple)
LockFreeStack::Node (beast)
Validations_test::Node (ripple::test::csf)
Node (ripple::ledger_trie_detail)
NoDeepFreezeTrustLinesWithoutFreeze (ripple)
NodeFamily (ripple)
NodeIDTag (ripple::detail)
NodeObject (ripple)
AccountTx_test::NodeSanity (ripple::test)
NodeStoreBasic_test (ripple::NodeStore)
NodeStoreScheduler (ripple)
NoEdgeData (ripple::test::csf::detail)
None (ripple::test::jtx)
none_t (ripple::test::jtx)
nonhash (ripple::test)
nonPresentObject_t (ripple::detail)
NoRipple_test (ripple::test)
NoRippleCheck_test (ripple)
NoRippleCheckLimits_test (ripple)
TER_test::NotConvertible (ripple)
NoXRPTrustLines (ripple)
NoZeroEscrow (ripple)
NuDBBackend (ripple::NodeStore)
NuDBFactory (ripple::NodeStore)
NullBackend (ripple::NodeStore)
NullCollector (beast::insight)
NullCollector (ripple::test::csf)
NullCollectorImp (beast::insight::detail)
NullCounterImpl (beast::insight::detail)
NullEventImpl (beast::insight::detail)
NullFactory (ripple::NodeStore)
NullGaugeImpl (beast::insight::detail)
NullHookImpl (beast::insight::detail)
NullJournalSink (beast)
NullMeterImpl (beast::insight::detail)
Number (ripple)
Number_test (ripple)
NumberParts (ripple)
NumberRoundModeGuard (ripple)
NumberSO (ripple)
+
NegativeUNL_test (ripple::test)
NegativeUNLNoAmendment_test (ripple::test)
NegativeUNLVote (ripple)
NegativeUNLVoteFilterValidations_test (ripple::test)
NegativeUNLVoteGoodScore_test (ripple::test)
NegativeUNLVoteInternal_test (ripple::test)
NegativeUNLVoteMaxListed_test (ripple::test)
NegativeUNLVoteNewValidator_test (ripple::test)
NegativeUNLVoteOffline_test (ripple::test)
NegativeUNLVoteRetiredValidator_test (ripple::test)
NegativeUNLVoteScoreTable_test (ripple::test)
NetClock (ripple)
Network (ripple::test)
NetworkHistory (ripple::test)
NetworkID_test (ripple::test)
NetworkOfTwo (ripple::test)
NetworkOPs (ripple)
NetworkOPsImp (ripple)
next_t (ripple::keylet)
nflags (ripple::test::jtx)
NFTokenAcceptOffer (ripple)
NFTokenAllFeatures_test (ripple)
NFTokenAuth_test (ripple)
NFTokenBaseUtil_test (ripple)
NFTokenBurn (ripple)
NFTokenBurnAllFeatures_test (ripple)
NFTokenBurnBaseUtil_test (ripple)
NFTokenBurnWOfixFungTokens_test (ripple)
NFTokenBurnWOFixNFTPageLinks_test (ripple)
NFTokenBurnWOFixTokenRemint_test (ripple)
NFTokenCancelOffer (ripple)
NFTokenCountTracking (ripple)
NFTokenCreateOffer (ripple)
NFTokenDir_test (ripple)
NFTokenDisallowIncoming_test (ripple)
NFTokenMint (ripple)
NFTokenModify (ripple)
NFTokenWOfixV1_test (ripple)
NFTokenWOMintOffer_test (ripple)
NFTokenWOModify_test (ripple)
NFTokenWOTokenRemint_test (ripple)
NFTokenWOTokenReserve_test (ripple)
NoBadOffers (ripple)
LockFreeStack::Node (beast)
Validations_test::Node (ripple::test::csf)
Node (ripple::ledger_trie_detail)
NoDeepFreezeTrustLinesWithoutFreeze (ripple)
NodeFamily (ripple)
NodeIDTag (ripple::detail)
NodeObject (ripple)
AccountTx_test::NodeSanity (ripple::test)
NodeStoreBasic_test (ripple::NodeStore)
NodeStoreScheduler (ripple)
NoEdgeData (ripple::test::csf::detail)
None (ripple::test::jtx)
none_t (ripple::test::jtx)
nonhash (ripple::test)
nonPresentObject_t (ripple::detail)
NoRipple_test (ripple::test)
NoRippleCheck_test (ripple)
NoRippleCheckLimits_test (ripple)
TER_test::NotConvertible (ripple)
NoXRPTrustLines (ripple)
NoZeroEscrow (ripple)
NuDBBackend (ripple::NodeStore)
NuDBFactory (ripple::NodeStore)
NullBackend (ripple::NodeStore)
NullCollector (beast::insight)
NullCollector (ripple::test::csf)
NullCollectorImp (beast::insight::detail)
NullCounterImpl (beast::insight::detail)
NullEventImpl (beast::insight::detail)
NullFactory (ripple::NodeStore)
NullGaugeImpl (beast::insight::detail)
NullHookImpl (beast::insight::detail)
NullJournalSink (beast)
NullMeterImpl (beast::insight::detail)
Number (ripple)
Number_test (ripple)
NumberParts (ripple)
NumberRoundModeGuard (ripple)
NumberSO (ripple)
O
Object (Json)
Offer_manual_test (ripple::test)
OfferAllFeatures_test (ripple::test)
OfferBaseUtil_test (ripple::test)
OfferStream (ripple)
OfferStream_test (ripple)
OfferWOFillOrKill_test (ripple::test)
OfferWOFlowCross_test (ripple::test)
OfferWOPermDEX_test (ripple::test)
OfferWOSmallQOffers_test (ripple::test)
OfferWTakerDryOffer_test (ripple::test)
open_ledger_t (ripple)
OpenLedger (ripple)
openssl_ripemd160_hasher (ripple)
openssl_sha256_hasher (ripple)
openssl_sha512_hasher (ripple)
OpenView (ripple)
OptionaledField (ripple)
STObject::OptionalProxy (ripple)
Oracle (ripple::test::jtx::oracle)
Oracle_test (ripple::test::jtx::oracle)
OrderBookDB (ripple)
TxQ::OrderCandidates (ripple)
RippleCalc::Output (ripple::path)
Output_test (Json)
Overlay (ripple)
Overlay (ripple::test)
OverlayImpl (ripple)
OverlaySim (ripple::test)
OversizeMeta_test (ripple::test)
owner (ripple::test::jtx::token)
owner_count (ripple::test::jtx)
OwnerInfo_test (ripple)
owners (ripple::test::jtx)
diff --git a/classripple_1_1Freeze__test.html b/classripple_1_1Freeze__test.html index 0e6afd2c3d..3f2afdabc7 100644 --- a/classripple_1_1Freeze__test.html +++ b/classripple_1_1Freeze__test.html @@ -662,7 +662,7 @@ Private Attributes
-

Definition at line 1951 of file Freeze_test.cpp.

+

Definition at line 2038 of file Freeze_test.cpp.

@@ -700,7 +700,7 @@ Private Attributes
-

Definition at line 1977 of file Freeze_test.cpp.

+

Definition at line 2064 of file Freeze_test.cpp.

@@ -744,7 +744,7 @@ Private Attributes
-

Definition at line 1983 of file Freeze_test.cpp.

+

Definition at line 2070 of file Freeze_test.cpp.

@@ -775,7 +775,7 @@ Private Attributes

Implements beast::unit_test::suite.

-

Definition at line 2004 of file Freeze_test.cpp.

+

Definition at line 2091 of file Freeze_test.cpp.

diff --git a/classripple_1_1NFTokenAcceptOffer-members.html b/classripple_1_1NFTokenAcceptOffer-members.html index 20a6a53756..d3deef9dbd 100644 --- a/classripple_1_1NFTokenAcceptOffer-members.html +++ b/classripple_1_1NFTokenAcceptOffer-members.html @@ -85,43 +85,42 @@ $(function() { Blocker enum valueripple::Transactor bridgeOffers(std::shared_ptr< SLE > const &buy, std::shared_ptr< SLE > const &sell)ripple::NFTokenAcceptOfferprivate calculateBaseFee(ReadView const &view, STTx const &tx)ripple::Transactorstatic - checkAcceptAsset(ReadView const &view, ApplyFlags const flags, AccountID const id, beast::Journal const j, Issue const &issue)ripple::NFTokenAcceptOfferprivatestatic - checkBatchSign(PreclaimContext const &ctx)ripple::Transactorstatic - checkFee(PreclaimContext const &ctx, XRPAmount baseFee)ripple::Transactorstatic - checkMultiSign(ReadView const &view, AccountID const &idAccount, STArray const &txSigners, ApplyFlags const &flags, beast::Journal j)ripple::Transactorprivatestatic - checkPermission(ReadView const &view, STTx const &tx)ripple::Transactorstatic - checkPriorTxAndLastLedger(PreclaimContext const &ctx)ripple::Transactorstatic - checkSeqProxy(ReadView const &view, STTx const &tx, beast::Journal j)ripple::Transactorstatic - checkSign(PreclaimContext const &ctx)ripple::Transactorstatic - checkSingleSign(AccountID const &idSigner, AccountID const &idAccount, std::shared_ptr< SLE const > sleAccount, Rules const &rules, beast::Journal j)ripple::Transactorprivatestatic - ConsequencesFactoryripple::NFTokenAcceptOfferstatic - ConsequencesFactoryType enum nameripple::Transactor - consumeSeqProxy(SLE::pointer const &sleAccount)ripple::Transactorprivate - ctx_ripple::Transactorprotected - Custom enum valueripple::Transactor - doApply() overrideripple::NFTokenAcceptOffervirtual - j_ripple::Transactorprotected - minimumFee(Application &app, XRPAmount baseFee, Fees const &fees, ApplyFlags flags)ripple::Transactorprotectedstatic - mPriorBalanceripple::Transactorprotected - mSourceBalanceripple::Transactorprotected - NFTokenAcceptOffer(ApplyContext &ctx)ripple::NFTokenAcceptOfferexplicit - Normal enum valueripple::Transactor - operator()()ripple::Transactor - operator=(Transactor const &)=deleteripple::Transactorprotected - pay(AccountID const &from, AccountID const &to, STAmount const &amount)ripple::NFTokenAcceptOfferprivate - payFee()ripple::Transactorprivate - preclaim(PreclaimContext const &ctx)ripple::NFTokenAcceptOfferstatic - preCompute()ripple::Transactorprotectedvirtual - preflight(PreflightContext const &ctx)ripple::NFTokenAcceptOfferstatic - reset(XRPAmount fee)ripple::Transactorprivate - ticketDelete(ApplyView &view, AccountID const &account, uint256 const &ticketIndex, beast::Journal j)ripple::Transactorstatic - Transactor(Transactor const &)=deleteripple::Transactorprotected - Transactor(ApplyContext &ctx)ripple::Transactorexplicitprotected - transferNFToken(AccountID const &buyer, AccountID const &seller, uint256 const &nfTokenID)ripple::NFTokenAcceptOfferprivate - trapTransaction(uint256) constripple::Transactorprivate - view()ripple::Transactor - view() constripple::Transactor - ~Transactor()=defaultripple::Transactorprotectedvirtual + checkBatchSign(PreclaimContext const &ctx)ripple::Transactorstatic + checkFee(PreclaimContext const &ctx, XRPAmount baseFee)ripple::Transactorstatic + checkMultiSign(ReadView const &view, AccountID const &idAccount, STArray const &txSigners, ApplyFlags const &flags, beast::Journal j)ripple::Transactorprivatestatic + checkPermission(ReadView const &view, STTx const &tx)ripple::Transactorstatic + checkPriorTxAndLastLedger(PreclaimContext const &ctx)ripple::Transactorstatic + checkSeqProxy(ReadView const &view, STTx const &tx, beast::Journal j)ripple::Transactorstatic + checkSign(PreclaimContext const &ctx)ripple::Transactorstatic + checkSingleSign(AccountID const &idSigner, AccountID const &idAccount, std::shared_ptr< SLE const > sleAccount, Rules const &rules, beast::Journal j)ripple::Transactorprivatestatic + ConsequencesFactoryripple::NFTokenAcceptOfferstatic + ConsequencesFactoryType enum nameripple::Transactor + consumeSeqProxy(SLE::pointer const &sleAccount)ripple::Transactorprivate + ctx_ripple::Transactorprotected + Custom enum valueripple::Transactor + doApply() overrideripple::NFTokenAcceptOffervirtual + j_ripple::Transactorprotected + minimumFee(Application &app, XRPAmount baseFee, Fees const &fees, ApplyFlags flags)ripple::Transactorprotectedstatic + mPriorBalanceripple::Transactorprotected + mSourceBalanceripple::Transactorprotected + NFTokenAcceptOffer(ApplyContext &ctx)ripple::NFTokenAcceptOfferexplicit + Normal enum valueripple::Transactor + operator()()ripple::Transactor + operator=(Transactor const &)=deleteripple::Transactorprotected + pay(AccountID const &from, AccountID const &to, STAmount const &amount)ripple::NFTokenAcceptOfferprivate + payFee()ripple::Transactorprivate + preclaim(PreclaimContext const &ctx)ripple::NFTokenAcceptOfferstatic + preCompute()ripple::Transactorprotectedvirtual + preflight(PreflightContext const &ctx)ripple::NFTokenAcceptOfferstatic + reset(XRPAmount fee)ripple::Transactorprivate + ticketDelete(ApplyView &view, AccountID const &account, uint256 const &ticketIndex, beast::Journal j)ripple::Transactorstatic + Transactor(Transactor const &)=deleteripple::Transactorprotected + Transactor(ApplyContext &ctx)ripple::Transactorexplicitprotected + transferNFToken(AccountID const &buyer, AccountID const &seller, uint256 const &nfTokenID)ripple::NFTokenAcceptOfferprivate + trapTransaction(uint256) constripple::Transactorprivate + view()ripple::Transactor + view() constripple::Transactor + ~Transactor()=defaultripple::Transactorprotectedvirtual