From 1ce46a7e6b456a9a3a1d7663b8bd99473c55c5c8 Mon Sep 17 00:00:00 2001 From: manojsdoshi Date: Wed, 28 Jul 2021 21:28:06 +0000 Subject: [PATCH] deploy: aee422e8197b9c827587f2a8f009decf1a9f2ac0 --- AccountDelete__test_8cpp_source.html | 10 +- AccountInfo_8cpp_source.html | 398 +- AccountInfo__test_8cpp_source.html | 967 +++-- AccountObjects__test_8cpp_source.html | 4 +- AccountOffers__test_8cpp_source.html | 4 +- AccountSet__test_8cpp_source.html | 10 +- AccountTx__test_8cpp_source.html | 4 +- AmendmentTable_8cpp_source.html | 8 +- AmendmentTable__test_8cpp_source.html | 6 +- Application_8cpp_source.html | 8 +- ApplyStateTable_8cpp_source.html | 6 +- Backend__test_8cpp_source.html | 2 +- BasicConfig_8cpp_source.html | 372 +- BasicConfig_8h_source.html | 633 +-- BasicNetwork__test_8cpp_source.html | 4 +- BatchWriter_8cpp_source.html | 2 +- BookDirs__test_8cpp_source.html | 8 +- BookStep_8cpp_source.html | 4 +- Book__test_8cpp_source.html | 4 +- Buffer__test_8cpp_source.html | 4 +- BuildInfo_8cpp_source.html | 2 +- BuildLedger_8cpp_source.html | 2 +- CancelCheck_8cpp_source.html | 2 +- CashCheck_8cpp_source.html | 914 ++-- CashCheck_8h_source.html | 6 +- CashDiff__test_8cpp_source.html | 4 +- CassandraFactory_8cpp_source.html | 1601 ++++--- Change_8cpp_source.html | 2 +- Check__test_8cpp_source.html | 3269 +++++++++------ ClosureCounter__test_8cpp_source.html | 4 +- Cluster_8cpp_source.html | 4 +- Cluster_8h_source.html | 2 +- CollectorManager_8cpp_source.html | 11 +- CollectorManager_8h_source.html | 2 +- Config_8cpp_source.html | 22 +- Config_8h_source.html | 2 +- Config__test_8cpp_source.html | 20 +- Consensus_8h_source.html | 2 +- Consensus__test_8cpp_source.html | 4 +- Coroutine__test_8cpp_source.html | 4 +- CreateCheck_8cpp_source.html | 2 +- CreateOffer_8cpp_source.html | 8 +- CreateTicket_8cpp_source.html | 2 +- CrossingLimits__test_8cpp_source.html | 6 +- DatabaseBody_8h_source.html | 10 +- DatabaseCon_8cpp_source.html | 6 +- DatabaseDownloader__test_8cpp_source.html | 4 +- DatabaseNodeImp_8h_source.html | 4 +- DatabaseRotatingImp_8cpp_source.html | 2 +- DatabaseRotatingImp_8h_source.html | 2 +- DatabaseRotating_8h_source.html | 2 +- DatabaseShardImp_8cpp_source.html | 2436 +++++------ DatabaseShardImp_8h_source.html | 64 +- DatabaseShard_8h_source.html | 4 +- DatabaseShard__test_8cpp_source.html | 12 +- Database_8cpp_source.html | 2 +- Database_8h_source.html | 2 +- Database__test_8cpp_source.html | 2 +- DeleteAccount_8cpp_source.html | 4 +- DeliverMin__test_8cpp_source.html | 8 +- DeliveredAmount_8cpp_source.html | 2 +- DeliveredAmount__test_8cpp_source.html | 4 +- DepositAuth__test_8cpp_source.html | 12 +- DepositAuthorized__test_8cpp_source.html | 4 +- DepositPreauth_8cpp_source.html | 2 +- DeterministicShard_8cpp_source.html | 5 +- Digraph__test_8cpp_source.html | 4 +- DirectStep_8cpp_source.html | 2 +- Directory__test_8cpp_source.html | 4 +- Discrepancy__test_8cpp_source.html | 4 +- Env_8cpp_source.html | 257 +- Env_8h_source.html | 20 +- Env__test_8cpp_source.html | 20 +- Escrow_8cpp_source.html | 8 +- Escrow__test_8cpp_source.html | 10 +- Factory_8h_source.html | 2 +- Feature_8cpp_source.html | 255 +- Feature_8h_source.html | 655 +-- Feature__test_8cpp_source.html | 8 +- FeeVoteImpl_8cpp_source.html | 4 +- FeeVote__test_8cpp_source.html | 8 +- Fee__test_8cpp_source.html | 4 +- Flow__test_8cpp_source.html | 14 +- Freeze__test_8cpp_source.html | 4 +- GRPCHandlers_8h_source.html | 2 +- GRPCServer_8cpp_source.html | 102 +- GatewayBalances__test_8cpp_source.html | 8 +- GetCounts_8cpp_source.html | 8 +- Handler_8cpp_source.html | 115 +- Handler_8h_source.html | 4 +- HashRouter__test_8cpp_source.html | 4 +- Histogram__test_8cpp_source.html | 4 +- InboundTransactions_8cpp_source.html | 2 +- InboundTransactions_8h_source.html | 2 +- InvariantCheck_8cpp_source.html | 2 +- JSONRPCClient_8cpp_source.html | 8 +- JSONRPC__test_8cpp_source.html | 2 +- JobQueue__test_8cpp_source.html | 4 +- LedgerClosed__test_8cpp_source.html | 2 +- LedgerData__test_8cpp_source.html | 4 +- LedgerHistory__test_8cpp_source.html | 4 +- LedgerRPC__test_8cpp_source.html | 2 +- LedgerReplay__test_8cpp_source.html | 9 +- LedgerRequestRPC__test_8cpp_source.html | 2 +- LedgerTiming__test_8cpp_source.html | 4 +- LedgerTrie__test_8cpp_source.html | 4 +- Ledger_8cpp_source.html | 2 +- Livecache_8h_source.html | 2 +- ManagerImp_8cpp_source.html | 5 +- ManagerImp_8h_source.html | 2 +- Manager_8h_source.html | 2 +- ManifestRPC__test_8cpp_source.html | 4 +- Manifest_8h_source.html | 6 +- Manifest__test_8cpp_source.html | 10 +- MemoryFactory_8cpp_source.html | 5 +- MultiSign__test_8cpp_source.html | 10 +- NegativeUNL__test_8cpp_source.html | 26 +- NetworkOPs_8cpp_source.html | 3580 ++++++++-------- NetworkOPs_8h_source.html | 2 +- NoRipple__test_8cpp_source.html | 10 +- NodeIdentity_8cpp_source.html | 6 +- NodeStoreScheduler_8h_source.html | 2 +- NuDBFactory_8cpp_source.html | 7 +- NullFactory_8cpp_source.html | 2 +- OfferStream_8cpp_source.html | 2 +- Offer__test_8cpp_source.html | 22 +- OpenLedger_8cpp_source.html | 2 +- OpenLedger_8h_source.html | 2 +- OrderBookDB_8h_source.html | 2 +- OverlayImpl_8cpp_source.html | 12 +- OverlayImpl_8h_source.html | 2 +- OversizeMeta__test_8cpp_source.html | 4 +- P2pProxy_8cpp_source.html | 2 +- Path__test_8cpp_source.html | 4 +- PayChan_8cpp_source.html | 6 +- PayChan__test_8cpp_source.html | 10 +- PayStrand__test_8cpp_source.html | 8 +- PaymentSandbox__test_8cpp_source.html | 8 +- Payment_8cpp_source.html | 6 +- PeerImp_8cpp_source.html | 3685 +++++++++-------- PeerImp_8h_source.html | 1405 +++---- PeerfinderManager_8cpp_source.html | 2 +- PendingSaves__test_8cpp_source.html | 4 +- PerfLogImp_8cpp_source.html | 6 +- PerfLogImp_8h_source.html | 2 +- PerfLog_8h_source.html | 2 +- PerfLog__test_8cpp_source.html | 6 +- Pg_8cpp_source.html | 4 +- Port_8cpp_source.html | 239 +- Port_8h_source.html | 2 +- PseudoTx__test_8cpp_source.html | 4 +- Quality_8h_source.html | 4 +- RCLCensorshipDetector__test_8cpp_source.html | 4 +- RCLConsensus_8cpp_source.html | 2 +- RCLValidations__test_8cpp_source.html | 4 +- RPCCall__test_8cpp_source.html | 4 +- RPCHandler_8cpp_source.html | 2 +- RPCOverload__test_8cpp_source.html | 4 +- RangeSet__test_8cpp_source.html | 2 +- Regression__test_8cpp_source.html | 8 +- RelationalDBInterfaceSqlite_8cpp_source.html | 52 +- RelationalDBInterfaceSqlite_8h_source.html | 18 +- RelationalDBInterface_8cpp_source.html | 66 +- RelationalDBInterface_8h_source.html | 13 +- ...tionalDBInterface__global_8cpp_source.html | 14 +- RelationalDBInterface__global_8h_source.html | 14 +- ReportingETL_8cpp_source.html | 1824 ++++---- ReportingETL_8h_source.html | 28 +- ReportingETL__test_8cpp_source.html | 4 +- RippleCalc_8cpp_source.html | 4 +- RobustTransaction__test_8cpp_source.html | 4 +- RocksDBFactory_8cpp_source.html | 565 ++- Roles__test_8cpp_source.html | 4 +- SHAMapStoreImp_8cpp_source.html | 31 +- SHAMapStoreImp_8h_source.html | 8 +- SHAMapStore__test_8cpp_source.html | 4 +- STExchange_8h_source.html | 2 +- STObject_8cpp_source.html | 2 +- STTx_8cpp_source.html | 2 +- Scheduler__test_8cpp_source.html | 4 +- ServerHandlerImp_8cpp_source.html | 8 +- ServerInfo__test_8cpp_source.html | 4 +- ServerStatus__test_8cpp_source.html | 10 +- Server__test_8cpp_source.html | 4 +- SetAccount_8cpp_source.html | 2 +- SetAuth__test_8cpp_source.html | 8 +- SetRegularKey_8cpp_source.html | 2 +- SetRegularKey__test_8cpp_source.html | 2 +- SetSignerList_8cpp_source.html | 2 +- SetTrust_8cpp_source.html | 2 +- SetTrust__test_8cpp_source.html | 4 +- ShardArchiveHandler_8cpp_source.html | 2 +- ShardArchiveHandler_8h_source.html | 4 +- ShardArchiveHandler__test_8cpp_source.html | 4 +- Shard_8cpp_source.html | 59 +- Shard_8h_source.html | 383 +- Sign_8cpp_source.html | 2 +- SkipList__test_8cpp_source.html | 4 +- Slice__test_8cpp_source.html | 4 +- SociDB_8cpp_source.html | 20 +- SociDB_8h_source.html | 18 +- SociDB__test_8cpp_source.html | 6 +- StoreSqdb_8h_source.html | 2 +- StrandFlow_8h_source.html | 2 +- Submit__test_8cpp_source.html | 4 +- Subscribe__test_8cpp_source.html | 734 ++-- TheoreticalQuality__test_8cpp_source.html | 6 +- Ticket__test_8cpp_source.html | 6 +- Timing__test_8cpp_source.html | 10 +- Transaction__ordering__test_8cpp_source.html | 4 +- Transactor_8cpp_source.html | 6 +- TrustAndBalance__test_8cpp_source.html | 8 +- TxHistory_8cpp_source.html | 2 +- TxMeta_8h_source.html | 6 +- TxQ_8cpp_source.html | 6 +- TxQ__test_8cpp_source.html | 8 +- Tx__test_8cpp_source.html | 4 +- ValidatorInfo__test_8cpp_source.html | 4 +- ValidatorKeys_8cpp_source.html | 6 +- ValidatorKeys__test_8cpp_source.html | 8 +- ValidatorListSites_8cpp_source.html | 2 +- ValidatorList__test_8cpp_source.html | 5 +- ValidatorRPC__test_8cpp_source.html | 4 +- ValidatorSite_8cpp_source.html | 1110 ++--- ValidatorSite_8h_source.html | 123 +- ValidatorSite__test_8cpp_source.html | 1085 ++--- View_8cpp_source.html | 2 +- View__test_8cpp_source.html | 6 +- WSClient_8cpp_source.html | 8 +- WSClient__test_8cpp_source.html | 4 +- XRPEndpointStep_8cpp_source.html | 2 +- app_2misc_2impl_2Manifest_8cpp_source.html | 10 +- apply_8cpp_source.html | 4 +- apply__test_8cpp_source.html | 2 +- base__uint__test_8cpp_source.html | 4 +- ...__CurrentThreadName__test_8cpp_source.html | 4 +- ..._io__latency__probe__test_8cpp_source.html | 4 +- classes.html | 74 +- classripple_1_1AmendmentTable__test.html | 20 +- ...e_1_1AmendmentTable__test__coll__graph.map | 20 +- ...e_1_1AmendmentTable__test__coll__graph.md5 | 2 +- ...e_1_1AmendmentTable__test__coll__graph.png | Bin 54991 -> 54794 bytes classripple_1_1BasicConfig.html | 40 +- classripple_1_1BasicConfig__coll__graph.map | 12 +- classripple_1_1BasicConfig__coll__graph.md5 | 2 +- classripple_1_1BasicConfig__coll__graph.png | Bin 34586 -> 30829 bytes classripple_1_1CashCheck.html | 6 +- classripple_1_1Check__test-members.html | 26 +- classripple_1_1Check__test.html | 208 +- classripple_1_1Config.html | 88 +- classripple_1_1Config__coll__graph.map | 64 +- classripple_1_1Config__coll__graph.md5 | 2 +- classripple_1_1Config__coll__graph.png | Bin 248248 -> 239911 bytes classripple_1_1DBConfig-members.html | 2 +- classripple_1_1DBConfig.html | 2 +- ...ple_1_1DatabaseBody_1_1reader-members.html | 2 +- classripple_1_1DatabaseBody_1_1reader.html | 10 +- ..._1DatabaseBody_1_1value__type-members.html | 2 +- ...ripple_1_1DatabaseBody_1_1value__type.html | 12 +- classripple_1_1DatabaseDownloader.html | 82 +- ...ple_1_1DatabaseDownloader__coll__graph.map | 82 +- ...ple_1_1DatabaseDownloader__coll__graph.md5 | 2 +- ...ple_1_1DatabaseDownloader__coll__graph.png | Bin 284392 -> 289212 bytes classripple_1_1FeatureBitset.html | 52 +- classripple_1_1HTTPDownloader.html | 78 +- ...sripple_1_1HTTPDownloader__coll__graph.map | 78 +- ...sripple_1_1HTTPDownloader__coll__graph.md5 | 2 +- ...sripple_1_1HTTPDownloader__coll__graph.png | Bin 260399 -> 253214 bytes classripple_1_1ManifestCache-members.html | 2 +- classripple_1_1ManifestCache.html | 12 +- classripple_1_1NetworkOPsImp.html | 90 +- ...e_1_1NetworkOPsImp_1_1StateAccounting.html | 4 +- ...sripple_1_1NodeStoreScheduler-members.html | 2 +- classripple_1_1NodeStoreScheduler.html | 8 + ...pple_1_1NodeStore_1_1DatabaseShardImp.html | 66 +- classripple_1_1NodeStore_1_1Shard.html | 48 +- ..._1NodeStore_1_1Shard_1_1Count-members.html | 4 +- ...ripple_1_1NodeStore_1_1Shard_1_1Count.html | 10 +- classripple_1_1OrderBookDB-members.html | 2 +- classripple_1_1OrderBookDB.html | 8 + classripple_1_1PeerImp-members.html | 213 +- classripple_1_1PeerImp.html | 320 +- classripple_1_1PeerImp_1_1Metrics.html | 20 +- ...ple_1_1RPC_1_1RecoveryHandler-members.html | 4 +- classripple_1_1RPC_1_1RecoveryHandler.html | 8 + ...1_1RPC_1_1ShardArchiveHandler-members.html | 2 +- ...sripple_1_1RPC_1_1ShardArchiveHandler.html | 8 + ..._1RelationalDBInterfaceSqlite-members.html | 6 +- ...ripple_1_1RelationalDBInterfaceSqlite.html | 42 +- ...elationalDBInterfaceSqliteImp-members.html | 6 +- ...ple_1_1RelationalDBInterfaceSqliteImp.html | 42 +- classripple_1_1ReportingETL-members.html | 2 +- classripple_1_1ReportingETL.html | 36 +- classripple_1_1SHAMapStoreImp-members.html | 2 +- classripple_1_1SHAMapStoreImp.html | 12 +- classripple_1_1Section-members.html | 29 +- classripple_1_1Section.html | 266 +- classripple_1_1Section__coll__graph.map | 8 +- classripple_1_1Section__coll__graph.md5 | 2 +- classripple_1_1Section__coll__graph.png | Bin 19809 -> 17037 bytes classripple_1_1Section__inherit__graph.map | 4 - classripple_1_1Section__inherit__graph.md5 | 1 - classripple_1_1Section__inherit__graph.png | Bin 6049 -> 0 bytes classripple_1_1TxMeta-members.html | 2 +- classripple_1_1TxMeta.html | 10 +- classripple_1_1ValidatorSite-members.html | 45 +- classripple_1_1ValidatorSite.html | 136 +- ...ipple_1_1detail_1_1FeatureCollections.html | 8 +- classripple_1_1detail_1_1RippledCfgGuard.html | 80 +- ...detail_1_1RippledCfgGuard__coll__graph.map | 80 +- ...detail_1_1RippledCfgGuard__coll__graph.md5 | 2 +- ...detail_1_1RippledCfgGuard__coll__graph.png | Bin 286138 -> 273316 bytes ..._1_1test_1_1AccountInfo__test-members.html | 7 +- classripple_1_1test_1_1AccountInfo__test.html | 31 +- ...untInfo__test_1_1GetAccountInfoClient.html | 10 +- classripple_1_1test_1_1Subscribe__test.html | 6 +- ..._1test_1_1ValidatorSite__test-members.html | 2 +- ...ripple_1_1test_1_1ValidatorSite__test.html | 28 +- classripple_1_1test_1_1jtx_1_1Env.html | 14 +- cluster__test_8cpp_source.html | 4 +- common_8h_source.html | 4 +- envconfig_8cpp_source.html | 10 +- functions.html | 2 +- functions_b.html | 13 +- functions_c.html | 33 +- functions_d.html | 2 +- functions_e.html | 16 +- functions_f.html | 13 +- functions_func.html | 2 +- functions_func_b.html | 19 +- functions_func_c.html | 52 +- functions_func_d.html | 2 +- functions_func_e.html | 18 +- functions_func_f.html | 11 +- functions_func_g.html | 19 +- functions_func_l.html | 14 +- functions_func_m.html | 4 +- functions_func_o.html | 2 +- functions_func_p.html | 19 +- functions_func_r.html | 4 +- functions_func_s.html | 54 +- functions_func_t.html | 65 +- functions_func_v.html | 2 +- functions_func_w.html | 2 +- functions_g.html | 21 +- functions_j.html | 2 +- functions_l.html | 19 +- functions_m.html | 4 +- functions_o.html | 2 +- functions_p.html | 33 +- functions_r.html | 2 +- functions_s.html | 68 +- functions_t.html | 67 +- functions_type_c.html | 1 + functions_v.html | 10 +- functions_vars_l.html | 3 + functions_w.html | 2 +- handshake__test_8cpp_source.html | 4 +- hierarchy.html | 1651 ++++---- inherit_graph_16.md5 | 2 +- inherit_graph_17.md5 | 2 +- inherit_graph_240.md5 | 2 +- inherit_graph_250.md5 | 2 +- inherit_graph_261.md5 | 2 +- inherit_graph_269.md5 | 2 +- inherit_graph_301.md5 | 2 +- inherit_graph_302.md5 | 2 +- inherit_graph_35.md5 | 2 +- inherit_graph_409.md5 | 2 +- inherit_graph_42.md5 | 2 +- inherit_graph_470.md5 | 2 +- inherit_graph_486.md5 | 2 +- inherit_graph_497.md5 | 2 +- inherit_graph_507.md5 | 2 +- inherit_graph_518.md5 | 2 +- inherit_graph_552.map | 3 +- inherit_graph_552.md5 | 2 +- inherit_graph_552.png | Bin 2564 -> 1328 bytes inherit_graph_576.md5 | 2 +- inherit_graph_588.md5 | 2 +- inherit_graph_6.md5 | 2 +- inherit_graph_65.md5 | 2 +- inherit_graph_676.md5 | 2 +- inherit_graph_785.md5 | 2 +- inherit_graph_800.md5 | 2 +- inherit_graph_815.md5 | 2 +- inherit_graph_873.md5 | 2 +- inherit_graph_883.md5 | 2 +- inherit_graph_888.md5 | 2 +- inherit_graph_889.md5 | 2 +- inherit_graph_890.md5 | 2 +- inherit_graph_895.md5 | 2 +- inherit_graph_897.md5 | 2 +- inherits.html | 3 +- jss_8h_source.html | 869 ++-- md____w_rippled_rippled_RELEASENOTES.html | 163 +- md____w_rippled_rippled_docs_consensus.html | 2 +- mulDiv__test_8cpp_source.html | 4 +- namespacebeast.html | 2 +- namespacemembers_b.html | 12 +- namespacemembers_eval_m.html | 3 + namespacemembers_f.html | 17 +- namespacemembers_func_b.html | 16 +- namespacemembers_func_g.html | 4 +- namespacemembers_func_o.html | 2 +- namespacemembers_func_s.html | 2 +- namespacemembers_g.html | 4 +- namespacemembers_m.html | 11 +- namespacemembers_o.html | 2 +- namespacemembers_s.html | 8 +- namespacemembers_t.html | 6 +- namespacemembers_vars_f.html | 3 + namespaceripple.html | 294 +- namespaceripple_1_1BuildInfo.html | 4 +- namespaceripple_1_1NodeStore.html | 2 +- namespaceripple_1_1RPC.html | 4 +- namespaceripple_1_1Tuning.html | 8 +- namespaceripple_1_1detail.html | 2 +- namespaceripple_1_1jss.html | 1090 ++--- namespaceripple_1_1test.html | 324 +- overlay_2impl_2Tuning_8h_source.html | 21 +- peerfinder_2impl_2Logic_8h_source.html | 2 +- reduce__relay__test_8cpp_source.html | 4 +- rngfill_8h_source.html | 54 +- scope__test_8cpp_source.html | 4 +- search/all_1.js | 2 +- search/all_10.js | 1391 +++---- search/all_11.js | 94 +- search/all_12.js | 1330 +++--- search/all_13.js | 2687 ++++++------ search/all_14.js | 3110 +++++++------- search/all_15.js | 716 ++-- search/all_16.js | 502 +-- search/all_17.js | 460 +- search/all_18.js | 154 +- search/all_19.js | 14 +- search/all_1a.js | 16 +- search/all_1b.js | 700 ++-- search/all_2.js | 6 +- search/all_3.js | 8 +- search/all_4.js | 2 +- search/all_5.js | 4 +- search/all_6.js | 875 ++-- search/all_7.js | 1300 +++--- search/all_8.js | 364 +- search/all_9.js | 1552 +++---- search/all_a.js | 204 +- search/all_b.js | 108 +- search/all_c.js | 897 ++-- search/all_d.js | 1940 ++++----- search/all_e.js | 610 +-- search/all_f.js | 678 +-- search/classes_0.js | 4 +- search/classes_1.js | 394 +- search/classes_10.js | 248 +- search/classes_11.js | 22 +- search/classes_12.js | 262 +- search/classes_13.js | 650 +-- search/classes_14.js | 296 +- search/classes_15.js | 416 +- search/classes_16.js | 244 +- search/classes_17.js | 140 +- search/classes_18.js | 34 +- search/classes_19.js | 4 +- search/classes_1a.js | 10 +- search/classes_2.js | 224 +- search/classes_3.js | 406 +- search/classes_4.js | 204 +- search/classes_5.js | 178 +- search/classes_6.js | 162 +- search/classes_7.js | 64 +- search/classes_8.js | 78 +- search/classes_9.js | 410 +- search/classes_a.js | 44 +- search/classes_b.js | 36 +- search/classes_c.js | 214 +- search/classes_d.js | 271 +- search/classes_e.js | 146 +- search/classes_f.js | 180 +- search/enums_0.js | 8 +- search/enums_1.js | 22 +- search/enums_10.js | 32 +- search/enums_11.js | 34 +- search/enums_12.js | 6 +- search/enums_13.js | 6 +- search/enums_14.js | 6 +- search/enums_2.js | 8 +- search/enums_3.js | 10 +- search/enums_4.js | 6 +- search/enums_5.js | 4 +- search/enums_6.js | 4 +- search/enums_7.js | 4 +- search/enums_8.js | 4 +- search/enums_9.js | 12 +- search/enums_a.js | 4 +- search/enums_b.js | 6 +- search/enums_c.js | 6 +- search/enums_d.js | 18 +- search/enums_e.js | 2 +- search/enums_f.js | 8 +- search/enumvalues_0.js | 42 +- search/enumvalues_1.js | 44 +- search/enumvalues_10.js | 2 +- search/enumvalues_11.js | 170 +- search/enumvalues_12.js | 168 +- search/enumvalues_13.js | 418 +- search/enumvalues_14.js | 26 +- search/enumvalues_15.js | 12 +- search/enumvalues_16.js | 18 +- search/enumvalues_17.js | 20 +- search/enumvalues_18.js | 2 +- search/enumvalues_2.js | 50 +- search/enumvalues_3.js | 54 +- search/enumvalues_4.js | 26 +- search/enumvalues_5.js | 36 +- search/enumvalues_6.js | 40 +- search/enumvalues_7.js | 18 +- search/enumvalues_8.js | 30 +- search/enumvalues_9.js | 76 +- search/enumvalues_a.js | 26 +- search/enumvalues_b.js | 146 +- search/enumvalues_c.js | 49 +- search/enumvalues_d.js | 64 +- search/enumvalues_e.js | 36 +- search/enumvalues_f.js | 42 +- search/files_0.js | 8 +- search/files_1.js | 4 +- search/files_10.js | 8 +- search/files_2.js | 68 +- search/files_3.js | 2 +- search/files_4.js | 4 +- search/files_5.js | 10 +- search/files_6.js | 14 +- search/files_7.js | 6 +- search/files_8.js | 8 +- search/files_9.js | 4 +- search/files_a.js | 4 +- search/files_b.js | 2 +- search/files_c.js | 8 +- search/files_d.js | 26 +- search/files_e.js | 10 +- search/files_f.js | 6 +- search/functions_0.js | 2 +- search/functions_1.js | 720 ++-- search/functions_10.js | 919 ++-- search/functions_11.js | 48 +- search/functions_12.js | 602 +-- search/functions_13.js | 1313 +++--- search/functions_14.js | 2142 +++++----- search/functions_15.js | 234 +- search/functions_16.js | 186 +- search/functions_17.js | 290 +- search/functions_18.js | 88 +- search/functions_19.js | 2 +- search/functions_1a.js | 10 +- search/functions_1b.js | 700 ++-- search/functions_2.js | 290 +- search/functions_3.js | 932 ++--- search/functions_4.js | 726 ++-- search/functions_5.js | 298 +- search/functions_6.js | 528 +-- search/functions_7.js | 1200 +++--- search/functions_8.js | 180 +- search/functions_9.js | 828 ++-- search/functions_a.js | 48 +- search/functions_b.js | 34 +- search/functions_c.js | 352 +- search/functions_d.js | 594 +-- search/functions_e.js | 294 +- search/functions_f.js | 422 +- search/groups_0.js | 2 +- search/namespaces_0.js | 24 +- search/namespaces_1.js | 4 +- search/namespaces_2.js | 2 +- search/namespaces_3.js | 74 +- search/namespaces_4.js | 24 +- search/pages_0.js | 4 +- search/pages_1.js | 10 +- search/pages_2.js | 4 +- search/pages_3.js | 4 +- search/pages_4.js | 6 +- search/pages_5.js | 4 +- search/pages_6.js | 4 +- search/pages_7.js | 2 +- search/pages_8.js | 4 +- search/pages_9.js | 6 +- search/pages_a.js | 18 +- search/pages_b.js | 8 +- search/pages_c.js | 2 +- search/pages_d.js | 2 +- search/related_0.js | 8 +- search/related_1.js | 16 +- search/related_2.js | 6 +- search/related_3.js | 4 +- search/related_4.js | 2 +- search/related_5.js | 2 +- search/related_6.js | 18 +- search/related_7.js | 12 +- search/related_8.js | 34 +- search/related_9.js | 4 +- search/related_a.js | 10 +- search/related_b.js | 14 +- search/related_c.js | 4 +- search/related_d.js | 6 +- search/typedefs_0.js | 52 +- search/typedefs_1.js | 28 +- search/typedefs_10.js | 2 +- search/typedefs_11.js | 60 +- search/typedefs_12.js | 144 +- search/typedefs_13.js | 80 +- search/typedefs_14.js | 16 +- search/typedefs_15.js | 14 +- search/typedefs_16.js | 10 +- search/typedefs_17.js | 4 +- search/typedefs_18.js | 2 +- search/typedefs_2.js | 64 +- search/typedefs_3.js | 28 +- search/typedefs_4.js | 38 +- search/typedefs_5.js | 26 +- search/typedefs_6.js | 2 +- search/typedefs_7.js | 36 +- search/typedefs_8.js | 54 +- search/typedefs_9.js | 6 +- search/typedefs_a.js | 8 +- search/typedefs_b.js | 52 +- search/typedefs_c.js | 58 +- search/typedefs_d.js | 22 +- search/typedefs_e.js | 20 +- search/typedefs_f.js | 56 +- search/variables_0.js | 258 +- search/variables_1.js | 132 +- search/variables_10.js | 40 +- search/variables_11.js | 326 +- search/variables_12.js | 792 ++-- search/variables_13.js | 352 +- search/variables_14.js | 72 +- search/variables_15.js | 122 +- search/variables_16.js | 96 +- search/variables_17.js | 18 +- search/variables_18.js | 4 +- search/variables_19.js | 2 +- search/variables_2.js | 344 +- search/variables_3.js | 222 +- search/variables_4.js | 110 +- search/variables_5.js | 343 +- search/variables_6.js | 42 +- search/variables_7.js | 96 +- search/variables_8.js | 370 +- search/variables_9.js | 50 +- search/variables_a.js | 26 +- search/variables_b.js | 279 +- search/variables_c.js | 1132 ++--- search/variables_d.js | 194 +- search/variables_e.js | 102 +- search/variables_f.js | 296 +- ..._1_1NodeStore_1_1Shard_1_1AcquireInfo.html | 6 +- ...e_1_1PerfLog__test_1_1Fixture-members.html | 2 +- structripple_1_1PerfLog__test_1_1Fixture.html | 18 +- ...ce_1_1AccountTransactionsData-members.html | 2 +- ...BInterface_1_1AccountTransactionsData.html | 14 +- ...atabaseDownloader__test_1_1Downloader.html | 90 +- ...oader__test_1_1Downloader__coll__graph.map | 90 +- ...oader__test_1_1Downloader__coll__graph.md5 | 2 +- ...oader__test_1_1Downloader__coll__graph.png | Bin 320441 -> 321367 bytes tagged__integer__test_8cpp_source.html | 4 +- 665 files changed, 43276 insertions(+), 41195 deletions(-) delete mode 100644 classripple_1_1Section__inherit__graph.map delete mode 100644 classripple_1_1Section__inherit__graph.md5 delete mode 100644 classripple_1_1Section__inherit__graph.png diff --git a/AccountDelete__test_8cpp_source.html b/AccountDelete__test_8cpp_source.html index 1d98590c93..a5f63347e7 100644 --- a/AccountDelete__test_8cpp_source.html +++ b/AccountDelete__test_8cpp_source.html @@ -995,7 +995,7 @@ $(function() {
924  }
925 };
926 
-
927 BEAST_DEFINE_TESTSUITE(AccountDelete, app, ripple);
+
927 BEAST_DEFINE_TESTSUITE_PRIO(AccountDelete, app, ripple, 2);
928 
929 } // namespace test
930 } // namespace ripple
@@ -1006,12 +1006,11 @@ $(function() {
void testBasics()
const XRP_t XRP
Converts to XRP Issue or STAmount.
Definition: amount.cpp:105
A pair of SHAMap key and LedgerEntryType.
Definition: Keylet.h:38
-
BEAST_DEFINE_TESTSUITE(AccountDelete, app, ripple)
STL class.
STL class.
PrettyAmount drops(Integer i)
Returns an XRP PrettyAmount, which is trivially convertible to STAmount.
Definition: amount.h:241
@ terINSUF_FEE_B
Definition: TER.h:192
-
std::shared_ptr< STTx const > tx() const
Return the tx data for the last JTx.
Definition: Env.cpp:378
+
std::shared_ptr< STTx const > tx() const
Return the tx data for the last JTx.
Definition: Env.cpp:379
Set the expected result code for a JTx The test will fail if the code doesn't match.
Definition: ter.h:33
Match the number of items in the account's owner directory.
Definition: owners.h:69
void testDest()
@@ -1039,7 +1038,8 @@ $(function() {
const Json::StaticString jsonName
Definition: SField.h:133
Set a multisignature on a JTx.
Definition: multisign.h:58
@ temDST_IS_SRC
Definition: TER.h:103
-
const uint256 featureDeletableAccounts
Definition: Feature.cpp:185
+
BEAST_DEFINE_TESTSUITE_PRIO(AccountDelete, app, ripple, 2)
+
const uint256 featureDeletableAccounts
Definition: Feature.cpp:186
AccountID id() const
Returns the Account ID.
Definition: Account.h:102
@ tecNO_DST_INSUF_XRP
Definition: TER.h:253
uint256 key
Definition: Keylet.h:41
@@ -1062,7 +1062,7 @@ $(function() {
bool close(NetClock::time_point closeTime, std::optional< std::chrono::milliseconds > consensusDelay=std::nullopt)
Close and advance the ledger.
Definition: Env.cpp:121
Definition: STAmount.h:43
-
const uint256 fixPayChanRecipientOwnerDir
Definition: Feature.cpp:184
+
const uint256 fixPayChanRecipientOwnerDir
Definition: Feature.cpp:185
bool isMember(const char *key) const
Return true if the object has a member named key.
Definition: json_value.cpp:932
FeatureBitset supported_amendments()
Definition: Env.h:70
diff --git a/AccountInfo_8cpp_source.html b/AccountInfo_8cpp_source.html index 184d26ee06..4a91aa9c28 100644 --- a/AccountInfo_8cpp_source.html +++ b/AccountInfo_8cpp_source.html @@ -180,201 +180,212 @@ $(function() {
109  if (sleSigners)
110  jvSignerList.append(sleSigners->getJson(JsonOptions::none));
111 
-
112  result[jss::account_data][jss::signer_lists] =
-
113  std::move(jvSignerList);
-
114  }
-
115  // Return queue info if that is requested
-
116  if (queue)
-
117  {
-
118  Json::Value jvQueueData = Json::objectValue;
-
119 
-
120  auto const txs =
-
121  context.app.getTxQ().getAccountTxs(accountID, *ledger);
-
122  if (!txs.empty())
-
123  {
-
124  jvQueueData[jss::txn_count] =
-
125  static_cast<Json::UInt>(txs.size());
-
126 
-
127  auto& jvQueueTx = jvQueueData[jss::transactions];
-
128  jvQueueTx = Json::arrayValue;
-
129 
-
130  std::uint32_t seqCount = 0;
-
131  std::uint32_t ticketCount = 0;
-
132  std::optional<std::uint32_t> lowestSeq;
-
133  std::optional<std::uint32_t> highestSeq;
-
134  std::optional<std::uint32_t> lowestTicket;
-
135  std::optional<std::uint32_t> highestTicket;
-
136  bool anyAuthChanged = false;
-
137  XRPAmount totalSpend(0);
-
138 
-
139  // We expect txs to be returned sorted by SeqProxy. Verify
-
140  // that with a couple of asserts.
-
141  SeqProxy prevSeqProxy = SeqProxy::sequence(0);
-
142  for (auto const& tx : txs)
-
143  {
-
144  Json::Value jvTx = Json::objectValue;
-
145 
-
146  if (tx.seqProxy.isSeq())
-
147  {
-
148  assert(prevSeqProxy < tx.seqProxy);
-
149  prevSeqProxy = tx.seqProxy;
-
150  jvTx[jss::seq] = tx.seqProxy.value();
-
151  ++seqCount;
-
152  if (!lowestSeq)
-
153  lowestSeq = tx.seqProxy.value();
-
154  highestSeq = tx.seqProxy.value();
-
155  }
-
156  else
-
157  {
-
158  assert(prevSeqProxy < tx.seqProxy);
-
159  prevSeqProxy = tx.seqProxy;
-
160  jvTx[jss::ticket] = tx.seqProxy.value();
-
161  ++ticketCount;
-
162  if (!lowestTicket)
-
163  lowestTicket = tx.seqProxy.value();
-
164  highestTicket = tx.seqProxy.value();
-
165  }
-
166 
-
167  jvTx[jss::fee_level] = to_string(tx.feeLevel);
-
168  if (tx.lastValid)
-
169  jvTx[jss::LastLedgerSequence] = *tx.lastValid;
-
170 
-
171  jvTx[jss::fee] = to_string(tx.consequences.fee());
-
172  auto const spend = tx.consequences.potentialSpend() +
-
173  tx.consequences.fee();
-
174  jvTx[jss::max_spend_drops] = to_string(spend);
-
175  totalSpend += spend;
-
176  bool const authChanged = tx.consequences.isBlocker();
-
177  if (authChanged)
-
178  anyAuthChanged = authChanged;
-
179  jvTx[jss::auth_change] = authChanged;
-
180 
-
181  jvQueueTx.append(std::move(jvTx));
-
182  }
-
183 
-
184  if (seqCount)
-
185  jvQueueData[jss::sequence_count] = seqCount;
-
186  if (ticketCount)
-
187  jvQueueData[jss::ticket_count] = ticketCount;
-
188  if (lowestSeq)
-
189  jvQueueData[jss::lowest_sequence] = *lowestSeq;
-
190  if (highestSeq)
-
191  jvQueueData[jss::highest_sequence] = *highestSeq;
-
192  if (lowestTicket)
-
193  jvQueueData[jss::lowest_ticket] = *lowestTicket;
-
194  if (highestTicket)
-
195  jvQueueData[jss::highest_ticket] = *highestTicket;
-
196 
-
197  jvQueueData[jss::auth_change_queued] = anyAuthChanged;
-
198  jvQueueData[jss::max_spend_drops_total] = to_string(totalSpend);
-
199  }
-
200  else
-
201  jvQueueData[jss::txn_count] = 0u;
-
202 
-
203  result[jss::queue_data] = std::move(jvQueueData);
-
204  }
-
205  }
-
206  else
-
207  {
-
208  result[jss::account] = context.app.accountIDCache().toBase58(accountID);
-
209  RPC::inject_error(rpcACT_NOT_FOUND, result);
-
210  }
-
211 
-
212  return result;
-
213 }
-
214 
-
215 std::pair<org::xrpl::rpc::v1::GetAccountInfoResponse, grpc::Status>
-
216 doAccountInfoGrpc(
-
217  RPC::GRPCContext<org::xrpl::rpc::v1::GetAccountInfoRequest>& context)
-
218 {
-
219  // Return values
-
220  org::xrpl::rpc::v1::GetAccountInfoResponse result;
-
221  grpc::Status status = grpc::Status::OK;
+
112  // Documentation states this is returned as part of the account_info
+
113  // response, but previously the code put it under account_data. We
+
114  // can move this to the documentated location from apiVersion 2
+
115  // onwards.
+
116  if (context.apiVersion == 1)
+
117  {
+
118  result[jss::account_data][jss::signer_lists] =
+
119  std::move(jvSignerList);
+
120  }
+
121  else
+
122  {
+
123  result[jss::signer_lists] = std::move(jvSignerList);
+
124  }
+
125  }
+
126  // Return queue info if that is requested
+
127  if (queue)
+
128  {
+
129  Json::Value jvQueueData = Json::objectValue;
+
130 
+
131  auto const txs =
+
132  context.app.getTxQ().getAccountTxs(accountID, *ledger);
+
133  if (!txs.empty())
+
134  {
+
135  jvQueueData[jss::txn_count] =
+
136  static_cast<Json::UInt>(txs.size());
+
137 
+
138  auto& jvQueueTx = jvQueueData[jss::transactions];
+
139  jvQueueTx = Json::arrayValue;
+
140 
+
141  std::uint32_t seqCount = 0;
+
142  std::uint32_t ticketCount = 0;
+
143  std::optional<std::uint32_t> lowestSeq;
+
144  std::optional<std::uint32_t> highestSeq;
+
145  std::optional<std::uint32_t> lowestTicket;
+
146  std::optional<std::uint32_t> highestTicket;
+
147  bool anyAuthChanged = false;
+
148  XRPAmount totalSpend(0);
+
149 
+
150  // We expect txs to be returned sorted by SeqProxy. Verify
+
151  // that with a couple of asserts.
+
152  SeqProxy prevSeqProxy = SeqProxy::sequence(0);
+
153  for (auto const& tx : txs)
+
154  {
+
155  Json::Value jvTx = Json::objectValue;
+
156 
+
157  if (tx.seqProxy.isSeq())
+
158  {
+
159  assert(prevSeqProxy < tx.seqProxy);
+
160  prevSeqProxy = tx.seqProxy;
+
161  jvTx[jss::seq] = tx.seqProxy.value();
+
162  ++seqCount;
+
163  if (!lowestSeq)
+
164  lowestSeq = tx.seqProxy.value();
+
165  highestSeq = tx.seqProxy.value();
+
166  }
+
167  else
+
168  {
+
169  assert(prevSeqProxy < tx.seqProxy);
+
170  prevSeqProxy = tx.seqProxy;
+
171  jvTx[jss::ticket] = tx.seqProxy.value();
+
172  ++ticketCount;
+
173  if (!lowestTicket)
+
174  lowestTicket = tx.seqProxy.value();
+
175  highestTicket = tx.seqProxy.value();
+
176  }
+
177 
+
178  jvTx[jss::fee_level] = to_string(tx.feeLevel);
+
179  if (tx.lastValid)
+
180  jvTx[jss::LastLedgerSequence] = *tx.lastValid;
+
181 
+
182  jvTx[jss::fee] = to_string(tx.consequences.fee());
+
183  auto const spend = tx.consequences.potentialSpend() +
+
184  tx.consequences.fee();
+
185  jvTx[jss::max_spend_drops] = to_string(spend);
+
186  totalSpend += spend;
+
187  bool const authChanged = tx.consequences.isBlocker();
+
188  if (authChanged)
+
189  anyAuthChanged = authChanged;
+
190  jvTx[jss::auth_change] = authChanged;
+
191 
+
192  jvQueueTx.append(std::move(jvTx));
+
193  }
+
194 
+
195  if (seqCount)
+
196  jvQueueData[jss::sequence_count] = seqCount;
+
197  if (ticketCount)
+
198  jvQueueData[jss::ticket_count] = ticketCount;
+
199  if (lowestSeq)
+
200  jvQueueData[jss::lowest_sequence] = *lowestSeq;
+
201  if (highestSeq)
+
202  jvQueueData[jss::highest_sequence] = *highestSeq;
+
203  if (lowestTicket)
+
204  jvQueueData[jss::lowest_ticket] = *lowestTicket;
+
205  if (highestTicket)
+
206  jvQueueData[jss::highest_ticket] = *highestTicket;
+
207 
+
208  jvQueueData[jss::auth_change_queued] = anyAuthChanged;
+
209  jvQueueData[jss::max_spend_drops_total] = to_string(totalSpend);
+
210  }
+
211  else
+
212  jvQueueData[jss::txn_count] = 0u;
+
213 
+
214  result[jss::queue_data] = std::move(jvQueueData);
+
215  }
+
216  }
+
217  else
+
218  {
+
219  result[jss::account] = context.app.accountIDCache().toBase58(accountID);
+
220  RPC::inject_error(rpcACT_NOT_FOUND, result);
+
221  }
222 
-
223  // input
-
224  org::xrpl::rpc::v1::GetAccountInfoRequest& params = context.params;
+
223  return result;
+
224 }
225 
-
226  // get ledger
-
227  std::shared_ptr<ReadView const> ledger;
-
228  auto lgrStatus = RPC::ledgerFromRequest(ledger, context);
-
229  if (lgrStatus || !ledger)
-
230  {
-
231  grpc::Status errorStatus;
-
232  if (lgrStatus.toErrorCode() == rpcINVALID_PARAMS)
-
233  {
-
234  errorStatus = grpc::Status(
-
235  grpc::StatusCode::INVALID_ARGUMENT, lgrStatus.message());
-
236  }
-
237  else
-
238  {
-
239  errorStatus =
-
240  grpc::Status(grpc::StatusCode::NOT_FOUND, lgrStatus.message());
-
241  }
-
242  return {result, errorStatus};
-
243  }
-
244 
-
245  result.set_ledger_index(ledger->info().seq);
-
246  result.set_validated(
-
247  RPC::isValidated(context.ledgerMaster, *ledger, context.app));
-
248 
-
249  // decode account
-
250  AccountID accountID;
-
251  std::string strIdent = params.account().address();
-
252  error_code_i code =
-
253  RPC::accountFromStringWithCode(accountID, strIdent, params.strict());
-
254  if (code != rpcSUCCESS)
-
255  {
-
256  grpc::Status errorStatus{
-
257  grpc::StatusCode::INVALID_ARGUMENT, "invalid account"};
-
258  return {result, errorStatus};
-
259  }
-
260 
-
261  // get account data
-
262  auto const sleAccepted = ledger->read(keylet::account(accountID));
-
263  if (sleAccepted)
-
264  {
-
265  RPC::convert(*result.mutable_account_data(), *sleAccepted);
-
266 
-
267  // signer lists
-
268  if (params.signer_lists())
-
269  {
-
270  auto const sleSigners = ledger->read(keylet::signers(accountID));
-
271  if (sleSigners)
-
272  {
-
273  org::xrpl::rpc::v1::SignerList& signerListProto =
-
274  *result.mutable_signer_list();
-
275  RPC::convert(signerListProto, *sleSigners);
-
276  }
-
277  }
-
278 
-
279  // queued transactions
-
280  if (params.queue())
-
281  {
-
282  if (!ledger->open())
+
226 std::pair<org::xrpl::rpc::v1::GetAccountInfoResponse, grpc::Status>
+
227 doAccountInfoGrpc(
+
228  RPC::GRPCContext<org::xrpl::rpc::v1::GetAccountInfoRequest>& context)
+
229 {
+
230  // Return values
+
231  org::xrpl::rpc::v1::GetAccountInfoResponse result;
+
232  grpc::Status status = grpc::Status::OK;
+
233 
+
234  // input
+
235  org::xrpl::rpc::v1::GetAccountInfoRequest& params = context.params;
+
236 
+
237  // get ledger
+
238  std::shared_ptr<ReadView const> ledger;
+
239  auto lgrStatus = RPC::ledgerFromRequest(ledger, context);
+
240  if (lgrStatus || !ledger)
+
241  {
+
242  grpc::Status errorStatus;
+
243  if (lgrStatus.toErrorCode() == rpcINVALID_PARAMS)
+
244  {
+
245  errorStatus = grpc::Status(
+
246  grpc::StatusCode::INVALID_ARGUMENT, lgrStatus.message());
+
247  }
+
248  else
+
249  {
+
250  errorStatus =
+
251  grpc::Status(grpc::StatusCode::NOT_FOUND, lgrStatus.message());
+
252  }
+
253  return {result, errorStatus};
+
254  }
+
255 
+
256  result.set_ledger_index(ledger->info().seq);
+
257  result.set_validated(
+
258  RPC::isValidated(context.ledgerMaster, *ledger, context.app));
+
259 
+
260  // decode account
+
261  AccountID accountID;
+
262  std::string strIdent = params.account().address();
+
263  error_code_i code =
+
264  RPC::accountFromStringWithCode(accountID, strIdent, params.strict());
+
265  if (code != rpcSUCCESS)
+
266  {
+
267  grpc::Status errorStatus{
+
268  grpc::StatusCode::INVALID_ARGUMENT, "invalid account"};
+
269  return {result, errorStatus};
+
270  }
+
271 
+
272  // get account data
+
273  auto const sleAccepted = ledger->read(keylet::account(accountID));
+
274  if (sleAccepted)
+
275  {
+
276  RPC::convert(*result.mutable_account_data(), *sleAccepted);
+
277 
+
278  // signer lists
+
279  if (params.signer_lists())
+
280  {
+
281  auto const sleSigners = ledger->read(keylet::signers(accountID));
+
282  if (sleSigners)
283  {
-
284  grpc::Status errorStatus{
-
285  grpc::StatusCode::INVALID_ARGUMENT,
-
286  "requested queue but ledger is not open"};
-
287  return {result, errorStatus};
-
288  }
-
289  std::vector<TxQ::TxDetails> const txs =
-
290  context.app.getTxQ().getAccountTxs(accountID, *ledger);
-
291  org::xrpl::rpc::v1::QueueData& queueData =
-
292  *result.mutable_queue_data();
-
293  RPC::convert(queueData, txs);
-
294  }
-
295  }
-
296  else
-
297  {
-
298  grpc::Status errorStatus{
-
299  grpc::StatusCode::NOT_FOUND, "account not found"};
-
300  return {result, errorStatus};
-
301  }
-
302 
-
303  return {result, status};
-
304 }
-
305 
-
306 } // namespace ripple
+
284  org::xrpl::rpc::v1::SignerList& signerListProto =
+
285  *result.mutable_signer_list();
+
286  RPC::convert(signerListProto, *sleSigners);
+
287  }
+
288  }
+
289 
+
290  // queued transactions
+
291  if (params.queue())
+
292  {
+
293  if (!ledger->open())
+
294  {
+
295  grpc::Status errorStatus{
+
296  grpc::StatusCode::INVALID_ARGUMENT,
+
297  "requested queue but ledger is not open"};
+
298  return {result, errorStatus};
+
299  }
+
300  std::vector<TxQ::TxDetails> const txs =
+
301  context.app.getTxQ().getAccountTxs(accountID, *ledger);
+
302  org::xrpl::rpc::v1::QueueData& queueData =
+
303  *result.mutable_queue_data();
+
304  RPC::convert(queueData, txs);
+
305  }
+
306  }
+
307  else
+
308  {
+
309  grpc::Status errorStatus{
+
310  grpc::StatusCode::NOT_FOUND, "account not found"};
+
311  return {result, errorStatus};
+
312  }
+
313 
+
314  return {result, status};
+
315 }
+
316 
+
317 } // namespace ripple
virtual LedgerInfo const & info() const =0
Returns information about the ledger.
Definition: Context.h:53
@@ -412,6 +423,7 @@ $(function() {
RequestType params
Definition: Context.h:72
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
bool isValidated(LedgerMaster &ledgerMaster, ReadView const &ledger, Application &app)
Definition: RPCHelpers.cpp:465
+
unsigned int apiVersion
Definition: Context.h:50
A type that represents either a sequence value or a ticket value.
Definition: SeqProxy.h:55
std::string to_string(Manifest const &m)
Format the specified manifest to a string for debugging purposes.
@@ -422,7 +434,7 @@ $(function() {
void inject_error(error_code_i code, JsonValue &json)
Add or update the json update to reflect the error code.
Definition: ErrorCodes.h:193
Status ledgerFromRequest(T &ledger, GRPCContext< R > &context)
Definition: RPCHelpers.cpp:253
Json::Value accountFromString(AccountID &result, std::string const &strIdent, bool bStrict)
Definition: RPCHelpers.cpp:83
-
std::pair< org::xrpl::rpc::v1::GetAccountInfoResponse, grpc::Status > doAccountInfoGrpc(RPC::GRPCContext< org::xrpl::rpc::v1::GetAccountInfoRequest > &context)
+
std::pair< org::xrpl::rpc::v1::GetAccountInfoResponse, grpc::Status > doAccountInfoGrpc(RPC::GRPCContext< org::xrpl::rpc::v1::GetAccountInfoRequest > &context)
Represents a JSON value.
Definition: json_value.h:145
Definition: XRPAmount.h:46
std::string toBase58(AccountID const &) const
Return ripple::toBase58 for the AccountID.
Definition: AccountID.cpp:134
diff --git a/AccountInfo__test_8cpp_source.html b/AccountInfo__test_8cpp_source.html index 984b8bbb7f..591d88d64f 100644 --- a/AccountInfo__test_8cpp_source.html +++ b/AccountInfo__test_8cpp_source.html @@ -259,462 +259,575 @@ $(function() {
188  }
189  }
190 
-
191  // Test the "signer_lists" argument in account_info, version 2 API.
+
191  // Test the "signer_lists" argument in account_info, with api_version 2.
192  void
-
193  testSignerListsV2()
+
193  testSignerListsApiVersion2()
194  {
195  using namespace jtx;
-
196  Env env(*this);
-
197  Account const alice{"alice"};
-
198  env.fund(XRP(1000), alice);
-
199 
-
200  auto const withoutSigners = std::string("{ ") +
-
201  "\"jsonrpc\": \"2.0\", "
-
202  "\"ripplerpc\": \"2.0\", "
-
203  "\"id\": 5, "
-
204  "\"method\": \"account_info\", "
-
205  "\"params\": { "
-
206  "\"account\": \"" +
-
207  alice.human() + "\"}}";
-
208 
-
209  auto const withSigners = std::string("{ ") +
-
210  "\"jsonrpc\": \"2.0\", "
-
211  "\"ripplerpc\": \"2.0\", "
-
212  "\"id\": 6, "
-
213  "\"method\": \"account_info\", "
-
214  "\"params\": { "
-
215  "\"account\": \"" +
-
216  alice.human() + "\", " + "\"signer_lists\": true }}";
-
217  // Alice has no SignerList yet.
-
218  {
-
219  // account_info without the "signer_lists" argument.
-
220  auto const info = env.rpc("json2", withoutSigners);
-
221  BEAST_EXPECT(
-
222  info.isMember(jss::result) &&
-
223  info[jss::result].isMember(jss::account_data));
-
224  BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
-
225  jss::signer_lists));
-
226  BEAST_EXPECT(
-
227  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
-
228  BEAST_EXPECT(
-
229  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
-
230  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 5);
-
231  }
-
232  {
-
233  // account_info with the "signer_lists" argument.
-
234  auto const info = env.rpc("json2", withSigners);
-
235  BEAST_EXPECT(
-
236  info.isMember(jss::result) &&
-
237  info[jss::result].isMember(jss::account_data));
-
238  auto const& data = info[jss::result][jss::account_data];
-
239  BEAST_EXPECT(data.isMember(jss::signer_lists));
-
240  auto const& signerLists = data[jss::signer_lists];
-
241  BEAST_EXPECT(signerLists.isArray());
-
242  BEAST_EXPECT(signerLists.size() == 0);
-
243  BEAST_EXPECT(
-
244  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
-
245  BEAST_EXPECT(
-
246  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
-
247  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
-
248  }
-
249  {
-
250  // Do both of the above as a batch job
-
251  auto const info = env.rpc(
-
252  "json2", '[' + withoutSigners + ", " + withSigners + ']');
-
253  BEAST_EXPECT(
-
254  info[0u].isMember(jss::result) &&
-
255  info[0u][jss::result].isMember(jss::account_data));
-
256  BEAST_EXPECT(!info[0u][jss::result][jss::account_data].isMember(
-
257  jss::signer_lists));
-
258  BEAST_EXPECT(
-
259  info[0u].isMember(jss::jsonrpc) &&
-
260  info[0u][jss::jsonrpc] == "2.0");
-
261  BEAST_EXPECT(
-
262  info[0u].isMember(jss::ripplerpc) &&
-
263  info[0u][jss::ripplerpc] == "2.0");
-
264  BEAST_EXPECT(info[0u].isMember(jss::id) && info[0u][jss::id] == 5);
+
196  Env env{*this, envconfig([](std::unique_ptr<Config> c) {
+
197  c->loadFromString("\n[beta_rpc_api]\n1\n");
+
198  return c;
+
199  })};
+
200  Account const alice{"alice"};
+
201  env.fund(XRP(1000), alice);
+
202 
+
203  auto const withoutSigners = std::string("{ ") +
+
204  "\"api_version\": 2, \"account\": \"" + alice.human() + "\"}";
+
205 
+
206  auto const withSigners = std::string("{ ") +
+
207  "\"api_version\": 2, \"account\": \"" + alice.human() + "\", " +
+
208  "\"signer_lists\": true }";
+
209 
+
210  // Alice has no SignerList yet.
+
211  {
+
212  // account_info without the "signer_lists" argument.
+
213  auto const info = env.rpc("json", "account_info", withoutSigners);
+
214  BEAST_EXPECT(info.isMember(jss::result));
+
215  BEAST_EXPECT(!info[jss::result].isMember(jss::signer_lists));
+
216  }
+
217  {
+
218  // account_info with the "signer_lists" argument.
+
219  auto const info = env.rpc("json", "account_info", withSigners);
+
220  BEAST_EXPECT(info.isMember(jss::result));
+
221  auto const& data = info[jss::result];
+
222  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
223  auto const& signerLists = data[jss::signer_lists];
+
224  BEAST_EXPECT(signerLists.isArray());
+
225  BEAST_EXPECT(signerLists.size() == 0);
+
226  }
+
227 
+
228  // Give alice a SignerList.
+
229  Account const bogie{"bogie"};
+
230 
+
231  Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
+
232  env(smallSigners);
+
233  {
+
234  // account_info without the "signer_lists" argument.
+
235  auto const info = env.rpc("json", "account_info", withoutSigners);
+
236  BEAST_EXPECT(info.isMember(jss::result));
+
237  BEAST_EXPECT(!info[jss::result].isMember(jss::signer_lists));
+
238  }
+
239  {
+
240  // account_info with the "signer_lists" argument.
+
241  auto const info = env.rpc("json", "account_info", withSigners);
+
242  BEAST_EXPECT(info.isMember(jss::result));
+
243  auto const& data = info[jss::result];
+
244  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
245  auto const& signerLists = data[jss::signer_lists];
+
246  BEAST_EXPECT(signerLists.isArray());
+
247  BEAST_EXPECT(signerLists.size() == 1);
+
248  auto const& signers = signerLists[0u];
+
249  BEAST_EXPECT(signers.isObject());
+
250  BEAST_EXPECT(signers[sfSignerQuorum.jsonName] == 2);
+
251  auto const& signerEntries = signers[sfSignerEntries.jsonName];
+
252  BEAST_EXPECT(signerEntries.size() == 1);
+
253  auto const& entry0 = signerEntries[0u][sfSignerEntry.jsonName];
+
254  BEAST_EXPECT(entry0[sfSignerWeight.jsonName] == 3);
+
255  }
+
256 
+
257  // Give alice a big signer list
+
258  Account const demon{"demon"};
+
259  Account const ghost{"ghost"};
+
260  Account const haunt{"haunt"};
+
261  Account const jinni{"jinni"};
+
262  Account const phase{"phase"};
+
263  Account const shade{"shade"};
+
264  Account const spook{"spook"};
265 
-
266  BEAST_EXPECT(
-
267  info[1u].isMember(jss::result) &&
-
268  info[1u][jss::result].isMember(jss::account_data));
-
269  auto const& data = info[1u][jss::result][jss::account_data];
-
270  BEAST_EXPECT(data.isMember(jss::signer_lists));
-
271  auto const& signerLists = data[jss::signer_lists];
-
272  BEAST_EXPECT(signerLists.isArray());
-
273  BEAST_EXPECT(signerLists.size() == 0);
-
274  BEAST_EXPECT(
-
275  info[1u].isMember(jss::jsonrpc) &&
-
276  info[1u][jss::jsonrpc] == "2.0");
-
277  BEAST_EXPECT(
-
278  info[1u].isMember(jss::ripplerpc) &&
-
279  info[1u][jss::ripplerpc] == "2.0");
-
280  BEAST_EXPECT(info[1u].isMember(jss::id) && info[1u][jss::id] == 6);
-
281  }
-
282 
-
283  // Give alice a SignerList.
-
284  Account const bogie{"bogie"};
-
285 
-
286  Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
-
287  env(smallSigners);
-
288  {
-
289  // account_info without the "signer_lists" argument.
-
290  auto const info = env.rpc("json2", withoutSigners);
-
291  BEAST_EXPECT(
-
292  info.isMember(jss::result) &&
-
293  info[jss::result].isMember(jss::account_data));
-
294  BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
-
295  jss::signer_lists));
-
296  BEAST_EXPECT(
-
297  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
-
298  BEAST_EXPECT(
-
299  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
-
300  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 5);
+
266  Json::Value const bigSigners = signers(
+
267  alice,
+
268  4,
+
269  {
+
270  {bogie, 1},
+
271  {demon, 1},
+
272  {ghost, 1},
+
273  {haunt, 1},
+
274  {jinni, 1},
+
275  {phase, 1},
+
276  {shade, 1},
+
277  {spook, 1},
+
278  });
+
279  env(bigSigners);
+
280  {
+
281  // account_info with the "signer_lists" argument.
+
282  auto const info = env.rpc("json", "account_info", withSigners);
+
283  BEAST_EXPECT(info.isMember(jss::result));
+
284  auto const& data = info[jss::result];
+
285  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
286  auto const& signerLists = data[jss::signer_lists];
+
287  BEAST_EXPECT(signerLists.isArray());
+
288  BEAST_EXPECT(signerLists.size() == 1);
+
289  auto const& signers = signerLists[0u];
+
290  BEAST_EXPECT(signers.isObject());
+
291  BEAST_EXPECT(signers[sfSignerQuorum.jsonName] == 4);
+
292  auto const& signerEntries = signers[sfSignerEntries.jsonName];
+
293  BEAST_EXPECT(signerEntries.size() == 8);
+
294  for (unsigned i = 0u; i < 8; ++i)
+
295  {
+
296  auto const& entry = signerEntries[i][sfSignerEntry.jsonName];
+
297  BEAST_EXPECT(entry.size() == 2);
+
298  BEAST_EXPECT(entry.isMember(sfAccount.jsonName));
+
299  BEAST_EXPECT(entry[sfSignerWeight.jsonName] == 1);
+
300  }
301  }
-
302  {
-
303  // account_info with the "signer_lists" argument.
-
304  auto const info = env.rpc("json2", withSigners);
-
305  BEAST_EXPECT(
-
306  info.isMember(jss::result) &&
-
307  info[jss::result].isMember(jss::account_data));
-
308  auto const& data = info[jss::result][jss::account_data];
-
309  BEAST_EXPECT(data.isMember(jss::signer_lists));
-
310  auto const& signerLists = data[jss::signer_lists];
-
311  BEAST_EXPECT(signerLists.isArray());
-
312  BEAST_EXPECT(signerLists.size() == 1);
-
313  auto const& signers = signerLists[0u];
-
314  BEAST_EXPECT(signers.isObject());
-
315  BEAST_EXPECT(signers[sfSignerQuorum.jsonName] == 2);
-
316  auto const& signerEntries = signers[sfSignerEntries.jsonName];
-
317  BEAST_EXPECT(signerEntries.size() == 1);
-
318  auto const& entry0 = signerEntries[0u][sfSignerEntry.jsonName];
-
319  BEAST_EXPECT(entry0[sfSignerWeight.jsonName] == 3);
-
320  BEAST_EXPECT(
-
321  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
-
322  BEAST_EXPECT(
-
323  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
-
324  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
-
325  }
-
326 
-
327  // Give alice a big signer list
-
328  Account const demon{"demon"};
-
329  Account const ghost{"ghost"};
-
330  Account const haunt{"haunt"};
-
331  Account const jinni{"jinni"};
-
332  Account const phase{"phase"};
-
333  Account const shade{"shade"};
-
334  Account const spook{"spook"};
-
335 
-
336  Json::Value const bigSigners = signers(
-
337  alice,
-
338  4,
-
339  {
-
340  {bogie, 1},
-
341  {demon, 1},
-
342  {ghost, 1},
-
343  {haunt, 1},
-
344  {jinni, 1},
-
345  {phase, 1},
-
346  {shade, 1},
-
347  {spook, 1},
-
348  });
-
349  env(bigSigners);
-
350  {
-
351  // account_info with the "signer_lists" argument.
-
352  auto const info = env.rpc("json2", withSigners);
-
353  BEAST_EXPECT(
-
354  info.isMember(jss::result) &&
-
355  info[jss::result].isMember(jss::account_data));
-
356  auto const& data = info[jss::result][jss::account_data];
-
357  BEAST_EXPECT(data.isMember(jss::signer_lists));
-
358  auto const& signerLists = data[jss::signer_lists];
-
359  BEAST_EXPECT(signerLists.isArray());
-
360  BEAST_EXPECT(signerLists.size() == 1);
-
361  auto const& signers = signerLists[0u];
-
362  BEAST_EXPECT(signers.isObject());
-
363  BEAST_EXPECT(signers[sfSignerQuorum.jsonName] == 4);
-
364  auto const& signerEntries = signers[sfSignerEntries.jsonName];
-
365  BEAST_EXPECT(signerEntries.size() == 8);
-
366  for (unsigned i = 0u; i < 8; ++i)
-
367  {
-
368  auto const& entry = signerEntries[i][sfSignerEntry.jsonName];
-
369  BEAST_EXPECT(entry.size() == 2);
-
370  BEAST_EXPECT(entry.isMember(sfAccount.jsonName));
-
371  BEAST_EXPECT(entry[sfSignerWeight.jsonName] == 1);
-
372  }
-
373  BEAST_EXPECT(
-
374  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
-
375  BEAST_EXPECT(
-
376  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
-
377  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
-
378  }
-
379  }
-
380 
-
381  // gRPC stuff
-
382  class GetAccountInfoClient : public GRPCTestClientBase
-
383  {
-
384  public:
-
385  org::xrpl::rpc::v1::GetAccountInfoRequest request;
-
386  org::xrpl::rpc::v1::GetAccountInfoResponse reply;
-
387 
-
388  explicit GetAccountInfoClient(std::string const& port)
-
389  : GRPCTestClientBase(port)
-
390  {
-
391  }
-
392 
-
393  void
-
394  GetAccountInfo()
-
395  {
-
396  status = stub_->GetAccountInfo(&context, request, &reply);
-
397  }
-
398  };
-
399 
-
400  void
-
401  testSimpleGrpc()
-
402  {
-
403  testcase("gRPC simple");
-
404 
-
405  using namespace jtx;
-
406  std::unique_ptr<Config> config = envconfig(addGrpcConfig);
-
407  std::string grpcPort = *(*config)["port_grpc"].get<std::string>("port");
-
408  Env env(*this, std::move(config));
-
409  Account const alice{"alice"};
-
410  env.fund(drops(1000 * 1000 * 1000), alice);
-
411 
-
412  {
-
413  // most simple case
-
414  GetAccountInfoClient client(grpcPort);
-
415  client.request.mutable_account()->set_address(alice.human());
-
416  client.GetAccountInfo();
-
417  if (!BEAST_EXPECT(client.status.ok()))
-
418  {
-
419  return;
-
420  }
-
421  BEAST_EXPECT(
-
422  client.reply.account_data().account().value().address() ==
-
423  alice.human());
-
424  }
-
425  {
-
426  GetAccountInfoClient client(grpcPort);
-
427  client.request.mutable_account()->set_address(alice.human());
-
428  client.request.set_queue(true);
-
429  client.request.mutable_ledger()->set_sequence(3);
-
430  client.GetAccountInfo();
-
431  if (!BEAST_EXPECT(client.status.ok()))
-
432  return;
+
302  }
+
303 
+
304  // Test the "signer_lists" argument in account_info, version 2 API.
+
305  void
+
306  testSignerListsV2()
+
307  {
+
308  using namespace jtx;
+
309  Env env(*this);
+
310  Account const alice{"alice"};
+
311  env.fund(XRP(1000), alice);
+
312 
+
313  auto const withoutSigners = std::string("{ ") +
+
314  "\"jsonrpc\": \"2.0\", "
+
315  "\"ripplerpc\": \"2.0\", "
+
316  "\"id\": 5, "
+
317  "\"method\": \"account_info\", "
+
318  "\"params\": { "
+
319  "\"account\": \"" +
+
320  alice.human() + "\"}}";
+
321 
+
322  auto const withSigners = std::string("{ ") +
+
323  "\"jsonrpc\": \"2.0\", "
+
324  "\"ripplerpc\": \"2.0\", "
+
325  "\"id\": 6, "
+
326  "\"method\": \"account_info\", "
+
327  "\"params\": { "
+
328  "\"account\": \"" +
+
329  alice.human() + "\", " + "\"signer_lists\": true }}";
+
330  // Alice has no SignerList yet.
+
331  {
+
332  // account_info without the "signer_lists" argument.
+
333  auto const info = env.rpc("json2", withoutSigners);
+
334  BEAST_EXPECT(
+
335  info.isMember(jss::result) &&
+
336  info[jss::result].isMember(jss::account_data));
+
337  BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
+
338  jss::signer_lists));
+
339  BEAST_EXPECT(
+
340  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
+
341  BEAST_EXPECT(
+
342  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
+
343  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 5);
+
344  }
+
345  {
+
346  // account_info with the "signer_lists" argument.
+
347  auto const info = env.rpc("json2", withSigners);
+
348  BEAST_EXPECT(
+
349  info.isMember(jss::result) &&
+
350  info[jss::result].isMember(jss::account_data));
+
351  auto const& data = info[jss::result][jss::account_data];
+
352  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
353  auto const& signerLists = data[jss::signer_lists];
+
354  BEAST_EXPECT(signerLists.isArray());
+
355  BEAST_EXPECT(signerLists.size() == 0);
+
356  BEAST_EXPECT(
+
357  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
+
358  BEAST_EXPECT(
+
359  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
+
360  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
+
361  }
+
362  {
+
363  // Do both of the above as a batch job
+
364  auto const info = env.rpc(
+
365  "json2", '[' + withoutSigners + ", " + withSigners + ']');
+
366  BEAST_EXPECT(
+
367  info[0u].isMember(jss::result) &&
+
368  info[0u][jss::result].isMember(jss::account_data));
+
369  BEAST_EXPECT(!info[0u][jss::result][jss::account_data].isMember(
+
370  jss::signer_lists));
+
371  BEAST_EXPECT(
+
372  info[0u].isMember(jss::jsonrpc) &&
+
373  info[0u][jss::jsonrpc] == "2.0");
+
374  BEAST_EXPECT(
+
375  info[0u].isMember(jss::ripplerpc) &&
+
376  info[0u][jss::ripplerpc] == "2.0");
+
377  BEAST_EXPECT(info[0u].isMember(jss::id) && info[0u][jss::id] == 5);
+
378 
+
379  BEAST_EXPECT(
+
380  info[1u].isMember(jss::result) &&
+
381  info[1u][jss::result].isMember(jss::account_data));
+
382  auto const& data = info[1u][jss::result][jss::account_data];
+
383  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
384  auto const& signerLists = data[jss::signer_lists];
+
385  BEAST_EXPECT(signerLists.isArray());
+
386  BEAST_EXPECT(signerLists.size() == 0);
+
387  BEAST_EXPECT(
+
388  info[1u].isMember(jss::jsonrpc) &&
+
389  info[1u][jss::jsonrpc] == "2.0");
+
390  BEAST_EXPECT(
+
391  info[1u].isMember(jss::ripplerpc) &&
+
392  info[1u][jss::ripplerpc] == "2.0");
+
393  BEAST_EXPECT(info[1u].isMember(jss::id) && info[1u][jss::id] == 6);
+
394  }
+
395 
+
396  // Give alice a SignerList.
+
397  Account const bogie{"bogie"};
+
398 
+
399  Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
+
400  env(smallSigners);
+
401  {
+
402  // account_info without the "signer_lists" argument.
+
403  auto const info = env.rpc("json2", withoutSigners);
+
404  BEAST_EXPECT(
+
405  info.isMember(jss::result) &&
+
406  info[jss::result].isMember(jss::account_data));
+
407  BEAST_EXPECT(!info[jss::result][jss::account_data].isMember(
+
408  jss::signer_lists));
+
409  BEAST_EXPECT(
+
410  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
+
411  BEAST_EXPECT(
+
412  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
+
413  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 5);
+
414  }
+
415  {
+
416  // account_info with the "signer_lists" argument.
+
417  auto const info = env.rpc("json2", withSigners);
+
418  BEAST_EXPECT(
+
419  info.isMember(jss::result) &&
+
420  info[jss::result].isMember(jss::account_data));
+
421  auto const& data = info[jss::result][jss::account_data];
+
422  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
423  auto const& signerLists = data[jss::signer_lists];
+
424  BEAST_EXPECT(signerLists.isArray());
+
425  BEAST_EXPECT(signerLists.size() == 1);
+
426  auto const& signers = signerLists[0u];
+
427  BEAST_EXPECT(signers.isObject());
+
428  BEAST_EXPECT(signers[sfSignerQuorum.jsonName] == 2);
+
429  auto const& signerEntries = signers[sfSignerEntries.jsonName];
+
430  BEAST_EXPECT(signerEntries.size() == 1);
+
431  auto const& entry0 = signerEntries[0u][sfSignerEntry.jsonName];
+
432  BEAST_EXPECT(entry0[sfSignerWeight.jsonName] == 3);
433  BEAST_EXPECT(
-
434  client.reply.account_data()
-
435  .balance()
-
436  .value()
-
437  .xrp_amount()
-
438  .drops() == 1000 * 1000 * 1000);
-
439  BEAST_EXPECT(
-
440  client.reply.account_data().account().value().address() ==
-
441  alice.human());
-
442  BEAST_EXPECT(
-
443  client.reply.account_data().sequence().value() ==
-
444  env.seq(alice));
-
445  BEAST_EXPECT(client.reply.queue_data().txn_count() == 0);
-
446  }
-
447  }
+
434  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
+
435  BEAST_EXPECT(
+
436  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
+
437  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
+
438  }
+
439 
+
440  // Give alice a big signer list
+
441  Account const demon{"demon"};
+
442  Account const ghost{"ghost"};
+
443  Account const haunt{"haunt"};
+
444  Account const jinni{"jinni"};
+
445  Account const phase{"phase"};
+
446  Account const shade{"shade"};
+
447  Account const spook{"spook"};
448 
-
449  void
-
450  testErrorsGrpc()
-
451  {
-
452  testcase("gRPC errors");
-
453 
-
454  using namespace jtx;
-
455  std::unique_ptr<Config> config = envconfig(addGrpcConfig);
-
456  std::string grpcPort = *(*config)["port_grpc"].get<std::string>("port");
-
457  Env env(*this, std::move(config));
-
458  auto getClient = [&grpcPort]() {
-
459  return GetAccountInfoClient(grpcPort);
-
460  };
-
461  Account const alice{"alice"};
-
462  env.fund(drops(1000 * 1000 * 1000), alice);
-
463 
-
464  {
-
465  // bad address
-
466  auto client = getClient();
-
467  client.request.mutable_account()->set_address("deadbeef");
-
468  client.GetAccountInfo();
-
469  BEAST_EXPECT(!client.status.ok());
-
470  }
-
471  {
-
472  // no account
-
473  Account const bogie{"bogie"};
-
474  auto client = getClient();
-
475  client.request.mutable_account()->set_address(bogie.human());
-
476  client.GetAccountInfo();
-
477  BEAST_EXPECT(!client.status.ok());
-
478  }
-
479  {
-
480  // bad ledger_index
-
481  auto client = getClient();
-
482  client.request.mutable_account()->set_address(alice.human());
-
483  client.request.mutable_ledger()->set_sequence(0);
-
484  client.GetAccountInfo();
-
485  BEAST_EXPECT(!client.status.ok());
-
486  }
-
487  }
-
488 
-
489  void
-
490  testSignerListsGrpc()
-
491  {
-
492  testcase("gRPC singer lists");
+
449  Json::Value const bigSigners = signers(
+
450  alice,
+
451  4,
+
452  {
+
453  {bogie, 1},
+
454  {demon, 1},
+
455  {ghost, 1},
+
456  {haunt, 1},
+
457  {jinni, 1},
+
458  {phase, 1},
+
459  {shade, 1},
+
460  {spook, 1},
+
461  });
+
462  env(bigSigners);
+
463  {
+
464  // account_info with the "signer_lists" argument.
+
465  auto const info = env.rpc("json2", withSigners);
+
466  BEAST_EXPECT(
+
467  info.isMember(jss::result) &&
+
468  info[jss::result].isMember(jss::account_data));
+
469  auto const& data = info[jss::result][jss::account_data];
+
470  BEAST_EXPECT(data.isMember(jss::signer_lists));
+
471  auto const& signerLists = data[jss::signer_lists];
+
472  BEAST_EXPECT(signerLists.isArray());
+
473  BEAST_EXPECT(signerLists.size() == 1);
+
474  auto const& signers = signerLists[0u];
+
475  BEAST_EXPECT(signers.isObject());
+
476  BEAST_EXPECT(signers[sfSignerQuorum.jsonName] == 4);
+
477  auto const& signerEntries = signers[sfSignerEntries.jsonName];
+
478  BEAST_EXPECT(signerEntries.size() == 8);
+
479  for (unsigned i = 0u; i < 8; ++i)
+
480  {
+
481  auto const& entry = signerEntries[i][sfSignerEntry.jsonName];
+
482  BEAST_EXPECT(entry.size() == 2);
+
483  BEAST_EXPECT(entry.isMember(sfAccount.jsonName));
+
484  BEAST_EXPECT(entry[sfSignerWeight.jsonName] == 1);
+
485  }
+
486  BEAST_EXPECT(
+
487  info.isMember(jss::jsonrpc) && info[jss::jsonrpc] == "2.0");
+
488  BEAST_EXPECT(
+
489  info.isMember(jss::ripplerpc) && info[jss::ripplerpc] == "2.0");
+
490  BEAST_EXPECT(info.isMember(jss::id) && info[jss::id] == 6);
+
491  }
+
492  }
493 
-
494  using namespace jtx;
-
495  std::unique_ptr<Config> config = envconfig(addGrpcConfig);
-
496  std::string grpcPort = *(*config)["port_grpc"].get<std::string>("port");
-
497  Env env(*this, std::move(config));
-
498  auto getClient = [&grpcPort]() {
-
499  return GetAccountInfoClient(grpcPort);
-
500  };
-
501 
-
502  Account const alice{"alice"};
-
503  env.fund(drops(1000 * 1000 * 1000), alice);
-
504 
-
505  {
-
506  auto client = getClient();
-
507  client.request.mutable_account()->set_address(alice.human());
-
508  client.request.set_signer_lists(true);
-
509  client.GetAccountInfo();
-
510  if (!BEAST_EXPECT(client.status.ok()))
-
511  return;
-
512  BEAST_EXPECT(client.reply.signer_list().signer_entries_size() == 0);
-
513  }
-
514 
-
515  // Give alice a SignerList.
-
516  Account const bogie{"bogie"};
-
517  Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
-
518  env(smallSigners);
-
519  {
-
520  auto client = getClient();
-
521  client.request.mutable_account()->set_address(alice.human());
-
522  client.request.set_signer_lists(false);
-
523  client.GetAccountInfo();
-
524  if (!BEAST_EXPECT(client.status.ok()))
-
525  return;
-
526  BEAST_EXPECT(client.reply.signer_list().signer_entries_size() == 0);
-
527  }
-
528  {
-
529  auto client = getClient();
-
530  client.request.mutable_account()->set_address(alice.human());
-
531  client.request.set_signer_lists(true);
-
532  client.GetAccountInfo();
-
533  if (!BEAST_EXPECT(client.status.ok()))
-
534  {
-
535  return;
-
536  }
-
537  BEAST_EXPECT(
-
538  client.reply.account_data().owner_count().value() == 1);
-
539  BEAST_EXPECT(client.reply.signer_list().signer_entries_size() == 1);
-
540  }
-
541 
-
542  // Give alice a big signer list
-
543  Account const demon{"demon"};
-
544  Account const ghost{"ghost"};
-
545  Account const haunt{"haunt"};
-
546  Account const jinni{"jinni"};
-
547  Account const phase{"phase"};
-
548  Account const shade{"shade"};
-
549  Account const spook{"spook"};
-
550  Json::Value const bigSigners = signers(
-
551  alice,
-
552  4,
-
553  {
-
554  {bogie, 1},
-
555  {demon, 1},
-
556  {ghost, 1},
-
557  {haunt, 1},
-
558  {jinni, 1},
-
559  {phase, 1},
-
560  {shade, 1},
-
561  {spook, 1},
-
562  });
-
563  env(bigSigners);
-
564 
-
565  std::set<std::string> accounts;
-
566  accounts.insert(bogie.human());
-
567  accounts.insert(demon.human());
-
568  accounts.insert(ghost.human());
-
569  accounts.insert(haunt.human());
-
570  accounts.insert(jinni.human());
-
571  accounts.insert(phase.human());
-
572  accounts.insert(shade.human());
-
573  accounts.insert(spook.human());
-
574  {
-
575  auto client = getClient();
-
576  client.request.mutable_account()->set_address(alice.human());
-
577  client.request.set_signer_lists(true);
-
578  client.GetAccountInfo();
-
579  if (!BEAST_EXPECT(client.status.ok()))
-
580  {
-
581  return;
-
582  }
-
583  BEAST_EXPECT(
-
584  client.reply.account_data().owner_count().value() == 1);
-
585  auto& signerList = client.reply.signer_list();
-
586  BEAST_EXPECT(signerList.signer_quorum().value() == 4);
-
587  BEAST_EXPECT(signerList.signer_entries_size() == 8);
-
588  for (int i = 0; i < 8; ++i)
-
589  {
-
590  BEAST_EXPECT(
-
591  signerList.signer_entries(i).signer_weight().value() == 1);
-
592  BEAST_EXPECT(
-
593  accounts.erase(signerList.signer_entries(i)
-
594  .account()
-
595  .value()
-
596  .address()) == 1);
-
597  }
-
598  BEAST_EXPECT(accounts.size() == 0);
+
494  // gRPC stuff
+
495  class GetAccountInfoClient : public GRPCTestClientBase
+
496  {
+
497  public:
+
498  org::xrpl::rpc::v1::GetAccountInfoRequest request;
+
499  org::xrpl::rpc::v1::GetAccountInfoResponse reply;
+
500 
+
501  explicit GetAccountInfoClient(std::string const& port)
+
502  : GRPCTestClientBase(port)
+
503  {
+
504  }
+
505 
+
506  void
+
507  GetAccountInfo()
+
508  {
+
509  status = stub_->GetAccountInfo(&context, request, &reply);
+
510  }
+
511  };
+
512 
+
513  void
+
514  testSimpleGrpc()
+
515  {
+
516  testcase("gRPC simple");
+
517 
+
518  using namespace jtx;
+
519  std::unique_ptr<Config> config = envconfig(addGrpcConfig);
+
520  std::string grpcPort = *(*config)["port_grpc"].get<std::string>("port");
+
521  Env env(*this, std::move(config));
+
522  Account const alice{"alice"};
+
523  env.fund(drops(1000 * 1000 * 1000), alice);
+
524 
+
525  {
+
526  // most simple case
+
527  GetAccountInfoClient client(grpcPort);
+
528  client.request.mutable_account()->set_address(alice.human());
+
529  client.GetAccountInfo();
+
530  if (!BEAST_EXPECT(client.status.ok()))
+
531  {
+
532  return;
+
533  }
+
534  BEAST_EXPECT(
+
535  client.reply.account_data().account().value().address() ==
+
536  alice.human());
+
537  }
+
538  {
+
539  GetAccountInfoClient client(grpcPort);
+
540  client.request.mutable_account()->set_address(alice.human());
+
541  client.request.set_queue(true);
+
542  client.request.mutable_ledger()->set_sequence(3);
+
543  client.GetAccountInfo();
+
544  if (!BEAST_EXPECT(client.status.ok()))
+
545  return;
+
546  BEAST_EXPECT(
+
547  client.reply.account_data()
+
548  .balance()
+
549  .value()
+
550  .xrp_amount()
+
551  .drops() == 1000 * 1000 * 1000);
+
552  BEAST_EXPECT(
+
553  client.reply.account_data().account().value().address() ==
+
554  alice.human());
+
555  BEAST_EXPECT(
+
556  client.reply.account_data().sequence().value() ==
+
557  env.seq(alice));
+
558  BEAST_EXPECT(client.reply.queue_data().txn_count() == 0);
+
559  }
+
560  }
+
561 
+
562  void
+
563  testErrorsGrpc()
+
564  {
+
565  testcase("gRPC errors");
+
566 
+
567  using namespace jtx;
+
568  std::unique_ptr<Config> config = envconfig(addGrpcConfig);
+
569  std::string grpcPort = *(*config)["port_grpc"].get<std::string>("port");
+
570  Env env(*this, std::move(config));
+
571  auto getClient = [&grpcPort]() {
+
572  return GetAccountInfoClient(grpcPort);
+
573  };
+
574  Account const alice{"alice"};
+
575  env.fund(drops(1000 * 1000 * 1000), alice);
+
576 
+
577  {
+
578  // bad address
+
579  auto client = getClient();
+
580  client.request.mutable_account()->set_address("deadbeef");
+
581  client.GetAccountInfo();
+
582  BEAST_EXPECT(!client.status.ok());
+
583  }
+
584  {
+
585  // no account
+
586  Account const bogie{"bogie"};
+
587  auto client = getClient();
+
588  client.request.mutable_account()->set_address(bogie.human());
+
589  client.GetAccountInfo();
+
590  BEAST_EXPECT(!client.status.ok());
+
591  }
+
592  {
+
593  // bad ledger_index
+
594  auto client = getClient();
+
595  client.request.mutable_account()->set_address(alice.human());
+
596  client.request.mutable_ledger()->set_sequence(0);
+
597  client.GetAccountInfo();
+
598  BEAST_EXPECT(!client.status.ok());
599  }
600  }
601 
602  void
-
603  run() override
-
604  {
-
605  testErrors();
-
606  testSignerLists();
-
607  testSignerListsV2();
-
608  testSimpleGrpc();
-
609  testErrorsGrpc();
-
610  testSignerListsGrpc();
-
611  }
-
612 };
-
613 
-
614 BEAST_DEFINE_TESTSUITE(AccountInfo, app, ripple);
-
615 
-
616 } // namespace test
-
617 } // namespace ripple
+
603  testSignerListsGrpc()
+
604  {
+
605  testcase("gRPC singer lists");
+
606 
+
607  using namespace jtx;
+
608  std::unique_ptr<Config> config = envconfig(addGrpcConfig);
+
609  std::string grpcPort = *(*config)["port_grpc"].get<std::string>("port");
+
610  Env env(*this, std::move(config));
+
611  auto getClient = [&grpcPort]() {
+
612  return GetAccountInfoClient(grpcPort);
+
613  };
+
614 
+
615  Account const alice{"alice"};
+
616  env.fund(drops(1000 * 1000 * 1000), alice);
+
617 
+
618  {
+
619  auto client = getClient();
+
620  client.request.mutable_account()->set_address(alice.human());
+
621  client.request.set_signer_lists(true);
+
622  client.GetAccountInfo();
+
623  if (!BEAST_EXPECT(client.status.ok()))
+
624  return;
+
625  BEAST_EXPECT(client.reply.signer_list().signer_entries_size() == 0);
+
626  }
+
627 
+
628  // Give alice a SignerList.
+
629  Account const bogie{"bogie"};
+
630  Json::Value const smallSigners = signers(alice, 2, {{bogie, 3}});
+
631  env(smallSigners);
+
632  {
+
633  auto client = getClient();
+
634  client.request.mutable_account()->set_address(alice.human());
+
635  client.request.set_signer_lists(false);
+
636  client.GetAccountInfo();
+
637  if (!BEAST_EXPECT(client.status.ok()))
+
638  return;
+
639  BEAST_EXPECT(client.reply.signer_list().signer_entries_size() == 0);
+
640  }
+
641  {
+
642  auto client = getClient();
+
643  client.request.mutable_account()->set_address(alice.human());
+
644  client.request.set_signer_lists(true);
+
645  client.GetAccountInfo();
+
646  if (!BEAST_EXPECT(client.status.ok()))
+
647  {
+
648  return;
+
649  }
+
650  BEAST_EXPECT(
+
651  client.reply.account_data().owner_count().value() == 1);
+
652  BEAST_EXPECT(client.reply.signer_list().signer_entries_size() == 1);
+
653  }
+
654 
+
655  // Give alice a big signer list
+
656  Account const demon{"demon"};
+
657  Account const ghost{"ghost"};
+
658  Account const haunt{"haunt"};
+
659  Account const jinni{"jinni"};
+
660  Account const phase{"phase"};
+
661  Account const shade{"shade"};
+
662  Account const spook{"spook"};
+
663  Json::Value const bigSigners = signers(
+
664  alice,
+
665  4,
+
666  {
+
667  {bogie, 1},
+
668  {demon, 1},
+
669  {ghost, 1},
+
670  {haunt, 1},
+
671  {jinni, 1},
+
672  {phase, 1},
+
673  {shade, 1},
+
674  {spook, 1},
+
675  });
+
676  env(bigSigners);
+
677 
+
678  std::set<std::string> accounts;
+
679  accounts.insert(bogie.human());
+
680  accounts.insert(demon.human());
+
681  accounts.insert(ghost.human());
+
682  accounts.insert(haunt.human());
+
683  accounts.insert(jinni.human());
+
684  accounts.insert(phase.human());
+
685  accounts.insert(shade.human());
+
686  accounts.insert(spook.human());
+
687  {
+
688  auto client = getClient();
+
689  client.request.mutable_account()->set_address(alice.human());
+
690  client.request.set_signer_lists(true);
+
691  client.GetAccountInfo();
+
692  if (!BEAST_EXPECT(client.status.ok()))
+
693  {
+
694  return;
+
695  }
+
696  BEAST_EXPECT(
+
697  client.reply.account_data().owner_count().value() == 1);
+
698  auto& signerList = client.reply.signer_list();
+
699  BEAST_EXPECT(signerList.signer_quorum().value() == 4);
+
700  BEAST_EXPECT(signerList.signer_entries_size() == 8);
+
701  for (int i = 0; i < 8; ++i)
+
702  {
+
703  BEAST_EXPECT(
+
704  signerList.signer_entries(i).signer_weight().value() == 1);
+
705  BEAST_EXPECT(
+
706  accounts.erase(signerList.signer_entries(i)
+
707  .account()
+
708  .value()
+
709  .address()) == 1);
+
710  }
+
711  BEAST_EXPECT(accounts.size() == 0);
+
712  }
+
713  }
+
714 
+
715  void
+
716  run() override
+
717  {
+
718  testErrors();
+
719  testSignerLists();
+
720  testSignerListsApiVersion2();
+
721  testSignerListsV2();
+
722  testSimpleGrpc();
+
723  testErrorsGrpc();
+
724  testSignerListsGrpc();
+
725  }
+
726 };
+
727 
+
728 BEAST_DEFINE_TESTSUITE(AccountInfo, app, ripple);
+
729 
+
730 } // namespace test
+
731 } // namespace ripple
const SF_UINT16 sfSignerWeight
const XRP_t XRP
Converts to XRP Issue or STAmount.
Definition: amount.cpp:105
-
BEAST_DEFINE_TESTSUITE(AccountDelete, app, ripple)
STL class.
PrettyAmount drops(Integer i)
Returns an XRP PrettyAmount, which is trivially convertible to STAmount.
Definition: amount.h:241
-
void run() override
-
void testSignerListsV2()
+
void run() override
+
void testSignerListsV2()
std::unique_ptr< org::xrpl::rpc::v1::XRPLedgerAPIService::Stub > stub_
T size(T... args)
std::unique_ptr< Config > addGrpcConfig(std::unique_ptr< Config >)
add a grpc address and port to config
Definition: envconfig.cpp:113
-
org::xrpl::rpc::v1::GetAccountInfoRequest request
+
org::xrpl::rpc::v1::GetAccountInfoRequest request
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
Definition: envconfig.h:49
-
void testErrorsGrpc()
+
void testErrorsGrpc()
const Json::StaticString jsonName
Definition: SField.h:133
grpc::Status status
const SF_UINT32 sfSignerQuorum
-
GetAccountInfoClient(std::string const &port)
+
GetAccountInfoClient(std::string const &port)
-
void testSignerListsGrpc()
-
org::xrpl::rpc::v1::GetAccountInfoResponse reply
+
void testSignerListsGrpc()
+
org::xrpl::rpc::v1::GetAccountInfoResponse reply
T erase(T... args)
-
void testSimpleGrpc()
+
void testSimpleGrpc()
void testSignerLists()
-
+
const SField sfSignerEntry
grpc::ClientContext context
-
void GetAccountInfo()
+
void GetAccountInfo()
const SField sfSignerEntries
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
T insert(T... args)
@@ -724,9 +837,11 @@ $(function() {
STL class.
void testErrors()
+
void testSignerListsApiVersion2()
A transaction testing environment.
Definition: Env.h:115
Json::Value rpc(std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
Definition: Env.h:683
Represents a JSON value.
Definition: json_value.h:145
+
BEAST_DEFINE_TESTSUITE(DeliverMin, app, ripple)