206        auto& app = env.
app();
 
  211        auto const localSigningPublicOuter = localSigningKeys.first;
 
  212        auto const localSigningSecret = localSigningKeys.second;
 
  214        auto const localMasterPublic =
 
  220            localSigningPublicOuter,
 
  224        auto format = [](
PublicKey const& publicKey,
 
  225                         char const* comment = 
nullptr) {
 
  237        while (configList.
size() != 8)
 
  242            {format(configList[0]),
 
  243             format(configList[1], 
" Comment"),
 
  244             format(configList[2], 
" Multi Word Comment"),
 
  245             format(configList[3], 
"    Leading Whitespace"),
 
  246             format(configList[4], 
" Trailing Whitespace    "),
 
  247             format(configList[5], 
"    Leading & Trailing Whitespace    "),
 
  250                 "    Leading, Trailing & Internal    Whitespace    "),
 
  251             format(configList[7], 
"    ")});
 
  259                app.config().legacy(
"database_path"),
 
  264                trustedKeys->load({}, emptyCfgKeys, emptyCfgPublishers));
 
  267            BEAST_EXPECT(trustedKeys->load(
 
  268                localSigningPublicOuter, emptyCfgKeys, emptyCfgPublishers));
 
  269            BEAST_EXPECT(trustedKeys->listed(localSigningPublicOuter));
 
  272            BEAST_EXPECT(trustedKeys->load(
 
  273                localSigningPublicOuter, emptyCfgKeys, emptyCfgPublishers));
 
  275            BEAST_EXPECT(trustedKeys->listed(localMasterPublic));
 
  276            BEAST_EXPECT(trustedKeys->listed(localSigningPublicOuter));
 
  285                app.config().legacy(
"database_path"),
 
  288            BEAST_EXPECT(trustedKeys->load({}, cfgKeys, emptyCfgPublishers));
 
  290            for (
auto const& n : configList)
 
  291                BEAST_EXPECT(trustedKeys->listed(n));
 
  298                {format(masterNode1), format(masterNode2, 
" Comment")});
 
  300                trustedKeys->load({}, cfgMasterKeys, emptyCfgPublishers));
 
  301            BEAST_EXPECT(trustedKeys->listed(masterNode1));
 
  302            BEAST_EXPECT(trustedKeys->listed(masterNode2));
 
  306                !trustedKeys->load({}, {
"NotAPublicKey"}, emptyCfgPublishers));
 
  307            BEAST_EXPECT(!trustedKeys->load(
 
  308                {}, {format(randomNode(), 
"!")}, emptyCfgPublishers));
 
  312            BEAST_EXPECT(!trustedKeys->load(
 
  314                {format(randomNode(), 
"!"), format(goodKey)},
 
  315                emptyCfgPublishers));
 
  316            BEAST_EXPECT(!trustedKeys->listed(goodKey));
 
  325                app.config().legacy(
"database_path"),
 
  328            auto const localSigningPublic =
 
  331            BEAST_EXPECT(trustedKeys->load(
 
  332                *localSigningPublic, cfgKeys, emptyCfgPublishers));
 
  334            BEAST_EXPECT(trustedKeys->localPublicKey() == localSigningPublic);
 
  335            BEAST_EXPECT(trustedKeys->listed(*localSigningPublic));
 
  336            for (
auto const& n : configList)
 
  337                BEAST_EXPECT(trustedKeys->listed(n));
 
  346                app.config().legacy(
"database_path"),
 
  350            BEAST_EXPECT(trustedKeys->load(
 
  351                localSigningPublic, cfgKeys, emptyCfgPublishers));
 
  353            BEAST_EXPECT(trustedKeys->localPublicKey() == localSigningPublic);
 
  354            BEAST_EXPECT(trustedKeys->listed(localSigningPublic));
 
  355            for (
auto const& n : configList)
 
  356                BEAST_EXPECT(trustedKeys->listed(n));
 
  365                app.config().legacy(
"database_path"),
 
  370            BEAST_EXPECT(trustedKeys->load(
 
  371                localSigningPublicOuter, cfgKeys, emptyCfgPublishers));
 
  373            BEAST_EXPECT(trustedKeys->localPublicKey() == localMasterPublic);
 
  374            BEAST_EXPECT(trustedKeys->listed(localSigningPublicOuter));
 
  375            BEAST_EXPECT(trustedKeys->listed(localMasterPublic));
 
  376            for (
auto const& n : configList)
 
  377                BEAST_EXPECT(trustedKeys->listed(n));
 
  385                app.config().legacy(
"database_path"),
 
  390            BEAST_EXPECT(!trustedKeys->load({}, emptyCfgKeys, badPublishers));
 
  396            badPublishers.
clear();
 
  397            for (
auto const& key : keys)
 
  400            BEAST_EXPECT(!trustedKeys->load({}, emptyCfgKeys, badPublishers));
 
  401            for (
auto const& key : keys)
 
  402                BEAST_EXPECT(!trustedKeys->trustedPublisher(key));
 
  406            for (
auto const& key : keys)
 
  409            BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers));
 
  410            for (
auto const& key : keys)
 
  411                BEAST_EXPECT(trustedKeys->trustedPublisher(key));
 
  413                trustedKeys->getListThreshold() == keys.size() / 2 + 1);
 
  421                app.config().legacy(
"database_path"),
 
  430            for (
auto const& key : keys)
 
  434            BEAST_EXPECT(trustedKeys->load(
 
  436            for (
auto const& key : keys)
 
  437                BEAST_EXPECT(trustedKeys->trustedPublisher(key));
 
  438            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
  449                app.config().legacy(
"database_path"),
 
  453            auto const pubRevokedPublic =
 
  461                pubRevokedSigning.first,
 
  462                pubRevokedSigning.second,
 
  471            BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers));
 
  473            BEAST_EXPECT(!trustedKeys->trustedPublisher(pubRevokedPublic));
 
  474            BEAST_EXPECT(trustedKeys->trustedPublisher(legitKey1));
 
  475            BEAST_EXPECT(trustedKeys->trustedPublisher(legitKey2));
 
  477            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
  488                app.config().legacy(
"database_path"),
 
  492            auto const pubRevokedPublic =
 
  500                pubRevokedSigning.first,
 
  501                pubRevokedSigning.second,
 
  509            BEAST_EXPECT(trustedKeys->load(
 
  512            BEAST_EXPECT(!trustedKeys->trustedPublisher(pubRevokedPublic));
 
  513            BEAST_EXPECT(trustedKeys->trustedPublisher(legitKey));
 
  515            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 
  523        using namespace std::chrono_literals;
 
  527        auto checkAvailable =
 
  529                auto const& trustedKeys,
 
  530                auto const& hexPublic,
 
  535                auto const available = trustedKeys->getAvailable(hexPublic);
 
  541                    BEAST_EXPECT(a[jss::public_key] == hexPublic);
 
  542                    BEAST_EXPECT(a[jss::manifest] == 
manifest);
 
  545                    BEAST_EXPECT(a[jss::version] == version);
 
  548                        BEAST_EXPECT(expected.size() == 1);
 
  549                        BEAST_EXPECT(a[jss::blob] == expected[0].first);
 
  550                        BEAST_EXPECT(a[jss::signature] == expected[0].second);
 
  551                        BEAST_EXPECT(!a.isMember(jss::blobs_v2));
 
  553                    else if (BEAST_EXPECT(a.isMember(jss::blobs_v2)))
 
  555                        BEAST_EXPECT(!a.isMember(jss::blob));
 
  556                        BEAST_EXPECT(!a.isMember(jss::signature));
 
  557                        auto const& blobs_v2 = a[jss::blobs_v2];
 
  559                            blobs_v2.isArray() &&
 
  560                            blobs_v2.size() == expected.size());
 
  562                        for (
unsigned int i = 0; i < expected.size(); ++i)
 
  565                                blobs_v2[i][jss::blob] == expected[i].first);
 
  567                                blobs_v2[i][jss::signature] ==
 
  576        auto& app = env.
app();
 
  581            app.config().legacy(
"database_path"),
 
  586                for (
auto const& val : list)
 
  588                    BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
  589                    BEAST_EXPECT(trustedKeys->listed(val.signingPublic));
 
  593        auto expectUntrusted =
 
  595                for (
auto const& val : list)
 
  597                    BEAST_EXPECT(!trustedKeys->listed(val.masterPublic));
 
  598                    BEAST_EXPECT(!trustedKeys->listed(val.signingPublic));
 
  603        auto const publisherPublic =
 
  605        auto const hexPublic =
 
  606            strHex(publisherPublic.begin(), publisherPublic.end());
 
  611            pubSigningKeys1.first,
 
  612            pubSigningKeys1.second,
 
  618        BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgKeys1));
 
  621            auto constexpr listSize = 20;
 
  622            auto constexpr numLists = 9;
 
  625            for (
auto i = 1; i <= numLists; ++i)
 
  627                auto& list = lists[i];
 
  628                list.reserve(listSize);
 
  629                while (list.size() < listSize)
 
  637        auto const version = 1;
 
  638        auto const sequence1 = 1;
 
  643        auto const expiredSig = 
signList(expiredblob, pubSigningKeys1);
 
  646        auto const sequence2 = 2;
 
  649        auto const sig2 = 
signList(blob2, pubSigningKeys1);
 
  652            trustedKeys->applyLists(
 
  655                {{expiredblob, expiredSig, {}}, {blob2, sig2, {}}},
 
  661        expectTrusted(lists.at(2));
 
  664            trustedKeys, hexPublic, manifest1, version, {{blob2, sig2}});
 
  667        auto const version2 = 2;
 
  668        auto const sequence7 = 7;
 
  669        auto const effective7 = validUntil - 60s;
 
  670        auto const expiration7 = effective7 + 3600s;
 
  671        auto const blob7 = makeList(
 
  674            expiration7.time_since_epoch().count(),
 
  675            effective7.time_since_epoch().count());
 
  676        auto const sig7 = signList(blob7, pubSigningKeys1);
 
  678        auto const sequence8 = 8;
 
  679        auto const effective8 = expiration7 - 60s;
 
  680        auto const expiration8 = effective8 + 3600s;
 
  681        auto const blob8 = makeList(
 
  684            expiration8.time_since_epoch().count(),
 
  685            effective8.time_since_epoch().count());
 
  686        auto const sig8 = signList(blob8, pubSigningKeys1);
 
  689            trustedKeys->applyLists(
 
  692                {{blob7, sig7, {}}, {blob8, sig8, {}}},
 
  695            ListDisposition::pending,
 
  696            ListDisposition::pending);
 
  698        expectUntrusted(lists.at(7));
 
  699        expectUntrusted(lists.at(8));
 
  702        auto const sequence6 = 6;
 
  703        auto const effective6 = effective7 - 60s;
 
  704        auto const expiration6 = effective6 + 3600s;
 
  705        auto const blob6 = makeList(
 
  708            expiration6.time_since_epoch().count(),
 
  709            effective6.time_since_epoch().count());
 
  710        auto const sig6 = signList(blob6, pubSigningKeys1);
 
  713        auto const sequence6a = 5;
 
  714        auto const effective6a = effective6 + 60s;
 
  715        auto const expiration6a = effective6a + 3600s;
 
  716        auto const blob6a = makeList(
 
  719            expiration6a.time_since_epoch().count(),
 
  720            effective6a.time_since_epoch().count());
 
  721        auto const sig6a = signList(blob6a, pubSigningKeys1);
 
  724            trustedKeys->applyLists(
 
  727                {{blob6a, sig6a, {}}, {blob6, sig6, {}}},
 
  730            ListDisposition::pending,
 
  731            ListDisposition::pending);
 
  733        expectUntrusted(lists.at(6));
 
  734        expectTrusted(lists.at(2));
 
  739            trustedKeys->applyLists(
 
  742                {{blob7, sig7, {}}, {blob6, sig6, {}}},
 
  745            ListDisposition::known_sequence,
 
  746            ListDisposition::known_sequence);
 
  748        expectUntrusted(lists.at(6));
 
  749        expectUntrusted(lists.at(7));
 
  750        expectTrusted(lists.at(2));
 
  754            trustedKeys->applyLists(
 
  755                "", version, {{blob7, sig7, {}}, {blob6, sig6, {}}}, siteUri),
 
  757            ListDisposition::invalid,
 
  758            ListDisposition::invalid);
 
  761            trustedKeys->applyLists(
 
  764                {{blob7, sig7, {}}, {blob6, sig6, {}}},
 
  767            ListDisposition::invalid,
 
  768            ListDisposition::invalid);
 
  771        auto const untrustedManifest = 
base64_encode(makeManifestString(
 
  774            pubSigningKeys1.first,
 
  775            pubSigningKeys1.second,
 
  779            trustedKeys->applyLists(
 
  780                untrustedManifest, version, {{blob2, sig2, {}}}, siteUri),
 
  782            ListDisposition::untrusted,
 
  783            ListDisposition::untrusted);
 
  786        auto const badVersion = 666;
 
  788            trustedKeys->applyLists(
 
  789                manifest1, badVersion, {{blob2, sig2, {}}}, siteUri),
 
  791            ListDisposition::unsupported_version,
 
  792            ListDisposition::unsupported_version);
 
  795        auto const sequence3 = 3;
 
  796        auto const blob3 = makeList(
 
  797            lists.at(3), sequence3, validUntil.time_since_epoch().count());
 
  798        auto const sig3 = signList(blob3, pubSigningKeys1);
 
  801            trustedKeys->applyLists(
 
  802                manifest1, version, {{blob3, sig3, {}}}, siteUri),
 
  804            ListDisposition::accepted,
 
  805            ListDisposition::accepted);
 
  807        expectUntrusted(lists.at(1));
 
  808        expectUntrusted(lists.at(2));
 
  809        expectTrusted(lists.at(3));
 
  818            {{blob3, sig3}, {blob6, sig6}, {blob7, sig7}, {blob8, sig8}});
 
  822            trustedKeys->applyLists(
 
  825                {{blob2, sig2, {}}, {blob3, sig3, {}}},
 
  828            ListDisposition::stale,
 
  829            ListDisposition::same_sequence);
 
  833        auto const pubSigningKeys2 = 
randomKeyPair(KeyType::secp256k1);
 
  837            pubSigningKeys2.first,
 
  838            pubSigningKeys2.second,
 
  841        auto const sequence4 = 4;
 
  842        auto const blob4 = makeList(
 
  843            lists.at(4), sequence4, validUntil.time_since_epoch().count());
 
  844        auto const sig4 = signList(blob4, pubSigningKeys2);
 
  847            trustedKeys->applyLists(
 
  850                {{blob2, sig2, manifest1},
 
  851                 {blob3, sig3, manifest1},
 
  855            ListDisposition::stale,
 
  856            ListDisposition::accepted);
 
  858        expectUntrusted(lists.at(2));
 
  859        expectUntrusted(lists.at(3));
 
  860        expectTrusted(lists.at(4));
 
  867            {{blob4, sig4}, {blob6, sig6}, {blob7, sig7}, {blob8, sig8}});
 
  869        auto const sequence5 = 5;
 
  870        auto const blob5 = makeList(
 
  871            lists.at(5), sequence5, validUntil.time_since_epoch().count());
 
  872        auto const badSig = signList(blob5, pubSigningKeys1);
 
  874            trustedKeys->applyLists(
 
  875                manifest1, version, {{blob5, badSig, {}}}, siteUri),
 
  877            ListDisposition::invalid,
 
  878            ListDisposition::invalid);
 
  880        expectUntrusted(lists.at(2));
 
  881        expectUntrusted(lists.at(3));
 
  882        expectTrusted(lists.at(4));
 
  883        expectUntrusted(lists.at(5));
 
  887            trustedKeys->applyLists(
 
  890                {{blob7, sig7, {}}, {blob8, sig8, {}}},
 
  893            ListDisposition::invalid,
 
  894            ListDisposition::invalid);
 
  896        expectTrusted(lists.at(4));
 
  897        expectUntrusted(lists.at(7));
 
  898        expectUntrusted(lists.at(8));
 
  903        trustedKeys->updateTrusted(
 
  908            env.app().getHashRouter());
 
  910        expectUntrusted(lists.at(3));
 
  911        expectTrusted(lists.at(6));
 
  918            {{blob6, sig6}, {blob7, sig7}, {blob8, sig8}});
 
  924        env.timeKeeper().set(effective8);
 
  925        trustedKeys->updateTrusted(
 
  930            env.app().getHashRouter());
 
  932        expectUntrusted(lists.at(6));
 
  933        expectUntrusted(lists.at(7));
 
  934        expectTrusted(lists.at(8));
 
  936        checkAvailable(trustedKeys, hexPublic, manifest2, 2, {{blob8, sig8}});
 
  942        auto const sig8_2 = signList(blob8, pubSigningKeys2);
 
  945            trustedKeys->applyLists(
 
  948                {{blob8, sig8, manifest1}, {blob8, sig8_2, {}}},
 
  951            ListDisposition::invalid,
 
  952            ListDisposition::same_sequence);
 
  954        expectTrusted(lists.at(8));
 
  956        checkAvailable(trustedKeys, hexPublic, manifest2, 2, {{blob8, sig8}});
 
  960        auto const signingKeysMax = 
randomKeyPair(KeyType::secp256k1);
 
  962            makeRevocationString(publisherPublic, publisherSecret));
 
  964        auto const sequence9 = 9;
 
  965        auto const blob9 = makeList(
 
  966            lists.at(9), sequence9, validUntil.time_since_epoch().count());
 
  967        auto const sig9 = signList(blob9, signingKeysMax);
 
  970            trustedKeys->applyLists(
 
  971                maxManifest, version, {{blob9, sig9, {}}}, siteUri),
 
  973            ListDisposition::untrusted,
 
  974            ListDisposition::untrusted);
 
  976        BEAST_EXPECT(!trustedKeys->trustedPublisher(publisherPublic));
 
  977        for (
auto const& [num, list] : lists)
 
  980            expectUntrusted(list);
 
  983        checkAvailable(trustedKeys, hexPublic, manifest2, 0, {});
 
 
 1125        testcase(
"Update trusted");
 
 1127        std::string const siteUri = 
"testUpdateTrusted.test";
 
 1131        auto& app = env.
app();
 
 1136            app.config().legacy(
"database_path"),
 
 1148            while (cfgKeys.
size() != maxKeys)
 
 1150                auto const valKey = randomNode();
 
 1152                if (cfgKeys.
size() <= maxKeys - 5)
 
 1159                trustedKeysOuter->load({}, cfgKeys, cfgPublishersOuter));
 
 1163            TrustChanges changes = trustedKeysOuter->updateTrusted(
 
 1164                activeValidatorsOuter,
 
 1170            for (
auto const& val : unseenValidators)
 
 1171                activeValidatorsOuter.
emplace(val);
 
 1173            BEAST_EXPECT(changes.
added == activeValidatorsOuter);
 
 1174            BEAST_EXPECT(changes.
removed.empty());
 
 1176                trustedKeysOuter->quorum() == 
std::ceil(cfgKeys.
size() * 0.8f));
 
 1177            for (
auto const& val : cfgKeys)
 
 1179                if (
auto const valKey =
 
 1180                        parseBase58<PublicKey>(TokenType::NodePublic, val))
 
 1182                    BEAST_EXPECT(trustedKeysOuter->listed(*valKey));
 
 1183                    BEAST_EXPECT(trustedKeysOuter->trusted(*valKey));
 
 1189            changes = trustedKeysOuter->updateTrusted(
 
 1190                activeValidatorsOuter,
 
 1195            BEAST_EXPECT(changes.
added.empty());
 
 1196            BEAST_EXPECT(changes.
removed.empty());
 
 1198                trustedKeysOuter->quorum() == 
std::ceil(cfgKeys.
size() * 0.8f));
 
 1203            auto const masterPublic =
 
 1207                {
toBase58(TokenType::NodePublic, masterPublic)});
 
 1210                trustedKeysOuter->load({}, cfgKeys, cfgPublishersOuter));
 
 1212            auto const signingKeys1 = 
randomKeyPair(KeyType::secp256k1);
 
 1213            auto const signingPublic1 = signingKeys1.first;
 
 1217            TrustChanges changes = trustedKeysOuter->updateTrusted(
 
 1218                activeValidatorsOuter,
 
 1223            BEAST_EXPECT(changes.
added == asNodeIDs({masterPublic}));
 
 1224            BEAST_EXPECT(changes.
removed.empty());
 
 1226                trustedKeysOuter->quorum() == 
std::ceil((maxKeys + 1) * 0.8f));
 
 1227            BEAST_EXPECT(trustedKeysOuter->listed(masterPublic));
 
 1228            BEAST_EXPECT(trustedKeysOuter->trusted(masterPublic));
 
 1229            BEAST_EXPECT(!trustedKeysOuter->listed(signingPublic1));
 
 1230            BEAST_EXPECT(!trustedKeysOuter->trusted(signingPublic1));
 
 1237                signingKeys1.second,
 
 1242                ManifestDisposition::accepted);
 
 1243            BEAST_EXPECT(trustedKeysOuter->listed(masterPublic));
 
 1244            BEAST_EXPECT(trustedKeysOuter->trusted(masterPublic));
 
 1245            BEAST_EXPECT(trustedKeysOuter->listed(signingPublic1));
 
 1246            BEAST_EXPECT(trustedKeysOuter->trusted(signingPublic1));
 
 1250            auto const signingKeys2 = 
randomKeyPair(KeyType::secp256k1);
 
 1251            auto const signingPublic2 = signingKeys2.first;
 
 1256                signingKeys2.second,
 
 1260                ManifestDisposition::accepted);
 
 1261            BEAST_EXPECT(trustedKeysOuter->listed(masterPublic));
 
 1262            BEAST_EXPECT(trustedKeysOuter->trusted(masterPublic));
 
 1263            BEAST_EXPECT(trustedKeysOuter->listed(signingPublic2));
 
 1264            BEAST_EXPECT(trustedKeysOuter->trusted(signingPublic2));
 
 1265            BEAST_EXPECT(!trustedKeysOuter->listed(signingPublic1));
 
 1266            BEAST_EXPECT(!trustedKeysOuter->trusted(signingPublic1));
 
 1269            auto const signingKeysMax = 
randomKeyPair(KeyType::secp256k1);
 
 1270            auto const signingPublicMax = signingKeysMax.first;
 
 1273                makeRevocationString(masterPublic, masterPrivate));
 
 1275            BEAST_EXPECT(mMax->revoked());
 
 1278                ManifestDisposition::accepted);
 
 1280                manifestsOuter.
getSigningKey(masterPublic) == masterPublic);
 
 1281            BEAST_EXPECT(manifestsOuter.
revoked(masterPublic));
 
 1284            BEAST_EXPECT(trustedKeysOuter->listed(masterPublic));
 
 1285            BEAST_EXPECT(trustedKeysOuter->trusted(masterPublic));
 
 1287            changes = trustedKeysOuter->updateTrusted(
 
 1288                activeValidatorsOuter,
 
 1293            BEAST_EXPECT(changes.
removed == asNodeIDs({masterPublic}));
 
 1294            BEAST_EXPECT(changes.
added.empty());
 
 1296                trustedKeysOuter->quorum() == 
std::ceil(maxKeys * 0.8f));
 
 1297            BEAST_EXPECT(trustedKeysOuter->listed(masterPublic));
 
 1298            BEAST_EXPECT(!trustedKeysOuter->trusted(masterPublic));
 
 1299            BEAST_EXPECT(!trustedKeysOuter->listed(signingPublicMax));
 
 1300            BEAST_EXPECT(!trustedKeysOuter->trusted(signingPublicMax));
 
 1301            BEAST_EXPECT(!trustedKeysOuter->listed(signingPublic2));
 
 1302            BEAST_EXPECT(!trustedKeysOuter->trusted(signingPublic2));
 
 1303            BEAST_EXPECT(!trustedKeysOuter->listed(signingPublic1));
 
 1304            BEAST_EXPECT(!trustedKeysOuter->trusted(signingPublic1));
 
 1313                app.config().legacy(
"database_path"),
 
 1316            auto const publisherPublic =
 
 1322            BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgPublishers));
 
 1325                activeValidatorsOuter,
 
 1330            BEAST_EXPECT(changes.
removed.empty());
 
 1331            BEAST_EXPECT(changes.
added.empty());
 
 1333                trustedKeys->quorum() ==
 
 1343                app.config().legacy(
"database_path"),
 
 1346            auto const masterPublic =
 
 1349                {
toBase58(TokenType::NodePublic, masterPublic)});
 
 1352            auto const publisher1Public =
 
 1355            auto const publisher2Public =
 
 1361                trustedKeys->load({}, cfgKeys, cfgPublishers, 
std::size_t(2)));
 
 1364                activeValidatorsOuter,
 
 1369            BEAST_EXPECT(changes.
removed.empty());
 
 1370            BEAST_EXPECT(changes.
added.size() == 1);
 
 1371            BEAST_EXPECT(trustedKeys->listed(masterPublic));
 
 1372            BEAST_EXPECT(trustedKeys->trusted(masterPublic));
 
 1382                app.config().legacy(
"database_path"),
 
 1393            while (cfgKeys.
size() < n)
 
 1395                auto const valKey = randomNode();
 
 1404            BEAST_EXPECT(trustedKeys->load({}, cfgKeys, cfgPublishersOuter));
 
 1412            BEAST_EXPECT(changes.
removed.empty());
 
 1413            BEAST_EXPECT(changes.
added == expectedTrusted);
 
 1414            BEAST_EXPECT(trustedKeys->quorum() == minQuorum);
 
 1417            activeValidators.
emplace(toBeSeen);
 
 1418            changes = trustedKeys->updateTrusted(
 
 1424            BEAST_EXPECT(changes.
removed.empty());
 
 1425            BEAST_EXPECT(changes.
added.empty());
 
 1426            BEAST_EXPECT(trustedKeys->quorum() == minQuorum);
 
 1434                app.config().legacy(
"database_path"),
 
 1438            auto const publisherKeys = 
randomKeyPair(KeyType::secp256k1);
 
 1439            auto const pubSigningKeys = 
randomKeyPair(KeyType::secp256k1);
 
 1441                publisherKeys.first,
 
 1442                publisherKeys.second,
 
 1443                pubSigningKeys.first,
 
 1444                pubSigningKeys.second,
 
 1449            BEAST_EXPECT(trustedKeys->load({}, emptyCfgKeys, cfgKeys));
 
 1453                asNodeIDs({list[0].masterPublic, list[1].masterPublic}));
 
 1456            auto const version = 1;
 
 1457            auto const sequence = 1;
 
 1458            using namespace std::chrono_literals;
 
 1463            auto const sig = signList(blob, pubSigningKeys);
 
 1466                ListDisposition::accepted ==
 
 1468                    ->applyLists(
manifest, version, {{blob, 
sig, {}}}, siteUri)
 
 1469                    .bestDisposition());
 
 1477            BEAST_EXPECT(changes.
removed.empty());
 
 1478            BEAST_EXPECT(changes.
added == activeValidators);
 
 1481                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 1482                BEAST_EXPECT(trustedKeys->trusted(val.signingPublic));
 
 1484            BEAST_EXPECT(trustedKeys->quorum() == 2);
 
 1487            changes = trustedKeys->updateTrusted(
 
 1493            BEAST_EXPECT(changes.
removed == activeValidators);
 
 1494            BEAST_EXPECT(changes.
added.empty());
 
 1495            BEAST_EXPECT(!trustedKeys->trusted(list[0].masterPublic));
 
 1496            BEAST_EXPECT(!trustedKeys->trusted(list[1].masterPublic));
 
 1498                trustedKeys->quorum() ==
 
 1504            auto const sequence2 = 2;
 
 1507            auto const blob2 = makeList(
 
 1509            auto const sig2 = signList(blob2, pubSigningKeys);
 
 1512                ListDisposition::accepted ==
 
 1515                        manifest, version, {{blob2, sig2, {}}}, siteUri)
 
 1516                    .bestDisposition());
 
 1518            changes = trustedKeys->updateTrusted(
 
 1524            BEAST_EXPECT(changes.
removed.empty());
 
 1527                asNodeIDs({list2[0].masterPublic, list2[1].masterPublic}));
 
 1530                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 1531                BEAST_EXPECT(trustedKeys->trusted(val.signingPublic));
 
 1533            BEAST_EXPECT(!trustedKeys->trusted(list[1].masterPublic));
 
 1534            BEAST_EXPECT(!trustedKeys->trusted(list[1].signingPublic));
 
 1535            BEAST_EXPECT(trustedKeys->quorum() == 2);
 
 1543                app.config().legacy(
"database_path"),
 
 1555                auto const valKey = randomNode();
 
 1559                BEAST_EXPECT(trustedKeys->load({}, cfgKeys, cfgPublishers));
 
 1566                BEAST_EXPECT(changes.
removed.empty());
 
 1567                BEAST_EXPECT(changes.
added == asNodeIDs({valKey}));
 
 1570                for (
auto const& key : activeKeys)
 
 1571                    BEAST_EXPECT(trustedKeys->trusted(key));
 
 1580                app.config().legacy(
"database_path"),
 
 1583            auto const localKey = randomNode();
 
 1588                toBase58(TokenType::NodePublic, localKey)};
 
 1591            while (cfgKeys.size() < cfgKeys.capacity())
 
 1593                auto const valKey = randomNode();
 
 1594                cfgKeys.push_back(
toBase58(TokenType::NodePublic, valKey));
 
 1599                    trustedKeys->load(localKey, cfgKeys, cfgPublishers));
 
 1606                BEAST_EXPECT(changes.
removed.empty());
 
 1607                if (cfgKeys.size() > 2)
 
 1608                    BEAST_EXPECT(changes.
added == asNodeIDs({valKey}));
 
 1611                        changes.
added == asNodeIDs({localKey, valKey}));
 
 1614                    trustedKeys->quorum() == 
std::ceil(cfgKeys.size() * 0.8f));
 
 1616                for (
auto const& key : activeKeys)
 
 1617                    BEAST_EXPECT(trustedKeys->trusted(key));
 
 1627                app.config().legacy(
"database_path"),
 
 1634            while (valKeys.
size() != maxKeys)
 
 1644            constexpr static int publishers = 3;
 
 1647                    decltype(valKeys)::const_iterator,
 
 1656            auto addPublishedList = [&, 
this](
int i) {
 
 1658                auto const publisherPublic =
 
 1660                auto const pubSigningKeys = 
randomKeyPair(KeyType::secp256k1);
 
 1664                    pubSigningKeys.first,
 
 1665                    pubSigningKeys.second,
 
 1669                    {
strHex(publisherPublic)});
 
 1673                BEAST_EXPECT(trustedKeys->load(
 
 1674                    {}, emptyCfgKeys, cfgPublishers, 
std::size_t(1)));
 
 1676                auto const version = 1;
 
 1677                auto const sequence = 1;
 
 1678                using namespace std::chrono_literals;
 
 1682                    locals[i].first, locals[i].second};
 
 1683                auto const blob = makeList(
 
 1685                auto const sig = signList(blob, pubSigningKeys);
 
 1688                    ListDisposition::accepted ==
 
 1692                        .bestDisposition());
 
 1696            for (
auto i = 0; i < publishers; ++i)
 
 1697                addPublishedList(i);
 
 1698            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 1711            for (
auto const& val : valKeys)
 
 1713                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 1716            BEAST_EXPECT(changes.
added == added);
 
 1717            BEAST_EXPECT(changes.
removed.empty());
 
 1726                app.config().legacy(
"database_path"),
 
 1733            while (valKeys.
size() != maxKeys)
 
 1745            constexpr static int publishers = 3;
 
 1748                    decltype(valKeys)::const_iterator,
 
 1757            auto addPublishedList = [&, 
this](
 
 1762                auto const publisherPublic =
 
 1764                auto const pubSigningKeys = 
randomKeyPair(KeyType::secp256k1);
 
 1768                    pubSigningKeys.first,
 
 1769                    pubSigningKeys.second,
 
 1773                    {
strHex(publisherPublic)});
 
 1777                    trustedKeys->load({}, emptyCfgKeys, cfgPublishers));
 
 1779                auto const version = 1;
 
 1780                auto const sequence = 1;
 
 1781                using namespace std::chrono_literals;
 
 1788                    validUntil1 = validUntil;
 
 1790                    validUntil2 = validUntil;
 
 1792                    locals[i].first, locals[i].second};
 
 1793                auto const blob = makeList(
 
 1795                auto const sig = signList(blob, pubSigningKeys);
 
 1798                    ListDisposition::accepted ==
 
 1802                        .bestDisposition());
 
 1808            for (
auto i = 0; i < publishers; ++i)
 
 1809                addPublishedList(i, validUntil1, validUntil2);
 
 1810            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 1820                trustedKeys->quorum() ==
 
 1823            for (
auto const& val : valKeys)
 
 1824                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 1829                auto const& val = valKeys[i];
 
 1830                if (i >= 1 && i < maxKeys - 2)
 
 1832                    BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 1836                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 1838            BEAST_EXPECT(changes.
added == added);
 
 1839            BEAST_EXPECT(changes.
removed.empty());
 
 1843            changes = trustedKeys->updateTrusted(
 
 1851                trustedKeys->quorum() ==
 
 1854            for (
auto const& val : valKeys)
 
 1855                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 1860                auto const& val = valKeys[i];
 
 1861                if (i >= 2 && i < maxKeys - 4)
 
 1862                    BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 1865                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 1866                    if (i >= 1 && i < maxKeys - 2)
 
 1871            BEAST_EXPECT(changes.
added.empty());
 
 1872            BEAST_EXPECT(changes.
removed == removed);
 
 1876            changes = trustedKeys->updateTrusted(
 
 1884                trustedKeys->quorum() ==
 
 1890                auto const& val = valKeys[i];
 
 1891                if (i < maxKeys - 4)
 
 1892                    BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 1894                    BEAST_EXPECT(!trustedKeys->listed(val.masterPublic));
 
 1896                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 1897                if (i >= 2 && i < maxKeys - 4)
 
 1901            BEAST_EXPECT(changes.
added.empty());
 
 1902            BEAST_EXPECT(changes.
removed == removed);
 
 
 2347        testcase(
"Build and split messages");
 
 2350        auto extractHeader = [
this](
Message& message) {
 
 2351            auto const& buffer =
 
 2352                message.getBuffer(compression::Compressed::Off);
 
 2354            boost::beast::multi_buffer buffers;
 
 2357            auto start = buffer.begin();
 
 2358            auto end = buffer.end();
 
 2360            buffers.commit(boost::asio::buffer_copy(
 
 2361                buffers.prepare(slice.
size()), boost::asio::buffer(slice)));
 
 2363            boost::system::error_code ec;
 
 2365                detail::parseMessageHeader(ec, buffers.data(), buffers.size());
 
 2369        auto extractProtocolMessage1 = [
this,
 
 2370                                        &extractHeader](
Message& message) {
 
 2371            auto [header, buffers] = extractHeader(message);
 
 2372            if (BEAST_EXPECT(header) &&
 
 2373                BEAST_EXPECT(header->message_type == protocol::mtVALIDATORLIST))
 
 2376                    detail::parseMessageContent<protocol::TMValidatorList>(
 
 2377                        *header, buffers.data());
 
 2383        auto extractProtocolMessage2 = [
this,
 
 2384                                        &extractHeader](
Message& message) {
 
 2385            auto [header, buffers] = extractHeader(message);
 
 2386            if (BEAST_EXPECT(header) &&
 
 2388                    header->message_type ==
 
 2389                    protocol::mtVALIDATORLISTCOLLECTION))
 
 2391                auto const msg = detail::parseMessageContent<
 
 2392                    protocol::TMValidatorListCollection>(
 
 2393                    *header, buffers.data());
 
 2399        auto verifyMessage =
 
 2402             &extractProtocolMessage1,
 
 2403             &extractProtocolMessage2](
 
 2406                auto const& blobInfos,
 
 2407                auto const& messages,
 
 2410                BEAST_EXPECT(messages.size() == expectedInfo.size());
 
 2411                auto msgIter = expectedInfo.begin();
 
 2412                for (
auto const& messageWithHash : messages)
 
 2414                    if (!BEAST_EXPECT(msgIter != expectedInfo.end()))
 
 2416                    if (!BEAST_EXPECT(messageWithHash.message))
 
 2418                    auto const& expectedSeqs = msgIter->second;
 
 2419                    auto seqIter = expectedSeqs.begin();
 
 2421                        messageWithHash.message
 
 2422                            ->getBuffer(compression::Compressed::Off)
 
 2425                    BEAST_EXPECT(size == msgIter->first);
 
 2426                    if (expectedSeqs.size() == 1)
 
 2429                            extractProtocolMessage1(*messageWithHash.message);
 
 2430                        auto const expectedVersion = 1;
 
 2431                        if (BEAST_EXPECT(msg))
 
 2433                            BEAST_EXPECT(msg->version() == expectedVersion);
 
 2434                            if (!BEAST_EXPECT(seqIter != expectedSeqs.end()))
 
 2436                            auto const& expectedBlob = blobInfos.at(*seqIter);
 
 2438                                (*seqIter < manifestCutoff) ==
 
 2439                                !!expectedBlob.manifest);
 
 2440                            auto const expectedManifest =
 
 2441                                *seqIter < manifestCutoff &&
 
 2442                                    expectedBlob.manifest
 
 2443                                ? *expectedBlob.manifest
 
 2445                            BEAST_EXPECT(msg->manifest() == expectedManifest);
 
 2446                            BEAST_EXPECT(msg->blob() == expectedBlob.blob);
 
 2448                                msg->signature() == expectedBlob.signature);
 
 2450                            BEAST_EXPECT(seqIter == expectedSeqs.end());
 
 2453                                messageWithHash.hash ==
 
 2457                                    expectedBlob.signature,
 
 2464                        hashingBlobs.
reserve(msgIter->second.size());
 
 2467                            extractProtocolMessage2(*messageWithHash.message);
 
 2468                        if (BEAST_EXPECT(msg))
 
 2470                            BEAST_EXPECT(msg->version() == version);
 
 2471                            BEAST_EXPECT(msg->manifest() == 
manifest);
 
 2472                            for (
auto const& blobInfo : msg->blobs())
 
 2475                                        seqIter != expectedSeqs.end()))
 
 2477                                auto const& expectedBlob =
 
 2478                                    blobInfos.at(*seqIter);
 
 2481                                    blobInfo.has_manifest() ==
 
 2482                                    !!expectedBlob.manifest);
 
 2484                                    blobInfo.has_manifest() ==
 
 2485                                    (*seqIter < manifestCutoff));
 
 2487                                if (*seqIter < manifestCutoff)
 
 2489                                        blobInfo.manifest() ==
 
 2490                                        *expectedBlob.manifest);
 
 2492                                    blobInfo.blob() == expectedBlob.blob);
 
 2494                                    blobInfo.signature() ==
 
 2495                                    expectedBlob.signature);
 
 2498                            BEAST_EXPECT(seqIter == expectedSeqs.end());
 
 2501                            messageWithHash.hash ==
 
 2506                BEAST_EXPECT(msgIter == expectedInfo.end());
 
 2508        auto verifyBuildMessages =
 
 2513                BEAST_EXPECT(result.
first == expectedSequence);
 
 2514                BEAST_EXPECT(result.
second == expectedSize);
 
 2520        auto const blobInfos = [manifestCutoff = manifestCutoff]() {
 
 2523            for (
auto seq : {5, 6, 7, 10, 12})
 
 2527                s << 
"This is not a blob with sequence " << 
seq;
 
 2530                s << 
"This is not a signature for sequence " << 
seq;
 
 2531                b.signature = s.
str();
 
 2532                if (
seq < manifestCutoff)
 
 2536                    s << 
"This is not manifest " << 
seq;
 
 2537                    b.manifest = s.
str();
 
 2542        auto const maxSequence = blobInfos.
rbegin()->first;
 
 2543        BEAST_EXPECT(maxSequence == 12);
 
 2550        verifyBuildMessages(
 
 2551            ValidatorList::buildValidatorListMessages(
 
 2552                1, 8, maxSequence, version, 
manifest, blobInfos, messages),
 
 2555        BEAST_EXPECT(messages.size() == 0);
 
 2561        messages.emplace_back();
 
 2562        verifyBuildMessages(
 
 2563            ValidatorList::buildValidatorListMessages(
 
 2564                1, 3, maxSequence, version, 
manifest, blobInfos, messages),
 
 2567        BEAST_EXPECT(messages.size() == 1 && !messages.front().message);
 
 2571        verifyBuildMessages(
 
 2572            ValidatorList::buildValidatorListMessages(
 
 2573                1, 3, maxSequence, version, 
manifest, blobInfos, messages),
 
 2576        if (BEAST_EXPECT(messages.size() == 1) &&
 
 2577            BEAST_EXPECT(messages.front().message))
 
 2579            auto const& messageWithHash = messages.front();
 
 2580            auto const msg = extractProtocolMessage1(*messageWithHash.message);
 
 2582                messageWithHash.message->getBuffer(compression::Compressed::Off)
 
 2585            BEAST_EXPECT(size == 108);
 
 2586            auto const& expected = blobInfos.at(5);
 
 2587            if (BEAST_EXPECT(msg))
 
 2589                BEAST_EXPECT(msg->version() == 1);
 
 2590                BEAST_EXPECT(msg->manifest() == *expected.manifest);
 
 2591                BEAST_EXPECT(msg->blob() == expected.blob);
 
 2592                BEAST_EXPECT(msg->signature() == expected.signature);
 
 2595                messageWithHash.hash ==
 
 2597                    *expected.manifest, expected.blob, expected.signature, 1));
 
 2605        verifyBuildMessages(
 
 2606            ValidatorList::buildValidatorListMessages(
 
 2616        BEAST_EXPECT(messages.size() == 0);
 
 2622        messages.emplace_back();
 
 2623        verifyBuildMessages(
 
 2624            ValidatorList::buildValidatorListMessages(
 
 2625                2, 3, maxSequence, version, 
manifest, blobInfos, messages),
 
 2628        BEAST_EXPECT(messages.size() == 1 && !messages.front().message);
 
 2632        verifyBuildMessages(
 
 2633            ValidatorList::buildValidatorListMessages(
 
 2634                2, 5, maxSequence, version, 
manifest, blobInfos, messages),
 
 2638            version, 
manifest, blobInfos, messages, {{372, {6, 7, 10, 12}}});
 
 2644        verifyBuildMessages(
 
 2645            ValidatorList::buildValidatorListMessages(
 
 2646                2, 5, maxSequence, version, 
manifest, blobInfos, messages, 300),
 
 2654            {{212, {6, 7}}, {192, {10, 12}}});
 
 2659        verifyBuildMessages(
 
 2660            ValidatorList::buildValidatorListMessages(
 
 2661                2, 5, maxSequence, version, 
manifest, blobInfos, messages, 200),
 
 2669            {{108, {6}}, {108, {7}}, {192, {10, 12}}});
 
 2673        verifyBuildMessages(
 
 2674            ValidatorList::buildValidatorListMessages(
 
 2675                2, 5, maxSequence, version, 
manifest, blobInfos, messages, 150),
 
 2683            {{108, {6}}, {108, {7}}, {110, {10}}, {110, {12}}});
 
 2688        verifyBuildMessages(
 
 2689            ValidatorList::buildValidatorListMessages(
 
 2690                2, 5, maxSequence, version, 
manifest, blobInfos, messages, 108),
 
 2698            {{108, {6}}, {108, {7}}, {110, {10}}, {110, {12}}});
 
 
 2704        testcase(
"Test quorum disabled");
 
 2706        std::string const siteUri = 
"testQuorumDisabled.test";
 
 2708        auto& app = env.
app();
 
 2713        while (valKeys.
size() != maxKeys)
 
 2730        auto makeValidatorList = [&, 
this](
 
 2743                app.config().legacy(
"database_path"),
 
 2750                auto const publisherPublic =
 
 2752                auto const pubSigningKeys = 
randomKeyPair(KeyType::secp256k1);
 
 2760                    pubSigningKeys.first,
 
 2761                    pubSigningKeys.second,
 
 2762                    i < countRevoked ? 
revoked : 1));
 
 2763                publishers.push_back(Publisher{
 
 2775                valManifests.applyManifest(
 
 2777                BEAST_EXPECT(result->load(
 
 2778                    self->signingPublic,
 
 2786                    result->load({}, emptyCfgKeys, cfgPublishers, threshold));
 
 2791                using namespace std::chrono_literals;
 
 2793                    (i == countTotal - 1 ? 60s : 3600s);
 
 2794                auto const blob = makeList(
 
 2797                    publishers[i].expiry.time_since_epoch().count());
 
 2798                auto const sig = signList(blob, publishers[i].signingKeys);
 
 2807                        .bestDisposition() ==
 
 2808                    (publishers[i].
revoked ? ListDisposition::untrusted
 
 2809                                           : ListDisposition::accepted));
 
 2823            auto const self = randomValidator();
 
 2824            auto const keysTotal = valKeys.
size() + 1;
 
 2825            auto trustedKeys = makeValidatorList(
 
 2833            BEAST_EXPECT(trustedKeys->getListThreshold() == 5);
 
 2834            for (
auto const& p : publishers)
 
 2835                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 2843            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 2845                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 2849            for (
auto const& val : valKeys)
 
 2851                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 2854            BEAST_EXPECT(changes.
added == added);
 
 2855            BEAST_EXPECT(changes.
removed.empty());
 
 2859            changes = trustedKeys->updateTrusted(
 
 2865            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 2866            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 2869            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 2870            for (
auto const& val : valKeys)
 
 2872                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 2873                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 2876            BEAST_EXPECT(changes.
added.empty());
 
 2877            BEAST_EXPECT(changes.
removed == removed);
 
 2884            auto const keysTotal = valKeys.
size();
 
 2885            auto trustedKeys = makeValidatorList(
 
 2893            BEAST_EXPECT(trustedKeys->getListThreshold() == 5);
 
 2894            for (
auto const& p : publishers)
 
 2895                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 2903            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 2905                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 2908            for (
auto const& val : valKeys)
 
 2910                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 2913            BEAST_EXPECT(changes.
added == added);
 
 2914            BEAST_EXPECT(changes.
removed.empty());
 
 2918            changes = trustedKeys->updateTrusted(
 
 2924            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 2925            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 0);
 
 2928            for (
auto const& val : valKeys)
 
 2930                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 2931                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 2934            BEAST_EXPECT(changes.
added.empty());
 
 2935            BEAST_EXPECT(changes.
removed == removed);
 
 2943            auto const self = valKeys[1];
 
 2944            auto const keysTotal = valKeys.
size();
 
 2945            auto trustedKeys = makeValidatorList(
 
 2953            BEAST_EXPECT(trustedKeys->getListThreshold() == 4);
 
 2954            int untrustedCount = 0;
 
 2955            for (
auto const& p : publishers)
 
 2957                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 2958                BEAST_EXPECT(p.revoked ^ trusted);
 
 2959                untrustedCount += trusted ? 0 : 1;
 
 2961            BEAST_EXPECT(untrustedCount == 1);
 
 2969            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 2971                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 2974            for (
auto const& val : valKeys)
 
 2976                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 2979            BEAST_EXPECT(changes.
added == added);
 
 2980            BEAST_EXPECT(changes.
removed.empty());
 
 2984            changes = trustedKeys->updateTrusted(
 
 2990            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 2991            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 2994            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 2995            for (
auto const& val : valKeys)
 
 2997                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 2998                if (val.masterPublic != self.masterPublic)
 
 3000                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3004            BEAST_EXPECT(changes.
added.empty());
 
 3005            BEAST_EXPECT(changes.
removed == removed);
 
 3013            auto const self = randomValidator();
 
 3014            auto const keysTotal = valKeys.
size() + 1;
 
 3015            auto trustedKeys = makeValidatorList(
 
 3023            BEAST_EXPECT(trustedKeys->getListThreshold() == 3);
 
 3024            int untrustedCount = 0;
 
 3025            for (
auto const& p : publishers)
 
 3027                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3028                BEAST_EXPECT(p.revoked ^ trusted);
 
 3029                untrustedCount += trusted ? 0 : 1;
 
 3031            BEAST_EXPECT(untrustedCount == 2);
 
 3039            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3041                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3045            for (
auto const& val : valKeys)
 
 3047                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3050            BEAST_EXPECT(changes.
added == added);
 
 3051            BEAST_EXPECT(changes.
removed.empty());
 
 3055            changes = trustedKeys->updateTrusted(
 
 3061            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3062            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3065            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3066            for (
auto const& val : valKeys)
 
 3068                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3069                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3072            BEAST_EXPECT(changes.
added.empty());
 
 3073            BEAST_EXPECT(changes.
removed == removed);
 
 3081            auto const self = valKeys[5];
 
 3082            auto const keysTotal = valKeys.
size();
 
 3083            auto trustedKeys = makeValidatorList(
 
 3091            BEAST_EXPECT(trustedKeys->getListThreshold() == 3);
 
 3092            int untrustedCount = 0;
 
 3093            for (
auto const& p : publishers)
 
 3095                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3096                BEAST_EXPECT(p.revoked ^ trusted);
 
 3097                untrustedCount += trusted ? 0 : 1;
 
 3099            BEAST_EXPECT(untrustedCount == 2);
 
 3107            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3109                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3112            for (
auto const& val : valKeys)
 
 3114                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3117            BEAST_EXPECT(changes.
added == added);
 
 3118            BEAST_EXPECT(changes.
removed.empty());
 
 3122            changes = trustedKeys->updateTrusted(
 
 3128            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3129            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3132            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3133            for (
auto const& val : valKeys)
 
 3135                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3136                if (val.masterPublic != self.masterPublic)
 
 3138                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3142            BEAST_EXPECT(changes.
added.empty());
 
 3143            BEAST_EXPECT(changes.
removed == removed);
 
 3150            auto const keysTotal = valKeys.
size();
 
 3151            auto trustedKeys = makeValidatorList(
 
 3159            BEAST_EXPECT(trustedKeys->getListThreshold() == 3);
 
 3160            int untrustedCount = 0;
 
 3161            for (
auto const& p : publishers)
 
 3163                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3164                BEAST_EXPECT(p.revoked ^ trusted);
 
 3165                untrustedCount += trusted ? 0 : 1;
 
 3167            BEAST_EXPECT(untrustedCount == 2);
 
 3175            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3177                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3180            for (
auto const& val : valKeys)
 
 3182                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3185            BEAST_EXPECT(changes.
added == added);
 
 3186            BEAST_EXPECT(changes.
removed.empty());
 
 3190            changes = trustedKeys->updateTrusted(
 
 3196            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3197            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 0);
 
 3200            for (
auto const& val : valKeys)
 
 3202                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3203                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3206            BEAST_EXPECT(changes.
added.empty());
 
 3207            BEAST_EXPECT(changes.
removed == removed);
 
 3215            auto const self = randomValidator();
 
 3216            auto const keysTotal = valKeys.
size() + 1;
 
 3217            auto trustedKeys = makeValidatorList(
 
 3225            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 3226            int untrustedCount = 0;
 
 3227            for (
auto const& p : publishers)
 
 3229                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3230                BEAST_EXPECT(p.revoked ^ trusted);
 
 3231                untrustedCount += trusted ? 0 : 1;
 
 3233            BEAST_EXPECT(untrustedCount == 1);
 
 3241            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3243                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3247            for (
auto const& val : valKeys)
 
 3249                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3252            BEAST_EXPECT(changes.
added == added);
 
 3253            BEAST_EXPECT(changes.
removed.empty());
 
 3257            changes = trustedKeys->updateTrusted(
 
 3263            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3265                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3267            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3268            for (
auto const& val : valKeys)
 
 3270                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3271                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3273            BEAST_EXPECT(changes.
added.empty());
 
 3274            BEAST_EXPECT(changes.
removed.empty());
 
 3282            auto const self = randomValidator();
 
 3283            auto const keysTotal = valKeys.
size() + 1;
 
 3284            auto trustedKeys = makeValidatorList(
 
 3292            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3293            for (
auto const& p : publishers)
 
 3294                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3302            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3304                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3308            for (
auto const& val : valKeys)
 
 3310                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3313            BEAST_EXPECT(changes.
added == added);
 
 3314            BEAST_EXPECT(changes.
removed.empty());
 
 3318            changes = trustedKeys->updateTrusted(
 
 3324            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3326                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3328            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3329            for (
auto const& val : valKeys)
 
 3331                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3332                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3334            BEAST_EXPECT(changes.
added.empty());
 
 3335            BEAST_EXPECT(changes.
removed.empty());
 
 3343            auto const self = valKeys[7];
 
 3344            auto const keysTotal = valKeys.
size();
 
 3345            auto trustedKeys = makeValidatorList(
 
 3353            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3354            for (
auto const& p : publishers)
 
 3355                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3363            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3365                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3368            for (
auto const& val : valKeys)
 
 3370                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3373            BEAST_EXPECT(changes.
added == added);
 
 3374            BEAST_EXPECT(changes.
removed.empty());
 
 3378            changes = trustedKeys->updateTrusted(
 
 3384            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3386                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3388            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3389            for (
auto const& val : valKeys)
 
 3391                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3392                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3394            BEAST_EXPECT(changes.
added.empty());
 
 3395            BEAST_EXPECT(changes.
removed.empty());
 
 3402            auto const keysTotal = valKeys.
size();
 
 3403            auto trustedKeys = makeValidatorList(
 
 3411            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3412            for (
auto const& p : publishers)
 
 3413                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3421            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3423                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3426            for (
auto const& val : valKeys)
 
 3428                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3431            BEAST_EXPECT(changes.
added == added);
 
 3432            BEAST_EXPECT(changes.
removed.empty());
 
 3436            changes = trustedKeys->updateTrusted(
 
 3442            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3444                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3446            for (
auto const& val : valKeys)
 
 3448                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3449                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3451            BEAST_EXPECT(changes.
added.empty());
 
 3452            BEAST_EXPECT(changes.
removed.empty());
 
 3462            auto const self = randomValidator();
 
 3463            auto const keysTotal = valKeys.
size() + 1;
 
 3464            auto trustedKeys = makeValidatorList(
 
 3472            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3473            int untrustedCount = 0;
 
 3474            for (
auto const& p : publishers)
 
 3476                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3477                BEAST_EXPECT(p.revoked ^ trusted);
 
 3478                untrustedCount += trusted ? 0 : 1;
 
 3480            BEAST_EXPECT(untrustedCount == 1);
 
 3488            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3490                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3494            for (
auto const& val : valKeys)
 
 3496                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3499            BEAST_EXPECT(changes.
added == added);
 
 3500            BEAST_EXPECT(changes.
removed.empty());
 
 3504            changes = trustedKeys->updateTrusted(
 
 3510            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3511            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3514            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3515            for (
auto const& val : valKeys)
 
 3517                BEAST_EXPECT(!trustedKeys->listed(val.masterPublic));
 
 3518                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3521            BEAST_EXPECT(changes.
added.empty());
 
 3522            BEAST_EXPECT(changes.
removed == removed);
 
 3530            auto const self = valKeys[5];
 
 3531            auto const keysTotal = valKeys.
size();
 
 3532            auto trustedKeys = makeValidatorList(
 
 3540            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3541            int untrustedCount = 0;
 
 3542            for (
auto const& p : publishers)
 
 3544                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3545                BEAST_EXPECT(p.revoked ^ trusted);
 
 3546                untrustedCount += trusted ? 0 : 1;
 
 3548            BEAST_EXPECT(untrustedCount == 1);
 
 3556            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3558                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3561            for (
auto const& val : valKeys)
 
 3563                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3566            BEAST_EXPECT(changes.
added == added);
 
 3567            BEAST_EXPECT(changes.
removed.empty());
 
 3571            changes = trustedKeys->updateTrusted(
 
 3577            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3578            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3581            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3582            for (
auto const& val : valKeys)
 
 3584                if (val.masterPublic != self.masterPublic)
 
 3586                    BEAST_EXPECT(!trustedKeys->listed(val.masterPublic));
 
 3587                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3591            BEAST_EXPECT(changes.
added.empty());
 
 3592            BEAST_EXPECT(changes.
removed == removed);
 
 3599            auto const keysTotal = valKeys.
size();
 
 3600            auto trustedKeys = makeValidatorList(
 
 3608            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3609            int untrustedCount = 0;
 
 3610            for (
auto const& p : publishers)
 
 3612                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 3613                BEAST_EXPECT(p.revoked ^ trusted);
 
 3614                untrustedCount += trusted ? 0 : 1;
 
 3616            BEAST_EXPECT(untrustedCount == 1);
 
 3624            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3626                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3629            for (
auto const& val : valKeys)
 
 3631                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3634            BEAST_EXPECT(changes.
added == added);
 
 3635            BEAST_EXPECT(changes.
removed.empty());
 
 3639            changes = trustedKeys->updateTrusted(
 
 3645            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3646            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 0);
 
 3649            for (
auto const& val : valKeys)
 
 3651                BEAST_EXPECT(!trustedKeys->listed(val.masterPublic));
 
 3652                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3655            BEAST_EXPECT(changes.
added.empty());
 
 3656            BEAST_EXPECT(changes.
removed == removed);
 
 3664            auto const self = randomValidator();
 
 3665            auto const keysTotal = valKeys.
size() + 1;
 
 3666            auto trustedKeys = makeValidatorList(
 
 3674            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 3675            for (
auto const& p : publishers)
 
 3676                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3684            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3686                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3690            for (
auto const& val : valKeys)
 
 3692                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3695            BEAST_EXPECT(changes.
added == added);
 
 3696            BEAST_EXPECT(changes.
removed.empty());
 
 3700            changes = trustedKeys->updateTrusted(
 
 3706            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3707            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3710            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3711            for (
auto const& val : valKeys)
 
 3713                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3714                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3717            BEAST_EXPECT(changes.
added.empty());
 
 3718            BEAST_EXPECT(changes.
removed == removed);
 
 3726            auto const self = valKeys[5];
 
 3727            auto const keysTotal = valKeys.
size();
 
 3728            auto trustedKeys = makeValidatorList(
 
 3736            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 3737            for (
auto const& p : publishers)
 
 3738                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3746            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3748                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3752            for (
auto const& val : valKeys)
 
 3754                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3757            BEAST_EXPECT(changes.
added == added);
 
 3758            BEAST_EXPECT(changes.
removed.empty());
 
 3762            changes = trustedKeys->updateTrusted(
 
 3768            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3769            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3772            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3773            for (
auto const& val : valKeys)
 
 3775                if (val.masterPublic != self.masterPublic)
 
 3777                    BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3778                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3782            BEAST_EXPECT(changes.
added.empty());
 
 3783            BEAST_EXPECT(changes.
removed == removed);
 
 3790            auto const keysTotal = valKeys.
size();
 
 3791            auto trustedKeys = makeValidatorList(
 
 3799            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 3800            for (
auto const& p : publishers)
 
 3801                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3809            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3811                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3814            for (
auto const& val : valKeys)
 
 3816                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3819            BEAST_EXPECT(changes.
added == added);
 
 3820            BEAST_EXPECT(changes.
removed.empty());
 
 3824            changes = trustedKeys->updateTrusted(
 
 3830            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3831            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 0);
 
 3834            for (
auto const& val : valKeys)
 
 3836                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 3837                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3840            BEAST_EXPECT(changes.
added.empty());
 
 3841            BEAST_EXPECT(changes.
removed == removed);
 
 3851            auto const self = randomValidator();
 
 3852            auto const keysTotal = valKeys.
size() + 1;
 
 3853            auto trustedKeys = makeValidatorList(
 
 3861            BEAST_EXPECT(trustedKeys->getListThreshold() == 1);
 
 3862            for (
auto const& p : publishers)
 
 3863                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3871            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3873                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3877            for (
auto const& val : valKeys)
 
 3879                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3882            BEAST_EXPECT(changes.
added == added);
 
 3883            BEAST_EXPECT(changes.
removed.empty());
 
 3887            changes = trustedKeys->updateTrusted(
 
 3893            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 3894            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 3897            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 3898            for (
auto const& val : valKeys)
 
 3900                BEAST_EXPECT(!trustedKeys->listed(val.masterPublic));
 
 3901                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 3904            BEAST_EXPECT(changes.
added.empty());
 
 3905            BEAST_EXPECT(changes.
removed == removed);
 
 3915            auto const self = valKeys[2];
 
 3916            auto const keysTotal = valKeys.
size();
 
 3917            auto trustedKeys = makeValidatorList(
 
 3925            BEAST_EXPECT(trustedKeys->getListThreshold() == 2);
 
 3926            for (
auto const& p : publishers)
 
 3927                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3935            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3937                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3940            for (
auto const& val : valKeys)
 
 3942                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3945            BEAST_EXPECT(changes.
added == added);
 
 3946            BEAST_EXPECT(changes.
removed.empty());
 
 3955            auto const keysTotal = valKeys.
size();
 
 3956            auto trustedKeys = makeValidatorList(
 
 3964            BEAST_EXPECT(trustedKeys->getListThreshold() == 3);
 
 3965            for (
auto const& p : publishers)
 
 3966                BEAST_EXPECT(trustedKeys->trustedPublisher(p.pubKey));
 
 3974            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 3976                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 3979            for (
auto const& val : valKeys)
 
 3981                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 3984            BEAST_EXPECT(changes.
added == added);
 
 3985            BEAST_EXPECT(changes.
removed.empty());
 
 3995            auto const self = randomValidator();
 
 3996            auto const keysTotal = valKeys.
size() + 1;
 
 3997            auto trustedKeys = makeValidatorList(
 
 4005            BEAST_EXPECT(trustedKeys->getListThreshold() == 4);
 
 4006            int untrustedCount = 0;
 
 4007            for (
auto const& p : publishers)
 
 4009                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 4010                BEAST_EXPECT(p.revoked ^ trusted);
 
 4011                untrustedCount += trusted ? 0 : 1;
 
 4013            BEAST_EXPECT(untrustedCount == 2);
 
 4021            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 4023                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 4027            for (
auto const& val : valKeys)
 
 4029                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 4032            BEAST_EXPECT(changes.
added == added);
 
 4033            BEAST_EXPECT(changes.
removed.empty());
 
 4037            changes = trustedKeys->updateTrusted(
 
 4043            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 4044            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 4047            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 4048            for (
auto const& val : valKeys)
 
 4050                BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 4051                BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 4054            BEAST_EXPECT(changes.
added.empty());
 
 4055            BEAST_EXPECT(changes.
removed == removed);
 
 4065            auto const self = valKeys[2];
 
 4066            auto const keysTotal = valKeys.
size();
 
 4067            auto trustedKeys = makeValidatorList(
 
 4075            BEAST_EXPECT(trustedKeys->getListThreshold() == 4);
 
 4076            int untrustedCount = 0;
 
 4077            for (
auto const& p : publishers)
 
 4079                bool const trusted = trustedKeys->trustedPublisher(p.pubKey);
 
 4080                BEAST_EXPECT(p.revoked ^ trusted);
 
 4081                untrustedCount += trusted ? 0 : 1;
 
 4083            BEAST_EXPECT(untrustedCount == 3);
 
 4091            BEAST_EXPECT(trustedKeys->quorum() == 
std::ceil(keysTotal * 0.8f));
 
 4093                trustedKeys->getTrustedMasterKeys().size() == keysTotal);
 
 4096            for (
auto const& val : valKeys)
 
 4098                BEAST_EXPECT(trustedKeys->trusted(val.masterPublic));
 
 4101            BEAST_EXPECT(changes.
added == added);
 
 4102            BEAST_EXPECT(changes.
removed.empty());
 
 4106            changes = trustedKeys->updateTrusted(
 
 4112            BEAST_EXPECT(trustedKeys->quorum() == quorumDisabled);
 
 4113            BEAST_EXPECT(trustedKeys->getTrustedMasterKeys().size() == 1);
 
 4116            BEAST_EXPECT(trustedKeys->trusted(self.masterPublic));
 
 4117            for (
auto const& val : valKeys)
 
 4119                if (val.masterPublic != self.masterPublic)
 
 4121                    BEAST_EXPECT(trustedKeys->listed(val.masterPublic));
 
 4122                    BEAST_EXPECT(!trustedKeys->trusted(val.masterPublic));
 
 4126            BEAST_EXPECT(changes.
added.empty());
 
 4127            BEAST_EXPECT(changes.
removed == removed);