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);
140 env.
app().getNodeFamily());
141 auto const ledger = std::make_shared<Ledger>(
145 succ(v, 0, std::nullopt);
146 ledger->rawInsert(
sle(1, 1));
148 BEAST_EXPECT(
seq(v.
read(
k(1))) == 1);
150 succ(v, 1, std::nullopt);
151 ledger->rawInsert(
sle(2, 2));
152 BEAST_EXPECT(
seq(v.
read(
k(2))) == 2);
153 ledger->rawInsert(
sle(3, 3));
154 BEAST_EXPECT(
seq(v.
read(
k(3))) == 3);
157 ledger->rawReplace(s);
158 BEAST_EXPECT(
seq(v.
read(
k(2))) == 4);
159 ledger->rawErase(
sle(2));
173 succ(v, 0, std::nullopt);
176 BEAST_EXPECT(
seq(v.
read(
k(1))) == 1);
177 BEAST_EXPECT(
seq(v.
peek(
k(1))) == 1);
179 succ(v, 1, std::nullopt);
181 BEAST_EXPECT(
seq(v.
read(
k(2))) == 2);
183 auto s = v.
peek(
k(3));
184 BEAST_EXPECT(
seq(s) == 3);
188 BEAST_EXPECT(
seq(v.
read(
k(2))) == 4);
224 succ(v0, 7, std::nullopt);
233 succ(v1, 7, std::nullopt);
257 succ(v0, 7, std::nullopt);
276 auto s = v1.
peek(
k(4));
279 BEAST_EXPECT(
seq(v1.
read(
k(1))) == 1);
280 BEAST_EXPECT(!v1.
exists(
k(2)));
281 BEAST_EXPECT(
seq(v1.
read(
k(3))) == 3);
282 BEAST_EXPECT(
seq(v1.
read(
k(4))) == 5);
285 auto s2 = v2.
peek(
k(3));
289 BEAST_EXPECT(
seq(v2.
read(
k(1))) == 1);
290 BEAST_EXPECT(!v2.
exists(
k(2)));
291 BEAST_EXPECT(
seq(v2.
read(
k(3))) == 6);
292 BEAST_EXPECT(!v2.
exists(
k(4)));
295 BEAST_EXPECT(
seq(v1.
read(
k(1))) == 1);
296 BEAST_EXPECT(!v1.
exists(
k(2)));
297 BEAST_EXPECT(
seq(v1.
read(
k(3))) == 3);
298 BEAST_EXPECT(
seq(v1.
read(
k(4))) == 5);
302 auto s2 = v2.
peek(
k(3));
306 BEAST_EXPECT(
seq(v2.
read(
k(1))) == 1);
307 BEAST_EXPECT(!v2.
exists(
k(2)));
308 BEAST_EXPECT(
seq(v2.
read(
k(3))) == 6);
309 BEAST_EXPECT(!v2.
exists(
k(4)));
312 BEAST_EXPECT(
seq(v1.
read(
k(1))) == 1);
313 BEAST_EXPECT(!v1.
exists(
k(2)));
314 BEAST_EXPECT(
seq(v1.
read(
k(3))) == 6);
315 BEAST_EXPECT(!v1.
exists(
k(4)));
318 BEAST_EXPECT(
seq(v0.
read(
k(1))) == 1);
319 BEAST_EXPECT(!v0.
exists(
k(2)));
320 BEAST_EXPECT(
seq(v0.
read(
k(3))) == 6);
321 BEAST_EXPECT(!v0.
exists(
k(4)));
335 BEAST_EXPECT(v0.
seq() != 98);
336 BEAST_EXPECT(v0.
seq() ==
open->seq());
342 BEAST_EXPECT(v1.
seq() == v0.
seq());
347 BEAST_EXPECT(v2.
seq() == v1.
seq());
351 BEAST_EXPECT(v3.
seq() == v2.
seq());
358 BEAST_EXPECT(v2.
seq() == v0.
seq());
362 BEAST_EXPECT(v3.
seq() == v2.
seq());
375 for (
auto const&
sle : ledger.
sles)
380 template <
class... Args>
397 env.
app().getNodeFamily());
398 auto const ledger = std::make_shared<Ledger>(
405 ledger->rawInsert(
sle(x));
410 BEAST_EXPECT(
sles(*ledger) ==
list(1, 2, 3));
411 auto e = ledger->stateMap().end();
412 auto b1 = ledger->stateMap().begin();
413 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == e);
414 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(2)) == b1);
416 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(3)) == b1);
418 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(4)) == b1);
419 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(5)) == b1);
420 b1 = ledger->stateMap().begin();
421 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(0)) == b1);
423 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(1)) == b1);
425 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(2)) == b1);
426 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(3)) == e);
431 BEAST_EXPECT(
sles(*ledger) ==
list(2, 4, 6));
432 auto e = ledger->stateMap().end();
433 auto b1 = ledger->stateMap().begin();
434 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == e);
435 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(2)) == e);
436 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(3)) == b1);
437 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(4)) == b1);
439 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(5)) == b1);
440 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(6)) == b1);
442 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(7)) == b1);
443 b1 = ledger->stateMap().begin();
444 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(1)) == b1);
446 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(2)) == b1);
447 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(3)) == b1);
450 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(4)) == b1);
451 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(5)) == b1);
452 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(6)) == e);
453 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(7)) == e);
456 setup({2, 3, 5, 6, 10, 15});
457 BEAST_EXPECT(
sles(*ledger) ==
list(2, 3, 5, 6, 10, 15));
458 auto e = ledger->stateMap().end();
459 auto b = ledger->stateMap().begin();
460 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == e);
461 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(2)) == e);
462 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(3)) == b);
464 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(4)) == b);
465 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(5)) == b);
467 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(6)) == b);
469 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(7)) == b);
470 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(8)) == b);
471 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(9)) == b);
472 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(10)) == b);
474 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(11)) == b);
475 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(12)) == b);
476 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(13)) == b);
477 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(14)) == b);
478 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(15)) == b);
480 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(16)) == b);
481 b = ledger->stateMap().begin();
482 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(0)) == b);
483 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(1)) == b);
485 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(2)) == b);
487 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(3)) == b);
488 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(4)) == b);
490 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(5)) == b);
492 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(6)) == b);
493 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(7)) == b);
494 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(8)) == b);
495 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(9)) == b);
497 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(10)) == b);
498 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(11)) == b);
499 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(12)) == b);
500 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(13)) == b);
501 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(14)) == b);
503 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(15)) == e);
504 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(16)) == e);
508 setup({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
509 13, 14, 15, 16, 20, 25, 30, 32, 33, 34, 35, 36, 37,
510 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 66, 100});
553 auto b = ledger->stateMap().begin();
554 auto e = ledger->stateMap().end();
555 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(0)) == e);
556 BEAST_EXPECT(ledger->stateMap().lower_bound(
uint256(1)) == b);
558 ledger->stateMap().lower_bound(
uint256(5))->key() ==
561 ledger->stateMap().lower_bound(
uint256(15))->key() ==
564 ledger->stateMap().lower_bound(
uint256(16))->key() ==
567 ledger->stateMap().lower_bound(
uint256(19))->key() ==
570 ledger->stateMap().lower_bound(
uint256(20))->key() ==
573 ledger->stateMap().lower_bound(
uint256(24))->key() ==
576 ledger->stateMap().lower_bound(
uint256(31))->key() ==
579 ledger->stateMap().lower_bound(
uint256(32))->key() ==
582 ledger->stateMap().lower_bound(
uint256(40))->key() ==
585 ledger->stateMap().lower_bound(
uint256(47))->key() ==
588 ledger->stateMap().lower_bound(
uint256(48))->key() ==
591 ledger->stateMap().lower_bound(
uint256(64))->key() ==
595 ledger->stateMap().lower_bound(
uint256(90))->key() ==
598 ledger->stateMap().lower_bound(
uint256(96))->key() ==
601 ledger->stateMap().lower_bound(
uint256(100))->key() ==
605 ledger->stateMap().upper_bound(
uint256(0))->key() ==
608 ledger->stateMap().upper_bound(
uint256(5))->key() ==
611 ledger->stateMap().upper_bound(
uint256(15))->key() ==
614 ledger->stateMap().upper_bound(
uint256(16))->key() ==
617 ledger->stateMap().upper_bound(
uint256(18))->key() ==
620 ledger->stateMap().upper_bound(
uint256(20))->key() ==
623 ledger->stateMap().upper_bound(
uint256(31))->key() ==
626 ledger->stateMap().upper_bound(
uint256(32))->key() ==
629 ledger->stateMap().upper_bound(
uint256(47))->key() ==
632 ledger->stateMap().upper_bound(
uint256(48))->key() ==
635 ledger->stateMap().upper_bound(
uint256(53))->key() ==
638 ledger->stateMap().upper_bound(
uint256(66))->key() ==
641 ledger->stateMap().upper_bound(
uint256(70))->key() ==
644 ledger->stateMap().upper_bound(
uint256(85))->key() ==
647 ledger->stateMap().upper_bound(
uint256(98))->key() ==
649 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(100)) == e);
650 BEAST_EXPECT(ledger->stateMap().upper_bound(
uint256(155)) == e);
664 env.
app().getNodeFamily());
665 auto const ledger = std::make_shared<Ledger>(
667 auto setup123 = [&ledger,
this]() {
670 ledger->rawInsert(
sle(1));
671 ledger->rawInsert(
sle(2));
672 ledger->rawInsert(
sle(3));
673 BEAST_EXPECT(
sles(*ledger) ==
list(1, 2, 3));
681 BEAST_EXPECT(
sles(view) ==
list(2, 3, 4, 5));
700 BEAST_EXPECT(
sles(view) ==
list(3, 4, 5));
719 BEAST_EXPECT(
sles(view) ==
list(4, 5));
735 BEAST_EXPECT(
sles(view) ==
list(1, 2, 4, 5));
752 BEAST_EXPECT(
sles(view) ==
list(1, 2, 3));
753 BEAST_EXPECT(
seq(view.
read(
k(1))) == 10);
754 BEAST_EXPECT(
seq(view.
read(
k(2))) == 1);
755 BEAST_EXPECT(
seq(view.
read(
k(3))) == 30);
758 BEAST_EXPECT(
sles(view) ==
list(1, 2));
771 BEAST_EXPECT(
sles(view) ==
list(1, 2, 3, 4, 5));
792 auto const alice =
Account(
"alice");
793 auto const bob =
Account(
"bob");
794 auto const carol =
Account(
"carol");
795 auto const gw =
Account(
"gateway");
796 auto const USD = gw[
"USD"];
797 auto const EUR = gw[
"EUR"];
799 env.
fund(
XRP(10000), alice, bob, carol, gw);
800 env.
trust(USD(100), alice, bob, carol);
803 env(
pay(gw, alice, USD(50)));
804 env(offer(alice,
XRP(5), USD(5)));
826 env(offer(
"alice",
XRP(4), USD(5)));
830 env(
pay(gw, bob, USD(50)));
863 env(
pay(gw, carol, USD(50)));
901 BEAST_EXPECT(carolsXRP ==
XRP(9750));
924 BEAST_EXPECT(gwUSD == USD(314159));
929 BEAST_EXPECT(carolsUSD == USD(50));
936 BEAST_EXPECT(carolsUSD == USD(0));
941 BEAST_EXPECT(carolsUSD == USD(50));
955 auto const gw1 =
Account(
"gw1");
960 auto rdView = env.
closed();
964 env(
rate(gw1, 1.02));
979 auto const alice =
Account(
"alice");
980 auto const bob =
Account(
"bob");
987 auto const rdViewA3 = eA.
closed();
991 auto const rdViewA4 = eA.
closed();
999 eB.fund(
XRP(10000), bob);
1001 auto const rdViewB3 = eB.closed();
1003 eB.fund(
XRP(10000), alice);
1005 auto const rdViewB4 = eB.closed();
1009 BEAST_EXPECT(
areCompatible(*rdViewA3, *rdViewA4, jStream,
""));
1010 BEAST_EXPECT(
areCompatible(*rdViewA4, *rdViewA3, jStream,
""));
1011 BEAST_EXPECT(
areCompatible(*rdViewA4, *rdViewA4, jStream,
""));
1012 BEAST_EXPECT(!
areCompatible(*rdViewA3, *rdViewB4, jStream,
""));
1013 BEAST_EXPECT(!
areCompatible(*rdViewA4, *rdViewB3, jStream,
""));
1014 BEAST_EXPECT(!
areCompatible(*rdViewA4, *rdViewB4, jStream,
""));
1018 auto const& iA3 = rdViewA3->info();
1019 auto const& iA4 = rdViewA4->info();
1021 BEAST_EXPECT(
areCompatible(iA3.hash, iA3.seq, *rdViewA4, jStream,
""));
1022 BEAST_EXPECT(
areCompatible(iA4.hash, iA4.seq, *rdViewA3, jStream,
""));
1023 BEAST_EXPECT(
areCompatible(iA4.hash, iA4.seq, *rdViewA4, jStream,
""));
1024 BEAST_EXPECT(!
areCompatible(iA3.hash, iA3.seq, *rdViewB4, jStream,
""));
1025 BEAST_EXPECT(
areCompatible(iA4.hash, iA4.seq, *rdViewB3, jStream,
""));
1026 BEAST_EXPECT(!
areCompatible(iA4.hash, iA4.seq, *rdViewB4, jStream,
""));
1032 using namespace jtx;
1041 std::make_shared<Ledger>(
1045 env.
app().getNodeFamily());
1046 auto const ledger = std::make_shared<Ledger>(
1049 ledger->rawInsert(
sle(1));
1057 BEAST_EXPECT(!v1.
exists(
k(1)));
1073 BEAST_EXPECT(
k(0).key <
k(1).key);
1094 using namespace jtx;
1099 BEAST_EXPECT(majorities.empty());
1103 for (i = 0; i <= 256; ++i)
1107 if (!majorities.empty())
1113 BEAST_EXPECT(i == 254);
1114 BEAST_EXPECT(majorities.size() >= 5);
1118 BEAST_EXPECT(enableds.empty());
1123 for (i = 0; i <= 256; ++i)
1125 using namespace std::chrono_literals;
1128 if (!enableds.empty())
1131 BEAST_EXPECT(i == 255);
1132 BEAST_EXPECT(enableds.size() >= 5);
1138 testGetAmendments();