20 #include <ripple/app/ledger/Ledger.h> 
   21 #include <ripple/core/ConfigSections.h> 
   22 #include <ripple/ledger/ApplyViewImpl.h> 
   23 #include <ripple/ledger/OpenView.h> 
   24 #include <ripple/ledger/PaymentSandbox.h> 
   25 #include <ripple/ledger/Sandbox.h> 
   26 #include <ripple/protocol/Feature.h> 
   27 #include <ripple/protocol/Protocol.h> 
   47         auto const le = std::make_shared<SLE>(
k(
id));
 
   77                 next = view.
succ(*next);
 
   95             next = ledger.
succ(*next);
 
  110         auto const next = v.
succ(
k(
id).key);
 
  113             if (BEAST_EXPECT(next))
 
  114                 BEAST_EXPECT(*next == 
k(*answer).
key);
 
  126         return std::make_shared<std::remove_const_t<T>>(*sp);
 
  142             env.
app().getNodeFamily());
 
  143         auto const ledger = std::make_shared<Ledger>(
 
  147         succ(v, 0, std::nullopt);
 
  148         ledger->rawInsert(
sle(1, 1));
 
  150         BEAST_EXPECT(
seq(v.
read(
k(1))) == 1);
 
  152         succ(v, 1, std::nullopt);
 
  153         ledger->rawInsert(
sle(2, 2));
 
  154         BEAST_EXPECT(
seq(v.
read(
k(2))) == 2);
 
  155         ledger->rawInsert(
sle(3, 3));
 
  156         BEAST_EXPECT(
seq(v.
read(
k(3))) == 3);
 
  159         ledger->rawReplace(s);
 
  160         BEAST_EXPECT(
seq(v.
read(
k(2))) == 4);
 
  161         ledger->rawErase(
sle(2));
 
  177         succ(v, 0, std::nullopt);
 
  180         BEAST_EXPECT(
seq(v.
read(
k(1))) == 1);
 
  181         BEAST_EXPECT(
seq(v.
peek(
k(1))) == 1);
 
  183         succ(v, 1, std::nullopt);
 
  185         BEAST_EXPECT(
seq(v.
read(
k(2))) == 2);
 
  187         auto s = v.
peek(
k(3));
 
  188         BEAST_EXPECT(
seq(s) == 3);
 
  192         BEAST_EXPECT(
seq(v.
read(
k(2))) == 4);
 
  203         testcase(
"Meta succ");
 
  230             succ(v0, 7, std::nullopt);
 
  239             succ(v1, 7, std::nullopt);
 
  263         succ(v0, 7, std::nullopt);
 
  284             auto s = v1.
peek(
k(4));
 
  287             BEAST_EXPECT(
seq(v1.
read(
k(1))) == 1);
 
  288             BEAST_EXPECT(!v1.
exists(
k(2)));
 
  289             BEAST_EXPECT(
seq(v1.
read(
k(3))) == 3);
 
  290             BEAST_EXPECT(
seq(v1.
read(
k(4))) == 5);
 
  293                 auto s2 = v2.
peek(
k(3));
 
  297                 BEAST_EXPECT(
seq(v2.
read(
k(1))) == 1);
 
  298                 BEAST_EXPECT(!v2.
exists(
k(2)));
 
  299                 BEAST_EXPECT(
seq(v2.
read(
k(3))) == 6);
 
  300                 BEAST_EXPECT(!v2.
exists(
k(4)));
 
  303             BEAST_EXPECT(
seq(v1.
read(
k(1))) == 1);
 
  304             BEAST_EXPECT(!v1.
exists(
k(2)));
 
  305             BEAST_EXPECT(
seq(v1.
read(
k(3))) == 3);
 
  306             BEAST_EXPECT(
seq(v1.
read(
k(4))) == 5);
 
  310                 auto s2 = v2.
peek(
k(3));
 
  314                 BEAST_EXPECT(
seq(v2.
read(
k(1))) == 1);
 
  315                 BEAST_EXPECT(!v2.
exists(
k(2)));
 
  316                 BEAST_EXPECT(
seq(v2.
read(
k(3))) == 6);
 
  317                 BEAST_EXPECT(!v2.
exists(
k(4)));
 
  320             BEAST_EXPECT(
seq(v1.
read(
k(1))) == 1);
 
  321             BEAST_EXPECT(!v1.
exists(
k(2)));
 
  322             BEAST_EXPECT(
seq(v1.
read(
k(3))) == 6);
 
  323             BEAST_EXPECT(!v1.
exists(
k(4)));
 
  326         BEAST_EXPECT(
seq(v0.
read(
k(1))) == 1);
 
  327         BEAST_EXPECT(!v0.
exists(
k(2)));
 
  328         BEAST_EXPECT(
seq(v0.
read(
k(3))) == 6);
 
  329         BEAST_EXPECT(!v0.
exists(
k(4)));
 
  345             BEAST_EXPECT(v0.
seq() != 98);
 
  346             BEAST_EXPECT(v0.
seq() == 
open->seq());
 
  352                 BEAST_EXPECT(v1.
seq() == v0.
seq());
 
  357                 BEAST_EXPECT(v2.
seq() == v1.
seq());
 
  361                 BEAST_EXPECT(v3.
seq() == v2.
seq());
 
  368                 BEAST_EXPECT(v2.
seq() == v0.
seq());
 
  372                 BEAST_EXPECT(v3.
seq() == v2.
seq());
 
  385         for (
auto const& 
sle : ledger.
sles)
 
  390     template <
class... Args>
 
  400         testcase(
"Upper and lower bound");
 
  409             env.
app().getNodeFamily());
 
  410         auto const ledger = std::make_shared<Ledger>(
 
  417                 ledger->rawInsert(
sle(x));
 
  422             BEAST_EXPECT(
sles(*ledger) == 
list(1, 2, 3));
 
  423             auto e = ledger->stateMap().end();
 
  424             auto b1 = ledger->stateMap().begin();
 
  425             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == e);
 
  426             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(2)) == b1);
 
  428             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(3)) == b1);
 
  430             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(4)) == b1);
 
  431             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(5)) == b1);
 
  432             b1 = ledger->stateMap().begin();
 
  433             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(0)) == b1);
 
  435             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(1)) == b1);
 
  437             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(2)) == b1);
 
  438             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(3)) == e);
 
  443             BEAST_EXPECT(
sles(*ledger) == 
list(2, 4, 6));
 
  444             auto e = ledger->stateMap().end();
 
  445             auto b1 = ledger->stateMap().begin();
 
  446             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == e);
 
  447             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(2)) == e);
 
  448             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(3)) == b1);
 
  449             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(4)) == b1);
 
  451             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(5)) == b1);
 
  452             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(6)) == b1);
 
  454             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(7)) == b1);
 
  455             b1 = ledger->stateMap().begin();
 
  456             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(1)) == b1);
 
  458             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(2)) == b1);
 
  459             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(3)) == b1);
 
  462             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(4)) == b1);
 
  463             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(5)) == b1);
 
  464             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(6)) == e);
 
  465             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(7)) == e);
 
  468             setup({2, 3, 5, 6, 10, 15});
 
  469             BEAST_EXPECT(
sles(*ledger) == 
list(2, 3, 5, 6, 10, 15));
 
  470             auto e = ledger->stateMap().end();
 
  471             auto b = ledger->stateMap().begin();
 
  472             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == e);
 
  473             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(2)) == e);
 
  474             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(3)) == b);
 
  476             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(4)) == b);
 
  477             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(5)) == b);
 
  479             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(6)) == b);
 
  481             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(7)) == b);
 
  482             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(8)) == b);
 
  483             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(9)) == b);
 
  484             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(10)) == b);
 
  486             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(11)) == b);
 
  487             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(12)) == b);
 
  488             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(13)) == b);
 
  489             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(14)) == b);
 
  490             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(15)) == b);
 
  492             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(16)) == b);
 
  493             b = ledger->stateMap().begin();
 
  494             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(0)) == b);
 
  495             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(1)) == b);
 
  497             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(2)) == b);
 
  499             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(3)) == b);
 
  500             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(4)) == b);
 
  502             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(5)) == b);
 
  504             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(6)) == b);
 
  505             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(7)) == b);
 
  506             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(8)) == b);
 
  507             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(9)) == b);
 
  509             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(10)) == b);
 
  510             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(11)) == b);
 
  511             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(12)) == b);
 
  512             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(13)) == b);
 
  513             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(14)) == b);
 
  515             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(15)) == e);
 
  516             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(16)) == e);
 
  520             setup({0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12,
 
  521                    13, 14, 15, 16, 20, 25, 30, 32, 33, 34, 35, 36, 37,
 
  522                    38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 66, 100});
 
  565             auto b = ledger->stateMap().begin();
 
  566             auto e = ledger->stateMap().end();
 
  567             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(0)) == e);
 
  568             BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == b);
 
  570                 ledger->stateMap().lower_bound(
uint256(5))->key() ==
 
  573                 ledger->stateMap().lower_bound(
uint256(15))->key() ==
 
  576                 ledger->stateMap().lower_bound(
uint256(16))->key() ==
 
  579                 ledger->stateMap().lower_bound(
uint256(19))->key() ==
 
  582                 ledger->stateMap().lower_bound(
uint256(20))->key() ==
 
  585                 ledger->stateMap().lower_bound(
uint256(24))->key() ==
 
  588                 ledger->stateMap().lower_bound(
uint256(31))->key() ==
 
  591                 ledger->stateMap().lower_bound(
uint256(32))->key() ==
 
  594                 ledger->stateMap().lower_bound(
uint256(40))->key() ==
 
  597                 ledger->stateMap().lower_bound(
uint256(47))->key() ==
 
  600                 ledger->stateMap().lower_bound(
uint256(48))->key() ==
 
  603                 ledger->stateMap().lower_bound(
uint256(64))->key() ==
 
  607                 ledger->stateMap().lower_bound(
uint256(90))->key() ==
 
  610                 ledger->stateMap().lower_bound(
uint256(96))->key() ==
 
  613                 ledger->stateMap().lower_bound(
uint256(100))->key() ==
 
  617                 ledger->stateMap().upper_bound(
uint256(0))->key() ==
 
  620                 ledger->stateMap().upper_bound(
uint256(5))->key() ==
 
  623                 ledger->stateMap().upper_bound(
uint256(15))->key() ==
 
  626                 ledger->stateMap().upper_bound(
uint256(16))->key() ==
 
  629                 ledger->stateMap().upper_bound(
uint256(18))->key() ==
 
  632                 ledger->stateMap().upper_bound(
uint256(20))->key() ==
 
  635                 ledger->stateMap().upper_bound(
uint256(31))->key() ==
 
  638                 ledger->stateMap().upper_bound(
uint256(32))->key() ==
 
  641                 ledger->stateMap().upper_bound(
uint256(47))->key() ==
 
  644                 ledger->stateMap().upper_bound(
uint256(48))->key() ==
 
  647                 ledger->stateMap().upper_bound(
uint256(53))->key() ==
 
  650                 ledger->stateMap().upper_bound(
uint256(66))->key() ==
 
  653                 ledger->stateMap().upper_bound(
uint256(70))->key() ==
 
  656                 ledger->stateMap().upper_bound(
uint256(85))->key() ==
 
  659                 ledger->stateMap().upper_bound(
uint256(98))->key() ==
 
  661             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(100)) == e);
 
  662             BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(155)) == e);
 
  678             env.
app().getNodeFamily());
 
  679         auto const ledger = std::make_shared<Ledger>(
 
  681         auto setup123 = [&ledger, 
this]() {
 
  684             ledger->rawInsert(
sle(1));
 
  685             ledger->rawInsert(
sle(2));
 
  686             ledger->rawInsert(
sle(3));
 
  687             BEAST_EXPECT(
sles(*ledger) == 
list(1, 2, 3));
 
  695             BEAST_EXPECT(
sles(view) == 
list(2, 3, 4, 5));
 
  714             BEAST_EXPECT(
sles(view) == 
list(3, 4, 5));
 
  733             BEAST_EXPECT(
sles(view) == 
list(4, 5));
 
  749             BEAST_EXPECT(
sles(view) == 
list(1, 2, 4, 5));
 
  766             BEAST_EXPECT(
sles(view) == 
list(1, 2, 3));
 
  767             BEAST_EXPECT(
seq(view.
read(
k(1))) == 10);
 
  768             BEAST_EXPECT(
seq(view.
read(
k(2))) == 1);
 
  769             BEAST_EXPECT(
seq(view.
read(
k(3))) == 30);
 
  772             BEAST_EXPECT(
sles(view) == 
list(1, 2));
 
  785             BEAST_EXPECT(
sles(view) == 
list(1, 2, 3, 4, 5));
 
  808         auto const alice = 
Account(
"alice");
 
  809         auto const bob = 
Account(
"bob");
 
  810         auto const carol = 
Account(
"carol");
 
  811         auto const gw = 
Account(
"gateway");
 
  812         auto const USD = gw[
"USD"];
 
  813         auto const EUR = gw[
"EUR"];
 
  815         env.
fund(
XRP(10000), alice, bob, carol, gw);
 
  816         env.
trust(USD(100), alice, bob, carol);
 
  819             env(
pay(gw, alice, USD(50)));
 
  820             env(offer(alice, 
XRP(5), USD(5)));
 
  842             env(offer(
"alice", 
XRP(4), USD(5)));
 
  846             env(
pay(gw, bob, USD(50)));
 
  879             env(
pay(gw, carol, USD(50)));
 
  917             BEAST_EXPECT(carolsXRP == 
XRP(9750));
 
  940             BEAST_EXPECT(gwUSD == USD(314159));
 
  945             BEAST_EXPECT(carolsUSD == USD(50));
 
  952             BEAST_EXPECT(carolsUSD == USD(0));
 
  957             BEAST_EXPECT(carolsUSD == USD(50));
 
  968         testcase(
"Transfer rate");
 
  973         auto const gw1 = 
Account(
"gw1");
 
  978         auto rdView = env.
closed();
 
  982         env(
rate(gw1, 1.02));
 
  996         testcase(
"Are compatible");
 
  999         auto const alice = 
Account(
"alice");
 
 1000         auto const bob = 
Account(
"bob");
 
 1007         auto const rdViewA3 = eA.
closed();
 
 1011         auto const rdViewA4 = eA.
closed();
 
 1023         eB.fund(
XRP(10000), bob);
 
 1025         auto const rdViewB3 = eB.closed();
 
 1027         eB.fund(
XRP(10000), alice);
 
 1029         auto const rdViewB4 = eB.closed();
 
 1033         BEAST_EXPECT(
areCompatible(*rdViewA3, *rdViewA4, jStream, 
""));
 
 1034         BEAST_EXPECT(
areCompatible(*rdViewA4, *rdViewA3, jStream, 
""));
 
 1035         BEAST_EXPECT(
areCompatible(*rdViewA4, *rdViewA4, jStream, 
""));
 
 1036         BEAST_EXPECT(!
areCompatible(*rdViewA3, *rdViewB4, jStream, 
""));
 
 1037         BEAST_EXPECT(!
areCompatible(*rdViewA4, *rdViewB3, jStream, 
""));
 
 1038         BEAST_EXPECT(!
areCompatible(*rdViewA4, *rdViewB4, jStream, 
""));
 
 1042         auto const& iA3 = rdViewA3->info();
 
 1043         auto const& iA4 = rdViewA4->info();
 
 1045         BEAST_EXPECT(
areCompatible(iA3.hash, iA3.seq, *rdViewA4, jStream, 
""));
 
 1046         BEAST_EXPECT(
areCompatible(iA4.hash, iA4.seq, *rdViewA3, jStream, 
""));
 
 1047         BEAST_EXPECT(
areCompatible(iA4.hash, iA4.seq, *rdViewA4, jStream, 
""));
 
 1048         BEAST_EXPECT(!
areCompatible(iA3.hash, iA3.seq, *rdViewB4, jStream, 
""));
 
 1049         BEAST_EXPECT(
areCompatible(iA4.hash, iA4.seq, *rdViewB3, jStream, 
""));
 
 1050         BEAST_EXPECT(!
areCompatible(iA4.hash, iA4.seq, *rdViewB4, jStream, 
""));
 
 1056         testcase(
"Regressions");
 
 1058         using namespace jtx;
 
 1067                 std::make_shared<Ledger>(
 
 1071                     env.
app().getNodeFamily());
 
 1072             auto const ledger = std::make_shared<Ledger>(
 
 1075             ledger->rawInsert(
sle(1));
 
 1083             BEAST_EXPECT(!v1.
exists(
k(1)));
 
 1099         BEAST_EXPECT(
k(0).key < 
k(1).key);
 
 1120         using namespace jtx;
 
 1125         BEAST_EXPECT(majorities.empty());
 
 1129         for (i = 0; i <= 256; ++i)
 
 1133             if (!majorities.empty())
 
 1139         BEAST_EXPECT(i == 254);
 
 1140         BEAST_EXPECT(majorities.size() >= 5);
 
 1144         BEAST_EXPECT(enableds.empty());
 
 1149         for (i = 0; i <= 256; ++i)
 
 1151             using namespace std::chrono_literals;
 
 1154             if (!enableds.empty())
 
 1157         BEAST_EXPECT(i == 255);
 
 1158         BEAST_EXPECT(enableds.size() >= 5);
 
 1164         testGetAmendments();