From 1e73f3f3ff8ef80e27a2d06409e0ef45a2e1eb42 Mon Sep 17 00:00:00 2001 From: yinyiqian1 Date: Wed, 22 Apr 2026 23:34:03 -0400 Subject: [PATCH] Merge develop into ConfidentialTransfer (#6987) Signed-off-by: dependabot[bot] Signed-off-by: chuanshanjida Co-authored-by: Ed Hennis Co-authored-by: Bart Co-authored-by: Bart <11445373+bthomee@users.noreply.github.com> Co-authored-by: Zhiyuan Wang <96991820+Kassaking7@users.noreply.github.com> Co-authored-by: Alex Kremer Co-authored-by: Ayaz Salikhov Co-authored-by: Sergey Kuznetsov Co-authored-by: JCW Co-authored-by: xrplf-ai-reviewer[bot] <266832837+xrplf-ai-reviewer[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gregory Tsipenyuk Co-authored-by: chuanshanjida Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Vito Tumas <5780819+Tapanito@users.noreply.github.com> --- .clang-format | 15 +- .clang-tidy | 102 +- .github/scripts/check-pr-description.py | 85 + .../scripts/levelization/results/loops.txt | 8 +- .../scripts/levelization/results/ordering.txt | 48 +- .github/scripts/rename/binary.sh | 10 +- .github/scripts/rename/cmake.sh | 38 +- .github/scripts/rename/config.sh | 28 +- .github/scripts/rename/copyright.sh | 54 +- .github/scripts/rename/definitions.sh | 10 +- .github/scripts/rename/docs.sh | 10 +- .github/scripts/rename/include.sh | 4 +- .github/scripts/rename/namespace.sh | 26 +- .github/workflows/check-pr-description.yml | 30 + .github/workflows/on-pr.yml | 2 +- .github/workflows/publish-docs.yml | 2 +- .../workflows/reusable-build-test-config.yml | 51 +- .../workflows/reusable-clang-tidy-files.yml | 21 +- .github/workflows/reusable-clang-tidy.yml | 4 +- .gitignore | 1 + .pre-commit-config.yaml | 16 +- BUILD.md | 15 + CMakeLists.txt | 1 + CONTRIBUTING.md | 20 + bin/git/setup-upstreams.sh | 78 +- bin/git/squash-branches.sh | 41 +- bin/git/update-version.sh | 26 +- bin/pre-commit/clang_tidy_check.py | 206 +++ cfg/xrpld-example.cfg | 69 + cmake/XrplCore.cmake | 12 - cmake/XrplProtocolAutogen.cmake | 405 ++--- cmake/XrplProtocolAutogenRun.cmake | 39 + .../codegen}/generate_ledger_classes.py | 18 +- .../scripts/codegen}/generate_tx_classes.py | 18 +- .../scripts/codegen}/macro_parser_common.py | 0 .../scripts/codegen}/requirements.txt | 0 .../codegen}/templates/LedgerEntry.h.mako | 0 .../templates/LedgerEntryTests.cpp.mako | 0 .../codegen}/templates/Transaction.h.mako | 0 .../templates/TransactionTests.cpp.mako | 0 conan/lockfile/regenerate.sh | 18 +- include/xrpl/basics/BasicConfig.h | 17 +- include/xrpl/basics/Buffer.h | 13 +- include/xrpl/basics/CompressionAlgorithms.h | 11 +- include/xrpl/basics/CountedObject.h | 4 +- include/xrpl/basics/DecayingSample.h | 2 +- include/xrpl/basics/Expected.h | 2 +- include/xrpl/basics/IntrusiveRefCounts.h | 10 +- include/xrpl/basics/LocalValue.h | 9 +- include/xrpl/basics/Log.h | 6 +- include/xrpl/basics/Number.h | 34 +- include/xrpl/basics/RangeSet.h | 10 + include/xrpl/basics/SlabAllocator.h | 38 +- include/xrpl/basics/Slice.h | 6 +- include/xrpl/basics/TaggedCache.h | 2 +- include/xrpl/basics/ToString.h | 2 +- include/xrpl/basics/algorithm.h | 6 +- include/xrpl/basics/base_uint.h | 32 +- include/xrpl/basics/contract.h | 3 +- .../xrpl/basics/partitioned_unordered_map.h | 3 +- include/xrpl/basics/random.h | 22 +- include/xrpl/basics/safe_cast.h | 18 +- include/xrpl/basics/strHex.h | 4 +- include/xrpl/basics/tagged_integer.h | 3 +- include/xrpl/beast/asio/io_latency_probe.h | 6 +- .../beast/container/aged_container_utility.h | 2 +- .../detail/aged_associative_container.h | 8 +- .../detail/aged_container_iterator.h | 21 +- .../container/detail/aged_ordered_container.h | 131 +- .../detail/aged_unordered_container.h | 140 +- .../detail/empty_base_optimization.h | 8 +- include/xrpl/beast/core/List.h | 6 +- include/xrpl/beast/core/LockFreeStack.h | 12 +- include/xrpl/beast/core/SemanticVersion.h | 4 +- include/xrpl/beast/hash/hash_append.h | 9 +- include/xrpl/beast/hash/xxhasher.h | 26 +- include/xrpl/beast/insight/Collector.h | 6 +- include/xrpl/beast/insight/Counter.h | 10 +- include/xrpl/beast/insight/CounterImpl.h | 6 +- include/xrpl/beast/insight/Event.h | 10 +- include/xrpl/beast/insight/EventImpl.h | 6 +- include/xrpl/beast/insight/Gauge.h | 10 +- include/xrpl/beast/insight/GaugeImpl.h | 6 +- include/xrpl/beast/insight/Group.h | 6 +- include/xrpl/beast/insight/Groups.h | 6 +- include/xrpl/beast/insight/Hook.h | 10 +- include/xrpl/beast/insight/HookImpl.h | 6 +- include/xrpl/beast/insight/Meter.h | 10 +- include/xrpl/beast/insight/MeterImpl.h | 6 +- include/xrpl/beast/insight/NullCollector.h | 6 +- include/xrpl/beast/insight/StatsDCollector.h | 6 +- include/xrpl/beast/net/IPAddress.h | 4 + include/xrpl/beast/net/IPAddressConversion.h | 6 +- include/xrpl/beast/net/IPAddressV4.h | 6 +- include/xrpl/beast/net/IPAddressV6.h | 6 +- include/xrpl/beast/net/IPEndpoint.h | 12 +- include/xrpl/beast/rfc2616.h | 13 +- include/xrpl/beast/test/yield_to.h | 8 +- include/xrpl/beast/type_name.h | 14 +- include/xrpl/beast/unit_test/amount.h | 6 +- .../beast/unit_test/detail/const_container.h | 8 +- include/xrpl/beast/unit_test/global_suites.h | 6 +- include/xrpl/beast/unit_test/match.h | 6 +- include/xrpl/beast/unit_test/recorder.h | 22 +- include/xrpl/beast/unit_test/reporter.h | 70 +- include/xrpl/beast/unit_test/results.h | 23 +- include/xrpl/beast/unit_test/runner.h | 10 +- include/xrpl/beast/unit_test/suite.h | 22 +- include/xrpl/beast/unit_test/suite_info.h | 6 +- include/xrpl/beast/unit_test/suite_list.h | 6 +- include/xrpl/beast/unit_test/thread.h | 30 +- include/xrpl/beast/utility/Journal.h | 87 +- include/xrpl/beast/utility/PropertyStream.h | 4 +- include/xrpl/beast/utility/WrappedSink.h | 6 +- include/xrpl/beast/utility/Zero.h | 8 +- include/xrpl/beast/utility/maybe_const.h | 6 +- include/xrpl/beast/xor_shift_engine.h | 16 +- include/xrpl/conditions/Condition.h | 7 +- include/xrpl/conditions/Fulfillment.h | 6 +- .../xrpl/conditions/detail/PreimageSha256.h | 6 +- include/xrpl/conditions/detail/error.h | 6 +- include/xrpl/conditions/detail/utils.h | 11 +- include/xrpl/core/ClosureCounter.h | 10 +- include/xrpl/core/HashRouter.h | 4 +- include/xrpl/core/JobQueue.h | 5 +- include/xrpl/core/JobTypeData.h | 6 +- include/xrpl/core/JobTypes.h | 3 +- include/xrpl/core/LoadEvent.h | 2 +- include/xrpl/core/PeerReservationTable.h | 4 +- include/xrpl/core/detail/Workers.h | 4 +- include/xrpl/json/json_writer.h | 16 +- include/xrpl/json/to_string.h | 9 +- include/xrpl/ledger/AmendmentTable.h | 7 +- include/xrpl/ledger/BookListeners.h | 4 +- include/xrpl/ledger/CachedView.h | 2 +- include/xrpl/ledger/CanonicalTXSet.h | 10 +- include/xrpl/ledger/Ledger.h | 10 +- include/xrpl/ledger/OpenView.h | 2 +- include/xrpl/ledger/PaymentSandbox.h | 5 +- include/xrpl/ledger/PendingSaves.h | 2 +- include/xrpl/ledger/detail/ApplyStateTable.h | 6 +- include/xrpl/ledger/detail/ApplyViewBase.h | 6 +- include/xrpl/ledger/detail/RawStateTable.h | 6 +- include/xrpl/ledger/helpers/AMMHelpers.h | 47 +- .../xrpl/ledger/helpers/DirectoryHelpers.h | 2 +- include/xrpl/ledger/helpers/NFTokenHelpers.h | 16 +- .../ledger/helpers/PaymentChannelHelpers.h | 2 + .../ledger/helpers/PermissionedDEXHelpers.h | 7 +- include/xrpl/net/AutoSocket.h | 46 +- include/xrpl/net/HTTPClientSSLContext.h | 12 +- include/xrpl/nodestore/Backend.h | 6 +- include/xrpl/nodestore/Database.h | 7 +- include/xrpl/nodestore/DatabaseRotating.h | 6 +- include/xrpl/nodestore/DummyScheduler.h | 8 +- include/xrpl/nodestore/Factory.h | 7 +- include/xrpl/nodestore/Manager.h | 7 +- include/xrpl/nodestore/Scheduler.h | 6 +- include/xrpl/nodestore/Task.h | 6 +- include/xrpl/nodestore/Types.h | 17 +- include/xrpl/nodestore/detail/BatchWriter.h | 8 +- .../xrpl/nodestore/detail/DatabaseNodeImp.h | 8 +- .../nodestore/detail/DatabaseRotatingImp.h | 8 +- include/xrpl/nodestore/detail/DecodedBlob.h | 6 +- include/xrpl/nodestore/detail/EncodedBlob.h | 6 +- include/xrpl/nodestore/detail/ManagerImp.h | 9 +- include/xrpl/nodestore/detail/codec.h | 22 +- include/xrpl/nodestore/detail/varint.h | 16 +- include/xrpl/protocol/AmountConversions.h | 28 + include/xrpl/protocol/ApiVersion.h | 2 + include/xrpl/protocol/Asset.h | 19 +- include/xrpl/protocol/Book.h | 8 +- include/xrpl/protocol/BuildInfo.h | 8 +- include/xrpl/protocol/Feature.h | 8 +- include/xrpl/protocol/IOUAmount.h | 4 +- include/xrpl/protocol/Indexes.h | 12 +- include/xrpl/protocol/Issue.h | 6 +- include/xrpl/protocol/KnownFormats.h | 5 +- include/xrpl/protocol/LedgerFormats.h | 2 +- include/xrpl/protocol/LedgerHeader.h | 4 +- include/xrpl/protocol/MPTAmount.h | 6 +- include/xrpl/protocol/MPTIssue.h | 12 +- include/xrpl/protocol/MultiApiJson.h | 6 +- .../xrpl/protocol/NFTSyntheticSerializer.h | 7 +- include/xrpl/protocol/PathAsset.h | 4 + include/xrpl/protocol/Permissions.h | 2 +- include/xrpl/protocol/PublicKey.h | 4 +- include/xrpl/protocol/Quality.h | 5 +- include/xrpl/protocol/RPCErr.h | 1 + include/xrpl/protocol/SField.h | 2 +- include/xrpl/protocol/STAmount.h | 35 +- include/xrpl/protocol/STBlob.h | 2 +- include/xrpl/protocol/STCurrency.h | 2 +- include/xrpl/protocol/STExchange.h | 2 +- include/xrpl/protocol/STObject.h | 36 +- include/xrpl/protocol/STValidation.h | 2 +- include/xrpl/protocol/STVector256.h | 4 +- include/xrpl/protocol/SecretKey.h | 4 +- include/xrpl/protocol/Serializer.h | 2 +- include/xrpl/protocol/TER.h | 18 +- include/xrpl/protocol/TxFlags.h | 2 +- include/xrpl/protocol/Units.h | 4 +- include/xrpl/protocol/XChainAttestations.h | 9 +- include/xrpl/protocol/XRPAmount.h | 6 +- include/xrpl/protocol/detail/STVar.h | 10 +- include/xrpl/protocol/detail/b58_utils.h | 16 +- include/xrpl/protocol/detail/token_errors.h | 8 +- include/xrpl/protocol/digest.h | 4 +- include/xrpl/protocol/json_get_or_throw.h | 2 +- include/xrpl/protocol/jss.h | 6 +- include/xrpl/protocol/nft.h | 6 +- include/xrpl/protocol/nftPageMask.h | 6 +- include/xrpl/protocol_autogen/README.md | 49 +- include/xrpl/rdb/SociDB.h | 2 +- include/xrpl/resource/Charge.h | 8 +- include/xrpl/resource/Consumer.h | 6 +- include/xrpl/resource/Disposition.h | 6 +- include/xrpl/resource/Fees.h | 6 +- include/xrpl/resource/Gossip.h | 6 +- include/xrpl/resource/ResourceManager.h | 8 +- include/xrpl/resource/detail/Entry.h | 8 +- include/xrpl/resource/detail/Import.h | 8 +- include/xrpl/resource/detail/Key.h | 10 +- include/xrpl/resource/detail/Kind.h | 6 +- include/xrpl/resource/detail/Logic.h | 10 +- include/xrpl/resource/detail/Tuning.h | 6 +- include/xrpl/server/LoadFeeTrack.h | 4 +- include/xrpl/server/Manifest.h | 11 +- include/xrpl/server/NetworkOPs.h | 2 +- include/xrpl/server/Port.h | 8 +- include/xrpl/server/SimpleWriter.h | 2 +- include/xrpl/server/detail/BaseHTTPPeer.h | 16 +- include/xrpl/server/detail/BasePeer.h | 4 +- include/xrpl/server/detail/BaseWSPeer.h | 11 +- include/xrpl/server/detail/Door.h | 13 +- include/xrpl/server/detail/ServerImpl.h | 4 +- include/xrpl/server/detail/io_list.h | 4 +- include/xrpl/shamap/SHAMap.h | 8 +- .../xrpl/shamap/SHAMapAccountStateLeafNode.h | 10 +- include/xrpl/shamap/SHAMapInnerNode.h | 4 +- include/xrpl/shamap/SHAMapLeafNode.h | 8 +- include/xrpl/shamap/SHAMapTreeNode.h | 11 +- include/xrpl/shamap/SHAMapTxLeafNode.h | 10 +- .../xrpl/shamap/SHAMapTxPlusMetaLeafNode.h | 6 +- include/xrpl/tx/Transactor.h | 92 +- include/xrpl/tx/applySteps.h | 2 +- include/xrpl/tx/invariants/AMMInvariant.h | 4 +- .../tx/invariants/PermissionedDEXInvariant.h | 3 +- include/xrpl/tx/invariants/VaultInvariant.h | 35 +- include/xrpl/tx/paths/Flow.h | 6 +- include/xrpl/tx/paths/Offer.h | 17 +- include/xrpl/tx/paths/detail/FlowDebugInfo.h | 25 +- include/xrpl/tx/paths/detail/StepChecks.h | 4 +- include/xrpl/tx/paths/detail/Steps.h | 15 +- include/xrpl/tx/paths/detail/StrandFlow.h | 37 +- .../tx/transactors/account/AccountDelete.h | 14 + .../xrpl/tx/transactors/account/AccountSet.h | 14 + .../tx/transactors/account/SetRegularKey.h | 14 + .../tx/transactors/account/SignerListSet.h | 14 + .../xrpl/tx/transactors/bridge/XChainBridge.h | 112 ++ .../xrpl/tx/transactors/check/CheckCancel.h | 14 + include/xrpl/tx/transactors/check/CheckCash.h | 14 + .../xrpl/tx/transactors/check/CheckCreate.h | 14 + .../credentials/CredentialAccept.h | 14 + .../credentials/CredentialCreate.h | 14 + .../credentials/CredentialDelete.h | 14 + .../tx/transactors/delegate/DelegateSet.h | 14 + include/xrpl/tx/transactors/dex/AMMBid.h | 14 + include/xrpl/tx/transactors/dex/AMMClawback.h | 14 + include/xrpl/tx/transactors/dex/AMMCreate.h | 14 + include/xrpl/tx/transactors/dex/AMMDelete.h | 14 + include/xrpl/tx/transactors/dex/AMMDeposit.h | 14 + include/xrpl/tx/transactors/dex/AMMVote.h | 14 + include/xrpl/tx/transactors/dex/AMMWithdraw.h | 14 + include/xrpl/tx/transactors/dex/OfferCancel.h | 14 + include/xrpl/tx/transactors/dex/OfferCreate.h | 14 + include/xrpl/tx/transactors/did/DIDDelete.h | 14 + include/xrpl/tx/transactors/did/DIDSet.h | 14 + .../xrpl/tx/transactors/escrow/EscrowCancel.h | 14 + .../xrpl/tx/transactors/escrow/EscrowCreate.h | 14 + .../xrpl/tx/transactors/escrow/EscrowFinish.h | 14 + .../tx/transactors/lending/LendingHelpers.h | 2 +- .../lending/LoanBrokerCoverClawback.h | 14 + .../lending/LoanBrokerCoverDeposit.h | 14 + .../lending/LoanBrokerCoverWithdraw.h | 14 + .../tx/transactors/lending/LoanBrokerDelete.h | 14 + .../tx/transactors/lending/LoanBrokerSet.h | 14 + .../xrpl/tx/transactors/lending/LoanDelete.h | 14 + .../xrpl/tx/transactors/lending/LoanManage.h | 14 + include/xrpl/tx/transactors/lending/LoanPay.h | 14 + include/xrpl/tx/transactors/lending/LoanSet.h | 14 + .../tx/transactors/nft/NFTokenAcceptOffer.h | 14 + include/xrpl/tx/transactors/nft/NFTokenBurn.h | 14 + .../tx/transactors/nft/NFTokenCancelOffer.h | 14 + .../tx/transactors/nft/NFTokenCreateOffer.h | 14 + include/xrpl/tx/transactors/nft/NFTokenMint.h | 14 + .../xrpl/tx/transactors/nft/NFTokenModify.h | 14 + .../xrpl/tx/transactors/oracle/OracleDelete.h | 14 + .../xrpl/tx/transactors/oracle/OracleSet.h | 14 + .../tx/transactors/payment/DepositPreauth.h | 14 + include/xrpl/tx/transactors/payment/Payment.h | 14 + .../payment_channel/PaymentChannelClaim.h | 14 + .../payment_channel/PaymentChannelCreate.h | 14 + .../payment_channel/PaymentChannelFund.h | 14 + .../PermissionedDomainDelete.h | 14 + .../PermissionedDomainSet.h | 14 + include/xrpl/tx/transactors/system/Batch.h | 47 +- include/xrpl/tx/transactors/system/Change.h | 14 + .../tx/transactors/system/LedgerStateFix.h | 14 + .../xrpl/tx/transactors/system/TicketCreate.h | 14 + include/xrpl/tx/transactors/token/Clawback.h | 14 + .../token/ConfidentialMPTClawback.h | 14 + .../token/ConfidentialMPTConvert.h | 14 + .../token/ConfidentialMPTConvertBack.h | 14 + .../token/ConfidentialMPTMergeInbox.h | 14 + .../transactors/token/ConfidentialMPTSend.h | 14 + .../tx/transactors/token/MPTokenAuthorize.h | 16 +- .../transactors/token/MPTokenIssuanceCreate.h | 28 +- .../token/MPTokenIssuanceDestroy.h | 14 + .../tx/transactors/token/MPTokenIssuanceSet.h | 14 + include/xrpl/tx/transactors/token/TrustSet.h | 14 + .../xrpl/tx/transactors/vault/VaultClawback.h | 14 + .../xrpl/tx/transactors/vault/VaultCreate.h | 14 + .../xrpl/tx/transactors/vault/VaultDelete.h | 14 + .../xrpl/tx/transactors/vault/VaultDeposit.h | 14 + include/xrpl/tx/transactors/vault/VaultSet.h | 14 + .../xrpl/tx/transactors/vault/VaultWithdraw.h | 14 + src/libxrpl/basics/Archive.cpp | 1 + src/libxrpl/basics/BasicConfig.cpp | 4 +- src/libxrpl/basics/CountedObject.cpp | 2 +- src/libxrpl/basics/FileUtilities.cpp | 1 - src/libxrpl/basics/Log.cpp | 5 +- src/libxrpl/basics/MallocTrim.cpp | 18 +- src/libxrpl/basics/Number.cpp | 3 +- src/libxrpl/basics/ResolverAsio.cpp | 14 +- src/libxrpl/basics/StringUtilities.cpp | 4 +- src/libxrpl/basics/contract.cpp | 3 +- src/libxrpl/basics/make_SSLContext.cpp | 13 +- src/libxrpl/basics/mulDiv.cpp | 4 +- .../beast/clock/basic_seconds_clock.cpp | 1 + src/libxrpl/beast/core/CurrentThreadName.cpp | 4 +- src/libxrpl/beast/core/SemanticVersion.cpp | 22 +- src/libxrpl/beast/insight/Collector.cpp | 6 +- src/libxrpl/beast/insight/Groups.cpp | 22 +- src/libxrpl/beast/insight/Hook.cpp | 7 +- src/libxrpl/beast/insight/Metric.cpp | 6 +- src/libxrpl/beast/insight/NullCollector.cpp | 26 +- src/libxrpl/beast/insight/StatsDCollector.cpp | 75 +- src/libxrpl/beast/net/IPAddressConversion.cpp | 7 +- src/libxrpl/beast/net/IPAddressV4.cpp | 6 +- src/libxrpl/beast/net/IPAddressV6.cpp | 11 +- src/libxrpl/beast/net/IPEndpoint.cpp | 13 +- .../beast/utility/beast_PropertyStream.cpp | 7 +- src/libxrpl/conditions/Condition.cpp | 16 +- src/libxrpl/conditions/Fulfillment.cpp | 14 +- src/libxrpl/conditions/error.cpp | 15 +- src/libxrpl/core/HashRouter.cpp | 12 + src/libxrpl/core/detail/Job.cpp | 10 +- src/libxrpl/core/detail/JobQueue.cpp | 23 +- src/libxrpl/core/detail/LoadEvent.cpp | 11 +- src/libxrpl/core/detail/LoadMonitor.cpp | 8 +- src/libxrpl/core/detail/Workers.cpp | 18 +- src/libxrpl/crypto/RFC1751.cpp | 3 +- src/libxrpl/crypto/csprng.cpp | 5 +- src/libxrpl/git/Git.cpp | 2 +- src/libxrpl/json/JsonPropertyStream.cpp | 1 + src/libxrpl/json/Output.cpp | 1 + src/libxrpl/json/Writer.cpp | 14 +- src/libxrpl/json/json_reader.cpp | 6 +- src/libxrpl/json/json_value.cpp | 10 +- src/libxrpl/json/json_valueiterator.cpp | 4 +- src/libxrpl/json/json_writer.cpp | 10 +- src/libxrpl/json/to_string.cpp | 3 +- src/libxrpl/ledger/AcceptedLedgerTx.cpp | 23 +- src/libxrpl/ledger/ApplyStateTable.cpp | 65 +- src/libxrpl/ledger/ApplyView.cpp | 133 +- src/libxrpl/ledger/ApplyViewBase.cpp | 19 +- src/libxrpl/ledger/ApplyViewImpl.cpp | 16 + src/libxrpl/ledger/BookDirs.cpp | 9 +- src/libxrpl/ledger/BookListeners.cpp | 8 + src/libxrpl/ledger/CachedView.cpp | 18 +- src/libxrpl/ledger/CanonicalTXSet.cpp | 10 + src/libxrpl/ledger/Dir.cpp | 11 + src/libxrpl/ledger/Ledger.cpp | 72 +- src/libxrpl/ledger/OpenView.cpp | 29 +- src/libxrpl/ledger/PaymentSandbox.cpp | 24 +- src/libxrpl/ledger/RawStateTable.cpp | 32 +- src/libxrpl/ledger/ReadView.cpp | 11 + src/libxrpl/ledger/View.cpp | 35 +- src/libxrpl/ledger/helpers/AMMHelpers.cpp | 40 +- .../ledger/helpers/AccountRootHelpers.cpp | 24 +- .../ledger/helpers/CredentialHelpers.cpp | 25 +- .../ledger/helpers/DirectoryHelpers.cpp | 15 +- src/libxrpl/ledger/helpers/MPTokenHelpers.cpp | 27 +- src/libxrpl/ledger/helpers/NFTokenHelpers.cpp | 86 +- src/libxrpl/ledger/helpers/OfferHelpers.cpp | 14 +- .../ledger/helpers/PaymentChannelHelpers.cpp | 16 +- .../ledger/helpers/PermissionedDEXHelpers.cpp | 59 +- .../ledger/helpers/RippleStateHelpers.cpp | 21 +- src/libxrpl/ledger/helpers/TokenHelpers.cpp | 23 +- src/libxrpl/ledger/helpers/VaultHelpers.cpp | 12 +- src/libxrpl/net/HTTPClient.cpp | 29 +- src/libxrpl/net/RegisterSSLCerts.cpp | 5 + src/libxrpl/nodestore/BatchWriter.cpp | 17 +- src/libxrpl/nodestore/Database.cpp | 36 +- src/libxrpl/nodestore/DatabaseNodeImp.cpp | 26 +- src/libxrpl/nodestore/DatabaseRotatingImp.cpp | 27 +- src/libxrpl/nodestore/DecodedBlob.cpp | 18 +- src/libxrpl/nodestore/DummyScheduler.cpp | 9 +- src/libxrpl/nodestore/ManagerImp.cpp | 34 +- src/libxrpl/nodestore/NodeObject.cpp | 4 + .../nodestore/backend/MemoryFactory.cpp | 21 +- src/libxrpl/nodestore/backend/NuDBFactory.cpp | 37 +- src/libxrpl/nodestore/backend/NullFactory.cpp | 20 +- .../nodestore/backend/RocksDBFactory.cpp | 40 +- src/libxrpl/protocol/AMMCore.cpp | 7 +- src/libxrpl/protocol/AccountID.cpp | 3 +- src/libxrpl/protocol/Asset.cpp | 6 +- src/libxrpl/protocol/Book.cpp | 3 +- src/libxrpl/protocol/BuildInfo.cpp | 17 +- src/libxrpl/protocol/ConfidentialTransfer.cpp | 19 + src/libxrpl/protocol/ErrorCodes.cpp | 3 +- src/libxrpl/protocol/Feature.cpp | 9 +- src/libxrpl/protocol/IOUAmount.cpp | 10 +- src/libxrpl/protocol/Indexes.cpp | 7 +- src/libxrpl/protocol/InnerObjectFormats.cpp | 1 + src/libxrpl/protocol/Issue.cpp | 3 +- src/libxrpl/protocol/Keylet.cpp | 3 +- src/libxrpl/protocol/LedgerFormats.cpp | 3 +- src/libxrpl/protocol/LedgerHeader.cpp | 5 +- src/libxrpl/protocol/MPTIssue.cpp | 6 +- .../protocol/NFTSyntheticSerializer.cpp | 9 +- src/libxrpl/protocol/NFTokenID.cpp | 42 +- src/libxrpl/protocol/NFTokenOfferID.cpp | 3 +- src/libxrpl/protocol/PathAsset.cpp | 5 +- src/libxrpl/protocol/Permissions.cpp | 14 +- src/libxrpl/protocol/PublicKey.cpp | 5 +- src/libxrpl/protocol/Quality.cpp | 5 +- src/libxrpl/protocol/QualityFunction.cpp | 3 +- src/libxrpl/protocol/RPCErr.cpp | 3 +- src/libxrpl/protocol/Rules.cpp | 3 +- src/libxrpl/protocol/SField.cpp | 5 +- src/libxrpl/protocol/SOTemplate.cpp | 4 +- src/libxrpl/protocol/STAccount.cpp | 3 +- src/libxrpl/protocol/STAmount.cpp | 14 +- src/libxrpl/protocol/STArray.cpp | 5 +- src/libxrpl/protocol/STBase.cpp | 3 +- src/libxrpl/protocol/STBlob.cpp | 3 +- src/libxrpl/protocol/STCurrency.cpp | 3 +- src/libxrpl/protocol/STInteger.cpp | 4 +- src/libxrpl/protocol/STIssue.cpp | 3 +- src/libxrpl/protocol/STLedgerEntry.cpp | 6 +- src/libxrpl/protocol/STNumber.cpp | 18 +- src/libxrpl/protocol/STObject.cpp | 26 +- src/libxrpl/protocol/STParsedJSON.cpp | 11 +- src/libxrpl/protocol/STPathSet.cpp | 5 +- src/libxrpl/protocol/STTakesAsset.cpp | 7 +- src/libxrpl/protocol/STTx.cpp | 7 +- src/libxrpl/protocol/STValidation.cpp | 4 +- src/libxrpl/protocol/STVar.cpp | 9 +- src/libxrpl/protocol/STVector256.cpp | 3 +- src/libxrpl/protocol/STXChainBridge.cpp | 3 +- src/libxrpl/protocol/SecretKey.cpp | 8 +- src/libxrpl/protocol/Seed.cpp | 3 +- src/libxrpl/protocol/Serializer.cpp | 5 +- src/libxrpl/protocol/Sign.cpp | 3 +- src/libxrpl/protocol/TxFormats.cpp | 6 +- src/libxrpl/protocol/TxMeta.cpp | 6 +- src/libxrpl/protocol/UintTypes.cpp | 5 +- src/libxrpl/protocol/XChainAttestations.cpp | 11 +- src/libxrpl/protocol/tokens.cpp | 5 +- src/libxrpl/protocol_autogen/placeholder.cpp | 4 - src/libxrpl/rdb/DatabaseCon.cpp | 13 +- src/libxrpl/rdb/SociDB.cpp | 30 +- src/libxrpl/resource/Charge.cpp | 9 +- src/libxrpl/resource/Consumer.cpp | 10 +- src/libxrpl/resource/Fees.cpp | 9 +- src/libxrpl/resource/ResourceManager.cpp | 9 +- src/libxrpl/server/InfoSub.cpp | 8 + src/libxrpl/server/JSONRPCUtil.cpp | 3 +- src/libxrpl/server/LoadFeeTrack.cpp | 6 +- src/libxrpl/server/Manifest.cpp | 33 +- src/libxrpl/server/Port.cpp | 4 +- src/libxrpl/server/State.cpp | 15 + src/libxrpl/server/Vacuum.cpp | 13 +- src/libxrpl/server/Wallet.cpp | 36 +- src/libxrpl/shamap/SHAMap.cpp | 50 +- src/libxrpl/shamap/SHAMapDelta.cpp | 91 +- src/libxrpl/shamap/SHAMapInnerNode.cpp | 21 +- src/libxrpl/shamap/SHAMapLeafNode.cpp | 13 + src/libxrpl/shamap/SHAMapNodeID.cpp | 11 +- src/libxrpl/shamap/SHAMapSync.cpp | 41 +- src/libxrpl/shamap/SHAMapTreeNode.cpp | 17 +- src/libxrpl/tx/ApplyContext.cpp | 26 +- src/libxrpl/tx/SignerEntries.cpp | 11 +- src/libxrpl/tx/Transactor.cpp | 104 +- src/libxrpl/tx/apply.cpp | 19 +- src/libxrpl/tx/applySteps.cpp | 37 +- src/libxrpl/tx/invariants/AMMInvariant.cpp | 21 +- src/libxrpl/tx/invariants/FreezeInvariant.cpp | 25 +- src/libxrpl/tx/invariants/InvariantCheck.cpp | 26 +- .../tx/invariants/LoanBrokerInvariant.cpp | 18 +- src/libxrpl/tx/invariants/LoanInvariant.cpp | 15 +- src/libxrpl/tx/invariants/MPTInvariant.cpp | 15 +- src/libxrpl/tx/invariants/NFTInvariant.cpp | 22 +- .../invariants/PermissionedDEXInvariant.cpp | 26 +- .../PermissionedDomainInvariant.cpp | 22 +- src/libxrpl/tx/invariants/VaultInvariant.cpp | 282 ++- src/libxrpl/tx/paths/AMMLiquidity.cpp | 25 + src/libxrpl/tx/paths/AMMOffer.cpp | 22 +- src/libxrpl/tx/paths/BookStep.cpp | 49 +- src/libxrpl/tx/paths/BookTip.cpp | 10 +- src/libxrpl/tx/paths/DirectStep.cpp | 23 +- src/libxrpl/tx/paths/Flow.cpp | 18 +- src/libxrpl/tx/paths/MPTEndpointStep.cpp | 22 +- src/libxrpl/tx/paths/OfferStream.cpp | 34 +- src/libxrpl/tx/paths/PaySteps.cpp | 28 +- src/libxrpl/tx/paths/RippleCalc.cpp | 27 +- src/libxrpl/tx/paths/XRPEndpointStep.cpp | 20 +- .../tx/transactors/account/AccountDelete.cpp | 43 +- .../tx/transactors/account/AccountSet.cpp | 40 +- .../tx/transactors/account/SetRegularKey.cpp | 37 +- .../tx/transactors/account/SignerListSet.cpp | 62 +- .../tx/transactors/bridge/XChainBridge.cpp | 192 ++- .../tx/transactors/check/CheckCancel.cpp | 29 +- .../tx/transactors/check/CheckCash.cpp | 40 +- .../tx/transactors/check/CheckCreate.cpp | 39 +- .../credentials/CredentialAccept.cpp | 35 +- .../credentials/CredentialCreate.cpp | 37 +- .../credentials/CredentialDelete.cpp | 43 +- .../tx/transactors/delegate/DelegateSet.cpp | 34 +- .../tx/transactors/delegate/DelegateUtils.cpp | 9 + src/libxrpl/tx/transactors/dex/AMMBid.cpp | 53 +- .../tx/transactors/dex/AMMClawback.cpp | 53 +- src/libxrpl/tx/transactors/dex/AMMCreate.cpp | 46 +- src/libxrpl/tx/transactors/dex/AMMDelete.cpp | 30 +- src/libxrpl/tx/transactors/dex/AMMDeposit.cpp | 42 +- src/libxrpl/tx/transactors/dex/AMMVote.cpp | 39 +- .../tx/transactors/dex/AMMWithdraw.cpp | 49 +- .../tx/transactors/dex/OfferCancel.cpp | 29 +- .../tx/transactors/dex/OfferCreate.cpp | 57 +- src/libxrpl/tx/transactors/did/DIDDelete.cpp | 35 +- src/libxrpl/tx/transactors/did/DIDSet.cpp | 34 +- .../tx/transactors/escrow/EscrowCancel.cpp | 36 +- .../tx/transactors/escrow/EscrowCreate.cpp | 45 +- .../tx/transactors/escrow/EscrowFinish.cpp | 40 +- .../tx/transactors/lending/LendingHelpers.cpp | 25 +- .../lending/LoanBrokerCoverClawback.cpp | 48 +- .../lending/LoanBrokerCoverDeposit.cpp | 33 +- .../lending/LoanBrokerCoverWithdraw.cpp | 41 +- .../transactors/lending/LoanBrokerDelete.cpp | 35 +- .../tx/transactors/lending/LoanBrokerSet.cpp | 39 +- .../tx/transactors/lending/LoanDelete.cpp | 30 +- .../tx/transactors/lending/LoanManage.cpp | 39 +- .../tx/transactors/lending/LoanPay.cpp | 37 +- .../tx/transactors/lending/LoanSet.cpp | 45 +- .../tx/transactors/nft/NFTokenAcceptOffer.cpp | 42 +- .../tx/transactors/nft/NFTokenBurn.cpp | 33 +- .../tx/transactors/nft/NFTokenCancelOffer.cpp | 47 +- .../tx/transactors/nft/NFTokenCreateOffer.cpp | 35 +- .../tx/transactors/nft/NFTokenMint.cpp | 45 +- .../tx/transactors/nft/NFTokenModify.cpp | 38 +- .../tx/transactors/oracle/OracleDelete.cpp | 39 +- .../tx/transactors/oracle/OracleSet.cpp | 43 +- .../tx/transactors/payment/DepositPreauth.cpp | 42 +- .../tx/transactors/payment/Payment.cpp | 51 +- .../payment_channel/PaymentChannelClaim.cpp | 39 +- .../payment_channel/PaymentChannelCreate.cpp | 36 +- .../payment_channel/PaymentChannelFund.cpp | 42 +- .../PermissionedDomainDelete.cpp | 36 +- .../PermissionedDomainSet.cpp | 38 +- src/libxrpl/tx/transactors/system/Batch.cpp | 51 +- src/libxrpl/tx/transactors/system/Change.cpp | 50 +- .../tx/transactors/system/LedgerStateFix.cpp | 38 +- .../tx/transactors/system/TicketCreate.cpp | 40 +- src/libxrpl/tx/transactors/token/Clawback.cpp | 39 +- .../token/ConfidentialMPTClawback.cpp | 34 +- .../token/ConfidentialMPTConvert.cpp | 44 +- .../token/ConfidentialMPTConvertBack.cpp | 45 +- .../token/ConfidentialMPTMergeInbox.cpp | 34 +- .../transactors/token/ConfidentialMPTSend.cpp | 48 +- .../tx/transactors/token/MPTokenAuthorize.cpp | 37 +- .../token/MPTokenIssuanceCreate.cpp | 46 +- .../token/MPTokenIssuanceDestroy.cpp | 34 +- .../transactors/token/MPTokenIssuanceSet.cpp | 122 +- src/libxrpl/tx/transactors/token/TrustSet.cpp | 38 +- .../tx/transactors/vault/VaultClawback.cpp | 44 +- .../tx/transactors/vault/VaultCreate.cpp | 34 +- .../tx/transactors/vault/VaultDelete.cpp | 35 +- .../tx/transactors/vault/VaultDeposit.cpp | 39 +- src/libxrpl/tx/transactors/vault/VaultSet.cpp | 32 +- .../tx/transactors/vault/VaultWithdraw.cpp | 40 +- src/test/app/AMMCalc_test.cpp | 35 +- src/test/app/AMMClawbackMPT_test.cpp | 29 +- src/test/app/AMMClawback_test.cpp | 57 +- src/test/app/AMMExtendedMPT_test.cpp | 54 +- src/test/app/AMMExtended_test.cpp | 61 +- src/test/app/AMMMPT_test.cpp | 54 +- src/test/app/AMM_test.cpp | 57 +- src/test/app/AccountDelete_test.cpp | 49 +- src/test/app/AccountSet_test.cpp | 59 +- src/test/app/AccountTxPaging_test.cpp | 12 +- src/test/app/AmendmentTable_test.cpp | 50 +- src/test/app/Batch_test.cpp | 74 +- src/test/app/CheckMPT_test.cpp | 55 +- src/test/app/Check_test.cpp | 71 +- src/test/app/Clawback_test.cpp | 23 +- src/test/app/ConfidentialTransfer_test.cpp | 44 +- src/test/app/Credentials_test.cpp | 29 +- src/test/app/CrossingLimitsMPT_test.cpp | 23 +- src/test/app/CrossingLimits_test.cpp | 21 +- src/test/app/DID_test.cpp | 22 +- src/test/app/DNS_test.cpp | 17 +- src/test/app/Delegate_test.cpp | 52 +- src/test/app/DeliverMin_test.cpp | 23 +- src/test/app/DepositAuth_test.cpp | 48 +- src/test/app/Discrepancy_test.cpp | 16 +- src/test/app/EscrowToken_test.cpp | 275 ++- src/test/app/Escrow_test.cpp | 90 +- src/test/app/FeeVote_test.cpp | 33 +- src/test/app/FixNFTokenPageLinks_test.cpp | 31 +- src/test/app/FlowMPT_test.cpp | 60 +- src/test/app/Flow_test.cpp | 50 +- src/test/app/Freeze_test.cpp | 28 +- src/test/app/GRPCServerTLS_test.cpp | 849 +++++++++ src/test/app/HashRouter_test.cpp | 15 +- src/test/app/Invariants_test.cpp | 270 ++- src/test/app/LPTokenTransfer_test.cpp | 26 +- src/test/app/LedgerHistory_test.cpp | 26 +- src/test/app/LedgerLoad_test.cpp | 24 +- src/test/app/LedgerMaster_test.cpp | 23 +- src/test/app/LedgerReplay_test.cpp | 114 +- src/test/app/LendingHelpers_test.cpp | 18 +- src/test/app/LoadFeeTrack_test.cpp | 4 +- src/test/app/LoanBroker_test.cpp | 62 +- src/test/app/Loan_test.cpp | 227 ++- src/test/app/MPToken_test.cpp | 153 +- src/test/app/Manifest_test.cpp | 43 +- src/test/app/MultiSign_test.cpp | 52 +- src/test/app/NFTokenAuth_test.cpp | 29 +- src/test/app/NFTokenBurn_test.cpp | 45 +- src/test/app/NFTokenDir_test.cpp | 39 +- src/test/app/NFToken_test.cpp | 65 +- src/test/app/NetworkID_test.cpp | 23 +- src/test/app/NetworkOPs_test.cpp | 19 +- src/test/app/OfferMPT_test.cpp | 165 +- src/test/app/OfferStream_test.cpp | 3 +- src/test/app/Offer_test.cpp | 225 ++- src/test/app/Oracle_test.cpp | 42 +- src/test/app/OversizeMeta_test.cpp | 20 +- src/test/app/PathMPT_test.cpp | 64 +- src/test/app/Path_test.cpp | 87 +- src/test/app/PayChan_test.cpp | 53 +- src/test/app/PayStrandMPT_test.cpp | 39 +- src/test/app/PayStrand_test.cpp | 47 +- src/test/app/PermissionedDEX_test.cpp | 111 +- src/test/app/PermissionedDomains_test.cpp | 28 +- src/test/app/PseudoTx_test.cpp | 34 +- src/test/app/RCLValidations_test.cpp | 23 +- src/test/app/ReducedOffer_test.cpp | 26 +- src/test/app/Regression_test.cpp | 48 +- src/test/app/SHAMapStore_test.cpp | 38 +- src/test/app/SetAuth_test.cpp | 23 +- src/test/app/SetRegularKey_test.cpp | 23 +- src/test/app/TheoreticalQuality_test.cpp | 51 +- src/test/app/Ticket_test.cpp | 46 +- src/test/app/Transaction_ordering_test.cpp | 24 +- src/test/app/TrustAndBalance_test.cpp | 19 +- src/test/app/TrustSet_test.cpp | 28 +- src/test/app/TxQ_test.cpp | 52 +- src/test/app/ValidatorKeys_test.cpp | 17 +- src/test/app/ValidatorList_test.cpp | 59 +- src/test/app/ValidatorSite_test.cpp | 23 +- src/test/app/Vault_test.cpp | 41 +- src/test/app/XChain_test.cpp | 368 +++- src/test/app/tx/apply_test.cpp | 8 +- src/test/basics/Buffer_test.cpp | 16 +- src/test/basics/DetectCrash_test.cpp | 6 +- src/test/basics/Expected_test.cpp | 20 +- src/test/basics/FileUtilities_test.cpp | 5 +- src/test/basics/IOUAmount_test.cpp | 8 +- src/test/basics/IntrusiveShared_test.cpp | 40 +- src/test/basics/KeyCache_test.cpp | 5 +- src/test/basics/Number_test.cpp | 10 +- src/test/basics/PerfLog_test.cpp | 29 +- src/test/basics/StringUtilities_test.cpp | 4 +- src/test/basics/TaggedCache_test.cpp | 5 +- src/test/basics/Units_test.cpp | 15 +- src/test/basics/XRPAmount_test.cpp | 6 +- src/test/basics/base58_test.cpp | 37 +- src/test/basics/base_uint_test.cpp | 29 +- src/test/basics/hardened_hash_test.cpp | 15 +- src/test/basics/join_test.cpp | 16 +- src/test/beast/IPEndpointCommon.h | 6 +- src/test/beast/IPEndpoint_test.cpp | 21 +- src/test/beast/LexicalCast_test.cpp | 7 +- src/test/beast/SemanticVersion_test.cpp | 4 +- .../beast/aged_associative_container_test.cpp | 115 +- .../beast/beast_CurrentThreadName_test.cpp | 14 +- src/test/beast/beast_Journal_test.cpp | 4 +- src/test/beast/beast_PropertyStream_test.cpp | 4 +- src/test/beast/beast_Zero_test.cpp | 2 +- src/test/beast/beast_abstract_clock_test.cpp | 5 +- .../beast/beast_basic_seconds_clock_test.cpp | 2 +- .../beast/beast_io_latency_probe_test.cpp | 20 +- src/test/beast/define_print.cpp | 9 +- src/test/beast/xxhasher_test.cpp | 4 +- src/test/conditions/PreimageSha256_test.cpp | 13 +- .../consensus/ByzantineFailureSim_test.cpp | 20 +- src/test/consensus/Consensus_test.cpp | 35 +- .../DistributedValidatorsSim_test.cpp | 29 +- src/test/consensus/LedgerTiming_test.cpp | 13 +- src/test/consensus/LedgerTrie_test.cpp | 10 +- src/test/consensus/NegativeUNL_test.cpp | 173 +- .../consensus/RCLCensorshipDetector_test.cpp | 9 +- src/test/consensus/ScaleFreeSim_test.cpp | 22 +- src/test/consensus/Validations_test.cpp | 20 +- src/test/core/ClosureCounter_test.cpp | 13 +- src/test/core/Config_test.cpp | 101 +- src/test/core/Coroutine_test.cpp | 18 +- src/test/core/JobQueue_test.cpp | 12 +- src/test/core/SociDB_test.cpp | 28 +- src/test/core/Workers_test.cpp | 3 +- src/test/csf/BasicNetwork.h | 10 +- src/test/csf/BasicNetwork_test.cpp | 8 +- src/test/csf/CollectorRef.h | 46 +- src/test/csf/Digraph.h | 7 +- src/test/csf/Digraph_test.cpp | 10 +- src/test/csf/Histogram.h | 8 +- src/test/csf/Histogram_test.cpp | 8 +- src/test/csf/Peer.h | 44 +- src/test/csf/PeerGroup.h | 33 +- src/test/csf/Proposal.h | 8 +- src/test/csf/Scheduler.h | 12 +- src/test/csf/Scheduler_test.cpp | 8 +- src/test/csf/Sim.h | 8 +- src/test/csf/SimTime.h | 8 +- src/test/csf/TrustGraph.h | 9 +- src/test/csf/Tx.h | 15 +- src/test/csf/Validation.h | 10 +- src/test/csf/collectors.h | 17 +- src/test/csf/events.h | 8 +- src/test/csf/impl/Sim.cpp | 18 +- src/test/csf/impl/ledgers.cpp | 21 +- src/test/csf/ledgers.h | 12 +- src/test/csf/random.h | 14 +- src/test/csf/submitters.h | 10 +- src/test/csf/timers.h | 8 +- src/test/jtx/AMM.h | 28 +- src/test/jtx/AMMTest.h | 8 +- src/test/jtx/AbstractClient.h | 6 +- src/test/jtx/Account.h | 8 +- src/test/jtx/CaptureLogs.h | 6 +- src/test/jtx/CheckMessageLogs.h | 6 +- src/test/jtx/Env.h | 22 +- src/test/jtx/Env_ss.h | 8 +- src/test/jtx/Env_test.cpp | 67 +- src/test/jtx/JSONRPCClient.h | 6 +- src/test/jtx/JTx.h | 8 +- src/test/jtx/ManualTimeKeeper.h | 8 +- src/test/jtx/Oracle.h | 12 +- src/test/jtx/PathSet.h | 6 +- src/test/jtx/SignerUtils.h | 16 +- src/test/jtx/TestHelpers.h | 22 +- src/test/jtx/TrustedPublisherServer.h | 50 +- src/test/jtx/WSClient.h | 6 +- src/test/jtx/WSClient_test.cpp | 14 +- src/test/jtx/account_txn_id.h | 8 +- src/test/jtx/acctdelete.h | 9 +- src/test/jtx/amount.h | 44 +- src/test/jtx/attester.h | 7 +- src/test/jtx/balance.h | 20 +- src/test/jtx/basic_prop.h | 8 +- src/test/jtx/batch.h | 29 +- src/test/jtx/check.h | 13 +- src/test/jtx/credentials.h | 11 +- src/test/jtx/delegate.h | 13 +- src/test/jtx/delivermin.h | 12 +- src/test/jtx/deposit.h | 13 +- src/test/jtx/did.h | 13 +- src/test/jtx/directory.h | 8 +- src/test/jtx/domain.h | 8 +- src/test/jtx/envconfig.h | 52 +- src/test/jtx/escrow.h | 13 +- src/test/jtx/fee.h | 8 +- src/test/jtx/flags.h | 13 +- src/test/jtx/impl/AMM.cpp | 60 +- src/test/jtx/impl/AMMTest.cpp | 35 +- src/test/jtx/impl/Account.cpp | 24 +- src/test/jtx/impl/Env.cpp | 45 +- src/test/jtx/impl/JSONRPCClient.cpp | 33 +- src/test/jtx/impl/Oracle.cpp | 37 +- src/test/jtx/impl/TestHelpers.cpp | 81 +- src/test/jtx/impl/WSClient.cpp | 36 +- src/test/jtx/impl/account_txn_id.cpp | 13 +- src/test/jtx/impl/acctdelete.cpp | 17 +- src/test/jtx/impl/amount.cpp | 21 +- src/test/jtx/impl/attester.cpp | 13 +- src/test/jtx/impl/balance.cpp | 19 +- src/test/jtx/impl/batch.cpp | 35 +- src/test/jtx/impl/check.cpp | 19 +- src/test/jtx/impl/creds.cpp | 20 +- src/test/jtx/impl/delegate.cpp | 18 +- src/test/jtx/impl/delivermin.cpp | 11 +- src/test/jtx/impl/deposit.cpp | 17 +- src/test/jtx/impl/dids.cpp | 19 +- src/test/jtx/impl/directory.cpp | 24 +- src/test/jtx/impl/domain.cpp | 14 +- src/test/jtx/impl/envconfig.cpp | 58 +- src/test/jtx/impl/escrow.cpp | 22 +- src/test/jtx/impl/fee.cpp | 15 +- src/test/jtx/impl/flags.cpp | 15 +- src/test/jtx/impl/invoice_id.cpp | 13 +- src/test/jtx/impl/jtx_json.cpp | 15 +- src/test/jtx/impl/last_ledger_sequence.cpp | 11 +- src/test/jtx/impl/ledgerStateFixes.cpp | 16 +- src/test/jtx/impl/memo.cpp | 13 +- src/test/jtx/impl/mpt.cpp | 265 ++- src/test/jtx/impl/multisign.cpp | 26 +- src/test/jtx/impl/offer.cpp | 14 +- src/test/jtx/impl/owners.cpp | 17 +- src/test/jtx/impl/paths.cpp | 22 +- src/test/jtx/impl/pay.cpp | 13 +- src/test/jtx/impl/permissioned_dex.cpp | 24 +- src/test/jtx/impl/permissioned_domains.cpp | 34 +- src/test/jtx/impl/quality2.cpp | 13 +- src/test/jtx/impl/rate.cpp | 12 +- src/test/jtx/impl/regkey.cpp | 13 +- src/test/jtx/impl/sendmax.cpp | 11 +- src/test/jtx/impl/seq.cpp | 11 +- src/test/jtx/impl/sig.cpp | 11 +- src/test/jtx/impl/tag.cpp | 11 +- src/test/jtx/impl/ticket.cpp | 18 +- src/test/jtx/impl/token.cpp | 24 +- src/test/jtx/impl/trust.cpp | 15 +- src/test/jtx/impl/txflags.cpp | 11 +- src/test/jtx/impl/utility.cpp | 24 +- src/test/jtx/impl/vault.cpp | 19 +- src/test/jtx/impl/xchain_bridge.cpp | 31 +- src/test/jtx/invoice_id.h | 8 +- src/test/jtx/jtx_json.h | 8 +- src/test/jtx/last_ledger_sequence.h | 8 +- src/test/jtx/ledgerStateFix.h | 13 +- src/test/jtx/memo.h | 20 +- src/test/jtx/mpt.h | 32 +- src/test/jtx/multisign.h | 8 +- src/test/jtx/noop.h | 8 +- src/test/jtx/offer.h | 8 +- src/test/jtx/owners.h | 12 +- src/test/jtx/paths.h | 10 +- src/test/jtx/pay.h | 8 +- src/test/jtx/permissioned_dex.h | 8 +- src/test/jtx/permissioned_domains.h | 10 +- src/test/jtx/prop.h | 8 +- src/test/jtx/quality.h | 8 +- src/test/jtx/rate.h | 8 +- src/test/jtx/regkey.h | 8 +- src/test/jtx/require.h | 7 +- src/test/jtx/requires.h | 8 +- src/test/jtx/rpc.h | 13 +- src/test/jtx/sendmax.h | 12 +- src/test/jtx/seq.h | 8 +- src/test/jtx/sig.h | 8 +- src/test/jtx/tag.h | 10 +- src/test/jtx/tags.h | 26 +- src/test/jtx/ter.h | 8 +- src/test/jtx/ticket.h | 9 +- src/test/jtx/token.h | 13 +- src/test/jtx/trust.h | 8 +- src/test/jtx/txflags.h | 8 +- src/test/jtx/utility.h | 8 +- src/test/jtx/vault.h | 13 +- src/test/jtx/xchain_bridge.h | 10 +- src/test/ledger/BookDirs_test.cpp | 20 +- src/test/ledger/Directory_test.cpp | 42 +- src/test/ledger/PaymentSandbox_test.cpp | 27 +- src/test/ledger/PendingSaves_test.cpp | 8 +- src/test/ledger/SkipList_test.cpp | 15 +- src/test/ledger/View_test.cpp | 48 +- src/test/nodestore/Backend_test.cpp | 20 +- src/test/nodestore/Basics_test.cpp | 11 +- src/test/nodestore/Database_test.cpp | 32 +- src/test/nodestore/NuDBFactory_test.cpp | 15 +- src/test/nodestore/TestBase.h | 13 +- src/test/nodestore/Timing_test.cpp | 37 +- src/test/nodestore/import_test.cpp | 33 +- src/test/nodestore/varint_test.cpp | 12 +- src/test/overlay/ProtocolVersion_test.cpp | 5 +- src/test/overlay/TMGetObjectByHash_test.cpp | 39 +- src/test/overlay/cluster_test.cpp | 21 +- src/test/overlay/compression_test.cpp | 45 +- src/test/overlay/handshake_test.cpp | 9 +- src/test/overlay/reduce_relay_test.cpp | 84 +- src/test/overlay/short_read_test.cpp | 26 +- src/test/overlay/traffic_count_test.cpp | 18 +- src/test/overlay/tx_reduce_relay_test.cpp | 48 +- src/test/peerfinder/Livecache_test.cpp | 25 +- src/test/peerfinder/PeerFinder_test.cpp | 20 +- src/test/protocol/ApiVersion_test.cpp | 14 +- src/test/protocol/BuildInfo_test.cpp | 2 +- src/test/protocol/Hooks_test.cpp | 12 +- src/test/protocol/InnerObjectFormats_test.cpp | 31 +- src/test/protocol/Issue_test.cpp | 11 +- src/test/protocol/Memo_test.cpp | 13 +- src/test/protocol/MultiApiJson_test.cpp | 13 +- src/test/protocol/PublicKey_test.cpp | 12 +- src/test/protocol/Quality_test.cpp | 16 +- src/test/protocol/STAccount_test.cpp | 9 +- src/test/protocol/STAmount_test.cpp | 24 +- src/test/protocol/STInteger_test.cpp | 3 +- src/test/protocol/STIssue_test.cpp | 18 +- src/test/protocol/STNumber_test.cpp | 10 +- src/test/protocol/STObject_test.cpp | 32 +- src/test/protocol/STParsedJSON_test.cpp | 38 +- src/test/protocol/STTx_test.cpp | 25 +- src/test/protocol/STValidation_test.cpp | 17 +- src/test/protocol/SecretKey_test.cpp | 1534 +++++++++-------- src/test/protocol/Seed_test.cpp | 9 +- src/test/protocol/SeqProxy_test.cpp | 6 +- src/test/protocol/Serializer_test.cpp | 4 +- src/test/protocol/TER_test.cpp | 48 +- src/test/resource/Logic_test.cpp | 20 +- src/test/rpc/AMMInfo_test.cpp | 26 +- src/test/rpc/AccountCurrencies_test.cpp | 19 +- src/test/rpc/AccountInfo_test.cpp | 27 +- src/test/rpc/AccountLines_test.cpp | 39 +- src/test/rpc/AccountObjects_test.cpp | 39 +- src/test/rpc/AccountOffers_test.cpp | 20 +- src/test/rpc/AccountTx_test.cpp | 48 +- src/test/rpc/AmendmentBlocked_test.cpp | 17 +- src/test/rpc/BookChanges_test.cpp | 23 +- src/test/rpc/Book_test.cpp | 33 +- src/test/rpc/Connect_test.cpp | 4 +- src/test/rpc/DeliveredAmount_test.cpp | 29 +- src/test/rpc/DepositAuthorized_test.cpp | 24 +- src/test/rpc/Feature_test.cpp | 24 +- src/test/rpc/GatewayBalances_test.cpp | 20 +- src/test/rpc/GetAggregatePrice_test.cpp | 24 +- src/test/rpc/GetCounts_test.cpp | 12 +- src/test/rpc/Handler_test.cpp | 15 +- src/test/rpc/JSONRPC_test.cpp | 34 +- src/test/rpc/KeyGeneration_test.cpp | 81 +- src/test/rpc/LedgerClosed_test.cpp | 10 +- src/test/rpc/LedgerData_test.cpp | 25 +- src/test/rpc/LedgerEntry_test.cpp | 63 +- src/test/rpc/LedgerHeader_test.cpp | 2 + src/test/rpc/LedgerRPC_test.cpp | 32 +- src/test/rpc/LedgerRequest_test.cpp | 21 +- src/test/rpc/ManifestRPC_test.cpp | 13 +- src/test/rpc/NoRippleCheck_test.cpp | 24 +- src/test/rpc/NoRipple_test.cpp | 25 +- src/test/rpc/OwnerInfo_test.cpp | 14 +- src/test/rpc/Peers_test.cpp | 10 +- src/test/rpc/RPCCall_test.cpp | 23 +- src/test/rpc/RPCHelpers_test.cpp | 12 +- src/test/rpc/RPCOverload_test.cpp | 21 +- src/test/rpc/RobustTransaction_test.cpp | 19 +- src/test/rpc/Roles_test.cpp | 16 +- src/test/rpc/ServerDefinitions_test.cpp | 12 +- src/test/rpc/ServerInfo_test.cpp | 16 +- src/test/rpc/Simulate_test.cpp | 42 +- src/test/rpc/Status_test.cpp | 17 +- src/test/rpc/Subscribe_test.cpp | 53 +- src/test/rpc/TransactionEntry_test.cpp | 17 +- src/test/rpc/TransactionHistory_test.cpp | 12 +- src/test/rpc/Transaction_test.cpp | 27 +- src/test/rpc/ValidatorInfo_test.cpp | 13 +- src/test/rpc/ValidatorRPC_test.cpp | 28 +- src/test/rpc/Version_test.cpp | 13 +- src/test/server/ServerStatus_test.cpp | 41 +- src/test/server/Server_test.cpp | 31 +- src/test/shamap/FetchPack_test.cpp | 25 +- src/test/shamap/SHAMapSync_test.cpp | 25 +- src/test/shamap/SHAMap_test.cpp | 24 +- src/test/shamap/common.h | 6 +- src/test/unit_test/FileDirGuard.h | 14 +- src/test/unit_test/SuiteJournal.h | 10 +- src/test/unit_test/multi_runner.cpp | 27 +- src/test/unit_test/multi_runner.h | 16 +- src/test/unit_test/utils.h | 6 +- src/tests/libxrpl/CMakeLists.txt | 13 +- src/tests/libxrpl/basics/MallocTrim.cpp | 4 + src/tests/libxrpl/basics/Mutex.cpp | 2 + src/tests/libxrpl/basics/RangeSet.cpp | 3 + src/tests/libxrpl/basics/Slice.cpp | 1 + src/tests/libxrpl/basics/contract.cpp | 1 - src/tests/libxrpl/basics/scope.cpp | 2 + src/tests/libxrpl/basics/tagged_integer.cpp | 41 +- src/tests/libxrpl/crypto/csprng.cpp | 2 + src/tests/libxrpl/helpers/TestSink.cpp | 7 +- src/tests/libxrpl/json/Output.cpp | 1 + src/tests/libxrpl/json/Value.cpp | 10 +- src/tests/libxrpl/json/Writer.cpp | 4 +- src/tests/libxrpl/net/HTTPClient.cpp | 27 +- src/xrpld/app/consensus/RCLConsensus.cpp | 58 +- src/xrpld/app/consensus/RCLCxPeerPos.cpp | 9 + src/xrpld/app/consensus/RCLCxPeerPos.h | 2 +- src/xrpld/app/consensus/RCLValidations.cpp | 12 + src/xrpld/app/ledger/AcceptedLedger.cpp | 6 +- src/xrpld/app/ledger/AccountStateSF.cpp | 9 + src/xrpld/app/ledger/ConsensusTransSetSF.cpp | 17 +- src/xrpld/app/ledger/InboundLedger.h | 2 +- src/xrpld/app/ledger/LedgerCleaner.h | 2 +- src/xrpld/app/ledger/LedgerHistory.cpp | 29 +- src/xrpld/app/ledger/LedgerMaster.h | 4 +- src/xrpld/app/ledger/LedgerReplayTask.h | 8 +- src/xrpld/app/ledger/LedgerToJson.h | 2 +- src/xrpld/app/ledger/OrderBookDBImpl.cpp | 30 +- src/xrpld/app/ledger/TransactionStateSF.cpp | 10 + src/xrpld/app/ledger/detail/BuildLedger.cpp | 16 +- src/xrpld/app/ledger/detail/InboundLedger.cpp | 53 +- .../app/ledger/detail/InboundLedgers.cpp | 27 +- .../app/ledger/detail/InboundTransactions.cpp | 19 +- src/xrpld/app/ledger/detail/LedgerCleaner.cpp | 24 +- .../app/ledger/detail/LedgerDeltaAcquire.cpp | 28 +- .../app/ledger/detail/LedgerDeltaAcquire.h | 4 +- src/xrpld/app/ledger/detail/LedgerMaster.cpp | 49 +- .../app/ledger/detail/LedgerPersistence.cpp | 12 +- src/xrpld/app/ledger/detail/LedgerReplay.cpp | 6 + .../ledger/detail/LedgerReplayMsgHandler.cpp | 25 +- .../app/ledger/detail/LedgerReplayTask.cpp | 23 +- .../app/ledger/detail/LedgerReplayer.cpp | 40 +- src/xrpld/app/ledger/detail/LedgerToJson.cpp | 22 +- src/xrpld/app/ledger/detail/LocalTxs.cpp | 14 +- src/xrpld/app/ledger/detail/OpenLedger.cpp | 26 +- .../app/ledger/detail/SkipListAcquire.cpp | 27 +- .../app/ledger/detail/TimeoutCounter.cpp | 12 + .../app/ledger/detail/TransactionAcquire.cpp | 27 +- .../app/ledger/detail/TransactionAcquire.h | 3 +- .../app/ledger/detail/TransactionMaster.cpp | 21 +- src/xrpld/app/main/Application.cpp | 98 +- src/xrpld/app/main/Application.h | 9 - src/xrpld/app/main/BasicApp.cpp | 3 + src/xrpld/app/main/CollectorManager.cpp | 12 +- src/xrpld/app/main/GRPCServer.cpp | 243 ++- src/xrpld/app/main/GRPCServer.h | 17 +- src/xrpld/app/main/LoadManager.cpp | 11 +- src/xrpld/app/main/LoadManager.h | 1 + src/xrpld/app/main/Main.cpp | 34 +- src/xrpld/app/main/NodeIdentity.cpp | 14 +- src/xrpld/app/main/NodeStoreScheduler.cpp | 5 + src/xrpld/app/misc/DeliverMax.h | 7 +- src/xrpld/app/misc/FeeVoteImpl.cpp | 25 +- src/xrpld/app/misc/NegativeUNLVote.cpp | 25 +- src/xrpld/app/misc/NetworkOPs.cpp | 117 +- src/xrpld/app/misc/SHAMapStore.h | 2 + src/xrpld/app/misc/SHAMapStoreImp.cpp | 31 +- src/xrpld/app/misc/SHAMapStoreImp.h | 6 +- src/xrpld/app/misc/Transaction.h | 5 +- src/xrpld/app/misc/TxQ.h | 15 +- src/xrpld/app/misc/detail/AccountTxPaging.cpp | 13 +- src/xrpld/app/misc/detail/AmendmentTable.cpp | 47 +- src/xrpld/app/misc/detail/DeliverMax.cpp | 7 +- src/xrpld/app/misc/detail/Transaction.cpp | 26 +- src/xrpld/app/misc/detail/TxQ.cpp | 55 +- src/xrpld/app/misc/detail/ValidatorKeys.cpp | 8 + src/xrpld/app/misc/detail/ValidatorList.cpp | 62 +- src/xrpld/app/misc/detail/ValidatorSite.cpp | 54 +- src/xrpld/app/misc/detail/Work.h | 8 +- src/xrpld/app/misc/detail/WorkBase.h | 42 +- src/xrpld/app/misc/detail/WorkFile.h | 21 +- src/xrpld/app/misc/detail/WorkPlain.h | 15 +- src/xrpld/app/misc/detail/WorkSSL.cpp | 23 +- src/xrpld/app/misc/detail/WorkSSL.h | 10 +- .../app/misc/detail/setup_HashRouter.cpp | 7 + src/xrpld/app/rdb/backend/detail/Node.cpp | 75 +- src/xrpld/app/rdb/backend/detail/Node.h | 6 +- .../app/rdb/backend/detail/SQLiteDatabase.cpp | 41 +- src/xrpld/app/rdb/detail/PeerFinder.cpp | 22 + src/xrpld/app/tx/detail/Taker.h | 0 src/xrpld/consensus/Consensus.cpp | 10 + src/xrpld/consensus/Consensus.h | 18 +- src/xrpld/consensus/ConsensusParms.h | 8 +- src/xrpld/consensus/DisputedTx.h | 18 +- src/xrpld/consensus/LedgerTrie.h | 23 +- src/xrpld/consensus/Validations.h | 14 + src/xrpld/core/TimeKeeper.h | 4 +- src/xrpld/core/detail/Config.cpp | 66 +- .../core/detail/NetworkIDServiceImpl.cpp | 3 +- src/xrpld/overlay/ClusterNode.h | 7 +- src/xrpld/overlay/Compression.h | 48 +- src/xrpld/overlay/Overlay.h | 10 +- src/xrpld/overlay/ReduceRelayCommon.h | 8 +- src/xrpld/overlay/Slot.h | 30 +- src/xrpld/overlay/Squelch.h | 13 +- src/xrpld/overlay/detail/Cluster.cpp | 17 +- src/xrpld/overlay/detail/ConnectAttempt.cpp | 43 +- src/xrpld/overlay/detail/ConnectAttempt.h | 4 +- src/xrpld/overlay/detail/Handshake.cpp | 39 +- src/xrpld/overlay/detail/Message.cpp | 13 + src/xrpld/overlay/detail/OverlayImpl.cpp | 81 +- src/xrpld/overlay/detail/OverlayImpl.h | 2 +- src/xrpld/overlay/detail/PeerImp.cpp | 89 +- src/xrpld/overlay/detail/PeerImp.h | 14 +- .../overlay/detail/PeerReservationTable.cpp | 10 +- src/xrpld/overlay/detail/PeerSet.cpp | 29 +- src/xrpld/overlay/detail/ProtocolMessage.h | 6 +- src/xrpld/overlay/detail/ProtocolVersion.cpp | 26 +- src/xrpld/overlay/detail/ProtocolVersion.h | 2 +- src/xrpld/overlay/detail/TrafficCount.cpp | 6 + src/xrpld/overlay/detail/TrafficCount.h | 2 +- src/xrpld/overlay/detail/Tuning.h | 8 +- src/xrpld/overlay/detail/TxMetrics.cpp | 15 +- src/xrpld/overlay/detail/TxMetrics.h | 8 +- src/xrpld/overlay/detail/ZeroCopyStream.h | 2 +- src/xrpld/overlay/predicates.h | 10 +- src/xrpld/peerfinder/PeerfinderManager.h | 13 +- src/xrpld/peerfinder/Slot.h | 6 +- src/xrpld/peerfinder/detail/Bootcache.cpp | 16 +- src/xrpld/peerfinder/detail/Bootcache.h | 10 +- src/xrpld/peerfinder/detail/Checker.h | 18 +- src/xrpld/peerfinder/detail/Counts.h | 17 +- src/xrpld/peerfinder/detail/Endpoint.cpp | 16 +- src/xrpld/peerfinder/detail/Fixed.h | 6 +- src/xrpld/peerfinder/detail/Handouts.h | 16 +- src/xrpld/peerfinder/detail/Livecache.h | 15 +- src/xrpld/peerfinder/detail/Logic.h | 30 +- .../peerfinder/detail/PeerfinderConfig.cpp | 13 +- .../peerfinder/detail/PeerfinderManager.cpp | 24 +- src/xrpld/peerfinder/detail/SlotImp.cpp | 25 +- src/xrpld/peerfinder/detail/SlotImp.h | 10 +- src/xrpld/peerfinder/detail/Source.h | 10 +- src/xrpld/peerfinder/detail/SourceStrings.cpp | 21 +- src/xrpld/peerfinder/detail/SourceStrings.h | 6 +- src/xrpld/peerfinder/detail/Store.h | 10 +- src/xrpld/peerfinder/detail/StoreSqdb.h | 10 +- src/xrpld/peerfinder/detail/Tuning.h | 10 +- src/xrpld/peerfinder/make_Manager.h | 6 +- src/xrpld/perflog/detail/PerfLogImp.cpp | 32 +- src/xrpld/perflog/detail/PerfLogImp.h | 8 +- src/xrpld/rpc/BookChanges.h | 10 +- src/xrpld/rpc/CTID.h | 7 +- src/xrpld/rpc/Context.h | 4 +- src/xrpld/rpc/MPTokenIssuanceID.h | 7 +- src/xrpld/rpc/RPCHandler.h | 6 +- src/xrpld/rpc/Status.h | 12 +- src/xrpld/rpc/detail/AccountAssets.cpp | 11 + src/xrpld/rpc/detail/AssetCache.cpp | 16 + src/xrpld/rpc/detail/DeliveredAmount.cpp | 27 +- src/xrpld/rpc/detail/Handler.cpp | 371 +++- src/xrpld/rpc/detail/Handler.h | 6 +- src/xrpld/rpc/detail/LegacyPathFind.cpp | 11 +- src/xrpld/rpc/detail/MPTokenIssuanceID.cpp | 21 +- src/xrpld/rpc/detail/PathRequest.cpp | 37 +- src/xrpld/rpc/detail/PathRequest.h | 4 +- src/xrpld/rpc/detail/PathRequestManager.cpp | 38 +- src/xrpld/rpc/detail/Pathfinder.cpp | 47 +- src/xrpld/rpc/detail/Pathfinder.h | 1 + src/xrpld/rpc/detail/RPCCall.cpp | 303 +++- src/xrpld/rpc/detail/RPCHandler.cpp | 21 +- src/xrpld/rpc/detail/RPCHelpers.cpp | 53 +- src/xrpld/rpc/detail/RPCLedgerHelpers.cpp | 34 +- src/xrpld/rpc/detail/RPCSub.cpp | 32 +- src/xrpld/rpc/detail/Role.cpp | 24 +- src/xrpld/rpc/detail/ServerHandler.cpp | 100 +- src/xrpld/rpc/detail/Status.cpp | 15 +- src/xrpld/rpc/detail/TransactionSign.cpp | 70 +- src/xrpld/rpc/detail/TransactionSign.h | 1 + src/xrpld/rpc/detail/TrustLine.cpp | 8 + src/xrpld/rpc/detail/TrustLine.h | 22 +- src/xrpld/rpc/detail/Tuning.h | 30 +- src/xrpld/rpc/handlers/ChannelVerify.cpp | 9 + src/xrpld/rpc/handlers/VaultInfo.cpp | 7 +- .../rpc/handlers/account/AccountChannels.cpp | 25 +- .../handlers/account/AccountCurrencies.cpp | 9 + .../rpc/handlers/account/AccountInfo.cpp | 22 +- .../rpc/handlers/account/AccountLines.cpp | 28 +- .../rpc/handlers/account/AccountNFTs.cpp | 10 +- .../rpc/handlers/account/AccountObjects.cpp | 38 +- .../rpc/handlers/account/AccountOffers.cpp | 20 +- src/xrpld/rpc/handlers/account/AccountTx.cpp | 31 +- .../rpc/handlers/account/GatewayBalances.cpp | 16 + .../rpc/handlers/account/NoRippleCheck.cpp | 11 +- src/xrpld/rpc/handlers/account/OwnerInfo.cpp | 4 + src/xrpld/rpc/handlers/admin/BlackList.cpp | 1 + src/xrpld/rpc/handlers/admin/UnlList.cpp | 6 +- .../rpc/handlers/admin/data/CanDelete.cpp | 6 + .../rpc/handlers/admin/data/LedgerCleaner.cpp | 1 + .../rpc/handlers/admin/data/LedgerRequest.cpp | 2 +- .../admin/keygen/ValidationCreate.cpp | 7 + .../handlers/admin/keygen/WalletPropose.cpp | 10 +- src/xrpld/rpc/handlers/admin/log/LogLevel.cpp | 4 + .../rpc/handlers/admin/log/LogRotate.cpp | 2 + src/xrpld/rpc/handlers/admin/peer/Connect.cpp | 4 + .../admin/peer/PeerReservationsAdd.cpp | 6 +- .../admin/peer/PeerReservationsDel.cpp | 1 + src/xrpld/rpc/handlers/admin/peer/Peers.cpp | 8 +- .../admin/server_control/LedgerAccept.cpp | 2 +- .../handlers/admin/server_control/Stop.cpp | 1 + .../admin/signing/ChannelAuthorize.cpp | 11 + src/xrpld/rpc/handlers/admin/signing/Sign.cpp | 3 + .../rpc/handlers/admin/signing/SignFor.cpp | 3 + .../handlers/admin/status/ConsensusInfo.cpp | 1 - .../rpc/handlers/admin/status/FetchInfo.cpp | 1 - .../rpc/handlers/admin/status/GetCounts.cpp | 7 +- .../handlers/admin/status/ValidatorInfo.cpp | 3 +- .../admin/status/ValidatorListSites.cpp | 2 +- .../rpc/handlers/admin/status/Validators.cpp | 2 +- src/xrpld/rpc/handlers/ledger/Ledger.cpp | 31 +- src/xrpld/rpc/handlers/ledger/Ledger.h | 6 +- .../rpc/handlers/ledger/LedgerClosed.cpp | 2 + src/xrpld/rpc/handlers/ledger/LedgerData.cpp | 11 + src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp | 12 + src/xrpld/rpc/handlers/ledger/LedgerEntry.cpp | 34 +- .../rpc/handlers/ledger/LedgerEntryHelpers.h | 8 +- .../rpc/handlers/ledger/LedgerHeader.cpp | 6 + src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp | 28 +- .../rpc/handlers/orderbook/BookChanges.cpp | 3 + .../rpc/handlers/orderbook/BookOffers.cpp | 13 +- .../handlers/orderbook/DepositAuthorized.cpp | 13 + .../handlers/orderbook/GetAggregatePrice.cpp | 28 +- .../rpc/handlers/orderbook/NFTBuyOffers.cpp | 4 +- .../rpc/handlers/orderbook/NFTSellOffers.cpp | 4 +- src/xrpld/rpc/handlers/orderbook/PathFind.cpp | 2 + .../rpc/handlers/orderbook/RipplePathFind.cpp | 10 + .../rpc/handlers/server_info/Feature.cpp | 4 + src/xrpld/rpc/handlers/server_info/Fee.cpp | 4 +- .../rpc/handlers/server_info/Manifest.cpp | 2 + .../server_info/ServerDefinitions.cpp | 10 +- src/xrpld/rpc/handlers/server_info/Version.h | 10 +- .../rpc/handlers/subscribe/Subscribe.cpp | 14 +- .../rpc/handlers/subscribe/Unsubscribe.cpp | 7 + .../rpc/handlers/transaction/Simulate.cpp | 29 +- src/xrpld/rpc/handlers/transaction/Submit.cpp | 14 + .../transaction/SubmitMultiSigned.cpp | 3 +- .../handlers/transaction/TransactionEntry.cpp | 5 + src/xrpld/rpc/handlers/transaction/Tx.cpp | 21 +- .../rpc/handlers/transaction/TxHistory.cpp | 1 - src/xrpld/rpc/handlers/utility/Random.cpp | 2 + src/xrpld/rpc/json_body.h | 2 +- src/xrpld/shamap/NodeFamily.cpp | 16 +- src/xrpld/shamap/NodeFamily.h | 3 + 1231 files changed, 22053 insertions(+), 8049 deletions(-) create mode 100644 .github/scripts/check-pr-description.py create mode 100644 .github/workflows/check-pr-description.yml create mode 100755 bin/pre-commit/clang_tidy_check.py create mode 100644 cmake/XrplProtocolAutogenRun.cmake rename {scripts => cmake/scripts/codegen}/generate_ledger_classes.py (92%) rename {scripts => cmake/scripts/codegen}/generate_tx_classes.py (92%) rename {scripts => cmake/scripts/codegen}/macro_parser_common.py (100%) rename {scripts => cmake/scripts/codegen}/requirements.txt (100%) rename {scripts => cmake/scripts/codegen}/templates/LedgerEntry.h.mako (100%) rename {scripts => cmake/scripts/codegen}/templates/LedgerEntryTests.cpp.mako (100%) rename {scripts => cmake/scripts/codegen}/templates/Transaction.h.mako (100%) rename {scripts => cmake/scripts/codegen}/templates/TransactionTests.cpp.mako (100%) create mode 100644 src/test/app/GRPCServerTLS_test.cpp delete mode 100644 src/xrpld/app/tx/detail/Taker.h diff --git a/.clang-format b/.clang-format index ca8edf678f..b6089a2cd4 100644 --- a/.clang-format +++ b/.clang-format @@ -50,20 +50,21 @@ ForEachMacros: [Q_FOREACH, BOOST_FOREACH] IncludeBlocks: Regroup IncludeCategories: - Regex: "^<(test)/" - Priority: 0 - - Regex: "^<(xrpld)/" Priority: 1 - - Regex: "^<(xrpl)/" + - Regex: "^<(xrpld)/" Priority: 2 - - Regex: "^<(boost)/" + - Regex: "^<(xrpl)/" Priority: 3 - - Regex: "^.*/" + - Regex: "^<(boost)/" Priority: 4 - - Regex: '^.*\.h' + - Regex: "^.*/" Priority: 5 - - Regex: ".*" + - Regex: '^.*\.h' Priority: 6 + - Regex: ".*" + Priority: 7 IncludeIsMainRegex: "$" +MainIncludeChar: AngleBracket IndentCaseLabels: true IndentFunctionDeclarationAfterType: false IndentRequiresClause: true diff --git a/.clang-tidy b/.clang-tidy index 07274eb53a..3a21eba6c0 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -10,26 +10,26 @@ Checks: "-*, bugprone-chained-comparison, bugprone-compare-pointer-to-member-virtual-function, bugprone-copy-constructor-init, - # bugprone-crtp-constructor-accessibility, # has issues + bugprone-crtp-constructor-accessibility, bugprone-dangling-handle, bugprone-dynamic-static-initializers, - # bugprone-empty-catch, # has issues + bugprone-empty-catch, bugprone-fold-init-type, - # bugprone-forward-declaration-namespace, # has issues - # bugprone-inaccurate-erase, - # bugprone-inc-dec-in-conditions, - # bugprone-incorrect-enable-if, - # bugprone-incorrect-roundings, - # bugprone-infinite-loop, - # bugprone-integer-division, + bugprone-forward-declaration-namespace, + bugprone-inaccurate-erase, + bugprone-inc-dec-in-conditions, + bugprone-incorrect-enable-if, + bugprone-incorrect-roundings, + bugprone-infinite-loop, + bugprone-integer-division, bugprone-lambda-function-name, - # bugprone-macro-parentheses, # has issues + bugprone-macro-parentheses, bugprone-macro-repeated-side-effects, bugprone-misplaced-operator-in-strlen-in-alloc, bugprone-misplaced-pointer-arithmetic-in-alloc, bugprone-misplaced-widening-cast, bugprone-move-forwarding-reference, - # bugprone-multi-level-implicit-pointer-conversion, # has issues + bugprone-multi-level-implicit-pointer-conversion, bugprone-multiple-new-in-one-expression, bugprone-multiple-statement-macro, bugprone-no-escape, @@ -39,13 +39,13 @@ Checks: "-*, bugprone-pointer-arithmetic-on-polymorphic-object, bugprone-posix-return, bugprone-redundant-branch-condition, - # bugprone-reserved-identifier, # has issues - # bugprone-return-const-ref-from-parameter, # has issues + bugprone-reserved-identifier, + bugprone-return-const-ref-from-parameter, bugprone-shared-ptr-array-mismatch, bugprone-signal-handler, bugprone-signed-char-misuse, bugprone-sizeof-container, - # bugprone-sizeof-expression, # has issues + bugprone-sizeof-expression, bugprone-spuriously-wake-up-functions, bugprone-standalone-empty, bugprone-string-constructor, @@ -62,7 +62,7 @@ Checks: "-*, bugprone-suspicious-string-compare, bugprone-suspicious-stringview-data-usage, bugprone-swapped-arguments, - # bugprone-switch-missing-default-case, # has issues + bugprone-switch-missing-default-case, bugprone-terminating-continue, bugprone-throw-keyword-missing, bugprone-too-small-loop-variable, @@ -73,7 +73,7 @@ Checks: "-*, bugprone-unhandled-self-assignment, bugprone-unique-ptr-array-mismatch, bugprone-unsafe-functions, - # bugprone-use-after-move, # has issues + bugprone-use-after-move, # has issues bugprone-unused-raii, bugprone-unused-return-value, bugprone-unused-local-non-trivial-variable, @@ -90,15 +90,28 @@ Checks: "-*, misc-const-correctness, misc-definitions-in-headers, misc-header-include-cycle, + misc-include-cleaner, misc-misplaced-const, misc-redundant-expression, misc-static-assert, misc-throw-by-value-catch-by-reference, misc-unused-alias-decls, misc-unused-using-decls, - modernize-deprecated-headers, + modernize-concat-nested-namespaces, modernize-make-shared, modernize-make-unique, + modernize-pass-by-value, + modernize-type-traits, + modernize-use-designated-initializers, + modernize-use-emplace, + modernize-use-equals-default, + modernize-use-equals-delete, + modernize-use-override, + modernize-use-ranges, + modernize-use-starts-ends-with, + modernize-use-std-numbers, + modernize-use-using, + modernize-deprecated-headers, llvm-namespace-comment, performance-faster-string-find, performance-for-range-copy, @@ -108,53 +121,38 @@ Checks: "-*, performance-move-constructor-init, performance-no-automatic-move, performance-trivially-destructible, - # readability-avoid-nested-conditional-operator, # has issues - # readability-avoid-return-with-void-value, # has issues - # readability-braces-around-statements, # has issues - # readability-const-return-type, # has issues - # readability-container-contains, # has issues - # readability-container-size-empty, # has issues - # readability-convert-member-functions-to-static, # has issues + readability-avoid-nested-conditional-operator, + readability-avoid-return-with-void-value, + readability-braces-around-statements, + readability-const-return-type, + readability-container-contains, + readability-container-size-empty, + readability-convert-member-functions-to-static, readability-duplicate-include, - # readability-else-after-return, # has issues - # readability-enum-initial-value, # has issues - # readability-implicit-bool-conversion, # has issues - # readability-make-member-function-const, # has issues - # readability-math-missing-parentheses, # has issues + readability-else-after-return, + readability-enum-initial-value, + readability-implicit-bool-conversion, + readability-make-member-function-const, + readability-math-missing-parentheses, readability-misleading-indentation, readability-non-const-parameter, - # readability-redundant-casting, # has issues - # readability-redundant-declaration, # has issues - # readability-redundant-inline-specifier, # has issues - # readability-redundant-member-init, # has issues + readability-redundant-casting, + readability-redundant-declaration, + readability-redundant-inline-specifier, + readability-redundant-member-init, readability-redundant-string-init, readability-reference-to-constructed-temporary, - # readability-simplify-boolean-expr, # has issues - # readability-static-definition-in-anonymous-namespace, # has issues - # readability-suspicious-call-argument, # has issues + readability-simplify-boolean-expr, + readability-static-definition-in-anonymous-namespace, + readability-suspicious-call-argument, readability-use-std-min-max " # --- # other checks that have issues that need to be resolved: # -# misc-include-cleaner, -# # readability-inconsistent-declaration-parameter-name, # in this codebase this check will break a lot of arg names # readability-static-accessed-through-instance, # this check is probably unnecessary. it makes the code less readable # readability-identifier-naming, # https://github.com/XRPLF/rippled/pull/6571 -# -# modernize-concat-nested-namespaces, -# modernize-pass-by-value, -# modernize-type-traits, -# modernize-use-designated-initializers, -# modernize-use-emplace, -# modernize-use-equals-default, -# modernize-use-equals-delete, -# modernize-use-override, -# modernize-use-ranges, -# modernize-use-starts-ends-with, -# modernize-use-std-numbers, -# modernize-use-using, # --- # CheckOptions: @@ -194,7 +192,7 @@ CheckOptions: # readability-identifier-naming.FunctionIgnoredRegexp: ".*tag_invoke.*" bugprone-unsafe-functions.ReportMoreUnsafeFunctions: true bugprone-unused-return-value.CheckedReturnTypes: ::std::error_code;::std::error_condition;::std::errc -# misc-include-cleaner.IgnoreHeaders: '.*/(detail|impl)/.*;.*(expected|unexpected).*;.*ranges_lower_bound\.h;time.h;stdlib.h;__chrono/.*;fmt/chrono.h;boost/uuid/uuid_hash.hpp' + misc-include-cleaner.IgnoreHeaders: ".*/(detail|impl)/.*;.*fwd\\.h(pp)?;time.h;stdlib.h;sqlite3.h;netinet/in\\.h;sys/resource\\.h;sys/sysinfo\\.h;linux/sysinfo\\.h;__chrono/.*;bits/.*;_abort\\.h;boost/uuid/uuid_hash.hpp;boost/beast/core/flat_buffer\\.hpp;boost/beast/http/field\\.hpp;boost/beast/http/dynamic_body\\.hpp;boost/beast/http/message\\.hpp;boost/beast/http/read\\.hpp;boost/beast/http/write\\.hpp;openssl/obj_mac\\.h" # HeaderFilterRegex: '^.*/(test|xrpl|xrpld)/.*\.(h|hpp)$' ExcludeHeaderFilterRegex: '^.*/protocol_autogen/.*\.(h|hpp)$' diff --git a/.github/scripts/check-pr-description.py b/.github/scripts/check-pr-description.py new file mode 100644 index 0000000000..36abb0f5a4 --- /dev/null +++ b/.github/scripts/check-pr-description.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +""" +Checks that a pull request description has been customized from the +pull_request_template.md. Exits with code 1 if the description is empty +or identical to the template (ignoring HTML comments and whitespace). + +Usage: + python check-pr-description.py --template-file TEMPLATE --pr-body-file BODY +""" + +import argparse +import re +import sys +from pathlib import Path + + +def normalize(text: str) -> str: + """Strip HTML comments, trim lines, and remove blank lines.""" + # Remove HTML comments (possibly multi-line) + text = re.sub(r"", "", text, flags=re.DOTALL) + # Strip each line and drop empties + lines = [line.strip() for line in text.splitlines()] + lines = [line for line in lines if line] + return "\n".join(lines) + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Check that a PR description differs from the template." + ) + parser.add_argument( + "--template-file", + type=Path, + required=True, + help="Path to the pull request template file.", + ) + parser.add_argument( + "--pr-body-file", + type=Path, + required=True, + help="Path to a file containing the PR body text.", + ) + args = parser.parse_args() + + template_path: Path = args.template_file + pr_body_path: Path = args.pr_body_file + + if not template_path.is_file(): + print(f"::error::Template file {template_path} not found") + return 1 + + if not pr_body_path.is_file(): + print(f"::error::PR body file {pr_body_path} not found") + return 1 + + template = template_path.read_text(encoding="utf-8") + pr_body = pr_body_path.read_text(encoding="utf-8") + + # Check if the PR body is empty or whitespace-only + if not pr_body.strip(): + print( + "::error::PR description is empty. " + "Please fill in the pull request template." + ) + return 1 + + norm_template = normalize(template) + norm_pr_body = normalize(pr_body) + + if norm_pr_body == norm_template: + print( + "::error::PR description (ignoring HTML comments) is identical" + " to the template. Please fill in the details of your change." + f"\n\nVisible template content:\n---\n{norm_template}\n---" + f"\n\nVisible PR description content:\n---\n{norm_pr_body}\n---" + ) + return 1 + + print("PR description has been customized from the template.") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.github/scripts/levelization/results/loops.txt b/.github/scripts/levelization/results/loops.txt index 7914704f9d..fb449441e3 100644 --- a/.github/scripts/levelization/results/loops.txt +++ b/.github/scripts/levelization/results/loops.txt @@ -2,19 +2,19 @@ Loop: test.jtx test.toplevel test.toplevel > test.jtx Loop: test.jtx test.unit_test - test.unit_test == test.jtx + test.unit_test ~= test.jtx Loop: xrpld.app xrpld.overlay - xrpld.overlay ~= xrpld.app + xrpld.app > xrpld.overlay Loop: xrpld.app xrpld.peerfinder - xrpld.peerfinder == xrpld.app + xrpld.peerfinder ~= xrpld.app Loop: xrpld.app xrpld.rpc xrpld.rpc > xrpld.app Loop: xrpld.app xrpld.shamap - xrpld.shamap ~= xrpld.app + xrpld.shamap > xrpld.app Loop: xrpld.overlay xrpld.rpc xrpld.rpc ~= xrpld.overlay diff --git a/.github/scripts/levelization/results/ordering.txt b/.github/scripts/levelization/results/ordering.txt index 38e77dedf8..02a14a0077 100644 --- a/.github/scripts/levelization/results/ordering.txt +++ b/.github/scripts/levelization/results/ordering.txt @@ -3,13 +3,17 @@ libxrpl.conditions > xrpl.basics libxrpl.conditions > xrpl.conditions libxrpl.core > xrpl.basics libxrpl.core > xrpl.core +libxrpl.core > xrpl.json libxrpl.crypto > xrpl.basics libxrpl.json > xrpl.basics libxrpl.json > xrpl.json libxrpl.ledger > xrpl.basics libxrpl.ledger > xrpl.json libxrpl.ledger > xrpl.ledger +libxrpl.ledger > xrpl.nodestore libxrpl.ledger > xrpl.protocol +libxrpl.ledger > xrpl.server +libxrpl.ledger > xrpl.shamap libxrpl.net > xrpl.basics libxrpl.net > xrpl.net libxrpl.nodestore > xrpl.basics @@ -19,19 +23,22 @@ libxrpl.nodestore > xrpl.protocol libxrpl.protocol > xrpl.basics libxrpl.protocol > xrpl.json libxrpl.protocol > xrpl.protocol -libxrpl.protocol_autogen > xrpl.protocol_autogen libxrpl.rdb > xrpl.basics libxrpl.rdb > xrpl.core libxrpl.rdb > xrpl.rdb libxrpl.resource > xrpl.basics libxrpl.resource > xrpl.json +libxrpl.resource > xrpl.protocol libxrpl.resource > xrpl.resource libxrpl.server > xrpl.basics +libxrpl.server > xrpl.core libxrpl.server > xrpl.json libxrpl.server > xrpl.protocol libxrpl.server > xrpl.rdb +libxrpl.server > xrpl.resource libxrpl.server > xrpl.server libxrpl.shamap > xrpl.basics +libxrpl.shamap > xrpl.nodestore libxrpl.shamap > xrpl.protocol libxrpl.shamap > xrpl.shamap libxrpl.tx > xrpl.basics @@ -43,12 +50,11 @@ libxrpl.tx > xrpl.protocol libxrpl.tx > xrpl.server libxrpl.tx > xrpl.tx test.app > test.jtx -test.app > test.rpc -test.app > test.toplevel test.app > test.unit_test test.app > xrpl.basics test.app > xrpl.core test.app > xrpld.app +test.app > xrpld.consensus test.app > xrpld.core test.app > xrpld.overlay test.app > xrpld.rpc @@ -56,9 +62,9 @@ test.app > xrpl.json test.app > xrpl.ledger test.app > xrpl.nodestore test.app > xrpl.protocol -test.app > xrpl.rdb test.app > xrpl.resource test.app > xrpl.server +test.app > xrpl.shamap test.app > xrpl.tx test.basics > test.jtx test.basics > test.unit_test @@ -71,16 +77,17 @@ test.beast > xrpl.basics test.conditions > xrpl.basics test.conditions > xrpl.conditions test.consensus > test.csf +test.consensus > test.jtx test.consensus > test.toplevel test.consensus > test.unit_test test.consensus > xrpl.basics test.consensus > xrpld.app test.consensus > xrpld.consensus -test.consensus > xrpl.json test.consensus > xrpl.ledger +test.consensus > xrpl.protocol +test.consensus > xrpl.shamap test.consensus > xrpl.tx test.core > test.jtx -test.core > test.toplevel test.core > test.unit_test test.core > xrpl.basics test.core > xrpl.core @@ -108,27 +115,32 @@ test.jtx > xrpl.resource test.jtx > xrpl.server test.jtx > xrpl.tx test.ledger > test.jtx -test.ledger > test.toplevel test.ledger > xrpl.basics +test.ledger > xrpl.core +test.ledger > xrpld.app test.ledger > xrpld.core +test.ledger > xrpl.json test.ledger > xrpl.ledger test.ledger > xrpl.protocol test.nodestore > test.jtx -test.nodestore > test.toplevel test.nodestore > test.unit_test test.nodestore > xrpl.basics +test.nodestore > xrpld.core test.nodestore > xrpl.nodestore +test.nodestore > xrpl.protocol test.nodestore > xrpl.rdb test.overlay > test.jtx -test.overlay > test.toplevel test.overlay > test.unit_test test.overlay > xrpl.basics test.overlay > xrpld.app +test.overlay > xrpld.core test.overlay > xrpld.overlay test.overlay > xrpld.peerfinder -test.overlay > xrpl.ledger +test.overlay > xrpl.json test.overlay > xrpl.nodestore test.overlay > xrpl.protocol +test.overlay > xrpl.resource +test.overlay > xrpl.server test.overlay > xrpl.shamap test.peerfinder > test.beast test.peerfinder > test.unit_test @@ -136,7 +148,7 @@ test.peerfinder > xrpl.basics test.peerfinder > xrpld.core test.peerfinder > xrpld.peerfinder test.peerfinder > xrpl.protocol -test.protocol > test.toplevel +test.protocol > test.jtx test.protocol > test.unit_test test.protocol > xrpl.basics test.protocol > xrpl.json @@ -145,7 +157,6 @@ test.resource > test.unit_test test.resource > xrpl.basics test.resource > xrpl.resource test.rpc > test.jtx -test.rpc > test.toplevel test.rpc > xrpl.basics test.rpc > xrpl.core test.rpc > xrpld.app @@ -159,13 +170,12 @@ test.rpc > xrpl.resource test.rpc > xrpl.server test.rpc > xrpl.tx test.server > test.jtx -test.server > test.toplevel test.server > test.unit_test test.server > xrpl.basics test.server > xrpld.app test.server > xrpld.core -test.server > xrpld.rpc test.server > xrpl.json +test.server > xrpl.protocol test.server > xrpl.server test.shamap > test.unit_test test.shamap > xrpl.basics @@ -239,19 +249,20 @@ xrpld.consensus > xrpl.ledger xrpld.consensus > xrpl.protocol xrpld.core > xrpl.basics xrpld.core > xrpl.core -xrpld.core > xrpl.json xrpld.core > xrpl.net xrpld.core > xrpl.protocol xrpld.core > xrpl.rdb xrpld.overlay > xrpl.basics xrpld.overlay > xrpl.core +xrpld.overlay > xrpld.consensus xrpld.overlay > xrpld.core xrpld.overlay > xrpld.peerfinder xrpld.overlay > xrpl.json +xrpld.overlay > xrpl.ledger xrpld.overlay > xrpl.protocol -xrpld.overlay > xrpl.rdb xrpld.overlay > xrpl.resource xrpld.overlay > xrpl.server +xrpld.overlay > xrpl.shamap xrpld.overlay > xrpl.tx xrpld.peerfinder > xrpl.basics xrpld.peerfinder > xrpld.core @@ -261,6 +272,7 @@ xrpld.perflog > xrpl.basics xrpld.perflog > xrpl.core xrpld.perflog > xrpld.rpc xrpld.perflog > xrpl.json +xrpld.perflog > xrpl.protocol xrpld.rpc > xrpl.basics xrpld.rpc > xrpl.core xrpld.rpc > xrpld.core @@ -272,5 +284,9 @@ xrpld.rpc > xrpl.protocol xrpld.rpc > xrpl.rdb xrpld.rpc > xrpl.resource xrpld.rpc > xrpl.server +xrpld.rpc > xrpl.shamap xrpld.rpc > xrpl.tx +xrpld.shamap > xrpl.basics +xrpld.shamap > xrpld.core +xrpld.shamap > xrpl.protocol xrpld.shamap > xrpl.shamap diff --git a/.github/scripts/rename/binary.sh b/.github/scripts/rename/binary.sh index 81d48ce94b..cdce6db4ba 100755 --- a/.github/scripts/rename/binary.sh +++ b/.github/scripts/rename/binary.sh @@ -6,11 +6,11 @@ set -e # On MacOS, ensure that GNU sed is installed and available as `gsed`. SED_COMMAND=sed if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed fi # This script changes the binary name from `rippled` to `xrpld`, and reverses diff --git a/.github/scripts/rename/cmake.sh b/.github/scripts/rename/cmake.sh index 6c3d30e948..9c91e8f277 100755 --- a/.github/scripts/rename/cmake.sh +++ b/.github/scripts/rename/cmake.sh @@ -8,16 +8,16 @@ set -e SED_COMMAND=sed HEAD_COMMAND=head if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed - if ! command -v ghead &> /dev/null; then - echo "Error: ghead is not installed. Please install it using 'brew install coreutils'." - exit 1 - fi - HEAD_COMMAND=ghead + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed + if ! command -v ghead &> /dev/null; then + echo "Error: ghead is not installed. Please install it using 'brew install coreutils'." + exit 1 + fi + HEAD_COMMAND=ghead fi # This script renames CMake files from `RippleXXX.cmake` or `RippledXXX.cmake` @@ -44,10 +44,10 @@ pushd "${DIRECTORY}" find cmake -type f -name 'Rippled*.cmake' -exec bash -c 'mv "${1}" "${1/Rippled/Xrpl}"' - {} \; find cmake -type f -name 'Ripple*.cmake' -exec bash -c 'mv "${1}" "${1/Ripple/Xrpl}"' - {} \; if [ -e cmake/xrpl_add_test.cmake ]; then - mv cmake/xrpl_add_test.cmake cmake/XrplAddTest.cmake + mv cmake/xrpl_add_test.cmake cmake/XrplAddTest.cmake fi if [ -e include/xrpl/proto/ripple.proto ]; then - mv include/xrpl/proto/ripple.proto include/xrpl/proto/xrpl.proto + mv include/xrpl/proto/ripple.proto include/xrpl/proto/xrpl.proto fi # Rename inside the files. @@ -71,14 +71,14 @@ ${SED_COMMAND} -i 's@xrpl/validator-keys-tool@ripple/validator-keys-tool@' cmake # Ensure the name of the binary and config remain 'rippled' for now. ${SED_COMMAND} -i -E 's/xrpld(-example)?\.cfg/rippled\1.cfg/g' cmake/XrplInstall.cmake if grep -q '"xrpld"' cmake/XrplCore.cmake; then - # The script has been rerun, so just restore the name of the binary. - ${SED_COMMAND} -i 's/"xrpld"/"rippled"/' cmake/XrplCore.cmake + # The script has been rerun, so just restore the name of the binary. + ${SED_COMMAND} -i 's/"xrpld"/"rippled"/' cmake/XrplCore.cmake elif ! grep -q '"rippled"' cmake/XrplCore.cmake; then - ${HEAD_COMMAND} -n -1 cmake/XrplCore.cmake > cmake.tmp - echo ' # For the time being, we will keep the name of the binary as it was.' >> cmake.tmp - echo ' set_target_properties(xrpld PROPERTIES OUTPUT_NAME "rippled")' >> cmake.tmp - tail -1 cmake/XrplCore.cmake >> cmake.tmp - mv cmake.tmp cmake/XrplCore.cmake + ${HEAD_COMMAND} -n -1 cmake/XrplCore.cmake > cmake.tmp + echo ' # For the time being, we will keep the name of the binary as it was.' >> cmake.tmp + echo ' set_target_properties(xrpld PROPERTIES OUTPUT_NAME "rippled")' >> cmake.tmp + tail -1 cmake/XrplCore.cmake >> cmake.tmp + mv cmake.tmp cmake/XrplCore.cmake fi # Restore the symlink from 'xrpld' to 'rippled'. diff --git a/.github/scripts/rename/config.sh b/.github/scripts/rename/config.sh index 9a521e8a51..b7aff82cdf 100755 --- a/.github/scripts/rename/config.sh +++ b/.github/scripts/rename/config.sh @@ -6,11 +6,11 @@ set -e # On MacOS, ensure that GNU sed is installed and available as `gsed`. SED_COMMAND=sed if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed fi # This script renames the config from `rippled.cfg` to `xrpld.cfg`, and updates @@ -32,28 +32,28 @@ pushd "${DIRECTORY}" # Add the xrpld.cfg to the .gitignore. if ! grep -q 'xrpld.cfg' .gitignore; then - ${SED_COMMAND} -i '/rippled.cfg/a\ + ${SED_COMMAND} -i '/rippled.cfg/a\ /xrpld.cfg' .gitignore fi # Rename the files. if [ -e rippled.cfg ]; then - mv rippled.cfg xrpld.cfg + mv rippled.cfg xrpld.cfg fi if [ -e cfg/rippled-example.cfg ]; then - mv cfg/rippled-example.cfg cfg/xrpld-example.cfg + mv cfg/rippled-example.cfg cfg/xrpld-example.cfg fi # Rename inside the files. DIRECTORIES=("cfg" "cmake" "include" "src") for DIRECTORY in "${DIRECTORIES[@]}"; do - echo "Processing directory: ${DIRECTORY}" + echo "Processing directory: ${DIRECTORY}" - find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.cmake" -o -name "*.txt" -o -name "*.cfg" -o -name "*.md" \) | while read -r FILE; do - echo "Processing file: ${FILE}" - ${SED_COMMAND} -i -E 's/rippled(-example)?[ .]cfg/xrpld\1.cfg/g' "${FILE}" - ${SED_COMMAND} -i 's/rippleConfig/xrpldConfig/g' "${FILE}" - done + find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.cmake" -o -name "*.txt" -o -name "*.cfg" -o -name "*.md" \) | while read -r FILE; do + echo "Processing file: ${FILE}" + ${SED_COMMAND} -i -E 's/rippled(-example)?[ .]cfg/xrpld\1.cfg/g' "${FILE}" + ${SED_COMMAND} -i 's/rippleConfig/xrpldConfig/g' "${FILE}" + done done ${SED_COMMAND} -i 's/rippled/xrpld/g' cfg/xrpld-example.cfg ${SED_COMMAND} -i 's/rippled/xrpld/g' src/test/core/Config_test.cpp diff --git a/.github/scripts/rename/copyright.sh b/.github/scripts/rename/copyright.sh index f212fe5fc7..9ebdad1e89 100755 --- a/.github/scripts/rename/copyright.sh +++ b/.github/scripts/rename/copyright.sh @@ -6,11 +6,11 @@ set -e # On MacOS, ensure that GNU sed is installed and available as `gsed`. SED_COMMAND=sed if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed fi # This script removes superfluous copyright notices in source and header files @@ -43,56 +43,56 @@ ${SED_COMMAND} -i -E "s@\\\t@${PLACEHOLDER_TAB}@g" src/test/rpc/ValidatorInfo_te # Process the include/ and src/ directories. DIRECTORIES=("include" "src") for DIRECTORY in "${DIRECTORIES[@]}"; do - echo "Processing directory: ${DIRECTORY}" + echo "Processing directory: ${DIRECTORY}" - find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.macro" \) | while read -r FILE; do - echo "Processing file: ${FILE}" - # Handle the cases where the copyright notice is enclosed in /* ... */ - # and usually surrounded by //---- and //======. - ${SED_COMMAND} -z -i -E 's@^//-------+\n+@@' "${FILE}" - ${SED_COMMAND} -z -i -E 's@^.*Copyright.+(Ripple|Bougalis|Falco|Hinnant|Null|Ritchford|XRPLF).+PERFORMANCE OF THIS SOFTWARE\.\n\*/\n+@@' "${FILE}" # cspell: ignore Bougalis Falco Hinnant Ritchford - ${SED_COMMAND} -z -i -E 's@^//=======+\n+@@' "${FILE}" + find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.macro" \) | while read -r FILE; do + echo "Processing file: ${FILE}" + # Handle the cases where the copyright notice is enclosed in /* ... */ + # and usually surrounded by //---- and //======. + ${SED_COMMAND} -z -i -E 's@^//-------+\n+@@' "${FILE}" + ${SED_COMMAND} -z -i -E 's@^.*Copyright.+(Ripple|Bougalis|Falco|Hinnant|Null|Ritchford|XRPLF).+PERFORMANCE OF THIS SOFTWARE\.\n\*/\n+@@' "${FILE}" # cspell: ignore Bougalis Falco Hinnant Ritchford + ${SED_COMMAND} -z -i -E 's@^//=======+\n+@@' "${FILE}" - # Handle the cases where the copyright notice is commented out with //. - ${SED_COMMAND} -z -i -E 's@^//\n// Copyright.+Falco \(vinnie dot falco at gmail dot com\)\n//\n+@@' "${FILE}" # cspell: ignore Vinnie Falco - done + # Handle the cases where the copyright notice is commented out with //. + ${SED_COMMAND} -z -i -E 's@^//\n// Copyright.+Falco \(vinnie dot falco at gmail dot com\)\n//\n+@@' "${FILE}" # cspell: ignore Vinnie Falco + done done # Restore copyright notices that were removed from specific files, without # restoring the verbiage that is already present in LICENSE.md. Ensure that if # the script is run multiple times, duplicate notices are not added. if ! grep -q 'Raw Material Software' include/xrpl/beast/core/CurrentThreadName.h; then - echo -e "// Portions of this file are from JUCE (http://www.juce.com).\n// Copyright (c) 2013 - Raw Material Software Ltd.\n// Please visit http://www.juce.com\n\n$(cat include/xrpl/beast/core/CurrentThreadName.h)" > include/xrpl/beast/core/CurrentThreadName.h + echo -e "// Portions of this file are from JUCE (http://www.juce.com).\n// Copyright (c) 2013 - Raw Material Software Ltd.\n// Please visit http://www.juce.com\n\n$(cat include/xrpl/beast/core/CurrentThreadName.h)" > include/xrpl/beast/core/CurrentThreadName.h fi if ! grep -q 'Dev Null' src/test/app/NetworkID_test.cpp; then - echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/app/NetworkID_test.cpp)" > src/test/app/NetworkID_test.cpp + echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/app/NetworkID_test.cpp)" > src/test/app/NetworkID_test.cpp fi if ! grep -q 'Dev Null' src/test/app/tx/apply_test.cpp; then - echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/app/tx/apply_test.cpp)" > src/test/app/tx/apply_test.cpp + echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/app/tx/apply_test.cpp)" > src/test/app/tx/apply_test.cpp fi if ! grep -q 'Dev Null' src/test/rpc/ManifestRPC_test.cpp; then - echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/rpc/ManifestRPC_test.cpp)" > src/test/rpc/ManifestRPC_test.cpp + echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/rpc/ManifestRPC_test.cpp)" > src/test/rpc/ManifestRPC_test.cpp fi if ! grep -q 'Dev Null' src/test/rpc/ValidatorInfo_test.cpp; then - echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/rpc/ValidatorInfo_test.cpp)" > src/test/rpc/ValidatorInfo_test.cpp + echo -e "// Copyright (c) 2020 Dev Null Productions\n\n$(cat src/test/rpc/ValidatorInfo_test.cpp)" > src/test/rpc/ValidatorInfo_test.cpp fi if ! grep -q 'Dev Null' src/xrpld/rpc/handlers/server_info/Manifest.cpp; then - echo -e "// Copyright (c) 2019 Dev Null Productions\n\n$(cat src/xrpld/rpc/handlers/server_info/Manifest.cpp)" > src/xrpld/rpc/handlers/server_info/Manifest.cpp + echo -e "// Copyright (c) 2019 Dev Null Productions\n\n$(cat src/xrpld/rpc/handlers/server_info/Manifest.cpp)" > src/xrpld/rpc/handlers/server_info/Manifest.cpp fi if ! grep -q 'Dev Null' src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp; then - echo -e "// Copyright (c) 2019 Dev Null Productions\n\n$(cat src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp)" > src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp + echo -e "// Copyright (c) 2019 Dev Null Productions\n\n$(cat src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp)" > src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp fi if ! grep -q 'Bougalis' include/xrpl/basics/SlabAllocator.h; then - echo -e "// Copyright (c) 2022, Nikolaos D. Bougalis \n\n$(cat include/xrpl/basics/SlabAllocator.h)" > include/xrpl/basics/SlabAllocator.h # cspell: ignore Nikolaos Bougalis nikb + echo -e "// Copyright (c) 2022, Nikolaos D. Bougalis \n\n$(cat include/xrpl/basics/SlabAllocator.h)" > include/xrpl/basics/SlabAllocator.h # cspell: ignore Nikolaos Bougalis nikb fi if ! grep -q 'Bougalis' include/xrpl/basics/spinlock.h; then - echo -e "// Copyright (c) 2022, Nikolaos D. Bougalis \n\n$(cat include/xrpl/basics/spinlock.h)" > include/xrpl/basics/spinlock.h # cspell: ignore Nikolaos Bougalis nikb + echo -e "// Copyright (c) 2022, Nikolaos D. Bougalis \n\n$(cat include/xrpl/basics/spinlock.h)" > include/xrpl/basics/spinlock.h # cspell: ignore Nikolaos Bougalis nikb fi if ! grep -q 'Bougalis' include/xrpl/basics/tagged_integer.h; then - echo -e "// Copyright (c) 2014, Nikolaos D. Bougalis \n\n$(cat include/xrpl/basics/tagged_integer.h)" > include/xrpl/basics/tagged_integer.h # cspell: ignore Nikolaos Bougalis nikb + echo -e "// Copyright (c) 2014, Nikolaos D. Bougalis \n\n$(cat include/xrpl/basics/tagged_integer.h)" > include/xrpl/basics/tagged_integer.h # cspell: ignore Nikolaos Bougalis nikb fi if ! grep -q 'Ritchford' include/xrpl/beast/utility/Zero.h; then - echo -e "// Copyright (c) 2014, Tom Ritchford \n\n$(cat include/xrpl/beast/utility/Zero.h)" > include/xrpl/beast/utility/Zero.h # cspell: ignore Ritchford + echo -e "// Copyright (c) 2014, Tom Ritchford \n\n$(cat include/xrpl/beast/utility/Zero.h)" > include/xrpl/beast/utility/Zero.h # cspell: ignore Ritchford fi # Restore newlines and tabs in string literals in the affected file. diff --git a/.github/scripts/rename/definitions.sh b/.github/scripts/rename/definitions.sh index 403e5eab0d..5e004afe39 100755 --- a/.github/scripts/rename/definitions.sh +++ b/.github/scripts/rename/definitions.sh @@ -6,11 +6,11 @@ set -e # On MacOS, ensure that GNU sed is installed and available as `gsed`. SED_COMMAND=sed if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed fi # This script renames definitions, such as include guards, in this project. diff --git a/.github/scripts/rename/docs.sh b/.github/scripts/rename/docs.sh index 22d5e242d1..59cc5665bf 100755 --- a/.github/scripts/rename/docs.sh +++ b/.github/scripts/rename/docs.sh @@ -6,11 +6,11 @@ set -e # On MacOS, ensure that GNU sed is installed and available as `gsed`. SED_COMMAND=sed if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed fi # This script renames all remaining references to `ripple` and `rippled` to diff --git a/.github/scripts/rename/include.sh b/.github/scripts/rename/include.sh index fbf165b975..1f13e84c10 100755 --- a/.github/scripts/rename/include.sh +++ b/.github/scripts/rename/include.sh @@ -23,8 +23,8 @@ fi find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" \) | while read -r FILE; do echo "Processing file: ${FILE}" if grep -q "#ifndef XRPL_" "${FILE}"; then - echo "Please replace all include guards by #pragma once." - exit 1 + echo "Please replace all include guards by #pragma once." + exit 1 fi done echo "Checking complete." diff --git a/.github/scripts/rename/namespace.sh b/.github/scripts/rename/namespace.sh index 4dad55f7c7..aba193b0cf 100755 --- a/.github/scripts/rename/namespace.sh +++ b/.github/scripts/rename/namespace.sh @@ -6,11 +6,11 @@ set -e # On MacOS, ensure that GNU sed is installed and available as `gsed`. SED_COMMAND=sed if [[ "${OSTYPE}" == 'darwin'* ]]; then - if ! command -v gsed &> /dev/null; then - echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." - exit 1 - fi - SED_COMMAND=gsed + if ! command -v gsed &> /dev/null; then + echo "Error: gsed is not installed. Please install it using 'brew install gnu-sed'." + exit 1 + fi + SED_COMMAND=gsed fi # This script renames the `ripple` namespace to `xrpl` in this project. @@ -35,15 +35,15 @@ pushd "${DIRECTORY}" DIRECTORIES=("include" "src" "tests") for DIRECTORY in "${DIRECTORIES[@]}"; do - echo "Processing directory: ${DIRECTORY}" + echo "Processing directory: ${DIRECTORY}" - find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.macro" \) | while read -r FILE; do - echo "Processing file: ${FILE}" - ${SED_COMMAND} -i 's/namespace ripple/namespace xrpl/g' "${FILE}" - ${SED_COMMAND} -i 's/ripple::/xrpl::/g' "${FILE}" - ${SED_COMMAND} -i 's/"ripple:/"xrpl::/g' "${FILE}" - ${SED_COMMAND} -i -E 's/(BEAST_DEFINE_TESTSUITE.+)ripple(.+)/\1xrpl\2/g' "${FILE}" - done + find "${DIRECTORY}" -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.ipp" -o -name "*.cpp" -o -name "*.macro" \) | while read -r FILE; do + echo "Processing file: ${FILE}" + ${SED_COMMAND} -i 's/namespace ripple/namespace xrpl/g' "${FILE}" + ${SED_COMMAND} -i 's/ripple::/xrpl::/g' "${FILE}" + ${SED_COMMAND} -i 's/"ripple:/"xrpl::/g' "${FILE}" + ${SED_COMMAND} -i -E 's/(BEAST_DEFINE_TESTSUITE.+)ripple(.+)/\1xrpl\2/g' "${FILE}" + done done # Special case for NuDBFactory that has ripple twice in the test suite name. diff --git a/.github/workflows/check-pr-description.yml b/.github/workflows/check-pr-description.yml new file mode 100644 index 0000000000..f6eee50291 --- /dev/null +++ b/.github/workflows/check-pr-description.yml @@ -0,0 +1,30 @@ +name: Check PR description + +on: + merge_group: + types: + - checks_requested + pull_request: + types: [opened, edited, reopened, synchronize, ready_for_review] + branches: [develop] + +jobs: + check_description: + if: ${{ github.event.pull_request.draft != true }} + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Write PR body to file + env: + PR_BODY: ${{ github.event.pull_request.body }} + if: ${{ github.event_name == 'pull_request' }} + run: printenv PR_BODY > pr_body.md + + - name: Check PR description differs from template + if: ${{ github.event_name == 'pull_request' }} + run: > + python .github/scripts/check-pr-description.py + --template-file .github/pull_request_template.md + --pr-body-file pr_body.md diff --git a/.github/workflows/on-pr.yml b/.github/workflows/on-pr.yml index 66893d19d3..28299a1264 100644 --- a/.github/workflows/on-pr.yml +++ b/.github/workflows/on-pr.yml @@ -46,7 +46,7 @@ jobs: # that Github considers any skipped jobs to have passed, and in # turn the required checks as well. id: changes - uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 + uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 with: files: | # These paths are unique to `on-pr.yml`. diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index 48832cb079..d619be5543 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -82,7 +82,7 @@ jobs: - name: Create documentation artifact if: ${{ github.event.repository.visibility == 'public' && github.event_name == 'push' }} - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0 + uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0 with: path: ${{ env.BUILD_DIR }}/docs/html diff --git a/.github/workflows/reusable-build-test-config.yml b/.github/workflows/reusable-build-test-config.yml index 57112ed96a..abbec1ceb4 100644 --- a/.github/workflows/reusable-build-test-config.yml +++ b/.github/workflows/reusable-build-test-config.yml @@ -153,6 +153,32 @@ jobs: ${CMAKE_ARGS} \ .. + - name: Check protocol autogen files are up-to-date + working-directory: ${{ env.BUILD_DIR }} + env: + MESSAGE: | + + The generated protocol wrapper classes are out of date. + + This typically happens when the macro files or generator scripts + have changed but the generated files were not regenerated. + + To fix this: + 1. Run: cmake --build . --target setup_code_gen + 2. Run: cmake --build . --target code_gen + 3. Commit and push the regenerated files + run: | + set -e + cmake --build . --target setup_code_gen + cmake --build . --target code_gen + DIFF=$(git -C .. status --porcelain -- include/xrpl/protocol_autogen src/tests/libxrpl/protocol_autogen) + if [ -n "${DIFF}" ]; then + echo "::error::Generated protocol files are out of date" + git -C .. diff -- include/xrpl/protocol_autogen src/tests/libxrpl/protocol_autogen + echo "${MESSAGE}" + exit 1 + fi + - name: Build the binary working-directory: ${{ env.BUILD_DIR }} env: @@ -166,29 +192,6 @@ jobs: --parallel "${BUILD_NPROC}" \ --target "${CMAKE_TARGET}" - - name: Check protocol autogen files are up-to-date - env: - MESSAGE: | - - The generated protocol wrapper classes are out of date. - - This typically happens when your branch is behind develop and - the macro files or generator scripts have changed. - - To fix this: - 1. Update your branch from develop (merge or rebase) - 2. Build with code generation enabled (XRPL_NO_CODEGEN=OFF) - 3. Commit and push the regenerated files - run: | - set -e - DIFF=$(git status --porcelain -- include/xrpl/protocol_autogen src/tests/libxrpl/protocol_autogen) - if [ -n "${DIFF}" ]; then - echo "::error::Generated protocol files are out of date" - git diff -- include/xrpl/protocol_autogen src/tests/libxrpl/protocol_autogen - echo "${MESSAGE}" - exit 1 - fi - - name: Show ccache statistics if: ${{ inputs.ccache_enabled }} run: | @@ -200,7 +203,7 @@ jobs: - name: Upload the binary (Linux) if: ${{ github.event.repository.visibility == 'public' && runner.os == 'Linux' }} - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: xrpld-${{ inputs.config_name }} path: ${{ env.BUILD_DIR }}/xrpld diff --git a/.github/workflows/reusable-clang-tidy-files.yml b/.github/workflows/reusable-clang-tidy-files.yml index a64a773c86..9b99f418b1 100644 --- a/.github/workflows/reusable-clang-tidy-files.yml +++ b/.github/workflows/reusable-clang-tidy-files.yml @@ -80,18 +80,31 @@ jobs: env: TARGETS: ${{ inputs.files != '' && inputs.files || 'src tests' }} run: | - run-clang-tidy -j ${{ steps.nproc.outputs.nproc }} -p "${BUILD_DIR}" -quiet -allow-no-checks ${TARGETS} 2>&1 | tee clang-tidy-output.txt + run-clang-tidy -j ${{ steps.nproc.outputs.nproc }} -p "${BUILD_DIR}" -quiet -fix -allow-no-checks ${TARGETS} 2>&1 | tee clang-tidy-output.txt - name: Upload clang-tidy output if: ${{ github.event.repository.visibility == 'public' && steps.run_clang_tidy.outcome != 'success' }} - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: clang-tidy-results path: clang-tidy-output.txt retention-days: 30 + - name: Generate git diff + if: ${{ steps.run_clang_tidy.outcome != 'success' }} + run: | + git diff | tee clang-tidy-git-diff.txt + + - name: Upload clang-tidy diff output + if: ${{ github.event.repository.visibility == 'public' && steps.run_clang_tidy.outcome != 'success' }} + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: clang-tidy-git-diff + path: clang-tidy-git-diff.txt + retention-days: 30 + - name: Create an issue - if: steps.run_clang_tidy.outcome != 'success' && inputs.create_issue_on_failure + if: ${{ steps.run_clang_tidy.outcome != 'success' && inputs.create_issue_on_failure }} id: create_issue shell: bash env: @@ -156,7 +169,7 @@ jobs: rm -f create_issue.log issue.md clang-tidy-output.txt - name: Fail the workflow if clang-tidy failed - if: steps.run_clang_tidy.outcome != 'success' + if: ${{ steps.run_clang_tidy.outcome != 'success' }} run: | echo "Clang-tidy check failed!" exit 1 diff --git a/.github/workflows/reusable-clang-tidy.yml b/.github/workflows/reusable-clang-tidy.yml index 4c927dec9f..7a8bf6de57 100644 --- a/.github/workflows/reusable-clang-tidy.yml +++ b/.github/workflows/reusable-clang-tidy.yml @@ -31,7 +31,7 @@ jobs: - name: Get changed C++ files id: changed_files - uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 + uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 with: files: | **/*.cpp @@ -41,7 +41,7 @@ jobs: - name: Get changed clang-tidy configuration id: changed_clang_tidy - uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 + uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 with: files: | .clang-tidy diff --git a/.gitignore b/.gitignore index 7ee6d0c70a..6bd34ece04 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ Debug/ Release/ /.build/ +/.venv/ /build/ /db/ /out.txt diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 59d42ccebc..232e6ca5a3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,7 +17,6 @@ repos: args: [--maxkb=400, --enforce-all] - id: trailing-whitespace - id: end-of-file-fixer - - id: mixed-line-ending - id: check-merge-conflict args: [--assume-in-merge] @@ -38,12 +37,19 @@ repos: rev: c2bc67fe8f8f549cc489e00ba8b45aa18ee713b1 # frozen: v3.8.1 hooks: - id: prettier + args: [--end-of-line=auto] - repo: https://github.com/psf/black-pre-commit-mirror rev: ea488cebbfd88a5f50b8bd95d5c829d0bb76feb8 # frozen: 26.1.0 hooks: - id: black + - repo: https://github.com/openstack/bashate + rev: 5798d24d571676fc407e81df574c1ef57b520f23 # frozen: 2.1.1 + hooks: + - id: bashate + args: ["--ignore=E006"] + - repo: https://github.com/streetsidesoftware/cspell-cli rev: a42085ade523f591dca134379a595e7859986445 # frozen: v9.7.0 hooks: @@ -61,6 +67,14 @@ repos: - repo: local hooks: + - id: clang-tidy + name: "clang-tidy (enable with: TIDY=1)" + entry: ./bin/pre-commit/clang_tidy_check.py + language: python + types_or: [c++, c] + exclude: ^include/xrpl/protocol_autogen + pass_filenames: false # script determines the staged files itself + - id: nix-fmt name: Format Nix files entry: | diff --git a/BUILD.md b/BUILD.md index 7406d60949..cf0a685abd 100644 --- a/BUILD.md +++ b/BUILD.md @@ -459,6 +459,21 @@ install ccache --version 4.11.3 --allow-downgrade`. The location of `xrpld` binary in your build directory depends on your CMake generator. Pass `--help` to see the rest of the command line options. +## Code generation + +The protocol wrapper classes in `include/xrpl/protocol_autogen/` are generated +from macro definition files in `include/xrpl/protocol/detail/`. If you modify +the macro files (e.g. `transactions.macro`, `ledger_entries.macro`) or the +generation scripts/templates in `cmake/scripts/codegen/`, you need to regenerate the +files: + +``` +cmake --build . --target setup_code_gen # create venv and install dependencies (once) +cmake --build . --target code_gen # regenerate code +``` + +The regenerated files should be committed alongside your changes. + ## Coverage report The coverage report is intended for developers using compilers GCC diff --git a/CMakeLists.txt b/CMakeLists.txt index fa17892e37..84a4b29108 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,6 +134,7 @@ if(coverage) endif() include(XrplCore) +include(XrplProtocolAutogen) include(XrplInstall) include(XrplValidatorKeys) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0589081055..56d3b48057 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -267,6 +267,26 @@ See the [environment setup guide](./docs/build/environment.md#clang-tidy) for pl Before running clang-tidy, you must build the project to generate required files (particularly protobuf headers). Refer to [`BUILD.md`](./BUILD.md) for build instructions. +#### Via pre-commit (recommended) + +If you have already installed the pre-commit hooks (see above), you can run clang-tidy on your staged files using: + +``` +TIDY=1 pre-commit run clang-tidy +``` + +This runs clang-tidy locally with the same configuration/flags as CI, scoped to your staged C++ files. The `TIDY=1` environment variable is required to opt in — without it the hook is skipped. + +You can also have clang-tidy run automatically on every `git commit` by setting `TIDY=1` in your shell environment: + +``` +export TIDY=1 +``` + +With this set, the hook will run as part of `git commit` alongside the other pre-commit checks. + +#### Manually + Then run clang-tidy on your local changes: ``` diff --git a/bin/git/setup-upstreams.sh b/bin/git/setup-upstreams.sh index 61d8171569..57c3f935f9 100755 --- a/bin/git/setup-upstreams.sh +++ b/bin/git/setup-upstreams.sh @@ -1,14 +1,13 @@ #!/bin/bash -if [[ $# -ne 1 || "$1" == "--help" || "$1" == "-h" ]] -then - name=$( basename $0 ) - cat <<- USAGE - Usage: $name +if [[ $# -ne 1 || "$1" == "--help" || "$1" == "-h" ]]; then + name=$( basename $0 ) + cat <<- USAGE + Usage: $name - Where is the Github username of the upstream repo. e.g. XRPLF + Where is the Github username of the upstream repo. e.g. XRPLF USAGE - exit 0 + exit 0 fi # Create upstream remotes based on origin @@ -16,10 +15,9 @@ shift user="$1" # Get the origin URL. Expect it be an SSH-style URL origin=$( git remote get-url origin ) -if [[ "${origin}" == "" ]] -then - echo Invalid origin remote >&2 - exit 1 +if [[ "${origin}" == "" ]]; then + echo Invalid origin remote >&2 + exit 1 fi # echo "Origin: ${origin}" # Parse the origin @@ -30,11 +28,9 @@ IFS='@' read sshuser server <<< "${remote}" # echo "SSHUser: ${sshuser}, Server: ${server}" IFS='/' read originuser repo <<< "${originpath}" # echo "Originuser: ${originuser}, Repo: ${repo}" -if [[ "${sshuser}" == "" || "${server}" == "" || "${originuser}" == "" - || "${repo}" == "" ]] -then - echo "Can't parse origin URL: ${origin}" >&2 - exit 1 +if [[ "${sshuser}" == "" || "${server}" == "" || "${originuser}" == "" || "${repo}" == "" ]]; then + echo "Can't parse origin URL: ${origin}" >&2 + exit 1 fi upstream="https://${server}/${user}/${repo}" upstreampush="${remote}:${user}/${repo}" @@ -42,42 +38,34 @@ upstreamgroup="upstream upstream-push" current=$( git remote get-url upstream 2>/dev/null ) currentpush=$( git remote get-url upstream-push 2>/dev/null ) currentgroup=$( git config remotes.upstreams ) -if [[ "${current}" == "${upstream}" ]] -then - echo "Upstream already set up correctly. Skip" -elif [[ -n "${current}" && "${current}" != "${upstream}" && - "${current}" != "${upstreampush}" ]] -then - echo "Upstream already set up as: ${current}. Skip" +if [[ "${current}" == "${upstream}" ]]; then + echo "Upstream already set up correctly. Skip" +elif [[ -n "${current}" && "${current}" != "${upstream}" && "${current}" != "${upstreampush}" ]]; then + echo "Upstream already set up as: ${current}. Skip" else - if [[ "${current}" == "${upstreampush}" ]] - then - echo "Upstream set to dangerous push URL. Update." - _run git remote rename upstream upstream-push || \ - _run git remote remove upstream - currentpush=$( git remote get-url upstream-push 2>/dev/null ) - fi - _run git remote add upstream "${upstream}" + if [[ "${current}" == "${upstreampush}" ]]; then + echo "Upstream set to dangerous push URL. Update." + _run git remote rename upstream upstream-push || \ + _run git remote remove upstream + currentpush=$( git remote get-url upstream-push 2>/dev/null ) + fi + _run git remote add upstream "${upstream}" fi -if [[ "${currentpush}" == "${upstreampush}" ]] -then - echo "upstream-push already set up correctly. Skip" -elif [[ -n "${currentpush}" && "${currentpush}" != "${upstreampush}" ]] -then - echo "upstream-push already set up as: ${currentpush}. Skip" +if [[ "${currentpush}" == "${upstreampush}" ]]; then + echo "upstream-push already set up correctly. Skip" +elif [[ -n "${currentpush}" && "${currentpush}" != "${upstreampush}" ]]; then + echo "upstream-push already set up as: ${currentpush}. Skip" else - _run git remote add upstream-push "${upstreampush}" + _run git remote add upstream-push "${upstreampush}" fi -if [[ "${currentgroup}" == "${upstreamgroup}" ]] -then - echo "Upstreams group already set up correctly. Skip" -elif [[ -n "${currentgroup}" && "${currentgroup}" != "${upstreamgroup}" ]] -then - echo "Upstreams group already set up as: ${currentgroup}. Skip" +if [[ "${currentgroup}" == "${upstreamgroup}" ]]; then + echo "Upstreams group already set up correctly. Skip" +elif [[ -n "${currentgroup}" && "${currentgroup}" != "${upstreamgroup}" ]]; then + echo "Upstreams group already set up as: ${currentgroup}. Skip" else - _run git config --add remotes.upstreams "${upstreamgroup}" + _run git config --add remotes.upstreams "${upstreamgroup}" fi _run git fetch --jobs=$(nproc) upstreams diff --git a/bin/git/squash-branches.sh b/bin/git/squash-branches.sh index 4dcbf5aaa1..eb4aefe23c 100755 --- a/bin/git/squash-branches.sh +++ b/bin/git/squash-branches.sh @@ -1,17 +1,16 @@ #!/bin/bash -if [[ $# -lt 3 || "$1" == "--help" || "$1" = "-h" ]] -then - name=$( basename $0 ) - cat <<- USAGE - Usage: $name workbranch base/branch user/branch [user/branch [...]] +if [[ $# -lt 3 || "$1" == "--help" || "$1" = "-h" ]]; then + name=$( basename $0 ) + cat <<- USAGE + Usage: $name workbranch base/branch user/branch [user/branch [...]] - * workbranch will be created locally from base/branch - * base/branch and user/branch may be specified as user:branch to allow - easy copying from Github PRs - * Remotes for each user must already be set up + * workbranch will be created locally from base/branch + * base/branch and user/branch may be specified as user:branch to allow + easy copying from Github PRs + * Remotes for each user must already be set up USAGE -exit 0 + exit 0 fi work="$1" @@ -24,9 +23,8 @@ unset branches[0] set -e users=() -for b in "${branches[@]}" -do - users+=( $( echo $b | cut -d/ -f1 ) ) +for b in "${branches[@]}"; do + users+=( $( echo $b | cut -d/ -f1 ) ) done users=( $( printf '%s\n' "${users[@]}" | sort -u ) ) @@ -34,10 +32,9 @@ users=( $( printf '%s\n' "${users[@]}" | sort -u ) ) git fetch --multiple upstreams "${users[@]}" git checkout -B "$work" --no-track "$base" -for b in "${branches[@]}" -do - git merge --squash "${b}" - git commit -S # Use the commit message provided on the PR +for b in "${branches[@]}"; do + git merge --squash "${b}" + git commit -S # Use the commit message provided on the PR done # Make sure the commits look right @@ -47,13 +44,11 @@ parts=( $( echo $base | sed "s/\// /" ) ) repo="${parts[0]}" b="${parts[1]}" push=$repo -if [[ "$push" == "upstream" ]] -then - push="upstream-push" +if [[ "$push" == "upstream" ]]; then + push="upstream-push" fi -if [[ "$repo" == "upstream" ]] -then - repo="upstreams" +if [[ "$repo" == "upstream" ]]; then + repo="upstreams" fi cat << PUSH diff --git a/bin/git/update-version.sh b/bin/git/update-version.sh index c901a29e6a..f74b40ddf0 100755 --- a/bin/git/update-version.sh +++ b/bin/git/update-version.sh @@ -1,17 +1,16 @@ #!/bin/bash -if [[ $# -ne 3 || "$1" == "--help" || "$1" = "-h" ]] -then - name=$( basename $0 ) - cat <<- USAGE - Usage: $name workbranch base/branch version +if [[ $# -ne 3 || "$1" == "--help" || "$1" = "-h" ]]; then + name=$( basename $0 ) + cat <<- USAGE + Usage: $name workbranch base/branch version - * workbranch will be created locally from base/branch. If it exists, - it will be reused, so make sure you don't overwrite any work. - * base/branch may be specified as user:branch to allow easy copying - from Github PRs. + * workbranch will be created locally from base/branch. If it exists, + it will be reused, so make sure you don't overwrite any work. + * base/branch may be specified as user:branch to allow easy copying + from Github PRs. USAGE -exit 0 + exit 0 fi work="$1" @@ -30,10 +29,9 @@ git fetch upstreams git checkout -B "${work}" --no-track "${base}" push=$( git rev-parse --abbrev-ref --symbolic-full-name '@{push}' \ - 2>/dev/null ) || true -if [[ "${push}" != "" ]] -then - echo "Warning: ${push} may already exist." + 2>/dev/null ) || true +if [[ "${push}" != "" ]]; then + echo "Warning: ${push} may already exist." fi build=$( find -name BuildInfo.cpp ) diff --git a/bin/pre-commit/clang_tidy_check.py b/bin/pre-commit/clang_tidy_check.py new file mode 100755 index 0000000000..7fb51d1c46 --- /dev/null +++ b/bin/pre-commit/clang_tidy_check.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +"""Pre-commit hook that runs clang-tidy on changed files using run-clang-tidy.""" + +from __future__ import annotations + +import json +import os +import re +import shutil +import subprocess +import sys +from collections import defaultdict +from pathlib import Path + +HEADER_EXTENSIONS = {".h", ".hpp", ".ipp"} +SOURCE_EXTENSIONS = {".cpp"} +INCLUDE_RE = re.compile(r"^\s*#\s*include\s*[<\"]([^>\"]+)[>\"]") + + +def find_run_clang_tidy() -> str | None: + for candidate in ("run-clang-tidy-21", "run-clang-tidy"): + if path := shutil.which(candidate): + return path + return None + + +def find_build_dir(repo_root: Path) -> Path | None: + for name in (".build", "build"): + candidate = repo_root / name + if (candidate / "compile_commands.json").exists(): + return candidate + return None + + +def build_include_graph(build_dir: Path, repo_root: Path) -> tuple[dict, set]: + """ + Scan all files reachable from compile_commands.json and build an inverted include graph. + + Returns: + inverted: header_path -> set of files that include it + source_files: set of all TU paths from compile_commands.json + """ + with open(build_dir / "compile_commands.json") as f: + db = json.load(f) + + source_files = {Path(e["file"]).resolve() for e in db} + include_roots = [repo_root / "include", repo_root / "src"] + inverted: dict[Path, set[Path]] = defaultdict(set) + + to_scan: set[Path] = set(source_files) + scanned: set[Path] = set() + + while to_scan: + file = to_scan.pop() + if file in scanned or not file.exists(): + continue + scanned.add(file) + + content = file.read_text() + + for line in content.splitlines(): + m = INCLUDE_RE.match(line) + if not m: + continue + for root in include_roots: + candidate = (root / m.group(1)).resolve() + if candidate.exists(): + inverted[candidate].add(file) + if candidate not in scanned: + to_scan.add(candidate) + break + + return inverted, source_files + + +def find_tus_for_headers( + headers: list[Path], + inverted: dict[Path, set[Path]], + source_files: set[Path], +) -> set[Path]: + """ + For each header, pick one TU that transitively includes it. + Prefers a TU whose stem matches the header's stem, otherwise picks the first found. + """ + result: set[Path] = set() + + for header in headers: + preferred: Path | None = None + visited: set[Path] = {header} + stack: list[Path] = [header] + + while stack: + h = stack.pop() + for inc in inverted.get(h, ()): + if inc in source_files: + if inc.stem == header.stem: + preferred = inc + break + if preferred is None: + preferred = inc + if inc not in visited: + visited.add(inc) + stack.append(inc) + if preferred is not None and preferred.stem == header.stem: + break + + if preferred is not None: + result.add(preferred) + + return result + + +def resolve_files( + input_files: list[str], build_dir: Path, repo_root: Path +) -> list[str]: + """ + Split input into source files and headers. Source files are passed through; + headers are resolved to the TUs that transitively include them. + """ + sources: list[Path] = [] + headers: list[Path] = [] + + for f in input_files: + p = Path(f).resolve() + if p.suffix in SOURCE_EXTENSIONS: + sources.append(p) + elif p.suffix in HEADER_EXTENSIONS: + headers.append(p) + + if not headers: + return [str(p) for p in sources] + + print( + f"Resolving {len(headers)} header(s) to compilation units...", file=sys.stderr + ) + inverted, source_files = build_include_graph(build_dir, repo_root) + tus = find_tus_for_headers(headers, inverted, source_files) + + if not tus: + print( + "Warning: no compilation units found that include the modified headers; " + "skipping clang-tidy for headers.", + file=sys.stderr, + ) + + return sorted({str(p) for p in (*sources, *tus)}) + + +def staged_files(repo_root: Path) -> list[str]: + result = subprocess.run( + ["git", "diff", "--staged", "--name-only", "--diff-filter=d"], + capture_output=True, + text=True, + cwd=repo_root, + ) + if result.returncode != 0: + print( + "clang-tidy check failed: 'git diff --staged' command failed.", + file=sys.stderr, + ) + if result.stderr: + print(result.stderr, file=sys.stderr) + sys.exit(result.returncode or 1) + return [str(repo_root / p) for p in result.stdout.splitlines() if p] + + +def main(): + if not os.environ.get("TIDY"): + return 0 + + repo_root = Path(__file__).parent.parent + files = staged_files(repo_root) + if not files: + return 0 + + run_clang_tidy = find_run_clang_tidy() + if not run_clang_tidy: + print( + "clang-tidy check failed: TIDY is enabled but neither " + "'run-clang-tidy-21' nor 'run-clang-tidy' was found in PATH.", + file=sys.stderr, + ) + return 1 + + build_dir = find_build_dir(repo_root) + if not build_dir: + print( + "clang-tidy check failed: no build directory with compile_commands.json found " + "(looked for .build/ and build/)", + file=sys.stderr, + ) + return 1 + + tidy_files = resolve_files(files, build_dir, repo_root) + if not tidy_files: + return 0 + + result = subprocess.run( + [run_clang_tidy, "-quiet", "-p", str(build_dir), "-fix", "-allow-no-checks"] + + tidy_files + ) + return result.returncode + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/cfg/xrpld-example.cfg b/cfg/xrpld-example.cfg index 6d65824fb9..4b17bf0500 100644 --- a/cfg/xrpld-example.cfg +++ b/cfg/xrpld-example.cfg @@ -1416,6 +1416,12 @@ # in this section to a comma-separated list of the addresses # of your Clio servers, in order to bypass xrpld's rate limiting. # +# TLS/SSL can be enabled for gRPC by specifying ssl_cert and ssl_key. +# Both parameters must be provided together. The ssl_cert_chain parameter +# is optional and provides intermediate CA certificates for the certificate +# chain. The ssl_client_ca parameter is optional and enables mutual TLS +# (client certificate verification). +# # This port is commented out but can be enabled by removing # the '#' from each corresponding line including the entry under [server] # @@ -1465,11 +1471,74 @@ admin = 127.0.0.1 protocol = ws send_queue_limit = 500 +# gRPC TLS/SSL Configuration +# +# The gRPC port supports optional TLS/SSL encryption. When TLS is not +# configured, the gRPC server will accept unencrypted connections. +# +# ssl_cert = +# ssl_key = +# +# To enable TLS for gRPC, both ssl_cert and ssl_key must be specified. +# If only one is provided, xrpld will fail to start. +# +# ssl_cert: Path to the server's SSL certificate file in PEM format. +# ssl_key: Path to the server's SSL private key file in PEM format. +# +# When configured, the gRPC server will only accept TLS-encrypted +# connections. Clients must use TLS (secure) channel credentials rather +# than plaintext / insecure connections. +# +# ssl_cert_chain = +# +# Optional. Path to intermediate CA certificate(s) in PEM format that +# complete the server's certificate chain. +# +# This file should contain the intermediate CA certificate(s) needed +# to build a trust chain from the server certificate (ssl_cert) to a +# root CA that clients trust. Multiple certificates should be +# concatenated in PEM format. +# +# This is needed when your server certificate was signed by an +# intermediate CA rather than directly by a root CA. Without this, +# clients may fail to verify your server certificate. +# +# If not specified, only the server certificate from ssl_cert will be +# presented to clients. +# +# ssl_client_ca = +# +# Optional. Path to a CA certificate file in PEM format for verifying +# client certificates (mutual TLS / mTLS). +# +# When specified, the gRPC server will verify client certificates +# against this CA. This enables mutual authentication where both the +# server and client verify each other's identity. +# +# This is typically NOT needed for public-facing gRPC servers. Only +# use this if you want to restrict access to clients with valid +# certificates signed by the specified CA. +# +# If not specified, the server will use one-way TLS (server +# authentication only) and will accept connections from any client. +# [port_grpc] port = 50051 ip = 127.0.0.1 secure_gateway = 127.0.0.1 +# Optional TLS/SSL configuration for gRPC +# To enable TLS, uncomment and configure both ssl_cert and ssl_key: +#ssl_cert = /etc/ssl/certs/grpc-server.crt +#ssl_key = /etc/ssl/private/grpc-server.key + +# Optional: Include intermediate CA certificates for complete certificate chain +#ssl_cert_chain = /etc/ssl/certs/grpc-intermediate-ca.crt + +# Optional: Enable mutual TLS (client certificate verification) +# Uncomment to require and verify client certificates: +#ssl_client_ca = /etc/ssl/certs/grpc-client-ca.crt + #[port_ws_public] #port = 6005 #ip = 127.0.0.1 diff --git a/cmake/XrplCore.cmake b/cmake/XrplCore.cmake index a50e30f660..9b1dc74049 100644 --- a/cmake/XrplCore.cmake +++ b/cmake/XrplCore.cmake @@ -108,24 +108,12 @@ target_link_libraries( ) # Level 05 -## Set up code generation for protocol_autogen module -include(XrplProtocolAutogen) -# Must call setup_protocol_autogen before add_module so that: -# 1. Stale generated files are cleared before GLOB runs -# 2. Output file list is known for custom commands -setup_protocol_autogen() - add_module(xrpl protocol_autogen) target_link_libraries( xrpl.libxrpl.protocol_autogen PUBLIC xrpl.libxrpl.protocol ) -# Ensure code generation runs before compiling protocol_autogen -if(TARGET protocol_autogen_generate) - add_dependencies(xrpl.libxrpl.protocol_autogen protocol_autogen_generate) -endif() - # Level 06 add_module(xrpl core) target_link_libraries( diff --git a/cmake/XrplProtocolAutogen.cmake b/cmake/XrplProtocolAutogen.cmake index e48d28959d..dd9ef6a9a4 100644 --- a/cmake/XrplProtocolAutogen.cmake +++ b/cmake/XrplProtocolAutogen.cmake @@ -2,308 +2,145 @@ Protocol Autogen - Code generation for protocol wrapper classes #]===================================================================] -# Options for code generation -option( - XRPL_NO_CODEGEN - "Disable code generation (use pre-generated files from repository)" - OFF -) set(CODEGEN_VENV_DIR - "" + "${CMAKE_CURRENT_SOURCE_DIR}/.venv" CACHE PATH - "Path to Python virtual environment for code generation. If provided, automatic venv setup is skipped." + "Path to a Python virtual environment for code generation. A venv will be created here by setup_code_gen and used to run generation scripts." ) -# Function to set up code generation for protocol_autogen module -# This runs at configure time to generate C++ wrapper classes from macro files -function(setup_protocol_autogen) - # Directory paths - set(MACRO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/xrpl/protocol/detail") - set(AUTOGEN_HEADER_DIR - "${CMAKE_CURRENT_SOURCE_DIR}/include/xrpl/protocol_autogen" - ) - set(AUTOGEN_TEST_DIR - "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/libxrpl/protocol_autogen" - ) - set(SCRIPTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/scripts") +# Directory paths +set(MACRO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/xrpl/protocol/detail") +set(AUTOGEN_HEADER_DIR + "${CMAKE_CURRENT_SOURCE_DIR}/include/xrpl/protocol_autogen" +) +set(AUTOGEN_TEST_DIR + "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/libxrpl/protocol_autogen" +) +set(SCRIPTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake/scripts/codegen") - # Input macro files - set(TRANSACTIONS_MACRO "${MACRO_DIR}/transactions.macro") - set(LEDGER_ENTRIES_MACRO "${MACRO_DIR}/ledger_entries.macro") - set(SFIELDS_MACRO "${MACRO_DIR}/sfields.macro") +# Input macro files +set(TRANSACTIONS_MACRO "${MACRO_DIR}/transactions.macro") +set(LEDGER_ENTRIES_MACRO "${MACRO_DIR}/ledger_entries.macro") +set(SFIELDS_MACRO "${MACRO_DIR}/sfields.macro") - # Python scripts and templates - set(GENERATE_TX_SCRIPT "${SCRIPTS_DIR}/generate_tx_classes.py") - set(GENERATE_LEDGER_SCRIPT "${SCRIPTS_DIR}/generate_ledger_classes.py") - set(REQUIREMENTS_FILE "${SCRIPTS_DIR}/requirements.txt") - set(MACRO_PARSER_COMMON "${SCRIPTS_DIR}/macro_parser_common.py") - set(TX_TEMPLATE "${SCRIPTS_DIR}/templates/Transaction.h.mako") - set(TX_TEST_TEMPLATE "${SCRIPTS_DIR}/templates/TransactionTests.cpp.mako") - set(LEDGER_TEMPLATE "${SCRIPTS_DIR}/templates/LedgerEntry.h.mako") - set(LEDGER_TEST_TEMPLATE - "${SCRIPTS_DIR}/templates/LedgerEntryTests.cpp.mako" +# Python scripts and templates +set(GENERATE_TX_SCRIPT "${SCRIPTS_DIR}/generate_tx_classes.py") +set(GENERATE_LEDGER_SCRIPT "${SCRIPTS_DIR}/generate_ledger_classes.py") +set(REQUIREMENTS_FILE "${SCRIPTS_DIR}/requirements.txt") +set(MACRO_PARSER_COMMON "${SCRIPTS_DIR}/macro_parser_common.py") +set(TX_TEMPLATE "${SCRIPTS_DIR}/templates/Transaction.h.mako") +set(TX_TEST_TEMPLATE "${SCRIPTS_DIR}/templates/TransactionTests.cpp.mako") +set(LEDGER_TEMPLATE "${SCRIPTS_DIR}/templates/LedgerEntry.h.mako") +set(LEDGER_TEST_TEMPLATE "${SCRIPTS_DIR}/templates/LedgerEntryTests.cpp.mako") +set(ALL_INPUT_FILES + "${TRANSACTIONS_MACRO}" + "${LEDGER_ENTRIES_MACRO}" + "${SFIELDS_MACRO}" + "${GENERATE_TX_SCRIPT}" + "${GENERATE_LEDGER_SCRIPT}" + "${REQUIREMENTS_FILE}" + "${MACRO_PARSER_COMMON}" + "${TX_TEMPLATE}" + "${TX_TEST_TEMPLATE}" + "${LEDGER_TEMPLATE}" + "${LEDGER_TEST_TEMPLATE}" +) + +# Create output directories +file(MAKE_DIRECTORY "${AUTOGEN_HEADER_DIR}/transactions") +file(MAKE_DIRECTORY "${AUTOGEN_HEADER_DIR}/ledger_entries") +file(MAKE_DIRECTORY "${AUTOGEN_TEST_DIR}/ledger_entries") +file(MAKE_DIRECTORY "${AUTOGEN_TEST_DIR}/transactions") + +# Find Python3 +if(NOT Python3_EXECUTABLE) + find_package(Python3 COMPONENTS Interpreter QUIET) +endif() + +if(NOT Python3_EXECUTABLE) + find_program(Python3_EXECUTABLE NAMES python3 python) +endif() + +if(NOT Python3_EXECUTABLE) + message( + WARNING + "Python3 not found. The 'code_gen' and 'setup_code_gen' targets will not be available." ) + return() +endif() - # Check if code generation is disabled - if(XRPL_NO_CODEGEN) +# Warn if pip is configured with a non-default index (may need VPN). +execute_process( + COMMAND ${Python3_EXECUTABLE} -m pip config get global.index-url + OUTPUT_VARIABLE PIP_INDEX_URL + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + RESULT_VARIABLE PIP_CONFIG_RESULT +) +if(PIP_CONFIG_RESULT EQUAL 0 AND PIP_INDEX_URL) + if( + NOT PIP_INDEX_URL STREQUAL "https://pypi.org/simple" + AND NOT PIP_INDEX_URL STREQUAL "https://pypi.python.org/simple" + ) message( WARNING - "Protocol autogen: Code generation is disabled (XRPL_NO_CODEGEN=ON). " - "Generated files may be out of date." + "Private pip index URL detected: ${PIP_INDEX_URL}\n" + "You may need to connect to VPN to access this URL." ) - return() endif() +endif() - # Create output directories - file(MAKE_DIRECTORY "${AUTOGEN_HEADER_DIR}/transactions") - file(MAKE_DIRECTORY "${AUTOGEN_HEADER_DIR}/ledger_entries") - file(MAKE_DIRECTORY "${AUTOGEN_TEST_DIR}/ledger_entries") - file(MAKE_DIRECTORY "${AUTOGEN_TEST_DIR}/transactions") - - # Find Python3 - check if already found by Conan or find it ourselves - if(NOT Python3_EXECUTABLE) - find_package(Python3 COMPONENTS Interpreter QUIET) - endif() - - if(NOT Python3_EXECUTABLE) - # Try finding python3 executable directly - find_program(Python3_EXECUTABLE NAMES python3 python) - endif() - - if(NOT Python3_EXECUTABLE) - message( - FATAL_ERROR - "Python3 not found. Code generation cannot proceed.\n" - "Please install Python 3, or set -DXRPL_NO_CODEGEN=ON to use existing generated files." - ) - return() - endif() - - message(STATUS "Using Python3 for code generation: ${Python3_EXECUTABLE}") - - # Set up Python virtual environment for code generation - if(CODEGEN_VENV_DIR) - # User-provided venv - skip automatic setup - set(VENV_DIR "${CODEGEN_VENV_DIR}") - message(STATUS "Using user-provided Python venv: ${VENV_DIR}") - else() - # Use default venv in build directory - set(VENV_DIR "${CMAKE_CURRENT_BINARY_DIR}/codegen_venv") - endif() - - # Determine the Python executable path in the venv +# Determine which Python interpreter to use for code generation. +if(CODEGEN_VENV_DIR) if(WIN32) - set(VENV_PYTHON "${VENV_DIR}/Scripts/python.exe") - set(VENV_PIP "${VENV_DIR}/Scripts/pip.exe") + set(CODEGEN_PYTHON "${CODEGEN_VENV_DIR}/Scripts/python.exe") else() - set(VENV_PYTHON "${VENV_DIR}/bin/python") - set(VENV_PIP "${VENV_DIR}/bin/pip") + set(CODEGEN_PYTHON "${CODEGEN_VENV_DIR}/bin/python") endif() - - # Only auto-setup venv if not user-provided - if(NOT CODEGEN_VENV_DIR) - # Check if venv needs to be created or updated - set(VENV_NEEDS_UPDATE FALSE) - if(NOT EXISTS "${VENV_PYTHON}") - set(VENV_NEEDS_UPDATE TRUE) - message( - STATUS - "Creating Python virtual environment for code generation..." - ) - elseif( - "${REQUIREMENTS_FILE}" - IS_NEWER_THAN - "${VENV_DIR}/.requirements_installed" - ) - set(VENV_NEEDS_UPDATE TRUE) - message( - STATUS - "Updating Python virtual environment (requirements changed)..." - ) - endif() - - # Create/update virtual environment if needed - if(VENV_NEEDS_UPDATE) - message( - STATUS - "Setting up Python virtual environment at ${VENV_DIR}" - ) - execute_process( - COMMAND ${Python3_EXECUTABLE} -m venv "${VENV_DIR}" - RESULT_VARIABLE VENV_RESULT - ERROR_VARIABLE VENV_ERROR - ) - if(NOT VENV_RESULT EQUAL 0) - message( - FATAL_ERROR - "Failed to create virtual environment: ${VENV_ERROR}" - ) - endif() - - # Check pip index URL configuration - execute_process( - COMMAND ${VENV_PIP} config get global.index-url - OUTPUT_VARIABLE PIP_INDEX_URL - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET - ) - - # Default PyPI URL - set(DEFAULT_PIP_INDEX "https://pypi.org/simple") - - # Show warning if using non-default index - if(PIP_INDEX_URL AND NOT PIP_INDEX_URL STREQUAL "") - if(NOT PIP_INDEX_URL STREQUAL DEFAULT_PIP_INDEX) - message( - WARNING - "Private pip index URL detected: ${PIP_INDEX_URL}\n" - "You may need to connect to VPN to access this URL." - ) - endif() - endif() - - message(STATUS "Installing Python dependencies...") - execute_process( - COMMAND ${VENV_PIP} install --upgrade pip - RESULT_VARIABLE PIP_UPGRADE_RESULT - OUTPUT_QUIET - ERROR_VARIABLE PIP_UPGRADE_ERROR - ) - if(NOT PIP_UPGRADE_RESULT EQUAL 0) - message(WARNING "Failed to upgrade pip: ${PIP_UPGRADE_ERROR}") - endif() - - execute_process( - COMMAND ${VENV_PIP} install -r "${REQUIREMENTS_FILE}" - RESULT_VARIABLE PIP_INSTALL_RESULT - ERROR_VARIABLE PIP_INSTALL_ERROR - ) - if(NOT PIP_INSTALL_RESULT EQUAL 0) - message( - FATAL_ERROR - "Failed to install Python dependencies: ${PIP_INSTALL_ERROR}" - ) - endif() - - # Mark requirements as installed - file(TOUCH "${VENV_DIR}/.requirements_installed") - message(STATUS "Python virtual environment ready") - endif() - endif() - - # At configure time - get list of output files for transactions - execute_process( - COMMAND - ${VENV_PYTHON} "${GENERATE_TX_SCRIPT}" "${TRANSACTIONS_MACRO}" - --header-dir "${AUTOGEN_HEADER_DIR}/transactions" --test-dir - "${AUTOGEN_TEST_DIR}/transactions" --list-outputs - OUTPUT_VARIABLE TX_OUTPUT_FILES - OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE TX_LIST_RESULT - ERROR_VARIABLE TX_LIST_ERROR +else() + set(CODEGEN_PYTHON "${Python3_EXECUTABLE}") + message( + WARNING + "CODEGEN_VENV_DIR is not set. Dependencies will be installed globally.\n" + "If this is not intended, reconfigure with:\n" + " cmake . -UCODEGEN_VENV_DIR" ) - if(NOT TX_LIST_RESULT EQUAL 0) - message( - FATAL_ERROR - "Failed to list transaction output files:\n${TX_LIST_ERROR}" - ) - endif() - # Convert newline-separated list to CMake list - string(REPLACE "\\" "/" TX_OUTPUT_FILES "${TX_OUTPUT_FILES}") - string(REPLACE "\n" ";" TX_OUTPUT_FILES "${TX_OUTPUT_FILES}") +endif() - # At configure time - get list of output files for ledger entries - execute_process( - COMMAND - ${VENV_PYTHON} "${GENERATE_LEDGER_SCRIPT}" "${LEDGER_ENTRIES_MACRO}" - --header-dir "${AUTOGEN_HEADER_DIR}/ledger_entries" --test-dir - "${AUTOGEN_TEST_DIR}/ledger_entries" --list-outputs - OUTPUT_VARIABLE LEDGER_OUTPUT_FILES - OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE LEDGER_LIST_RESULT - ERROR_VARIABLE LEDGER_LIST_ERROR - ) - if(NOT LEDGER_LIST_RESULT EQUAL 0) - message( - FATAL_ERROR - "Failed to list ledger entry output files:\n${LEDGER_LIST_ERROR}" - ) - endif() - # Convert newline-separated list to CMake list - string(REPLACE "\\" "/" LEDGER_OUTPUT_FILES "${LEDGER_OUTPUT_FILES}") - string(REPLACE "\n" ";" LEDGER_OUTPUT_FILES "${LEDGER_OUTPUT_FILES}") - - # Custom command to generate transaction classes at build time - add_custom_command( - OUTPUT ${TX_OUTPUT_FILES} - COMMAND - ${VENV_PYTHON} "${GENERATE_TX_SCRIPT}" "${TRANSACTIONS_MACRO}" - --header-dir "${AUTOGEN_HEADER_DIR}/transactions" --test-dir - "${AUTOGEN_TEST_DIR}/transactions" --sfields-macro - "${SFIELDS_MACRO}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - DEPENDS - "${TRANSACTIONS_MACRO}" - "${SFIELDS_MACRO}" - "${GENERATE_TX_SCRIPT}" - "${MACRO_PARSER_COMMON}" - "${TX_TEMPLATE}" - "${TX_TEST_TEMPLATE}" - "${REQUIREMENTS_FILE}" - COMMENT "Generating transaction classes from transactions.macro..." - VERBATIM - ) - - # Custom command to generate ledger entry classes at build time - add_custom_command( - OUTPUT ${LEDGER_OUTPUT_FILES} - COMMAND - ${VENV_PYTHON} "${GENERATE_LEDGER_SCRIPT}" "${LEDGER_ENTRIES_MACRO}" - --header-dir "${AUTOGEN_HEADER_DIR}/ledger_entries" --test-dir - "${AUTOGEN_TEST_DIR}/ledger_entries" --sfields-macro - "${SFIELDS_MACRO}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - DEPENDS - "${LEDGER_ENTRIES_MACRO}" - "${SFIELDS_MACRO}" - "${GENERATE_LEDGER_SCRIPT}" - "${MACRO_PARSER_COMMON}" - "${LEDGER_TEMPLATE}" - "${LEDGER_TEST_TEMPLATE}" - "${REQUIREMENTS_FILE}" - COMMENT "Generating ledger entry classes from ledger_entries.macro..." - VERBATIM - ) - - # Create a custom target that depends on all generated files +# Custom target to create a venv and install Python dependencies. +# Run manually with: cmake --build . --target setup_code_gen +if(CODEGEN_VENV_DIR) add_custom_target( - protocol_autogen_generate - DEPENDS ${TX_OUTPUT_FILES} ${LEDGER_OUTPUT_FILES} - COMMENT "Protocol autogen code generation" + setup_code_gen + COMMAND ${Python3_EXECUTABLE} -m venv "${CODEGEN_VENV_DIR}" + COMMAND ${CODEGEN_PYTHON} -m pip install -r "${REQUIREMENTS_FILE}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Creating venv and installing code generation dependencies..." ) +else() + add_custom_target( + setup_code_gen + COMMAND ${Python3_EXECUTABLE} -m pip install -r "${REQUIREMENTS_FILE}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Installing code generation dependencies..." + ) +endif() - # Extract test files from output lists (files ending in Tests.cpp) - set(PROTOCOL_AUTOGEN_TEST_SOURCES "") - foreach(FILE ${TX_OUTPUT_FILES} ${LEDGER_OUTPUT_FILES}) - if(FILE MATCHES "Tests\\.cpp$") - list(APPEND PROTOCOL_AUTOGEN_TEST_SOURCES "${FILE}") - endif() - endforeach() - # Export test sources to parent scope for use in test CMakeLists.txt - set(PROTOCOL_AUTOGEN_TEST_SOURCES - "${PROTOCOL_AUTOGEN_TEST_SOURCES}" - CACHE INTERNAL - "Generated protocol_autogen test sources" - ) - - # Register dependencies so CMake reconfigures when macro files change - # (to update the list of output files) - set_property( - DIRECTORY - APPEND - PROPERTY - CMAKE_CONFIGURE_DEPENDS - "${TRANSACTIONS_MACRO}" - "${LEDGER_ENTRIES_MACRO}" - ) -endfunction() +# Custom target for code generation, excluded from ALL. +# Run manually with: cmake --build . --target code_gen +add_custom_target( + code_gen + COMMAND + ${CMAKE_COMMAND} -DCODEGEN_PYTHON=${CODEGEN_PYTHON} + -DGENERATE_TX_SCRIPT=${GENERATE_TX_SCRIPT} + -DGENERATE_LEDGER_SCRIPT=${GENERATE_LEDGER_SCRIPT} + -DTRANSACTIONS_MACRO=${TRANSACTIONS_MACRO} + -DLEDGER_ENTRIES_MACRO=${LEDGER_ENTRIES_MACRO} + -DSFIELDS_MACRO=${SFIELDS_MACRO} + -DAUTOGEN_HEADER_DIR=${AUTOGEN_HEADER_DIR} + -DAUTOGEN_TEST_DIR=${AUTOGEN_TEST_DIR} -P + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/XrplProtocolAutogenRun.cmake" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Running protocol code generation..." + SOURCES ${ALL_INPUT_FILES} +) diff --git a/cmake/XrplProtocolAutogenRun.cmake b/cmake/XrplProtocolAutogenRun.cmake new file mode 100644 index 0000000000..8bdb37a8e0 --- /dev/null +++ b/cmake/XrplProtocolAutogenRun.cmake @@ -0,0 +1,39 @@ +#[===================================================================[ + Protocol Autogen - Run script invoked by the 'code_gen' target +#]===================================================================] + +# Generate transaction classes. +execute_process( + COMMAND + ${CODEGEN_PYTHON} "${GENERATE_TX_SCRIPT}" "${TRANSACTIONS_MACRO}" + --header-dir "${AUTOGEN_HEADER_DIR}/transactions" --test-dir + "${AUTOGEN_TEST_DIR}/transactions" --sfields-macro "${SFIELDS_MACRO}" + RESULT_VARIABLE TX_RESULT + OUTPUT_VARIABLE TX_OUTPUT + ERROR_VARIABLE TX_ERROR +) +if(NOT TX_RESULT EQUAL 0) + message( + FATAL_ERROR + "Transaction code generation failed:\n${TX_OUTPUT}\n${TX_ERROR}\n${TX_RESULT}" + ) +endif() + +# Generate ledger entry classes. +execute_process( + COMMAND + ${CODEGEN_PYTHON} "${GENERATE_LEDGER_SCRIPT}" "${LEDGER_ENTRIES_MACRO}" + --header-dir "${AUTOGEN_HEADER_DIR}/ledger_entries" --test-dir + "${AUTOGEN_TEST_DIR}/ledger_entries" --sfields-macro "${SFIELDS_MACRO}" + RESULT_VARIABLE LEDGER_RESULT + OUTPUT_VARIABLE LEDGER_OUTPUT + ERROR_VARIABLE LEDGER_ERROR +) +if(NOT LEDGER_RESULT EQUAL 0) + message( + FATAL_ERROR + "Ledger entry code generation failed:\n${LEDGER_OUTPUT}\n${LEDGER_ERROR}\n${TX_RESULT}" + ) +endif() + +message(STATUS "Protocol autogen: code generation complete") diff --git a/scripts/generate_ledger_classes.py b/cmake/scripts/codegen/generate_ledger_classes.py similarity index 92% rename from scripts/generate_ledger_classes.py rename to cmake/scripts/codegen/generate_ledger_classes.py index ad773ab9af..f5513655de 100644 --- a/scripts/generate_ledger_classes.py +++ b/cmake/scripts/codegen/generate_ledger_classes.py @@ -138,28 +138,12 @@ def main(): "--sfields-macro", help="Path to sfields.macro (default: auto-detect from macro_path)", ) - parser.add_argument( - "--list-outputs", - action="store_true", - help="List output files without generating (one per line)", - ) - + parser.add_argument("--venv-dir", help=argparse.SUPPRESS) args = parser.parse_args() # Parse the macro file to get ledger entry names entries = parse_macro_file(args.macro_path) - # If --list-outputs, just print the output file paths and exit - if args.list_outputs: - header_dir = Path(args.header_dir) - for entry in entries: - print(header_dir / f"{entry['name']}.h") - if args.test_dir: - test_dir = Path(args.test_dir) - for entry in entries: - print(test_dir / f"{entry['name']}Tests.cpp") - return - # Auto-detect sfields.macro path if not provided if args.sfields_macro: sfields_path = Path(args.sfields_macro) diff --git a/scripts/generate_tx_classes.py b/cmake/scripts/codegen/generate_tx_classes.py similarity index 92% rename from scripts/generate_tx_classes.py rename to cmake/scripts/codegen/generate_tx_classes.py index f21b7101df..07baefd8b6 100644 --- a/scripts/generate_tx_classes.py +++ b/cmake/scripts/codegen/generate_tx_classes.py @@ -147,28 +147,12 @@ def main(): "--sfields-macro", help="Path to sfields.macro (default: auto-detect from macro_path)", ) - parser.add_argument( - "--list-outputs", - action="store_true", - help="List output files without generating (one per line)", - ) - + parser.add_argument("--venv-dir", help=argparse.SUPPRESS) args = parser.parse_args() # Parse the macro file to get transaction names transactions = parse_macro_file(args.macro_path) - # If --list-outputs, just print the output file paths and exit - if args.list_outputs: - header_dir = Path(args.header_dir) - for tx in transactions: - print(header_dir / f"{tx['name']}.h") - if args.test_dir: - test_dir = Path(args.test_dir) - for tx in transactions: - print(test_dir / f"{tx['name']}Tests.cpp") - return - # Auto-detect sfields.macro path if not provided if args.sfields_macro: sfields_path = Path(args.sfields_macro) diff --git a/scripts/macro_parser_common.py b/cmake/scripts/codegen/macro_parser_common.py similarity index 100% rename from scripts/macro_parser_common.py rename to cmake/scripts/codegen/macro_parser_common.py diff --git a/scripts/requirements.txt b/cmake/scripts/codegen/requirements.txt similarity index 100% rename from scripts/requirements.txt rename to cmake/scripts/codegen/requirements.txt diff --git a/scripts/templates/LedgerEntry.h.mako b/cmake/scripts/codegen/templates/LedgerEntry.h.mako similarity index 100% rename from scripts/templates/LedgerEntry.h.mako rename to cmake/scripts/codegen/templates/LedgerEntry.h.mako diff --git a/scripts/templates/LedgerEntryTests.cpp.mako b/cmake/scripts/codegen/templates/LedgerEntryTests.cpp.mako similarity index 100% rename from scripts/templates/LedgerEntryTests.cpp.mako rename to cmake/scripts/codegen/templates/LedgerEntryTests.cpp.mako diff --git a/scripts/templates/Transaction.h.mako b/cmake/scripts/codegen/templates/Transaction.h.mako similarity index 100% rename from scripts/templates/Transaction.h.mako rename to cmake/scripts/codegen/templates/Transaction.h.mako diff --git a/scripts/templates/TransactionTests.cpp.mako b/cmake/scripts/codegen/templates/TransactionTests.cpp.mako similarity index 100% rename from scripts/templates/TransactionTests.cpp.mako rename to cmake/scripts/codegen/templates/TransactionTests.cpp.mako diff --git a/conan/lockfile/regenerate.sh b/conan/lockfile/regenerate.sh index 30d38dc2d7..1aa47628f0 100755 --- a/conan/lockfile/regenerate.sh +++ b/conan/lockfile/regenerate.sh @@ -23,14 +23,14 @@ rm -f conan.lock # first create command will create a new lockfile, while the subsequent create # commands will merge any additional dependencies into the created lockfile. conan lock create . \ - --options '&:jemalloc=True' \ - --options '&:rocksdb=True' \ - --profile:all=conan/lockfile/linux.profile + --options '&:jemalloc=True' \ + --options '&:rocksdb=True' \ + --profile:all=conan/lockfile/linux.profile conan lock create . \ - --options '&:jemalloc=True' \ - --options '&:rocksdb=True' \ - --profile:all=conan/lockfile/macos.profile + --options '&:jemalloc=True' \ + --options '&:rocksdb=True' \ + --profile:all=conan/lockfile/macos.profile conan lock create . \ - --options '&:jemalloc=True' \ - --options '&:rocksdb=True' \ - --profile:all=conan/lockfile/windows.profile + --options '&:jemalloc=True' \ + --options '&:rocksdb=True' \ + --profile:all=conan/lockfile/windows.profile diff --git a/include/xrpl/basics/BasicConfig.h b/include/xrpl/basics/BasicConfig.h index eaa53f93d6..e1b0af516f 100644 --- a/include/xrpl/basics/BasicConfig.h +++ b/include/xrpl/basics/BasicConfig.h @@ -33,7 +33,7 @@ private: public: /** Create an empty section. */ - explicit Section(std::string const& name = ""); + explicit Section(std::string name = ""); /** Returns the name of this section. */ std::string const& @@ -67,9 +67,13 @@ public: legacy(std::string value) { if (lines_.empty()) + { lines_.emplace_back(std::move(value)); + } else + { lines_[0] = std::move(value); + } } /** @@ -84,8 +88,10 @@ public: if (lines_.empty()) return ""; if (lines_.size() > 1) + { Throw( "A legacy value must have exactly one line. Section: " + name_); + } return lines_[0]; } @@ -269,8 +275,7 @@ public: bool had_trailing_comments() const { - return std::any_of( - map_.cbegin(), map_.cend(), [](auto s) { return s.second.had_trailing_comments(); }); + return std::ranges::any_of(map_, [](auto s) { return s.second.had_trailing_comments(); }); } protected: @@ -296,7 +301,7 @@ set(T& target, std::string const& name, Section const& section) if ((found_and_valid = val.has_value())) target = *val; } - catch (boost::bad_lexical_cast&) + catch (boost::bad_lexical_cast const&) // NOLINT(bugprone-empty-catch) { } return found_and_valid; @@ -330,7 +335,7 @@ get(Section const& section, std::string const& name, T const& defaultValue = T{} { return section.value_or(name, defaultValue); } - catch (boost::bad_lexical_cast&) + catch (boost::bad_lexical_cast const&) // NOLINT(bugprone-empty-catch) { } return defaultValue; @@ -345,7 +350,7 @@ get(Section const& section, std::string const& name, char const* defaultValue) if (val.has_value()) return *val; } - catch (boost::bad_lexical_cast&) + catch (boost::bad_lexical_cast const&) // NOLINT(bugprone-empty-catch) { } return defaultValue; diff --git a/include/xrpl/basics/Buffer.h b/include/xrpl/basics/Buffer.h index 5192daf632..52c092981c 100644 --- a/include/xrpl/basics/Buffer.h +++ b/include/xrpl/basics/Buffer.h @@ -24,7 +24,8 @@ public: Buffer() = default; /** Create an uninitialized buffer with the given size. */ - explicit Buffer(std::size_t size) : p_(size ? new std::uint8_t[size] : nullptr), size_(size) + explicit Buffer(std::size_t size) + : p_((size != 0u) ? new std::uint8_t[size] : nullptr), size_(size) { } @@ -36,7 +37,7 @@ public: */ Buffer(void const* data, std::size_t size) : Buffer(size) { - if (size) + if (size != 0u) std::memcpy(p_.get(), data, size); } @@ -91,7 +92,7 @@ public: { // Ensure the slice isn't a subset of the buffer. XRPL_ASSERT( - s.size() == 0 || size_ == 0 || s.data() < p_.get() || s.data() >= p_.get() + size_, + s.empty() || size_ == 0 || s.data() < p_.get() || s.data() >= p_.get() + size_, "xrpl::Buffer::operator=(Slice) : input not a subset"); if (auto p = alloc(s.size())) @@ -114,7 +115,7 @@ public: operator Slice() const noexcept { - if (!size_) + if (size_ == 0u) return Slice{}; return Slice{p_.get(), size_}; } @@ -155,7 +156,7 @@ public: { if (n != size_) { - p_.reset(n ? new std::uint8_t[n] : nullptr); + p_.reset((n != 0u) ? new std::uint8_t[n] : nullptr); size_ = n; } return p_.get(); @@ -199,7 +200,7 @@ operator==(Buffer const& lhs, Buffer const& rhs) noexcept if (lhs.size() != rhs.size()) return false; - if (lhs.size() == 0) + if (lhs.empty()) return true; return std::memcmp(lhs.data(), rhs.data(), lhs.size()) == 0; diff --git a/include/xrpl/basics/CompressionAlgorithms.h b/include/xrpl/basics/CompressionAlgorithms.h index c549a58b93..e24c490337 100644 --- a/include/xrpl/basics/CompressionAlgorithms.h +++ b/include/xrpl/basics/CompressionAlgorithms.h @@ -9,9 +9,7 @@ #include #include -namespace xrpl { - -namespace compression_algorithms { +namespace xrpl::compression_algorithms { /** LZ4 block compression. * @tparam BufferFactory Callable object or lambda. @@ -68,12 +66,15 @@ lz4Decompress( if (decompressedSize <= 0) Throw("lz4Decompress: integer overflow (output)"); + // NOLINTNEXTLINE(readability-suspicious-call-argument) if (LZ4_decompress_safe( reinterpret_cast(in), reinterpret_cast(decompressed), inSize, decompressedSize) != decompressedSize) + { Throw("lz4Decompress: failed"); + } return decompressedSize; } @@ -138,6 +139,4 @@ lz4Decompress( return lz4Decompress(chunk, inSize, decompressed, decompressedSize); } -} // namespace compression_algorithms - -} // namespace xrpl +} // namespace xrpl::compression_algorithms diff --git a/include/xrpl/basics/CountedObject.h b/include/xrpl/basics/CountedObject.h index 1acba18949..675d1b163b 100644 --- a/include/xrpl/basics/CountedObject.h +++ b/include/xrpl/basics/CountedObject.h @@ -112,7 +112,6 @@ private: return c; } -public: CountedObject() noexcept { getCounter().increment(); @@ -126,10 +125,13 @@ public: CountedObject& operator=(CountedObject const&) noexcept = default; +public: ~CountedObject() noexcept { getCounter().decrement(); } + + friend Object; }; } // namespace xrpl diff --git a/include/xrpl/basics/DecayingSample.h b/include/xrpl/basics/DecayingSample.h index d3343535e9..d4c7388046 100644 --- a/include/xrpl/basics/DecayingSample.h +++ b/include/xrpl/basics/DecayingSample.h @@ -67,7 +67,7 @@ private: } else { - while (elapsed--) + while ((elapsed--) != 0u) m_value -= (m_value + Window - 1) / Window; } } diff --git a/include/xrpl/basics/Expected.h b/include/xrpl/basics/Expected.h index 083a9233cf..6cba7106fb 100644 --- a/include/xrpl/basics/Expected.h +++ b/include/xrpl/basics/Expected.h @@ -61,7 +61,7 @@ template class Unexpected { public: - static_assert(!std::is_same::value, "E must not be void"); + static_assert(!std::is_same_v, "E must not be void"); Unexpected() = delete; diff --git a/include/xrpl/basics/IntrusiveRefCounts.h b/include/xrpl/basics/IntrusiveRefCounts.h index 36616bc64f..ea610a521e 100644 --- a/include/xrpl/basics/IntrusiveRefCounts.h +++ b/include/xrpl/basics/IntrusiveRefCounts.h @@ -247,7 +247,7 @@ IntrusiveRefCounts::releaseStrongRef() const using enum ReleaseStrongRefAction; auto prevIntVal = refCounts.load(std::memory_order_acquire); - while (1) + while (true) { RefCountPair const prevVal{prevIntVal}; XRPL_ASSERT( @@ -298,7 +298,7 @@ IntrusiveRefCounts::addWeakReleaseStrongRef() const // Note: If this becomes a perf bottleneck, the `partialDestroyStartedMask` // may be able to be set non-atomically. But it is easier to reason about // the code if the flag is set atomically. - while (1) + while (true) { RefCountPair const prevVal{prevIntVal}; // Converted the last strong pointer to a weak pointer. @@ -343,7 +343,7 @@ IntrusiveRefCounts::releaseWeakRef() const RefCountPair prev = prevIntVal; if (prev.weak == 1 && prev.strong == 0) { - if (!prev.partialDestroyStartedBit) + if (prev.partialDestroyStartedBit == 0u) { // This case should only be hit if the partialDestroyStartedBit is // set non-atomically (and even then very rarely). The code is kept @@ -352,7 +352,7 @@ IntrusiveRefCounts::releaseWeakRef() const prevIntVal = refCounts.load(std::memory_order_acquire); prev = RefCountPair{prevIntVal}; } - if (!prev.partialDestroyFinishedBit) + if (prev.partialDestroyFinishedBit == 0u) { // partial destroy MUST finish before running a full destroy (when // using weak pointers) @@ -372,7 +372,7 @@ IntrusiveRefCounts::checkoutStrongRefFromWeak() const noexcept while (!refCounts.compare_exchange_weak(curValue, desiredValue, std::memory_order_acq_rel)) { RefCountPair const prev{curValue}; - if (!prev.strong) + if (prev.strong == 0u) return false; desiredValue = curValue + strongDelta; diff --git a/include/xrpl/basics/LocalValue.h b/include/xrpl/basics/LocalValue.h index 4ac76b130d..421ea7af23 100644 --- a/include/xrpl/basics/LocalValue.h +++ b/include/xrpl/basics/LocalValue.h @@ -4,6 +4,7 @@ #include #include +#include namespace xrpl { @@ -28,7 +29,7 @@ struct LocalValues T t_; Value() = default; - explicit Value(T const& t) : t_(t) + explicit Value(T t) : t_(std::move(t)) { } @@ -42,10 +43,10 @@ struct LocalValues // Keys are the address of a LocalValue. std::unordered_map> values; - static inline void + static void cleanup(LocalValues* lvs) { - if (lvs && !lvs->onCoro) + if ((lvs != nullptr) && !lvs->onCoro) delete lvs; } }; @@ -89,7 +90,7 @@ T& LocalValue::operator*() { auto lvs = detail::getLocalValues().get(); - if (!lvs) + if (lvs == nullptr) { lvs = new detail::LocalValues(); lvs->onCoro = false; diff --git a/include/xrpl/basics/Log.h b/include/xrpl/basics/Log.h index 08da3e57b5..4efbec5199 100644 --- a/include/xrpl/basics/Log.h +++ b/include/xrpl/basics/Log.h @@ -38,7 +38,7 @@ private: std::string partition_; public: - Sink(std::string const& partition, beast::severities::Severity thresh, Logs& logs); + Sink(std::string partition, beast::severities::Severity thresh, Logs& logs); Sink(Sink const&) = delete; Sink& @@ -226,7 +226,7 @@ private: // expensive argument lists if the stream is not active. #ifndef JLOG #define JLOG(x) \ - if (!x) \ + if (!(x)) \ { \ } \ else \ @@ -235,7 +235,7 @@ private: #ifndef CLOG #define CLOG(ss) \ - if (!ss) \ + if (!(ss)) \ ; \ else \ *ss diff --git a/include/xrpl/basics/Number.h b/include/xrpl/basics/Number.h index c39aae2dd3..51ade0b5ea 100644 --- a/include/xrpl/basics/Number.h +++ b/include/xrpl/basics/Number.h @@ -78,7 +78,7 @@ struct MantissaRange } rep min; - rep max{min * 10 - 1}; + rep max{(min * 10) - 1}; int log; mantissa_scale scale; @@ -342,7 +342,9 @@ public: constexpr int signum() const noexcept { - return negative_ ? -1 : (mantissa_ ? 1 : 0); + if (negative_) + return -1; + return (mantissa_ != 0u) ? 1 : 0; } Number @@ -402,19 +404,19 @@ public: static void setMantissaScale(MantissaRange::mantissa_scale scale); - inline static internalrep + static internalrep minMantissa() { return range_.get().min; } - inline static internalrep + static internalrep maxMantissa() { return range_.get().max; } - inline static int + static int mantissaLog() { return range_.get().log; @@ -507,16 +509,12 @@ private: class Guard; }; -inline constexpr Number::Number( - bool negative, - internalrep mantissa, - int exponent, - unchecked) noexcept +constexpr Number::Number(bool negative, internalrep mantissa, int exponent, unchecked) noexcept : negative_(negative), mantissa_{mantissa}, exponent_{exponent} { } -inline constexpr Number::Number(internalrep mantissa, int exponent, unchecked) noexcept +constexpr Number::Number(internalrep mantissa, int exponent, unchecked) noexcept : Number(false, mantissa, exponent, unchecked{}) { } @@ -548,7 +546,7 @@ inline Number::Number(rep mantissa) : Number{mantissa, 0} * Please see the "---- External Interface ----" section of the class * documentation for an explanation of why the internal value may be modified. */ -inline constexpr Number::rep +constexpr Number::rep Number::mantissa() const noexcept { auto m = mantissa_; @@ -569,7 +567,7 @@ Number::mantissa() const noexcept * Please see the "---- External Interface ----" section of the class * documentation for an explanation of why the internal value may be modified. */ -inline constexpr int +constexpr int Number::exponent() const noexcept { auto e = exponent_; @@ -584,13 +582,13 @@ Number::exponent() const noexcept return e; } -inline constexpr Number +constexpr Number Number::operator+() const noexcept { return *this; } -inline constexpr Number +constexpr Number Number::operator-() const noexcept { if (mantissa_ == 0) @@ -705,17 +703,19 @@ Number::normalizeToRange(T minMantissa, T maxMantissa) const int exponent = exponent_; if constexpr (std::is_unsigned_v) + { XRPL_ASSERT_PARTS( !negative, "xrpl::Number::normalizeToRange", "Number is non-negative for unsigned range."); + } Number::normalize(negative, mantissa, exponent, minMantissa, maxMantissa); auto const sign = negative ? -1 : 1; return std::make_pair(static_cast(sign * mantissa), exponent); } -inline constexpr Number +constexpr Number abs(Number x) noexcept { if (x < Number{}) @@ -746,7 +746,7 @@ power(Number const& f, unsigned n, unsigned d); // Return 0 if abs(x) < limit, else returns x -inline constexpr Number +constexpr Number squelch(Number const& x, Number const& limit) noexcept { if (abs(x) < limit) diff --git a/include/xrpl/basics/RangeSet.h b/include/xrpl/basics/RangeSet.h index f6e03cac79..4e54624056 100644 --- a/include/xrpl/basics/RangeSet.h +++ b/include/xrpl/basics/RangeSet.h @@ -117,22 +117,32 @@ from_string(RangeSet& rs, std::string const& s) case 1: { T front; if (!beast::lexicalCastChecked(front, intervals.front())) + { result = false; + } else + { rs.insert(front); + } break; } case 2: { T front; if (!beast::lexicalCastChecked(front, intervals.front())) + { result = false; + } else { T back; if (!beast::lexicalCastChecked(back, intervals.back())) + { result = false; + } else + { rs.insert(range(front, back)); + } } break; } diff --git a/include/xrpl/basics/SlabAllocator.h b/include/xrpl/basics/SlabAllocator.h index 4ed88a32f7..094f7a0f34 100644 --- a/include/xrpl/basics/SlabAllocator.h +++ b/include/xrpl/basics/SlabAllocator.h @@ -60,18 +60,16 @@ class SlabAllocator { // Use memcpy to avoid unaligned UB // (will optimize to equivalent code) - std::memcpy(data, &l_, sizeof(std::uint8_t*)); + std::memcpy(data, static_cast(&l_), sizeof(std::uint8_t*)); l_ = data; data += item; } } - ~SlabBlock() - { - // Calling this destructor will release the allocated memory but - // will not properly destroy any objects that are constructed in - // the block itself. - } + // Calling this destructor will release the allocated memory but + // will not properly destroy any objects that are constructed in + // the block itself. + ~SlabBlock() = default; SlabBlock(SlabBlock const& other) = delete; SlabBlock& @@ -98,11 +96,11 @@ class SlabAllocator ret = l_; - if (ret) + if (ret != nullptr) { // Use memcpy to avoid unaligned UB // (will optimize to equivalent code) - std::memcpy(&l_, ret, sizeof(std::uint8_t*)); + std::memcpy(static_cast(&l_), ret, sizeof(std::uint8_t*)); } } @@ -127,7 +125,7 @@ class SlabAllocator // Use memcpy to avoid unaligned UB // (will optimize to equivalent code) - std::memcpy(ptr, &l_, sizeof(std::uint8_t*)); + std::memcpy(ptr, static_cast(&l_), sizeof(std::uint8_t*)); l_ = ptr; } }; @@ -159,7 +157,7 @@ public: std::size_t extra, std::size_t alloc = 0, std::size_t align = 0) - : itemAlignment_(align ? align : alignof(Type)) + : itemAlignment_((align != 0u) ? align : alignof(Type)) , itemSize_(boost::alignment::align_up(sizeof(Type) + extra, itemAlignment_)) , slabSize_(alloc) { @@ -176,12 +174,10 @@ public: SlabAllocator& operator=(SlabAllocator&& other) = delete; - ~SlabAllocator() - { - // FIXME: We can't destroy the memory blocks we've allocated, because - // we can't be sure that they are not being used. Cleaning the - // shutdown process up could make this possible. - } + // FIXME: We can't destroy the memory blocks we've allocated, because + // we can't be sure that they are not being used. Cleaning the + // shutdown process up could make this possible. + ~SlabAllocator() = default; /** Returns the size of the memory block this allocator returns. */ constexpr std::size_t @@ -215,7 +211,7 @@ public: // We want to allocate the memory at a 2 MiB boundary, to make it // possible to use hugepage mappings on Linux: auto buf = boost::alignment::aligned_alloc(megabytes(std::size_t(2)), size); - if (!buf) [[unlikely]] + if (buf == nullptr) [[unlikely]] return nullptr; #if BOOST_OS_LINUX @@ -235,7 +231,7 @@ public: // This operation is essentially guaranteed not to fail but // let's be careful anyways. - if (!boost::alignment::align(itemAlignment_, itemSize_, slabData, slabSize)) + if (boost::alignment::align(itemAlignment_, itemSize_, slabData, slabSize) == nullptr) { boost::alignment::aligned_free(buf); return nullptr; @@ -347,9 +343,7 @@ public: SlabAllocatorSet& operator=(SlabAllocatorSet&& other) = delete; - ~SlabAllocatorSet() - { - } + ~SlabAllocatorSet() = default; /** Returns a suitably aligned pointer, if one is available. diff --git a/include/xrpl/basics/Slice.h b/include/xrpl/basics/Slice.h index 6aa5446236..08ee9464ef 100644 --- a/include/xrpl/basics/Slice.h +++ b/include/xrpl/basics/Slice.h @@ -183,7 +183,7 @@ operator==(Slice const& lhs, Slice const& rhs) noexcept if (lhs.size() != rhs.size()) return false; - if (lhs.size() == 0) + if (lhs.empty()) return true; return std::memcmp(lhs.data(), rhs.data(), lhs.size()) == 0; @@ -211,14 +211,14 @@ operator<<(Stream& s, Slice const& v) } template -std::enable_if_t::value || std::is_same::value, Slice> +std::enable_if_t || std::is_same_v, Slice> makeSlice(std::array const& a) { return Slice(a.data(), a.size()); } template -std::enable_if_t::value || std::is_same::value, Slice> +std::enable_if_t || std::is_same_v, Slice> makeSlice(std::vector const& v) { return Slice(v.data(), v.size()); diff --git a/include/xrpl/basics/TaggedCache.h b/include/xrpl/basics/TaggedCache.h index 1a19c653bc..d20c850bad 100644 --- a/include/xrpl/basics/TaggedCache.h +++ b/include/xrpl/basics/TaggedCache.h @@ -251,7 +251,7 @@ private: } }; - typedef typename std::conditional::type Entry; + using Entry = std::conditional_t; using KeyOnlyCacheType = hardened_partitioned_hash_map; diff --git a/include/xrpl/basics/ToString.h b/include/xrpl/basics/ToString.h index a6254a1880..28f0245404 100644 --- a/include/xrpl/basics/ToString.h +++ b/include/xrpl/basics/ToString.h @@ -12,7 +12,7 @@ namespace xrpl { */ template -typename std::enable_if::value, std::string>::type +std::enable_if_t, std::string> to_string(T t) { return std::to_string(t); diff --git a/include/xrpl/basics/algorithm.h b/include/xrpl/basics/algorithm.h index b3fdd5453d..9dae731a89 100644 --- a/include/xrpl/basics/algorithm.h +++ b/include/xrpl/basics/algorithm.h @@ -23,8 +23,10 @@ generalized_set_intersection( { while (first1 != last1 && first2 != last2) { - if (comp(*first1, *first2)) // if *first1 < *first2 - ++first1; // then reduce first range + if (comp(*first1, *first2)) + { // if *first1 < *first2 + ++first1; // then reduce first range + } else { if (!comp(*first2, *first1)) // if *first1 == *first2 diff --git a/include/xrpl/basics/base_uint.h b/include/xrpl/basics/base_uint.h index 5fb13319ea..55b73bfb9b 100644 --- a/include/xrpl/basics/base_uint.h +++ b/include/xrpl/basics/base_uint.h @@ -183,11 +183,17 @@ private: return ParseResult::badChar; if (c >= 'a') + { nibble = static_cast(c - 'a' + 0xA); + } else if (c >= 'A') + { nibble = static_cast(c - 'A' + 0xA); + } else if (c <= '9') + { nibble = static_cast(c - '0'); + } if (nibble > 0xFu) return ParseResult::badChar; @@ -263,7 +269,7 @@ public: class Container, class = std::enable_if_t< detail::is_contiguous_container::value && - std::is_trivially_copyable::value>> + std::is_trivially_copyable_v>> explicit base_uint(Container const& c) { XRPL_ASSERT( @@ -275,7 +281,7 @@ public: template std::enable_if_t< detail::is_contiguous_container::value && - std::is_trivially_copyable::value, + std::is_trivially_copyable_v, base_uint&> operator=(Container const& c) { @@ -308,8 +314,10 @@ public: signum() const { for (int i = 0; i < WIDTH; i++) + { if (data_[i] != 0) return 1; + } return 0; } @@ -390,7 +398,7 @@ public: return *this; } - base_uint const + base_uint operator++(int) { // postfix operator @@ -415,7 +423,7 @@ public: return *this; } - base_uint const + base_uint operator--(int) { // postfix operator @@ -444,7 +452,7 @@ public: { std::uint64_t carry = 0; - for (int i = WIDTH; i--;) + for (int i = WIDTH - 1; i >= 0; i--) { std::uint64_t const n = carry + boost::endian::big_to_native(data_[i]) + boost::endian::big_to_native(b.data_[i]); @@ -532,7 +540,7 @@ using uint256 = base_uint<256>; using uint192 = base_uint<192>; template -[[nodiscard]] inline constexpr std::strong_ordering +[[nodiscard]] constexpr std::strong_ordering operator<=>(base_uint const& lhs, base_uint const& rhs) { // This comparison might seem wrong on a casual inspection because it @@ -553,7 +561,7 @@ operator<=>(base_uint const& lhs, base_uint const& rhs) } template -[[nodiscard]] inline constexpr bool +[[nodiscard]] constexpr bool operator==(base_uint const& lhs, base_uint const& rhs) { return (lhs <=> rhs) == 0; @@ -561,7 +569,7 @@ operator==(base_uint const& lhs, base_uint const& rhs) //------------------------------------------------------------------------------ template -inline constexpr bool +constexpr bool operator==(base_uint const& a, std::uint64_t b) { return a == base_uint(b); @@ -569,28 +577,28 @@ operator==(base_uint const& a, std::uint64_t b) //------------------------------------------------------------------------------ template -inline constexpr base_uint +constexpr base_uint operator^(base_uint const& a, base_uint const& b) { return base_uint(a) ^= b; } template -inline constexpr base_uint +constexpr base_uint operator&(base_uint const& a, base_uint const& b) { return base_uint(a) &= b; } template -inline constexpr base_uint +constexpr base_uint operator|(base_uint const& a, base_uint const& b) { return base_uint(a) |= b; } template -inline constexpr base_uint +constexpr base_uint operator+(base_uint const& a, base_uint const& b) { return base_uint(a) += b; diff --git a/include/xrpl/basics/contract.h b/include/xrpl/basics/contract.h index e2d6dafe55..0d9f567416 100644 --- a/include/xrpl/basics/contract.h +++ b/include/xrpl/basics/contract.h @@ -49,8 +49,7 @@ template Throw(Args&&... args) { static_assert( - std::is_convertible::value, - "Exception must derive from std::exception."); + std::is_convertible_v, "Exception must derive from std::exception."); E e(std::forward(args)...); LogThrow(std::string("Throwing exception of type " + beast::type_name() + ": ") + e.what()); diff --git a/include/xrpl/basics/partitioned_unordered_map.h b/include/xrpl/basics/partitioned_unordered_map.h index f9e55d71a6..8af9341315 100644 --- a/include/xrpl/basics/partitioned_unordered_map.h +++ b/include/xrpl/basics/partitioned_unordered_map.h @@ -231,7 +231,8 @@ public: { // Set partitions to the number of hardware threads if the parameter // is either empty or set to 0. - partitions_ = partitions && *partitions ? *partitions : std::thread::hardware_concurrency(); + partitions_ = + partitions && (*partitions != 0u) ? *partitions : std::thread::hardware_concurrency(); map_.resize(partitions_); XRPL_ASSERT( partitions_, diff --git a/include/xrpl/basics/random.h b/include/xrpl/basics/random.h index 6a09d8161b..adf579442e 100644 --- a/include/xrpl/basics/random.h +++ b/include/xrpl/basics/random.h @@ -15,8 +15,8 @@ namespace xrpl { #ifndef __INTELLISENSE__ static_assert( // NOLINTNEXTLINE(misc-redundant-expression) - std::is_integral::value && - std::is_unsigned::value, + std::is_integral_v && + std::is_unsigned_v, "The XRPL default PRNG engine must return an unsigned integral type."); static_assert( @@ -91,7 +91,7 @@ default_prng() */ /** @{ */ template -std::enable_if_t::value && detail::is_engine::value, Integral> +std::enable_if_t && detail::is_engine::value, Integral> rand_int(Engine& engine, Integral min, Integral max) { XRPL_ASSERT(max > min, "xrpl::rand_int : max over min inputs"); @@ -103,35 +103,35 @@ rand_int(Engine& engine, Integral min, Integral max) } template -std::enable_if_t::value, Integral> +std::enable_if_t, Integral> rand_int(Integral min, Integral max) { return rand_int(default_prng(), min, max); } template -std::enable_if_t::value && detail::is_engine::value, Integral> +std::enable_if_t && detail::is_engine::value, Integral> rand_int(Engine& engine, Integral max) { return rand_int(engine, Integral(0), max); } template -std::enable_if_t::value, Integral> +std::enable_if_t, Integral> rand_int(Integral max) { return rand_int(default_prng(), max); } template -std::enable_if_t::value && detail::is_engine::value, Integral> +std::enable_if_t && detail::is_engine::value, Integral> rand_int(Engine& engine) { return rand_int(engine, std::numeric_limits::max()); } template -std::enable_if_t::value, Integral> +std::enable_if_t, Integral> rand_int() { return rand_int(default_prng(), std::numeric_limits::max()); @@ -142,7 +142,7 @@ rand_int() /** @{ */ template std::enable_if_t< - (std::is_same::value || std::is_same::value) && + (std::is_same_v || std::is_same_v) && detail::is_engine::value, Byte> rand_byte(Engine& engine) @@ -152,9 +152,7 @@ rand_byte(Engine& engine) } template -std::enable_if_t< - (std::is_same::value || std::is_same::value), - Byte> +std::enable_if_t<(std::is_same_v || std::is_same_v), Byte> rand_byte() { return rand_byte(default_prng()); diff --git a/include/xrpl/basics/safe_cast.h b/include/xrpl/basics/safe_cast.h index 1e33b9663a..c167e660ce 100644 --- a/include/xrpl/basics/safe_cast.h +++ b/include/xrpl/basics/safe_cast.h @@ -12,12 +12,12 @@ namespace xrpl { template concept SafeToCast = (std::is_integral_v && std::is_integral_v) && - (std::is_signed::value || std::is_unsigned::value) && - (std::is_signed::value != std::is_signed::value ? sizeof(Dest) > sizeof(Src) - : sizeof(Dest) >= sizeof(Src)); + (std::is_signed_v || std::is_unsigned_v) && + (std::is_signed_v != std::is_signed_v ? sizeof(Dest) > sizeof(Src) + : sizeof(Dest) >= sizeof(Src)); template -inline constexpr std::enable_if_t && std::is_integral_v, Dest> +constexpr std::enable_if_t && std::is_integral_v, Dest> safe_cast(Src s) noexcept { static_assert( @@ -30,14 +30,14 @@ safe_cast(Src s) noexcept } template -inline constexpr std::enable_if_t && std::is_integral_v, Dest> +constexpr std::enable_if_t && std::is_integral_v, Dest> safe_cast(Src s) noexcept { return static_cast(safe_cast>(s)); } template -inline constexpr std::enable_if_t && std::is_enum_v, Dest> +constexpr std::enable_if_t && std::is_enum_v, Dest> safe_cast(Src s) noexcept { return safe_cast(static_cast>(s)); @@ -48,7 +48,7 @@ safe_cast(Src s) noexcept // underlying types become safe, it can be converted to a safe_cast. template -inline constexpr std::enable_if_t && std::is_integral_v, Dest> +constexpr std::enable_if_t && std::is_integral_v, Dest> unsafe_cast(Src s) noexcept { static_assert( @@ -59,14 +59,14 @@ unsafe_cast(Src s) noexcept } template -inline constexpr std::enable_if_t && std::is_integral_v, Dest> +constexpr std::enable_if_t && std::is_integral_v, Dest> unsafe_cast(Src s) noexcept { return static_cast(unsafe_cast>(s)); } template -inline constexpr std::enable_if_t && std::is_enum_v, Dest> +constexpr std::enable_if_t && std::is_enum_v, Dest> unsafe_cast(Src s) noexcept { return unsafe_cast(static_cast>(s)); diff --git a/include/xrpl/basics/strHex.h b/include/xrpl/basics/strHex.h index cc07bf5b9d..9cae234f06 100644 --- a/include/xrpl/basics/strHex.h +++ b/include/xrpl/basics/strHex.h @@ -10,9 +10,9 @@ std::string strHex(FwdIt begin, FwdIt end) { static_assert( - std::is_convertible< + std::is_convertible_v< typename std::iterator_traits::iterator_category, - std::forward_iterator_tag>::value, + std::forward_iterator_tag>, "FwdIt must be a forward iterator"); std::string result; result.reserve(2 * std::distance(begin, end)); diff --git a/include/xrpl/basics/tagged_integer.h b/include/xrpl/basics/tagged_integer.h index 18d6a707a0..129c586126 100644 --- a/include/xrpl/basics/tagged_integer.h +++ b/include/xrpl/basics/tagged_integer.h @@ -44,8 +44,7 @@ public: template < class OtherInt, - class = typename std::enable_if< - std::is_integral::value && sizeof(OtherInt) <= sizeof(Int)>::type> + class = std::enable_if_t && sizeof(OtherInt) <= sizeof(Int)>> explicit constexpr tagged_integer(OtherInt value) noexcept : m_value(value) { static_assert(sizeof(tagged_integer) == sizeof(Int), "tagged_integer is adding padding"); diff --git a/include/xrpl/beast/asio/io_latency_probe.h b/include/xrpl/beast/asio/io_latency_probe.h index 2dc1fcba15..9a8a63de4e 100644 --- a/include/xrpl/beast/asio/io_latency_probe.h +++ b/include/xrpl/beast/asio/io_latency_probe.h @@ -184,7 +184,7 @@ private: void operator()() const { - if (!m_probe) + if (m_probe == nullptr) return; typename Clock::time_point const now(Clock::now()); typename Clock::duration const elapsed(now - m_start); @@ -202,7 +202,7 @@ private: // Calculate when we want to sample again, and // adjust for the expected latency. // - typename Clock::time_point const when(now + m_probe->m_period - 2 * elapsed); + typename Clock::time_point const when(now + m_probe->m_period - (2 * elapsed)); if (when <= now) { @@ -224,7 +224,7 @@ private: void operator()(boost::system::error_code const& ec) { - if (!m_probe) + if (m_probe == nullptr) return; typename Clock::time_point const now(Clock::now()); boost::asio::post( diff --git a/include/xrpl/beast/container/aged_container_utility.h b/include/xrpl/beast/container/aged_container_utility.h index cf6bae9990..47aa8a5e66 100644 --- a/include/xrpl/beast/container/aged_container_utility.h +++ b/include/xrpl/beast/container/aged_container_utility.h @@ -9,7 +9,7 @@ namespace beast { /** Expire aged container items past the specified age. */ template -typename std::enable_if::value, std::size_t>::type +std::enable_if_t::value, std::size_t> expire(AgedContainer& c, std::chrono::duration const& age) { std::size_t n(0); diff --git a/include/xrpl/beast/container/detail/aged_associative_container.h b/include/xrpl/beast/container/detail/aged_associative_container.h index 34e9560cbb..5d3534004c 100644 --- a/include/xrpl/beast/container/detail/aged_associative_container.h +++ b/include/xrpl/beast/container/detail/aged_associative_container.h @@ -1,7 +1,6 @@ #pragma once -namespace beast { -namespace detail { +namespace beast::detail { // Extracts the key portion of value template @@ -26,9 +25,8 @@ struct aged_associative_container_extract_t Value const& operator()(Value const& value) const { - return value; + return value; // NOLINT(bugprone-return-const-ref-from-parameter) } }; -} // namespace detail -} // namespace beast +} // namespace beast::detail diff --git a/include/xrpl/beast/container/detail/aged_container_iterator.h b/include/xrpl/beast/container/detail/aged_container_iterator.h index 99aab2a9a9..3f12a5610a 100644 --- a/include/xrpl/beast/container/detail/aged_container_iterator.h +++ b/include/xrpl/beast/container/detail/aged_container_iterator.h @@ -2,6 +2,7 @@ #include #include +#include namespace beast { @@ -16,10 +17,10 @@ class aged_container_iterator { public: using iterator_category = typename std::iterator_traits::iterator_category; - using value_type = typename std::conditional< + using value_type = std::conditional_t< is_const, typename Iterator::value_type::stashed::value_type const, - typename Iterator::value_type::stashed::value_type>::type; + typename Iterator::value_type::stashed::value_type>; using difference_type = typename std::iterator_traits::difference_type; using pointer = value_type*; using reference = value_type&; @@ -32,9 +33,9 @@ public: template < bool other_is_const, class OtherIterator, - class = typename std::enable_if< - (other_is_const == false || is_const == true) && - std::is_same::value == false>::type> + class = std::enable_if_t< + (!other_is_const || is_const) && + !static_cast(std::is_same_v)>> explicit aged_container_iterator( aged_container_iterator const& other) : m_iter(other.m_iter) @@ -42,9 +43,7 @@ public: } // Disable constructing a const_iterator from a non-const_iterator. - template < - bool other_is_const, - class = typename std::enable_if::type> + template > aged_container_iterator(aged_container_iterator const& other) : m_iter(other.m_iter) { @@ -53,8 +52,8 @@ public: // Disable assigning a const_iterator to a non-const iterator template auto - operator=(aged_container_iterator const& other) -> typename std:: - enable_if::type + operator=(aged_container_iterator const& other) + -> std::enable_if_t { m_iter = other.m_iter; return *this; @@ -133,7 +132,7 @@ private: friend class aged_container_iterator; template - aged_container_iterator(OtherIterator const& iter) : m_iter(iter) + aged_container_iterator(OtherIterator iter) : m_iter(std::move(iter)) { } diff --git a/include/xrpl/beast/container/detail/aged_ordered_container.h b/include/xrpl/beast/container/detail/aged_ordered_container.h index dad0d92e0b..b20639aec4 100644 --- a/include/xrpl/beast/container/detail/aged_ordered_container.h +++ b/include/xrpl/beast/container/detail/aged_ordered_container.h @@ -57,8 +57,7 @@ template < class T, class Clock = std::chrono::steady_clock, class Compare = std::less, - class Allocator = - std::allocator, Key>::type>> + class Allocator = std::allocator, Key>>> class aged_ordered_container { public: @@ -67,7 +66,7 @@ public: using duration = typename clock_type::duration; using key_type = Key; using mapped_type = T; - using value_type = typename std::conditional, Key>::type; + using value_type = std::conditional_t, Key>; using size_type = std::size_t; using difference_type = std::ptrdiff_t; @@ -110,8 +109,7 @@ private: template < class... Args, - class = - typename std::enable_if::value>::type> + class = std::enable_if_t>> element(time_point const& when_, Args&&... args) : value(std::forward(args)...), when(when_) { @@ -135,9 +133,7 @@ private: return Compare::operator()(lhs.first, rhs.first); } - pair_value_compare() - { - } + pair_value_compare() = default; pair_value_compare(pair_value_compare const& other) : Compare(other) { @@ -200,7 +196,7 @@ private: using list_type = typename boost::intrusive:: make_list>::type; - using cont_type = typename std::conditional< + using cont_type = std::conditional_t< IsMulti, typename boost::intrusive::make_multiset< element, @@ -209,7 +205,7 @@ private: typename boost::intrusive::make_set< element, boost::intrusive::constant_time_size, - boost::intrusive::compare>::type>::type; + boost::intrusive::compare>::type>; using ElementAllocator = typename std::allocator_traits::template rebind_alloc; @@ -257,7 +253,8 @@ private: config_t(config_t&& other) : KeyValueCompare(std::move(other.key_compare())) - , beast::detail::empty_base_optimization(std::move(other)) + , beast::detail::empty_base_optimization(std::move( + static_cast&>(other))) , clock(other.clock) { } @@ -373,7 +370,7 @@ private: public: using key_compare = Compare; - using value_compare = typename std::conditional::type; + using value_compare = std::conditional_t; using allocator_type = Allocator; using reference = value_type&; using const_reference = value_type const&; @@ -401,6 +398,8 @@ public: class chronological_t { + chronological_t() = default; + public: // A set iterator (IsMap==false) is always const // because the elements of a set are immutable. @@ -488,7 +487,7 @@ public: iterator iterator_to(value_type& value) { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return list.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); @@ -497,20 +496,16 @@ public: const_iterator iterator_to(value_type const& value) const { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return list.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); } - private: - chronological_t() - { - } - chronological_t(chronological_t const&) = delete; chronological_t(chronological_t&&) = delete; + private: friend class aged_ordered_container; list_type mutable list; } chronological; @@ -616,30 +611,30 @@ public: class K, bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> - typename std::conditional::type& + class = std::enable_if_t> + std::conditional_t& at(K const& k); template < class K, bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> + class = std::enable_if_t> typename std::conditional::type const& at(K const& k) const; template < bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> - typename std::conditional::type& + class = std::enable_if_t> + std::conditional_t& operator[](Key const& key); template < bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> - typename std::conditional::type& + class = std::enable_if_t> + std::conditional_t& operator[](Key&& key); //-------------------------------------------------------------------------- @@ -723,7 +718,7 @@ public: iterator iterator_to(value_type& value) { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return m_cont.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); @@ -732,7 +727,7 @@ public: const_iterator iterator_to(value_type const& value) const { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return m_cont.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); @@ -774,37 +769,35 @@ public: // map, set template auto - insert(value_type const& value) -> - typename std::enable_if>::type; + insert(value_type const& value) -> std::enable_if_t>; // multimap, multiset template auto - insert(value_type const& value) -> typename std::enable_if::type; + insert(value_type const& value) -> std::enable_if_t; // set template auto - insert(value_type&& value) -> - typename std::enable_if>::type; + insert(value_type&& value) + -> std::enable_if_t>; // multiset template auto - insert(value_type&& value) -> - typename std::enable_if::type; + insert(value_type&& value) -> std::enable_if_t; //--- // map, set template auto - insert(const_iterator hint, value_type const& value) -> - typename std::enable_if::type; + insert(const_iterator hint, value_type const& value) + -> std::enable_if_t; // multimap, multiset template - typename std::enable_if::type + std::enable_if_t insert(const_iterator /*hint*/, value_type const& value) { // VFALCO TODO Figure out how to utilize 'hint' @@ -814,12 +807,11 @@ public: // map, set template auto - insert(const_iterator hint, value_type&& value) -> - typename std::enable_if::type; + insert(const_iterator hint, value_type&& value) -> std::enable_if_t; // multimap, multiset template - typename std::enable_if::type + std::enable_if_t insert(const_iterator /*hint*/, value_type&& value) { // VFALCO TODO Figure out how to utilize 'hint' @@ -828,9 +820,9 @@ public: // map, multimap template - typename std::enable_if< - maybe_map && std::is_constructible::value, - typename std::conditional>::type>::type + std::enable_if_t< + maybe_map && std::is_constructible_v, + std::conditional_t>> insert(P&& value) { return emplace(std::forward

(value)); @@ -838,9 +830,9 @@ public: // map, multimap template - typename std::enable_if< - maybe_map && std::is_constructible::value, - typename std::conditional>::type>::type + std::enable_if_t< + maybe_map && std::is_constructible_v, + std::conditional_t>> insert(const_iterator hint, P&& value) { return emplace_hint(hint, std::forward

(value)); @@ -863,23 +855,22 @@ public: // map, set template auto - emplace(Args&&... args) -> - typename std::enable_if>::type; + emplace(Args&&... args) -> std::enable_if_t>; // multiset, multimap template auto - emplace(Args&&... args) -> typename std::enable_if::type; + emplace(Args&&... args) -> std::enable_if_t; // map, set template auto - emplace_hint(const_iterator hint, Args&&... args) -> - typename std::enable_if>::type; + emplace_hint(const_iterator hint, Args&&... args) + -> std::enable_if_t>; // multiset, multimap template - typename std::enable_if::type + std::enable_if_t emplace_hint(const_iterator /*hint*/, Args&&... args) { // VFALCO TODO Figure out how to utilize 'hint' @@ -1163,12 +1154,12 @@ private: template < bool maybe_propagate = std::allocator_traits::propagate_on_container_swap::value> - typename std::enable_if::type + std::enable_if_t swap_data(aged_ordered_container& other) noexcept; template < bool maybe_propagate = std::allocator_traits::propagate_on_container_swap::value> - typename std::enable_if::type + std::enable_if_t swap_data(aged_ordered_container& other) noexcept; private: @@ -1395,7 +1386,7 @@ aged_ordered_container::opera template template -typename std::conditional::type& +std::conditional_t& aged_ordered_container::at(K const& k) { auto const iter(m_cont.find(k, std::cref(m_config.key_compare()))); @@ -1417,7 +1408,7 @@ aged_ordered_container::at(K template template -typename std::conditional::type& +std::conditional_t& aged_ordered_container::operator[]( Key const& key) { @@ -1436,7 +1427,7 @@ aged_ordered_container::opera template template -typename std::conditional::type& +std::conditional_t& aged_ordered_container::operator[](Key&& key) { typename cont_type::insert_commit_data d; @@ -1471,8 +1462,7 @@ template auto aged_ordered_container::insert( - value_type const& value) -> - typename std::enable_if>::type + value_type const& value) -> std::enable_if_t> { typename cont_type::insert_commit_data d; auto const result(m_cont.insert_check(extract(value), std::cref(m_config.key_compare()), d)); @@ -1491,7 +1481,7 @@ template auto aged_ordered_container::insert( - value_type const& value) -> typename std::enable_if::type + value_type const& value) -> std::enable_if_t { auto const before(m_cont.upper_bound(extract(value), std::cref(m_config.key_compare()))); element* const p(new_element(value)); @@ -1505,8 +1495,7 @@ template auto aged_ordered_container::insert( - value_type&& value) -> - typename std::enable_if>::type + value_type&& value) -> std::enable_if_t> { typename cont_type::insert_commit_data d; auto const result(m_cont.insert_check(extract(value), std::cref(m_config.key_compare()), d)); @@ -1525,7 +1514,7 @@ template auto aged_ordered_container::insert( - value_type&& value) -> typename std::enable_if::type + value_type&& value) -> std::enable_if_t { auto const before(m_cont.upper_bound(extract(value), std::cref(m_config.key_compare()))); element* const p(new_element(std::move(value))); @@ -1542,7 +1531,7 @@ template auto aged_ordered_container::insert( const_iterator hint, - value_type const& value) -> typename std::enable_if::type + value_type const& value) -> std::enable_if_t { typename cont_type::insert_commit_data d; auto const result( @@ -1563,7 +1552,7 @@ template auto aged_ordered_container::insert( const_iterator hint, - value_type&& value) -> typename std::enable_if::type + value_type&& value) -> std::enable_if_t { typename cont_type::insert_commit_data d; auto const result( @@ -1583,7 +1572,7 @@ template auto aged_ordered_container::emplace(Args&&... args) - -> typename std::enable_if>::type + -> std::enable_if_t> { // VFALCO NOTE Its unfortunate that we need to // construct element here @@ -1605,7 +1594,7 @@ template auto aged_ordered_container::emplace(Args&&... args) - -> typename std::enable_if::type + -> std::enable_if_t { element* const p(new_element(std::forward(args)...)); auto const before(m_cont.upper_bound(extract(p->value), std::cref(m_config.key_compare()))); @@ -1620,7 +1609,7 @@ template auto aged_ordered_container::emplace_hint( const_iterator hint, - Args&&... args) -> typename std::enable_if>::type + Args&&... args) -> std::enable_if_t> { // VFALCO NOTE Its unfortunate that we need to // construct element here @@ -1770,7 +1759,7 @@ aged_ordered_container::touch template template -typename std::enable_if::type +std::enable_if_t aged_ordered_container::swap_data( aged_ordered_container& other) noexcept { @@ -1781,7 +1770,7 @@ aged_ordered_container::swap_ template template -typename std::enable_if::type +std::enable_if_t aged_ordered_container::swap_data( aged_ordered_container& other) noexcept { diff --git a/include/xrpl/beast/container/detail/aged_unordered_container.h b/include/xrpl/beast/container/detail/aged_unordered_container.h index dfc853f019..15565bbada 100644 --- a/include/xrpl/beast/container/detail/aged_unordered_container.h +++ b/include/xrpl/beast/container/detail/aged_unordered_container.h @@ -62,8 +62,7 @@ template < class Clock = std::chrono::steady_clock, class Hash = std::hash, class KeyEqual = std::equal_to, - class Allocator = - std::allocator, Key>::type>> + class Allocator = std::allocator, Key>>> class aged_unordered_container { public: @@ -72,7 +71,7 @@ public: using duration = typename clock_type::duration; using key_type = Key; using mapped_type = T; - using value_type = typename std::conditional, Key>::type; + using value_type = std::conditional_t, Key>; using size_type = std::size_t; using difference_type = std::ptrdiff_t; @@ -115,8 +114,7 @@ private: template < class... Args, - class = - typename std::enable_if::value>::type> + class = std::enable_if_t>> element(time_point const& when_, Args&&... args) : value(std::forward(args)...), when(when_) { @@ -133,9 +131,7 @@ private: using argument_type = element; using result_type = size_t; - ValueHash() - { - } + ValueHash() = default; ValueHash(Hash const& h) : Hash(h) { @@ -169,9 +165,7 @@ private: using second_argument_type = element; using result_type = bool; - KeyValueEqual() - { - } + KeyValueEqual() = default; KeyValueEqual(KeyEqual const& keyEqual) : KeyEqual(keyEqual) { @@ -211,7 +205,7 @@ private: using list_type = typename boost::intrusive:: make_list>::type; - using cont_type = typename std::conditional< + using cont_type = std::conditional_t< IsMulti, typename boost::intrusive::make_unordered_multiset< element, @@ -224,7 +218,7 @@ private: boost::intrusive::constant_time_size, boost::intrusive::hash, boost::intrusive::equal, - boost::intrusive::cache_begin>::type>::type; + boost::intrusive::cache_begin>::type>; using bucket_type = typename cont_type::bucket_type; using bucket_traits = typename cont_type::bucket_traits; @@ -662,7 +656,7 @@ public: iterator iterator_to(value_type& value) { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return list.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); @@ -671,20 +665,17 @@ public: const_iterator iterator_to(value_type const& value) const { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return list.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); } - private: - chronological_t() - { - } - chronological_t(chronological_t const&) = delete; chronological_t(chronological_t&&) = delete; + chronological_t() = default; + private: friend class aged_unordered_container; list_type mutable list; } chronological; @@ -862,30 +853,30 @@ public: class K, bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> - typename std::conditional::type& + class = std::enable_if_t> + std::conditional_t& at(K const& k); template < class K, bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> + class = std::enable_if_t> typename std::conditional::type const& at(K const& k) const; template < bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> - typename std::conditional::type& + class = std::enable_if_t> + std::conditional_t& operator[](Key const& key); template < bool maybe_multi = IsMulti, bool maybe_map = IsMap, - class = typename std::enable_if::type> - typename std::conditional::type& + class = std::enable_if_t> + std::conditional_t& operator[](Key&& key); //-------------------------------------------------------------------------- @@ -933,7 +924,7 @@ public: iterator iterator_to(value_type& value) { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return m_cont.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); @@ -942,7 +933,7 @@ public: const_iterator iterator_to(value_type const& value) const { - static_assert(std::is_standard_layout::value, "must be standard layout"); + static_assert(std::is_standard_layout_v, "must be standard layout"); return m_cont.iterator_to(*reinterpret_cast( reinterpret_cast(&value) - ((std::size_t)std::addressof(((element*)0)->member)))); @@ -984,29 +975,27 @@ public: // map, set template auto - insert(value_type const& value) -> - typename std::enable_if>::type; + insert(value_type const& value) -> std::enable_if_t>; // multimap, multiset template auto - insert(value_type const& value) -> typename std::enable_if::type; + insert(value_type const& value) -> std::enable_if_t; // map, set template auto - insert(value_type&& value) -> - typename std::enable_if>::type; + insert(value_type&& value) + -> std::enable_if_t>; // multimap, multiset template auto - insert(value_type&& value) -> - typename std::enable_if::type; + insert(value_type&& value) -> std::enable_if_t; // map, set template - typename std::enable_if::type + std::enable_if_t insert(const_iterator /*hint*/, value_type const& value) { // Hint is ignored but we provide the interface so @@ -1016,7 +1005,7 @@ public: // multimap, multiset template - typename std::enable_if::type + std::enable_if_t insert(const_iterator /*hint*/, value_type const& value) { // VFALCO TODO The hint could be used to let @@ -1026,7 +1015,7 @@ public: // map, set template - typename std::enable_if::type + std::enable_if_t insert(const_iterator /*hint*/, value_type&& value) { // Hint is ignored but we provide the interface so @@ -1036,7 +1025,7 @@ public: // multimap, multiset template - typename std::enable_if::type + std::enable_if_t insert(const_iterator /*hint*/, value_type&& value) { // VFALCO TODO The hint could be used to let @@ -1046,9 +1035,9 @@ public: // map, multimap template - typename std::enable_if< - maybe_map && std::is_constructible::value, - typename std::conditional>::type>::type + std::enable_if_t< + maybe_map && std::is_constructible_v, + std::conditional_t>> insert(P&& value) { return emplace(std::forward

(value)); @@ -1056,9 +1045,9 @@ public: // map, multimap template - typename std::enable_if< - maybe_map && std::is_constructible::value, - typename std::conditional>::type>::type + std::enable_if_t< + maybe_map && std::is_constructible_v, + std::conditional_t>> insert(const_iterator hint, P&& value) { return emplace_hint(hint, std::forward

(value)); @@ -1080,23 +1069,22 @@ public: // set, map template auto - emplace(Args&&... args) -> - typename std::enable_if>::type; + emplace(Args&&... args) -> std::enable_if_t>; // multiset, multimap template auto - emplace(Args&&... args) -> typename std::enable_if::type; + emplace(Args&&... args) -> std::enable_if_t; // set, map template auto - emplace_hint(const_iterator /*hint*/, Args&&... args) -> - typename std::enable_if>::type; + emplace_hint(const_iterator /*hint*/, Args&&... args) + -> std::enable_if_t>; // multiset, multimap template - typename std::enable_if::type + std::enable_if_t emplace_hint(const_iterator /*hint*/, Args&&... args) { // VFALCO TODO The hint could be used for multi, to let @@ -1328,7 +1316,7 @@ public: class OtherHash, class OtherAllocator, bool maybe_multi = IsMulti> - typename std::enable_if::type + std::enable_if_t operator==(aged_unordered_container< false, OtherIsMap, @@ -1347,7 +1335,7 @@ public: class OtherHash, class OtherAllocator, bool maybe_multi = IsMulti> - typename std::enable_if::type + std::enable_if_t operator==(aged_unordered_container< true, OtherIsMap, @@ -1401,14 +1389,13 @@ private: // map, set template auto - insert_unchecked(value_type const& value) -> - typename std::enable_if>::type; + insert_unchecked(value_type const& value) + -> std::enable_if_t>; // multimap, multiset template auto - insert_unchecked(value_type const& value) -> - typename std::enable_if::type; + insert_unchecked(value_type const& value) -> std::enable_if_t; template void @@ -1449,7 +1436,7 @@ private: template < bool maybe_propagate = std::allocator_traits::propagate_on_container_swap::value> - typename std::enable_if::type + std::enable_if_t swap_data(aged_unordered_container& other) noexcept { std::swap(m_config.key_compare(), other.m_config.key_compare()); @@ -1459,7 +1446,7 @@ private: template < bool maybe_propagate = std::allocator_traits::propagate_on_container_swap::value> - typename std::enable_if::type + std::enable_if_t swap_data(aged_unordered_container& other) noexcept { std::swap(m_config.key_compare(), other.m_config.key_compare()); @@ -2114,7 +2101,7 @@ template < class KeyEqual, class Allocator> template -typename std::conditional::type& +std::conditional_t& aged_unordered_container::at(K const& k) { auto const iter( @@ -2155,7 +2142,7 @@ template < class KeyEqual, class Allocator> template -typename std::conditional::type& +std::conditional_t& aged_unordered_container::operator[]( Key const& key) { @@ -2184,7 +2171,7 @@ template < class KeyEqual, class Allocator> template -typename std::conditional::type& +std::conditional_t& aged_unordered_container::operator[]( Key&& key) { @@ -2239,8 +2226,7 @@ template < template auto aged_unordered_container::insert( - value_type const& value) -> - typename std::enable_if>::type + value_type const& value) -> std::enable_if_t> { maybe_rehash(1); typename cont_type::insert_commit_data d; @@ -2272,7 +2258,7 @@ template < template auto aged_unordered_container::insert( - value_type const& value) -> typename std::enable_if::type + value_type const& value) -> std::enable_if_t { maybe_rehash(1); element* const p(new_element(value)); @@ -2294,8 +2280,7 @@ template < template auto aged_unordered_container::insert( - value_type&& value) -> - typename std::enable_if>::type + value_type&& value) -> std::enable_if_t> { maybe_rehash(1); typename cont_type::insert_commit_data d; @@ -2327,7 +2312,7 @@ template < template auto aged_unordered_container::insert( - value_type&& value) -> typename std::enable_if::type + value_type&& value) -> std::enable_if_t { maybe_rehash(1); element* const p(new_element(std::move(value))); @@ -2350,7 +2335,7 @@ template < template auto aged_unordered_container::emplace( - Args&&... args) -> typename std::enable_if>::type + Args&&... args) -> std::enable_if_t> { maybe_rehash(1); // VFALCO NOTE Its unfortunate that we need to @@ -2415,7 +2400,7 @@ template < template auto aged_unordered_container::emplace( - Args&&... args) -> typename std::enable_if::type + Args&&... args) -> std::enable_if_t { maybe_rehash(1); element* const p(new_element(std::forward(args)...)); @@ -2438,7 +2423,7 @@ template auto aged_unordered_container::emplace_hint( const_iterator /*hint*/, - Args&&... args) -> typename std::enable_if>::type + Args&&... args) -> std::enable_if_t> { maybe_rehash(1); // VFALCO NOTE Its unfortunate that we need to @@ -2590,7 +2575,7 @@ template < class OtherHash, class OtherAllocator, bool maybe_multi> -typename std::enable_if::type +std::enable_if_t aged_unordered_container::operator==( aged_unordered_container< false, @@ -2630,7 +2615,7 @@ template < class OtherHash, class OtherAllocator, bool maybe_multi> -typename std::enable_if::type +std::enable_if_t aged_unordered_container::operator==( aged_unordered_container< true, @@ -2677,8 +2662,8 @@ template < template auto aged_unordered_container:: - insert_unchecked(value_type const& value) -> - typename std::enable_if>::type + insert_unchecked(value_type const& value) + -> std::enable_if_t> { typename cont_type::insert_commit_data d; auto const result(m_cont.insert_check( @@ -2709,8 +2694,7 @@ template < template auto aged_unordered_container:: - insert_unchecked(value_type const& value) -> - typename std::enable_if::type + insert_unchecked(value_type const& value) -> std::enable_if_t { element* const p(new_element(value)); chronological.list.push_back(*p); diff --git a/include/xrpl/beast/container/detail/empty_base_optimization.h b/include/xrpl/beast/container/detail/empty_base_optimization.h index 21a9d13ce8..337f3cf434 100644 --- a/include/xrpl/beast/container/detail/empty_base_optimization.h +++ b/include/xrpl/beast/container/detail/empty_base_optimization.h @@ -11,12 +11,11 @@ #include #include -namespace beast { -namespace detail { +namespace beast::detail { template struct is_empty_base_optimization_derived - : std::integral_constant::value && !boost::is_final::value> + : std::integral_constant && !boost::is_final::value> { }; @@ -86,5 +85,4 @@ public: } }; -} // namespace detail -} // namespace beast +} // namespace beast::detail diff --git a/include/xrpl/beast/core/List.h b/include/xrpl/beast/core/List.h index 560467c8dd..ab88eae738 100644 --- a/include/xrpl/beast/core/List.h +++ b/include/xrpl/beast/core/List.h @@ -16,7 +16,7 @@ struct CopyConst { explicit CopyConst() = default; - using type = typename std::remove_const::type; + using type = std::remove_const_t; }; template @@ -35,9 +35,11 @@ struct CopyConst template class ListNode { -private: + ListNode() = default; + using value_type = T; + friend T; friend class List; template diff --git a/include/xrpl/beast/core/LockFreeStack.h b/include/xrpl/beast/core/LockFreeStack.h index cf512725fe..b1e911a7c5 100644 --- a/include/xrpl/beast/core/LockFreeStack.h +++ b/include/xrpl/beast/core/LockFreeStack.h @@ -13,18 +13,16 @@ class LockFreeStackIterator { protected: using Node = typename Container::Node; - using NodePtr = typename std::conditional::type; + using NodePtr = std::conditional_t; public: using iterator_category = std::forward_iterator_tag; using value_type = typename Container::value_type; using difference_type = typename Container::difference_type; - using pointer = typename std:: - conditional::type; - using reference = typename std::conditional< - IsConst, - typename Container::const_reference, - typename Container::reference>::type; + using pointer = + std::conditional_t; + using reference = std:: + conditional_t; LockFreeStackIterator() : m_node() { diff --git a/include/xrpl/beast/core/SemanticVersion.h b/include/xrpl/beast/core/SemanticVersion.h index f839ef8c53..244783234c 100644 --- a/include/xrpl/beast/core/SemanticVersion.h +++ b/include/xrpl/beast/core/SemanticVersion.h @@ -40,12 +40,12 @@ public: std::string print() const; - inline bool + bool isRelease() const noexcept { return preReleaseIdentifiers.empty(); } - inline bool + bool isPreRelease() const noexcept { return !isRelease(); diff --git a/include/xrpl/beast/hash/hash_append.h b/include/xrpl/beast/hash/hash_append.h index d456bb3a73..3161ab3ce2 100644 --- a/include/xrpl/beast/hash/hash_append.h +++ b/include/xrpl/beast/hash/hash_append.h @@ -69,7 +69,7 @@ template struct is_uniquely_represented : public std::integral_constant< bool, - std::is_integral::value || std::is_enum::value || std::is_pointer::value> + std::is_integral_v || std::is_enum_v || std::is_pointer_v> { explicit is_uniquely_represented() = default; }; @@ -203,13 +203,14 @@ template inline std::enable_if_t::value> hash_append(Hasher& h, T const& t) noexcept { - h(std::addressof(t), sizeof(t)); + // NOLINTNEXTLINE(bugprone-sizeof-expression) + h(static_cast(std::addressof(t)), sizeof(t)); } template inline std::enable_if_t< !is_contiguously_hashable::value && - (std::is_integral::value || std::is_pointer::value || std::is_enum::value)> + (std::is_integral_v || std::is_pointer_v || std::is_enum_v)> hash_append(Hasher& h, T t) noexcept { detail::reverse_bytes(t); @@ -217,7 +218,7 @@ hash_append(Hasher& h, T t) noexcept } template -inline std::enable_if_t::value> +inline std::enable_if_t> hash_append(Hasher& h, T t) noexcept { if (t == 0) diff --git a/include/xrpl/beast/hash/xxhasher.h b/include/xrpl/beast/hash/xxhasher.h index 7c6ae894fc..5cd060e465 100644 --- a/include/xrpl/beast/hash/xxhasher.h +++ b/include/xrpl/beast/hash/xxhasher.h @@ -64,7 +64,7 @@ private: void flushToState(void const* data, std::size_t len) { - if (!state_) + if (state_ == nullptr) { state_ = allocState(); if (seed_.has_value()) @@ -78,7 +78,7 @@ private: } XXH3_64bits_update(state_, readBuffer_.data(), readBuffer_.size()); resetBuffers(); - if (data && len) + if ((data != nullptr) && (len != 0u)) { XXH3_64bits_update(state_, data, len); } @@ -87,22 +87,18 @@ private: result_type retrieveHash() { - if (state_) + if (state_ != nullptr) { flushToState(nullptr, 0); return XXH3_64bits_digest(state_); } - else + + if (seed_.has_value()) { - if (seed_.has_value()) - { - return XXH3_64bits_withSeed(readBuffer_.data(), readBuffer_.size(), *seed_); - } - else - { - return XXH3_64bits(readBuffer_.data(), readBuffer_.size()); - } + return XXH3_64bits_withSeed(readBuffer_.data(), readBuffer_.size(), *seed_); } + + return XXH3_64bits(readBuffer_.data(), readBuffer_.size()); } public: @@ -119,19 +115,19 @@ public: ~xxhasher() noexcept { - if (state_) + if (state_ != nullptr) { XXH3_freeState(state_); } } - template ::value>* = nullptr> + template >* = nullptr> explicit xxhasher(Seed seed) : seed_(seed) { resetBuffers(); } - template ::value>* = nullptr> + template >* = nullptr> xxhasher(Seed seed, Seed) : seed_(seed) { resetBuffers(); diff --git a/include/xrpl/beast/insight/Collector.h b/include/xrpl/beast/insight/Collector.h index 89aa8c1cb5..1d18c7e15c 100644 --- a/include/xrpl/beast/insight/Collector.h +++ b/include/xrpl/beast/insight/Collector.h @@ -8,8 +8,7 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { /** Interface for a manager that allows collection of metrics. @@ -117,5 +116,4 @@ public: /** @} */ }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Counter.h b/include/xrpl/beast/insight/Counter.h index f6722c4e03..c5b8178c2d 100644 --- a/include/xrpl/beast/insight/Counter.h +++ b/include/xrpl/beast/insight/Counter.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { /** A metric for measuring an integral value. @@ -23,9 +22,7 @@ public: /** Create a null metric. A null metric reports no information. */ - Counter() - { - } + Counter() = default; /** Create the metric reference the specified implementation. Normally this won't be called directly. Instead, call the appropriate @@ -91,5 +88,4 @@ private: std::shared_ptr m_impl; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/CounterImpl.h b/include/xrpl/beast/insight/CounterImpl.h index 199315dcb8..8b16681759 100644 --- a/include/xrpl/beast/insight/CounterImpl.h +++ b/include/xrpl/beast/insight/CounterImpl.h @@ -3,8 +3,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { class Counter; @@ -18,5 +17,4 @@ public: increment(value_type amount) = 0; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Event.h b/include/xrpl/beast/insight/Event.h index bc0c0dd403..ada488f134 100644 --- a/include/xrpl/beast/insight/Event.h +++ b/include/xrpl/beast/insight/Event.h @@ -5,8 +5,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { /** A metric for reporting event timing. @@ -25,9 +24,7 @@ public: /** Create a null metric. A null metric reports no information. */ - Event() - { - } + Event() = default; /** Create the metric reference the specified implementation. Normally this won't be called directly. Instead, call the appropriate @@ -58,5 +55,4 @@ private: std::shared_ptr m_impl; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/EventImpl.h b/include/xrpl/beast/insight/EventImpl.h index abd9741511..ede649d195 100644 --- a/include/xrpl/beast/insight/EventImpl.h +++ b/include/xrpl/beast/insight/EventImpl.h @@ -3,8 +3,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { class Event; @@ -18,5 +17,4 @@ public: notify(value_type const& value) = 0; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Gauge.h b/include/xrpl/beast/insight/Gauge.h index f2a88deda2..b75060face 100644 --- a/include/xrpl/beast/insight/Gauge.h +++ b/include/xrpl/beast/insight/Gauge.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { /** A metric for measuring an integral value. @@ -25,9 +24,7 @@ public: /** Create a null metric. A null metric reports no information. */ - Gauge() - { - } + Gauge() = default; /** Create the metric reference the specified implementation. Normally this won't be called directly. Instead, call the appropriate @@ -121,5 +118,4 @@ private: std::shared_ptr m_impl; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/GaugeImpl.h b/include/xrpl/beast/insight/GaugeImpl.h index 29afbe6a4d..3b8afda5e7 100644 --- a/include/xrpl/beast/insight/GaugeImpl.h +++ b/include/xrpl/beast/insight/GaugeImpl.h @@ -3,8 +3,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { class Gauge; @@ -21,5 +20,4 @@ public: increment(difference_type amount) = 0; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Group.h b/include/xrpl/beast/insight/Group.h index c85fd1bfb6..2b0d692f25 100644 --- a/include/xrpl/beast/insight/Group.h +++ b/include/xrpl/beast/insight/Group.h @@ -5,8 +5,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { /** A collector front-end that manages a group of metrics. */ class Group : public Collector @@ -19,5 +18,4 @@ public: name() const = 0; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Groups.h b/include/xrpl/beast/insight/Groups.h index 8ac93454d3..abc1aa004b 100644 --- a/include/xrpl/beast/insight/Groups.h +++ b/include/xrpl/beast/insight/Groups.h @@ -6,8 +6,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { /** A container for managing a set of metric groups. */ class Groups @@ -32,5 +31,4 @@ public: std::unique_ptr make_Groups(Collector::ptr const& collector); -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Hook.h b/include/xrpl/beast/insight/Hook.h index ea511862d9..d51a5d2300 100644 --- a/include/xrpl/beast/insight/Hook.h +++ b/include/xrpl/beast/insight/Hook.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { /** A reference to a handler for performing polled collection. */ class Hook final @@ -14,9 +13,7 @@ public: /** Create a null hook. A null hook has no associated handler. */ - Hook() - { - } + Hook() = default; /** Create a hook referencing the specified implementation. Normally this won't be called directly. Instead, call the appropriate @@ -37,5 +34,4 @@ private: std::shared_ptr m_impl; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/HookImpl.h b/include/xrpl/beast/insight/HookImpl.h index 18208b554a..9a503ba0d2 100644 --- a/include/xrpl/beast/insight/HookImpl.h +++ b/include/xrpl/beast/insight/HookImpl.h @@ -3,8 +3,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { class HookImpl : public std::enable_shared_from_this { @@ -14,5 +13,4 @@ public: virtual ~HookImpl() = 0; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/Meter.h b/include/xrpl/beast/insight/Meter.h index 193a1f1003..7685a0ec90 100644 --- a/include/xrpl/beast/insight/Meter.h +++ b/include/xrpl/beast/insight/Meter.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { /** A metric for measuring an integral value. @@ -22,9 +21,7 @@ public: /** Create a null metric. A null metric reports no information. */ - Meter() - { - } + Meter() = default; /** Create the metric reference the specified implementation. Normally this won't be called directly. Instead, call the appropriate @@ -76,5 +73,4 @@ private: std::shared_ptr m_impl; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/MeterImpl.h b/include/xrpl/beast/insight/MeterImpl.h index 22efdbe647..2220650131 100644 --- a/include/xrpl/beast/insight/MeterImpl.h +++ b/include/xrpl/beast/insight/MeterImpl.h @@ -3,8 +3,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { class Meter; @@ -18,5 +17,4 @@ public: increment(value_type amount) = 0; }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/NullCollector.h b/include/xrpl/beast/insight/NullCollector.h index 1d16a11e17..e6404c8f2c 100644 --- a/include/xrpl/beast/insight/NullCollector.h +++ b/include/xrpl/beast/insight/NullCollector.h @@ -2,8 +2,7 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { /** A Collector which does not collect metrics. */ class NullCollector : public Collector @@ -15,5 +14,4 @@ public: New(); }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/insight/StatsDCollector.h b/include/xrpl/beast/insight/StatsDCollector.h index ab09967483..161f351763 100644 --- a/include/xrpl/beast/insight/StatsDCollector.h +++ b/include/xrpl/beast/insight/StatsDCollector.h @@ -4,8 +4,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { /** A Collector that reports metrics to a StatsD server. Reference: @@ -25,5 +24,4 @@ public: New(IP::Endpoint const& address, std::string const& prefix, Journal journal); }; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/include/xrpl/beast/net/IPAddress.h b/include/xrpl/beast/net/IPAddress.h index 2ac4c3bc43..277a43e5d8 100644 --- a/include/xrpl/beast/net/IPAddress.h +++ b/include/xrpl/beast/net/IPAddress.h @@ -70,9 +70,13 @@ hash_append(Hasher& h, beast::IP::Address const& addr) noexcept { using beast::hash_append; if (addr.is_v4()) + { hash_append(h, addr.to_v4().to_bytes()); + } else if (addr.is_v6()) + { hash_append(h, addr.to_v6().to_bytes()); + } else { // LCOV_EXCL_START diff --git a/include/xrpl/beast/net/IPAddressConversion.h b/include/xrpl/beast/net/IPAddressConversion.h index 2ebd0a6eef..4e0328c113 100644 --- a/include/xrpl/beast/net/IPAddressConversion.h +++ b/include/xrpl/beast/net/IPAddressConversion.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace IP { +namespace beast::IP { /** Convert to Endpoint. The port is set to zero. @@ -27,8 +26,7 @@ to_asio_address(Endpoint const& endpoint); boost::asio::ip::tcp::endpoint to_asio_endpoint(Endpoint const& endpoint); -} // namespace IP -} // namespace beast +} // namespace beast::IP namespace beast { diff --git a/include/xrpl/beast/net/IPAddressV4.h b/include/xrpl/beast/net/IPAddressV4.h index 0d586716d8..15bb959f49 100644 --- a/include/xrpl/beast/net/IPAddressV4.h +++ b/include/xrpl/beast/net/IPAddressV4.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace IP { +namespace beast::IP { using AddressV4 = boost::asio::ip::address_v4; @@ -23,5 +22,4 @@ is_public(AddressV4 const& addr); char get_class(AddressV4 const& address); -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/include/xrpl/beast/net/IPAddressV6.h b/include/xrpl/beast/net/IPAddressV6.h index 2f9dedb748..83ac6d4dab 100644 --- a/include/xrpl/beast/net/IPAddressV6.h +++ b/include/xrpl/beast/net/IPAddressV6.h @@ -4,8 +4,7 @@ #include -namespace beast { -namespace IP { +namespace beast::IP { using AddressV6 = boost::asio::ip::address_v6; @@ -17,5 +16,4 @@ is_private(AddressV6 const& addr); bool is_public(AddressV6 const& addr); -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/include/xrpl/beast/net/IPEndpoint.h b/include/xrpl/beast/net/IPEndpoint.h index 7a0394cbd1..88f3d7669b 100644 --- a/include/xrpl/beast/net/IPEndpoint.h +++ b/include/xrpl/beast/net/IPEndpoint.h @@ -8,8 +8,7 @@ #include #include -namespace beast { -namespace IP { +namespace beast::IP { using Port = std::uint16_t; @@ -21,7 +20,7 @@ public: Endpoint(); /** Create an endpoint from the address and optional port. */ - explicit Endpoint(Address const& addr, Port port = 0); + explicit Endpoint(Address addr, Port port = 0); /** Create an Endpoint from a string. If the port is omitted, the endpoint will have a zero port. @@ -69,12 +68,12 @@ public: { return m_addr.is_v6(); } - AddressV4 const + AddressV4 to_v4() const { return m_addr.to_v4(); } - AddressV6 const + AddressV6 to_v6() const { return m_addr.to_v6(); @@ -184,8 +183,7 @@ operator<<(OutputStream& os, Endpoint const& endpoint) std::istream& operator>>(std::istream& is, Endpoint& endpoint); -} // namespace IP -} // namespace beast +} // namespace beast::IP //------------------------------------------------------------------------------ diff --git a/include/xrpl/beast/rfc2616.h b/include/xrpl/beast/rfc2616.h index b19c2c511a..7278119c3b 100644 --- a/include/xrpl/beast/rfc2616.h +++ b/include/xrpl/beast/rfc2616.h @@ -12,8 +12,7 @@ #include #include -namespace beast { -namespace rfc2616 { +namespace beast::rfc2616 { namespace detail { @@ -53,8 +52,9 @@ is_white(char c) case '\t': case '\v': return true; + default: + return false; }; - return false; } template @@ -349,8 +349,10 @@ bool token_in_list(boost::string_ref const& value, boost::string_ref const& token) { for (auto const& item : make_list(value)) + { if (ci_equal(item, token)) return true; + } return false; } @@ -359,11 +361,12 @@ bool is_keep_alive(boost::beast::http::message const& m) { if (m.version() <= 10) + { return boost::beast::http::token_list{m[boost::beast::http::field::connection]}.exists( "keep-alive"); + } return !boost::beast::http::token_list{m[boost::beast::http::field::connection]}.exists( "close"); } -} // namespace rfc2616 -} // namespace beast +} // namespace beast::rfc2616 diff --git a/include/xrpl/beast/test/yield_to.h b/include/xrpl/beast/test/yield_to.h index 918ca3c0cc..e8db9e5864 100644 --- a/include/xrpl/beast/test/yield_to.h +++ b/include/xrpl/beast/test/yield_to.h @@ -15,8 +15,7 @@ #include #include -namespace beast { -namespace test { +namespace beast::test { /** Mix-in to support tests using asio coroutines. @@ -44,7 +43,7 @@ public: : work_(boost::asio::make_work_guard(ios_)) { threads_.reserve(concurrency); - while (concurrency--) + while ((concurrency--) != 0u) threads_.emplace_back([&] { ios_.run(); }); } @@ -125,5 +124,4 @@ enable_yield_to::spawn(F0&& f, FN&&... fn) spawn(fn...); } -} // namespace test -} // namespace beast +} // namespace beast::test diff --git a/include/xrpl/beast/type_name.h b/include/xrpl/beast/type_name.h index 99b90d1757..d12f9c4b90 100644 --- a/include/xrpl/beast/type_name.h +++ b/include/xrpl/beast/type_name.h @@ -15,7 +15,7 @@ template std::string type_name() { - using TR = typename std::remove_reference::type; + using TR = std::remove_reference_t; std::string name = typeid(TR).name(); @@ -27,14 +27,18 @@ type_name() } #endif - if (std::is_const::value) + if (std::is_const_v) name += " const"; - if (std::is_volatile::value) + if (std::is_volatile_v) name += " volatile"; - if (std::is_lvalue_reference::value) + if (std::is_lvalue_reference_v) + { name += "&"; - else if (std::is_rvalue_reference::value) + } + else if (std::is_rvalue_reference_v) + { name += "&&"; + } return name; } diff --git a/include/xrpl/beast/unit_test/amount.h b/include/xrpl/beast/unit_test/amount.h index aedced15a7..ae1dd8fe31 100644 --- a/include/xrpl/beast/unit_test/amount.h +++ b/include/xrpl/beast/unit_test/amount.h @@ -8,8 +8,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { /** Utility for producing nicely composed output of amounts with units. */ class amount @@ -42,5 +41,4 @@ operator<<(std::ostream& s, amount const& t) return s; } -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/detail/const_container.h b/include/xrpl/beast/unit_test/detail/const_container.h index 7c52e0e1ec..6a32c61b61 100644 --- a/include/xrpl/beast/unit_test/detail/const_container.h +++ b/include/xrpl/beast/unit_test/detail/const_container.h @@ -4,9 +4,7 @@ #pragma once -namespace beast { -namespace unit_test { -namespace detail { +namespace beast::unit_test::detail { /** Adapter to constrain a container interface. The interface allows for limited read only operations. Derived classes @@ -82,6 +80,4 @@ public: /** @} */ }; -} // namespace detail -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test::detail diff --git a/include/xrpl/beast/unit_test/global_suites.h b/include/xrpl/beast/unit_test/global_suites.h index db5fee35dd..ca33ddb11c 100644 --- a/include/xrpl/beast/unit_test/global_suites.h +++ b/include/xrpl/beast/unit_test/global_suites.h @@ -6,8 +6,7 @@ #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { namespace detail { @@ -42,5 +41,4 @@ global_suites() return detail::global_suites(); } -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/match.h b/include/xrpl/beast/unit_test/match.h index 38816bb5c7..084e2bc464 100644 --- a/include/xrpl/beast/unit_test/match.h +++ b/include/xrpl/beast/unit_test/match.h @@ -8,8 +8,7 @@ #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { // Predicate for implementing matches class selector @@ -163,5 +162,4 @@ match_library(std::string const& name) return selector(selector::library, name); } -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/recorder.h b/include/xrpl/beast/unit_test/recorder.h index 8f956fda88..f101d5318f 100644 --- a/include/xrpl/beast/unit_test/recorder.h +++ b/include/xrpl/beast/unit_test/recorder.h @@ -7,8 +7,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { /** A test runner that stores the results. */ class recorder : public runner @@ -29,49 +28,48 @@ public: } private: - virtual void + void on_suite_begin(suite_info const& info) override { m_suite = suite_results(info.full_name()); } - virtual void + void on_suite_end() override { m_results.insert(std::move(m_suite)); } - virtual void + void on_case_begin(std::string const& name) override { m_case = case_results(name); } - virtual void + void on_case_end() override { - if (m_case.tests.size() > 0) + if (!m_case.tests.empty()) m_suite.insert(std::move(m_case)); } - virtual void + void on_pass() override { m_case.tests.pass(); } - virtual void + void on_fail(std::string const& reason) override { m_case.tests.fail(reason); } - virtual void + void on_log(std::string const& s) override { m_case.log.insert(s); } }; -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/reporter.h b/include/xrpl/beast/unit_test/reporter.h index 63ad90ff7c..066d628ea2 100644 --- a/include/xrpl/beast/unit_test/reporter.h +++ b/include/xrpl/beast/unit_test/reporter.h @@ -18,8 +18,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { namespace detail { @@ -86,7 +85,7 @@ public: reporter& operator=(reporter const&) = delete; - ~reporter(); + ~reporter() override; explicit reporter(std::ostream& os = std::cout); @@ -94,42 +93,42 @@ private: static std::string fmtdur(typename clock_type::duration const& d); - virtual void + void on_suite_begin(suite_info const& info) override; - virtual void + void on_suite_end() override; - virtual void + void on_case_begin(std::string const& name) override; - virtual void + void on_case_end() override; - virtual void + void on_pass() override; - virtual void + void on_fail(std::string const& reason) override; - virtual void + void on_log(std::string const& s) override; }; //------------------------------------------------------------------------------ -template +template void -reporter<_>::suite_results::add(case_results const& r) +reporter::suite_results::add(case_results const& r) { ++cases; total += r.total; failed += r.failed; } -template +template void -reporter<_>::results::add(suite_results const& r) +reporter::results::add(suite_results const& r) { ++suites; total += r.total; @@ -160,13 +159,13 @@ reporter<_>::results::add(suite_results const& r) //------------------------------------------------------------------------------ -template -reporter<_>::reporter(std::ostream& os) : os_(os) +template +reporter::reporter(std::ostream& os) : os_(os) { } -template -reporter<_>::~reporter() +template +reporter::~reporter() { if (results_.top.size() > 0) { @@ -180,9 +179,9 @@ reporter<_>::~reporter() << amount{results_.failed, "failure"} << std::endl; } -template +template std::string -reporter<_>::fmtdur(typename clock_type::duration const& d) +reporter::fmtdur(typename clock_type::duration const& d) { using namespace std::chrono; auto const ms = duration_cast(d); @@ -193,46 +192,46 @@ reporter<_>::fmtdur(typename clock_type::duration const& d) return ss.str(); } -template +template void -reporter<_>::on_suite_begin(suite_info const& info) +reporter::on_suite_begin(suite_info const& info) { suite_results_ = suite_results{info.full_name()}; } -template +template void -reporter<_>::on_suite_end() +reporter::on_suite_end() { results_.add(suite_results_); } -template +template void -reporter<_>::on_case_begin(std::string const& name) +reporter::on_case_begin(std::string const& name) { case_results_ = case_results(name); os_ << suite_results_.name << (case_results_.name.empty() ? "" : (" " + case_results_.name)) << std::endl; } -template +template void -reporter<_>::on_case_end() +reporter::on_case_end() { suite_results_.add(case_results_); } -template +template void -reporter<_>::on_pass() +reporter::on_pass() { ++case_results_.total; } -template +template void -reporter<_>::on_fail(std::string const& reason) +reporter::on_fail(std::string const& reason) { ++case_results_.failed; ++case_results_.total; @@ -240,9 +239,9 @@ reporter<_>::on_fail(std::string const& reason) << std::endl; } -template +template void -reporter<_>::on_log(std::string const& s) +reporter::on_log(std::string const& s) { os_ << s; } @@ -251,5 +250,4 @@ reporter<_>::on_log(std::string const& s) using reporter = detail::reporter<>; -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/results.h b/include/xrpl/beast/unit_test/results.h index b8a8e2aadf..5607071729 100644 --- a/include/xrpl/beast/unit_test/results.h +++ b/include/xrpl/beast/unit_test/results.h @@ -7,10 +7,10 @@ #include #include +#include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { /** Holds a set of test condition outcomes in a testcase. */ class case_results @@ -23,7 +23,7 @@ public: { } - test(bool pass_, std::string const& reason_) : pass(pass_), reason(reason_) + test(bool pass_, std::string reason_) : pass(pass_), reason(std::move(reason_)) { } @@ -38,9 +38,7 @@ private: std::size_t failed_{0}; public: - tests_t() - { - } + tests_t() = default; /** Returns the total number of test conditions. */ std::size_t @@ -86,7 +84,7 @@ private: std::string name_; public: - explicit case_results(std::string const& name = "") : name_(name) + explicit case_results(std::string name = "") : name_(std::move(name)) { } @@ -115,7 +113,7 @@ private: std::size_t failed_ = 0; public: - explicit suite_results(std::string const& name = "") : name_(name) + explicit suite_results(std::string name = "") : name_(std::move(name)) { } @@ -145,9 +143,9 @@ public: void insert(case_results&& r) { - cont().emplace_back(std::move(r)); total_ += r.tests.total(); failed_ += r.tests.failed(); + cont().emplace_back(std::move(r)); } void @@ -172,9 +170,7 @@ private: std::size_t failed_{0}; public: - results() - { - } + results() = default; /** Returns the total number of test cases. */ std::size_t @@ -219,5 +215,4 @@ public: /** @} */ }; -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/runner.h b/include/xrpl/beast/unit_test/runner.h index c8a6956732..3443308675 100644 --- a/include/xrpl/beast/unit_test/runner.h +++ b/include/xrpl/beast/unit_test/runner.h @@ -11,8 +11,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { /** Unit test runner interface. @@ -198,8 +197,10 @@ runner::run_if(FwdIter first, FwdIter last, Pred pred) { bool failed(false); for (; first != last; ++first) + { if (pred(*first)) failed = run(*first) || failed; + } return failed; } @@ -219,8 +220,10 @@ runner::run_each_if(SequenceContainer const& c, Pred pred) { bool failed(false); for (auto const& s : c) + { if (pred(s)) failed = run(s) || failed; + } return failed; } @@ -273,5 +276,4 @@ runner::log(std::string const& s) on_log(s); } -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/suite.h b/include/xrpl/beast/unit_test/suite.h index fa5157e126..1719c519cf 100644 --- a/include/xrpl/beast/unit_test/suite.h +++ b/include/xrpl/beast/unit_test/suite.h @@ -14,8 +14,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { namespace detail { @@ -36,7 +35,7 @@ make_reason(String const& reason, char const* file, int line) } // namespace detail -class thread; +class Thread; enum abort_t { no_abort_on_fail, abort_on_fail }; @@ -75,7 +74,7 @@ private: { } - ~log_buf() + ~log_buf() override { sync(); } @@ -295,7 +294,7 @@ public: } private: - friend class thread; + friend class Thread; static suite** p_this_suite() @@ -309,7 +308,7 @@ private: run() = 0; void - propagate_abort(); + propagate_abort() const; template void @@ -486,9 +485,13 @@ suite::unexpected(Condition shouldBeFalse, String const& reason) { bool const b = static_cast(shouldBeFalse); if (!b) + { pass(); + } else + { fail(reason); + } return !b; } @@ -522,7 +525,7 @@ suite::fail(String const& reason, char const* file, int line) } inline void -suite::propagate_abort() +suite::propagate_abort() const { if (abort_ && aborted_) BOOST_THROW_EXCEPTION(abort_exception()); @@ -538,7 +541,7 @@ suite::run(runner& r) { run(); } - catch (abort_exception const&) + catch (abort_exception const&) // NOLINT(bugprone-empty-catch) { // ends the suite } @@ -569,8 +572,7 @@ suite::run(runner& r) ((cond) ? (pass(), true) : (fail((reason), __FILE__, __LINE__), false)) #endif -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test //------------------------------------------------------------------------------ diff --git a/include/xrpl/beast/unit_test/suite_info.h b/include/xrpl/beast/unit_test/suite_info.h index 0ffb330422..e7fa80b70e 100644 --- a/include/xrpl/beast/unit_test/suite_info.h +++ b/include/xrpl/beast/unit_test/suite_info.h @@ -9,8 +9,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { class runner; @@ -110,5 +109,4 @@ make_suite_info( }); } -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/suite_list.h b/include/xrpl/beast/unit_test/suite_list.h index bbd2914c45..deffbdfe84 100644 --- a/include/xrpl/beast/unit_test/suite_list.h +++ b/include/xrpl/beast/unit_test/suite_list.h @@ -13,8 +13,7 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { /// A container of test suites. class suite_list : public detail::const_container> @@ -62,5 +61,4 @@ suite_list::insert( cont().emplace(make_suite_info(name, module, library, manual, priority)); } -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/unit_test/thread.h b/include/xrpl/beast/unit_test/thread.h index b49f8ed36e..cc12380b0d 100644 --- a/include/xrpl/beast/unit_test/thread.h +++ b/include/xrpl/beast/unit_test/thread.h @@ -10,11 +10,10 @@ #include #include -namespace beast { -namespace unit_test { +namespace beast::unit_test { /** Replacement for std::thread that handles exceptions in unit tests. */ -class thread +class Thread { private: suite* s_ = nullptr; @@ -24,17 +23,17 @@ public: using id = std::thread::id; using native_handle_type = std::thread::native_handle_type; - thread() = default; - thread(thread const&) = delete; - thread& - operator=(thread const&) = delete; + Thread() = default; + Thread(Thread const&) = delete; + Thread& + operator=(Thread const&) = delete; - thread(thread&& other) : s_(other.s_), t_(std::move(other.t_)) + Thread(Thread&& other) : s_(other.s_), t_(std::move(other.t_)) { } - thread& - operator=(thread&& other) + Thread& + operator=(Thread&& other) { s_ = other.s_; t_ = std::move(other.t_); @@ -42,10 +41,10 @@ public: } template - explicit thread(suite& s, F&& f, Args&&... args) : s_(&s) + explicit Thread(suite& s, F&& f, Args&&... args) : s_(&s) { std::function b = std::bind(std::forward(f), std::forward(args)...); - t_ = std::thread(&thread::run, this, std::move(b)); + t_ = std::thread(&Thread::run, this, std::move(b)); } bool @@ -80,7 +79,7 @@ public: } void - swap(thread& other) + swap(Thread& other) { std::swap(s_, other.s_); std::swap(t_, other.t_); @@ -94,7 +93,7 @@ private: { f(); } - catch (suite::abort_exception const&) + catch (suite::abort_exception const&) // NOLINT(bugprone-empty-catch) { } catch (std::exception const& e) @@ -108,5 +107,4 @@ private: } }; -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/include/xrpl/beast/utility/Journal.h b/include/xrpl/beast/utility/Journal.h index 2ac5050b2d..975169cf5f 100644 --- a/include/xrpl/beast/utility/Journal.h +++ b/include/xrpl/beast/utility/Journal.h @@ -13,13 +13,13 @@ enum Severity { kAll = 0, kTrace = kAll, - kDebug, - kInfo, - kWarning, - kError, - kFatal, + kDebug = 1, + kInfo = 2, + kWarning = 3, + kError = 4, + kFatal = 5, - kDisabled, + kDisabled = 6, kNone = kDisabled }; } // namespace severities @@ -55,15 +55,16 @@ public: class Sink { protected: - Sink() = delete; explicit Sink(Sink const& sink) = default; Sink(Severity thresh, bool console); - Sink& - operator=(Sink const& lhs) = delete; public: virtual ~Sink() = 0; + Sink() = delete; + Sink& + operator=(Sink const& lhs) = delete; + /** Returns `true` if text at the passed severity produces output. */ virtual bool active(Severity level) const; @@ -109,12 +110,12 @@ public: }; #ifndef __INTELLISENSE__ - static_assert(std::is_default_constructible::value == false, ""); - static_assert(std::is_copy_constructible::value == false, ""); - static_assert(std::is_move_constructible::value == false, ""); - static_assert(std::is_copy_assignable::value == false, ""); - static_assert(std::is_move_assignable::value == false, ""); - static_assert(std::is_nothrow_destructible::value == true, ""); + static_assert(!std::is_default_constructible_v, ""); + static_assert(!std::is_copy_constructible_v, ""); + static_assert(!std::is_move_constructible_v, ""); + static_assert(!std::is_copy_assignable_v, ""); + static_assert(!std::is_move_assignable_v, ""); + static_assert(std::is_nothrow_destructible_v, ""); #endif /** Returns a Sink which does nothing. */ @@ -165,12 +166,12 @@ public: }; #ifndef __INTELLISENSE__ - static_assert(std::is_default_constructible::value == false, ""); - static_assert(std::is_copy_constructible::value == true, ""); - static_assert(std::is_move_constructible::value == true, ""); - static_assert(std::is_copy_assignable::value == false, ""); - static_assert(std::is_move_assignable::value == false, ""); - static_assert(std::is_nothrow_destructible::value == true, ""); + static_assert(!std::is_default_constructible_v, ""); + static_assert(std::is_copy_constructible_v, ""); + static_assert(std::is_move_constructible_v, ""); + static_assert(!std::is_copy_assignable_v, ""); + static_assert(!std::is_move_assignable_v, ""); + static_assert(std::is_nothrow_destructible_v, ""); #endif //-------------------------------------------------------------------------- @@ -247,12 +248,12 @@ public: }; #ifndef __INTELLISENSE__ - static_assert(std::is_default_constructible::value == true, ""); - static_assert(std::is_copy_constructible::value == true, ""); - static_assert(std::is_move_constructible::value == true, ""); - static_assert(std::is_copy_assignable::value == false, ""); - static_assert(std::is_move_assignable::value == false, ""); - static_assert(std::is_nothrow_destructible::value == true, ""); + static_assert(std::is_default_constructible_v, ""); + static_assert(std::is_copy_constructible_v, ""); + static_assert(std::is_move_constructible_v, ""); + static_assert(!std::is_copy_assignable_v, ""); + static_assert(!std::is_move_assignable_v, ""); + static_assert(std::is_nothrow_destructible_v, ""); #endif //-------------------------------------------------------------------------- @@ -330,12 +331,12 @@ public: }; #ifndef __INTELLISENSE__ -static_assert(std::is_default_constructible::value == false, ""); -static_assert(std::is_copy_constructible::value == true, ""); -static_assert(std::is_move_constructible::value == true, ""); -static_assert(std::is_copy_assignable::value == true, ""); -static_assert(std::is_move_assignable::value == true, ""); -static_assert(std::is_nothrow_destructible::value == true, ""); +static_assert(!std::is_default_constructible_v, ""); +static_assert(std::is_copy_constructible_v, ""); +static_assert(std::is_move_constructible_v, ""); +static_assert(std::is_copy_assignable_v, ""); +static_assert(std::is_move_assignable_v, ""); +static_assert(std::is_nothrow_destructible_v, ""); #endif //------------------------------------------------------------------------------ @@ -371,10 +372,6 @@ class logstream_buf : public std::basic_stringbuf { beast::Journal::Stream strm_; - template - void - write(T const*) = delete; - void write(char const* s) { @@ -394,7 +391,7 @@ public: { } - ~logstream_buf() + ~logstream_buf() override { sync(); } @@ -406,6 +403,10 @@ public: this->str(""); return 0; } + + template + void + write(T const*) = delete; }; } // namespace detail @@ -413,11 +414,11 @@ public: template > class basic_logstream : public std::basic_ostream { - typedef CharT char_type; - typedef Traits traits_type; - typedef typename traits_type::int_type int_type; - typedef typename traits_type::pos_type pos_type; - typedef typename traits_type::off_type off_type; + using char_type = CharT; + using traits_type = Traits; + using int_type = typename traits_type::int_type; + using pos_type = typename traits_type::pos_type; + using off_type = typename traits_type::off_type; detail::logstream_buf buf_; diff --git a/include/xrpl/beast/utility/PropertyStream.h b/include/xrpl/beast/utility/PropertyStream.h index 290730c1a2..b2bd8c7a35 100644 --- a/include/xrpl/beast/utility/PropertyStream.h +++ b/include/xrpl/beast/utility/PropertyStream.h @@ -174,7 +174,7 @@ private: std::ostringstream mutable m_ostream; public: - Proxy(Map const& map, std::string const& key); + Proxy(Map const& map, std::string key); Proxy(Proxy const& other); ~Proxy(); @@ -315,7 +315,7 @@ private: List children_; public: - explicit Source(std::string const& name); + explicit Source(std::string name); virtual ~Source(); Source(Source const&) = delete; diff --git a/include/xrpl/beast/utility/WrappedSink.h b/include/xrpl/beast/utility/WrappedSink.h index bb8a1a6994..7e36ce99d7 100644 --- a/include/xrpl/beast/utility/WrappedSink.h +++ b/include/xrpl/beast/utility/WrappedSink.h @@ -2,6 +2,8 @@ #include +#include + namespace beast { /** Wraps a Journal::Sink to prefix its output with a string. */ @@ -17,8 +19,8 @@ private: std::string prefix_; public: - explicit WrappedSink(beast::Journal::Sink& sink, std::string const& prefix = "") - : Sink(sink), sink_(sink), prefix_(prefix) + explicit WrappedSink(beast::Journal::Sink& sink, std::string prefix = "") + : Sink(sink), sink_(sink), prefix_(std::move(prefix)) { } diff --git a/include/xrpl/beast/utility/Zero.h b/include/xrpl/beast/utility/Zero.h index 3b50b3fe00..ff212b9c98 100644 --- a/include/xrpl/beast/utility/Zero.h +++ b/include/xrpl/beast/utility/Zero.h @@ -27,7 +27,7 @@ struct Zero }; namespace { -static constexpr Zero zero{}; +constexpr Zero zero{}; } // namespace /** Default implementation of signum calls the method on the class. */ @@ -38,8 +38,7 @@ signum(T const& t) return t.signum(); } -namespace detail { -namespace zero_helper { +namespace detail::zero_helper { // For argument dependent lookup to function properly, calls to signum must // be made from a namespace that does not include overloads of the function.. @@ -50,8 +49,7 @@ call_signum(T const& t) return signum(t); } -} // namespace zero_helper -} // namespace detail +} // namespace detail::zero_helper // Handle operators where T is on the left side using signum. diff --git a/include/xrpl/beast/utility/maybe_const.h b/include/xrpl/beast/utility/maybe_const.h index 3f6e1f95bd..bcfd7a7532 100644 --- a/include/xrpl/beast/utility/maybe_const.h +++ b/include/xrpl/beast/utility/maybe_const.h @@ -9,10 +9,8 @@ template struct maybe_const { explicit maybe_const() = default; - using type = typename std::conditional< - IsConst, - typename std::remove_const::type const, - typename std::remove_const::type>::type; + using type = std:: + conditional_t::type const, std::remove_const_t>; }; /** Alias for omitting `typename`. */ diff --git a/include/xrpl/beast/xor_shift_engine.h b/include/xrpl/beast/xor_shift_engine.h index 4fbe5ec165..85504f51aa 100644 --- a/include/xrpl/beast/xor_shift_engine.h +++ b/include/xrpl/beast/xor_shift_engine.h @@ -43,15 +43,15 @@ private: murmurhash3(result_type x); }; -template -xor_shift_engine<_>::xor_shift_engine(result_type val) +template +xor_shift_engine::xor_shift_engine(result_type val) { seed(val); } -template +template void -xor_shift_engine<_>::seed(result_type seed) +xor_shift_engine::seed(result_type seed) { if (seed == 0) throw std::domain_error("invalid seed"); @@ -59,9 +59,9 @@ xor_shift_engine<_>::seed(result_type seed) s_[1] = murmurhash3(s_[0]); } -template +template auto -xor_shift_engine<_>::operator()() -> result_type +xor_shift_engine::operator()() -> result_type { result_type s1 = s_[0]; result_type const s0 = s_[1]; @@ -70,9 +70,9 @@ xor_shift_engine<_>::operator()() -> result_type return (s_[1] = (s1 ^ s0 ^ (s1 >> 17) ^ (s0 >> 26))) + s0; } -template +template auto -xor_shift_engine<_>::murmurhash3(result_type x) -> result_type +xor_shift_engine::murmurhash3(result_type x) -> result_type { x ^= x >> 33; x *= 0xff51afd7ed558ccdULL; diff --git a/include/xrpl/conditions/Condition.h b/include/xrpl/conditions/Condition.h index 6b306a3982..4b24c5a289 100644 --- a/include/xrpl/conditions/Condition.h +++ b/include/xrpl/conditions/Condition.h @@ -7,8 +7,7 @@ #include #include -namespace xrpl { -namespace cryptoconditions { +namespace xrpl::cryptoconditions { enum class Type : std::uint8_t { preimageSha256 = 0, @@ -88,6 +87,4 @@ operator!=(Condition const& lhs, Condition const& rhs) return !(lhs == rhs); } -} // namespace cryptoconditions - -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/include/xrpl/conditions/Fulfillment.h b/include/xrpl/conditions/Fulfillment.h index ab47804e45..71ff9d83ef 100644 --- a/include/xrpl/conditions/Fulfillment.h +++ b/include/xrpl/conditions/Fulfillment.h @@ -4,8 +4,7 @@ #include #include -namespace xrpl { -namespace cryptoconditions { +namespace xrpl::cryptoconditions { struct Fulfillment { @@ -119,5 +118,4 @@ validate(Fulfillment const& f, Condition const& c, Slice m); bool validate(Fulfillment const& f, Condition const& c); -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/include/xrpl/conditions/detail/PreimageSha256.h b/include/xrpl/conditions/detail/PreimageSha256.h index 8726473c2d..bfa59ab749 100644 --- a/include/xrpl/conditions/detail/PreimageSha256.h +++ b/include/xrpl/conditions/detail/PreimageSha256.h @@ -9,8 +9,7 @@ #include -namespace xrpl { -namespace cryptoconditions { +namespace xrpl::cryptoconditions { class PreimageSha256 final : public Fulfillment { @@ -127,5 +126,4 @@ public: } }; -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/include/xrpl/conditions/detail/error.h b/include/xrpl/conditions/detail/error.h index fdeed3d9ac..73cee4c9f3 100644 --- a/include/xrpl/conditions/detail/error.h +++ b/include/xrpl/conditions/detail/error.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace cryptoconditions { +namespace xrpl::cryptoconditions { enum class error { generic = 1, @@ -28,8 +27,7 @@ enum class error { std::error_code make_error_code(error ev); -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions namespace std { diff --git a/include/xrpl/conditions/detail/utils.h b/include/xrpl/conditions/detail/utils.h index 17d93d43b5..8629987b8b 100644 --- a/include/xrpl/conditions/detail/utils.h +++ b/include/xrpl/conditions/detail/utils.h @@ -8,15 +8,12 @@ #include -namespace xrpl { -namespace cryptoconditions { - // A collection of functions to decode binary blobs // encoded with X.690 Distinguished Encoding Rules. // // This is a very trivial decoder and only implements // the bare minimum needed to support PreimageSha256. -namespace der { +namespace xrpl::cryptoconditions::der { // The preamble encapsulates the DER identifier and // length octets: @@ -89,7 +86,7 @@ parsePreamble(Slice& s, std::error_code& ec) p.length = s[0]; s += 1; - if (p.length & 0x80) + if ((p.length & 0x80) != 0u) { // Long form length: std::size_t const cnt = p.length & 0x7F; @@ -204,6 +201,4 @@ parseInteger(Slice& s, std::size_t count, std::error_code& ec) return v; } -} // namespace der -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions::der diff --git a/include/xrpl/core/ClosureCounter.h b/include/xrpl/core/ClosureCounter.h index b1939b2e63..ef857ace72 100644 --- a/include/xrpl/core/ClosureCounter.h +++ b/include/xrpl/core/ClosureCounter.h @@ -34,9 +34,9 @@ template class ClosureCounter { private: - std::mutex mutable mutex_{}; - std::condition_variable allClosuresDoneCond_{}; // guard with mutex_ - bool waitForClosures_{false}; // guard with mutex_ + std::mutex mutable mutex_; + std::condition_variable allClosuresDoneCond_; // guard with mutex_ + bool waitForClosures_{false}; // guard with mutex_ std::atomic closureCount_{0}; // Increment the count. @@ -75,7 +75,7 @@ private: std::remove_reference_t closure_; static_assert( - std::is_same()...)), Ret_t>::value, + std::is_same_v()...)), Ret_t>, "Closure arguments don't match ClosureCounter Ret_t or Args_t"); public: @@ -86,7 +86,7 @@ private: ++counter_; } - Substitute(Substitute&& rhs) noexcept(std::is_nothrow_move_constructible::value) + Substitute(Substitute&& rhs) noexcept(std::is_nothrow_move_constructible_v) : counter_(rhs.counter_), closure_(std::move(rhs.closure_)) { ++counter_; diff --git a/include/xrpl/core/HashRouter.h b/include/xrpl/core/HashRouter.h index b4f07f6dc0..3bc87f9524 100644 --- a/include/xrpl/core/HashRouter.h +++ b/include/xrpl/core/HashRouter.h @@ -109,9 +109,7 @@ private: class Entry : public CountedObject { public: - Entry() - { - } + Entry() = default; void addPeer(PeerShortID peer) diff --git a/include/xrpl/core/JobQueue.h b/include/xrpl/core/JobQueue.h index 558e55cf31..3c1bde89c3 100644 --- a/include/xrpl/core/JobQueue.h +++ b/include/xrpl/core/JobQueue.h @@ -128,7 +128,7 @@ public: beast::Journal journal, Logs& logs, perf::PerfLog& perfLog); - ~JobQueue(); + ~JobQueue() override; /** Adds a job to the JobQueue. @@ -141,8 +141,7 @@ public: */ template < typename JobHandler, - typename = - std::enable_if_t()()), void>::value>> + typename = std::enable_if_t()()), void>>> bool addJob(JobType type, std::string const& name, JobHandler&& jobHandler) { diff --git a/include/xrpl/core/JobTypeData.h b/include/xrpl/core/JobTypeData.h index c180629af7..917f838990 100644 --- a/include/xrpl/core/JobTypeData.h +++ b/include/xrpl/core/JobTypeData.h @@ -4,6 +4,8 @@ #include #include +#include + namespace xrpl { struct JobTypeData @@ -33,9 +35,9 @@ public: JobTypeData( JobTypeInfo const& info_, - beast::insight::Collector::ptr const& collector, + beast::insight::Collector::ptr collector, Logs& logs) noexcept - : m_load(logs.journal("LoadMonitor")), m_collector(collector), info(info_) + : m_load(logs.journal("LoadMonitor")), m_collector(std::move(collector)), info(info_) { m_load.setTargetLatency(info.getAverageLatency(), info.getPeakLatency()); diff --git a/include/xrpl/core/JobTypes.h b/include/xrpl/core/JobTypes.h index 98de97a1b4..1fb6f61573 100644 --- a/include/xrpl/core/JobTypes.h +++ b/include/xrpl/core/JobTypes.h @@ -33,8 +33,7 @@ private: std::chrono::milliseconds avgLatency, std::chrono::milliseconds peakLatency) { XRPL_ASSERT( - m_map.find(jt) == m_map.end(), - "xrpl::JobTypes::JobTypes::add : unique job type input"); + !m_map.contains(jt), "xrpl::JobTypes::JobTypes::add : unique job type input"); [[maybe_unused]] auto const inserted = m_map diff --git a/include/xrpl/core/LoadEvent.h b/include/xrpl/core/LoadEvent.h index f94e1020bf..87d4a5563d 100644 --- a/include/xrpl/core/LoadEvent.h +++ b/include/xrpl/core/LoadEvent.h @@ -16,7 +16,7 @@ class LoadEvent { public: // VFALCO TODO remove the dependency on LoadMonitor. Is that possible? - LoadEvent(LoadMonitor& monitor, std::string const& name, bool shouldStart); + LoadEvent(LoadMonitor& monitor, std::string name, bool shouldStart); LoadEvent(LoadEvent const&) = delete; ~LoadEvent(); diff --git a/include/xrpl/core/PeerReservationTable.h b/include/xrpl/core/PeerReservationTable.h index fc943f0807..3fb85e392f 100644 --- a/include/xrpl/core/PeerReservationTable.h +++ b/include/xrpl/core/PeerReservationTable.h @@ -20,7 +20,7 @@ struct PeerReservation final { public: PublicKey nodeId; - std::string description{}; + std::string description = {}; // NOLINT(readability-redundant-member-init) auto toJson() const -> Json::Value; @@ -68,7 +68,7 @@ public: contains(PublicKey const& nodeId) { std::lock_guard const lock(this->mutex_); - return table_.find({nodeId}) != table_.end(); + return table_.contains({.nodeId = nodeId, .description = {}}); } // Because `ApplicationImp` has two-phase initialization, so must we. diff --git a/include/xrpl/core/detail/Workers.h b/include/xrpl/core/detail/Workers.h index dbc93ecf81..bd82f9d57b 100644 --- a/include/xrpl/core/detail/Workers.h +++ b/include/xrpl/core/detail/Workers.h @@ -93,7 +93,7 @@ public: explicit Workers( Callback& callback, perf::PerfLog* perfLog, - std::string const& threadNames = "Worker", + std::string threadNames = "Worker", int numberOfThreads = static_cast(std::thread::hardware_concurrency())); ~Workers(); @@ -164,7 +164,7 @@ private: public beast::LockFreeStack::Node { public: - Worker(Workers& workers, std::string const& threadName, int const instance); + Worker(Workers& workers, std::string threadName, int const instance); ~Worker(); diff --git a/include/xrpl/json/json_writer.h b/include/xrpl/json/json_writer.h index e49abcd81a..45961fe030 100644 --- a/include/xrpl/json/json_writer.h +++ b/include/xrpl/json/json_writer.h @@ -15,9 +15,7 @@ class Value; class WriterBase { public: - virtual ~WriterBase() - { - } + virtual ~WriterBase() = default; virtual std::string write(Value const& root) = 0; }; @@ -34,9 +32,7 @@ class FastWriter : public WriterBase { public: FastWriter() = default; - virtual ~FastWriter() - { - } + ~FastWriter() override = default; public: // overridden from Writer std::string @@ -71,9 +67,7 @@ class StyledWriter : public WriterBase { public: StyledWriter(); - virtual ~StyledWriter() - { - } + ~StyledWriter() override = default; public: // overridden from Writer /** \brief Serialize a Value in JSON @@ -136,9 +130,7 @@ class StyledStreamWriter { public: StyledStreamWriter(std::string indentation = "\t"); - ~StyledStreamWriter() - { - } + ~StyledStreamWriter() = default; public: /** \brief Serialize a Value in JSON diff --git a/include/xrpl/json/to_string.h b/include/xrpl/json/to_string.h index fb379f5759..c9820e2e55 100644 --- a/include/xrpl/json/to_string.h +++ b/include/xrpl/json/to_string.h @@ -1,12 +1,11 @@ #pragma once -#include +#include + #include namespace Json { -class Value; - /** Writes a Json::Value to an std::string. */ std::string to_string(Value const&); @@ -15,8 +14,4 @@ to_string(Value const&); std::string pretty(Value const&); -/** Output using the StyledStreamWriter. @see Json::operator>>(). */ -std::ostream& -operator<<(std::ostream&, Value const& root); - } // namespace Json diff --git a/include/xrpl/ledger/AmendmentTable.h b/include/xrpl/ledger/AmendmentTable.h index 6ecfe2a240..8df09f74c3 100644 --- a/include/xrpl/ledger/AmendmentTable.h +++ b/include/xrpl/ledger/AmendmentTable.h @@ -8,6 +8,7 @@ #include #include +#include namespace xrpl { @@ -23,8 +24,8 @@ public: struct FeatureInfo { FeatureInfo() = delete; - FeatureInfo(std::string const& n, uint256 const& f, VoteBehavior v) - : name(n), feature(f), vote(v) + FeatureInfo(std::string n, uint256 const& f, VoteBehavior v) + : name(std::move(n)), feature(f), vote(v) { } @@ -75,10 +76,12 @@ public: doValidatedLedger(std::shared_ptr const& lastValidatedLedger) { if (needValidatedLedger(lastValidatedLedger->seq())) + { doValidatedLedger( lastValidatedLedger->seq(), getEnabledAmendments(*lastValidatedLedger), getMajorityAmendments(*lastValidatedLedger)); + } } /** Called to determine whether the amendment logic needs to process diff --git a/include/xrpl/ledger/BookListeners.h b/include/xrpl/ledger/BookListeners.h index 3ed267448b..c77271b20e 100644 --- a/include/xrpl/ledger/BookListeners.h +++ b/include/xrpl/ledger/BookListeners.h @@ -14,9 +14,7 @@ class BookListeners public: using pointer = std::shared_ptr; - BookListeners() - { - } + BookListeners() = default; /** Add a new subscription for this book */ diff --git a/include/xrpl/ledger/CachedView.h b/include/xrpl/ledger/CachedView.h index 7cab1dc1b3..5dad2598f4 100644 --- a/include/xrpl/ledger/CachedView.h +++ b/include/xrpl/ledger/CachedView.h @@ -132,7 +132,7 @@ template class CachedView : public detail::CachedViewImpl { private: - static_assert(std::is_base_of::value, ""); + static_assert(std::is_base_of_v, ""); std::shared_ptr sp_; diff --git a/include/xrpl/ledger/CanonicalTXSet.h b/include/xrpl/ledger/CanonicalTXSet.h index 45f58b5701..857b82a734 100644 --- a/include/xrpl/ledger/CanonicalTXSet.h +++ b/include/xrpl/ledger/CanonicalTXSet.h @@ -29,31 +29,31 @@ private: friend bool operator<(Key const& lhs, Key const& rhs); - inline friend bool + friend bool operator>(Key const& lhs, Key const& rhs) { return rhs < lhs; } - inline friend bool + friend bool operator<=(Key const& lhs, Key const& rhs) { return !(lhs > rhs); } - inline friend bool + friend bool operator>=(Key const& lhs, Key const& rhs) { return !(lhs < rhs); } - inline friend bool + friend bool operator==(Key const& lhs, Key const& rhs) { return lhs.txId_ == rhs.txId_; } - inline friend bool + friend bool operator!=(Key const& lhs, Key const& rhs) { return !(lhs == rhs); diff --git a/include/xrpl/ledger/Ledger.h b/include/xrpl/ledger/Ledger.h index 75a8f55dc0..69fb27975d 100644 --- a/include/xrpl/ledger/Ledger.h +++ b/include/xrpl/ledger/Ledger.h @@ -82,12 +82,12 @@ public: */ Ledger( create_genesis_t, - Rules const& rules, + Rules rules, Fees const& fees, std::vector const& amendments, Family& family); - Ledger(LedgerHeader const& info, Rules const& rules, Family& family); + Ledger(LedgerHeader const& info, Rules rules, Family& family); /** Used for ledgers loaded from JSON files @@ -100,7 +100,7 @@ public: LedgerHeader const& info, bool& loaded, bool acquire, - Rules const& rules, + Rules rules, Fees const& fees, Family& family, beast::Journal j); @@ -117,11 +117,11 @@ public: Ledger( std::uint32_t ledgerSeq, NetClock::time_point closeTime, - Rules const& rules, + Rules rules, Fees const& fees, Family& family); - ~Ledger() = default; + ~Ledger() override = default; // // ReadView diff --git a/include/xrpl/ledger/OpenView.h b/include/xrpl/ledger/OpenView.h index 5c942ce5e3..3420aa1df0 100644 --- a/include/xrpl/ledger/OpenView.h +++ b/include/xrpl/ledger/OpenView.h @@ -135,7 +135,7 @@ public: OpenView( open_ledger_t, ReadView const* base, - Rules const& rules, + Rules rules, std::shared_ptr hold = nullptr); OpenView(open_ledger_t, Rules const& rules, std::shared_ptr const& base) diff --git a/include/xrpl/ledger/PaymentSandbox.h b/include/xrpl/ledger/PaymentSandbox.h index d6f7820e8a..223a3c0c5a 100644 --- a/include/xrpl/ledger/PaymentSandbox.h +++ b/include/xrpl/ledger/PaymentSandbox.h @@ -6,6 +6,7 @@ #include #include +#include namespace xrpl { @@ -63,8 +64,8 @@ private: public: struct AdjustmentIOU { - AdjustmentIOU(STAmount const& d, STAmount const& c, STAmount const& b) - : debits(d), credits(c), origBalance(b) + AdjustmentIOU(STAmount d, STAmount c, STAmount b) + : debits(std::move(d)), credits(std::move(c)), origBalance(std::move(b)) { } STAmount debits; diff --git a/include/xrpl/ledger/PendingSaves.h b/include/xrpl/ledger/PendingSaves.h index 4e952547da..ff70d48bb9 100644 --- a/include/xrpl/ledger/PendingSaves.h +++ b/include/xrpl/ledger/PendingSaves.h @@ -65,7 +65,7 @@ public: pending(LedgerIndex seq) { std::lock_guard const lock(mutex_); - return map_.find(seq) != map_.end(); + return map_.contains(seq); } /** Check if a ledger should be dispatched diff --git a/include/xrpl/ledger/detail/ApplyStateTable.h b/include/xrpl/ledger/detail/ApplyStateTable.h index 07af5247f6..0ded0aa273 100644 --- a/include/xrpl/ledger/detail/ApplyStateTable.h +++ b/include/xrpl/ledger/detail/ApplyStateTable.h @@ -10,8 +10,7 @@ #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { // Helper class that buffers modifications class ApplyStateTable @@ -125,5 +124,4 @@ private: beast::Journal j); }; -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/include/xrpl/ledger/detail/ApplyViewBase.h b/include/xrpl/ledger/detail/ApplyViewBase.h index b3ec3c0fea..0e93ac5d2f 100644 --- a/include/xrpl/ledger/detail/ApplyViewBase.h +++ b/include/xrpl/ledger/detail/ApplyViewBase.h @@ -5,8 +5,7 @@ #include #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { class ApplyViewBase : public ApplyView, public RawView { @@ -102,5 +101,4 @@ protected: detail::ApplyStateTable items_; }; -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/include/xrpl/ledger/detail/RawStateTable.h b/include/xrpl/ledger/detail/RawStateTable.h index 499b9204c6..b3307b3ea4 100644 --- a/include/xrpl/ledger/detail/RawStateTable.h +++ b/include/xrpl/ledger/detail/RawStateTable.h @@ -9,8 +9,7 @@ #include #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { // Helper class that buffers raw modifications class RawStateTable @@ -108,5 +107,4 @@ private: XRPAmount dropsDestroyed_{0}; }; -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/include/xrpl/ledger/helpers/AMMHelpers.h b/include/xrpl/ledger/helpers/AMMHelpers.h index 34597b3cb5..d261f9e018 100644 --- a/include/xrpl/ledger/helpers/AMMHelpers.h +++ b/include/xrpl/ledger/helpers/AMMHelpers.h @@ -208,10 +208,10 @@ getAMMOfferStartWithTakerGets( // Try to reduce the offer size to improve the quality. // The quality might still not match the targetQuality for a tiny offer. - if (auto amounts = getAmounts(*nTakerGets); Quality{amounts} < targetQuality) + auto amounts = getAmounts(*nTakerGets); + if (Quality{amounts} < targetQuality) return getAmounts(detail::reduceOffer(amounts.out)); - else - return amounts; + return amounts; } /** Generate AMM offer starting with takerPays when AMM pool @@ -275,10 +275,10 @@ getAMMOfferStartWithTakerPays( // Try to reduce the offer size to improve the quality. // The quality might still not match the targetQuality for a tiny offer. - if (auto amounts = getAmounts(*nTakerPays); Quality{amounts} < targetQuality) + auto amounts = getAmounts(*nTakerPays); + if (Quality{amounts} < targetQuality) return getAmounts(detail::reduceOffer(amounts.in)); - else - return amounts; + return amounts; } /** Generate AMM offer so that either updated Spot Price Quality (SPQ) @@ -318,9 +318,12 @@ changeSpotPriceQuality( auto const& a = f; auto const b = pool.in * (1 + f); Number const c = pool.in * pool.in - pool.in * pool.out * quality.rate(); - if (auto const res = b * b - 4 * a * c; res < 0) + auto const res = b * b - 4 * a * c; + if (res < 0) + { return std::nullopt; // LCOV_EXCL_LINE - else if (auto const nTakerPaysPropose = (-b + root2(res)) / (2 * a); nTakerPaysPropose > 0) + } + if (auto const nTakerPaysPropose = (-b + root2(res)) / (2 * a); nTakerPaysPropose > 0) { auto const nTakerPays = [&]() { // The fee might make the AMM offer quality less than CLOB @@ -465,13 +468,11 @@ swapAssetIn(TAmounts const& pool, TIn const& assetIn, std::uint16_t t return toAmount(getAsset(pool.out), swapOut, Number::downward); } - else - { - return toAmount( - getAsset(pool.out), - pool.out - (pool.in * pool.out) / (pool.in + assetIn * feeMult(tfee)), - Number::downward); - } + + return toAmount( + getAsset(pool.out), + pool.out - (pool.in * pool.out) / (pool.in + assetIn * feeMult(tfee)), + Number::downward); } /** Swap assetOut out of the pool and swap in a proportional amount @@ -533,13 +534,11 @@ swapAssetOut(TAmounts const& pool, TOut const& assetOut, std::uint16_ return toAmount(getAsset(pool.in), swapIn, Number::upward); } - else - { - return toAmount( - getAsset(pool.in), - ((pool.in * pool.out) / (pool.out - assetOut) - pool.in) / feeMult(tfee), - Number::upward); - } + + return toAmount( + getAsset(pool.in), + ((pool.in * pool.out) / (pool.out - assetOut) - pool.in) / feeMult(tfee), + Number::upward); } /** Return square of n. @@ -623,9 +622,13 @@ getRoundedAsset(Rules const& rules, STAmount const& balance, A const& frac, IsDe if (!rules.enabled(fixAMMv1_3)) { if constexpr (std::is_same_v) + { return multiply(balance, frac, balance.asset()); + } else + { return toSTAmount(balance.asset(), balance * frac); + } } auto const rm = detail::getAssetRounding(isDeposit); return multiply(balance, frac, rm); diff --git a/include/xrpl/ledger/helpers/DirectoryHelpers.h b/include/xrpl/ledger/helpers/DirectoryHelpers.h index 189dfcd263..2ae188182d 100644 --- a/include/xrpl/ledger/helpers/DirectoryHelpers.h +++ b/include/xrpl/ledger/helpers/DirectoryHelpers.h @@ -189,7 +189,7 @@ forEachItem( AccountID const& id, std::function const&)> const& f) { - return forEachItem(view, keylet::ownerDir(id), f); + forEachItem(view, keylet::ownerDir(id), f); } /** Iterate all items after an item in an owner directory. diff --git a/include/xrpl/ledger/helpers/NFTokenHelpers.h b/include/xrpl/ledger/helpers/NFTokenHelpers.h index d8dac4caaf..49fd520d51 100644 --- a/include/xrpl/ledger/helpers/NFTokenHelpers.h +++ b/include/xrpl/ledger/helpers/NFTokenHelpers.h @@ -8,9 +8,9 @@ #include #include -namespace xrpl { +#include -namespace nft { +namespace xrpl::nft { /** Delete up to a specified number of offers from the specified token offer * directory. */ @@ -20,10 +20,6 @@ removeTokenOffersWithLimit( Keylet const& directory, std::size_t maxDeletableOffers); -/** Returns tesSUCCESS if NFToken has few enough offers that it can be burned */ -TER -notTooManyOffers(ReadView const& view, uint256 const& nftokenID); - /** Finds the specified token in the owner's token directory. */ std::optional findToken(ReadView const& view, AccountID const& owner, uint256 const& nftokenID); @@ -34,8 +30,8 @@ struct TokenAndPage STObject token; std::shared_ptr page; - TokenAndPage(STObject const& token_, std::shared_ptr page_) - : token(token_), page(std::move(page_)) + TokenAndPage(STObject token_, std::shared_ptr page_) + : token(std::move(token_)), page(std::move(page_)) { } }; @@ -140,6 +136,4 @@ checkTrustlineDeepFrozen( beast::Journal const j, Issue const& issue); -} // namespace nft - -} // namespace xrpl +} // namespace xrpl::nft diff --git a/include/xrpl/ledger/helpers/PaymentChannelHelpers.h b/include/xrpl/ledger/helpers/PaymentChannelHelpers.h index 5d1a4c0aa1..24838f1331 100644 --- a/include/xrpl/ledger/helpers/PaymentChannelHelpers.h +++ b/include/xrpl/ledger/helpers/PaymentChannelHelpers.h @@ -1,6 +1,8 @@ #pragma once +#include #include +#include #include namespace xrpl { diff --git a/include/xrpl/ledger/helpers/PermissionedDEXHelpers.h b/include/xrpl/ledger/helpers/PermissionedDEXHelpers.h index 3992f8885e..04b12f2fc5 100644 --- a/include/xrpl/ledger/helpers/PermissionedDEXHelpers.h +++ b/include/xrpl/ledger/helpers/PermissionedDEXHelpers.h @@ -1,8 +1,7 @@ #pragma once #include -namespace xrpl { -namespace permissioned_dex { +namespace xrpl::permissioned_dex { // Check if an account is in a permissioned domain [[nodiscard]] bool @@ -16,6 +15,4 @@ offerInDomain( Domain const& domainID, beast::Journal j); -} // namespace permissioned_dex - -} // namespace xrpl +} // namespace xrpl::permissioned_dex diff --git a/include/xrpl/net/AutoSocket.h b/include/xrpl/net/AutoSocket.h index 29cec23998..45e4919b8a 100644 --- a/include/xrpl/net/AutoSocket.h +++ b/include/xrpl/net/AutoSocket.h @@ -44,7 +44,7 @@ public: } bool - isSecure() + isSecure() const { return mSecure; } @@ -126,7 +126,9 @@ public: async_shutdown(ShutdownHandler handler) { if (isSecure()) + { mSocket->async_shutdown(handler); + } else { error_code ec; @@ -134,7 +136,7 @@ public: { lowest_layer().shutdown(plain_socket::shutdown_both); } - catch (boost::system::system_error& e) + catch (boost::system::system_error const& e) { ec = e.code(); } @@ -147,9 +149,13 @@ public: async_read_some(Seq const& buffers, Handler handler) { if (isSecure()) + { mSocket->async_read_some(buffers, handler); + } else + { PlainSocket().async_read_some(buffers, handler); + } } template @@ -157,9 +163,13 @@ public: async_read_until(Seq const& buffers, Condition condition, Handler handler) { if (isSecure()) + { boost::asio::async_read_until(*mSocket, buffers, condition, handler); + } else + { boost::asio::async_read_until(PlainSocket(), buffers, condition, handler); + } } template @@ -170,9 +180,13 @@ public: Handler handler) { if (isSecure()) + { boost::asio::async_read_until(*mSocket, buffers, delim, handler); + } else + { boost::asio::async_read_until(PlainSocket(), buffers, delim, handler); + } } template @@ -183,9 +197,13 @@ public: Handler handler) { if (isSecure()) + { boost::asio::async_read_until(*mSocket, buffers, cond, handler); + } else + { boost::asio::async_read_until(PlainSocket(), buffers, cond, handler); + } } template @@ -193,9 +211,13 @@ public: async_write(Buf const& buffers, Handler handler) { if (isSecure()) + { boost::asio::async_write(*mSocket, buffers, handler); + } else + { boost::asio::async_write(PlainSocket(), buffers, handler); + } } template @@ -203,9 +225,13 @@ public: async_write(boost::asio::basic_streambuf& buffers, Handler handler) { if (isSecure()) + { boost::asio::async_write(*mSocket, buffers, handler); + } else + { boost::asio::async_write(PlainSocket(), buffers, handler); + } } template @@ -213,9 +239,13 @@ public: async_read(Buf const& buffers, Condition cond, Handler handler) { if (isSecure()) + { boost::asio::async_read(*mSocket, buffers, cond, handler); + } else + { boost::asio::async_read(PlainSocket(), buffers, cond, handler); + } } template @@ -223,9 +253,13 @@ public: async_read(boost::asio::basic_streambuf& buffers, Condition cond, Handler handler) { if (isSecure()) + { boost::asio::async_read(*mSocket, buffers, cond, handler); + } else + { boost::asio::async_read(PlainSocket(), buffers, cond, handler); + } } template @@ -233,9 +267,13 @@ public: async_read(Buf const& buffers, Handler handler) { if (isSecure()) + { boost::asio::async_read(*mSocket, buffers, handler); + } else + { boost::asio::async_read(PlainSocket(), buffers, handler); + } } template @@ -243,9 +281,13 @@ public: async_write_some(Seq const& buffers, Handler handler) { if (isSecure()) + { mSocket->async_write_some(buffers, handler); + } else + { PlainSocket().async_write_some(buffers, handler); + } } protected: diff --git a/include/xrpl/net/HTTPClientSSLContext.h b/include/xrpl/net/HTTPClientSSLContext.h index 80e5835f5e..d211b21afe 100644 --- a/include/xrpl/net/HTTPClientSSLContext.h +++ b/include/xrpl/net/HTTPClientSSLContext.h @@ -30,8 +30,10 @@ public: registerSSLCerts(ssl_context_, ec, j_); if (ec && sslVerifyDir.empty()) + { Throw(boost::str( boost::format("Failed to set_default_verify_paths: %s") % ec.message())); + } } else { @@ -43,8 +45,10 @@ public: ssl_context_.add_verify_path(sslVerifyDir, ec); if (ec) + { Throw( boost::str(boost::format("Failed to add verify path: %s") % ec.message())); + } } } @@ -75,8 +79,8 @@ public: template < class T, class = std::enable_if_t< - std::is_same>::value || - std::is_same>::value>> + std::is_same_v> || + std::is_same_v>>> boost::system::error_code preConnectVerify(T& strm, std::string const& host) { @@ -95,8 +99,8 @@ public: template < class T, class = std::enable_if_t< - std::is_same>::value || - std::is_same>::value>> + std::is_same_v> || + std::is_same_v>>> /** * @brief invoked after connect/async_connect but before sending data * on an ssl stream - to setup name verification. diff --git a/include/xrpl/nodestore/Backend.h b/include/xrpl/nodestore/Backend.h index 36fd36ec00..d1b0ecb6dd 100644 --- a/include/xrpl/nodestore/Backend.h +++ b/include/xrpl/nodestore/Backend.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** A backend used for the NodeStore. @@ -140,5 +139,4 @@ public: fdRequired() const = 0; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/Database.h b/include/xrpl/nodestore/Database.h index e33b8a3a5c..c21c1e27dd 100644 --- a/include/xrpl/nodestore/Database.h +++ b/include/xrpl/nodestore/Database.h @@ -10,9 +10,7 @@ #include -namespace xrpl { - -namespace NodeStore { +namespace xrpl::NodeStore { /** Persistency layer for NodeObject @@ -274,5 +272,4 @@ private: threadEntry(); }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/DatabaseRotating.h b/include/xrpl/nodestore/DatabaseRotating.h index 23a749f972..a7deed294a 100644 --- a/include/xrpl/nodestore/DatabaseRotating.h +++ b/include/xrpl/nodestore/DatabaseRotating.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /* This class has two key-value store Backend objects for persisting SHAMap * records. This facilitates online deletion of data. New backends are @@ -36,5 +35,4 @@ public: f) = 0; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/DummyScheduler.h b/include/xrpl/nodestore/DummyScheduler.h index 9fce4a6100..472684ff13 100644 --- a/include/xrpl/nodestore/DummyScheduler.h +++ b/include/xrpl/nodestore/DummyScheduler.h @@ -2,15 +2,14 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** Simple NodeStore Scheduler that just performs the tasks synchronously. */ class DummyScheduler : public Scheduler { public: DummyScheduler() = default; - ~DummyScheduler() = default; + ~DummyScheduler() override = default; void scheduleTask(Task& task) override; void @@ -19,5 +18,4 @@ public: onBatchWrite(BatchWriteReport const& report) override; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/Factory.h b/include/xrpl/nodestore/Factory.h index e01bdfabf2..1656e73840 100644 --- a/include/xrpl/nodestore/Factory.h +++ b/include/xrpl/nodestore/Factory.h @@ -7,9 +7,7 @@ #include -namespace xrpl { - -namespace NodeStore { +namespace xrpl::NodeStore { /** Base class for backend factories. */ class Factory @@ -59,5 +57,4 @@ public: } }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/Manager.h b/include/xrpl/nodestore/Manager.h index ff00ee3ee1..7f718d7835 100644 --- a/include/xrpl/nodestore/Manager.h +++ b/include/xrpl/nodestore/Manager.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { - -namespace NodeStore { +namespace xrpl::NodeStore { /** Singleton for managing NodeStore factories and back ends. */ class Manager @@ -81,5 +79,4 @@ public: beast::Journal journal) = 0; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/Scheduler.h b/include/xrpl/nodestore/Scheduler.h index dc3e1e3d15..bf256648aa 100644 --- a/include/xrpl/nodestore/Scheduler.h +++ b/include/xrpl/nodestore/Scheduler.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { enum class FetchType { synchronous, async }; @@ -64,5 +63,4 @@ public: onBatchWrite(BatchWriteReport const& report) = 0; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/Task.h b/include/xrpl/nodestore/Task.h index 4bfc88bd13..0695970a68 100644 --- a/include/xrpl/nodestore/Task.h +++ b/include/xrpl/nodestore/Task.h @@ -1,7 +1,6 @@ #pragma once -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** Derived classes perform scheduled tasks. */ struct Task @@ -15,5 +14,4 @@ struct Task performScheduledTask() = 0; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/Types.h b/include/xrpl/nodestore/Types.h index 5adbc40f70..851cbcfb8b 100644 --- a/include/xrpl/nodestore/Types.h +++ b/include/xrpl/nodestore/Types.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { enum { // This is only used to pre-allocate the array for @@ -22,11 +21,11 @@ enum { /** Return codes from Backend operations. */ enum Status { - ok, - notFound, - dataCorrupt, - unknown, - backendError, + ok = 0, + notFound = 1, + dataCorrupt = 2, + unknown = 3, + backendError = 4, customCode = 100 }; @@ -34,6 +33,4 @@ enum Status { /** A batch of NodeObjects to write at once. */ using Batch = std::vector>; -} // namespace NodeStore - -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/BatchWriter.h b/include/xrpl/nodestore/detail/BatchWriter.h index 93993d1c3e..1112ccc324 100644 --- a/include/xrpl/nodestore/detail/BatchWriter.h +++ b/include/xrpl/nodestore/detail/BatchWriter.h @@ -7,8 +7,7 @@ #include #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** Batch-writing assist logic. @@ -41,7 +40,7 @@ public: Anything pending in the batch is written out before this returns. */ - ~BatchWriter(); + ~BatchWriter() override; /** Store the object. @@ -76,5 +75,4 @@ private: Batch mWriteSet; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/DatabaseNodeImp.h b/include/xrpl/nodestore/detail/DatabaseNodeImp.h index 21f06fef8d..88fb994bee 100644 --- a/include/xrpl/nodestore/detail/DatabaseNodeImp.h +++ b/include/xrpl/nodestore/detail/DatabaseNodeImp.h @@ -4,8 +4,7 @@ #include #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { class DatabaseNodeImp : public Database { @@ -29,7 +28,7 @@ public: "backend"); } - ~DatabaseNodeImp() + ~DatabaseNodeImp() override { stop(); } @@ -92,5 +91,4 @@ private: } }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/DatabaseRotatingImp.h b/include/xrpl/nodestore/detail/DatabaseRotatingImp.h index 8d4cd9ddbc..7010c87ebf 100644 --- a/include/xrpl/nodestore/detail/DatabaseRotatingImp.h +++ b/include/xrpl/nodestore/detail/DatabaseRotatingImp.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { class DatabaseRotatingImp : public DatabaseRotating { @@ -23,7 +22,7 @@ public: Section const& config, beast::Journal j); - ~DatabaseRotatingImp() + ~DatabaseRotatingImp() override { stop(); } @@ -69,5 +68,4 @@ private: for_each(std::function)> f) override; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/DecodedBlob.h b/include/xrpl/nodestore/detail/DecodedBlob.h index dc6704a08d..052c143009 100644 --- a/include/xrpl/nodestore/detail/DecodedBlob.h +++ b/include/xrpl/nodestore/detail/DecodedBlob.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** Parsed key/value blob into NodeObject components. @@ -41,5 +40,4 @@ private: int m_dataBytes; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/EncodedBlob.h b/include/xrpl/nodestore/detail/EncodedBlob.h index b05583475e..343e1720a0 100644 --- a/include/xrpl/nodestore/detail/EncodedBlob.h +++ b/include/xrpl/nodestore/detail/EncodedBlob.h @@ -9,8 +9,7 @@ #include #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** Convert a NodeObject from in-memory to database format. @@ -105,5 +104,4 @@ public: } }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/ManagerImp.h b/include/xrpl/nodestore/detail/ManagerImp.h index cb10a740c1..46363f9dab 100644 --- a/include/xrpl/nodestore/detail/ManagerImp.h +++ b/include/xrpl/nodestore/detail/ManagerImp.h @@ -2,9 +2,7 @@ #include -namespace xrpl { - -namespace NodeStore { +namespace xrpl::NodeStore { class ManagerImp : public Manager { @@ -21,7 +19,7 @@ public: ManagerImp(); - ~ManagerImp() = default; + ~ManagerImp() override = default; Factory* find(std::string const& name) override; @@ -48,5 +46,4 @@ public: beast::Journal journal) override; }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/codec.h b/include/xrpl/nodestore/detail/codec.h index 4e12c6b4db..c159558f83 100644 --- a/include/xrpl/nodestore/detail/codec.h +++ b/include/xrpl/nodestore/detail/codec.h @@ -17,8 +17,7 @@ #include #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { template std::pair @@ -113,9 +112,11 @@ nodeobject_decompress(void const* in, std::size_t in_size, BufferFactory&& bf) { auto const hs = field::size; // Mask if (in_size < hs + 32) + { Throw( "nodeobject codec v1: short inner node size: " + std::string("in_size = ") + std::to_string(in_size) + " hs = " + std::to_string(hs)); + } istream is(p, in_size); std::uint16_t mask = 0; read(is, mask); // Mask @@ -136,10 +137,12 @@ nodeobject_decompress(void const* in, std::size_t in_size, BufferFactory&& bf) if (mask & bit) { if (in_size < 32) + { Throw( "nodeobject codec v1: short inner node subsize: " + std::string("in_size = ") + std::to_string(in_size) + " i = " + std::to_string(i)); + } std::memcpy(os.data(32), is(32), 32); in_size -= 32; } @@ -149,16 +152,20 @@ nodeobject_decompress(void const* in, std::size_t in_size, BufferFactory&& bf) } } if (in_size > 0) + { Throw( "nodeobject codec v1: long inner node, in_size = " + std::to_string(in_size)); + } break; } case 3: // full v1 inner node { - if (in_size != 16 * 32) // hashes + if (in_size != 16 * 32) + { // hashes Throw( "nodeobject codec v1: short full inner node, in_size = " + std::to_string(in_size)); + } istream is(p, in_size); result.second = 525; void* const out = bf(result.second); @@ -214,7 +221,7 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) void const* const h = is(32); if (std::memcmp(h, zero32(), 32) == 0) continue; - std::memcpy(vh.data() + 32 * n, h, 32); + std::memcpy(vh.data() + (32 * n), h, 32); mask |= bit; ++n; } @@ -225,7 +232,7 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) auto const type = 2U; auto const vs = size_varint(type); result.second = vs + field::size + // mask - n * 32; // hashes + (n * 32); // hashes std::uint8_t* out = reinterpret_cast(bf(result.second)); result.first = out; ostream os(out, result.second); @@ -237,7 +244,7 @@ nodeobject_compress(void const* in, std::size_t in_size, BufferFactory&& bf) // 3 = full v1 inner node auto const type = 3U; auto const vs = size_varint(type); - result.second = vs + n * 32; // hashes + result.second = vs + (n * 32); // hashes std::uint8_t* out = reinterpret_cast(bf(result.second)); result.first = out; ostream os(out, result.second); @@ -305,5 +312,4 @@ filter_inner(void* in, std::size_t in_size) } } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/nodestore/detail/varint.h b/include/xrpl/nodestore/detail/varint.h index c84ed383ed..e63944c63b 100644 --- a/include/xrpl/nodestore/detail/varint.h +++ b/include/xrpl/nodestore/detail/varint.h @@ -5,8 +5,7 @@ #include #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { // This is a variant of the base128 varint format from // google protocol buffers: @@ -18,7 +17,7 @@ struct varint; // Metafuncton to return largest // possible size of T represented as varint. // T must be unsigned -template ::value> +template > struct varint_traits; template @@ -42,8 +41,10 @@ read_varint(void const* buf, std::size_t buflen, std::size_t& t) std::uint8_t const* p = reinterpret_cast(buf); std::size_t n = 0; while (p[n] & 0x80) + { if (++n >= buflen) return 0; + } if (++n > buflen) return 0; // Special case for 0 @@ -65,7 +66,7 @@ read_varint(void const* buf, std::size_t buflen, std::size_t& t) return used; } -template ::value>* = nullptr> +template >* = nullptr> std::size_t size_varint(T v) { @@ -97,7 +98,7 @@ write_varint(void* p0, std::size_t v) // input stream -template ::value>* = nullptr> +template >* = nullptr> void read(nudb::detail::istream& is, std::size_t& u) { @@ -110,12 +111,11 @@ read(nudb::detail::istream& is, std::size_t& u) // output stream -template ::value>* = nullptr> +template >* = nullptr> void write(nudb::detail::ostream& os, std::size_t t) { write_varint(os.data(size_varint(t)), t); } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/include/xrpl/protocol/AmountConversions.h b/include/xrpl/protocol/AmountConversions.h index e1965c1d5c..9fb45e7bf8 100644 --- a/include/xrpl/protocol/AmountConversions.h +++ b/include/xrpl/protocol/AmountConversions.h @@ -148,11 +148,17 @@ toAmount(Asset const& asset, Number const& n, Number::rounding_mode mode = Numbe Number::setround(mode); if constexpr (std::is_same_v) + { return IOUAmount(n); + } else if constexpr (std::is_same_v) + { return XRPAmount(static_cast(n)); + } else if constexpr (std::is_same_v) + { return MPTAmount(static_cast(n)); + } else if constexpr (std::is_same_v) { if (isXRP(asset)) @@ -171,11 +177,17 @@ T toMaxAmount(Asset const& asset) { if constexpr (std::is_same_v) + { return IOUAmount(STAmount::cMaxValue, STAmount::cMaxOffset); + } else if constexpr (std::is_same_v) + { return XRPAmount(static_cast(STAmount::cMaxNativeN)); + } else if constexpr (std::is_same_v) + { return MPTAmount(maxMPTokenAmount); + } else if constexpr (std::is_same_v) { return asset.visit( @@ -204,13 +216,21 @@ Asset getAsset(T const& amt) { if constexpr (std::is_same_v) + { return noIssue(); + } else if constexpr (std::is_same_v) + { return xrpIssue(); + } else if constexpr (std::is_same_v) + { return noMPT(); + } else if constexpr (std::is_same_v) + { return amt.asset(); + } else { constexpr bool alwaysFalse = !std::is_same_v; @@ -223,13 +243,21 @@ constexpr T get(STAmount const& a) { if constexpr (std::is_same_v) + { return a.iou(); + } else if constexpr (std::is_same_v) + { return a.xrp(); + } else if constexpr (std::is_same_v) + { return a.mpt(); + } else if constexpr (std::is_same_v) + { return a; + } else { constexpr bool alwaysFalse = !std::is_same_v; diff --git a/include/xrpl/protocol/ApiVersion.h b/include/xrpl/protocol/ApiVersion.h index 8772b5a49d..653b4830bf 100644 --- a/include/xrpl/protocol/ApiVersion.h +++ b/include/xrpl/protocol/ApiVersion.h @@ -138,9 +138,11 @@ forApiVersions(Fn const& fn, Args&&... args) { constexpr auto size = maxVer + 1 - minVer; [&](std::index_sequence) { + // NOLINTBEGIN(bugprone-use-after-move) (((void)fn( std::integral_constant{}, std::forward(args)...)), ...); + // NOLINTEND(bugprone-use-after-move) }(std::make_index_sequence{}); } diff --git a/include/xrpl/protocol/Asset.h b/include/xrpl/protocol/Asset.h index c8c629ab48..b1f0338665 100644 --- a/include/xrpl/protocol/Asset.h +++ b/include/xrpl/protocol/Asset.h @@ -221,9 +221,13 @@ operator==(Asset const& lhs, Asset const& rhs) return std::visit( [&](TLhs const& issLhs, TRhs const& issRhs) { if constexpr (std::is_same_v) + { return issLhs == issRhs; + } else + { return false; + } }, lhs.issue_, rhs.issue_); @@ -235,11 +239,17 @@ operator<=>(Asset const& lhs, Asset const& rhs) return std::visit( [](TLhs const& lhs_, TRhs const& rhs_) { if constexpr (std::is_same_v) + { return std::weak_ordering(lhs_ <=> rhs_); + } else if constexpr (is_issue_v && is_mptissue_v) + { return std::weak_ordering::greater; + } else + { return std::weak_ordering::less; + } }, lhs.issue_, rhs.issue_); @@ -267,11 +277,17 @@ equalTokens(Asset const& lhs, Asset const& rhs) return std::visit( [&](TLhs const& issLhs, TRhs const& issRhs) { if constexpr (std::is_same_v && std::is_same_v) + { return issLhs.currency == issRhs.currency; + } else if constexpr (std::is_same_v && std::is_same_v) + { return issLhs.getMptID() == issRhs.getMptID(); + } else + { return false; + } }, lhs.issue_, rhs.issue_); @@ -292,9 +308,6 @@ validJSONAsset(Json::Value const& jv); Asset assetFromJson(Json::Value const& jv); -Json::Value -to_json(Asset const& asset); - inline bool isConsistent(Asset const& asset) { diff --git a/include/xrpl/protocol/Book.h b/include/xrpl/protocol/Book.h index 638d9b387d..cda4daf603 100644 --- a/include/xrpl/protocol/Book.h +++ b/include/xrpl/protocol/Book.h @@ -19,9 +19,7 @@ public: Asset out; std::optional domain; - Book() - { - } + Book() = default; Book(Asset const& in_, Asset const& out_, std::optional const& domain_) : in(in_), out(out_), domain(domain_) @@ -53,7 +51,7 @@ reversed(Book const& book); /** Equality comparison. */ /** @{ */ -[[nodiscard]] inline constexpr bool +[[nodiscard]] constexpr bool operator==(Book const& lhs, Book const& rhs) { return (lhs.in == rhs.in) && (lhs.out == rhs.out) && (lhs.domain == rhs.domain); @@ -62,7 +60,7 @@ operator==(Book const& lhs, Book const& rhs) /** Strict weak ordering. */ /** @{ */ -[[nodiscard]] inline constexpr std::weak_ordering +[[nodiscard]] constexpr std::weak_ordering operator<=>(Book const& lhs, Book const& rhs) { if (auto const c{lhs.in <=> rhs.in}; c != 0) diff --git a/include/xrpl/protocol/BuildInfo.h b/include/xrpl/protocol/BuildInfo.h index 522747bc94..47a27339a8 100644 --- a/include/xrpl/protocol/BuildInfo.h +++ b/include/xrpl/protocol/BuildInfo.h @@ -3,11 +3,9 @@ #include #include -namespace xrpl { - /** Versioning information for this build. */ // VFALCO The namespace is deprecated -namespace BuildInfo { +namespace xrpl::BuildInfo { /** Server version. Follows the Semantic Versioning Specification: @@ -76,6 +74,4 @@ isXrpldVersion(std::uint64_t version); bool isNewerVersion(std::uint64_t version); -} // namespace BuildInfo - -} // namespace xrpl +} // namespace xrpl::BuildInfo diff --git a/include/xrpl/protocol/Feature.h b/include/xrpl/protocol/Feature.h index 112f66f4a1..8f96935ca1 100644 --- a/include/xrpl/protocol/Feature.h +++ b/include/xrpl/protocol/Feature.h @@ -107,8 +107,8 @@ validFeatureName(auto fn) -> bool return true; } -enum class VoteBehavior : int { Obsolete = -1, DefaultNo = 0, DefaultYes }; -enum class AmendmentSupport : int { Retired = -1, Supported = 0, Unsupported }; +enum class VoteBehavior : int { Obsolete = -1, DefaultNo = 0, DefaultYes = 1 }; +enum class AmendmentSupport : int { Retired = -1, Supported = 0, Unsupported = 1 }; /** All amendments libxrpl knows about. */ std::map const& @@ -125,10 +125,12 @@ namespace detail { #pragma push_macro("XRPL_RETIRE_FIX") #undef XRPL_RETIRE_FIX +// NOLINTBEGIN(bugprone-macro-parentheses) #define XRPL_FEATURE(name, supported, vote) +1 #define XRPL_FIX(name, supported, vote) +1 #define XRPL_RETIRE_FEATURE(name) +1 #define XRPL_RETIRE_FIX(name) +1 +// NOLINTEND(bugprone-macro-parentheses) // This value SHOULD be equal to the number of amendments registered in // Feature.cpp. Because it's only used to reserve storage, and determine how @@ -373,8 +375,10 @@ void foreachFeature(FeatureBitset bs, F&& f) { for (size_t i = 0; i < bs.size(); ++i) + { if (bs[i]) f(bitsetIndexToFeature(i)); + } } #pragma push_macro("XRPL_FEATURE") diff --git a/include/xrpl/protocol/IOUAmount.h b/include/xrpl/protocol/IOUAmount.h index 47aa35e0e8..1744345a1b 100644 --- a/include/xrpl/protocol/IOUAmount.h +++ b/include/xrpl/protocol/IOUAmount.h @@ -151,7 +151,9 @@ operator bool() const noexcept inline int IOUAmount::signum() const noexcept { - return (mantissa_ < 0) ? -1 : (mantissa_ ? 1 : 0); + if (mantissa_ < 0) + return -1; + return (mantissa_ != 0) ? 1 : 0; } inline IOUAmount::exponent_type diff --git a/include/xrpl/protocol/Indexes.h b/include/xrpl/protocol/Indexes.h index 574bbfbde6..f4dd5e6816 100644 --- a/include/xrpl/protocol/Indexes.h +++ b/include/xrpl/protocol/Indexes.h @@ -374,14 +374,14 @@ struct keyletDesc // This list should include all of the keylet functions that take a single // AccountID parameter. std::array, 6> const directAccountKeylets{ - {{&keylet::account, jss::AccountRoot, false}, - {&keylet::ownerDir, jss::DirectoryNode, true}, - {&keylet::signers, jss::SignerList, true}, + {{.function = &keylet::account, .expectedLEName = jss::AccountRoot, .includeInTests = false}, + {.function = &keylet::ownerDir, .expectedLEName = jss::DirectoryNode, .includeInTests = true}, + {.function = &keylet::signers, .expectedLEName = jss::SignerList, .includeInTests = true}, // It's normally impossible to create an item at nftpage_min, but // test it anyway, since the invariant checks for it. - {&keylet::nftpage_min, jss::NFTokenPage, true}, - {&keylet::nftpage_max, jss::NFTokenPage, true}, - {&keylet::did, jss::DID, true}}}; + {.function = &keylet::nftpage_min, .expectedLEName = jss::NFTokenPage, .includeInTests = true}, + {.function = &keylet::nftpage_max, .expectedLEName = jss::NFTokenPage, .includeInTests = true}, + {.function = &keylet::did, .expectedLEName = jss::DID, .includeInTests = true}}}; MPTID makeMptID(std::uint32_t sequence, AccountID const& account); diff --git a/include/xrpl/protocol/Issue.h b/include/xrpl/protocol/Issue.h index 7bd01185c9..569b01725d 100644 --- a/include/xrpl/protocol/Issue.h +++ b/include/xrpl/protocol/Issue.h @@ -12,8 +12,8 @@ namespace xrpl { class Issue { public: - Currency currency{}; - AccountID account{}; + Currency currency; + AccountID account; Issue() = default; @@ -68,7 +68,7 @@ hash_append(Hasher& h, Issue const& r) /** Equality comparison. */ /** @{ */ -[[nodiscard]] inline constexpr bool +[[nodiscard]] constexpr bool operator==(Issue const& lhs, Issue const& rhs) { return (lhs.currency == rhs.currency) && (isXRP(lhs.currency) || lhs.account == rhs.account); diff --git a/include/xrpl/protocol/KnownFormats.h b/include/xrpl/protocol/KnownFormats.h index c454683e19..fb93940fa8 100644 --- a/include/xrpl/protocol/KnownFormats.h +++ b/include/xrpl/protocol/KnownFormats.h @@ -38,7 +38,7 @@ public: { // Verify that KeyType is appropriate. static_assert( - std::is_enum::value || std::is_integral::value, + std::is_enum_v || std::is_integral_v, "KnownFormats KeyType must be integral or enum."); } @@ -74,10 +74,12 @@ public: Derived classes will load the object with all the known formats. */ +private: KnownFormats() : name_(beast::type_name()) { } +public: /** Destroy the known formats object. The defined formats are deleted. @@ -181,6 +183,7 @@ private: boost::container::flat_map names_; boost::container::flat_map types_; + friend Derived; }; } // namespace xrpl diff --git a/include/xrpl/protocol/LedgerFormats.h b/include/xrpl/protocol/LedgerFormats.h index dd25aaeffe..401e918d9f 100644 --- a/include/xrpl/protocol/LedgerFormats.h +++ b/include/xrpl/protocol/LedgerFormats.h @@ -213,7 +213,7 @@ enum LedgerEntryType : std::uint16_t { // lsfRequireDestTag = 0x00020000, // ... // }; -#define TO_VALUE(name, value) name = value, +#define TO_VALUE(name, value) name = (value), #define NULL_NAME(name, values) values #define NULL_OUTPUT(name, value) enum LedgerSpecificFlags : std::uint32_t { XMACRO(NULL_NAME, TO_VALUE, NULL_OUTPUT) }; diff --git a/include/xrpl/protocol/LedgerHeader.h b/include/xrpl/protocol/LedgerHeader.h index 6e22ad268d..1035e5e892 100644 --- a/include/xrpl/protocol/LedgerHeader.h +++ b/include/xrpl/protocol/LedgerHeader.h @@ -19,7 +19,7 @@ struct LedgerHeader // LedgerIndex seq = 0; - NetClock::time_point parentCloseTime = {}; + NetClock::time_point parentCloseTime; // // For closed ledgers @@ -49,7 +49,7 @@ struct LedgerHeader // closed. For open ledgers, the time the ledger // will close if there's no transactions. // - NetClock::time_point closeTime = {}; + NetClock::time_point closeTime; }; // ledger close flags diff --git a/include/xrpl/protocol/MPTAmount.h b/include/xrpl/protocol/MPTAmount.h index 33b6e5abe4..4a6297cc74 100644 --- a/include/xrpl/protocol/MPTAmount.h +++ b/include/xrpl/protocol/MPTAmount.h @@ -109,7 +109,9 @@ operator bool() const noexcept constexpr int MPTAmount::signum() const noexcept { - return (value_ < 0) ? -1 : (value_ ? 1 : 0); + if (value_ < 0) + return -1; + return (value_ != 0) ? 1 : 0; } /** Returns the underlying value. Code SHOULD NOT call this @@ -141,7 +143,7 @@ mulRatio(MPTAmount const& amt, std::uint32_t num, std::uint32_t den, bool roundU { using namespace boost::multiprecision; - if (!den) + if (den == 0u) Throw("division by zero"); int128_t const amt128(amt.value()); diff --git a/include/xrpl/protocol/MPTIssue.h b/include/xrpl/protocol/MPTIssue.h index 60b7072902..727aef9008 100644 --- a/include/xrpl/protocol/MPTIssue.h +++ b/include/xrpl/protocol/MPTIssue.h @@ -47,14 +47,14 @@ public: friend constexpr std::weak_ordering operator<=>(MPTIssue const& lhs, MPTIssue const& rhs); - bool - native() const + static bool + native() { return false; } - bool - integral() const + static bool + integral() { return true; } @@ -94,9 +94,9 @@ getMPTIssuer(MPTID const& mptid) } // Disallow temporary -inline AccountID const& +AccountID const& getMPTIssuer(MPTID const&&) = delete; -inline AccountID const& +AccountID const& getMPTIssuer(MPTID&&) = delete; inline MPTID diff --git a/include/xrpl/protocol/MultiApiJson.h b/include/xrpl/protocol/MultiApiJson.h index 1ebe72f15e..8d287767a6 100644 --- a/include/xrpl/protocol/MultiApiJson.h +++ b/include/xrpl/protocol/MultiApiJson.h @@ -74,10 +74,14 @@ struct MultiApiJson { int count = 0; for (auto& a : this->val) + { if (a.isMember(key)) count += 1; + } - return (count == 0 ? none : (count < size ? some : all)); + if (count == 0) + return none; + return count < size ? some : all; } static constexpr struct visitor_t final diff --git a/include/xrpl/protocol/NFTSyntheticSerializer.h b/include/xrpl/protocol/NFTSyntheticSerializer.h index c33a6edc7d..dcfd132ed8 100644 --- a/include/xrpl/protocol/NFTSyntheticSerializer.h +++ b/include/xrpl/protocol/NFTSyntheticSerializer.h @@ -6,9 +6,7 @@ #include -namespace xrpl { - -namespace RPC { +namespace xrpl::RPC { /** Adds common synthetic fields to transaction-related JSON responses @@ -19,5 +17,4 @@ void insertNFTSyntheticInJson(Json::Value&, std::shared_ptr const&, TxMeta const&); /** @} */ -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/include/xrpl/protocol/PathAsset.h b/include/xrpl/protocol/PathAsset.h index 31bd8f384f..662e568bec 100644 --- a/include/xrpl/protocol/PathAsset.h +++ b/include/xrpl/protocol/PathAsset.h @@ -100,9 +100,13 @@ operator==(PathAsset const& lhs, PathAsset const& rhs) return std::visit( [](TLhs const& lhs_, TRhs const& rhs_) { if constexpr (std::is_same_v) + { return lhs_ == rhs_; + } else + { return false; + } }, lhs.value(), rhs.value()); diff --git a/include/xrpl/protocol/Permissions.h b/include/xrpl/protocol/Permissions.h index 0ec4f04f1a..ea8bd77643 100644 --- a/include/xrpl/protocol/Permissions.h +++ b/include/xrpl/protocol/Permissions.h @@ -20,7 +20,7 @@ enum GranularPermissionType : std::uint32_t { #pragma push_macro("PERMISSION") #undef PERMISSION -#define PERMISSION(type, txType, value) type = value, +#define PERMISSION(type, txType, value) type = (value), #include diff --git a/include/xrpl/protocol/PublicKey.h b/include/xrpl/protocol/PublicKey.h index 64ced93ffb..9003175f3d 100644 --- a/include/xrpl/protocol/PublicKey.h +++ b/include/xrpl/protocol/PublicKey.h @@ -69,8 +69,8 @@ public: return buf_; } - std::size_t - size() const noexcept + static std::size_t + size() noexcept { return size_; } diff --git a/include/xrpl/protocol/Quality.h b/include/xrpl/protocol/Quality.h index 851e34d396..b0e3e65d6c 100644 --- a/include/xrpl/protocol/Quality.h +++ b/include/xrpl/protocol/Quality.h @@ -8,6 +8,7 @@ #include #include #include +#include namespace xrpl { @@ -29,7 +30,7 @@ struct TAmounts { } - TAmounts(In const& in_, Out const& out_) : in(in_), out(out_) + TAmounts(In in_, Out out_) : in(std::move(in_)), out(std::move(out_)) { } @@ -281,7 +282,7 @@ public: double const minVD = static_cast(minVMantissa); double const maxVD = - expDiff ? maxVMantissa * pow(10, expDiff) : static_cast(maxVMantissa); + (expDiff != 0) ? maxVMantissa * pow(10, expDiff) : static_cast(maxVMantissa); // maxVD and minVD are scaled so they have the same exponents. Dividing // cancels out the exponents, so we only need to deal with the (scaled) diff --git a/include/xrpl/protocol/RPCErr.h b/include/xrpl/protocol/RPCErr.h index 34c4bf8f99..e42bf5e637 100644 --- a/include/xrpl/protocol/RPCErr.h +++ b/include/xrpl/protocol/RPCErr.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace xrpl { diff --git a/include/xrpl/protocol/SField.h b/include/xrpl/protocol/SField.h index 7a864b1b58..cbc2c12f4e 100644 --- a/include/xrpl/protocol/SField.h +++ b/include/xrpl/protocol/SField.h @@ -84,7 +84,7 @@ class STCurrency; #pragma push_macro("TO_MAP") #undef TO_MAP -#define TO_ENUM(name, value) name = value, +#define TO_ENUM(name, value) name = (value), #define TO_MAP(name, value) {#name, value}, enum SerializedTypeID { XMACRO(TO_ENUM) }; diff --git a/include/xrpl/protocol/STAmount.h b/include/xrpl/protocol/STAmount.h index 3fa4a53e3f..695bd3c0b1 100644 --- a/include/xrpl/protocol/STAmount.h +++ b/include/xrpl/protocol/STAmount.h @@ -42,13 +42,13 @@ private: public: using value_type = STAmount; - static int const cMinOffset = -96; - static int const cMaxOffset = 80; + constexpr static int cMinOffset = -96; + constexpr static int cMaxOffset = 80; // Maximum native value supported by the code constexpr static std::uint64_t cMinValue = 1'000'000'000'000'000ull; static_assert(isPowerOfTen(cMinValue)); - constexpr static std::uint64_t cMaxValue = cMinValue * 10 - 1; + constexpr static std::uint64_t cMaxValue = (cMinValue * 10) - 1; static_assert(cMaxValue == 9'999'999'999'999'999ull); constexpr static std::uint64_t cMaxNative = 9'000'000'000'000'000'000ull; @@ -359,9 +359,13 @@ inline STAmount::STAmount(IOUAmount const& amount, Issue const& issue) : mAsset(issue), mOffset(amount.exponent()), mIsNegative(amount < beast::zero) { if (mIsNegative) + { mValue = unsafe_cast(-amount.mantissa()); + } else + { mValue = unsafe_cast(amount.mantissa()); + } canonicalize(); } @@ -370,9 +374,13 @@ inline STAmount::STAmount(MPTAmount const& amount, MPTIssue const& mptIssue) : mAsset(mptIssue), mOffset(0), mIsNegative(amount < beast::zero) { if (mIsNegative) + { mValue = unsafe_cast(-amount.value()); + } else + { mValue = unsafe_cast(amount.value()); + } canonicalize(); } @@ -401,7 +409,7 @@ amountFromJsonNoThrow(STAmount& result, Json::Value const& jvSource); inline STAmount const& toSTAmount(STAmount const& a) { - return a; + return a; // NOLINT(bugprone-return-const-ref-from-parameter) } //------------------------------------------------------------------------------ @@ -476,7 +484,9 @@ STAmount::getIssuer() const inline int STAmount::signum() const noexcept { - return mValue ? (mIsNegative ? -1 : 1) : 0; + if (mValue == 0u) + return 0; + return mIsNegative ? -1 : 1; } inline STAmount @@ -724,6 +734,21 @@ canAdd(STAmount const& amt1, STAmount const& amt2); bool canSubtract(STAmount const& amt1, STAmount const& amt2); +/** Get the scale of a Number for a given asset. + * + * "scale" is similar to "exponent", but from the perspective of STAmount, which has different rules + * and mantissa ranges for determining the exponent than Number. + * + * @param number The Number to get the scale of. + * @param asset The asset to use for determining the scale. + * @return The scale of this Number for the given asset. + */ +inline int +scale(Number const& number, Asset const& asset) +{ + return STAmount{asset, number}.exponent(); +} + } // namespace xrpl //------------------------------------------------------------------------------ diff --git a/include/xrpl/protocol/STBlob.h b/include/xrpl/protocol/STBlob.h index 71d1a04478..b9dc78ffe4 100644 --- a/include/xrpl/protocol/STBlob.h +++ b/include/xrpl/protocol/STBlob.h @@ -95,7 +95,7 @@ STBlob::size() const inline std::uint8_t const* STBlob::data() const { - return reinterpret_cast(value_.data()); + return value_.data(); } inline STBlob& diff --git a/include/xrpl/protocol/STCurrency.h b/include/xrpl/protocol/STCurrency.h index dc5b079c6d..5fd4c08fbb 100644 --- a/include/xrpl/protocol/STCurrency.h +++ b/include/xrpl/protocol/STCurrency.h @@ -11,7 +11,7 @@ namespace xrpl { class STCurrency final : public STBase { private: - Currency currency_{}; + Currency currency_; public: using value_type = Currency; diff --git a/include/xrpl/protocol/STExchange.h b/include/xrpl/protocol/STExchange.h index 4b576991b7..c733df37cf 100644 --- a/include/xrpl/protocol/STExchange.h +++ b/include/xrpl/protocol/STExchange.h @@ -123,7 +123,7 @@ template void set(STObject& st, TypedField const& f, T&& t) { - st.set(STExchange::type>::set(f, std::forward(t))); + st.set(STExchange>::set(f, std::forward(t))); } /** Set a blob field using an init function. */ diff --git a/include/xrpl/protocol/STObject.h b/include/xrpl/protocol/STObject.h index 7553521237..34bd19b9a0 100644 --- a/include/xrpl/protocol/STObject.h +++ b/include/xrpl/protocol/STObject.h @@ -62,7 +62,7 @@ class STObject : public STBase, public CountedObject public: using iterator = boost::transform_iterator; - virtual ~STObject() = default; + ~STObject() override = default; STObject(STObject const&) = default; template @@ -436,8 +436,7 @@ private: // by value. template < typename T, - typename V = typename std::remove_cv< - typename std::remove_reference().value())>::type>::type> + typename V = std::remove_cv_t().value())>>> V getFieldByValue(SField const& field) const; @@ -579,7 +578,7 @@ class STObject::OptionalProxy : public Proxy private: using value_type = typename T::value_type; - using optional_type = std::optional::type>; + using optional_type = std::optional>; public: OptionalProxy(OptionalProxy const&) = default; @@ -704,7 +703,7 @@ class STObject::FieldErr : public std::runtime_error template STObject::Proxy::Proxy(STObject* st, TypedField const* f) : st_(st), f_(f) { - if (st_->mType) + if (st_->mType != nullptr) { // STObject has associated template if (!st_->peekAtPField(*f_)) @@ -770,9 +769,13 @@ STObject::Proxy::assign(U&& u) } T* t = nullptr; if (style_ == soeINVALID) + { t = dynamic_cast(st_->getPField(*f_, true)); + } else + { t = dynamic_cast(st_->makeFieldPresent(*f_)); + } XRPL_ASSERT(t, "xrpl::STObject::Proxy::assign : type cast succeeded"); *t = std::forward(u); } @@ -858,9 +861,13 @@ STObject::OptionalProxy::operator=( -> OptionalProxy& { if (v) + { this->assign(std::move(*v)); + } else + { disengage(); + } return *this; } @@ -869,9 +876,13 @@ auto STObject::OptionalProxy::operator=(optional_type const& v) -> OptionalProxy& { if (v) + { this->assign(*v); + } else + { disengage(); + } return *this; } @@ -903,9 +914,13 @@ STObject::OptionalProxy::disengage() if (this->style_ == soeREQUIRED || this->style_ == soeDEFAULT) Throw("Template field error '" + this->f_->getName() + "'"); if (this->style_ == soeINVALID) + { this->st_->delField(*this->f_); + } else + { this->st_->makeFieldAbsent(*this->f_); + } } template @@ -1058,9 +1073,11 @@ STObject::at(TypedField const& f) const { auto const b = peekAtPField(f); if (!b) + { // This is a free object (no constraints) // with no template Throw("Missing field: " + f.getName()); + } if (auto const u = dynamic_cast(b)) return u->value(); @@ -1138,9 +1155,13 @@ STObject::setFieldH160(SField const& field, base_uint<160, Tag> const& v) using Bits = STBitString<160>; if (auto cf = dynamic_cast(rf)) + { cf->setValue(v); + } else + { Throw("Wrong field type"); + } } inline bool @@ -1188,7 +1209,10 @@ STObject::getFieldByConstRef(SField const& field, V const& empty) const SerializedTypeID const id = rf->getSType(); if (id == STI_NOTPRESENT) + { + // NOLINTNEXTLINE(bugprone-return-const-ref-from-parameter) return empty; // optional field not present + } T const* cf = dynamic_cast(rf); @@ -1203,7 +1227,7 @@ template void STObject::setFieldUsingSetValue(SField const& field, V value) { - static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_lvalue_reference_v, ""); STBase* rf = getPField(field, true); diff --git a/include/xrpl/protocol/STValidation.h b/include/xrpl/protocol/STValidation.h index 861e2152f8..c645336b59 100644 --- a/include/xrpl/protocol/STValidation.h +++ b/include/xrpl/protocol/STValidation.h @@ -36,7 +36,7 @@ class STValidation final : public STObject, public CountedObject // that use manifests this will be derived from the master public key. NodeID const nodeID_; - NetClock::time_point seenTime_ = {}; + NetClock::time_point seenTime_; public: /** Construct a STValidation from a peer from serialized data. diff --git a/include/xrpl/protocol/STVector256.h b/include/xrpl/protocol/STVector256.h index 815224def2..69b06ec1da 100644 --- a/include/xrpl/protocol/STVector256.h +++ b/include/xrpl/protocol/STVector256.h @@ -148,7 +148,7 @@ STVector256::size() const inline void STVector256::resize(std::size_t n) { - return mValue.resize(n); + mValue.resize(n); } inline bool @@ -220,7 +220,7 @@ STVector256::erase(std::vector::iterator position) inline void STVector256::clear() noexcept { - return mValue.clear(); + mValue.clear(); } } // namespace xrpl diff --git a/include/xrpl/protocol/SecretKey.h b/include/xrpl/protocol/SecretKey.h index 530b6fc35f..c17b3984e9 100644 --- a/include/xrpl/protocol/SecretKey.h +++ b/include/xrpl/protocol/SecretKey.h @@ -85,10 +85,10 @@ public: } }; -inline bool +bool operator==(SecretKey const& lhs, SecretKey const& rhs) = delete; -inline bool +bool operator!=(SecretKey const& lhs, SecretKey const& rhs) = delete; //------------------------------------------------------------------------------ diff --git a/include/xrpl/protocol/Serializer.h b/include/xrpl/protocol/Serializer.h index 2d3489fe7b..6ce60022e3 100644 --- a/include/xrpl/protocol/Serializer.h +++ b/include/xrpl/protocol/Serializer.h @@ -33,7 +33,7 @@ public: { mData.resize(size); - if (size) + if (size != 0u) { XRPL_ASSERT(data, "xrpl::Serializer::Serializer(void const*) : non-null input"); std::memcpy(mData.data(), data, size); diff --git a/include/xrpl/protocol/TER.h b/include/xrpl/protocol/TER.h index 5d15cf1ad7..4ea885611a 100644 --- a/include/xrpl/protocol/TER.h +++ b/include/xrpl/protocol/TER.h @@ -491,8 +491,7 @@ public: template constexpr auto operator==(L const& lhs, R const& rhs) -> std::enable_if_t< - std::is_same::value && - std::is_same::value, + std::is_same_v && std::is_same_v, bool> { return TERtoInt(lhs) == TERtoInt(rhs); @@ -501,8 +500,7 @@ operator==(L const& lhs, R const& rhs) -> std::enable_if_t< template constexpr auto operator!=(L const& lhs, R const& rhs) -> std::enable_if_t< - std::is_same::value && - std::is_same::value, + std::is_same_v && std::is_same_v, bool> { return TERtoInt(lhs) != TERtoInt(rhs); @@ -511,8 +509,7 @@ operator!=(L const& lhs, R const& rhs) -> std::enable_if_t< template constexpr auto operator<(L const& lhs, R const& rhs) -> std::enable_if_t< - std::is_same::value && - std::is_same::value, + std::is_same_v && std::is_same_v, bool> { return TERtoInt(lhs) < TERtoInt(rhs); @@ -521,8 +518,7 @@ operator<(L const& lhs, R const& rhs) -> std::enable_if_t< template constexpr auto operator<=(L const& lhs, R const& rhs) -> std::enable_if_t< - std::is_same::value && - std::is_same::value, + std::is_same_v && std::is_same_v, bool> { return TERtoInt(lhs) <= TERtoInt(rhs); @@ -531,8 +527,7 @@ operator<=(L const& lhs, R const& rhs) -> std::enable_if_t< template constexpr auto operator>(L const& lhs, R const& rhs) -> std::enable_if_t< - std::is_same::value && - std::is_same::value, + std::is_same_v && std::is_same_v, bool> { return TERtoInt(lhs) > TERtoInt(rhs); @@ -541,8 +536,7 @@ operator>(L const& lhs, R const& rhs) -> std::enable_if_t< template constexpr auto operator>=(L const& lhs, R const& rhs) -> std::enable_if_t< - std::is_same::value && - std::is_same::value, + std::is_same_v && std::is_same_v, bool> { return TERtoInt(lhs) >= TERtoInt(rhs); diff --git a/include/xrpl/protocol/TxFlags.h b/include/xrpl/protocol/TxFlags.h index b90e48a3b8..37a57fabd3 100644 --- a/include/xrpl/protocol/TxFlags.h +++ b/include/xrpl/protocol/TxFlags.h @@ -236,7 +236,7 @@ XMACRO(NULL_NAME, TO_VALUE, NULL_OUTPUT, NULL_MASK_ADJ) // The mask adjustment (maskAdj) allows adding flags back to the mask, making them invalid. // For example, Batch uses MASK_ADJ(tfInnerBatchTxn) to reject tfInnerBatchTxn on outer Batch. #define TO_MASK(name, values, maskAdj) \ - inline constexpr FlagValue tf##name##Mask = ~(tfUniversal values) | maskAdj; + inline constexpr FlagValue tf##name##Mask = ~(tfUniversal values) | (maskAdj); #define VALUE_TO_MASK(name, value) | name #define MASK_ADJ_TO_MASK(value) value XMACRO(TO_MASK, VALUE_TO_MASK, VALUE_TO_MASK, MASK_ADJ_TO_MASK) diff --git a/include/xrpl/protocol/Units.h b/include/xrpl/protocol/Units.h index 196464fa16..b606ca2cdf 100644 --- a/include/xrpl/protocol/Units.h +++ b/include/xrpl/protocol/Units.h @@ -267,7 +267,9 @@ public: constexpr int signum() const noexcept { - return (value_ < 0) ? -1 : (value_ ? 1 : 0); + if (value_ < 0) + return -1; + return value_ ? 1 : 0; } /** Returns the number of drops */ diff --git a/include/xrpl/protocol/XChainAttestations.h b/include/xrpl/protocol/XChainAttestations.h index 06eff0fcf2..44a2334ca0 100644 --- a/include/xrpl/protocol/XChainAttestations.h +++ b/include/xrpl/protocol/XChainAttestations.h @@ -15,6 +15,7 @@ #include #include +#include #include namespace xrpl { @@ -45,7 +46,7 @@ struct AttestationBase PublicKey const& publicKey_, Buffer signature_, AccountID const& sendingAccount_, - STAmount const& sendingAmount_, + STAmount sendingAmount_, AccountID const& rewardAccount_, bool wasLockingChainSend_); @@ -169,7 +170,7 @@ struct AttestationCreateAccount : AttestationBase Buffer signature_, AccountID const& sendingAccount_, STAmount const& sendingAmount_, - STAmount const& rewardAmount_, + STAmount rewardAmount_, AccountID const& rewardAccount_, bool wasLockingChainSend_, std::uint64_t createCount_, @@ -256,8 +257,8 @@ struct XChainClaimAttestation bool wasLockingChainSend; std::optional dst; MatchFields(TSignedAttestation const& att); - MatchFields(STAmount const& a, bool b, std::optional const& d) - : amount{a}, wasLockingChainSend{b}, dst{d} + MatchFields(STAmount a, bool b, std::optional const& d) + : amount{std::move(a)}, wasLockingChainSend{b}, dst{d} { } }; diff --git a/include/xrpl/protocol/XRPAmount.h b/include/xrpl/protocol/XRPAmount.h index 6e4133361b..0cb5121ef1 100644 --- a/include/xrpl/protocol/XRPAmount.h +++ b/include/xrpl/protocol/XRPAmount.h @@ -149,7 +149,9 @@ public: constexpr int signum() const noexcept { - return (drops_ < 0) ? -1 : (drops_ ? 1 : 0); + if (drops_ < 0) + return -1; + return (drops_ != 0) ? 1 : 0; } /** Returns the number of drops */ @@ -262,7 +264,7 @@ mulRatio(XRPAmount const& amt, std::uint32_t num, std::uint32_t den, bool roundU { using namespace boost::multiprecision; - if (!den) + if (den == 0u) Throw("division by zero"); int128_t const amt128(amt.drops()); diff --git a/include/xrpl/protocol/detail/STVar.h b/include/xrpl/protocol/detail/STVar.h index 1131437850..5526aed8fa 100644 --- a/include/xrpl/protocol/detail/STVar.h +++ b/include/xrpl/protocol/detail/STVar.h @@ -7,8 +7,7 @@ #include #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { struct defaultObject_t { @@ -112,9 +111,13 @@ private: construct(Args&&... args) { if constexpr (sizeof(T) > max_size) + { p_ = new T(std::forward(args)...); + } else + { p_ = new (&d_) T(std::forward(args)...); + } } /** Construct requested Serializable Type according to id. @@ -154,5 +157,4 @@ operator!=(STVar const& lhs, STVar const& rhs) return !(lhs == rhs); } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/include/xrpl/protocol/detail/b58_utils.h b/include/xrpl/protocol/detail/b58_utils.h index 5ad12d56e3..ec0e159230 100644 --- a/include/xrpl/protocol/detail/b58_utils.h +++ b/include/xrpl/protocol/detail/b58_utils.h @@ -17,8 +17,8 @@ template using Result = boost::outcome_v2::result; #ifndef _MSC_VER -namespace b58_fast { -namespace detail { + +namespace b58_fast::detail { // This optimizes to what hand written asm would do (single divide) [[nodiscard]] inline std::tuple @@ -33,7 +33,7 @@ carrying_mul(std::uint64_t a, std::uint64_t b, std::uint64_t carry) { unsigned __int128 const x = a; unsigned __int128 const y = b; - unsigned __int128 const c = x * y + carry; + unsigned __int128 const c = (x * y) + carry; return {c & 0xffff'ffff'ffff'ffff, c >> 64}; } @@ -64,13 +64,13 @@ inplace_bigint_add(std::span a, std::uint64_t b) for (auto& v : a.subspan(1)) { - if (!carry) + if (carry == 0u) { return TokenCodecErrc::success; } std::tie(v, carry) = carrying_add(v, 1); } - if (carry) + if (carry != 0u) { return TokenCodecErrc::overflowAdd; } @@ -105,7 +105,7 @@ inplace_bigint_mul(std::span a, std::uint64_t b) [[nodiscard]] inline std::uint64_t inplace_bigint_div_rem(std::span numerator, std::uint64_t divisor) { - if (numerator.size() == 0) + if (numerator.empty()) { // should never happen, but if it does then it seems natural to define // the a null set of numbers to be zero, so the remainder is also zero. @@ -170,8 +170,8 @@ b58_10_to_b58_be(std::uint64_t input) return result; } -} // namespace detail -} // namespace b58_fast +} // namespace b58_fast::detail + #endif } // namespace xrpl diff --git a/include/xrpl/protocol/detail/token_errors.h b/include/xrpl/protocol/detail/token_errors.h index 54b283c41a..5511fb06b3 100644 --- a/include/xrpl/protocol/detail/token_errors.h +++ b/include/xrpl/protocol/detail/token_errors.h @@ -30,14 +30,14 @@ class TokenCodecErrcCategory : public std::error_category { public: // Return a short descriptive name for the category - virtual char const* - name() const noexcept override final + char const* + name() const noexcept final { return "TokenCodecError"; } // Return what each enum means in text - virtual std::string - message(int c) const override final + std::string + message(int c) const final { switch (static_cast(c)) { diff --git a/include/xrpl/protocol/digest.h b/include/xrpl/protocol/digest.h index 7664069e1c..bbb38fa543 100644 --- a/include/xrpl/protocol/digest.h +++ b/include/xrpl/protocol/digest.h @@ -177,12 +177,12 @@ public: } private: - inline void + void erase(std::false_type) { } - inline void + void erase(std::true_type) { secure_erase(&h_, sizeof(h_)); diff --git a/include/xrpl/protocol/json_get_or_throw.h b/include/xrpl/protocol/json_get_or_throw.h index 4406d9ff24..949fb64cf2 100644 --- a/include/xrpl/protocol/json_get_or_throw.h +++ b/include/xrpl/protocol/json_get_or_throw.h @@ -146,7 +146,7 @@ getOptional(Json::Value const& v, xrpl::SField const& field) { return getOrThrow(v, field); } - catch (...) + catch (...) // NOLINT(bugprone-empty-catch) { } return {}; diff --git a/include/xrpl/protocol/jss.h b/include/xrpl/protocol/jss.h index 366a75df76..f3aad125cc 100644 --- a/include/xrpl/protocol/jss.h +++ b/include/xrpl/protocol/jss.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace jss { +namespace xrpl::jss { // JSON static strings @@ -714,5 +713,4 @@ JSS(write_load); // out: GetCounts #undef JSS -} // namespace jss -} // namespace xrpl +} // namespace xrpl::jss diff --git a/include/xrpl/protocol/nft.h b/include/xrpl/protocol/nft.h index 821d146ff7..6dce8d1045 100644 --- a/include/xrpl/protocol/nft.h +++ b/include/xrpl/protocol/nft.h @@ -9,8 +9,7 @@ #include #include -namespace xrpl { -namespace nft { +namespace xrpl::nft { // Separate taxons from regular integers. struct TaxonTag @@ -102,5 +101,4 @@ getIssuer(uint256 const& id) return AccountID::fromVoid(id.data() + 4); } -} // namespace nft -} // namespace xrpl +} // namespace xrpl::nft diff --git a/include/xrpl/protocol/nftPageMask.h b/include/xrpl/protocol/nftPageMask.h index 2f7337c328..9889db5341 100644 --- a/include/xrpl/protocol/nftPageMask.h +++ b/include/xrpl/protocol/nftPageMask.h @@ -4,13 +4,11 @@ #include -namespace xrpl { -namespace nft { +namespace xrpl::nft { // NFT directory pages order their contents based only on the low 96 bits of // the NFToken value. This mask provides easy access to the necessary mask. uint256 constexpr pageMask( std::string_view("0000000000000000000000000000000000000000ffffffffffffffffffffffff")); -} // namespace nft -} // namespace xrpl +} // namespace xrpl::nft diff --git a/include/xrpl/protocol_autogen/README.md b/include/xrpl/protocol_autogen/README.md index be90788b05..860ed1a242 100644 --- a/include/xrpl/protocol_autogen/README.md +++ b/include/xrpl/protocol_autogen/README.md @@ -4,42 +4,33 @@ This directory contains auto-generated C++ wrapper classes for XRP Ledger protoc ## Generated Files -The files in this directory are automatically generated at **CMake configure time** from macro definition files: +The files in this directory are generated from macro definition files: -- **Transaction classes** (in `transactions/`): Generated from `include/xrpl/protocol/detail/transactions.macro` by `scripts/generate_tx_classes.py` -- **Ledger entry classes** (in `ledger_entries/`): Generated from `include/xrpl/protocol/detail/ledger_entries.macro` by `scripts/generate_ledger_classes.py` +- **Transaction classes** (in `transactions/`): Generated from `include/xrpl/protocol/detail/transactions.macro` by `cmake/scripts/codegen/generate_tx_classes.py` +- **Ledger entry classes** (in `ledger_entries/`): Generated from `include/xrpl/protocol/detail/ledger_entries.macro` by `cmake/scripts/codegen/generate_ledger_classes.py` ## Generation Process -The generation happens automatically when you **configure** the project (not during build). When you run CMake, the system: +Generation requires a one-time setup step to create a virtual environment +and install Python dependencies, followed by running the generation target: -1. Creates a Python virtual environment in the build directory (`codegen_venv`) -2. Installs Python dependencies from `scripts/requirements.txt` into the venv (only if needed) -3. Runs the Python generation scripts using the venv Python interpreter -4. Parses the macro files to extract type definitions -5. Generates type-safe C++ wrapper classes using Mako templates -6. Places the generated headers in this directory +```bash +cmake --build . --target setup_code_gen # create venv and install dependencies (once) +cmake --build . --target code_gen # generate code +``` -### When Regeneration Happens - -The code is regenerated when: - -- You run CMake configure for the first time -- The Python virtual environment doesn't exist -- `scripts/requirements.txt` has been modified - -To force regeneration, delete the build directory and reconfigure. +By default, `CODEGEN_VENV_DIR` points to `.venv` in the project root. The +`setup_code_gen` target creates a venv there and installs the required packages. +The `code_gen` target then uses the venv's Python interpreter to run generation. ### Python Dependencies -The code generation requires the following Python packages (automatically installed): +The code generation requires the following Python packages (installed by `setup_code_gen`): - `pcpp` - C preprocessor for Python - `pyparsing` - Parser combinator library - `Mako` - Template engine -These are isolated in a virtual environment and won't affect your system Python installation. - ## Version Control The generated `.h` files **are checked into version control**. This means: @@ -50,15 +41,15 @@ The generated `.h` files **are checked into version control**. This means: ## Modifying Generated Code -**Do not manually edit generated files.** Any changes will be overwritten the next time CMake configure runs. +**Do not manually edit generated files.** Any changes will be overwritten the next time `code_gen` is run. To modify the generated classes: - Edit the macro files in `include/xrpl/protocol/detail/` -- Edit the Mako templates in `scripts/templates/` -- Edit the generation scripts in `scripts/` -- Update Python dependencies in `scripts/requirements.txt` -- Run CMake configure to regenerate +- Edit the Mako templates in `cmake/scripts/codegen/templates/` +- Edit the generation scripts in `cmake/scripts/codegen/` +- Update Python dependencies in `cmake/scripts/codegen/requirements.txt` +- Run `cmake --build . --target code_gen` to regenerate ## Adding Common Fields @@ -73,7 +64,7 @@ Base classes: Templates (update to pass required common fields to base class constructors): -- `scripts/templates/Transaction.h.mako` -- `scripts/templates/LedgerEntry.h.mako` +- `cmake/scripts/codegen/templates/Transaction.h.mako` +- `cmake/scripts/codegen/templates/LedgerEntry.h.mako` These files are **not auto-generated** and must be updated by hand. diff --git a/include/xrpl/rdb/SociDB.h b/include/xrpl/rdb/SociDB.h index 9c575359c1..43086ed931 100644 --- a/include/xrpl/rdb/SociDB.h +++ b/include/xrpl/rdb/SociDB.h @@ -39,7 +39,7 @@ class BasicConfig; class DBConfig { std::string connectionString_; - explicit DBConfig(std::string const& dbPath); + explicit DBConfig(std::string dbPath); public: DBConfig(BasicConfig const& config, std::string const& dbName); diff --git a/include/xrpl/resource/Charge.h b/include/xrpl/resource/Charge.h index 55b13731b9..436e87e158 100644 --- a/include/xrpl/resource/Charge.h +++ b/include/xrpl/resource/Charge.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** A consumption charge. */ class Charge @@ -16,7 +15,7 @@ public: Charge() = delete; /** Create a charge with the specified cost and name. */ - Charge(value_type cost, std::string const& label = std::string()); + Charge(value_type cost, std::string label = std::string()); /** Return the human readable label associated with the charge. */ std::string const& @@ -47,5 +46,4 @@ private: std::ostream& operator<<(std::ostream& os, Charge const& v); -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/Consumer.h b/include/xrpl/resource/Consumer.h index 45cc221212..21d9f9c74f 100644 --- a/include/xrpl/resource/Consumer.h +++ b/include/xrpl/resource/Consumer.h @@ -5,8 +5,7 @@ #include #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { struct Entry; class Logic; @@ -79,5 +78,4 @@ private: std::ostream& operator<<(std::ostream& os, Consumer const& v); -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/Disposition.h b/include/xrpl/resource/Disposition.h index 096afb6a6f..22830ad470 100644 --- a/include/xrpl/resource/Disposition.h +++ b/include/xrpl/resource/Disposition.h @@ -1,7 +1,6 @@ #pragma once -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** The disposition of a consumer after applying a load charge. */ enum Disposition { @@ -17,5 +16,4 @@ enum Disposition { drop }; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/Fees.h b/include/xrpl/resource/Fees.h index ebda0e98db..366b2d287f 100644 --- a/include/xrpl/resource/Fees.h +++ b/include/xrpl/resource/Fees.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** Schedule of fees charged for imposing load on the server. */ /** @{ */ @@ -30,5 +29,4 @@ extern Charge const feeWarning; // The cost of receiving a warning. extern Charge const feeDrop; // The cost of being dropped for excess load. /** @} */ -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/Gossip.h b/include/xrpl/resource/Gossip.h index 9a70309cc4..e626af37c3 100644 --- a/include/xrpl/resource/Gossip.h +++ b/include/xrpl/resource/Gossip.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** Data format for exchanging consumption information across peers. */ struct Gossip @@ -24,5 +23,4 @@ struct Gossip std::vector items; }; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/ResourceManager.h b/include/xrpl/resource/ResourceManager.h index 4aab017691..96e5255272 100644 --- a/include/xrpl/resource/ResourceManager.h +++ b/include/xrpl/resource/ResourceManager.h @@ -10,8 +10,7 @@ #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** Tracks load and resource consumption. */ class Manager : public beast::PropertyStream::Source @@ -20,7 +19,7 @@ protected: Manager(); public: - virtual ~Manager() = 0; + ~Manager() override = 0; /** Create a new endpoint keyed by inbound IP address or the forwarded * IP if proxied. */ @@ -62,5 +61,4 @@ public: std::unique_ptr make_Manager(beast::insight::Collector::ptr const& collector, beast::Journal journal); -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/detail/Entry.h b/include/xrpl/resource/detail/Entry.h index 2a6414778c..5b2d8b1ba3 100644 --- a/include/xrpl/resource/detail/Entry.h +++ b/include/xrpl/resource/detail/Entry.h @@ -7,8 +7,7 @@ #include #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { using clock_type = beast::abstract_clock; @@ -22,7 +21,7 @@ struct Entry : public beast::List::Node @param now Construction time of Entry. */ explicit Entry(clock_type::time_point const now) - : refcount(0), local_balance(now), remote_balance(0), lastWarningTime(), whenExpires() + : refcount(0), local_balance(now), remote_balance(0) { } @@ -87,5 +86,4 @@ operator<<(std::ostream& os, Entry const& v) return os; } -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/detail/Import.h b/include/xrpl/resource/detail/Import.h index bee90afbf0..6e2a7b9e7c 100644 --- a/include/xrpl/resource/detail/Import.h +++ b/include/xrpl/resource/detail/Import.h @@ -3,8 +3,7 @@ #include #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** A set of imported consumer data from a gossip origin. */ struct Import @@ -18,7 +17,7 @@ struct Import }; // Dummy argument required for zero-copy construction - Import(int = 0) : whenExpires() + Import(int = 0) { } @@ -29,5 +28,4 @@ struct Import std::vector items; }; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/detail/Key.h b/include/xrpl/resource/detail/Key.h index 0c5164a7d8..c9a233b634 100644 --- a/include/xrpl/resource/detail/Key.h +++ b/include/xrpl/resource/detail/Key.h @@ -4,8 +4,9 @@ #include #include -namespace xrpl { -namespace Resource { +#include + +namespace xrpl::Resource { // The consumer key struct Key @@ -15,7 +16,7 @@ struct Key Key() = delete; - Key(Kind k, beast::IP::Endpoint const& addr) : kind(k), address(addr) + Key(Kind k, beast::IP::Endpoint addr) : kind(k), address(std::move(addr)) { } @@ -45,5 +46,4 @@ struct Key }; }; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/detail/Kind.h b/include/xrpl/resource/detail/Kind.h index fbb6b65e25..74115ba7f1 100644 --- a/include/xrpl/resource/detail/Kind.h +++ b/include/xrpl/resource/detail/Kind.h @@ -1,7 +1,6 @@ #pragma once -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** * Kind of consumer. @@ -13,5 +12,4 @@ namespace Resource { */ enum Kind { kindInbound, kindOutbound, kindUnlimited }; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/detail/Logic.h b/include/xrpl/resource/detail/Logic.h index 66c47bc538..b775f0a965 100644 --- a/include/xrpl/resource/detail/Logic.h +++ b/include/xrpl/resource/detail/Logic.h @@ -15,8 +15,7 @@ #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { class Logic { @@ -352,7 +351,9 @@ public: iter = importTable_.erase(iter); } else + { ++iter; + } } } @@ -506,7 +507,7 @@ public: //-------------------------------------------------------------------------- - void + static void writeList( clock_type::time_point const now, beast::PropertyStream::Set& items, @@ -553,5 +554,4 @@ public: } }; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/resource/detail/Tuning.h b/include/xrpl/resource/detail/Tuning.h index d5be5cf0b6..1c903d8cd4 100644 --- a/include/xrpl/resource/detail/Tuning.h +++ b/include/xrpl/resource/detail/Tuning.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { /** Tunable constants. */ enum { @@ -30,5 +29,4 @@ std::chrono::seconds constexpr secondsUntilExpiration{300}; // Number of seconds until imported gossip expires std::chrono::seconds constexpr gossipExpirationSeconds{30}; -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/include/xrpl/server/LoadFeeTrack.h b/include/xrpl/server/LoadFeeTrack.h index 226408dbde..6b9e96241c 100644 --- a/include/xrpl/server/LoadFeeTrack.h +++ b/include/xrpl/server/LoadFeeTrack.h @@ -60,8 +60,8 @@ public: return clusterTxnLoadFee_; } - std::uint32_t - getLoadBase() const + static std::uint32_t + getLoadBase() { return lftNormalFee; } diff --git a/include/xrpl/server/Manifest.h b/include/xrpl/server/Manifest.h index 2532a3c5bf..ce97c57260 100644 --- a/include/xrpl/server/Manifest.h +++ b/include/xrpl/server/Manifest.h @@ -8,6 +8,7 @@ #include #include #include +#include namespace xrpl { @@ -80,16 +81,16 @@ struct Manifest Manifest() = delete; Manifest( - std::string const& serialized_, + std::string serialized_, PublicKey const& masterKey_, std::optional const& signingKey_, std::uint32_t seq, - std::string const& domain_) - : serialized(serialized_) + std::string domain_) + : serialized(std::move(serialized_)) , masterKey(masterKey_) , signingKey(signingKey_) , sequence(seq) - , domain(domain_) + , domain(std::move(domain_)) { } @@ -154,7 +155,7 @@ deserializeManifest( template < class T, - class = std::enable_if_t::value || std::is_same::value>> + class = std::enable_if_t || std::is_same_v>> std::optional deserializeManifest( std::vector const& v, diff --git a/include/xrpl/server/NetworkOPs.h b/include/xrpl/server/NetworkOPs.h index 16ec4a4ec0..b8f50dcd42 100644 --- a/include/xrpl/server/NetworkOPs.h +++ b/include/xrpl/server/NetworkOPs.h @@ -73,7 +73,7 @@ public: using clock_type = beast::abstract_clock; enum class FailHard : unsigned char { no, yes }; - static inline FailHard + static FailHard doFailHard(bool noMeansDont) { return noMeansDont ? FailHard::yes : FailHard::no; diff --git a/include/xrpl/server/Port.h b/include/xrpl/server/Port.h index c7acabbc85..93652d422a 100644 --- a/include/xrpl/server/Port.h +++ b/include/xrpl/server/Port.h @@ -15,13 +15,9 @@ #include #include -namespace boost { -namespace asio { -namespace ssl { +namespace boost::asio::ssl { class context; -} // namespace ssl -} // namespace asio -} // namespace boost +} // namespace boost::asio::ssl namespace xrpl { diff --git a/include/xrpl/server/SimpleWriter.h b/include/xrpl/server/SimpleWriter.h index 87b94507a4..0c3b711187 100644 --- a/include/xrpl/server/SimpleWriter.h +++ b/include/xrpl/server/SimpleWriter.h @@ -48,7 +48,7 @@ public: std::vector result; result.reserve(std::distance(buf.begin(), buf.end())); for (auto const b : buf) - result.push_back(b); + result.emplace_back(b); return result; } }; diff --git a/include/xrpl/server/detail/BaseHTTPPeer.h b/include/xrpl/server/detail/BaseHTTPPeer.h index 878f6a1ddf..a0f8e1f318 100644 --- a/include/xrpl/server/detail/BaseHTTPPeer.h +++ b/include/xrpl/server/detail/BaseHTTPPeer.h @@ -23,6 +23,7 @@ #include #include #include +#include #include namespace xrpl { @@ -93,7 +94,7 @@ public: endpoint_type remote_address, ConstBufferSequence const& buffers); - virtual ~BaseHTTPPeer(); + ~BaseHTTPPeer() override; Session& session() @@ -195,7 +196,7 @@ BaseHTTPPeer::BaseHTTPPeer( , handler_(handler) , work_(boost::asio::make_work_guard(executor)) , strand_(boost::asio::make_strand(executor)) - , remote_address_(remote_address) + , remote_address_(std::move(remote_address)) , journal_(journal) { read_buf_.commit( @@ -219,10 +220,12 @@ void BaseHTTPPeer::close() { if (!strand_.running_in_this_thread()) + { return post( strand_, std::bind( (void (BaseHTTPPeer::*)(void))&BaseHTTPPeer::close, impl().shared_from_this())); + } boost::beast::get_lowest_layer(impl().stream_).close(); } @@ -398,11 +401,12 @@ BaseHTTPPeer::write(void const* buf, std::size_t bytes) }()) { if (!strand_.running_in_this_thread()) + { return post( strand_, std::bind(&BaseHTTPPeer::on_write, impl().shared_from_this(), error_code{}, 0)); - else - return on_write(error_code{}, 0); + } + return on_write(error_code{}, 0); } } @@ -436,8 +440,10 @@ void BaseHTTPPeer::complete() { if (!strand_.running_in_this_thread()) + { return post( strand_, std::bind(&BaseHTTPPeer::complete, impl().shared_from_this())); + } message_ = {}; complete_ = true; @@ -464,12 +470,14 @@ void BaseHTTPPeer::close(bool graceful) { if (!strand_.running_in_this_thread()) + { return post( strand_, std::bind( (void (BaseHTTPPeer::*)(bool))&BaseHTTPPeer::close, impl().shared_from_this(), graceful)); + } complete_ = true; if (graceful) diff --git a/include/xrpl/server/detail/BasePeer.h b/include/xrpl/server/detail/BasePeer.h index afa1ceb993..5bde6924a5 100644 --- a/include/xrpl/server/detail/BasePeer.h +++ b/include/xrpl/server/detail/BasePeer.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace xrpl { @@ -34,6 +35,7 @@ protected: boost::asio::strand strand_; public: + // NOLINTNEXTLINE(bugprone-crtp-constructor-accessibility) BasePeer( Port const& port, Handler& handler, @@ -63,7 +65,7 @@ BasePeer::BasePeer( beast::Journal journal) : port_(port) , handler_(handler) - , remote_address_(remote_address) + , remote_address_(std::move(remote_address)) , sink_( journal.sink(), [] { diff --git a/include/xrpl/server/detail/BaseWSPeer.h b/include/xrpl/server/detail/BaseWSPeer.h index 9213a955f0..4251617262 100644 --- a/include/xrpl/server/detail/BaseWSPeer.h +++ b/include/xrpl/server/detail/BaseWSPeer.h @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -285,6 +286,7 @@ BaseWSPeer::on_write(error_code const& ec) return; start_timer(); if (!result.first) + { impl().ws_.async_write_some( static_cast(result.first), result.second, @@ -292,7 +294,9 @@ BaseWSPeer::on_write(error_code const& ec) strand_, std::bind( &BaseWSPeer::on_write, impl().shared_from_this(), std::placeholders::_1))); + } else + { impl().ws_.async_write_some( static_cast(result.first), result.second, @@ -300,6 +304,7 @@ BaseWSPeer::on_write(error_code const& ec) strand_, std::bind( &BaseWSPeer::on_write_fin, impl().shared_from_this(), std::placeholders::_1))); + } } template @@ -319,7 +324,9 @@ BaseWSPeer::on_write_fin(error_code const& ec) &BaseWSPeer::on_close, impl().shared_from_this(), std::placeholders::_1))); } else if (!wq_.empty()) + { on_write({}); + } } template @@ -346,7 +353,7 @@ BaseWSPeer::on_read(error_code const& ec) auto const& data = rb_.data(); std::vector b; b.reserve(std::distance(data.begin(), data.end())); - std::copy(data.begin(), data.end(), std::back_inserter(b)); + std::ranges::copy(data, std::back_inserter(b)); this->handler_.onWSMessage(impl().shared_from_this(), b); rb_.consume(rb_.size()); } @@ -392,7 +399,7 @@ BaseWSPeer::cancel_timer() { timer_.cancel(); } - catch (boost::system::system_error const&) + catch (boost::system::system_error const&) // NOLINT(bugprone-empty-catch) { // ignored } diff --git a/include/xrpl/server/detail/Door.h b/include/xrpl/server/detail/Door.h index 87baad42db..346309f078 100644 --- a/include/xrpl/server/detail/Door.h +++ b/include/xrpl/server/detail/Door.h @@ -33,6 +33,7 @@ #include #include #include +#include namespace xrpl { @@ -93,7 +94,7 @@ private: port_.protocol.count("wss2") > 0 || port_.protocol.count("peer") > 0}; bool plain_{ port_.protocol.count("http") > 0 || port_.protocol.count("ws") > 0 || - port_.protocol.count("ws2")}; + (port_.protocol.count("ws2") != 0u)}; static constexpr std::chrono::milliseconds INITIAL_ACCEPT_DELAY{50}; static constexpr std::chrono::milliseconds MAX_ACCEPT_DELAY{2000}; std::chrono::milliseconds accept_delay_{INITIAL_ACCEPT_DELAY}; @@ -163,7 +164,7 @@ Door::Detector::Detector( , ioc_(ioc) , stream_(std::move(stream)) , socket_(stream_.socket()) - , remote_address_(remote_address) + , remote_address_(std::move(remote_address)) , strand_(boost::asio::make_strand(ioc_)) , j_(j) { @@ -297,8 +298,10 @@ void Door::close() { if (!strand_.running_in_this_thread()) + { return boost::asio::post( strand_, std::bind(&Door::close, this->shared_from_this())); + } backoff_timer_.cancel(); error_code ec; acceptor_.close(ec); @@ -432,11 +435,7 @@ Door::should_throttle_for_fds() auto const& s = *stats; auto const free = (s.limit > s.used) ? (s.limit - s.used) : 0ull; double const free_ratio = static_cast(free) / static_cast(s.limit); - if (free_ratio < FREE_FD_THRESHOLD) - { - return true; - } - return false; + return free_ratio < FREE_FD_THRESHOLD; #endif } diff --git a/include/xrpl/server/detail/ServerImpl.h b/include/xrpl/server/detail/ServerImpl.h index 0b5d075d87..14d2b56fe4 100644 --- a/include/xrpl/server/detail/ServerImpl.h +++ b/include/xrpl/server/detail/ServerImpl.h @@ -81,7 +81,7 @@ private: public: ServerImpl(Handler& handler, boost::asio::io_context& io_context, beast::Journal journal); - ~ServerImpl(); + ~ServerImpl() override; beast::Journal journal() override @@ -155,7 +155,7 @@ ServerImpl::ports(std::vector const& ports) list_.push_back(sp); auto ep = sp->get_endpoint(); - if (!internalPort.port) + if (internalPort.port == 0u) internalPort.port = ep.port(); eps.emplace(port.name, std::move(ep)); diff --git a/include/xrpl/server/detail/io_list.h b/include/xrpl/server/detail/io_list.h index f1cc04f683..ef11d3cea6 100644 --- a/include/xrpl/server/detail/io_list.h +++ b/include/xrpl/server/detail/io_list.h @@ -189,7 +189,7 @@ template std::shared_ptr io_list::emplace(Args&&... args) { - static_assert(std::is_base_of::value, "T must derive from io_list::work"); + static_assert(std::is_base_of_v, "T must derive from io_list::work"); if (closed_) return nullptr; auto sp = std::make_shared(std::forward(args)...); @@ -223,8 +223,10 @@ io_list::close(Finisher&& f) f_ = std::forward(f); lock.unlock(); for (auto const& p : map) + { if (auto sp = p.second.lock()) sp->close(); + } } else { diff --git a/include/xrpl/shamap/SHAMap.h b/include/xrpl/shamap/SHAMap.h index 213e7ce0ce..43b2734d65 100644 --- a/include/xrpl/shamap/SHAMap.h +++ b/include/xrpl/shamap/SHAMap.h @@ -94,10 +94,10 @@ private: public: /** Number of children each non-leaf node has (the 'radix tree' part of the * map) */ - static inline constexpr unsigned int branchFactor = SHAMapInnerNode::branchFactor; + static constexpr unsigned int branchFactor = SHAMapInnerNode::branchFactor; /** The depth of the hash map: data is only present in the leaves */ - static inline constexpr unsigned int leafDepth = 64; + static constexpr unsigned int leafDepth = 64; using DeltaItem = std::pair, boost::intrusive_ptr>; @@ -658,9 +658,13 @@ inline SHAMap::const_iterator& SHAMap::const_iterator::operator++() { if (auto temp = map_->peekNextItem(item_->key(), stack_)) + { item_ = temp->peekItem().get(); + } else + { item_ = nullptr; + } return *this; } diff --git a/include/xrpl/shamap/SHAMapAccountStateLeafNode.h b/include/xrpl/shamap/SHAMapAccountStateLeafNode.h index 98ac9776c3..2f71d10b0a 100644 --- a/include/xrpl/shamap/SHAMapAccountStateLeafNode.h +++ b/include/xrpl/shamap/SHAMapAccountStateLeafNode.h @@ -28,25 +28,25 @@ public: } intr_ptr::SharedPtr - clone(std::uint32_t cowid) const final override + clone(std::uint32_t cowid) const final { return intr_ptr::make_shared(item_, cowid, hash_); } SHAMapNodeType - getType() const final override + getType() const final { return SHAMapNodeType::tnACCOUNT_STATE; } void - updateHash() final override + updateHash() final { hash_ = SHAMapHash{sha512Half(HashPrefix::leafNode, item_->slice(), item_->key())}; } void - serializeForWire(Serializer& s) const final override + serializeForWire(Serializer& s) const final { s.addRaw(item_->slice()); s.addBitString(item_->key()); @@ -54,7 +54,7 @@ public: } void - serializeWithPrefix(Serializer& s) const final override + serializeWithPrefix(Serializer& s) const final { s.add32(HashPrefix::leafNode); s.addRaw(item_->slice()); diff --git a/include/xrpl/shamap/SHAMapInnerNode.h b/include/xrpl/shamap/SHAMapInnerNode.h index 73d59cc1fe..f2c34cbc1a 100644 --- a/include/xrpl/shamap/SHAMapInnerNode.h +++ b/include/xrpl/shamap/SHAMapInnerNode.h @@ -15,7 +15,7 @@ class SHAMapInnerNode final : public SHAMapTreeNode, public CountedObject const& @@ -53,7 +53,7 @@ public: setItem(boost::intrusive_ptr i); std::string - getString(SHAMapNodeID const&) const final override; + getString(SHAMapNodeID const&) const final; }; } // namespace xrpl diff --git a/include/xrpl/shamap/SHAMapTreeNode.h b/include/xrpl/shamap/SHAMapTreeNode.h index f837a8643b..55b18a2d12 100644 --- a/include/xrpl/shamap/SHAMapTreeNode.h +++ b/include/xrpl/shamap/SHAMapTreeNode.h @@ -40,11 +40,6 @@ protected: */ std::uint32_t cowid_; -protected: - SHAMapTreeNode(SHAMapTreeNode const&) = delete; - SHAMapTreeNode& - operator=(SHAMapTreeNode const&) = delete; - /** Construct a node @param cowid The identifier of a SHAMap. For more, see #cowid_ @@ -62,7 +57,11 @@ protected: /** @} */ public: - virtual ~SHAMapTreeNode() noexcept = default; + ~SHAMapTreeNode() noexcept override = default; + + SHAMapTreeNode(SHAMapTreeNode const&) = delete; + SHAMapTreeNode& + operator=(SHAMapTreeNode const&) = delete; // Needed to support weak intrusive pointers virtual void diff --git a/include/xrpl/shamap/SHAMapTxLeafNode.h b/include/xrpl/shamap/SHAMapTxLeafNode.h index dcedb26881..368aa2e21b 100644 --- a/include/xrpl/shamap/SHAMapTxLeafNode.h +++ b/include/xrpl/shamap/SHAMapTxLeafNode.h @@ -27,32 +27,32 @@ public: } intr_ptr::SharedPtr - clone(std::uint32_t cowid) const final override + clone(std::uint32_t cowid) const final { return intr_ptr::make_shared(item_, cowid, hash_); } SHAMapNodeType - getType() const final override + getType() const final { return SHAMapNodeType::tnTRANSACTION_NM; } void - updateHash() final override + updateHash() final { hash_ = SHAMapHash{sha512Half(HashPrefix::transactionID, item_->slice())}; } void - serializeForWire(Serializer& s) const final override + serializeForWire(Serializer& s) const final { s.addRaw(item_->slice()); s.add8(wireTypeTransaction); } void - serializeWithPrefix(Serializer& s) const final override + serializeWithPrefix(Serializer& s) const final { s.add32(HashPrefix::transactionID); s.addRaw(item_->slice()); diff --git a/include/xrpl/shamap/SHAMapTxPlusMetaLeafNode.h b/include/xrpl/shamap/SHAMapTxPlusMetaLeafNode.h index 60e645fccc..40be482ed9 100644 --- a/include/xrpl/shamap/SHAMapTxPlusMetaLeafNode.h +++ b/include/xrpl/shamap/SHAMapTxPlusMetaLeafNode.h @@ -40,13 +40,13 @@ public: } void - updateHash() final override + updateHash() final { hash_ = SHAMapHash{sha512Half(HashPrefix::txNode, item_->slice(), item_->key())}; } void - serializeForWire(Serializer& s) const final override + serializeForWire(Serializer& s) const final { s.addRaw(item_->slice()); s.addBitString(item_->key()); @@ -54,7 +54,7 @@ public: } void - serializeWithPrefix(Serializer& s) const final override + serializeWithPrefix(Serializer& s) const final { s.add32(HashPrefix::txNode); s.addRaw(item_->slice()); diff --git a/include/xrpl/tx/Transactor.h b/include/xrpl/tx/Transactor.h index 287f785cd7..a3b0af821e 100644 --- a/include/xrpl/tx/Transactor.h +++ b/include/xrpl/tx/Transactor.h @@ -7,6 +7,8 @@ #include #include +#include + namespace xrpl { /** State information when preflighting a tx. */ @@ -24,12 +26,12 @@ public: ServiceRegistry& registry_, STTx const& tx_, uint256 parentBatchId_, - Rules const& rules_, + Rules rules_, ApplyFlags flags_, beast::Journal j_ = beast::Journal{beast::Journal::getNullSink()}) : registry(registry_) , tx(tx_) - , rules(rules_) + , rules(std::move(rules_)) , flags(flags_) , parentBatchId(parentBatchId_) , j(j_) @@ -40,10 +42,10 @@ public: PreflightContext( ServiceRegistry& registry_, STTx const& tx_, - Rules const& rules_, + Rules rules_, ApplyFlags flags_, beast::Journal j_ = beast::Journal{beast::Journal::getNullSink()}) - : registry(registry_), tx(tx_), rules(rules_), flags(flags_), j(j_) + : registry(registry_), tx(tx_), rules(std::move(rules_)), flags(flags_), j(j_) { XRPL_ASSERT((flags_ & tapBATCH) == 0, "Batch apply flag should not be set"); } @@ -116,14 +118,13 @@ protected: AccountID const account_; XRPAmount preFeeBalance_{}; // Balance before fees. +public: + virtual ~Transactor() = default; Transactor(Transactor const&) = delete; Transactor& operator=(Transactor const&) = delete; - -public: - virtual ~Transactor() = default; - enum ConsequencesFactoryType { Normal, Blocker, Custom }; + /** Process the transaction. */ ApplyResult operator()(); @@ -140,6 +141,20 @@ public: return ctx_.view(); } + /** Check all invariants for the current transaction. + * + * Runs transaction-specific invariants first (visitInvariantEntry + + * finalizeInvariants), then protocol-level invariants. Both layers + * always run; the worst failure code is returned. + * + * @param result the tentative TER from transaction processing. + * @param fee the fee consumed by the transaction. + * + * @return the final TER after all invariant checks. + */ + [[nodiscard]] TER + checkInvariants(TER result, XRPAmount fee); + ///////////////////////////////////////////////////// /* These static functions are called from invoke_preclaim @@ -230,6 +245,52 @@ protected: virtual TER doApply() = 0; + /** Inspect a single ledger entry modified by this transaction. + * + * Called once for every SLE created, modified, or deleted by the + * transaction, before finalizeInvariants. Implementations should + * accumulate whatever state they need to verify transaction-specific + * post-conditions. + * + * @param isDelete true if the entry was erased from the ledger. + * @param before the entry's state before the transaction (nullptr + * for newly created entries). + * @param after the entry's state as supplied by the apply logic + * for this transaction. For deletions, this is the + * SLE being erased and is not guaranteed to be null; + * callers must use isDelete rather than after == nullptr + * to detect deletions. + */ + virtual void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) = 0; + + /** Check transaction-specific post-conditions after all entries have + * been visited. + * + * Called once after every modified ledger entry has been passed to + * visitInvariantEntry. Returns true if all transaction-specific + * invariants hold, or false to fail the transaction with + * tecINVARIANT_FAILED. + * + * @param tx the transaction being applied. + * @param result the tentative TER result so far. + * @param fee the fee consumed by the transaction. + * @param view read-only view of the ledger after the transaction. + * @param j journal for logging invariant failures. + * + * @return true if all invariants pass; false otherwise. + */ + [[nodiscard]] virtual bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) = 0; + /** Compute the minimum fee required to process a transaction with a given baseFee based on the current server load. @@ -335,6 +396,21 @@ private: */ static NotTEC preflight2(PreflightContext const& ctx); + + /** Check transaction-specific invariants only. + * + * Walks every modified ledger entry via visitInvariantEntry, then + * calls finalizeInvariants on the derived transactor. Returns + * tecINVARIANT_FAILED if any transaction invariant is violated. + * + * @param result the tentative TER from transaction processing. + * @param fee the fee consumed by the transaction. + * + * @return the original result if all invariants pass, or + * tecINVARIANT_FAILED otherwise. + */ + [[nodiscard]] TER + checkTransactionInvariants(TER result, XRPAmount fee); }; inline bool diff --git a/include/xrpl/tx/applySteps.h b/include/xrpl/tx/applySteps.h index 9ce6dfb1e2..ee7faeebd3 100644 --- a/include/xrpl/tx/applySteps.h +++ b/include/xrpl/tx/applySteps.h @@ -27,7 +27,7 @@ struct ApplyResult inline bool isTecClaimHardFail(TER ter, ApplyFlags flags) { - return isTecClaim(ter) && !(flags & tapRETRY); + return isTecClaim(ter) && ((flags & tapRETRY) == 0u); } /** Class describing the consequences to the account diff --git a/include/xrpl/tx/invariants/AMMInvariant.h b/include/xrpl/tx/invariants/AMMInvariant.h index e872c61f76..b15b62cc93 100644 --- a/include/xrpl/tx/invariants/AMMInvariant.h +++ b/include/xrpl/tx/invariants/AMMInvariant.h @@ -20,9 +20,7 @@ class ValidAMM public: enum class ZeroAllowed : bool { No = false, Yes = true }; - ValidAMM() - { - } + ValidAMM() = default; void visitEntry(bool, std::shared_ptr const&, std::shared_ptr const&); diff --git a/include/xrpl/tx/invariants/PermissionedDEXInvariant.h b/include/xrpl/tx/invariants/PermissionedDEXInvariant.h index b4e06cd212..da187779b2 100644 --- a/include/xrpl/tx/invariants/PermissionedDEXInvariant.h +++ b/include/xrpl/tx/invariants/PermissionedDEXInvariant.h @@ -11,7 +11,8 @@ namespace xrpl { class ValidPermissionedDEX { bool regularOffers_ = false; - bool badHybrids_ = false; + bool badHybridsOld_ = false; // pre-fixSecurity3_1_3: missing field/domain or size > 1 + bool badHybrids_ = false; // post-fixSecurity3_1_3: also catches size == 0 (size != 1) hash_set domains_; public: diff --git a/include/xrpl/tx/invariants/VaultInvariant.h b/include/xrpl/tx/invariants/VaultInvariant.h index ded9e4618b..b9b3bf746f 100644 --- a/include/xrpl/tx/invariants/VaultInvariant.h +++ b/include/xrpl/tx/invariants/VaultInvariant.h @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -39,9 +40,9 @@ class ValidVault struct Vault final { uint256 key = beast::zero; - Asset asset = {}; - AccountID pseudoId = {}; - AccountID owner = {}; + Asset asset; + AccountID pseudoId; + AccountID owner; uint192 shareMPTID = beast::zero; Number assetsTotal = 0; Number assetsAvailable = 0; @@ -53,18 +54,30 @@ class ValidVault struct Shares final { - MPTIssue share = {}; + MPTIssue share; std::uint64_t sharesTotal = 0; std::uint64_t sharesMaximum = 0; Shares static make(SLE const&); }; - std::vector afterVault_ = {}; - std::vector afterMPTs_ = {}; - std::vector beforeVault_ = {}; - std::vector beforeMPTs_ = {}; - std::unordered_map deltas_ = {}; +public: + struct DeltaInfo final + { + Number delta = numZero; + std::optional scale; + + // Compute the delta between two Numbers, taking the coarsest scale + [[nodiscard]] static DeltaInfo + makeDelta(Number const& before, Number const& after, Asset const& asset); + }; + +private: + std::vector afterVault_; + std::vector afterMPTs_; + std::vector beforeVault_; + std::vector beforeMPTs_; + std::unordered_map deltas_; public: void @@ -72,6 +85,10 @@ public: bool finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&); + + // Compute the coarsest scale required to represent all numbers + [[nodiscard]] static std::int32_t + computeCoarsestScale(std::vector const& numbers); }; } // namespace xrpl diff --git a/include/xrpl/tx/paths/Flow.h b/include/xrpl/tx/paths/Flow.h index f37c9d56c3..c746249866 100644 --- a/include/xrpl/tx/paths/Flow.h +++ b/include/xrpl/tx/paths/Flow.h @@ -6,11 +6,9 @@ namespace xrpl { -namespace path { -namespace detail { +namespace path::detail { struct FlowDebugInfo; -} // namespace detail -} // namespace path +} // namespace path::detail /** Make a payment from the src account to the dst account diff --git a/include/xrpl/tx/paths/Offer.h b/include/xrpl/tx/paths/Offer.h index ae7a47061a..f79f33658b 100644 --- a/include/xrpl/tx/paths/Offer.h +++ b/include/xrpl/tx/paths/Offer.h @@ -11,6 +11,7 @@ #include #include +#include namespace xrpl { @@ -31,7 +32,7 @@ private: public: TOffer() = default; - TOffer(SLE::pointer const& entry, Quality quality); + TOffer(SLE::pointer entry, Quality quality); /** Returns the quality of the offer. Conceptually, the quality is the ratio of output to input currency. @@ -157,8 +158,8 @@ public: }; template -TOffer::TOffer(SLE::pointer const& entry, Quality quality) - : m_entry(entry), m_quality(quality), m_account(m_entry->getAccountID(sfAccount)) +TOffer::TOffer(SLE::pointer entry, Quality quality) + : m_entry(std::move(entry)), m_quality(quality), m_account(m_entry->getAccountID(sfAccount)) { auto const tp = m_entry->getFieldAmount(sfTakerPays); auto const tg = m_entry->getFieldAmount(sfTakerGets); @@ -173,14 +174,22 @@ void TOffer::setFieldAmounts() { if constexpr (std::is_same_v) + { m_entry->setFieldAmount(sfTakerPays, toSTAmount(m_amounts.in)); + } else + { m_entry->setFieldAmount(sfTakerPays, toSTAmount(m_amounts.in, assetIn_)); + } if constexpr (std::is_same_v) + { m_entry->setFieldAmount(sfTakerGets, toSTAmount(m_amounts.out)); + } else + { m_entry->setFieldAmount(sfTakerGets, toSTAmount(m_amounts.out, assetOut_)); + } } template @@ -200,11 +209,13 @@ TOffer::limitIn(TAmounts const& offerAmount, TIn const& li { if (auto const& rules = getCurrentTransactionRules(); rules && rules->enabled(fixReducedOffersV2)) + { // It turns out that the ceil_in implementation has some slop in // it. ceil_in_strict removes that slop. But removing that slop // affects transaction outcomes, so the change must be made using // an amendment. return quality().ceil_in_strict(offerAmount, limit, roundUp); + } return m_quality.ceil_in(offerAmount, limit); } diff --git a/include/xrpl/tx/paths/detail/FlowDebugInfo.h b/include/xrpl/tx/paths/detail/FlowDebugInfo.h index 3a1f45fd02..dd7a0bb9c5 100644 --- a/include/xrpl/tx/paths/detail/FlowDebugInfo.h +++ b/include/xrpl/tx/paths/detail/FlowDebugInfo.h @@ -11,9 +11,7 @@ #include #include -namespace xrpl { -namespace path { -namespace detail { +namespace xrpl::path::detail { // Track performance information of a single payment struct FlowDebugInfo { @@ -220,6 +218,7 @@ struct FlowDebugInfo write_list(amts, get_val, delim); }; auto writeIntList = [&write_list](std::vector const& vals, char delim = ';') { + // NOLINTNEXTLINE(bugprone-return-const-ref-from-parameter) auto get_val = [](size_t const& v) -> size_t const& { return v; }; write_list(vals, get_val); }; @@ -254,28 +253,44 @@ struct FlowDebugInfo ostr << ", in_pass: "; if (passInfo.nativeIn) + { writeXrpAmtList(passInfo.in); + } else + { writeIouAmtList(passInfo.in); + } ostr << ", out_pass: "; if (passInfo.nativeOut) + { writeXrpAmtList(passInfo.out); + } else + { writeIouAmtList(passInfo.out); + } ostr << ", num_active: "; writeIntList(passInfo.numActive); if (!passInfo.liquiditySrcIn.empty() && !passInfo.liquiditySrcIn.back().empty()) { ostr << ", l_src_in: "; if (passInfo.nativeIn) + { writeNestedXrpAmtList(passInfo.liquiditySrcIn); + } else + { writeNestedIouAmtList(passInfo.liquiditySrcIn); + } ostr << ", l_src_out: "; if (passInfo.nativeOut) + { writeNestedXrpAmtList(passInfo.liquiditySrcOut); + } else + { writeNestedIouAmtList(passInfo.liquiditySrcOut); + } } } @@ -335,6 +350,4 @@ balanceDiffsToString(std::optional const& bd) return ostr.str(); }; -} // namespace detail -} // namespace path -} // namespace xrpl +} // namespace xrpl::path::detail diff --git a/include/xrpl/tx/paths/detail/StepChecks.h b/include/xrpl/tx/paths/detail/StepChecks.h index 7ad9279c87..a1e6490781 100644 --- a/include/xrpl/tx/paths/detail/StepChecks.h +++ b/include/xrpl/tx/paths/detail/StepChecks.h @@ -77,8 +77,8 @@ checkNoRipple( if (!sleIn || !sleOut) return terNO_LINE; - if ((*sleIn)[sfFlags] & ((cur > prev) ? lsfHighNoRipple : lsfLowNoRipple) && - (*sleOut)[sfFlags] & ((cur > next) ? lsfHighNoRipple : lsfLowNoRipple)) + if ((((*sleIn)[sfFlags] & ((cur > prev) ? lsfHighNoRipple : lsfLowNoRipple)) != 0u) && + (((*sleOut)[sfFlags] & ((cur > next) ? lsfHighNoRipple : lsfLowNoRipple)) != 0u)) { JLOG(j.info()) << "Path violates noRipple constraint between " << prev << ", " << cur << " and " << next; diff --git a/include/xrpl/tx/paths/detail/Steps.h b/include/xrpl/tx/paths/detail/Steps.h index 4fa3b09d07..c46cebca88 100644 --- a/include/xrpl/tx/paths/detail/Steps.h +++ b/include/xrpl/tx/paths/detail/Steps.h @@ -288,10 +288,10 @@ private: inline std::pair, DebtDirection> Step::getQualityFunc(ReadView const& v, DebtDirection prevStepDir) const { - if (auto const res = qualityUpperBound(v, prevStepDir); res.first) + auto const res = qualityUpperBound(v, prevStepDir); + if (res.first) return {QualityFunction{*res.first, QualityFunction::CLOBLikeTag{}}, res.second}; - else - return {std::nullopt, res.second}; + return {std::nullopt, res.second}; } /// @cond INTERNAL @@ -317,8 +317,10 @@ operator==(Strand const& lhs, Strand const& rhs) if (lhs.size() != rhs.size()) return false; for (size_t i = 0, e = lhs.size(); i != e; ++i) + { if (*lhs[i] != *rhs[i]) return false; + } return true; } /// @endcond @@ -429,8 +431,10 @@ toStrands( template struct StepImp : public Step { +private: explicit StepImp() = default; +public: std::pair rev(PaymentSandbox& sb, ApplyView& afView, @@ -470,6 +474,7 @@ struct StepImp : public Step { return get(lhs) == get(rhs); } + friend TDerived; }; /// @endcond @@ -632,9 +637,13 @@ bool isDirectXrpToXrp(Strand const& strand) { if constexpr (std::is_same_v && std::is_same_v) + { return strand.size() == 2; + } else + { return false; + } } /// @endcond diff --git a/include/xrpl/tx/paths/detail/StrandFlow.h b/include/xrpl/tx/paths/detail/StrandFlow.h index 9892facee3..52b7d94484 100644 --- a/include/xrpl/tx/paths/detail/StrandFlow.h +++ b/include/xrpl/tx/paths/detail/StrandFlow.h @@ -327,9 +327,13 @@ qualityUpperBound(ReadView const& v, Strand const& strand) for (auto const& step : strand) { if (std::tie(stepQ, dir) = step->qualityUpperBound(v, dir); stepQ) + { q = composed_quality(q, *stepQ); + } else + { return std::nullopt; + } } return q; }; @@ -360,12 +364,18 @@ limitOut( if (std::tie(stepQualityFunc, dir) = step->getQualityFunc(v, dir); stepQualityFunc) { if (!qf) + { qf = stepQualityFunc; + } else + { qf->combine(*stepQualityFunc); + } } else + { return remainingOut; + } } // QualityFunction is constant @@ -373,16 +383,25 @@ limitOut( return remainingOut; auto const out = [&]() { - if (auto const out = qf->outFromAvgQ(limitQuality); !out) + auto const out = qf->outFromAvgQ(limitQuality); + if (!out) return remainingOut; - else if constexpr (std::is_same_v) + if constexpr (std::is_same_v) + { return XRPAmount{*out}; + } else if constexpr (std::is_same_v) + { return IOUAmount{*out}; + } else if constexpr (std::is_same_v) + { return MPTAmount{*out}; + } else + { return STAmount{remainingOut.asset(), out->mantissa(), out->exponent()}; + } }(); // A tiny difference could be due to the round off if (withinRelativeDistance(out, remainingOut, Number(1, -9))) @@ -432,7 +451,7 @@ public: { for (Strand const* strand : next_) { - if (!strand) + if (strand == nullptr) { // should not happen continue; @@ -449,14 +468,14 @@ public: // an unusual corner case. continue; } - strandQualities.push_back({*qual, strand}); + strandQualities.emplace_back(*qual, strand); } } // must stable sort for deterministic order across different c++ // standard library implementations - std::stable_sort( - strandQualities.begin(), - strandQualities.end(), + std::ranges::stable_sort( + strandQualities, + [](auto const& lhs, auto const& rhs) { // higher qualities first return std::get(lhs) > std::get(rhs); @@ -627,8 +646,10 @@ flow( // Limit only if one strand and limitQuality auto const limitRemainingOut = [&]() { if (activeStrands.size() == 1 && limitQuality) + { if (auto const strand = activeStrands.get(0)) return limitOut(sb, *strand, remainingOut, *limitQuality); + } return remainingOut; }(); auto const adjustedRemOut = limitRemainingOut != remainingOut; @@ -717,8 +738,10 @@ flow( remainingIn = *sendMax - sum(savedIns); if (flowDebugInfo) + { flowDebugInfo->pushPass( EitherAmount(best->in), EitherAmount(best->out), activeStrands.size()); + } JLOG(j.trace()) << "Best path: in: " << to_string(best->in) << " out: " << to_string(best->out) diff --git a/include/xrpl/tx/transactors/account/AccountDelete.h b/include/xrpl/tx/transactors/account/AccountDelete.h index 81a11152ed..23fc55da48 100644 --- a/include/xrpl/tx/transactors/account/AccountDelete.h +++ b/include/xrpl/tx/transactors/account/AccountDelete.h @@ -27,6 +27,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/account/AccountSet.h b/include/xrpl/tx/transactors/account/AccountSet.h index 0940ab0739..fd2106e20c 100644 --- a/include/xrpl/tx/transactors/account/AccountSet.h +++ b/include/xrpl/tx/transactors/account/AccountSet.h @@ -31,6 +31,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/account/SetRegularKey.h b/include/xrpl/tx/transactors/account/SetRegularKey.h index bb1dd48a68..54e574939a 100644 --- a/include/xrpl/tx/transactors/account/SetRegularKey.h +++ b/include/xrpl/tx/transactors/account/SetRegularKey.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/account/SignerListSet.h b/include/xrpl/tx/transactors/account/SignerListSet.h index 2529f0d36c..1f1a68ccc8 100644 --- a/include/xrpl/tx/transactors/account/SignerListSet.h +++ b/include/xrpl/tx/transactors/account/SignerListSet.h @@ -41,6 +41,20 @@ public: void preCompute() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + // Interface used by AccountDelete static TER removeFromLedger( diff --git a/include/xrpl/tx/transactors/bridge/XChainBridge.h b/include/xrpl/tx/transactors/bridge/XChainBridge.h index 0a2fccc18b..cd16c0b791 100644 --- a/include/xrpl/tx/transactors/bridge/XChainBridge.h +++ b/include/xrpl/tx/transactors/bridge/XChainBridge.h @@ -26,6 +26,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; class BridgeModify : public Transactor @@ -48,6 +62,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; using XChainModifyBridge = BridgeModify; @@ -81,6 +109,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ @@ -108,6 +150,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ @@ -137,6 +193,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ @@ -166,6 +236,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; class XChainAddAccountCreateAttestation : public Transactor @@ -186,6 +270,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ @@ -230,6 +328,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; using XChainAccountCreateCommit = XChainCreateAccountCommit; diff --git a/include/xrpl/tx/transactors/check/CheckCancel.h b/include/xrpl/tx/transactors/check/CheckCancel.h index f16c6d2827..14abeaa978 100644 --- a/include/xrpl/tx/transactors/check/CheckCancel.h +++ b/include/xrpl/tx/transactors/check/CheckCancel.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/check/CheckCash.h b/include/xrpl/tx/transactors/check/CheckCash.h index 3b914d2024..312c5a983e 100644 --- a/include/xrpl/tx/transactors/check/CheckCash.h +++ b/include/xrpl/tx/transactors/check/CheckCash.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/check/CheckCreate.h b/include/xrpl/tx/transactors/check/CheckCreate.h index bcb9d16ea2..ff24d36e2c 100644 --- a/include/xrpl/tx/transactors/check/CheckCreate.h +++ b/include/xrpl/tx/transactors/check/CheckCreate.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/credentials/CredentialAccept.h b/include/xrpl/tx/transactors/credentials/CredentialAccept.h index 1895e54589..f3abc80666 100644 --- a/include/xrpl/tx/transactors/credentials/CredentialAccept.h +++ b/include/xrpl/tx/transactors/credentials/CredentialAccept.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/credentials/CredentialCreate.h b/include/xrpl/tx/transactors/credentials/CredentialCreate.h index 500b034a9c..22247feb36 100644 --- a/include/xrpl/tx/transactors/credentials/CredentialCreate.h +++ b/include/xrpl/tx/transactors/credentials/CredentialCreate.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/credentials/CredentialDelete.h b/include/xrpl/tx/transactors/credentials/CredentialDelete.h index 26305232ce..91ea4d05ad 100644 --- a/include/xrpl/tx/transactors/credentials/CredentialDelete.h +++ b/include/xrpl/tx/transactors/credentials/CredentialDelete.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/delegate/DelegateSet.h b/include/xrpl/tx/transactors/delegate/DelegateSet.h index cc3a8fe4cb..25cb21e9b5 100644 --- a/include/xrpl/tx/transactors/delegate/DelegateSet.h +++ b/include/xrpl/tx/transactors/delegate/DelegateSet.h @@ -22,6 +22,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + // Interface used by AccountDelete static TER deleteDelegate( diff --git a/include/xrpl/tx/transactors/dex/AMMBid.h b/include/xrpl/tx/transactors/dex/AMMBid.h index b80bfe3bef..e872c0d12d 100644 --- a/include/xrpl/tx/transactors/dex/AMMBid.h +++ b/include/xrpl/tx/transactors/dex/AMMBid.h @@ -62,6 +62,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/dex/AMMClawback.h b/include/xrpl/tx/transactors/dex/AMMClawback.h index dd455903a2..4f44da60d2 100644 --- a/include/xrpl/tx/transactors/dex/AMMClawback.h +++ b/include/xrpl/tx/transactors/dex/AMMClawback.h @@ -28,6 +28,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + private: TER applyGuts(Sandbox& view); diff --git a/include/xrpl/tx/transactors/dex/AMMCreate.h b/include/xrpl/tx/transactors/dex/AMMCreate.h index 5deaa129ed..a3ee083b9a 100644 --- a/include/xrpl/tx/transactors/dex/AMMCreate.h +++ b/include/xrpl/tx/transactors/dex/AMMCreate.h @@ -58,6 +58,20 @@ public: /** Attempt to create the AMM instance. */ TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/dex/AMMDelete.h b/include/xrpl/tx/transactors/dex/AMMDelete.h index 1c0996f8a2..a1708eec88 100644 --- a/include/xrpl/tx/transactors/dex/AMMDelete.h +++ b/include/xrpl/tx/transactors/dex/AMMDelete.h @@ -30,6 +30,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/dex/AMMDeposit.h b/include/xrpl/tx/transactors/dex/AMMDeposit.h index e2a19504ae..87f2871d27 100644 --- a/include/xrpl/tx/transactors/dex/AMMDeposit.h +++ b/include/xrpl/tx/transactors/dex/AMMDeposit.h @@ -63,6 +63,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + private: std::pair applyGuts(Sandbox& view); diff --git a/include/xrpl/tx/transactors/dex/AMMVote.h b/include/xrpl/tx/transactors/dex/AMMVote.h index ab04b30993..f83cdcfcd2 100644 --- a/include/xrpl/tx/transactors/dex/AMMVote.h +++ b/include/xrpl/tx/transactors/dex/AMMVote.h @@ -47,6 +47,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/dex/AMMWithdraw.h b/include/xrpl/tx/transactors/dex/AMMWithdraw.h index 087fd3a14c..a07cfca693 100644 --- a/include/xrpl/tx/transactors/dex/AMMWithdraw.h +++ b/include/xrpl/tx/transactors/dex/AMMWithdraw.h @@ -71,6 +71,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + /** Equal-asset withdrawal (LPTokens) of some AMM instance pools * shares represented by the number of LPTokens . * The trading fee is not charged. diff --git a/include/xrpl/tx/transactors/dex/OfferCancel.h b/include/xrpl/tx/transactors/dex/OfferCancel.h index c4c57ff3b4..d18808d236 100644 --- a/include/xrpl/tx/transactors/dex/OfferCancel.h +++ b/include/xrpl/tx/transactors/dex/OfferCancel.h @@ -22,6 +22,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/dex/OfferCreate.h b/include/xrpl/tx/transactors/dex/OfferCreate.h index ad36f1b6e6..09c9c0dd6f 100644 --- a/include/xrpl/tx/transactors/dex/OfferCreate.h +++ b/include/xrpl/tx/transactors/dex/OfferCreate.h @@ -40,6 +40,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + private: std::pair applyGuts(Sandbox& view, Sandbox& view_cancel); diff --git a/include/xrpl/tx/transactors/did/DIDDelete.h b/include/xrpl/tx/transactors/did/DIDDelete.h index 037a57bb02..47b4112762 100644 --- a/include/xrpl/tx/transactors/did/DIDDelete.h +++ b/include/xrpl/tx/transactors/did/DIDDelete.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/did/DIDSet.h b/include/xrpl/tx/transactors/did/DIDSet.h index fe1c476b47..2e88570065 100644 --- a/include/xrpl/tx/transactors/did/DIDSet.h +++ b/include/xrpl/tx/transactors/did/DIDSet.h @@ -18,6 +18,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/escrow/EscrowCancel.h b/include/xrpl/tx/transactors/escrow/EscrowCancel.h index c8b97203f0..253d88613f 100644 --- a/include/xrpl/tx/transactors/escrow/EscrowCancel.h +++ b/include/xrpl/tx/transactors/escrow/EscrowCancel.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/escrow/EscrowCreate.h b/include/xrpl/tx/transactors/escrow/EscrowCreate.h index 221ffee070..3cbeb47fa1 100644 --- a/include/xrpl/tx/transactors/escrow/EscrowCreate.h +++ b/include/xrpl/tx/transactors/escrow/EscrowCreate.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/escrow/EscrowFinish.h b/include/xrpl/tx/transactors/escrow/EscrowFinish.h index 0917c35d93..6279b3a9af 100644 --- a/include/xrpl/tx/transactors/escrow/EscrowFinish.h +++ b/include/xrpl/tx/transactors/escrow/EscrowFinish.h @@ -30,6 +30,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/lending/LendingHelpers.h b/include/xrpl/tx/transactors/lending/LendingHelpers.h index 897ca3995b..1c938bbc8a 100644 --- a/include/xrpl/tx/transactors/lending/LendingHelpers.h +++ b/include/xrpl/tx/transactors/lending/LendingHelpers.h @@ -171,7 +171,7 @@ getAssetsTotalScale(SLE::const_ref vaultSle) { if (!vaultSle) return Number::minExponent - 1; // LCOV_EXCL_LINE - return STAmount{vaultSle->at(sfAsset), vaultSle->at(sfAssetsTotal)}.exponent(); + return scale(vaultSle->at(sfAssetsTotal), vaultSle->at(sfAsset)); } TER diff --git a/include/xrpl/tx/transactors/lending/LoanBrokerCoverClawback.h b/include/xrpl/tx/transactors/lending/LoanBrokerCoverClawback.h index b1e539392f..9a028b6448 100644 --- a/include/xrpl/tx/transactors/lending/LoanBrokerCoverClawback.h +++ b/include/xrpl/tx/transactors/lending/LoanBrokerCoverClawback.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanBrokerCoverDeposit.h b/include/xrpl/tx/transactors/lending/LoanBrokerCoverDeposit.h index 8dda417443..9b0cd9b176 100644 --- a/include/xrpl/tx/transactors/lending/LoanBrokerCoverDeposit.h +++ b/include/xrpl/tx/transactors/lending/LoanBrokerCoverDeposit.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.h b/include/xrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.h index 52b14bfb67..74c35d5667 100644 --- a/include/xrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.h +++ b/include/xrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanBrokerDelete.h b/include/xrpl/tx/transactors/lending/LoanBrokerDelete.h index b9c9851c41..3de0f6fec2 100644 --- a/include/xrpl/tx/transactors/lending/LoanBrokerDelete.h +++ b/include/xrpl/tx/transactors/lending/LoanBrokerDelete.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanBrokerSet.h b/include/xrpl/tx/transactors/lending/LoanBrokerSet.h index ce1e069791..519ccd6ce9 100644 --- a/include/xrpl/tx/transactors/lending/LoanBrokerSet.h +++ b/include/xrpl/tx/transactors/lending/LoanBrokerSet.h @@ -27,6 +27,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanDelete.h b/include/xrpl/tx/transactors/lending/LoanDelete.h index ff78d7db60..5c6ec46d33 100644 --- a/include/xrpl/tx/transactors/lending/LoanDelete.h +++ b/include/xrpl/tx/transactors/lending/LoanDelete.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanManage.h b/include/xrpl/tx/transactors/lending/LoanManage.h index 810e9bbf65..98b7e38ba6 100644 --- a/include/xrpl/tx/transactors/lending/LoanManage.h +++ b/include/xrpl/tx/transactors/lending/LoanManage.h @@ -58,6 +58,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanPay.h b/include/xrpl/tx/transactors/lending/LoanPay.h index 2e3cce75ed..83271cf4e7 100644 --- a/include/xrpl/tx/transactors/lending/LoanPay.h +++ b/include/xrpl/tx/transactors/lending/LoanPay.h @@ -30,6 +30,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; //------------------------------------------------------------------------------ diff --git a/include/xrpl/tx/transactors/lending/LoanSet.h b/include/xrpl/tx/transactors/lending/LoanSet.h index 86101d0735..c778582ab0 100644 --- a/include/xrpl/tx/transactors/lending/LoanSet.h +++ b/include/xrpl/tx/transactors/lending/LoanSet.h @@ -38,6 +38,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + public: static std::uint32_t constexpr minPaymentTotal = 1; static std::uint32_t constexpr defaultPaymentTotal = 1; diff --git a/include/xrpl/tx/transactors/nft/NFTokenAcceptOffer.h b/include/xrpl/tx/transactors/nft/NFTokenAcceptOffer.h index 60962fc9ca..7291db9a2e 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenAcceptOffer.h +++ b/include/xrpl/tx/transactors/nft/NFTokenAcceptOffer.h @@ -34,6 +34,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/nft/NFTokenBurn.h b/include/xrpl/tx/transactors/nft/NFTokenBurn.h index 8737997f03..2830b7c22a 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenBurn.h +++ b/include/xrpl/tx/transactors/nft/NFTokenBurn.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/nft/NFTokenCancelOffer.h b/include/xrpl/tx/transactors/nft/NFTokenCancelOffer.h index 6d60a0bebd..540258b8d6 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenCancelOffer.h +++ b/include/xrpl/tx/transactors/nft/NFTokenCancelOffer.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/nft/NFTokenCreateOffer.h b/include/xrpl/tx/transactors/nft/NFTokenCreateOffer.h index a48e53589d..532aa5c120 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenCreateOffer.h +++ b/include/xrpl/tx/transactors/nft/NFTokenCreateOffer.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/nft/NFTokenMint.h b/include/xrpl/tx/transactors/nft/NFTokenMint.h index d04f88ed3b..6dcf8eaf12 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenMint.h +++ b/include/xrpl/tx/transactors/nft/NFTokenMint.h @@ -30,6 +30,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + // Public to support unit tests. static uint256 createNFTokenID( diff --git a/include/xrpl/tx/transactors/nft/NFTokenModify.h b/include/xrpl/tx/transactors/nft/NFTokenModify.h index a64df65783..a1076a96a9 100644 --- a/include/xrpl/tx/transactors/nft/NFTokenModify.h +++ b/include/xrpl/tx/transactors/nft/NFTokenModify.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/oracle/OracleDelete.h b/include/xrpl/tx/transactors/oracle/OracleDelete.h index 9d1e6d3a44..5de69e980f 100644 --- a/include/xrpl/tx/transactors/oracle/OracleDelete.h +++ b/include/xrpl/tx/transactors/oracle/OracleDelete.h @@ -31,6 +31,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + static TER deleteOracle( ApplyView& view, diff --git a/include/xrpl/tx/transactors/oracle/OracleSet.h b/include/xrpl/tx/transactors/oracle/OracleSet.h index d879d14a84..426f46c2b4 100644 --- a/include/xrpl/tx/transactors/oracle/OracleSet.h +++ b/include/xrpl/tx/transactors/oracle/OracleSet.h @@ -30,6 +30,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/payment/DepositPreauth.h b/include/xrpl/tx/transactors/payment/DepositPreauth.h index b397a81748..f74be24c56 100644 --- a/include/xrpl/tx/transactors/payment/DepositPreauth.h +++ b/include/xrpl/tx/transactors/payment/DepositPreauth.h @@ -25,6 +25,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + // Interface used by AccountDelete static TER removeFromLedger(ApplyView& view, uint256 const& delIndex, beast::Journal j); diff --git a/include/xrpl/tx/transactors/payment/Payment.h b/include/xrpl/tx/transactors/payment/Payment.h index bc5bc4fee3..3baf1fa55f 100644 --- a/include/xrpl/tx/transactors/payment/Payment.h +++ b/include/xrpl/tx/transactors/payment/Payment.h @@ -39,6 +39,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/payment_channel/PaymentChannelClaim.h b/include/xrpl/tx/transactors/payment_channel/PaymentChannelClaim.h index 449e503bc4..6e9a269b8d 100644 --- a/include/xrpl/tx/transactors/payment_channel/PaymentChannelClaim.h +++ b/include/xrpl/tx/transactors/payment_channel/PaymentChannelClaim.h @@ -27,6 +27,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/payment_channel/PaymentChannelCreate.h b/include/xrpl/tx/transactors/payment_channel/PaymentChannelCreate.h index 7fdacf9b3a..cd0250713a 100644 --- a/include/xrpl/tx/transactors/payment_channel/PaymentChannelCreate.h +++ b/include/xrpl/tx/transactors/payment_channel/PaymentChannelCreate.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/payment_channel/PaymentChannelFund.h b/include/xrpl/tx/transactors/payment_channel/PaymentChannelFund.h index 69f74a4c53..befe9ac951 100644 --- a/include/xrpl/tx/transactors/payment_channel/PaymentChannelFund.h +++ b/include/xrpl/tx/transactors/payment_channel/PaymentChannelFund.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.h b/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.h index b5c72413a2..93879c55b2 100644 --- a/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.h +++ b/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.h @@ -22,6 +22,20 @@ public: /** Attempt to delete the Permissioned Domain. */ TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.h b/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.h index acf9194ee2..3187be08e1 100644 --- a/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.h +++ b/include/xrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.h @@ -25,6 +25,20 @@ public: /** Attempt to create the Permissioned Domain. */ TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/system/Batch.h b/include/xrpl/tx/transactors/system/Batch.h index 5f7a6d04e2..1d9a66ec9a 100644 --- a/include/xrpl/tx/transactors/system/Batch.h +++ b/include/xrpl/tx/transactors/system/Batch.h @@ -33,22 +33,37 @@ public: TER doApply() override; - static constexpr auto disabledTxTypes = std::to_array( - {ttVAULT_CREATE, - ttVAULT_SET, - ttVAULT_DELETE, - ttVAULT_DEPOSIT, - ttVAULT_WITHDRAW, - ttVAULT_CLAWBACK, - ttLOAN_BROKER_SET, - ttLOAN_BROKER_DELETE, - ttLOAN_BROKER_COVER_DEPOSIT, - ttLOAN_BROKER_COVER_WITHDRAW, - ttLOAN_BROKER_COVER_CLAWBACK, - ttLOAN_SET, - ttLOAN_DELETE, - ttLOAN_MANAGE, - ttLOAN_PAY}); + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + + static constexpr auto disabledTxTypes = std::to_array({ + ttVAULT_CREATE, + ttVAULT_SET, + ttVAULT_DELETE, + ttVAULT_DEPOSIT, + ttVAULT_WITHDRAW, + ttVAULT_CLAWBACK, + ttLOAN_BROKER_SET, + ttLOAN_BROKER_DELETE, + ttLOAN_BROKER_COVER_DEPOSIT, + ttLOAN_BROKER_COVER_WITHDRAW, + ttLOAN_BROKER_COVER_CLAWBACK, + ttLOAN_SET, + ttLOAN_DELETE, + ttLOAN_MANAGE, + ttLOAN_PAY, + }); }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/system/Change.h b/include/xrpl/tx/transactors/system/Change.h index 1bf63ff0db..b966ef73ec 100644 --- a/include/xrpl/tx/transactors/system/Change.h +++ b/include/xrpl/tx/transactors/system/Change.h @@ -18,6 +18,20 @@ public: void preCompute() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + static XRPAmount calculateBaseFee(ReadView const& view, STTx const& tx) { diff --git a/include/xrpl/tx/transactors/system/LedgerStateFix.h b/include/xrpl/tx/transactors/system/LedgerStateFix.h index 728f8c651d..a236a52c74 100644 --- a/include/xrpl/tx/transactors/system/LedgerStateFix.h +++ b/include/xrpl/tx/transactors/system/LedgerStateFix.h @@ -28,6 +28,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/system/TicketCreate.h b/include/xrpl/tx/transactors/system/TicketCreate.h index 88d83c37a7..13b6e7eca5 100644 --- a/include/xrpl/tx/transactors/system/TicketCreate.h +++ b/include/xrpl/tx/transactors/system/TicketCreate.h @@ -59,6 +59,20 @@ public: /** Precondition: fee collection is likely. Attempt to create ticket(s). */ TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/Clawback.h b/include/xrpl/tx/transactors/token/Clawback.h index a795115f7a..f7b77b872c 100644 --- a/include/xrpl/tx/transactors/token/Clawback.h +++ b/include/xrpl/tx/transactors/token/Clawback.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/ConfidentialMPTClawback.h b/include/xrpl/tx/transactors/token/ConfidentialMPTClawback.h index 779d372a48..867ad05d0a 100644 --- a/include/xrpl/tx/transactors/token/ConfidentialMPTClawback.h +++ b/include/xrpl/tx/transactors/token/ConfidentialMPTClawback.h @@ -37,6 +37,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/ConfidentialMPTConvert.h b/include/xrpl/tx/transactors/token/ConfidentialMPTConvert.h index 1f939b9037..dd54d181ef 100644 --- a/include/xrpl/tx/transactors/token/ConfidentialMPTConvert.h +++ b/include/xrpl/tx/transactors/token/ConfidentialMPTConvert.h @@ -39,6 +39,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/ConfidentialMPTConvertBack.h b/include/xrpl/tx/transactors/token/ConfidentialMPTConvertBack.h index e0a59f78e5..bc90858f4f 100644 --- a/include/xrpl/tx/transactors/token/ConfidentialMPTConvertBack.h +++ b/include/xrpl/tx/transactors/token/ConfidentialMPTConvertBack.h @@ -40,6 +40,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/ConfidentialMPTMergeInbox.h b/include/xrpl/tx/transactors/token/ConfidentialMPTMergeInbox.h index 58ff9489cc..2b47ad8366 100644 --- a/include/xrpl/tx/transactors/token/ConfidentialMPTMergeInbox.h +++ b/include/xrpl/tx/transactors/token/ConfidentialMPTMergeInbox.h @@ -41,6 +41,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/ConfidentialMPTSend.h b/include/xrpl/tx/transactors/token/ConfidentialMPTSend.h index 8dca8716d1..957cff5042 100644 --- a/include/xrpl/tx/transactors/token/ConfidentialMPTSend.h +++ b/include/xrpl/tx/transactors/token/ConfidentialMPTSend.h @@ -47,6 +47,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/MPTokenAuthorize.h b/include/xrpl/tx/transactors/token/MPTokenAuthorize.h index 3210608e73..0cbc683e91 100644 --- a/include/xrpl/tx/transactors/token/MPTokenAuthorize.h +++ b/include/xrpl/tx/transactors/token/MPTokenAuthorize.h @@ -10,7 +10,7 @@ struct MPTAuthorizeArgs MPTID const& mptIssuanceID; AccountID const& account; std::uint32_t flags{}; - std::optional holderID{}; + std::optional holderID; }; class MPTokenAuthorize : public Transactor @@ -33,6 +33,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h b/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h index 5ef12df282..6718d28e4d 100644 --- a/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h +++ b/include/xrpl/tx/transactors/token/MPTokenIssuanceCreate.h @@ -12,12 +12,16 @@ struct MPTCreateArgs AccountID const& account; std::uint32_t sequence = 0; std::uint32_t flags = 0; - std::optional maxAmount{}; - std::optional assetScale{}; - std::optional transferFee{}; + std::optional maxAmount = + std::nullopt; // NOLINT(readability-redundant-member-init) + std::optional assetScale = + std::nullopt; // NOLINT(readability-redundant-member-init) + std::optional transferFee = + std::nullopt; // NOLINT(readability-redundant-member-init) std::optional const& metadata{}; - std::optional domainId{}; - std::optional mutableFlags{}; + std::optional domainId = std::nullopt; // NOLINT(readability-redundant-member-init) + std::optional mutableFlags = + std::nullopt; // NOLINT(readability-redundant-member-init) }; class MPTokenIssuanceCreate : public Transactor @@ -41,6 +45,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + static Expected create(ApplyView& view, beast::Journal journal, MPTCreateArgs const& args); }; diff --git a/include/xrpl/tx/transactors/token/MPTokenIssuanceDestroy.h b/include/xrpl/tx/transactors/token/MPTokenIssuanceDestroy.h index 416708565a..aaac508cf5 100644 --- a/include/xrpl/tx/transactors/token/MPTokenIssuanceDestroy.h +++ b/include/xrpl/tx/transactors/token/MPTokenIssuanceDestroy.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/MPTokenIssuanceSet.h b/include/xrpl/tx/transactors/token/MPTokenIssuanceSet.h index dccd4e4cee..8dc423376a 100644 --- a/include/xrpl/tx/transactors/token/MPTokenIssuanceSet.h +++ b/include/xrpl/tx/transactors/token/MPTokenIssuanceSet.h @@ -30,6 +30,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/token/TrustSet.h b/include/xrpl/tx/transactors/token/TrustSet.h index 2e67aaeded..cf4f042515 100644 --- a/include/xrpl/tx/transactors/token/TrustSet.h +++ b/include/xrpl/tx/transactors/token/TrustSet.h @@ -28,6 +28,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/vault/VaultClawback.h b/include/xrpl/tx/transactors/vault/VaultClawback.h index 131a1d87e7..9c69c88f75 100644 --- a/include/xrpl/tx/transactors/vault/VaultClawback.h +++ b/include/xrpl/tx/transactors/vault/VaultClawback.h @@ -22,6 +22,20 @@ public: TER doApply() override; + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; + private: Expected, TER> assetsToClawback( diff --git a/include/xrpl/tx/transactors/vault/VaultCreate.h b/include/xrpl/tx/transactors/vault/VaultCreate.h index cc35cd765b..6861c9d164 100644 --- a/include/xrpl/tx/transactors/vault/VaultCreate.h +++ b/include/xrpl/tx/transactors/vault/VaultCreate.h @@ -27,6 +27,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/vault/VaultDelete.h b/include/xrpl/tx/transactors/vault/VaultDelete.h index f881a692fd..33a86dd050 100644 --- a/include/xrpl/tx/transactors/vault/VaultDelete.h +++ b/include/xrpl/tx/transactors/vault/VaultDelete.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/vault/VaultDeposit.h b/include/xrpl/tx/transactors/vault/VaultDeposit.h index 0943596f20..5a0c63a3b1 100644 --- a/include/xrpl/tx/transactors/vault/VaultDeposit.h +++ b/include/xrpl/tx/transactors/vault/VaultDeposit.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/vault/VaultSet.h b/include/xrpl/tx/transactors/vault/VaultSet.h index fb69f132b1..6abbe80fec 100644 --- a/include/xrpl/tx/transactors/vault/VaultSet.h +++ b/include/xrpl/tx/transactors/vault/VaultSet.h @@ -24,6 +24,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/include/xrpl/tx/transactors/vault/VaultWithdraw.h b/include/xrpl/tx/transactors/vault/VaultWithdraw.h index ffe14a7141..b8604d039e 100644 --- a/include/xrpl/tx/transactors/vault/VaultWithdraw.h +++ b/include/xrpl/tx/transactors/vault/VaultWithdraw.h @@ -21,6 +21,20 @@ public: TER doApply() override; + + void + visitInvariantEntry( + bool isDelete, + std::shared_ptr const& before, + std::shared_ptr const& after) override; + + [[nodiscard]] bool + finalizeInvariants( + STTx const& tx, + TER result, + XRPAmount fee, + ReadView const& view, + beast::Journal const& j) override; }; } // namespace xrpl diff --git a/src/libxrpl/basics/Archive.cpp b/src/libxrpl/basics/Archive.cpp index e77dabcd68..bba144ed04 100644 --- a/src/libxrpl/basics/Archive.cpp +++ b/src/libxrpl/basics/Archive.cpp @@ -1,4 +1,5 @@ #include + #include #include diff --git a/src/libxrpl/basics/BasicConfig.cpp b/src/libxrpl/basics/BasicConfig.cpp index ba10a575d9..8fed7e5345 100644 --- a/src/libxrpl/basics/BasicConfig.cpp +++ b/src/libxrpl/basics/BasicConfig.cpp @@ -1,9 +1,9 @@ #include + #include #include #include -#include #include #include @@ -14,7 +14,7 @@ namespace xrpl { -Section::Section(std::string const& name) : name_(name) +Section::Section(std::string name) : name_(std::move(name)) { } diff --git a/src/libxrpl/basics/CountedObject.cpp b/src/libxrpl/basics/CountedObject.cpp index bcdca9dfa4..8eb6ca9dc2 100644 --- a/src/libxrpl/basics/CountedObject.cpp +++ b/src/libxrpl/basics/CountedObject.cpp @@ -31,7 +31,7 @@ CountedObjects::getCounts(int minimumThreshold) const counts.emplace_back(ctr->getName(), ctr->getCount()); } - std::sort(counts.begin(), counts.end()); + std::ranges::sort(counts); return counts; } diff --git a/src/libxrpl/basics/FileUtilities.cpp b/src/libxrpl/basics/FileUtilities.cpp index 96ec3fa3ba..1a6e604724 100644 --- a/src/libxrpl/basics/FileUtilities.cpp +++ b/src/libxrpl/basics/FileUtilities.cpp @@ -1,6 +1,5 @@ #include -#include #include #include #include diff --git a/src/libxrpl/basics/Log.cpp b/src/libxrpl/basics/Log.cpp index 0278aa6aed..75398ca22d 100644 --- a/src/libxrpl/basics/Log.cpp +++ b/src/libxrpl/basics/Log.cpp @@ -1,4 +1,5 @@ #include + #include #include #include @@ -19,8 +20,8 @@ namespace xrpl { -Logs::Sink::Sink(std::string const& partition, beast::severities::Severity thresh, Logs& logs) - : beast::Journal::Sink(thresh, false), logs_(logs), partition_(partition) +Logs::Sink::Sink(std::string partition, beast::severities::Severity thresh, Logs& logs) + : beast::Journal::Sink(thresh, false), logs_(logs), partition_(std::move(partition)) { } diff --git a/src/libxrpl/basics/MallocTrim.cpp b/src/libxrpl/basics/MallocTrim.cpp index ed20ac6c94..07b5b9ffc5 100644 --- a/src/libxrpl/basics/MallocTrim.cpp +++ b/src/libxrpl/basics/MallocTrim.cpp @@ -1,13 +1,11 @@ -#include #include +#include +#include + #include -#include -#include -#include -#include -#include +#include #if defined(__GLIBC__) && BOOST_OS_LINUX #include @@ -15,6 +13,14 @@ #include #include +#include +#include +#include +#include +#include +#include +#include + // Require RUSAGE_THREAD for thread-scoped page fault tracking #ifndef RUSAGE_THREAD #error "MallocTrim rusage instrumentation requires RUSAGE_THREAD on Linux/glibc" diff --git a/src/libxrpl/basics/Number.cpp b/src/libxrpl/basics/Number.cpp index a8adabd5de..73ab8f6307 100644 --- a/src/libxrpl/basics/Number.cpp +++ b/src/libxrpl/basics/Number.cpp @@ -1,11 +1,12 @@ #include -// Keep Number.h first to ensure it can build without hidden dependencies + #include #include #include #include #include +#include #include #include #include diff --git a/src/libxrpl/basics/ResolverAsio.cpp b/src/libxrpl/basics/ResolverAsio.cpp index 305bdb6451..fc71666768 100644 --- a/src/libxrpl/basics/ResolverAsio.cpp +++ b/src/libxrpl/basics/ResolverAsio.cpp @@ -1,15 +1,19 @@ +#include + #include #include -#include #include #include #include #include #include +#include #include #include #include +#include +#include #include #include @@ -22,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -121,7 +126,7 @@ public: HandlerType handler; template - Work(StringSequence const& names_, HandlerType const& handler_) : handler(handler_) + Work(StringSequence const& names_, HandlerType handler_) : handler(std::move(handler_)) { names.reserve(names_.size()); @@ -290,9 +295,10 @@ public: auto const find_whitespace = std::bind(&std::isspace, std::placeholders::_1, std::locale()); - auto host_first = std::find_if_not(str.begin(), str.end(), find_whitespace); + auto host_first = std::ranges::find_if_not(str, find_whitespace); - auto port_last = std::find_if_not(str.rbegin(), str.rend(), find_whitespace).base(); + auto port_last = + std::ranges::find_if_not(std::ranges::reverse_view(str), find_whitespace).base(); // This should only happen for all-whitespace strings if (host_first >= port_last) diff --git a/src/libxrpl/basics/StringUtilities.cpp b/src/libxrpl/basics/StringUtilities.cpp index 5e3b100b26..7bf4c8e743 100644 --- a/src/libxrpl/basics/StringUtilities.cpp +++ b/src/libxrpl/basics/StringUtilities.cpp @@ -1,5 +1,6 @@ -#include #include + +#include #include #include @@ -8,7 +9,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/basics/contract.cpp b/src/libxrpl/basics/contract.cpp index 562d3a0944..32628ac3d9 100644 --- a/src/libxrpl/basics/contract.cpp +++ b/src/libxrpl/basics/contract.cpp @@ -1,5 +1,6 @@ -#include #include + +#include #include #include diff --git a/src/libxrpl/basics/make_SSLContext.cpp b/src/libxrpl/basics/make_SSLContext.cpp index c5ff456d25..aa04f22191 100644 --- a/src/libxrpl/basics/make_SSLContext.cpp +++ b/src/libxrpl/basics/make_SSLContext.cpp @@ -1,6 +1,7 @@ -#include #include +#include + #include #include #include @@ -8,8 +9,9 @@ #include #include +#include #include -#include +#include // IWYU pragma: keep #include #include #include @@ -25,8 +27,8 @@ #include namespace xrpl { -namespace openssl { -namespace detail { + +namespace openssl::detail { /** The default strength of self-signed RSA certificates. @@ -344,8 +346,7 @@ get_context(std::string cipherList) return c; } -} // namespace detail -} // namespace openssl +} // namespace openssl::detail //------------------------------------------------------------------------------ std::shared_ptr diff --git a/src/libxrpl/basics/mulDiv.cpp b/src/libxrpl/basics/mulDiv.cpp index d8988b474e..4abdcc0f75 100644 --- a/src/libxrpl/basics/mulDiv.cpp +++ b/src/libxrpl/basics/mulDiv.cpp @@ -1,8 +1,6 @@ #include -#include -#include -#include +#include // IWYU pragma: keep #include #include diff --git a/src/libxrpl/beast/clock/basic_seconds_clock.cpp b/src/libxrpl/beast/clock/basic_seconds_clock.cpp index c928c8c579..2b7ce57742 100644 --- a/src/libxrpl/beast/clock/basic_seconds_clock.cpp +++ b/src/libxrpl/beast/clock/basic_seconds_clock.cpp @@ -1,4 +1,5 @@ #include + #include #include diff --git a/src/libxrpl/beast/core/CurrentThreadName.cpp b/src/libxrpl/beast/core/CurrentThreadName.cpp index 6f22687dcc..ccd3df5f74 100644 --- a/src/libxrpl/beast/core/CurrentThreadName.cpp +++ b/src/libxrpl/beast/core/CurrentThreadName.cpp @@ -1,5 +1,4 @@ #include -#include #include #include @@ -72,7 +71,8 @@ setCurrentThreadNameImpl(std::string_view name) #if BOOST_OS_LINUX #include -#include +#include +#include // IWYU pragma: keep namespace beast::detail { diff --git a/src/libxrpl/beast/core/SemanticVersion.cpp b/src/libxrpl/beast/core/SemanticVersion.cpp index 0601690560..0cf4ac3113 100644 --- a/src/libxrpl/beast/core/SemanticVersion.cpp +++ b/src/libxrpl/beast/core/SemanticVersion.cpp @@ -1,13 +1,16 @@ -#include #include + +#include #include #include #include #include #include +#include #include #include +#include namespace beast { @@ -58,9 +61,8 @@ chopUInt(int& value, int limit, std::string& input) if (input.empty()) return false; - auto left_iter = std::find_if_not(input.begin(), input.end(), [](std::string::value_type c) { - return std::isdigit(c, std::locale::classic()); - }); + auto left_iter = std::ranges::find_if_not( + input, [](std::string::value_type c) { return std::isdigit(c, std::locale::classic()); }); std::string const item(input.begin(), left_iter); @@ -148,13 +150,13 @@ bool SemanticVersion::parse(std::string_view input) { // May not have leading or trailing whitespace - auto left_iter = std::find_if_not(input.begin(), input.end(), [](std::string::value_type c) { - return std::isspace(c, std::locale::classic()); - }); + auto left_iter = std::ranges::find_if_not( + input, [](std::string::value_type c) { return std::isspace(c, std::locale::classic()); }); - auto right_iter = std::find_if_not(input.rbegin(), input.rend(), [](std::string::value_type c) { - return std::isspace(c, std::locale::classic()); - }).base(); + auto right_iter = + std::ranges::find_if_not(std::ranges::reverse_view(input), [](std::string::value_type c) { + return std::isspace(c, std::locale::classic()); + }).base(); // Must not be empty! if (left_iter >= right_iter) diff --git a/src/libxrpl/beast/insight/Collector.cpp b/src/libxrpl/beast/insight/Collector.cpp index d4a528473b..55abb27c21 100644 --- a/src/libxrpl/beast/insight/Collector.cpp +++ b/src/libxrpl/beast/insight/Collector.cpp @@ -1,8 +1,6 @@ #include -namespace beast { -namespace insight { +namespace beast::insight { Collector::~Collector() = default; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/src/libxrpl/beast/insight/Groups.cpp b/src/libxrpl/beast/insight/Groups.cpp index 393deca101..c9e9453468 100644 --- a/src/libxrpl/beast/insight/Groups.cpp +++ b/src/libxrpl/beast/insight/Groups.cpp @@ -1,10 +1,11 @@ +#include + #include #include #include #include #include #include -#include #include #include #include @@ -14,8 +15,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { namespace detail { @@ -25,12 +25,12 @@ public: std::string const m_name; Collector::ptr m_collector; - GroupImp(std::string const& name_, Collector::ptr const& collector) - : m_name(name_), m_collector(collector) + GroupImp(std::string name_, Collector::ptr collector) + : m_name(std::move(name_)), m_collector(std::move(collector)) { } - ~GroupImp() = default; + ~GroupImp() override = default; std::string const& name() const override @@ -74,9 +74,8 @@ public: return m_collector->make_meter(make_name(name)); } -private: GroupImp& - operator=(GroupImp const&); + operator=(GroupImp const&) = delete; }; //------------------------------------------------------------------------------ @@ -89,11 +88,11 @@ public: Collector::ptr m_collector; Items m_items; - explicit GroupsImp(Collector::ptr const& collector) : m_collector(collector) + explicit GroupsImp(Collector::ptr collector) : m_collector(std::move(collector)) { } - ~GroupsImp() = default; + ~GroupsImp() override = default; Group::ptr const& get(std::string const& name) override @@ -118,5 +117,4 @@ make_Groups(Collector::ptr const& collector) return std::make_unique(collector); } -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/src/libxrpl/beast/insight/Hook.cpp b/src/libxrpl/beast/insight/Hook.cpp index f74f3e8705..a20e33fad4 100644 --- a/src/libxrpl/beast/insight/Hook.cpp +++ b/src/libxrpl/beast/insight/Hook.cpp @@ -1,9 +1,8 @@ #include + #include -namespace beast { -namespace insight { +namespace beast::insight { HookImpl::~HookImpl() = default; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/src/libxrpl/beast/insight/Metric.cpp b/src/libxrpl/beast/insight/Metric.cpp index fcad390576..b9ac569259 100644 --- a/src/libxrpl/beast/insight/Metric.cpp +++ b/src/libxrpl/beast/insight/Metric.cpp @@ -3,8 +3,7 @@ #include #include -namespace beast { -namespace insight { +namespace beast::insight { CounterImpl::~CounterImpl() = default; @@ -13,5 +12,4 @@ EventImpl::~EventImpl() = default; GaugeImpl::~GaugeImpl() = default; MeterImpl::~MeterImpl() = default; -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/src/libxrpl/beast/insight/NullCollector.cpp b/src/libxrpl/beast/insight/NullCollector.cpp index d8ba67a8e7..f5bb44bdba 100644 --- a/src/libxrpl/beast/insight/NullCollector.cpp +++ b/src/libxrpl/beast/insight/NullCollector.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -9,13 +11,11 @@ #include #include #include -#include #include #include -namespace beast { -namespace insight { +namespace beast::insight { namespace detail { @@ -24,9 +24,8 @@ class NullHookImpl : public HookImpl public: explicit NullHookImpl() = default; -private: NullHookImpl& - operator=(NullHookImpl const&); + operator=(NullHookImpl const&) = delete; }; //------------------------------------------------------------------------------ @@ -41,9 +40,8 @@ public: { } -private: NullCounterImpl& - operator=(NullCounterImpl const&); + operator=(NullCounterImpl const&) = delete; }; //------------------------------------------------------------------------------ @@ -58,9 +56,8 @@ public: { } -private: NullEventImpl& - operator=(NullEventImpl const&); + operator=(NullEventImpl const&) = delete; }; //------------------------------------------------------------------------------ @@ -80,9 +77,8 @@ public: { } -private: NullGaugeImpl& - operator=(NullGaugeImpl const&); + operator=(NullGaugeImpl const&) = delete; }; //------------------------------------------------------------------------------ @@ -97,9 +93,8 @@ public: { } -private: NullMeterImpl& - operator=(NullMeterImpl const&); + operator=(NullMeterImpl const&) = delete; }; //------------------------------------------------------------------------------ @@ -110,7 +105,7 @@ private: public: NullCollectorImp() = default; - ~NullCollectorImp() = default; + ~NullCollectorImp() override = default; Hook make_hook(HookImpl::HandlerType const&) override @@ -153,5 +148,4 @@ NullCollector::New() return std::make_shared(); } -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/src/libxrpl/beast/insight/StatsDCollector.cpp b/src/libxrpl/beast/insight/StatsDCollector.cpp index 7d80e1a052..d11e85830f 100644 --- a/src/libxrpl/beast/insight/StatsDCollector.cpp +++ b/src/libxrpl/beast/insight/StatsDCollector.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -5,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -13,12 +14,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -38,8 +41,7 @@ #define BEAST_STATSDCOLLECTOR_TRACING_ENABLED 0 #endif -namespace beast { -namespace insight { +namespace beast::insight { namespace detail { @@ -64,17 +66,17 @@ public: class StatsDHookImpl : public HookImpl, public StatsDMetricBase { public: - StatsDHookImpl(HandlerType const& handler, std::shared_ptr const& impl); + StatsDHookImpl(HandlerType handler, std::shared_ptr const& impl); ~StatsDHookImpl() override; void do_process() override; -private: StatsDHookImpl& - operator=(StatsDHookImpl const&); + operator=(StatsDHookImpl const&) = delete; +private: std::shared_ptr m_impl; HandlerType m_handler; }; @@ -84,7 +86,7 @@ private: class StatsDCounterImpl : public CounterImpl, public StatsDMetricBase { public: - StatsDCounterImpl(std::string const& name, std::shared_ptr const& impl); + StatsDCounterImpl(std::string name, std::shared_ptr const& impl); ~StatsDCounterImpl() override; @@ -98,10 +100,10 @@ public: void do_process() override; -private: StatsDCounterImpl& - operator=(StatsDCounterImpl const&); + operator=(StatsDCounterImpl const&) = delete; +private: std::shared_ptr m_impl; std::string m_name; CounterImpl::value_type m_value{0}; @@ -113,9 +115,9 @@ private: class StatsDEventImpl : public EventImpl { public: - StatsDEventImpl(std::string const& name, std::shared_ptr const& impl); + StatsDEventImpl(std::string name, std::shared_ptr const& impl); - ~StatsDEventImpl() = default; + ~StatsDEventImpl() override = default; void notify(EventImpl::value_type const& value) override; @@ -138,7 +140,7 @@ private: class StatsDGaugeImpl : public GaugeImpl, public StatsDMetricBase { public: - StatsDGaugeImpl(std::string const& name, std::shared_ptr const& impl); + StatsDGaugeImpl(std::string name, std::shared_ptr const& impl); ~StatsDGaugeImpl() override; @@ -156,10 +158,10 @@ public: void do_process() override; -private: StatsDGaugeImpl& - operator=(StatsDGaugeImpl const&); + operator=(StatsDGaugeImpl const&) = delete; +private: std::shared_ptr m_impl; std::string m_name; GaugeImpl::value_type m_last_value{0}; @@ -172,9 +174,7 @@ private: class StatsDMeterImpl : public MeterImpl, public StatsDMetricBase { public: - explicit StatsDMeterImpl( - std::string const& name, - std::shared_ptr const& impl); + explicit StatsDMeterImpl(std::string name, std::shared_ptr const& impl); ~StatsDMeterImpl() override; @@ -188,10 +188,10 @@ public: void do_process() override; -private: StatsDMeterImpl& - operator=(StatsDMeterImpl const&); + operator=(StatsDMeterImpl const&) = delete; +private: std::shared_ptr m_impl; std::string m_name; MeterImpl::value_type m_value{0}; @@ -231,10 +231,10 @@ private: } public: - StatsDCollectorImp(IP::Endpoint const& address, std::string const& prefix, Journal journal) + StatsDCollectorImp(IP::Endpoint address, std::string prefix, Journal journal) : m_journal(journal) - , m_address(address) - , m_prefix(prefix) + , m_address(std::move(address)) + , m_prefix(std::move(prefix)) , m_work(boost::asio::make_work_guard(m_io_context)) , m_strand(boost::asio::make_strand(m_io_context)) , m_timer(m_io_context) @@ -481,10 +481,8 @@ public: //------------------------------------------------------------------------------ -StatsDHookImpl::StatsDHookImpl( - HandlerType const& handler, - std::shared_ptr const& impl) - : m_impl(impl), m_handler(handler) +StatsDHookImpl::StatsDHookImpl(HandlerType handler, std::shared_ptr const& impl) + : m_impl(impl), m_handler(std::move(handler)) { m_impl->add(*this); } @@ -503,9 +501,9 @@ StatsDHookImpl::do_process() //------------------------------------------------------------------------------ StatsDCounterImpl::StatsDCounterImpl( - std::string const& name, + std::string name, std::shared_ptr const& impl) - : m_impl(impl), m_name(name) + : m_impl(impl), m_name(std::move(name)) { m_impl->add(*this); } @@ -555,10 +553,8 @@ StatsDCounterImpl::do_process() //------------------------------------------------------------------------------ -StatsDEventImpl::StatsDEventImpl( - std::string const& name, - std::shared_ptr const& impl) - : m_impl(impl), m_name(name) +StatsDEventImpl::StatsDEventImpl(std::string name, std::shared_ptr const& impl) + : m_impl(impl), m_name(std::move(name)) { } @@ -584,10 +580,8 @@ StatsDEventImpl::do_notify(EventImpl::value_type const& value) //------------------------------------------------------------------------------ -StatsDGaugeImpl::StatsDGaugeImpl( - std::string const& name, - std::shared_ptr const& impl) - : m_impl(impl), m_name(name) +StatsDGaugeImpl::StatsDGaugeImpl(std::string name, std::shared_ptr const& impl) + : m_impl(impl), m_name(std::move(name)) { m_impl->add(*this); } @@ -673,10 +667,8 @@ StatsDGaugeImpl::do_process() //------------------------------------------------------------------------------ -StatsDMeterImpl::StatsDMeterImpl( - std::string const& name, - std::shared_ptr const& impl) - : m_impl(impl), m_name(name) +StatsDMeterImpl::StatsDMeterImpl(std::string name, std::shared_ptr const& impl) + : m_impl(impl), m_name(std::move(name)) { m_impl->add(*this); } @@ -734,5 +726,4 @@ StatsDCollector::New(IP::Endpoint const& address, std::string const& prefix, Jou return std::make_shared(address, prefix, journal); } -} // namespace insight -} // namespace beast +} // namespace beast::insight diff --git a/src/libxrpl/beast/net/IPAddressConversion.cpp b/src/libxrpl/beast/net/IPAddressConversion.cpp index d34a973d8e..14cb4bd44d 100644 --- a/src/libxrpl/beast/net/IPAddressConversion.cpp +++ b/src/libxrpl/beast/net/IPAddressConversion.cpp @@ -1,11 +1,11 @@ #include + #include #include #include -namespace beast { -namespace IP { +namespace beast::IP { Endpoint from_asio(boost::asio::ip::address const& address) @@ -31,5 +31,4 @@ to_asio_endpoint(Endpoint const& endpoint) return boost::asio::ip::tcp::endpoint{endpoint.address(), endpoint.port()}; } -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/src/libxrpl/beast/net/IPAddressV4.cpp b/src/libxrpl/beast/net/IPAddressV4.cpp index c65e6fcf89..f39e511c4c 100644 --- a/src/libxrpl/beast/net/IPAddressV4.cpp +++ b/src/libxrpl/beast/net/IPAddressV4.cpp @@ -1,7 +1,6 @@ #include -namespace beast { -namespace IP { +namespace beast::IP { bool is_private(AddressV4 const& addr) @@ -25,5 +24,4 @@ get_class(AddressV4 const& addr) return table[(addr.to_uint() & 0xE0000000) >> 29]; } -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/src/libxrpl/beast/net/IPAddressV6.cpp b/src/libxrpl/beast/net/IPAddressV6.cpp index 30e2eefb96..3dbadf9779 100644 --- a/src/libxrpl/beast/net/IPAddressV6.cpp +++ b/src/libxrpl/beast/net/IPAddressV6.cpp @@ -1,10 +1,10 @@ -#include #include -#include +#include -namespace beast { -namespace IP { +#include + +namespace beast::IP { bool is_private(AddressV6 const& addr) @@ -22,5 +22,4 @@ is_public(AddressV6 const& addr) return !is_private(addr) && !addr.is_multicast(); } -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/src/libxrpl/beast/net/IPEndpoint.cpp b/src/libxrpl/beast/net/IPEndpoint.cpp index 7e2799b46c..e1c7394b42 100644 --- a/src/libxrpl/beast/net/IPEndpoint.cpp +++ b/src/libxrpl/beast/net/IPEndpoint.cpp @@ -1,9 +1,9 @@ -#include #include +#include + #include #include -#include #include #include @@ -12,15 +12,15 @@ #include #include #include +#include -namespace beast { -namespace IP { +namespace beast::IP { Endpoint::Endpoint() : m_port(0) { } -Endpoint::Endpoint(Address const& addr, Port port) : m_addr(addr), m_port(port) +Endpoint::Endpoint(Address addr, Port port) : m_addr(std::move(addr)), m_port(port) { } @@ -176,5 +176,4 @@ operator>>(std::istream& is, Endpoint& endpoint) return is; } -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/src/libxrpl/beast/utility/beast_PropertyStream.cpp b/src/libxrpl/beast/utility/beast_PropertyStream.cpp index 662d763ce0..ddfe075132 100644 --- a/src/libxrpl/beast/utility/beast_PropertyStream.cpp +++ b/src/libxrpl/beast/utility/beast_PropertyStream.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -15,7 +16,7 @@ namespace beast { // //------------------------------------------------------------------------------ -PropertyStream::Item::Item(Source* source) : ListNode(), m_source(source) +PropertyStream::Item::Item(Source* source) : m_source(source) { } @@ -43,7 +44,7 @@ PropertyStream::Item::operator*() const // //------------------------------------------------------------------------------ -PropertyStream::Proxy::Proxy(Map const& map, std::string const& key) : m_map(&map), m_key(key) +PropertyStream::Proxy::Proxy(Map const& map, std::string key) : m_map(&map), m_key(std::move(key)) { } @@ -151,7 +152,7 @@ PropertyStream::Set::stream() const // //------------------------------------------------------------------------------ -PropertyStream::Source::Source(std::string const& name) : m_name(name), item_(this) +PropertyStream::Source::Source(std::string name) : m_name(std::move(name)), item_(this) { } diff --git a/src/libxrpl/conditions/Condition.cpp b/src/libxrpl/conditions/Condition.cpp index 30beba3402..ce3b55a827 100644 --- a/src/libxrpl/conditions/Condition.cpp +++ b/src/libxrpl/conditions/Condition.cpp @@ -1,9 +1,18 @@ #include + +#include +#include #include +#include #include -namespace xrpl { -namespace cryptoconditions { +#include +#include +#include +#include +#include + +namespace xrpl::cryptoconditions { namespace detail { // The binary encoding of conditions differs based on their @@ -210,5 +219,4 @@ Condition::deserialize(Slice s, std::error_code& ec) return c; } -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/src/libxrpl/conditions/Fulfillment.cpp b/src/libxrpl/conditions/Fulfillment.cpp index 11581a8705..d1f48bfd7c 100644 --- a/src/libxrpl/conditions/Fulfillment.cpp +++ b/src/libxrpl/conditions/Fulfillment.cpp @@ -1,11 +1,16 @@ +#include + +#include #include #include -#include #include +#include #include -namespace xrpl { -namespace cryptoconditions { +#include +#include + +namespace xrpl::cryptoconditions { bool match(Fulfillment const& f, Condition const& c) @@ -128,5 +133,4 @@ Fulfillment::deserialize(Slice s, std::error_code& ec) return f; } -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/src/libxrpl/conditions/error.cpp b/src/libxrpl/conditions/error.cpp index 9c9d4658e4..15ac847118 100644 --- a/src/libxrpl/conditions/error.cpp +++ b/src/libxrpl/conditions/error.cpp @@ -1,10 +1,12 @@ -#include #include -#include +#include -namespace xrpl { -namespace cryptoconditions { +#include +#include +#include + +namespace xrpl::cryptoconditions { namespace detail { class cryptoconditions_error_category : public std::error_category @@ -109,9 +111,8 @@ std::error_code make_error_code(error ev) { return std::error_code{ - safe_cast::type>(ev), + safe_cast>(ev), detail::get_cryptoconditions_error_category()}; } -} // namespace cryptoconditions -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/src/libxrpl/core/HashRouter.cpp b/src/libxrpl/core/HashRouter.cpp index f21daf84a2..4175d83340 100644 --- a/src/libxrpl/core/HashRouter.cpp +++ b/src/libxrpl/core/HashRouter.cpp @@ -1,5 +1,17 @@ #include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + namespace xrpl { auto diff --git a/src/libxrpl/core/detail/Job.cpp b/src/libxrpl/core/detail/Job.cpp index 7e5ca274b3..069cc7f216 100644 --- a/src/libxrpl/core/detail/Job.cpp +++ b/src/libxrpl/core/detail/Job.cpp @@ -1,6 +1,14 @@ -#include #include +#include +#include +#include + +#include +#include +#include +#include + namespace xrpl { Job::Job() : mType(jtINVALID), mJobIndex(0) diff --git a/src/libxrpl/core/detail/JobQueue.cpp b/src/libxrpl/core/detail/JobQueue.cpp index ddfc42c97e..d55160f285 100644 --- a/src/libxrpl/core/detail/JobQueue.cpp +++ b/src/libxrpl/core/detail/JobQueue.cpp @@ -1,8 +1,23 @@ -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include +#include +#include +#include namespace xrpl { @@ -164,9 +179,7 @@ JobQueue::addLoadEvents(JobType t, int count, std::chrono::milliseconds elapsed) bool JobQueue::isOverloaded() { - return std::any_of(m_jobData.begin(), m_jobData.end(), [](auto& entry) { - return entry.second.load().isOver(); - }); + return std::ranges::any_of(m_jobData, [](auto& entry) { return entry.second.load().isOver(); }); } Json::Value diff --git a/src/libxrpl/core/detail/LoadEvent.cpp b/src/libxrpl/core/detail/LoadEvent.cpp index 1370e9089f..a2f8ee7620 100644 --- a/src/libxrpl/core/detail/LoadEvent.cpp +++ b/src/libxrpl/core/detail/LoadEvent.cpp @@ -1,13 +1,18 @@ -#include #include + +#include #include +#include +#include +#include + namespace xrpl { -LoadEvent::LoadEvent(LoadMonitor& monitor, std::string const& name, bool shouldStart) +LoadEvent::LoadEvent(LoadMonitor& monitor, std::string name, bool shouldStart) : monitor_(monitor) , running_(shouldStart) - , name_(name) + , name_(std::move(name)) , mark_{std::chrono::steady_clock::now()} , timeWaiting_{} , timeRunning_{} diff --git a/src/libxrpl/core/detail/LoadMonitor.cpp b/src/libxrpl/core/detail/LoadMonitor.cpp index e613717ed8..2cf4e1f6ea 100644 --- a/src/libxrpl/core/detail/LoadMonitor.cpp +++ b/src/libxrpl/core/detail/LoadMonitor.cpp @@ -1,6 +1,12 @@ +#include + #include #include -#include +#include +#include + +#include +#include namespace xrpl { diff --git a/src/libxrpl/core/detail/Workers.cpp b/src/libxrpl/core/detail/Workers.cpp index ed9d09d1e8..e7d63c0900 100644 --- a/src/libxrpl/core/detail/Workers.cpp +++ b/src/libxrpl/core/detail/Workers.cpp @@ -1,17 +1,23 @@ -#include -#include #include +#include +#include +#include + +#include +#include +#include + namespace xrpl { Workers::Workers( Callback& callback, perf::PerfLog* perfLog, - std::string const& threadNames, + std::string threadNames, int numberOfThreads) : m_callback(callback) , perfLog_(perfLog) - , m_threadNames(threadNames) + , m_threadNames(std::move(threadNames)) , m_semaphore(0) , m_activeCount(0) , m_pauseCount(0) @@ -135,8 +141,8 @@ Workers::deleteWorkers(beast::LockFreeStack& stack) //------------------------------------------------------------------------------ -Workers::Worker::Worker(Workers& workers, std::string const& threadName, int const instance) - : m_workers{workers}, threadName_{threadName}, instance_{instance} +Workers::Worker::Worker(Workers& workers, std::string threadName, int const instance) + : m_workers{workers}, threadName_{std::move(threadName)}, instance_{instance} { thread_ = std::thread{&Workers::Worker::run, this}; diff --git a/src/libxrpl/crypto/RFC1751.cpp b/src/libxrpl/crypto/RFC1751.cpp index f7098f3833..8ea4e7007c 100644 --- a/src/libxrpl/crypto/RFC1751.cpp +++ b/src/libxrpl/crypto/RFC1751.cpp @@ -1,6 +1,7 @@ -#include #include +#include + #include #include #include diff --git a/src/libxrpl/crypto/csprng.cpp b/src/libxrpl/crypto/csprng.cpp index 343bed9be0..dc16c9ac64 100644 --- a/src/libxrpl/crypto/csprng.cpp +++ b/src/libxrpl/crypto/csprng.cpp @@ -1,8 +1,9 @@ -#include #include +#include + +#include #include -#include #include #include diff --git a/src/libxrpl/git/Git.cpp b/src/libxrpl/git/Git.cpp index 2992852632..e13b2ef693 100644 --- a/src/libxrpl/git/Git.cpp +++ b/src/libxrpl/git/Git.cpp @@ -1,4 +1,4 @@ -#include "xrpl/git/Git.h" +#include #include diff --git a/src/libxrpl/json/JsonPropertyStream.cpp b/src/libxrpl/json/JsonPropertyStream.cpp index fb5a7b32a4..ab94223956 100644 --- a/src/libxrpl/json/JsonPropertyStream.cpp +++ b/src/libxrpl/json/JsonPropertyStream.cpp @@ -1,4 +1,5 @@ #include + #include #include diff --git a/src/libxrpl/json/Output.cpp b/src/libxrpl/json/Output.cpp index 626dbeb4b8..e588d21d3c 100644 --- a/src/libxrpl/json/Output.cpp +++ b/src/libxrpl/json/Output.cpp @@ -1,4 +1,5 @@ #include + #include #include diff --git a/src/libxrpl/json/Writer.cpp b/src/libxrpl/json/Writer.cpp index ea7b4b51ae..75b5bc113c 100644 --- a/src/libxrpl/json/Writer.cpp +++ b/src/libxrpl/json/Writer.cpp @@ -1,11 +1,12 @@ +#include + #include #include -#include #include #include #include -#include +#include // IWYU pragma: keep #include #include #include @@ -62,7 +63,7 @@ lengthWithoutTrailingZeros(std::string const& s) class Writer::Impl { public: - explicit Impl(Output const& output) : output_(output) + explicit Impl(Output output) : output_(std::move(output)) { } ~Impl() = default; @@ -82,8 +83,7 @@ public: { char const ch = (ct == array) ? openBracket : openBrace; output({&ch, 1}); - stack_.push(Collection()); - stack_.top().type = ct; + stack_.emplace(Collection{.type = ct}); } void @@ -197,8 +197,6 @@ private: // JSON collections are either arrays, or objects. struct Collection { - explicit Collection() = default; - /** What type of collection are we in? */ Writer::CollectionType type = Writer::CollectionType::array; @@ -208,7 +206,7 @@ private: #ifndef NDEBUG /** What tags have we already seen in this collection? */ - std::set tags; + std::set tags{}; // NOLINT(readability-redundant-member-init) #endif }; diff --git a/src/libxrpl/json/json_reader.cpp b/src/libxrpl/json/json_reader.cpp index 71365ba6c1..1bb157afc3 100644 --- a/src/libxrpl/json/json_reader.cpp +++ b/src/libxrpl/json/json_reader.cpp @@ -1,5 +1,6 @@ -#include #include + +#include #include #include @@ -364,8 +365,7 @@ Reader::readNumber() { if (std::isdigit(static_cast(*current_)) == 0) { - auto ret = - std::find(std::begin(extended_tokens), std::end(extended_tokens), *current_); + auto ret = std::ranges::find(extended_tokens, *current_); if (ret == std::end(extended_tokens)) break; diff --git a/src/libxrpl/json/json_value.cpp b/src/libxrpl/json/json_value.cpp index d4351b23ef..61e0a0c7ee 100644 --- a/src/libxrpl/json/json_value.cpp +++ b/src/libxrpl/json/json_value.cpp @@ -1,13 +1,17 @@ +#include + +#include #include #include #include #include -#include #include #include +#include #include #include +#include #include #include @@ -18,7 +22,7 @@ Value const Value::null; class DefaultValueAllocator : public ValueAllocator { public: - virtual ~DefaultValueAllocator() = default; + ~DefaultValueAllocator() override = default; char* makeMemberName(char const* memberName) override @@ -1050,7 +1054,7 @@ Value::getMemberNames() const ObjectValues::const_iterator const itEnd = value_.map_->end(); for (; it != itEnd; ++it) - members.push_back(std::string((*it).first.c_str())); + members.emplace_back((*it).first.c_str()); return members; } diff --git a/src/libxrpl/json/json_valueiterator.cpp b/src/libxrpl/json/json_valueiterator.cpp index b3cf7e6538..595835d9c0 100644 --- a/src/libxrpl/json/json_valueiterator.cpp +++ b/src/libxrpl/json/json_valueiterator.cpp @@ -155,9 +155,7 @@ ValueIterator::ValueIterator(ValueConstIterator const& other) : ValueIteratorBas { } -ValueIterator::ValueIterator(ValueIterator const& other) : ValueIteratorBase(other) -{ -} +ValueIterator::ValueIterator(ValueIterator const& other) = default; ValueIterator& ValueIterator::operator=(SelfType const& other) diff --git a/src/libxrpl/json/json_writer.cpp b/src/libxrpl/json/json_writer.cpp index 150a7fe2e5..7846ed6ce1 100644 --- a/src/libxrpl/json/json_writer.cpp +++ b/src/libxrpl/json/json_writer.cpp @@ -1,7 +1,8 @@ +#include + #include #include #include -#include #include #include @@ -252,9 +253,7 @@ FastWriter::writeValue(Value const& value) // Class StyledWriter // ////////////////////////////////////////////////////////////////// -StyledWriter::StyledWriter() -{ -} +StyledWriter::StyledWriter() = default; std::string StyledWriter::write(Value const& root) @@ -486,7 +485,8 @@ StyledWriter::unindent() // Class StyledStreamWriter // ////////////////////////////////////////////////////////////////// -StyledStreamWriter::StyledStreamWriter(std::string indentation) : indentation_(indentation) +StyledStreamWriter::StyledStreamWriter(std::string indentation) + : indentation_(std::move(indentation)) { } diff --git a/src/libxrpl/json/to_string.cpp b/src/libxrpl/json/to_string.cpp index d3b35308a0..1d1a609366 100644 --- a/src/libxrpl/json/to_string.cpp +++ b/src/libxrpl/json/to_string.cpp @@ -1,6 +1,7 @@ -#include #include +#include + #include namespace Json { diff --git a/src/libxrpl/ledger/AcceptedLedgerTx.cpp b/src/libxrpl/ledger/AcceptedLedgerTx.cpp index 70deb0139a..e609f5bdc8 100644 --- a/src/libxrpl/ledger/AcceptedLedgerTx.cpp +++ b/src/libxrpl/ledger/AcceptedLedgerTx.cpp @@ -1,11 +1,24 @@ -#include -#include #include -#include -#include -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include + namespace xrpl { AcceptedLedgerTx::AcceptedLedgerTx( diff --git a/src/libxrpl/ledger/ApplyStateTable.cpp b/src/libxrpl/ledger/ApplyStateTable.cpp index 9ebbca8ac5..d7cbcb06e8 100644 --- a/src/libxrpl/ledger/ApplyStateTable.cpp +++ b/src/libxrpl/ledger/ApplyStateTable.cpp @@ -1,12 +1,38 @@ -#include -#include -#include #include -#include -#include -namespace xrpl { -namespace detail { +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::detail { void ApplyStateTable::apply(RawView& to) const @@ -374,14 +400,14 @@ ApplyStateTable::erase(ReadView const& base, std::shared_ptr const& sle) { auto const iter = items_.find(sle->key()); if (iter == items_.end()) - LogicError("ApplyStateTable::erase: missing key"); + Throw("ApplyStateTable::erase: missing key"); auto& item = iter->second; if (item.second != sle) - LogicError("ApplyStateTable::erase: unknown SLE"); + Throw("ApplyStateTable::erase: unknown SLE"); switch (item.first) { case Action::erase: - LogicError("ApplyStateTable::erase: double erase"); + Throw("ApplyStateTable::erase: double erase"); break; case Action::insert: items_.erase(iter); @@ -405,7 +431,7 @@ ApplyStateTable::rawErase(ReadView const& base, std::shared_ptr const& sle) switch (item.first) { case Action::erase: - LogicError("ApplyStateTable::rawErase: double erase"); + Throw("ApplyStateTable::rawErase: double erase"); break; case Action::insert: items_.erase(result.first); @@ -436,11 +462,11 @@ ApplyStateTable::insert(ReadView const& base, std::shared_ptr const& sle) switch (item.first) { case Action::cache: - LogicError("ApplyStateTable::insert: already cached"); + Throw("ApplyStateTable::insert: already cached"); case Action::insert: - LogicError("ApplyStateTable::insert: already inserted"); + Throw("ApplyStateTable::insert: already inserted"); case Action::modify: - LogicError("ApplyStateTable::insert: already modified"); + Throw("ApplyStateTable::insert: already modified"); case Action::erase: break; } @@ -466,7 +492,7 @@ ApplyStateTable::replace(ReadView const& base, std::shared_ptr const& sle) switch (item.first) { case Action::erase: - LogicError("ApplyStateTable::replace: already erased"); + Throw("ApplyStateTable::replace: already erased"); case Action::cache: item.first = Action::modify; break; @@ -482,14 +508,14 @@ ApplyStateTable::update(ReadView const& base, std::shared_ptr const& sle) { auto const iter = items_.find(sle->key()); if (iter == items_.end()) - LogicError("ApplyStateTable::update: missing key"); + Throw("ApplyStateTable::update: missing key"); auto& item = iter->second; if (item.second != sle) - LogicError("ApplyStateTable::update: unknown SLE"); + Throw("ApplyStateTable::update: unknown SLE"); switch (item.first) { case Action::erase: - LogicError("ApplyStateTable::update: erased"); + Throw("ApplyStateTable::update: erased"); break; case Action::cache: item.first = Action::modify; @@ -642,5 +668,4 @@ ApplyStateTable::threadOwners( } } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/libxrpl/ledger/ApplyView.cpp b/src/libxrpl/ledger/ApplyView.cpp index 476b635511..a3b138dc63 100644 --- a/src/libxrpl/ledger/ApplyView.cpp +++ b/src/libxrpl/ledger/ApplyView.cpp @@ -1,9 +1,25 @@ +#include + +#include #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include namespace xrpl { @@ -40,9 +56,9 @@ findPreviousPage(ApplyView& view, Keylet const& directory, SLE::ref start) { node = view.peek(keylet::page(directory, page)); if (!node) - { // LCOV_EXCL_START - LogicError("Directory chain: root back-pointer broken."); - // LCOV_EXCL_STOP + { + Throw( + "Directory chain: root back-pointer broken."); // LCOV_EXCL_LINE } } @@ -61,22 +77,21 @@ insertKey( { if (preserveOrder) { - if (std::find(indexes.begin(), indexes.end(), key) != indexes.end()) - LogicError("dirInsert: double insertion"); // LCOV_EXCL_LINE + if (std::ranges::find(indexes, key) != indexes.end()) + Throw("dirInsert: double insertion"); // LCOV_EXCL_LINE indexes.push_back(key); } else { - // We can't be sure if this page is already sorted because - // it may be a legacy page we haven't yet touched. Take - // the time to sort it. - std::sort(indexes.begin(), indexes.end()); + // We can't be sure if this page is already sorted because it may be a + // legacy page we haven't yet touched. Take the time to sort it. + std::ranges::sort(indexes); - auto pos = std::lower_bound(indexes.begin(), indexes.end(), key); + auto pos = std::ranges::lower_bound(indexes, key); if (pos != indexes.end() && key == *pos) - LogicError("dirInsert: double insertion"); // LCOV_EXCL_LINE + Throw("dirInsert: double insertion"); // LCOV_EXCL_LINE indexes.insert(pos, key); } @@ -129,8 +144,7 @@ insertPage( node->setFieldH256(sfRootIndex, directory.key); node->setFieldV256(sfIndexes, indexes); - // Save some space by not specifying the value 0 since - // it's the default. + // Save some space by not specifying the value 0 since it's the default. if (page != 1) node->setFieldU64(sfIndexPrevious, page - 1); XRPL_ASSERT_PARTS(!nextPage, "xrpl::directory::insertPage", "nextPage has default value"); @@ -199,28 +213,24 @@ ApplyView::emptyDirDelete(Keylet const& directory) auto nextPage = node->getFieldU64(sfIndexNext); if (nextPage == rootPage && prevPage != rootPage) - LogicError("Directory chain: fwd link broken"); // LCOV_EXCL_LINE + Throw("Directory chain: fwd link broken"); // LCOV_EXCL_LINE if (prevPage == rootPage && nextPage != rootPage) - LogicError("Directory chain: rev link broken"); // LCOV_EXCL_LINE + Throw("Directory chain: rev link broken"); // LCOV_EXCL_LINE - // Older versions of the code would, in some cases, allow the last - // page to be empty. Remove such pages: + // Older versions of the code would, in some cases, allow the last page to + // be empty. Remove such pages: if (nextPage == prevPage && nextPage != rootPage) { auto last = peek(keylet::page(directory, nextPage)); if (!last) - { // LCOV_EXCL_START - LogicError("Directory chain: fwd link broken."); - // LCOV_EXCL_STOP - } + Throw("Directory chain: fwd link broken."); // LCOV_EXCL_LINE if (!last->getFieldV256(sfIndexes).empty()) return false; - // Update the first page's linked list and - // mark it as updated. + // Update the first page's linked list and mark it as updated. node->setFieldU64(sfIndexNext, rootPage); node->setFieldU64(sfIndexPrevious, rootPage); update(node); @@ -228,8 +238,7 @@ ApplyView::emptyDirDelete(Keylet const& directory) // And erase the empty last page: erase(last); - // Make sure our local values reflect the - // updated information: + // Make sure our local values reflect the updated information: nextPage = rootPage; prevPage = rootPage; } @@ -254,7 +263,7 @@ ApplyView::dirRemove(Keylet const& directory, std::uint64_t page, uint256 const& { auto entries = node->getFieldV256(sfIndexes); - auto it = std::find(entries.begin(), entries.end(), key); + auto it = std::ranges::find(entries, key); if (entries.end() == it) return false; @@ -269,46 +278,33 @@ ApplyView::dirRemove(Keylet const& directory, std::uint64_t page, uint256 const& return true; } - // The current page is now empty; check if it can be - // deleted, and, if so, whether the entire directory - // can now be removed. + // The current page is now empty; check if it can be deleted, and, if so, + // whether the entire directory can now be removed. auto prevPage = node->getFieldU64(sfIndexPrevious); auto nextPage = node->getFieldU64(sfIndexNext); - // The first page is the directory's root node and is - // treated specially: it can never be deleted even if - // it is empty, unless we plan on removing the entire - // directory. + // The first page is the directory's root node and is treated specially: it + // can never be deleted even if it is empty, unless we plan on removing the + // entire directory. if (page == rootPage) { if (nextPage == page && prevPage != page) - { // LCOV_EXCL_START - LogicError("Directory chain: fwd link broken"); - // LCOV_EXCL_STOP - } + Throw("Directory chain: fwd link broken"); // LCOV_EXCL_LINE if (prevPage == page && nextPage != page) - { // LCOV_EXCL_START - LogicError("Directory chain: rev link broken"); - // LCOV_EXCL_STOP - } + Throw("Directory chain: rev link broken"); // LCOV_EXCL_LINE - // Older versions of the code would, in some cases, - // allow the last page to be empty. Remove such - // pages if we stumble on them: + // Older versions of the code would, in some cases, allow the last page + // to be empty. Remove such pages if we stumble on them: if (nextPage == prevPage && nextPage != page) { auto last = peek(keylet::page(directory, nextPage)); if (!last) - { // LCOV_EXCL_START - LogicError("Directory chain: fwd link broken."); - // LCOV_EXCL_STOP - } + Throw("Directory chain: fwd link broken."); // LCOV_EXCL_LINE if (last->getFieldV256(sfIndexes).empty()) { - // Update the first page's linked list and - // mark it as updated. + // Update the first page's linked list and mark it as updated. node->setFieldU64(sfIndexNext, page); node->setFieldU64(sfIndexPrevious, page); update(node); @@ -316,8 +312,7 @@ ApplyView::dirRemove(Keylet const& directory, std::uint64_t page, uint256 const& // And erase the empty last page: erase(last); - // Make sure our local values reflect the - // updated information: + // Make sure our local values reflect the updated information: nextPage = page; prevPage = page; } @@ -335,25 +330,24 @@ ApplyView::dirRemove(Keylet const& directory, std::uint64_t page, uint256 const& // This can never happen for nodes other than the root: if (nextPage == page) - LogicError("Directory chain: fwd link broken"); // LCOV_EXCL_LINE + Throw("Directory chain: fwd link broken"); // LCOV_EXCL_LINE if (prevPage == page) - LogicError("Directory chain: rev link broken"); // LCOV_EXCL_LINE + Throw("Directory chain: rev link broken"); // LCOV_EXCL_LINE - // This node isn't the root, so it can either be in the - // middle of the list, or at the end. Unlink it first - // and then check if that leaves the list with only a - // root: + // This node isn't the root, so it can either be in the middle of the list, + // or at the end. Unlink it first and then check if that leaves the list + // with only a root: auto prev = peek(keylet::page(directory, prevPage)); if (!prev) - LogicError("Directory chain: fwd link broken."); // LCOV_EXCL_LINE + Throw("Directory chain: fwd link broken."); // LCOV_EXCL_LINE // Fix previous to point to its new next. prev->setFieldU64(sfIndexNext, nextPage); update(prev); auto next = peek(keylet::page(directory, nextPage)); if (!next) - LogicError("Directory chain: rev link broken."); // LCOV_EXCL_LINE + Throw("Directory chain: rev link broken."); // LCOV_EXCL_LINE // Fix next to point to its new previous. next->setFieldU64(sfIndexPrevious, prevPage); update(next); @@ -361,13 +355,12 @@ ApplyView::dirRemove(Keylet const& directory, std::uint64_t page, uint256 const& // The page is no longer linked. Delete it. erase(node); - // Check whether the next page is the last page and, if - // so, whether it's empty. If it is, delete it. + // Check whether the next page is the last page and, if so, whether it's + // empty. If it is, delete it. if (nextPage != rootPage && next->getFieldU64(sfIndexNext) == rootPage && next->getFieldV256(sfIndexes).empty()) { - // Since next doesn't point to the root, it - // can't be pointing to prev. + // Since next doesn't point to the root, it can't be pointing to prev. erase(next); // The previous page is now the last page: @@ -377,18 +370,16 @@ ApplyView::dirRemove(Keylet const& directory, std::uint64_t page, uint256 const& // And the root points to the last page: auto root = peek(keylet::page(directory, rootPage)); if (!root) - { // LCOV_EXCL_START - LogicError("Directory chain: root link broken."); - // LCOV_EXCL_STOP - } + Throw("Directory chain: root link broken."); // LCOV_EXCL_LINE + root->setFieldU64(sfIndexPrevious, prevPage); update(root); nextPage = rootPage; } - // If we're not keeping the root, then check to see if - // it's left empty. If so, delete it as well. + // If we're not keeping the root, then check to see if it's left empty. + // If so, delete it as well. if (!keepRoot && nextPage == rootPage && prevPage == rootPage) { if (prev->getFieldV256(sfIndexes).empty()) diff --git a/src/libxrpl/ledger/ApplyViewBase.cpp b/src/libxrpl/ledger/ApplyViewBase.cpp index a5bea68759..d617279a80 100644 --- a/src/libxrpl/ledger/ApplyViewBase.cpp +++ b/src/libxrpl/ledger/ApplyViewBase.cpp @@ -1,7 +1,19 @@ #include -namespace xrpl { -namespace detail { +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl::detail { ApplyViewBase::ApplyViewBase(ReadView const* base, ApplyFlags flags) : flags_(flags), base_(base) { @@ -152,5 +164,4 @@ ApplyViewBase::rawDestroyXRP(XRPAmount const& fee) items_.destroyXRP(fee); } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/libxrpl/ledger/ApplyViewImpl.cpp b/src/libxrpl/ledger/ApplyViewImpl.cpp index eca9043db8..9650190a3e 100644 --- a/src/libxrpl/ledger/ApplyViewImpl.cpp +++ b/src/libxrpl/ledger/ApplyViewImpl.cpp @@ -1,5 +1,21 @@ #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + namespace xrpl { ApplyViewImpl::ApplyViewImpl(ReadView const* base, ApplyFlags flags) : ApplyViewBase(base, flags) diff --git a/src/libxrpl/ledger/BookDirs.cpp b/src/libxrpl/ledger/BookDirs.cpp index 2bdf6ac9a5..cbe93a159b 100644 --- a/src/libxrpl/ledger/BookDirs.cpp +++ b/src/libxrpl/ledger/BookDirs.cpp @@ -1,8 +1,15 @@ #include -#include + +#include +#include +#include +#include #include +#include #include +#include + namespace xrpl { BookDirs::BookDirs(ReadView const& view, Book const& book) diff --git a/src/libxrpl/ledger/BookListeners.cpp b/src/libxrpl/ledger/BookListeners.cpp index 8699d891a0..36d02427bc 100644 --- a/src/libxrpl/ledger/BookListeners.cpp +++ b/src/libxrpl/ledger/BookListeners.cpp @@ -1,5 +1,13 @@ #include +#include +#include +#include +#include + +#include +#include + namespace xrpl { void diff --git a/src/libxrpl/ledger/CachedView.cpp b/src/libxrpl/ledger/CachedView.cpp index aa075d69a4..6bbe2d828b 100644 --- a/src/libxrpl/ledger/CachedView.cpp +++ b/src/libxrpl/ledger/CachedView.cpp @@ -1,8 +1,17 @@ -#include #include -namespace xrpl { -namespace detail { +#include +#include // IWYU pragma: keep +#include +#include +#include +#include + +#include +#include +#include + +namespace xrpl::detail { bool CachedViewImpl::exists(Keylet const& k) const @@ -65,5 +74,4 @@ CachedViewImpl::read(Keylet const& k) const return sle; } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/libxrpl/ledger/CanonicalTXSet.cpp b/src/libxrpl/ledger/CanonicalTXSet.cpp index 72f45731fb..be5006d33b 100644 --- a/src/libxrpl/ledger/CanonicalTXSet.cpp +++ b/src/libxrpl/ledger/CanonicalTXSet.cpp @@ -1,5 +1,15 @@ #include +#include +#include +#include +#include +#include + +#include +#include +#include + namespace xrpl { bool diff --git a/src/libxrpl/ledger/Dir.cpp b/src/libxrpl/ledger/Dir.cpp index a27171fe12..bf5eaf02fd 100644 --- a/src/libxrpl/ledger/Dir.cpp +++ b/src/libxrpl/ledger/Dir.cpp @@ -1,5 +1,16 @@ #include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + namespace xrpl { using const_iterator = Dir::const_iterator; diff --git a/src/libxrpl/ledger/Ledger.cpp b/src/libxrpl/ledger/Ledger.cpp index 299a82a1f2..ab09224914 100644 --- a/src/libxrpl/ledger/Ledger.cpp +++ b/src/libxrpl/ledger/Ledger.cpp @@ -1,17 +1,49 @@ -#include -#include -#include -#include #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include #include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -118,7 +150,7 @@ public: Ledger::Ledger( create_genesis_t, - Rules const& rules, + Rules rules, Fees const& fees, std::vector const& amendments, Family& family) @@ -126,7 +158,7 @@ Ledger::Ledger( , txMap_(SHAMapType::TRANSACTION, family) , stateMap_(SHAMapType::STATE, family) , fees_(fees) - , rules_(rules) + , rules_(std::move(rules)) , j_(beast::Journal(beast::Journal::getNullSink())) { header_.seq = 1; @@ -153,7 +185,7 @@ Ledger::Ledger( { auto sle = std::make_shared(keylet::fees()); // Whether featureXRPFees is supported will depend on startup options. - if (std::find(amendments.begin(), amendments.end(), featureXRPFees) != amendments.end()) + if (std::ranges::find(amendments, featureXRPFees) != amendments.end()) { sle->at(sfBaseFeeDrops) = fees.base; sle->at(sfReserveBaseDrops) = fees.reserve; @@ -180,7 +212,7 @@ Ledger::Ledger( LedgerHeader const& info, bool& loaded, bool acquire, - Rules const& rules, + Rules rules, Fees const& fees, Family& family, beast::Journal j) @@ -188,7 +220,7 @@ Ledger::Ledger( , txMap_(SHAMapType::TRANSACTION, info.txHash, family) , stateMap_(SHAMapType::STATE, info.accountHash, family) , fees_(fees) - , rules_(rules) + , rules_(std::move(rules)) , header_(info) , j_(j) { @@ -249,11 +281,11 @@ Ledger::Ledger(Ledger const& prevLedger, NetClock::time_point closeTime) } } -Ledger::Ledger(LedgerHeader const& info, Rules const& rules, Family& family) +Ledger::Ledger(LedgerHeader const& info, Rules rules, Family& family) : mImmutable(true) , txMap_(SHAMapType::TRANSACTION, info.txHash, family) , stateMap_(SHAMapType::STATE, info.accountHash, family) - , rules_(rules) + , rules_(std::move(rules)) , header_(info) , j_(beast::Journal(beast::Journal::getNullSink())) { @@ -263,14 +295,14 @@ Ledger::Ledger(LedgerHeader const& info, Rules const& rules, Family& family) Ledger::Ledger( std::uint32_t ledgerSeq, NetClock::time_point closeTime, - Rules const& rules, + Rules rules, Fees const& fees, Family& family) : mImmutable(false) , txMap_(SHAMapType::TRANSACTION, family) , stateMap_(SHAMapType::STATE, family) , fees_(fees) - , rules_(rules) + , rules_(std::move(rules)) , j_(beast::Journal(beast::Journal::getNullSink())) { header_.seq = ledgerSeq; @@ -461,14 +493,14 @@ void Ledger::rawErase(std::shared_ptr const& sle) { if (!stateMap_.delItem(sle->key())) - LogicError("Ledger::rawErase: key not found"); + Throw("Ledger::rawErase: key not found"); } void Ledger::rawErase(uint256 const& key) { if (!stateMap_.delItem(key)) - LogicError("Ledger::rawErase: key not found"); + Throw("Ledger::rawErase: key not found"); } void @@ -478,7 +510,7 @@ Ledger::rawInsert(std::shared_ptr const& sle) sle->add(ss); if (!stateMap_.addGiveItem( SHAMapNodeType::tnACCOUNT_STATE, make_shamapitem(sle->key(), ss.slice()))) - LogicError("Ledger::rawInsert: key already exists"); + Throw("Ledger::rawInsert: key already exists"); } void @@ -488,7 +520,7 @@ Ledger::rawReplace(std::shared_ptr const& sle) sle->add(ss); if (!stateMap_.updateGiveItem( SHAMapNodeType::tnACCOUNT_STATE, make_shamapitem(sle->key(), ss.slice()))) - LogicError("Ledger::rawReplace: key not found"); + Throw("Ledger::rawReplace: key not found"); } void @@ -504,7 +536,7 @@ Ledger::rawTxInsert( s.addVL(txn->peekData()); s.addVL(metaData->peekData()); if (!txMap_.addGiveItem(SHAMapNodeType::tnTRANSACTION_MD, make_shamapitem(key, s.slice()))) - LogicError("duplicate_tx: " + to_string(key)); + Throw("duplicate_tx: " + to_string(key)); } uint256 @@ -522,7 +554,7 @@ Ledger::rawTxInsertWithHash( auto item = make_shamapitem(key, s.slice()); auto hash = sha512Half(HashPrefix::txNode, item->slice(), item->key()); if (!txMap_.addGiveItem(SHAMapNodeType::tnTRANSACTION_MD, std::move(item))) - LogicError("duplicate_tx: " + to_string(key)); + Throw("duplicate_tx: " + to_string(key)); return hash; } diff --git a/src/libxrpl/ledger/OpenView.cpp b/src/libxrpl/ledger/OpenView.cpp index b5e358053c..089788d90b 100644 --- a/src/libxrpl/ledger/OpenView.cpp +++ b/src/libxrpl/ledger/OpenView.cpp @@ -1,6 +1,27 @@ -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + namespace xrpl { class OpenView::txs_iter_impl : public txs_type::iter_base @@ -70,12 +91,12 @@ OpenView::OpenView(OpenView const& rhs) OpenView::OpenView( open_ledger_t, ReadView const* base, - Rules const& rules, + Rules rules, std::shared_ptr hold) : monotonic_resource_{ std::make_unique(initialBufferSize)} , txs_{monotonic_resource_.get()} - , rules_(rules) + , rules_(std::move(rules)) , header_(base->header()) , base_(base) , hold_(std::move(hold)) @@ -247,7 +268,7 @@ OpenView::rawTxInsert( auto const result = txs_.emplace( std::piecewise_construct, std::forward_as_tuple(key), std::forward_as_tuple(txn, metaData)); if (!result.second) - LogicError("rawTxInsert: duplicate TX id: " + to_string(key)); + Throw("rawTxInsert: duplicate TX id: " + to_string(key)); } } // namespace xrpl diff --git a/src/libxrpl/ledger/PaymentSandbox.cpp b/src/libxrpl/ledger/PaymentSandbox.cpp index a46e22f404..e517beaab5 100644 --- a/src/libxrpl/ledger/PaymentSandbox.cpp +++ b/src/libxrpl/ledger/PaymentSandbox.cpp @@ -1,9 +1,25 @@ -#include #include -#include + +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -160,7 +176,7 @@ void DeferredCredits::ownerCount(AccountID const& id, std::uint32_t cur, std::uint32_t next) { auto const v = std::max(cur, next); - auto r = ownerCounts_.emplace(std::make_pair(id, v)); + auto r = ownerCounts_.emplace(id, v); if (!r.second) { auto& mapVal = r.first->second; @@ -239,7 +255,7 @@ DeferredCredits::apply(DeferredCredits& to) toVal.selfDebit += fromVal.selfDebit; for (auto& [k, v] : fromVal.holders) { - if (toVal.holders.find(k) == toVal.holders.end()) + if (!toVal.holders.contains(k)) { toVal.holders[k] = v; } diff --git a/src/libxrpl/ledger/RawStateTable.cpp b/src/libxrpl/ledger/RawStateTable.cpp index b411a25b00..f267d2f691 100644 --- a/src/libxrpl/ledger/RawStateTable.cpp +++ b/src/libxrpl/ledger/RawStateTable.cpp @@ -1,8 +1,21 @@ -#include #include -namespace xrpl { -namespace detail { +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace xrpl::detail { class RawStateTable::sles_iter_impl : public ReadView::sles_type::iter_base { @@ -22,7 +35,7 @@ public: items_t::const_iterator end1, ReadView::sles_type::iterator iter0, ReadView::sles_type::iterator end0) - : iter0_(iter0), end0_(end0), iter1_(iter1), end1_(end1) + : iter0_(std::move(iter0)), end0_(std::move(end0)), iter1_(iter1), end1_(end1) { if (iter0_ != end0_) sle0_ = *iter0_; @@ -241,7 +254,7 @@ RawStateTable::erase(std::shared_ptr const& sle) switch (item.action) { case Action::erase: - LogicError("RawStateTable::erase: already erased"); + Throw("RawStateTable::erase: already erased"); break; case Action::insert: items_.erase(result.first); @@ -270,10 +283,10 @@ RawStateTable::insert(std::shared_ptr const& sle) item.sle = sle; break; case Action::insert: - LogicError("RawStateTable::insert: already inserted"); + Throw("RawStateTable::insert: already inserted"); break; case Action::replace: - LogicError("RawStateTable::insert: already exists"); + Throw("RawStateTable::insert: already exists"); break; } } @@ -291,7 +304,7 @@ RawStateTable::replace(std::shared_ptr const& sle) switch (item.action) { case Action::erase: - LogicError("RawStateTable::replace: was erased"); + Throw("RawStateTable::replace: was erased"); break; case Action::insert: case Action::replace: @@ -343,5 +356,4 @@ RawStateTable::slesUpperBound(ReadView const& base, uint256 const& key) const items_.upper_bound(key), items_.end(), base.sles.upper_bound(key), base.sles.end()); } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/libxrpl/ledger/ReadView.cpp b/src/libxrpl/ledger/ReadView.cpp index 8e6763410c..991dd95251 100644 --- a/src/libxrpl/ledger/ReadView.cpp +++ b/src/libxrpl/ledger/ReadView.cpp @@ -1,5 +1,16 @@ #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + namespace xrpl { ReadView::sles_type::sles_type(ReadView const& view) : ReadViewFwdRange(view) diff --git a/src/libxrpl/ledger/View.cpp b/src/libxrpl/ledger/View.cpp index c96940ec23..55735ec0e6 100644 --- a/src/libxrpl/ledger/View.cpp +++ b/src/libxrpl/ledger/View.cpp @@ -1,26 +1,39 @@ -#include -#include -#include -#include -#include #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include +#include #include #include +#include +#include #include #include #include -#include +#include +#include +#include +#include #include -#include -#include -#include +#include -#include -#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/AMMHelpers.cpp b/src/libxrpl/ledger/helpers/AMMHelpers.cpp index 631e4d0774..94ca2469f7 100644 --- a/src/libxrpl/ledger/helpers/AMMHelpers.cpp +++ b/src/libxrpl/ledger/helpers/AMMHelpers.cpp @@ -1,6 +1,44 @@ #include -// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp index 19c2a9d7a7..0663fde1f4 100644 --- a/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp +++ b/src/libxrpl/ledger/helpers/AccountRootHelpers.cpp @@ -1,13 +1,33 @@ #include -// + +#include #include +#include +#include +#include +#include #include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include namespace xrpl { @@ -153,7 +173,7 @@ getPseudoAccountFields() if (!ar) { // LCOV_EXCL_START - LogicError( + Throw( "xrpl::getPseudoAccountFields : unable to find account root " "ledger format"); // LCOV_EXCL_STOP diff --git a/src/libxrpl/ledger/helpers/CredentialHelpers.cpp b/src/libxrpl/ledger/helpers/CredentialHelpers.cpp index 32db285f1e..37f7db3677 100644 --- a/src/libxrpl/ledger/helpers/CredentialHelpers.cpp +++ b/src/libxrpl/ledger/helpers/CredentialHelpers.cpp @@ -1,11 +1,32 @@ #include -// -#include + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include +#include +#include namespace xrpl { namespace credentials { diff --git a/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp b/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp index dba71e0acd..8b4eeae7b7 100644 --- a/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp +++ b/src/libxrpl/ledger/helpers/DirectoryHelpers.cpp @@ -1,6 +1,19 @@ #include -// + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include + +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp index 53f5fabafb..08cfc547f4 100644 --- a/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/MPTokenHelpers.cpp @@ -1,15 +1,40 @@ #include -// + #include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include #include #include +#include #include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp index 4652bccca8..f57294a855 100644 --- a/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/NFTokenHelpers.cpp @@ -1,23 +1,44 @@ +#include + #include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include -#include #include #include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include +#include #include +#include +#include +#include -namespace xrpl { - -namespace nft { +namespace xrpl::nft { static std::shared_ptr locatePage(ReadView const& view, AccountID const& owner, uint256 const& id) @@ -107,7 +128,7 @@ getPageForToken( // place to make the split. if (splitIter == narr.end()) { - splitIter = std::find_if(narr.begin(), narr.end(), [&cmp](STObject const& obj) { + splitIter = std::ranges::find_if(narr, [&cmp](STObject const& obj) { return (obj.getFieldH256(sfNFTokenID) & nft::pageMask) == cmp; }); } @@ -217,9 +238,8 @@ changeTokenURI( // Locate the NFT in the page STArray& arr = page->peekFieldArray(sfNFTokens); - auto const nftIter = std::find_if(arr.begin(), arr.end(), [&nftokenID](STObject const& obj) { - return (obj[sfNFTokenID] == nftokenID); - }); + auto const nftIter = std::ranges::find_if( + arr, [&nftokenID](STObject const& obj) { return (obj[sfNFTokenID] == nftokenID); }); if (nftIter == arr.end()) return tecINTERNAL; // LCOV_EXCL_LINE @@ -298,13 +318,8 @@ mergePages(ApplyView& view, std::shared_ptr const& p1, std::shared_ptr STArray x(p1arr.size() + p2arr.size()); - std::merge( - p1arr.begin(), - p1arr.end(), - p2arr.begin(), - p2arr.end(), - std::back_inserter(x), - [](STObject const& a, STObject const& b) { + std::ranges::merge( + p1arr, p2arr, std::back_inserter(x), [](STObject const& a, STObject const& b) { return compareTokens(a.getFieldH256(sfNFTokenID), b.getFieldH256(sfNFTokenID)); }); @@ -360,9 +375,8 @@ removeToken( auto arr = curr->getFieldArray(sfNFTokens); { - auto x = std::find_if(arr.begin(), arr.end(), [&nftokenID](STObject const& obj) { - return (obj[sfNFTokenID] == nftokenID); - }); + auto x = std::ranges::find_if( + arr, [&nftokenID](STObject const& obj) { return (obj[sfNFTokenID] == nftokenID); }); if (x == arr.end()) return tecNO_ENTRY; @@ -607,33 +621,6 @@ removeTokenOffersWithLimit(ApplyView& view, Keylet const& directory, std::size_t return deletedOffersCount; } -TER -notTooManyOffers(ReadView const& view, uint256 const& nftokenID) -{ - std::size_t totalOffers = 0; - - { - Dir const buys(view, keylet::nft_buys(nftokenID)); - for (auto iter = buys.begin(); iter != buys.end(); iter.next_page()) - { - totalOffers += iter.page_size(); - if (totalOffers > maxDeletableTokenOfferEntries) - return tefTOO_BIG; - } - } - - { - Dir const sells(view, keylet::nft_sells(nftokenID)); - for (auto iter = sells.begin(); iter != sells.end(); iter.next_page()) - { - totalOffers += iter.page_size(); - if (totalOffers > maxDeletableTokenOfferEntries) - return tefTOO_BIG; - } - } - return tesSUCCESS; -} - bool deleteTokenOffer(ApplyView& view, std::shared_ptr const& offer) { @@ -1107,5 +1094,4 @@ checkTrustlineDeepFrozen( return tesSUCCESS; } -} // namespace nft -} // namespace xrpl +} // namespace xrpl::nft diff --git a/src/libxrpl/ledger/helpers/OfferHelpers.cpp b/src/libxrpl/ledger/helpers/OfferHelpers.cpp index 3d63240fd0..d57066cfe2 100644 --- a/src/libxrpl/ledger/helpers/OfferHelpers.cpp +++ b/src/libxrpl/ledger/helpers/OfferHelpers.cpp @@ -1,9 +1,17 @@ #include -// + +#include +#include +#include +#include #include #include -#include -#include +#include +#include // IWYU pragma: keep +#include +#include + +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp b/src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp index a9fab07194..31c206d85b 100644 --- a/src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp +++ b/src/libxrpl/ledger/helpers/PaymentChannelHelpers.cpp @@ -1,8 +1,18 @@ -#include -#include -#include #include + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include + +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp b/src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp index 4b2bde19f8..d65462f0cd 100644 --- a/src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp +++ b/src/libxrpl/ledger/helpers/PermissionedDEXHelpers.cpp @@ -1,8 +1,20 @@ -#include #include -namespace xrpl { -namespace permissioned_dex { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace xrpl::permissioned_dex { bool accountInDomain(ReadView const& view, AccountID const& account, Domain const& domainID) @@ -17,15 +29,14 @@ accountInDomain(ReadView const& view, AccountID const& account, Domain const& do auto const& credentials = sleDomain->getFieldArray(sfAcceptedCredentials); - bool const inDomain = - std::any_of(credentials.begin(), credentials.end(), [&](auto const& credential) { - auto const sleCred = view.read( - keylet::credential(account, credential[sfIssuer], credential[sfCredentialType])); - if (!sleCred || !sleCred->isFlag(lsfAccepted)) - return false; + bool const inDomain = std::ranges::any_of(credentials, [&](auto const& credential) { + auto const sleCred = view.read( + keylet::credential(account, credential[sfIssuer], credential[sfCredentialType])); + if (!sleCred || !sleCred->isFlag(lsfAccepted)) + return false; - return !credentials::checkExpired(sleCred, view.header().parentCloseTime); - }); + return !credentials::checkExpired(sleCred, view.header().parentCloseTime); + }); return inDomain; } @@ -49,15 +60,29 @@ offerInDomain( if (sleOffer->getFieldH256(sfDomainID) != domainID) return false; // LCOV_EXCL_LINE - if (sleOffer->isFlag(lsfHybrid) && !sleOffer->isFieldPresent(sfAdditionalBooks)) + if (view.rules().enabled(fixSecurity3_1_3)) { - JLOG(j.error()) << "Hybrid offer " << offerID << " missing AdditionalBooks field"; - return false; // LCOV_EXCL_LINE + // post-fixSecurity3_1_3: also catches empty sfAdditionalBooks (size == 0) + if (sleOffer->isFlag(lsfHybrid) && + (!sleOffer->isFieldPresent(sfAdditionalBooks) || + sleOffer->getFieldArray(sfAdditionalBooks).size() != 1)) + { + JLOG(j.error()) << "Hybrid offer " << offerID + << " missing or malformed AdditionalBooks field"; + return false; // LCOV_EXCL_LINE + } + } + else + { + // pre-fixSecurity3_1_3: only check for missing sfAdditionalBooks + if (sleOffer->isFlag(lsfHybrid) && !sleOffer->isFieldPresent(sfAdditionalBooks)) + { + JLOG(j.error()) << "Hybrid offer " << offerID << " missing AdditionalBooks field"; + return false; // LCOV_EXCL_LINE + } } return accountInDomain(view, sleOffer->getAccountID(sfAccount), domainID); } -} // namespace permissioned_dex - -} // namespace xrpl +} // namespace xrpl::permissioned_dex diff --git a/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp b/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp index 2c676f14af..f5a5c01060 100644 --- a/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp +++ b/src/libxrpl/ledger/helpers/RippleStateHelpers.cpp @@ -1,15 +1,34 @@ #include -// + #include +#include +#include +#include +#include #include #include #include #include +#include +#include #include #include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/TokenHelpers.cpp b/src/libxrpl/ledger/helpers/TokenHelpers.cpp index 962ac10e56..91eaa8a95b 100644 --- a/src/libxrpl/ledger/helpers/TokenHelpers.cpp +++ b/src/libxrpl/ledger/helpers/TokenHelpers.cpp @@ -1,19 +1,34 @@ #include -// + #include +#include +#include #include +#include +#include #include #include #include +#include +#include +#include #include #include +#include #include +#include #include -#include +#include +#include +#include +#include #include -#include +#include +#include -#include +#include +#include +#include #include namespace xrpl { diff --git a/src/libxrpl/ledger/helpers/VaultHelpers.cpp b/src/libxrpl/ledger/helpers/VaultHelpers.cpp index 83a1b9fc4f..99500b36bf 100644 --- a/src/libxrpl/ledger/helpers/VaultHelpers.cpp +++ b/src/libxrpl/ledger/helpers/VaultHelpers.cpp @@ -1,8 +1,14 @@ #include -// + #include -#include -#include +#include +#include +#include +#include +#include // IWYU pragma: keep + +#include +#include namespace xrpl { diff --git a/src/libxrpl/net/HTTPClient.cpp b/src/libxrpl/net/HTTPClient.cpp index 5cb01cb54b..b39a605313 100644 --- a/src/libxrpl/net/HTTPClient.cpp +++ b/src/libxrpl/net/HTTPClient.cpp @@ -1,16 +1,35 @@ +#include + #include #include +#include #include -#include #include -#include +#include +#include +#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include namespace xrpl { @@ -184,7 +203,7 @@ public: JLOG(j_.trace()) << "Deadline error: " << mDeqSites[0] << ": " << ecResult.message(); // Can't do anything sound. - abort(); + std::abort(); } else { diff --git a/src/libxrpl/net/RegisterSSLCerts.cpp b/src/libxrpl/net/RegisterSSLCerts.cpp index 1f21a76ddb..ff59b5971e 100644 --- a/src/libxrpl/net/RegisterSSLCerts.cpp +++ b/src/libxrpl/net/RegisterSSLCerts.cpp @@ -1,5 +1,10 @@ #include +#include + +#include +#include + #if BOOST_OS_WINDOWS #include #include diff --git a/src/libxrpl/nodestore/BatchWriter.cpp b/src/libxrpl/nodestore/BatchWriter.cpp index 75b9a8dcde..9da6f504a9 100644 --- a/src/libxrpl/nodestore/BatchWriter.cpp +++ b/src/libxrpl/nodestore/BatchWriter.cpp @@ -1,7 +1,17 @@ #include -namespace xrpl { -namespace NodeStore { +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace xrpl::NodeStore { BatchWriter::BatchWriter(Callback& callback, Scheduler& scheduler) : m_callback(callback), m_scheduler(scheduler) @@ -97,5 +107,4 @@ BatchWriter::waitForWriting() mWriteCondition.wait(sl); } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/Database.cpp b/src/libxrpl/nodestore/Database.cpp index 5d9d153f57..ee8d2f56aa 100644 --- a/src/libxrpl/nodestore/Database.cpp +++ b/src/libxrpl/nodestore/Database.cpp @@ -1,14 +1,35 @@ -#include -#include -#include #include -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { Database::Database( Scheduler& scheduler, @@ -254,5 +275,4 @@ Database::getCountsJson(Json::Value& obj) obj[jss::node_reads_duration_us] = std::to_string(fetchDurationUs_); } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/DatabaseNodeImp.cpp b/src/libxrpl/nodestore/DatabaseNodeImp.cpp index a24379aea9..7722f711bb 100644 --- a/src/libxrpl/nodestore/DatabaseNodeImp.cpp +++ b/src/libxrpl/nodestore/DatabaseNodeImp.cpp @@ -1,7 +1,26 @@ #include -namespace xrpl { -namespace NodeStore { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::NodeStore { void DatabaseNodeImp::store(NodeObjectType type, Blob&& data, uint256 const& hash, std::uint32_t) @@ -91,5 +110,4 @@ DatabaseNodeImp::fetchBatch(std::vector const& hashes) return results; } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/DatabaseRotatingImp.cpp b/src/libxrpl/nodestore/DatabaseRotatingImp.cpp index aa04b17b33..ef7431f5a3 100644 --- a/src/libxrpl/nodestore/DatabaseRotatingImp.cpp +++ b/src/libxrpl/nodestore/DatabaseRotatingImp.cpp @@ -1,7 +1,27 @@ #include -namespace xrpl { -namespace NodeStore { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::NodeStore { DatabaseRotatingImp::DatabaseRotatingImp( Scheduler& scheduler, @@ -178,5 +198,4 @@ DatabaseRotatingImp::for_each(std::function)> f archive->for_each(f); } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/DecodedBlob.cpp b/src/libxrpl/nodestore/DecodedBlob.cpp index ad704cb84e..1d60f2af86 100644 --- a/src/libxrpl/nodestore/DecodedBlob.cpp +++ b/src/libxrpl/nodestore/DecodedBlob.cpp @@ -1,11 +1,16 @@ -#include -#include #include -#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace NodeStore { +#include +#include +#include + +namespace xrpl::NodeStore { DecodedBlob::DecodedBlob(void const* key, void const* value, int valueBytes) { @@ -68,5 +73,4 @@ DecodedBlob::createObject() return object; } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/DummyScheduler.cpp b/src/libxrpl/nodestore/DummyScheduler.cpp index 21c1b5c92e..1f93ed3d0f 100644 --- a/src/libxrpl/nodestore/DummyScheduler.cpp +++ b/src/libxrpl/nodestore/DummyScheduler.cpp @@ -1,7 +1,9 @@ #include -namespace xrpl { -namespace NodeStore { +#include +#include + +namespace xrpl::NodeStore { void DummyScheduler::scheduleTask(Task& task) @@ -20,5 +22,4 @@ DummyScheduler::onBatchWrite(BatchWriteReport const& report) { } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/ManagerImp.cpp b/src/libxrpl/nodestore/ManagerImp.cpp index 7925ccdb91..40a48f0875 100644 --- a/src/libxrpl/nodestore/ManagerImp.cpp +++ b/src/libxrpl/nodestore/ManagerImp.cpp @@ -1,11 +1,27 @@ -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include -namespace NodeStore { +namespace xrpl::NodeStore { ManagerImp& ManagerImp::instance() @@ -88,8 +104,8 @@ void ManagerImp::erase(Factory& factory) { std::lock_guard const _(mutex_); - auto const iter = std::find_if( - list_.begin(), list_.end(), [&factory](Factory* other) { return other == &factory; }); + auto const iter = + std::ranges::find_if(list_, [&factory](Factory* other) { return other == &factory; }); XRPL_ASSERT(iter != list_.end(), "xrpl::NodeStore::ManagerImp::erase : valid input"); list_.erase(iter); } @@ -98,9 +114,8 @@ Factory* ManagerImp::find(std::string const& name) { std::lock_guard const _(mutex_); - auto const iter = std::find_if(list_.begin(), list_.end(), [&name](Factory* other) { - return boost::iequals(name, other->getName()); - }); + auto const iter = std::ranges::find_if( + list_, [&name](Factory* other) { return boost::iequals(name, other->getName()); }); if (iter == list_.end()) return nullptr; return *iter; @@ -114,5 +129,4 @@ Manager::instance() return ManagerImp::instance(); } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/NodeObject.cpp b/src/libxrpl/nodestore/NodeObject.cpp index 2e40989e7c..b19d5d625a 100644 --- a/src/libxrpl/nodestore/NodeObject.cpp +++ b/src/libxrpl/nodestore/NodeObject.cpp @@ -1,6 +1,10 @@ #include +#include +#include + #include +#include namespace xrpl { diff --git a/src/libxrpl/nodestore/backend/MemoryFactory.cpp b/src/libxrpl/nodestore/backend/MemoryFactory.cpp index a245af3030..2f94783b8b 100644 --- a/src/libxrpl/nodestore/backend/MemoryFactory.cpp +++ b/src/libxrpl/nodestore/backend/MemoryFactory.cpp @@ -1,16 +1,30 @@ +#include +#include #include +#include +#include +#include #include #include +#include +#include +#include #include #include +#include +#include #include #include #include +#include +#include +#include +#include +#include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { struct MemoryDB { @@ -224,5 +238,4 @@ MemoryFactory::createInstance( return std::make_unique(keyBytes, keyValues, journal); } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/backend/NuDBFactory.cpp b/src/libxrpl/nodestore/backend/NuDBFactory.cpp index 424778f280..7fb3aec843 100644 --- a/src/libxrpl/nodestore/backend/NuDBFactory.cpp +++ b/src/libxrpl/nodestore/backend/NuDBFactory.cpp @@ -1,24 +1,50 @@ +#include +#include +#include #include #include +#include #include +#include #include #include +#include +#include +#include #include #include #include -#include +#include +#include +#include -#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include +#include #include #include #include #include +#include #include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { class NuDBBackend : public Backend { @@ -437,5 +463,4 @@ registerNuDBFactory(Manager& manager) static NuDBFactory const instance{manager}; } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/backend/NullFactory.cpp b/src/libxrpl/nodestore/backend/NullFactory.cpp index 617dfd893d..94cd71bd11 100644 --- a/src/libxrpl/nodestore/backend/NullFactory.cpp +++ b/src/libxrpl/nodestore/backend/NullFactory.cpp @@ -1,17 +1,28 @@ +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { class NullBackend : public Backend { public: NullBackend() = default; - ~NullBackend() = default; + ~NullBackend() override = default; std::string getName() override @@ -120,5 +131,4 @@ registerNullFactory(Manager& manager) static NullFactory const instance{manager}; } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/libxrpl/nodestore/backend/RocksDBFactory.cpp b/src/libxrpl/nodestore/backend/RocksDBFactory.cpp index 4ce7c3f10c..3e0957edea 100644 --- a/src/libxrpl/nodestore/backend/RocksDBFactory.cpp +++ b/src/libxrpl/nodestore/backend/RocksDBFactory.cpp @@ -1,4 +1,36 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include #if XRPL_ROCKSDB_AVAILABLE #include @@ -14,8 +46,7 @@ #include #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { class RocksDBEnv : public rocksdb::EnvWrapper { @@ -458,7 +489,6 @@ registerRocksDBFactory(Manager& manager) static RocksDBFactory const instance{manager}; } -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore #endif diff --git a/src/libxrpl/protocol/AMMCore.cpp b/src/libxrpl/protocol/AMMCore.cpp index e7a5daf6c1..41303e6a22 100644 --- a/src/libxrpl/protocol/AMMCore.cpp +++ b/src/libxrpl/protocol/AMMCore.cpp @@ -1,10 +1,14 @@ +#include + #include #include #include -#include #include +#include +#include #include #include +#include #include #include #include @@ -17,6 +21,7 @@ #include #include #include +#include namespace xrpl { diff --git a/src/libxrpl/protocol/AccountID.cpp b/src/libxrpl/protocol/AccountID.cpp index 2c64457c87..a89dc8fd11 100644 --- a/src/libxrpl/protocol/AccountID.cpp +++ b/src/libxrpl/protocol/AccountID.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include #include diff --git a/src/libxrpl/protocol/Asset.cpp b/src/libxrpl/protocol/Asset.cpp index a01ff2bbda..3d163c5c6a 100644 --- a/src/libxrpl/protocol/Asset.cpp +++ b/src/libxrpl/protocol/Asset.cpp @@ -1,12 +1,16 @@ +#include + +#include #include #include #include -#include +#include #include #include #include #include +#include #include #include #include diff --git a/src/libxrpl/protocol/Book.cpp b/src/libxrpl/protocol/Book.cpp index 59ad739c11..f71800b786 100644 --- a/src/libxrpl/protocol/Book.cpp +++ b/src/libxrpl/protocol/Book.cpp @@ -1,5 +1,6 @@ #include -#include + +#include #include #include diff --git a/src/libxrpl/protocol/BuildInfo.cpp b/src/libxrpl/protocol/BuildInfo.cpp index 543da615cf..c732e95a87 100644 --- a/src/libxrpl/protocol/BuildInfo.cpp +++ b/src/libxrpl/protocol/BuildInfo.cpp @@ -1,20 +1,19 @@ +#include + #include #include #include -#include -#include +#include // IWYU pragma: keep #include -#include +#include // IWYU pragma: keep #include #include #include #include -namespace xrpl { - -namespace BuildInfo { +namespace xrpl::BuildInfo { namespace { @@ -122,7 +121,7 @@ encodeSoftwareVersion(std::string_view versionStr) std::uint8_t hik) -> std::uint8_t { std::uint8_t ret = 0; - if (prefix != identifier.substr(0, prefix.length())) + if (!identifier.starts_with(prefix)) return 0; if (!beast::lexicalCastChecked( @@ -173,6 +172,4 @@ isNewerVersion(std::uint64_t version) return false; } -} // namespace BuildInfo - -} // namespace xrpl +} // namespace xrpl::BuildInfo diff --git a/src/libxrpl/protocol/ConfidentialTransfer.cpp b/src/libxrpl/protocol/ConfidentialTransfer.cpp index 4acb9d5fe2..a8003b1a55 100644 --- a/src/libxrpl/protocol/ConfidentialTransfer.cpp +++ b/src/libxrpl/protocol/ConfidentialTransfer.cpp @@ -1,11 +1,30 @@ #include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include + namespace xrpl { /** diff --git a/src/libxrpl/protocol/ErrorCodes.cpp b/src/libxrpl/protocol/ErrorCodes.cpp index 407e1ab3f3..4e928deb75 100644 --- a/src/libxrpl/protocol/ErrorCodes.cpp +++ b/src/libxrpl/protocol/ErrorCodes.cpp @@ -1,6 +1,7 @@ +#include + #include #include -#include #include #include diff --git a/src/libxrpl/protocol/Feature.cpp b/src/libxrpl/protocol/Feature.cpp index 1762d7d22d..1686d0e52a 100644 --- a/src/libxrpl/protocol/Feature.cpp +++ b/src/libxrpl/protocol/Feature.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include @@ -70,8 +71,8 @@ class FeatureCollections uint256 feature; Feature() = delete; - explicit Feature(std::string const& name_, uint256 const& feature_) - : name(name_), feature(feature_) + explicit Feature(std::string name_, uint256 const& feature_) + : name(std::move(name_)), feature(feature_) { } @@ -428,6 +429,8 @@ enforceValidFeatureName(auto fn) -> char const* #include +#include + #undef XRPL_RETIRE_FEATURE #pragma pop_macro("XRPL_RETIRE_FEATURE") #undef XRPL_RETIRE_FIX diff --git a/src/libxrpl/protocol/IOUAmount.cpp b/src/libxrpl/protocol/IOUAmount.cpp index 338f2c2760..69b763dbab 100644 --- a/src/libxrpl/protocol/IOUAmount.cpp +++ b/src/libxrpl/protocol/IOUAmount.cpp @@ -1,20 +1,18 @@ #include -// Do not remove. Forces IOUAmount.h to stay first, to verify it can compile -// without any hidden dependencies + #include #include #include #include #include -#include - #include #include #include #include #include #include +#include #include namespace xrpl { @@ -209,7 +207,7 @@ mulRatio(IOUAmount const& amt, std::uint32_t num, std::uint32_t den, bool roundU static auto log10Floor = [](uint128_t const& v) { // Find the index of the first element >= the requested element, the // index is the log of the element in the log table. - auto const l = std::lower_bound(powerTable.begin(), powerTable.end(), v); + auto const l = std::ranges::lower_bound(powerTable, v); int index = std::distance(powerTable.begin(), l); // If we're not equal, subtract to get the floor if (*l != v) @@ -221,7 +219,7 @@ mulRatio(IOUAmount const& amt, std::uint32_t num, std::uint32_t den, bool roundU static auto log10Ceil = [](uint128_t const& v) { // Find the index of the first element >= the requested element, the // index is the log of the element in the log table. - auto const l = std::lower_bound(powerTable.begin(), powerTable.end(), v); + auto const l = std::ranges::lower_bound(powerTable, v); return int(std::distance(powerTable.begin(), l)); }; diff --git a/src/libxrpl/protocol/Indexes.cpp b/src/libxrpl/protocol/Indexes.cpp index 7c771423a8..4bbf2d6f1f 100644 --- a/src/libxrpl/protocol/Indexes.cpp +++ b/src/libxrpl/protocol/Indexes.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -5,8 +7,10 @@ #include #include #include -#include +#include +#include #include +#include #include #include #include @@ -23,6 +27,7 @@ #include #include #include +#include #include namespace xrpl { diff --git a/src/libxrpl/protocol/InnerObjectFormats.cpp b/src/libxrpl/protocol/InnerObjectFormats.cpp index 8429c51aea..f4a88ec171 100644 --- a/src/libxrpl/protocol/InnerObjectFormats.cpp +++ b/src/libxrpl/protocol/InnerObjectFormats.cpp @@ -1,4 +1,5 @@ #include + #include #include diff --git a/src/libxrpl/protocol/Issue.cpp b/src/libxrpl/protocol/Issue.cpp index c73c6c8513..d5896bbd57 100644 --- a/src/libxrpl/protocol/Issue.cpp +++ b/src/libxrpl/protocol/Issue.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/Keylet.cpp b/src/libxrpl/protocol/Keylet.cpp index 6f9656c4ea..26bc98c1d6 100644 --- a/src/libxrpl/protocol/Keylet.cpp +++ b/src/libxrpl/protocol/Keylet.cpp @@ -1,5 +1,6 @@ -#include #include + +#include #include #include diff --git a/src/libxrpl/protocol/LedgerFormats.cpp b/src/libxrpl/protocol/LedgerFormats.cpp index 9f8bd6a2ba..7826435e51 100644 --- a/src/libxrpl/protocol/LedgerFormats.cpp +++ b/src/libxrpl/protocol/LedgerFormats.cpp @@ -1,7 +1,8 @@ #include + #include #include -#include +#include // IWYU pragma: keep #include diff --git a/src/libxrpl/protocol/LedgerHeader.cpp b/src/libxrpl/protocol/LedgerHeader.cpp index 38e7a7f6dd..f6a99be28a 100644 --- a/src/libxrpl/protocol/LedgerHeader.cpp +++ b/src/libxrpl/protocol/LedgerHeader.cpp @@ -1,10 +1,13 @@ +#include + #include #include #include -#include #include #include +#include + namespace xrpl { void diff --git a/src/libxrpl/protocol/MPTIssue.cpp b/src/libxrpl/protocol/MPTIssue.cpp index 70fb9dc8e7..dac2f4e5fe 100644 --- a/src/libxrpl/protocol/MPTIssue.cpp +++ b/src/libxrpl/protocol/MPTIssue.cpp @@ -1,12 +1,16 @@ +#include + #include #include #include #include +#include #include -#include +#include #include #include +#include #include #include diff --git a/src/libxrpl/protocol/NFTSyntheticSerializer.cpp b/src/libxrpl/protocol/NFTSyntheticSerializer.cpp index e4ce3b7611..9982f05b0f 100644 --- a/src/libxrpl/protocol/NFTSyntheticSerializer.cpp +++ b/src/libxrpl/protocol/NFTSyntheticSerializer.cpp @@ -1,5 +1,6 @@ -#include #include + +#include #include #include #include @@ -8,8 +9,7 @@ #include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { void insertNFTSyntheticInJson( @@ -21,5 +21,4 @@ insertNFTSyntheticInJson( insertNFTokenOfferID(response[jss::meta], transaction, transactionMeta); } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/libxrpl/protocol/NFTokenID.cpp b/src/libxrpl/protocol/NFTokenID.cpp index f77a6f67df..fc32a7b4e8 100644 --- a/src/libxrpl/protocol/NFTokenID.cpp +++ b/src/libxrpl/protocol/NFTokenID.cpp @@ -1,7 +1,8 @@ +#include + #include #include #include -#include #include #include #include @@ -55,11 +56,10 @@ getNFTokenIDFromPage(TxMeta const& transactionMeta) { STArray const& toAddPrevNFTs = node.peekAtField(sfNewFields).downcast().getFieldArray(sfNFTokens); - std::transform( - toAddPrevNFTs.begin(), - toAddPrevNFTs.end(), - std::back_inserter(finalIDs), - [](STObject const& nft) { return nft.getFieldH256(sfNFTokenID); }); + std::ranges::transform( + toAddPrevNFTs, std::back_inserter(finalIDs), [](STObject const& nft) { + return nft.getFieldH256(sfNFTokenID); + }); } else if (fName == sfModifiedNode) { @@ -78,19 +78,17 @@ getNFTokenIDFromPage(TxMeta const& transactionMeta) continue; STArray const& toAddPrevNFTs = previousFields.getFieldArray(sfNFTokens); - std::transform( - toAddPrevNFTs.begin(), - toAddPrevNFTs.end(), - std::back_inserter(prevIDs), - [](STObject const& nft) { return nft.getFieldH256(sfNFTokenID); }); + std::ranges::transform( + toAddPrevNFTs, std::back_inserter(prevIDs), [](STObject const& nft) { + return nft.getFieldH256(sfNFTokenID); + }); STArray const& toAddFinalNFTs = node.peekAtField(sfFinalFields).downcast().getFieldArray(sfNFTokens); - std::transform( - toAddFinalNFTs.begin(), - toAddFinalNFTs.end(), - std::back_inserter(finalIDs), - [](STObject const& nft) { return nft.getFieldH256(sfNFTokenID); }); + std::ranges::transform( + toAddFinalNFTs, std::back_inserter(finalIDs), [](STObject const& nft) { + return nft.getFieldH256(sfNFTokenID); + }); } } @@ -101,15 +99,14 @@ getNFTokenIDFromPage(TxMeta const& transactionMeta) // Find the first NFT ID that doesn't match. We're looking for an // added NFT, so the one we want will be the mismatch in finalIDs. - auto const diff = - std::mismatch(finalIDs.begin(), finalIDs.end(), prevIDs.begin(), prevIDs.end()); + auto const diff = std::ranges::mismatch(finalIDs, prevIDs); // There should always be a difference so the returned finalIDs // iterator should never be end(). But better safe than sorry. - if (diff.first == finalIDs.end()) + if (diff.in1 == finalIDs.end()) return std::nullopt; - return *diff.first; + return *diff.in1; } std::vector @@ -129,8 +126,9 @@ getNFTokenIDFromDeletedOffer(TxMeta const& transactionMeta) // Deduplicate the NFT IDs because multiple offers could affect the same NFT // and hence we would get duplicate NFT IDs - sort(tokenIDResult.begin(), tokenIDResult.end()); - tokenIDResult.erase(unique(tokenIDResult.begin(), tokenIDResult.end()), tokenIDResult.end()); + std::ranges::sort(tokenIDResult); + auto const uniq = std::ranges::unique(tokenIDResult); + tokenIDResult.erase(uniq.begin(), uniq.end()); return tokenIDResult; } diff --git a/src/libxrpl/protocol/NFTokenOfferID.cpp b/src/libxrpl/protocol/NFTokenOfferID.cpp index 4af589a4e9..c1d426eef0 100644 --- a/src/libxrpl/protocol/NFTokenOfferID.cpp +++ b/src/libxrpl/protocol/NFTokenOfferID.cpp @@ -1,7 +1,8 @@ +#include + #include #include #include -#include #include #include #include diff --git a/src/libxrpl/protocol/PathAsset.cpp b/src/libxrpl/protocol/PathAsset.cpp index 063b1fdd33..97011129e5 100644 --- a/src/libxrpl/protocol/PathAsset.cpp +++ b/src/libxrpl/protocol/PathAsset.cpp @@ -1,6 +1,9 @@ -#include #include +#include +#include +#include + namespace xrpl { std::string diff --git a/src/libxrpl/protocol/Permissions.cpp b/src/libxrpl/protocol/Permissions.cpp index 686b6376c1..21efe7a8cf 100644 --- a/src/libxrpl/protocol/Permissions.cpp +++ b/src/libxrpl/protocol/Permissions.cpp @@ -1,7 +1,15 @@ -#include -#include #include -#include + +#include +#include +#include // IWYU pragma: keep +#include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/protocol/PublicKey.cpp b/src/libxrpl/protocol/PublicKey.cpp index 9e61e9cbac..cef65f765e 100644 --- a/src/libxrpl/protocol/PublicKey.cpp +++ b/src/libxrpl/protocol/PublicKey.cpp @@ -1,19 +1,20 @@ +#include + #include #include #include #include #include #include -#include #include #include #include #include -#include #include #include +#include #include #include diff --git a/src/libxrpl/protocol/Quality.cpp b/src/libxrpl/protocol/Quality.cpp index ba9807318a..5f38f2219b 100644 --- a/src/libxrpl/protocol/Quality.cpp +++ b/src/libxrpl/protocol/Quality.cpp @@ -1,11 +1,10 @@ -#include +#include + #include #include -#include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/protocol/QualityFunction.cpp b/src/libxrpl/protocol/QualityFunction.cpp index 1774603a61..b460eb212f 100644 --- a/src/libxrpl/protocol/QualityFunction.cpp +++ b/src/libxrpl/protocol/QualityFunction.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/RPCErr.cpp b/src/libxrpl/protocol/RPCErr.cpp index e25b5e574b..99836f5e0f 100644 --- a/src/libxrpl/protocol/RPCErr.cpp +++ b/src/libxrpl/protocol/RPCErr.cpp @@ -1,6 +1,7 @@ +#include + #include #include -#include #include namespace xrpl { diff --git a/src/libxrpl/protocol/Rules.cpp b/src/libxrpl/protocol/Rules.cpp index fd54a1eff2..a09afa96d8 100644 --- a/src/libxrpl/protocol/Rules.cpp +++ b/src/libxrpl/protocol/Rules.cpp @@ -1,6 +1,5 @@ #include -// Do not remove. Forces Rules.h to stay first, to verify it can compile -// without any hidden dependencies + #include #include #include diff --git a/src/libxrpl/protocol/SField.cpp b/src/libxrpl/protocol/SField.cpp index 8015b34e73..fd6d39bbb0 100644 --- a/src/libxrpl/protocol/SField.cpp +++ b/src/libxrpl/protocol/SField.cpp @@ -1,8 +1,9 @@ -#include #include -#include +#include + #include +#include namespace xrpl { diff --git a/src/libxrpl/protocol/SOTemplate.cpp b/src/libxrpl/protocol/SOTemplate.cpp index b90bff6192..708fd465e2 100644 --- a/src/libxrpl/protocol/SOTemplate.cpp +++ b/src/libxrpl/protocol/SOTemplate.cpp @@ -1,12 +1,14 @@ +#include + #include #include -#include #include #include #include #include #include +#include #include namespace xrpl { diff --git a/src/libxrpl/protocol/STAccount.cpp b/src/libxrpl/protocol/STAccount.cpp index 2dc83cb591..4266b55c98 100644 --- a/src/libxrpl/protocol/STAccount.cpp +++ b/src/libxrpl/protocol/STAccount.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -5,7 +7,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STAmount.cpp b/src/libxrpl/protocol/STAmount.cpp index 6fe5eed498..89992b823c 100644 --- a/src/libxrpl/protocol/STAmount.cpp +++ b/src/libxrpl/protocol/STAmount.cpp @@ -1,16 +1,16 @@ -#include +#include + #include #include -#include #include #include -#include #include #include #include #include #include #include +#include #include #include #include @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include @@ -31,11 +30,6 @@ #include #include #include -#include -#include -#include -#include -#include #include #include @@ -44,9 +38,11 @@ #include #include #include +#include #include #include #include +#include #include namespace xrpl { diff --git a/src/libxrpl/protocol/STArray.cpp b/src/libxrpl/protocol/STArray.cpp index 91acc9ddd3..8e841c1fbb 100644 --- a/src/libxrpl/protocol/STArray.cpp +++ b/src/libxrpl/protocol/STArray.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include @@ -174,7 +175,7 @@ STArray::isDefault() const void STArray::sort(bool (*compare)(STObject const&, STObject const&)) { - std::sort(v_.begin(), v_.end(), compare); + std::ranges::sort(v_, compare); } } // namespace xrpl diff --git a/src/libxrpl/protocol/STBase.cpp b/src/libxrpl/protocol/STBase.cpp index 3c5c34ae4e..b3558e1b08 100644 --- a/src/libxrpl/protocol/STBase.cpp +++ b/src/libxrpl/protocol/STBase.cpp @@ -1,7 +1,8 @@ +#include + #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STBlob.cpp b/src/libxrpl/protocol/STBlob.cpp index e7d45a698d..3f44c9b529 100644 --- a/src/libxrpl/protocol/STBlob.cpp +++ b/src/libxrpl/protocol/STBlob.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STCurrency.cpp b/src/libxrpl/protocol/STCurrency.cpp index 3ca7b60d6b..dc47624402 100644 --- a/src/libxrpl/protocol/STCurrency.cpp +++ b/src/libxrpl/protocol/STCurrency.cpp @@ -1,8 +1,9 @@ +#include + #include #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STInteger.cpp b/src/libxrpl/protocol/STInteger.cpp index 1fccee2285..0530a784d9 100644 --- a/src/libxrpl/protocol/STInteger.cpp +++ b/src/libxrpl/protocol/STInteger.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -6,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -15,7 +16,6 @@ #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/protocol/STIssue.cpp b/src/libxrpl/protocol/STIssue.cpp index f73bad4b0d..10f0ff4c32 100644 --- a/src/libxrpl/protocol/STIssue.cpp +++ b/src/libxrpl/protocol/STIssue.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -6,7 +8,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STLedgerEntry.cpp b/src/libxrpl/protocol/STLedgerEntry.cpp index 5a80559c98..1f4d9acfd4 100644 --- a/src/libxrpl/protocol/STLedgerEntry.cpp +++ b/src/libxrpl/protocol/STLedgerEntry.cpp @@ -1,9 +1,12 @@ +#include + #include #include #include #include #include -#include +#include +#include // IWYU pragma: keep #include #include #include @@ -11,7 +14,6 @@ #include #include #include -#include #include #include #include diff --git a/src/libxrpl/protocol/STNumber.cpp b/src/libxrpl/protocol/STNumber.cpp index 8899a76a35..25aa9eaa05 100644 --- a/src/libxrpl/protocol/STNumber.cpp +++ b/src/libxrpl/protocol/STNumber.cpp @@ -1,20 +1,26 @@ #include -// Do not remove. Keep STNumber.h first + #include -#include +#include #include -#include +#include +#include #include #include #include -#include +#include #include #include -#include +#include +#include +#include #include +#include +#include #include +#include #include #include @@ -207,7 +213,7 @@ partsFromString(std::string const& number) } } - return {mantissa, exponent, negative}; + return {.mantissa = mantissa, .exponent = exponent, .negative = negative}; } STNumber diff --git a/src/libxrpl/protocol/STObject.cpp b/src/libxrpl/protocol/STObject.cpp index be257d2c57..baece3ca56 100644 --- a/src/libxrpl/protocol/STObject.cpp +++ b/src/libxrpl/protocol/STObject.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -22,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -166,9 +167,8 @@ STObject::applyTemplate(SOTemplate const& type) v.reserve(type.size()); for (auto const& e : type) { - auto const iter = std::find_if(v_.begin(), v_.end(), [&](detail::STVar const& b) { - return b.get().getFName() == e.sField(); - }); + auto const iter = std::ranges::find_if( + v_, [&](detail::STVar const& b) { return b.get().getFName() == e.sField(); }); if (iter != v_.end()) { if ((e.style() == soeDEFAULT) && iter->get().isDefault()) @@ -260,10 +260,9 @@ STObject::set(SerialIter& sit, int depth) // duplicate fields. This is a key invariant: auto const sf = getSortedFields(*this, withAllFields); - auto const dup = - std::adjacent_find(sf.cbegin(), sf.cend(), [](STBase const* lhs, STBase const* rhs) { - return lhs->getFName() == rhs->getFName(); - }); + auto const dup = std::ranges::adjacent_find(sf, [](STBase const* lhs, STBase const* rhs) { + return lhs->getFName() == rhs->getFName(); + }); if (dup != sf.cend()) Throw("Duplicate field detected"); @@ -348,7 +347,7 @@ STObject::isEquivalent(STBase const& t) const if (mType != nullptr && v->mType == mType) { - return std::equal( + return std::ranges::equal( begin(), end(), v->begin(), v->end(), [](STBase const& st1, STBase const& st2) { return (st1.getSType() == st2.getSType()) && st1.isEquivalent(st2); }); @@ -357,10 +356,9 @@ STObject::isEquivalent(STBase const& t) const auto const sf1 = getSortedFields(*this, withAllFields); auto const sf2 = getSortedFields(*v, withAllFields); - return std::equal( - sf1.begin(), sf1.end(), sf2.begin(), sf2.end(), [](STBase const* st1, STBase const* st2) { - return (st1->getSType() == st2->getSType()) && st1->isEquivalent(*st2); - }); + return std::ranges::equal(sf1, sf2, [](STBase const* st1, STBase const* st2) { + return (st1->getSType() == st2->getSType()) && st1->isEquivalent(*st2); + }); } uint256 @@ -928,7 +926,7 @@ STObject::getSortedFields(STObject const& objToSort, WhichFields whichFields) } // Sort the fields by fieldCode. - std::sort(sf.begin(), sf.end(), [](STBase const* lhs, STBase const* rhs) { + std::ranges::sort(sf, [](STBase const* lhs, STBase const* rhs) { return lhs->getFName().fieldCode < rhs->getFName().fieldCode; }); diff --git a/src/libxrpl/protocol/STParsedJSON.cpp b/src/libxrpl/protocol/STParsedJSON.cpp index 5eba36b9e1..01a52c88ec 100644 --- a/src/libxrpl/protocol/STParsedJSON.cpp +++ b/src/libxrpl/protocol/STParsedJSON.cpp @@ -1,13 +1,18 @@ +#include + #include #include #include #include #include +#include #include #include #include #include #include +#include +#include #include #include #include @@ -19,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -27,6 +31,7 @@ #include #include #include +#include #include #include @@ -45,7 +50,7 @@ namespace xrpl { namespace STParsedJSONDetail { template -constexpr std::enable_if_t::value && std::is_signed::value, U> +constexpr std::enable_if_t && std::is_signed_v, U> to_unsigned(S value) { if (value < 0 || std::numeric_limits::max() < value) @@ -54,7 +59,7 @@ to_unsigned(S value) } template -constexpr std::enable_if_t::value && std::is_unsigned::value, U1> +constexpr std::enable_if_t && std::is_unsigned_v, U1> to_unsigned(U2 value) { if (std::numeric_limits::max() < value) diff --git a/src/libxrpl/protocol/STPathSet.cpp b/src/libxrpl/protocol/STPathSet.cpp index 39c1d8b29e..04c8d3c8da 100644 --- a/src/libxrpl/protocol/STPathSet.cpp +++ b/src/libxrpl/protocol/STPathSet.cpp @@ -1,11 +1,14 @@ +#include + #include +#include #include +#include #include #include #include #include #include -#include #include #include #include diff --git a/src/libxrpl/protocol/STTakesAsset.cpp b/src/libxrpl/protocol/STTakesAsset.cpp index fcf4ad749c..1d37c65fc1 100644 --- a/src/libxrpl/protocol/STTakesAsset.cpp +++ b/src/libxrpl/protocol/STTakesAsset.cpp @@ -1,5 +1,10 @@ #include -// Do not remove. Force STTakesAsset.h first + +#include +#include +#include +#include +#include #include namespace xrpl { diff --git a/src/libxrpl/protocol/STTx.cpp b/src/libxrpl/protocol/STTx.cpp index f8600e167f..6da0d61b57 100644 --- a/src/libxrpl/protocol/STTx.cpp +++ b/src/libxrpl/protocol/STTx.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -24,18 +26,14 @@ #include #include #include -#include -#include #include #include #include #include -#include #include #include #include -#include #include #include @@ -50,6 +48,7 @@ #include #include #include +#include namespace xrpl { diff --git a/src/libxrpl/protocol/STValidation.cpp b/src/libxrpl/protocol/STValidation.cpp index f4042844f4..14349d3f85 100644 --- a/src/libxrpl/protocol/STValidation.cpp +++ b/src/libxrpl/protocol/STValidation.cpp @@ -1,16 +1,16 @@ +#include + #include #include #include #include #include #include -#include #include #include #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STVar.cpp b/src/libxrpl/protocol/STVar.cpp index 8b76d8a322..652328f613 100644 --- a/src/libxrpl/protocol/STVar.cpp +++ b/src/libxrpl/protocol/STVar.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -16,14 +18,12 @@ #include #include #include -#include #include #include #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { defaultObject_t defaultObject; nonPresentObject_t nonPresentObject; @@ -227,5 +227,4 @@ STVar::constructST(SerializedTypeID id, int depth, Args&&... args) } } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/libxrpl/protocol/STVector256.cpp b/src/libxrpl/protocol/STVector256.cpp index 2a70dd1e05..038f88c226 100644 --- a/src/libxrpl/protocol/STVector256.cpp +++ b/src/libxrpl/protocol/STVector256.cpp @@ -1,10 +1,11 @@ +#include + #include #include #include #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/STXChainBridge.cpp b/src/libxrpl/protocol/STXChainBridge.cpp index 428e4655ff..a29bf3b6f9 100644 --- a/src/libxrpl/protocol/STXChainBridge.cpp +++ b/src/libxrpl/protocol/STXChainBridge.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -6,7 +8,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/SecretKey.cpp b/src/libxrpl/protocol/SecretKey.cpp index f58bb81a88..01d3c29f9e 100644 --- a/src/libxrpl/protocol/SecretKey.cpp +++ b/src/libxrpl/protocol/SecretKey.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -8,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -17,6 +18,7 @@ #include #include +#include #include #include @@ -75,7 +77,7 @@ deriveDeterministicRootKey(Seed const& seed) // | seed | seq| std::array buf{}; - std::copy(seed.begin(), seed.end(), buf.begin()); + std::ranges::copy(seed, buf.begin()); // The odds that this loop executes more than once are negligible // but *just* in case someone managed to generate a key that required @@ -134,7 +136,7 @@ private: // | generator | seq| cnt| std::array buf{}; - std::copy(generator_.begin(), generator_.end(), buf.begin()); + std::ranges::copy(generator_, buf.begin()); copy_uint32(buf.data() + 33, seq); // The odds that this loop executes more than once are negligible diff --git a/src/libxrpl/protocol/Seed.cpp b/src/libxrpl/protocol/Seed.cpp index 6d33013f2f..0fe525a613 100644 --- a/src/libxrpl/protocol/Seed.cpp +++ b/src/libxrpl/protocol/Seed.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -9,7 +11,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/protocol/Serializer.cpp b/src/libxrpl/protocol/Serializer.cpp index 4e6a49f572..576e3f3e5f 100644 --- a/src/libxrpl/protocol/Serializer.cpp +++ b/src/libxrpl/protocol/Serializer.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -5,7 +7,6 @@ #include #include #include -#include #include #include @@ -442,7 +443,7 @@ template T SerialIter::getRawHelper(int size) { - static_assert(std::is_same::value || std::is_same::value, ""); + static_assert(std::is_same_v || std::is_same_v, ""); if (remain_ < size) Throw("invalid SerialIter getRaw"); T result(size); diff --git a/src/libxrpl/protocol/Sign.cpp b/src/libxrpl/protocol/Sign.cpp index 9105be8294..bee034d60e 100644 --- a/src/libxrpl/protocol/Sign.cpp +++ b/src/libxrpl/protocol/Sign.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -7,7 +9,6 @@ #include #include #include -#include namespace xrpl { diff --git a/src/libxrpl/protocol/TxFormats.cpp b/src/libxrpl/protocol/TxFormats.cpp index 4492ae271b..a2a7c5facf 100644 --- a/src/libxrpl/protocol/TxFormats.cpp +++ b/src/libxrpl/protocol/TxFormats.cpp @@ -1,7 +1,9 @@ +#include + +#include // IWYU pragma: keep #include #include -#include -#include +#include // IWYU pragma: keep #include diff --git a/src/libxrpl/protocol/TxMeta.cpp b/src/libxrpl/protocol/TxMeta.cpp index 3c797a7c8c..08069ca83d 100644 --- a/src/libxrpl/protocol/TxMeta.cpp +++ b/src/libxrpl/protocol/TxMeta.cpp @@ -1,4 +1,7 @@ +#include + #include +#include #include #include #include @@ -10,13 +13,12 @@ #include #include #include -#include #include #include +#include #include -#include namespace xrpl { diff --git a/src/libxrpl/protocol/UintTypes.cpp b/src/libxrpl/protocol/UintTypes.cpp index 5ace6c29d6..4206ec8cf5 100644 --- a/src/libxrpl/protocol/UintTypes.cpp +++ b/src/libxrpl/protocol/UintTypes.cpp @@ -1,7 +1,8 @@ +#include + #include #include #include -#include #include #include @@ -77,7 +78,7 @@ to_currency(Currency& currency, std::string const& code) currency = beast::zero; - std::copy(code.begin(), code.end(), currency.begin() + detail::isoCodeOffset); + std::ranges::copy(code, currency.begin() + detail::isoCodeOffset); return true; } diff --git a/src/libxrpl/protocol/XChainAttestations.cpp b/src/libxrpl/protocol/XChainAttestations.cpp index c255f743e3..8d3e62b31e 100644 --- a/src/libxrpl/protocol/XChainAttestations.cpp +++ b/src/libxrpl/protocol/XChainAttestations.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -11,7 +13,6 @@ #include #include #include -#include #include #include @@ -30,14 +31,14 @@ AttestationBase::AttestationBase( PublicKey const& publicKey_, Buffer signature_, AccountID const& sendingAccount_, - STAmount const& sendingAmount_, + STAmount sendingAmount_, AccountID const& rewardAccount_, bool wasLockingChainSend_) : attestationSignerAccount{attestationSignerAccount_} , publicKey{publicKey_} , signature{std::move(signature_)} , sendingAccount{sendingAccount_} - , sendingAmount{sendingAmount_} + , sendingAmount{std::move(sendingAmount_)} , rewardAccount{rewardAccount_} , wasLockingChainSend{wasLockingChainSend_} { @@ -260,7 +261,7 @@ AttestationCreateAccount::AttestationCreateAccount( Buffer signature_, AccountID const& sendingAccount_, STAmount const& sendingAmount_, - STAmount const& rewardAmount_, + STAmount rewardAmount_, AccountID const& rewardAccount_, bool wasLockingChainSend_, std::uint64_t createCount_, @@ -275,7 +276,7 @@ AttestationCreateAccount::AttestationCreateAccount( wasLockingChainSend_) , createCount{createCount_} , toCreate{toCreate_} - , rewardAmount{rewardAmount_} + , rewardAmount{std::move(rewardAmount_)} { } diff --git a/src/libxrpl/protocol/tokens.cpp b/src/libxrpl/protocol/tokens.cpp index e2a77fbf10..3cb0e3f3dd 100644 --- a/src/libxrpl/protocol/tokens.cpp +++ b/src/libxrpl/protocol/tokens.cpp @@ -7,13 +7,14 @@ * file COPYING or http://www.opensource.org/licenses/mit-license.php. */ +#include + #include #include #include #include #include #include -#include #include #include @@ -281,7 +282,7 @@ decodeBase58(std::string const& s) --remain; } // Skip leading zeroes in b256. - auto iter = std::find_if(b256.begin(), b256.end(), [](unsigned char c) { return c != 0; }); + auto iter = std::ranges::find_if(b256, [](unsigned char c) { return c != 0; }); std::string result; result.reserve(zeroes + (b256.end() - iter)); result.assign(zeroes, 0x00); diff --git a/src/libxrpl/protocol_autogen/placeholder.cpp b/src/libxrpl/protocol_autogen/placeholder.cpp index b48581e5b8..efc30fd904 100644 --- a/src/libxrpl/protocol_autogen/placeholder.cpp +++ b/src/libxrpl/protocol_autogen/placeholder.cpp @@ -1,5 +1 @@ // This file is a placeholder to ensure the protocol_autogen module can be built. -#include -#include -#include -#include diff --git a/src/libxrpl/rdb/DatabaseCon.cpp b/src/libxrpl/rdb/DatabaseCon.cpp index bca14f9bfa..5f4594b630 100644 --- a/src/libxrpl/rdb/DatabaseCon.cpp +++ b/src/libxrpl/rdb/DatabaseCon.cpp @@ -1,13 +1,18 @@ +#include + #include #include -#include #include -#include -#include - +#include +#include #include +#include +#include +#include +#include #include +#include namespace xrpl { diff --git a/src/libxrpl/rdb/SociDB.cpp b/src/libxrpl/rdb/SociDB.cpp index 780e05854f..c6e40ae90b 100644 --- a/src/libxrpl/rdb/SociDB.cpp +++ b/src/libxrpl/rdb/SociDB.cpp @@ -1,3 +1,21 @@ +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated" @@ -8,9 +26,7 @@ #include #include -#include - -#include +#include // IWYU pragma: keep #include @@ -50,7 +66,7 @@ getSociInit(BasicConfig const& config, std::string const& dbName) } // namespace detail -DBConfig::DBConfig(std::string const& dbPath) : connectionString_(dbPath) +DBConfig::DBConfig(std::string dbPath) : connectionString_(std::move(dbPath)) { } @@ -256,10 +272,10 @@ public: return; int log = 0, ckpt = 0; - int const ret = - sqlite3_wal_checkpoint_v2(conn, nullptr, SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); + int const ret = sqlite_api::sqlite3_wal_checkpoint_v2( + conn, nullptr, SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); - auto fname = sqlite3_db_filename(conn, "main"); + auto fname = sqlite_api::sqlite3_db_filename(conn, "main"); if (ret != SQLITE_OK) { auto jm = (ret == SQLITE_LOCKED) ? j_.trace() : j_.warn(); diff --git a/src/libxrpl/resource/Charge.cpp b/src/libxrpl/resource/Charge.cpp index eece5355f0..8626115c4c 100644 --- a/src/libxrpl/resource/Charge.cpp +++ b/src/libxrpl/resource/Charge.cpp @@ -4,11 +4,11 @@ #include #include #include +#include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { -Charge::Charge(value_type cost, std::string const& label) : m_cost(cost), m_label(label) +Charge::Charge(value_type cost, std::string label) : m_cost(cost), m_label(std::move(label)) { } @@ -57,5 +57,4 @@ Charge::operator*(value_type m) const return Charge(m_cost * m, m_label); } -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/src/libxrpl/resource/Consumer.cpp b/src/libxrpl/resource/Consumer.cpp index c1cb9d4367..3d03fa05db 100644 --- a/src/libxrpl/resource/Consumer.cpp +++ b/src/libxrpl/resource/Consumer.cpp @@ -1,8 +1,10 @@ +#include + #include #include #include +#include #include -#include #include #include #include @@ -10,8 +12,7 @@ #include #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { Consumer::Consumer(Logic& logic, Entry& entry) : m_logic(&logic), m_entry(&entry) { @@ -141,5 +142,4 @@ operator<<(std::ostream& os, Consumer const& v) return os; } -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/src/libxrpl/resource/Fees.cpp b/src/libxrpl/resource/Fees.cpp index d5999458b7..e9f47b3e7d 100644 --- a/src/libxrpl/resource/Fees.cpp +++ b/src/libxrpl/resource/Fees.cpp @@ -1,8 +1,8 @@ -#include #include -namespace xrpl { -namespace Resource { +#include + +namespace xrpl::Resource { Charge const feeMalformedRequest(200, "malformed request"); Charge const feeRequestNoReply(10, "unsatisfiable request"); @@ -25,5 +25,4 @@ Charge const feeDrop(6000, "dropped"); // See also Resource::Logic::charge for log level cutoff values -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/src/libxrpl/resource/ResourceManager.cpp b/src/libxrpl/resource/ResourceManager.cpp index d0e45d4c0e..6652c1a66b 100644 --- a/src/libxrpl/resource/ResourceManager.cpp +++ b/src/libxrpl/resource/ResourceManager.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -8,7 +10,6 @@ #include #include #include -#include #include #include @@ -22,8 +23,7 @@ #include #include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { class ManagerImp : public Manager { @@ -164,5 +164,4 @@ make_Manager(beast::insight::Collector::ptr const& collector, beast::Journal jou return std::make_unique(collector, journal); } -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/src/libxrpl/server/InfoSub.cpp b/src/libxrpl/server/InfoSub.cpp index ea70dc3a83..30686dfe7e 100644 --- a/src/libxrpl/server/InfoSub.cpp +++ b/src/libxrpl/server/InfoSub.cpp @@ -1,5 +1,13 @@ #include +#include +#include +#include + +#include +#include +#include + namespace xrpl { // This is the primary interface into the "client" portion of the program. diff --git a/src/libxrpl/server/JSONRPCUtil.cpp b/src/libxrpl/server/JSONRPCUtil.cpp index db2ea450a2..280aeeeebc 100644 --- a/src/libxrpl/server/JSONRPCUtil.cpp +++ b/src/libxrpl/server/JSONRPCUtil.cpp @@ -1,9 +1,10 @@ +#include + #include #include #include #include #include -#include #include #include diff --git a/src/libxrpl/server/LoadFeeTrack.cpp b/src/libxrpl/server/LoadFeeTrack.cpp index d698e2420e..53fbb8cb84 100644 --- a/src/libxrpl/server/LoadFeeTrack.cpp +++ b/src/libxrpl/server/LoadFeeTrack.cpp @@ -1,11 +1,15 @@ +#include + #include #include #include #include -#include +#include #include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/server/Manifest.cpp b/src/libxrpl/server/Manifest.cpp index f4634982d0..d2d7bd2e38 100644 --- a/src/libxrpl/server/Manifest.cpp +++ b/src/libxrpl/server/Manifest.cpp @@ -1,17 +1,43 @@ +#include + +#include #include +#include #include #include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include -#include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include namespace xrpl { @@ -263,7 +289,10 @@ loadValidatorToken(std::vector const& blob, beast::Journal journal) auto const key = strUnHex(k.asString()); if (key && key->size() == 32) - return ValidatorToken{m.asString(), makeSlice(*key)}; + { + return ValidatorToken{ + .manifest = m.asString(), .validationSecret = makeSlice(*key)}; + } } } diff --git a/src/libxrpl/server/Port.cpp b/src/libxrpl/server/Port.cpp index 2d0b4ec257..99466446d6 100644 --- a/src/libxrpl/server/Port.cpp +++ b/src/libxrpl/server/Port.cpp @@ -1,10 +1,11 @@ +#include + #include #include #include #include #include #include -#include #include #include @@ -17,7 +18,6 @@ #include #include #include -#include #include #include diff --git a/src/libxrpl/server/State.cpp b/src/libxrpl/server/State.cpp index a7c0c0fca2..3d2ed37e98 100644 --- a/src/libxrpl/server/State.cpp +++ b/src/libxrpl/server/State.cpp @@ -1,5 +1,20 @@ #include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include + namespace xrpl { void diff --git a/src/libxrpl/server/Vacuum.cpp b/src/libxrpl/server/Vacuum.cpp index 80de45cf66..d0e430ead9 100644 --- a/src/libxrpl/server/Vacuum.cpp +++ b/src/libxrpl/server/Vacuum.cpp @@ -1,8 +1,19 @@ #include -#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep + +#include + +#include #include +#include namespace xrpl { diff --git a/src/libxrpl/server/Wallet.cpp b/src/libxrpl/server/Wallet.cpp index 8da934a921..7906867654 100644 --- a/src/libxrpl/server/Wallet.cpp +++ b/src/libxrpl/server/Wallet.cpp @@ -1,7 +1,37 @@ -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -168,7 +198,7 @@ getPeerReservationTable(soci::session& session, beast::Journal j) JLOG(j.warn()) << "load: not a public key: " << valPubKey; continue; } - table.insert(PeerReservation{*optNodeId, *valDesc}); + table.insert(PeerReservation{.nodeId = *optNodeId, .description = *valDesc}); } return table; diff --git a/src/libxrpl/shamap/SHAMap.cpp b/src/libxrpl/shamap/SHAMap.cpp index 505d20651e..b638efc383 100644 --- a/src/libxrpl/shamap/SHAMap.cpp +++ b/src/libxrpl/shamap/SHAMap.cpp @@ -1,13 +1,43 @@ -#include +#include + +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include +#include +#include +#include // IWYU pragma: keep +#include #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include +#include #include #include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { [[nodiscard]] intr_ptr::SharedPtr @@ -110,7 +140,7 @@ SHAMap::walkTowardsKey(uint256 const& id, SharedPtrNodeStack* stack) const while (inNode->isInner()) { if (stack != nullptr) - stack->push({inNode, nodeID}); + stack->emplace(inNode, nodeID); auto const inner = intr_ptr::static_pointer_cast(inNode); auto const branch = selectBranch(nodeID, id); @@ -122,7 +152,7 @@ SHAMap::walkTowardsKey(uint256 const& id, SharedPtrNodeStack* stack) const } if (stack != nullptr) - stack->push({inNode, nodeID}); + stack->emplace(inNode, nodeID); return safe_downcast(inNode.get()); } @@ -419,11 +449,11 @@ SHAMap::belowHelper( auto inner = intr_ptr::static_pointer_cast(node); if (stack.empty()) { - stack.push({inner, SHAMapNodeID{}}); + stack.emplace(inner, SHAMapNodeID{}); } else { - stack.push({inner, stack.top().second.getChildNodeID(branch)}); + stack.emplace(inner, stack.top().second.getChildNodeID(branch)); } for (int i = init; cmp(i);) { @@ -438,7 +468,7 @@ SHAMap::belowHelper( return n.get(); } inner = intr_ptr::static_pointer_cast(node); - stack.push({inner, stack.top().second.getChildNodeID(branch)}); + stack.emplace(inner, stack.top().second.getChildNodeID(branch)); i = init; // descend and reset loop } else @@ -783,7 +813,7 @@ SHAMap::addGiveItem(SHAMapNodeType type, boost::intrusive_ptr while ((b1 = selectBranch(nodeID, tag)) == (b2 = selectBranch(nodeID, otherItem->key()))) { - stack.push({node, nodeID}); + stack.emplace(node, nodeID); // we need a new inner node, since both go on same branch at this // level @@ -1085,7 +1115,7 @@ SHAMap::dump(bool hash) const JLOG(journal_.info()) << " MAP Contains"; std::stack> stack; - stack.push({root_.get(), SHAMapNodeID()}); + stack.emplace(root_.get(), SHAMapNodeID()); do { @@ -1111,7 +1141,7 @@ SHAMap::dump(bool hash) const XRPL_ASSERT( child->getHash() == inner->getChildHash(i), "xrpl::SHAMap::dump : child hash do match"); - stack.push({child, nodeID.getChildNodeID(i)}); + stack.emplace(child, nodeID.getChildNodeID(i)); } } } diff --git a/src/libxrpl/shamap/SHAMapDelta.cpp b/src/libxrpl/shamap/SHAMapDelta.cpp index ded57760f1..d8162710be 100644 --- a/src/libxrpl/shamap/SHAMapDelta.cpp +++ b/src/libxrpl/shamap/SHAMapDelta.cpp @@ -1,10 +1,23 @@ -#include +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include #include #include +#include #include +#include +#include +#include +#include + +#include #include +#include +#include #include +#include +#include #include namespace xrpl { @@ -130,7 +143,7 @@ SHAMap::compare(SHAMap const& otherMap, Delta& differences, int maxCount) const using StackEntry = std::pair; std::stack> nodeStack; // track nodes we've pushed - nodeStack.push({root_.get(), otherMap.root_.get()}); + nodeStack.emplace(root_.get(), otherMap.root_.get()); while (!nodeStack.empty()) { auto [ourNode, otherNode] = nodeStack.top(); @@ -212,7 +225,7 @@ SHAMap::compare(SHAMap const& otherMap, Delta& differences, int maxCount) const } else { // The two trees have different non-empty branches - nodeStack.push({descendThrow(ours, i), otherMap.descendThrow(other, i)}); + nodeStack.emplace(descendThrow(ours, i), otherMap.descendThrow(other, i)); } } } @@ -302,52 +315,50 @@ SHAMap::walkMapParallel(std::vector& missingNodes, int maxMis nodeStacks[rootChildIndex].push(intr_ptr::static_pointer_cast(child)); JLOG(journal_.debug()) << "starting worker " << rootChildIndex; - workers.push_back( - std::thread( - [&m, &missingNodes, &maxMissing, &exceptions, this]( - std::stack> nodeStack) { - try + workers.emplace_back( + [&m, &missingNodes, &maxMissing, &exceptions, this]( + std::stack> nodeStack) { + try + { + while (!nodeStack.empty()) { - while (!nodeStack.empty()) + intr_ptr::SharedPtr const node = + std::move(nodeStack.top()); + XRPL_ASSERT(node, "xrpl::SHAMap::walkMapParallel : non-null node"); + nodeStack.pop(); + + for (int i = 0; i < 16; ++i) { - intr_ptr::SharedPtr const node = - std::move(nodeStack.top()); - XRPL_ASSERT(node, "xrpl::SHAMap::walkMapParallel : non-null node"); - nodeStack.pop(); + if (node->isEmptyBranch(i)) + continue; + intr_ptr::SharedPtr const nextNode = + descendNoStore(*node, i); - for (int i = 0; i < 16; ++i) + if (nextNode) { - if (node->isEmptyBranch(i)) - continue; - intr_ptr::SharedPtr const nextNode = - descendNoStore(*node, i); - - if (nextNode) + if (nextNode->isInner()) { - if (nextNode->isInner()) - { - nodeStack.push( - intr_ptr::static_pointer_cast( - nextNode)); - } - } - else - { - std::lock_guard const l{m}; - missingNodes.emplace_back(type_, node->getChildHash(i)); - if (--maxMissing <= 0) - return; + nodeStack.push( + intr_ptr::static_pointer_cast(nextNode)); } } + else + { + std::lock_guard const l{m}; + missingNodes.emplace_back(type_, node->getChildHash(i)); + if (--maxMissing <= 0) + return; + } } } - catch (SHAMapMissingNode const& e) - { - std::lock_guard const l(m); - exceptions.push_back(e); - } - }, - std::move(nodeStacks[rootChildIndex]))); + } + catch (SHAMapMissingNode const& e) + { + std::lock_guard const l(m); + exceptions.push_back(e); + } + }, + std::move(nodeStacks[rootChildIndex])); } for (std::thread& worker : workers) diff --git a/src/libxrpl/shamap/SHAMapInnerNode.cpp b/src/libxrpl/shamap/SHAMapInnerNode.cpp index 91249d139e..e501561ee4 100644 --- a/src/libxrpl/shamap/SHAMapInnerNode.cpp +++ b/src/libxrpl/shamap/SHAMapInnerNode.cpp @@ -1,13 +1,30 @@ -#include +#include + +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include #include +#include #include #include +#include #include +#include #include -#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { SHAMapInnerNode::SHAMapInnerNode(std::uint32_t cowid, std::uint8_t numAllocatedChildren) diff --git a/src/libxrpl/shamap/SHAMapLeafNode.cpp b/src/libxrpl/shamap/SHAMapLeafNode.cpp index 3776de3a35..58646503aa 100644 --- a/src/libxrpl/shamap/SHAMapLeafNode.cpp +++ b/src/libxrpl/shamap/SHAMapLeafNode.cpp @@ -1,5 +1,18 @@ #include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + namespace xrpl { SHAMapLeafNode::SHAMapLeafNode(boost::intrusive_ptr item, std::uint32_t cowid) diff --git a/src/libxrpl/shamap/SHAMapNodeID.cpp b/src/libxrpl/shamap/SHAMapNodeID.cpp index e5dbebc871..c2d93f20ee 100644 --- a/src/libxrpl/shamap/SHAMapNodeID.cpp +++ b/src/libxrpl/shamap/SHAMapNodeID.cpp @@ -1,8 +1,15 @@ -#include +#include + +#include +#include #include #include #include -#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/shamap/SHAMapSync.cpp b/src/libxrpl/shamap/SHAMapSync.cpp index 2074b43cb4..e7f3447642 100644 --- a/src/libxrpl/shamap/SHAMapSync.cpp +++ b/src/libxrpl/shamap/SHAMapSync.cpp @@ -1,8 +1,33 @@ +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include +#include +#include #include +#include #include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -58,7 +83,7 @@ SHAMap::visitNodes(std::function const& function) const if (pos != 15) { // save next position to resume at - stack.push(std::make_pair(pos + 1, std::move(node))); + stack.emplace(pos + 1, std::move(node)); } // descend to the child's first position @@ -107,7 +132,7 @@ SHAMap::visitDifferences( using StackEntry = std::pair; std::stack> stack; - stack.push({safe_downcast(root_.get()), SHAMapNodeID{}}); + stack.emplace(safe_downcast(root_.get()), SHAMapNodeID{}); while (!stack.empty()) { @@ -130,7 +155,7 @@ SHAMap::visitDifferences( if (next->isInner()) { if ((have == nullptr) || !have->hasInnerNode(childID, childHash)) - stack.push({safe_downcast(next), childID}); + stack.emplace(safe_downcast(next), childID); } else if ( (have == nullptr) || @@ -362,7 +387,7 @@ SHAMap::getMissingNodes(int max, SHAMapSyncFilter* filter) for (auto const& [innerNode, nodeId] : mn.resumes_) { if (!innerNode->isFullBelow(mn.generation_)) - mn.stack_.push(std::make_tuple(innerNode, nodeId, rand_int(255), 0, true)); + mn.stack_.emplace(innerNode, nodeId, rand_int(255), 0, true); } mn.resumes_.clear(); @@ -438,7 +463,7 @@ SHAMap::getNodeFat( // Add this node to the reply s.erase(); node->serializeForWire(s); - data.emplace_back(std::make_pair(nodeID, s.getData())); + data.emplace_back(nodeID, s.getData()); if (node->isInner()) { @@ -468,7 +493,7 @@ SHAMap::getNodeFat( // Just include this node s.erase(); childNode->serializeForWire(s); - data.emplace_back(std::make_pair(childID, s.getData())); + data.emplace_back(childID, s.getData()); } } } @@ -636,7 +661,7 @@ SHAMap::deepCompare(SHAMap& other) const // Intended for debug/test only std::stack> stack; - stack.push({root_.get(), other.root_.get()}); + stack.emplace(root_.get(), other.root_.get()); while (!stack.empty()) { @@ -690,7 +715,7 @@ SHAMap::deepCompare(SHAMap& other) const JLOG(journal_.warn()) << "unable to fetch inner node"; return false; } - stack.push({next, otherNext}); + stack.emplace(next, otherNext); } } } diff --git a/src/libxrpl/shamap/SHAMapTreeNode.cpp b/src/libxrpl/shamap/SHAMapTreeNode.cpp index 9497b4dc54..6fc7bd81e4 100644 --- a/src/libxrpl/shamap/SHAMapTreeNode.cpp +++ b/src/libxrpl/shamap/SHAMapTreeNode.cpp @@ -1,15 +1,28 @@ -#include +#include + +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include #include +#include #include #include #include +#include #include #include #include -#include +#include +#include #include #include +#include +#include +#include +#include +#include + namespace xrpl { intr_ptr::SharedPtr diff --git a/src/libxrpl/tx/ApplyContext.cpp b/src/libxrpl/tx/ApplyContext.cpp index d503643662..fa17574616 100644 --- a/src/libxrpl/tx/ApplyContext.cpp +++ b/src/libxrpl/tx/ApplyContext.cpp @@ -1,10 +1,28 @@ #include -// + #include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { ApplyContext::ApplyContext( @@ -104,7 +122,7 @@ ApplyContext::checkInvariantsHelper( // call each check's finalizer to see that it passes if (!std::all_of(finalizers.cbegin(), finalizers.cend(), [](auto const& b) { return b; })) { - JLOG(journal.fatal()) << "Transaction has failed one or more invariants: " + JLOG(journal.fatal()) << "Transaction has failed one or more global invariants: " << to_string(tx.getJson(JsonOptions::none)); return failInvariantCheck(result); @@ -112,7 +130,7 @@ ApplyContext::checkInvariantsHelper( } catch (std::exception const& ex) { - JLOG(journal.fatal()) << "Transaction caused an exception in an invariant" + JLOG(journal.fatal()) << "Transaction caused an exception in a global invariant" << ", ex: " << ex.what() << ", tx: " << to_string(tx.getJson(JsonOptions::none)); @@ -130,7 +148,7 @@ ApplyContext::checkInvariants(TER const result, XRPAmount const fee) "xrpl::ApplyContext::checkInvariants : is tesSUCCESS or tecCLAIM"); return checkInvariantsHelper( - result, fee, std::make_index_sequence::value>{}); + result, fee, std::make_index_sequence>{}); } } // namespace xrpl diff --git a/src/libxrpl/tx/SignerEntries.cpp b/src/libxrpl/tx/SignerEntries.cpp index 75659a7f04..a1883024d9 100644 --- a/src/libxrpl/tx/SignerEntries.cpp +++ b/src/libxrpl/tx/SignerEntries.cpp @@ -1,11 +1,20 @@ +#include + +#include #include +#include +#include +#include +#include #include #include #include -#include +#include #include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/Transactor.cpp b/src/libxrpl/tx/Transactor.cpp index 5010763afd..9791ee4c9b 100644 --- a/src/libxrpl/tx/Transactor.cpp +++ b/src/libxrpl/tx/Transactor.cpp @@ -1,23 +1,54 @@ +#include + +#include +#include +#include +#include #include +#include +#include #include -#include -#include +#include +#include // IWYU pragma: keep +#include +#include #include #include #include #include #include #include +#include #include +#include #include +#include #include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep #include +#include #include -#include +#include +#include #include +#include #include -#include #include +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -1088,6 +1119,59 @@ Transactor::trapTransaction(uint256 txHash) const JLOG(j_.debug()) << "Transaction trapped: " << txHash; } +[[nodiscard]] TER +Transactor::checkTransactionInvariants(TER result, XRPAmount fee) +{ + try + { + // Phase 1: visit modified entries + ctx_.visit( + [this](uint256 const&, bool isDelete, SLE::const_ref before, SLE::const_ref after) { + this->visitInvariantEntry(isDelete, before, after); + }); + + // Phase 2: finalize + if (!this->finalizeInvariants(ctx_.tx, result, fee, ctx_.view(), ctx_.journal)) + { + JLOG(ctx_.journal.fatal()) << // + "Transaction has failed one or more transaction invariants, tx: " << // + to_string(ctx_.tx.getJson(JsonOptions::none)); + return tecINVARIANT_FAILED; + } + } + catch (std::exception const& ex) + { + JLOG(ctx_.journal.fatal()) << // + "Exception while checking transaction invariants: " << // + ex.what() << // + ", tx: " << // + to_string(ctx_.tx.getJson(JsonOptions::none)); + + return tecINVARIANT_FAILED; + } + + return result; +} + +[[nodiscard]] TER +Transactor::checkInvariants(TER result, XRPAmount fee) +{ + // Transaction invariants first (more specific). These check post-conditions of the specific + // transaction. If these fail, the transaction's core logic is wrong. + auto const txResult = checkTransactionInvariants(result, fee); + + // Protocol invariants second (broader). These check properties that must hold regardless of + // transaction type. + auto const protoResult = ctx_.checkInvariants(result, fee); + + // Fail if either check failed. tef (fatal) takes priority over tec. + if (protoResult == tefINVARIANT_FAILED) + return tefINVARIANT_FAILED; + if (txResult == tecINVARIANT_FAILED || protoResult == tecINVARIANT_FAILED) + return tecINVARIANT_FAILED; + + return result; +} //------------------------------------------------------------------------------ ApplyResult Transactor::operator()() @@ -1264,20 +1348,20 @@ Transactor::operator()() { // Check invariants: if `tecINVARIANT_FAILED` is not returned, we can // proceed to apply the tx - result = ctx_.checkInvariants(result, fee); - + result = checkInvariants(result, fee); if (result == tecINVARIANT_FAILED) { - // if invariants checking failed again, reset the context and - // attempt to only claim a fee. + // Reset to fee-claim only auto const resetResult = reset(fee); if (!isTesSuccess(resetResult.first)) result = resetResult.first; fee = resetResult.second; - // Check invariants again to ensure the fee claiming doesn't - // violate invariants. + // Check invariants again to ensure the fee claiming doesn't violate + // invariants. After reset, only protocol invariants are re-checked. + // Transaction invariants are not meaningful here — the transaction's + // effects have been rolled back. if (isTesSuccess(result) || isTecClaim(result)) result = ctx_.checkInvariants(result, fee); } diff --git a/src/libxrpl/tx/apply.cpp b/src/libxrpl/tx/apply.cpp index c8016002c2..65c9649035 100644 --- a/src/libxrpl/tx/apply.cpp +++ b/src/libxrpl/tx/apply.cpp @@ -1,11 +1,28 @@ +#include + #include +#include +#include +#include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include #include +#include +#include +#include + namespace xrpl { // These are the same flags defined as HashRouterFlags::PRIVATE1-4 in diff --git a/src/libxrpl/tx/applySteps.cpp b/src/libxrpl/tx/applySteps.cpp index b688377541..eb058e5ca6 100644 --- a/src/libxrpl/tx/applySteps.cpp +++ b/src/libxrpl/tx/applySteps.cpp @@ -1,4 +1,27 @@ #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #pragma push_macro("TRANSACTION") #undef TRANSACTION @@ -17,8 +40,6 @@ #include #include -#include - namespace xrpl { namespace { @@ -292,6 +313,18 @@ invoke_apply(ApplyContext& ctx) } } +// Test-only factory — not part of the public API. +// The returned Transactor holds a raw reference to ctx; the caller must ensure +// the ApplyContext outlives the Transactor. +std::unique_ptr +makeTransactor(ApplyContext& ctx) +{ + return with_txn_type( + ctx.view().rules(), ctx.tx.getTxnType(), [&]() -> std::unique_ptr { + return std::make_unique(ctx); + }); +} + PreflightResult preflight( ServiceRegistry& registry, diff --git a/src/libxrpl/tx/invariants/AMMInvariant.cpp b/src/libxrpl/tx/invariants/AMMInvariant.cpp index 35fd356918..3cc888dea2 100644 --- a/src/libxrpl/tx/invariants/AMMInvariant.cpp +++ b/src/libxrpl/tx/invariants/AMMInvariant.cpp @@ -1,9 +1,26 @@ #include -// + #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/FreezeInvariant.cpp b/src/libxrpl/tx/invariants/FreezeInvariant.cpp index e6be7c5e82..bf9ef81396 100644 --- a/src/libxrpl/tx/invariants/FreezeInvariant.cpp +++ b/src/libxrpl/tx/invariants/FreezeInvariant.cpp @@ -1,11 +1,24 @@ #include -// + #include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include + namespace xrpl { void @@ -175,10 +188,14 @@ TransfersNotFrozen::recordBalanceChanges( auto const currency = after->at(sfBalance).get().currency; // Change from low account's perspective, which is trust line default - recordBalance({currency, after->at(sfHighLimit).getIssuer()}, {after, balanceChangeSign}); + recordBalance( + {currency, after->at(sfHighLimit).getIssuer()}, + {.line = after, .balanceChangeSign = balanceChangeSign}); // Change from high account's perspective, which reverses the sign. - recordBalance({currency, after->at(sfLowLimit).getIssuer()}, {after, -balanceChangeSign}); + recordBalance( + {currency, after->at(sfLowLimit).getIssuer()}, + {.line = after, .balanceChangeSign = -balanceChangeSign}); } std::shared_ptr diff --git a/src/libxrpl/tx/invariants/InvariantCheck.cpp b/src/libxrpl/tx/invariants/InvariantCheck.cpp index 1d6756eaca..f2570d14e8 100644 --- a/src/libxrpl/tx/invariants/InvariantCheck.cpp +++ b/src/libxrpl/tx/invariants/InvariantCheck.cpp @@ -1,22 +1,40 @@ #include -// + #include +#include +#include +#include #include -#include +#include #include -#include +#include +#include #include #include +#include +#include #include +#include +#include #include #include -#include +#include +#include // IWYU pragma: keep +#include #include +#include #include +#include +#include #include +#include #include +#include +#include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp b/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp index 8ee0a0deb8..b72f821f50 100644 --- a/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp +++ b/src/libxrpl/tx/invariants/LoanBrokerInvariant.cpp @@ -1,13 +1,21 @@ #include -// + #include -#include -#include -#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include // IWYU pragma: keep +#include +#include #include +#include + +#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/LoanInvariant.cpp b/src/libxrpl/tx/invariants/LoanInvariant.cpp index 6ce1261612..7aea36296e 100644 --- a/src/libxrpl/tx/invariants/LoanInvariant.cpp +++ b/src/libxrpl/tx/invariants/LoanInvariant.cpp @@ -1,9 +1,18 @@ #include -// + #include -#include +#include +#include +#include #include -#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include + +#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/MPTInvariant.cpp b/src/libxrpl/tx/invariants/MPTInvariant.cpp index 29a9204d7d..229f5572c0 100644 --- a/src/libxrpl/tx/invariants/MPTInvariant.cpp +++ b/src/libxrpl/tx/invariants/MPTInvariant.cpp @@ -1,16 +1,29 @@ #include -// + #include +#include +#include +#include #include +#include #include #include #include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/invariants/NFTInvariant.cpp b/src/libxrpl/tx/invariants/NFTInvariant.cpp index e37e55e709..90511b6d04 100644 --- a/src/libxrpl/tx/invariants/NFTInvariant.cpp +++ b/src/libxrpl/tx/invariants/NFTInvariant.cpp @@ -1,14 +1,28 @@ #include -// + #include -#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include -#include #include +#include +#include +#include + namespace xrpl { void diff --git a/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp b/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp index e932a6ba09..6466812743 100644 --- a/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp +++ b/src/libxrpl/tx/invariants/PermissionedDEXInvariant.cpp @@ -1,11 +1,20 @@ #include -// + #include -#include +#include +#include +#include #include #include +#include #include +#include +#include +#include #include +#include + +#include namespace xrpl { @@ -32,11 +41,17 @@ ValidPermissionedDEX::visitEntry( regularOffers_ = true; } - // if a hybrid offer is missing domain or additional book, there's - // something wrong + // pre-fixSecurity3_1_3: hybrid offer missing domain, missing + // sfAdditionalBooks, or sfAdditionalBooks has more than one entry if (after->isFlag(lsfHybrid) && (!after->isFieldPresent(sfDomainID) || !after->isFieldPresent(sfAdditionalBooks) || after->getFieldArray(sfAdditionalBooks).size() > 1)) + badHybridsOld_ = true; + + // post-fixSecurity3_1_3: same as above but also catches size == 0 + if (after->isFlag(lsfHybrid) && + (!after->isFieldPresent(sfDomainID) || !after->isFieldPresent(sfAdditionalBooks) || + after->getFieldArray(sfAdditionalBooks).size() != 1)) badHybrids_ = true; } } @@ -55,7 +70,8 @@ ValidPermissionedDEX::finalize( // For each offercreate transaction, check if // permissioned offers are valid - if (txType == ttOFFER_CREATE && badHybrids_) + bool const isMalformed = view.rules().enabled(fixSecurity3_1_3) ? badHybrids_ : badHybridsOld_; + if (txType == ttOFFER_CREATE && isMalformed) { JLOG(j.fatal()) << "Invariant failed: hybrid offer is malformed"; return false; diff --git a/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp b/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp index 7365fc7b1a..3c6f67a8d6 100644 --- a/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp +++ b/src/libxrpl/tx/invariants/PermissionedDomainInvariant.cpp @@ -1,10 +1,22 @@ #include -// -#include + +#include +#include +#include #include #include +#include +#include +#include #include +#include +#include +#include #include +#include + +#include +#include namespace xrpl { @@ -23,7 +35,11 @@ ValidPermissionedDomain::visitEntry( auto const& credentials = sle->getFieldArray(sfAcceptedCredentials); auto const sorted = credentials::makeSorted(credentials); - SleStatus ss{credentials.size(), false, !sorted.empty(), isDel}; + SleStatus ss{ + .credentialsSize_ = credentials.size(), + .isSorted_ = false, + .isUnique_ = !sorted.empty(), + .isDelete_ = isDel}; // If array have duplicates then all the other checks are invalid if (ss.isUnique_) diff --git a/src/libxrpl/tx/invariants/VaultInvariant.cpp b/src/libxrpl/tx/invariants/VaultInvariant.cpp index c6b3295569..c0d082e14e 100644 --- a/src/libxrpl/tx/invariants/VaultInvariant.cpp +++ b/src/libxrpl/tx/invariants/VaultInvariant.cpp @@ -1,18 +1,33 @@ #include -// + #include +#include +#include #include -#include +#include #include #include #include +#include #include #include #include -#include +#include +#include +#include // IWYU pragma: keep +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include + namespace xrpl { ValidVault::Vault @@ -61,10 +76,12 @@ ValidVault::visitEntry( "xrpl::ValidVault::visitEntry : some object is available"); // Number balanceDelta will capture the difference (delta) between "before" - // state (zero if created) and "after" state (zero if destroyed), so the - // invariants can validate that the change in account balances matches the - // change in vault balances, stored to deltas_ at the end of this function. - Number balanceDelta{}; + // state (zero if created) and "after" state (zero if destroyed), and + // preserves value scale (exponent) to round values to the same scale during + // validation. It is used to validate that the change in account + // balances matches the change in vault balances, stored to deltas_ at the + // end of this function. + DeltaInfo balanceDelta{.delta = numZero, .scale = std::nullopt}; std::int8_t sign = 0; if (before) @@ -78,18 +95,34 @@ ValidVault::visitEntry( // At this moment we have no way of telling if this object holds // vault shares or something else. Save it for finalize. beforeMPTs_.push_back(Shares::make(*before)); - balanceDelta = static_cast(before->getFieldU64(sfOutstandingAmount)); + balanceDelta.delta = + static_cast(before->getFieldU64(sfOutstandingAmount)); + // MPTs are ints, so the scale is always 0. + balanceDelta.scale = 0; sign = 1; break; case ltMPTOKEN: - balanceDelta = static_cast(before->getFieldU64(sfMPTAmount)); + balanceDelta.delta = static_cast(before->getFieldU64(sfMPTAmount)); + // MPTs are ints, so the scale is always 0. + balanceDelta.scale = 0; sign = -1; break; case ltACCOUNT_ROOT: - case ltRIPPLE_STATE: - balanceDelta = before->getFieldAmount(sfBalance); + balanceDelta.delta = before->getFieldAmount(sfBalance); + // Account balance is XRP, which is an int, so the scale is + // always 0. + balanceDelta.scale = 0; sign = -1; break; + case ltRIPPLE_STATE: { + auto const amount = before->getFieldAmount(sfBalance); + balanceDelta.delta = amount; + // Trust Line balances are STAmounts, so we can use the exponent + // directly to get the scale. + balanceDelta.scale = amount.exponent(); + sign = -1; + break; + } default:; } } @@ -105,19 +138,36 @@ ValidVault::visitEntry( // At this moment we have no way of telling if this object holds // vault shares or something else. Save it for finalize. afterMPTs_.push_back(Shares::make(*after)); - balanceDelta -= + balanceDelta.delta -= Number(static_cast(after->getFieldU64(sfOutstandingAmount))); + // MPTs are ints, so the scale is always 0. + balanceDelta.scale = 0; sign = 1; break; case ltMPTOKEN: - balanceDelta -= Number(static_cast(after->getFieldU64(sfMPTAmount))); + balanceDelta.delta -= + Number(static_cast(after->getFieldU64(sfMPTAmount))); + // MPTs are ints, so the scale is always 0. + balanceDelta.scale = 0; sign = -1; break; case ltACCOUNT_ROOT: - case ltRIPPLE_STATE: - balanceDelta -= Number(after->getFieldAmount(sfBalance)); + balanceDelta.delta -= Number(after->getFieldAmount(sfBalance)); + // Account balance is XRP, which is an int, so the scale is + // always 0. + balanceDelta.scale = 0; sign = -1; break; + case ltRIPPLE_STATE: { + auto const amount = after->getFieldAmount(sfBalance); + balanceDelta.delta -= Number(amount); + // Trust Line balances are STAmounts, so we can use the exponent + // directly to get the scale. + if (amount.exponent() > balanceDelta.scale) + balanceDelta.scale = amount.exponent(); + sign = -1; + break; + } default:; } } @@ -129,7 +179,11 @@ ValidVault::visitEntry( // transferred to the account. We intentionally do not compare balanceDelta // against zero, to avoid missing such updates. if (sign != 0) - deltas_[key] = balanceDelta * sign; + { + XRPL_ASSERT_PARTS(balanceDelta.scale, "xrpl::ValidVault::visitEntry", "scale initialized"); + balanceDelta.delta *= sign; + deltas_[key] = balanceDelta; + } } bool @@ -391,13 +445,13 @@ ValidVault::finalize( } auto const& vaultAsset = afterVault.asset; - auto const deltaAssets = [&](AccountID const& id) -> std::optional { + auto const deltaAssets = [&](AccountID const& id) -> std::optional { auto const get = // - [&](auto const& it, std::int8_t sign = 1) -> std::optional { + [&](auto const& it, std::int8_t sign = 1) -> std::optional { if (it == deltas_.end()) return std::nullopt; - return it->second * sign; + return DeltaInfo{it->second.delta * sign, it->second.scale}; }; return std::visit( @@ -416,7 +470,7 @@ ValidVault::finalize( }, vaultAsset.value()); }; - auto const deltaAssetsTxAccount = [&]() -> std::optional { + auto const deltaAssetsTxAccount = [&]() -> std::optional { auto ret = deltaAssets(tx[sfAccount]); // Nothing returned or not XRP transaction if (!ret.has_value() || !vaultAsset.native()) @@ -427,20 +481,20 @@ ValidVault::finalize( delegate.has_value() && *delegate != tx[sfAccount]) return ret; - *ret += fee.drops(); - if (*ret == zero) + ret->delta += fee.drops(); + if (ret->delta == zero) return std::nullopt; return ret; }; - auto const deltaShares = [&](AccountID const& id) -> std::optional { + auto const deltaShares = [&](AccountID const& id) -> std::optional { auto const it = [&]() { if (id == afterVault.pseudoId) return deltas_.find(keylet::mptIssuance(afterVault.shareMPTID).key); return deltas_.find(keylet::mptoken(afterVault.shareMPTID, id).key); }(); - return it != deltas_.end() ? std::optional(it->second) : std::nullopt; + return it != deltas_.end() ? std::optional(it->second) : std::nullopt; }; auto const vaultHoldsNoAssets = [&](Vault const& vault) { @@ -567,16 +621,30 @@ ValidVault::finalize( !beforeVault_.empty(), "xrpl::ValidVault::finalize : deposit updated a vault"); auto const& beforeVault = beforeVault_[0]; - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); - - if (!vaultDeltaAssets) + auto const maybeVaultDeltaAssets = deltaAssets(afterVault.pseudoId); + if (!maybeVaultDeltaAssets) { JLOG(j.fatal()) << // "Invariant failed: deposit must change vault balance"; return false; // That's all we can do } - if (*vaultDeltaAssets > tx[sfAmount]) + // Get the coarsest scale to round calculations to + auto const totalDelta = DeltaInfo::makeDelta( + beforeVault.assetsTotal, afterVault.assetsTotal, vaultAsset); + auto const availableDelta = DeltaInfo::makeDelta( + beforeVault.assetsAvailable, afterVault.assetsAvailable, vaultAsset); + auto const minScale = computeCoarsestScale({ + *maybeVaultDeltaAssets, + totalDelta, + availableDelta, + }); + + auto const vaultDeltaAssets = + roundToAsset(vaultAsset, maybeVaultDeltaAssets->delta, minScale); + auto const txAmount = roundToAsset(vaultAsset, tx[sfAmount], minScale); + + if (vaultDeltaAssets > txAmount) { JLOG(j.fatal()) << // "Invariant failed: deposit must not change vault " @@ -584,7 +652,7 @@ ValidVault::finalize( result = false; } - if (*vaultDeltaAssets <= zero) + if (vaultDeltaAssets <= zero) { JLOG(j.fatal()) << // "Invariant failed: deposit must increase vault balance"; @@ -601,16 +669,23 @@ ValidVault::finalize( if (!issuerDeposit) { - auto const accountDeltaAssets = deltaAssetsTxAccount(); - if (!accountDeltaAssets) + auto const maybeAccDeltaAssets = deltaAssetsTxAccount(); + if (!maybeAccDeltaAssets) { JLOG(j.fatal()) << // "Invariant failed: deposit must change depositor " "balance"; return false; } + auto const localMinScale = + std::max(minScale, computeCoarsestScale({*maybeAccDeltaAssets})); - if (*accountDeltaAssets >= zero) + auto const accountDeltaAssets = + roundToAsset(vaultAsset, maybeAccDeltaAssets->delta, localMinScale); + auto const localVaultDeltaAssets = + roundToAsset(vaultAsset, vaultDeltaAssets, localMinScale); + + if (accountDeltaAssets >= zero) { JLOG(j.fatal()) << // "Invariant failed: deposit must decrease depositor " @@ -618,7 +693,7 @@ ValidVault::finalize( result = false; } - if (*accountDeltaAssets * -1 != *vaultDeltaAssets) + if (localVaultDeltaAssets * -1 != accountDeltaAssets) { JLOG(j.fatal()) << // "Invariant failed: deposit must change vault and " @@ -636,16 +711,17 @@ ValidVault::finalize( result = false; } - auto const accountDeltaShares = deltaShares(tx[sfAccount]); - if (!accountDeltaShares) + auto const maybeAccDeltaShares = deltaShares(tx[sfAccount]); + if (!maybeAccDeltaShares) { JLOG(j.fatal()) << // "Invariant failed: deposit must change depositor " "shares"; return false; // That's all we can do } - - if (*accountDeltaShares <= zero) + // We don't need to round shares, they are integral MPT + auto const& accountDeltaShares = *maybeAccDeltaShares; + if (accountDeltaShares.delta <= zero) { JLOG(j.fatal()) << // "Invariant failed: deposit must increase depositor " @@ -653,15 +729,17 @@ ValidVault::finalize( result = false; } - auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); - if (!vaultDeltaShares || *vaultDeltaShares == zero) + auto const maybeVaultDeltaShares = deltaShares(afterVault.pseudoId); + if (!maybeVaultDeltaShares || maybeVaultDeltaShares->delta == zero) { JLOG(j.fatal()) << // "Invariant failed: deposit must change vault shares"; return false; // That's all we can do } - if (*vaultDeltaShares * -1 != *accountDeltaShares) + // We don't need to round shares, they are integral MPT + auto const& vaultDeltaShares = *maybeVaultDeltaShares; + if (vaultDeltaShares.delta * -1 != accountDeltaShares.delta) { JLOG(j.fatal()) << // "Invariant failed: deposit must change depositor and " @@ -669,13 +747,18 @@ ValidVault::finalize( result = false; } - if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) + auto const assetTotalDelta = roundToAsset( + vaultAsset, afterVault.assetsTotal - beforeVault.assetsTotal, minScale); + if (assetTotalDelta != vaultDeltaAssets) { JLOG(j.fatal()) << "Invariant failed: deposit and assets " "outstanding must add up"; result = false; } - if (beforeVault.assetsAvailable + *vaultDeltaAssets != afterVault.assetsAvailable) + + auto const assetAvailableDelta = roundToAsset( + vaultAsset, afterVault.assetsAvailable - beforeVault.assetsAvailable, minScale); + if (assetAvailableDelta != vaultDeltaAssets) { JLOG(j.fatal()) << "Invariant failed: deposit and assets " "available must add up"; @@ -693,16 +776,27 @@ ValidVault::finalize( "vault"); auto const& beforeVault = beforeVault_[0]; - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); + auto const maybeVaultDeltaAssets = deltaAssets(afterVault.pseudoId); - if (!vaultDeltaAssets) + if (!maybeVaultDeltaAssets) { JLOG(j.fatal()) << "Invariant failed: withdrawal must " "change vault balance"; return false; // That's all we can do } - if (*vaultDeltaAssets >= zero) + // Get the most coarse scale to round calculations to + auto const totalDelta = DeltaInfo::makeDelta( + beforeVault.assetsTotal, afterVault.assetsTotal, vaultAsset); + auto const availableDelta = DeltaInfo::makeDelta( + beforeVault.assetsAvailable, afterVault.assetsAvailable, vaultAsset); + auto const minScale = + computeCoarsestScale({*maybeVaultDeltaAssets, totalDelta, availableDelta}); + + auto const vaultPseudoDeltaAssets = + roundToAsset(vaultAsset, maybeVaultDeltaAssets->delta, minScale); + + if (vaultPseudoDeltaAssets >= zero) { JLOG(j.fatal()) << "Invariant failed: withdrawal must " "decrease vault balance"; @@ -720,15 +814,15 @@ ValidVault::finalize( if (!issuerWithdrawal) { - auto const accountDeltaAssets = deltaAssetsTxAccount(); - auto const otherAccountDelta = [&]() -> std::optional { + auto const maybeAccDelta = deltaAssetsTxAccount(); + auto const maybeOtherAccDelta = [&]() -> std::optional { if (auto const destination = tx[~sfDestination]; destination && *destination != tx[sfAccount]) return deltaAssets(*destination); return std::nullopt; }(); - if (accountDeltaAssets.has_value() == otherAccountDelta.has_value()) + if (maybeAccDelta.has_value() == maybeOtherAccDelta.has_value()) { JLOG(j.fatal()) << // "Invariant failed: withdrawal must change one " @@ -737,9 +831,17 @@ ValidVault::finalize( } auto const destinationDelta = // - accountDeltaAssets ? *accountDeltaAssets : *otherAccountDelta; + maybeAccDelta ? *maybeAccDelta : *maybeOtherAccDelta; - if (destinationDelta <= zero) + // the scale of destinationDelta can be coarser than + // minScale, so we take that into account when rounding + auto const localMinScale = + std::max(minScale, computeCoarsestScale({destinationDelta})); + + auto const roundedDestinationDelta = + roundToAsset(vaultAsset, destinationDelta.delta, localMinScale); + + if (roundedDestinationDelta <= zero) { JLOG(j.fatal()) << // "Invariant failed: withdrawal must increase " @@ -747,7 +849,9 @@ ValidVault::finalize( result = false; } - if (*vaultDeltaAssets * -1 != destinationDelta) + auto const localPseudoDeltaAssets = + roundToAsset(vaultAsset, vaultPseudoDeltaAssets, localMinScale); + if (localPseudoDeltaAssets * -1 != roundedDestinationDelta) { JLOG(j.fatal()) << // "Invariant failed: withdrawal must change vault " @@ -756,6 +860,7 @@ ValidVault::finalize( } } + // We don't need to round shares, they are integral MPT auto const accountDeltaShares = deltaShares(tx[sfAccount]); if (!accountDeltaShares) { @@ -765,7 +870,7 @@ ValidVault::finalize( return false; } - if (*accountDeltaShares >= zero) + if (accountDeltaShares->delta >= zero) { JLOG(j.fatal()) << // "Invariant failed: withdrawal must decrease depositor " @@ -773,15 +878,16 @@ ValidVault::finalize( result = false; } + // We don't need to round shares, they are integral MPT auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); - if (!vaultDeltaShares || *vaultDeltaShares == zero) + if (!vaultDeltaShares || vaultDeltaShares->delta == zero) { JLOG(j.fatal()) << // "Invariant failed: withdrawal must change vault shares"; return false; // That's all we can do } - if (*vaultDeltaShares * -1 != *accountDeltaShares) + if (vaultDeltaShares->delta * -1 != accountDeltaShares->delta) { JLOG(j.fatal()) << // "Invariant failed: withdrawal must change depositor " @@ -789,15 +895,20 @@ ValidVault::finalize( result = false; } + auto const assetTotalDelta = roundToAsset( + vaultAsset, afterVault.assetsTotal - beforeVault.assetsTotal, minScale); // Note, vaultBalance is negative (see check above) - if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) + if (assetTotalDelta != vaultPseudoDeltaAssets) { JLOG(j.fatal()) << "Invariant failed: withdrawal and " "assets outstanding must add up"; result = false; } - if (beforeVault.assetsAvailable + *vaultDeltaAssets != afterVault.assetsAvailable) + auto const assetAvailableDelta = roundToAsset( + vaultAsset, afterVault.assetsAvailable - beforeVault.assetsAvailable, minScale); + + if (assetAvailableDelta != vaultPseudoDeltaAssets) { JLOG(j.fatal()) << "Invariant failed: withdrawal and " "assets available must add up"; @@ -828,10 +939,18 @@ ValidVault::finalize( } } - auto const vaultDeltaAssets = deltaAssets(afterVault.pseudoId); - if (vaultDeltaAssets) + auto const maybeVaultDeltaAssets = deltaAssets(afterVault.pseudoId); + if (maybeVaultDeltaAssets) { - if (*vaultDeltaAssets >= zero) + auto const totalDelta = DeltaInfo::makeDelta( + beforeVault.assetsTotal, afterVault.assetsTotal, vaultAsset); + auto const availableDelta = DeltaInfo::makeDelta( + beforeVault.assetsAvailable, afterVault.assetsAvailable, vaultAsset); + auto const minScale = + computeCoarsestScale({*maybeVaultDeltaAssets, totalDelta, availableDelta}); + auto const vaultDeltaAssets = + roundToAsset(vaultAsset, maybeVaultDeltaAssets->delta, minScale); + if (vaultDeltaAssets >= zero) { JLOG(j.fatal()) << // "Invariant failed: clawback must decrease vault " @@ -839,7 +958,9 @@ ValidVault::finalize( result = false; } - if (beforeVault.assetsTotal + *vaultDeltaAssets != afterVault.assetsTotal) + auto const assetsTotalDelta = roundToAsset( + vaultAsset, afterVault.assetsTotal - beforeVault.assetsTotal, minScale); + if (assetsTotalDelta != vaultDeltaAssets) { JLOG(j.fatal()) << // "Invariant failed: clawback and assets outstanding " @@ -847,8 +968,11 @@ ValidVault::finalize( result = false; } - if (beforeVault.assetsAvailable + *vaultDeltaAssets != - afterVault.assetsAvailable) + auto const assetAvailableDelta = roundToAsset( + vaultAsset, + afterVault.assetsAvailable - beforeVault.assetsAvailable, + minScale); + if (assetAvailableDelta != vaultDeltaAssets) { JLOG(j.fatal()) << // "Invariant failed: clawback and assets available " @@ -863,15 +987,15 @@ ValidVault::finalize( return false; // That's all we can do } - auto const accountDeltaShares = deltaShares(tx[sfHolder]); - if (!accountDeltaShares) + // We don't need to round shares, they are integral MPT + auto const maybeAccountDeltaShares = deltaShares(tx[sfHolder]); + if (!maybeAccountDeltaShares) { JLOG(j.fatal()) << // "Invariant failed: clawback must change holder shares"; return false; // That's all we can do } - - if (*accountDeltaShares >= zero) + if (maybeAccountDeltaShares->delta >= zero) { JLOG(j.fatal()) << // "Invariant failed: clawback must decrease holder " @@ -879,15 +1003,16 @@ ValidVault::finalize( result = false; } + // We don't need to round shares, they are integral MPT auto const vaultDeltaShares = deltaShares(afterVault.pseudoId); - if (!vaultDeltaShares || *vaultDeltaShares == zero) + if (!vaultDeltaShares || vaultDeltaShares->delta == zero) { JLOG(j.fatal()) << // "Invariant failed: clawback must change vault shares"; return false; // That's all we can do } - if (*vaultDeltaShares * -1 != *accountDeltaShares) + if (vaultDeltaShares->delta * -1 != maybeAccountDeltaShares->delta) { JLOG(j.fatal()) << // "Invariant failed: clawback must change holder and " @@ -924,4 +1049,25 @@ ValidVault::finalize( return true; } +[[nodiscard]] ValidVault::DeltaInfo +ValidVault::DeltaInfo::makeDelta(Number const& before, Number const& after, Asset const& asset) +{ + return { + .delta = after - before, + .scale = std::max(xrpl::scale(after, asset), xrpl::scale(before, asset))}; +} + +[[nodiscard]] std::int32_t +ValidVault::computeCoarsestScale(std::vector const& numbers) +{ + if (numbers.empty()) + return 0; + + auto const max = std::ranges::max_element( + numbers, [](auto const& a, auto const& b) -> bool { return a.scale < b.scale; }); + XRPL_ASSERT_PARTS( + max->scale, "xrpl::ValidVault::computeCoarsestScale", "scale set for destinationDelta"); + return max->scale.value_or(STAmount::cMaxOffset); +} + } // namespace xrpl diff --git a/src/libxrpl/tx/paths/AMMLiquidity.cpp b/src/libxrpl/tx/paths/AMMLiquidity.cpp index 29fcc3d4da..0a4cfadb69 100644 --- a/src/libxrpl/tx/paths/AMMLiquidity.cpp +++ b/src/libxrpl/tx/paths/AMMLiquidity.cpp @@ -1,5 +1,30 @@ #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/paths/AMMOffer.cpp b/src/libxrpl/tx/paths/AMMOffer.cpp index c147e9197f..0a41411492 100644 --- a/src/libxrpl/tx/paths/AMMOffer.cpp +++ b/src/libxrpl/tx/paths/AMMOffer.cpp @@ -1,7 +1,25 @@ -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { template diff --git a/src/libxrpl/tx/paths/BookStep.cpp b/src/libxrpl/tx/paths/BookStep.cpp index ab2efcf39a..f05460df61 100644 --- a/src/libxrpl/tx/paths/BookStep.cpp +++ b/src/libxrpl/tx/paths/BookStep.cpp @@ -1,26 +1,53 @@ #include +#include #include +#include +#include #include +#include #include +#include #include #include #include +#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include +#include #include +#include #include #include -#include #include +#include +#include #include +#include #include +#include +#include +#include +#include namespace xrpl { @@ -1427,18 +1454,22 @@ equalHelper(Step const& step, xrpl::Book const& book) bool bookStepEqual(Step const& step, xrpl::Book const& book) { - if (isXRP(book.in) && isXRP(book.out)) - { - // LCOV_EXCL_START - UNREACHABLE("xrpl::test::bookStepEqual : no XRP to XRP book step"); - return false; // no such thing as xrp/xrp book step - // LCOV_EXCL_STOP - } return std::visit( [&](TIn const&, TOut const&) { using TIn_ = typename TIn::amount_type; using TOut_ = typename TOut::amount_type; - return equalHelper>(step, book); + + if constexpr (ValidTaker) + { + return equalHelper>(step, book); + } + else + { + // LCOV_EXCL_START + UNREACHABLE("xrpl::bookStepEqual : invalid book step"); + return false; + // LCOV_EXCL_STOP + } }, book.in.getAmountType(), book.out.getAmountType()); diff --git a/src/libxrpl/tx/paths/BookTip.cpp b/src/libxrpl/tx/paths/BookTip.cpp index f9b700b7af..7c6dd85ee3 100644 --- a/src/libxrpl/tx/paths/BookTip.cpp +++ b/src/libxrpl/tx/paths/BookTip.cpp @@ -1,6 +1,14 @@ +#include + +#include +#include #include #include -#include +#include +#include +#include + +#include namespace xrpl { diff --git a/src/libxrpl/tx/paths/DirectStep.cpp b/src/libxrpl/tx/paths/DirectStep.cpp index 6bf76e9002..c4b2c51934 100644 --- a/src/libxrpl/tx/paths/DirectStep.cpp +++ b/src/libxrpl/tx/paths/DirectStep.cpp @@ -1,17 +1,36 @@ #include +#include +#include +#include +#include #include #include #include -#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include #include -#include +#include +#include +#include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/paths/Flow.cpp b/src/libxrpl/tx/paths/Flow.cpp index 6226e550b7..413c160c7f 100644 --- a/src/libxrpl/tx/paths/Flow.cpp +++ b/src/libxrpl/tx/paths/Flow.cpp @@ -1,13 +1,23 @@ -#include -#include -#include -#include #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include + namespace xrpl { template diff --git a/src/libxrpl/tx/paths/MPTEndpointStep.cpp b/src/libxrpl/tx/paths/MPTEndpointStep.cpp index 8944df953d..7b063a39d3 100644 --- a/src/libxrpl/tx/paths/MPTEndpointStep.cpp +++ b/src/libxrpl/tx/paths/MPTEndpointStep.cpp @@ -1,16 +1,34 @@ #include +#include +#include +#include +#include +#include +#include #include -#include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include #include -#include #include #include +#include +#include +#include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/paths/OfferStream.cpp b/src/libxrpl/tx/paths/OfferStream.cpp index 929140cd61..c7e81ba203 100644 --- a/src/libxrpl/tx/paths/OfferStream.cpp +++ b/src/libxrpl/tx/paths/OfferStream.cpp @@ -1,12 +1,34 @@ +#include + #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include #include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -61,7 +83,7 @@ TOfferStreamBase::erase(ApplyView& view) } auto v(p->getFieldV256(sfIndexes)); - auto it(std::find(v.begin(), v.end(), tip_.index())); + auto it(std::ranges::find(v, tip_.index())); if (it == v.end()) { diff --git a/src/libxrpl/tx/paths/PaySteps.cpp b/src/libxrpl/tx/paths/PaySteps.cpp index 5a68228708..d3fe366616 100644 --- a/src/libxrpl/tx/paths/PaySteps.cpp +++ b/src/libxrpl/tx/paths/PaySteps.cpp @@ -1,11 +1,33 @@ +#include +#include +#include #include +#include +#include #include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include +#include + #include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -270,7 +292,7 @@ toStrand( // even if all that is changing is the Issue.account. Note // that MPTIssue can't change the account. STPathElement const& lastAsset = - *std::find_if(normPath.rbegin(), normPath.rend(), hasAsset); + *std::ranges::find_if(std::ranges::reverse_view(normPath), hasAsset); if (lastAsset.getPathAsset() != deliver || (offerCrossing != OfferCrossing::no && lastAsset.getIssuerID() != deliver.getIssuer())) @@ -570,7 +592,7 @@ toStrands( result.reserve(1 + paths.size()); // Insert the strand into result if it is not already part of the vector auto insert = [&](Strand s) { - bool const hasStrand = std::find(result.begin(), result.end(), s) != result.end(); + bool const hasStrand = std::ranges::find(result, s) != result.end(); if (!hasStrand) result.emplace_back(std::move(s)); diff --git a/src/libxrpl/tx/paths/RippleCalc.cpp b/src/libxrpl/tx/paths/RippleCalc.cpp index e1f1cb272c..773a9bac3d 100644 --- a/src/libxrpl/tx/paths/RippleCalc.cpp +++ b/src/libxrpl/tx/paths/RippleCalc.cpp @@ -1,11 +1,23 @@ -#include -#include -#include #include -#include -namespace xrpl { -namespace path { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace xrpl::path { RippleCalc::Output RippleCalc::rippleCalculate( @@ -100,5 +112,4 @@ RippleCalc::rippleCalculate( return flowOut; } -} // namespace path -} // namespace xrpl +} // namespace xrpl::path diff --git a/src/libxrpl/tx/paths/XRPEndpointStep.cpp b/src/libxrpl/tx/paths/XRPEndpointStep.cpp index 4b9b934daf..6356eb8ded 100644 --- a/src/libxrpl/tx/paths/XRPEndpointStep.cpp +++ b/src/libxrpl/tx/paths/XRPEndpointStep.cpp @@ -1,18 +1,34 @@ #include +#include +#include +#include +#include #include #include -#include -#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include #include #include +#include #include #include #include +#include +#include +#include #include +#include +#include namespace xrpl { diff --git a/src/libxrpl/tx/transactors/account/AccountDelete.cpp b/src/libxrpl/tx/transactors/account/AccountDelete.cpp index c7f71a6cf4..596a8a1560 100644 --- a/src/libxrpl/tx/transactors/account/AccountDelete.cpp +++ b/src/libxrpl/tx/transactors/account/AccountDelete.cpp @@ -1,22 +1,40 @@ +#include + #include +#include +#include +#include #include +#include +#include +#include #include #include #include #include #include +#include #include #include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include #include #include #include +#include +#include +#include + namespace xrpl { bool @@ -398,4 +416,23 @@ AccountDelete::doApply() return tesSUCCESS; } +void +AccountDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AccountDelete::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/account/AccountSet.cpp b/src/libxrpl/tx/transactors/account/AccountSet.cpp index 093019766c..a892bd045c 100644 --- a/src/libxrpl/tx/transactors/account/AccountSet.cpp +++ b/src/libxrpl/tx/transactors/account/AccountSet.cpp @@ -1,13 +1,33 @@ +#include + +#include #include -#include +#include +#include +#include +#include #include #include #include #include +#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -637,4 +657,18 @@ AccountSet::doApply() return tesSUCCESS; } +void +AccountSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AccountSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/account/SetRegularKey.cpp b/src/libxrpl/tx/transactors/account/SetRegularKey.cpp index 471da26c88..bc59ed4fc1 100644 --- a/src/libxrpl/tx/transactors/account/SetRegularKey.cpp +++ b/src/libxrpl/tx/transactors/account/SetRegularKey.cpp @@ -1,8 +1,20 @@ -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { XRPAmount @@ -68,4 +80,23 @@ SetRegularKey::doApply() return tesSUCCESS; } +void +SetRegularKey::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +SetRegularKey::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/account/SignerListSet.cpp b/src/libxrpl/tx/transactors/account/SignerListSet.cpp index 90ab8daf6f..7e236af21b 100644 --- a/src/libxrpl/tx/transactors/account/SignerListSet.cpp +++ b/src/libxrpl/tx/transactors/account/SignerListSet.cpp @@ -1,16 +1,36 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include +#include #include +#include +#include +#include +#include namespace xrpl { @@ -237,11 +257,14 @@ SignerListSet::validateQuorumAndSignerEntries( } // Make sure there are no duplicate signers. + // SignerEntry only defines operator< and operator==, not the full + // std::totally_ordered set required by std::ranges::less, so the + // ranges version does not compile. NOLINTNEXTLINE(modernize-use-ranges) XRPL_ASSERT( std::is_sorted(signers.begin(), signers.end()), "xrpl::SignerListSet::validateQuorumAndSignerEntries : sorted " "signers"); - if (std::adjacent_find(signers.begin(), signers.end()) != signers.end()) + if (std::ranges::adjacent_find(signers) != signers.end()) { JLOG(j.trace()) << "Duplicate signers in signer list"; return temBAD_SIGNER; @@ -385,4 +408,23 @@ SignerListSet::writeSignersToSLE(SLE::pointer const& ledgerEntry, std::uint32_t ledgerEntry->setFieldArray(sfSignerEntries, toLedger); } +void +SignerListSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +SignerListSet::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp b/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp index bec17b010a..166e42560f 100644 --- a/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp +++ b/src/libxrpl/tx/transactors/bridge/XChainBridge.cpp @@ -1,31 +1,52 @@ +#include + +#include #include #include -#include #include +#include #include +#include #include #include +#include +#include #include #include #include #include #include +#include +#include +#include +#include #include #include #include +#include #include +#include #include +#include +#include #include #include #include #include +#include #include #include #include -#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include namespace xrpl { @@ -308,7 +329,7 @@ onNewAttestations( j); if (!r.has_value()) - return {std::nullopt, changed}; + return {.rewardAccounts = std::nullopt, .changed = changed}; return {std::move(r.value()), changed}; }; @@ -1758,11 +1779,11 @@ XChainClaim::doApply() return Unexpected(claimR.error()); return ScopeResult{ - claimR.value(), - (*sleClaimID)[sfAccount], - sendingAmount, - srcChain, - (*sleClaimID)[sfSignatureReward], + .rewardAccounts = claimR.value(), + .rewardPoolSrc = (*sleClaimID)[sfAccount], + .sendingAmount = sendingAmount, + .srcChain = srcChain, + .signatureReward = (*sleClaimID)[sfSignatureReward], }; }(); @@ -1899,7 +1920,9 @@ XChainCommit::doApply() // Support dipping into reserves to pay the fee TransferHelperSubmittingAccountInfo submittingAccountInfo{ - account_, preFeeBalance_, (*sleAccount)[sfBalance]}; + .account = account_, + .preFeeBalance_ = preFeeBalance_, + .postFeeBalance = (*sleAccount)[sfBalance]}; auto const thTer = transferHelper( psb, @@ -2174,7 +2197,7 @@ XChainCreateAccountCommit::doApply() // Support dipping into reserves to pay the fee TransferHelperSubmittingAccountInfo submittingAccountInfo{ - account_, preFeeBalance_, (*sle)[sfBalance]}; + .account = account_, .preFeeBalance_ = preFeeBalance_, .postFeeBalance = (*sle)[sfBalance]}; STAmount const toTransfer = amount + reward; auto const thTer = transferHelper( psb, @@ -2199,4 +2222,151 @@ XChainCreateAccountCommit::doApply() return tesSUCCESS; } +void +XChainCreateBridge::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainCreateBridge::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + +void +BridgeModify::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +BridgeModify::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + +void +XChainClaim::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainClaim::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + +void +XChainCommit::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainCommit::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + +void +XChainCreateClaimID::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainCreateClaimID::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + +void +XChainAddClaimAttestation::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainAddClaimAttestation::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + +void +XChainAddAccountCreateAttestation::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainAddAccountCreateAttestation::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + +void +XChainCreateAccountCommit::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +XChainCreateAccountCommit::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/check/CheckCancel.cpp b/src/libxrpl/tx/transactors/check/CheckCancel.cpp index be3b434fb6..c30c116e58 100644 --- a/src/libxrpl/tx/transactors/check/CheckCancel.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCancel.cpp @@ -1,11 +1,20 @@ +#include + +#include #include #include #include -#include +#include #include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include namespace xrpl { @@ -92,4 +101,18 @@ CheckCancel::doApply() return tesSUCCESS; } +void +CheckCancel::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +CheckCancel::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/check/CheckCash.cpp b/src/libxrpl/tx/transactors/check/CheckCash.cpp index 14fbc80f15..4498a3cd8e 100644 --- a/src/libxrpl/tx/transactors/check/CheckCash.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCash.cpp @@ -1,16 +1,38 @@ +#include + +#include #include +#include +#include #include #include #include #include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include -#include -#include +#include #include +#include +#include +#include namespace xrpl { @@ -564,4 +586,18 @@ CheckCash::doApply() return tesSUCCESS; } +void +CheckCash::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +CheckCash::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/check/CheckCreate.cpp b/src/libxrpl/tx/transactors/check/CheckCreate.cpp index 70dddd7338..6a13819615 100644 --- a/src/libxrpl/tx/transactors/check/CheckCreate.cpp +++ b/src/libxrpl/tx/transactors/check/CheckCreate.cpp @@ -1,13 +1,32 @@ +#include + +#include +#include +#include #include #include #include #include -#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -228,4 +247,18 @@ CheckCreate::doApply() return tesSUCCESS; } +void +CheckCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +CheckCreate::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp b/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp index 9c0018a647..4f1bd80f26 100644 --- a/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp +++ b/src/libxrpl/tx/transactors/credentials/CredentialAccept.cpp @@ -1,13 +1,26 @@ +#include + #include #include #include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include -#include +#include +#include namespace xrpl { @@ -110,4 +123,22 @@ CredentialAccept::doApply() return tesSUCCESS; } +void +CredentialAccept::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +CredentialAccept::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/credentials/CredentialCreate.cpp b/src/libxrpl/tx/transactors/credentials/CredentialCreate.cpp index f8f0f01b63..402bddcfdd 100644 --- a/src/libxrpl/tx/transactors/credentials/CredentialCreate.cpp +++ b/src/libxrpl/tx/transactors/credentials/CredentialCreate.cpp @@ -1,14 +1,29 @@ +#include + #include +#include +#include #include #include -#include +#include // IWYU pragma: keep #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include +#include +#include namespace xrpl { @@ -163,4 +178,22 @@ CredentialCreate::doApply() return tesSUCCESS; } +void +CredentialCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +CredentialCreate::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/credentials/CredentialDelete.cpp b/src/libxrpl/tx/transactors/credentials/CredentialDelete.cpp index 5f78ba6757..acff3c6aa0 100644 --- a/src/libxrpl/tx/transactors/credentials/CredentialDelete.cpp +++ b/src/libxrpl/tx/transactors/credentials/CredentialDelete.cpp @@ -1,13 +1,22 @@ -#include -#include -#include -#include -#include -#include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -87,4 +96,22 @@ CredentialDelete::doApply() return deleteSLE(view(), sleCred, j_); } +void +CredentialDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +CredentialDelete::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/delegate/DelegateSet.cpp b/src/libxrpl/tx/transactors/delegate/DelegateSet.cpp index 9fb17c4d1f..5a73bb3561 100644 --- a/src/libxrpl/tx/transactors/delegate/DelegateSet.cpp +++ b/src/libxrpl/tx/transactors/delegate/DelegateSet.cpp @@ -1,11 +1,23 @@ +#include + #include -#include +#include #include #include -#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -135,4 +147,18 @@ DelegateSet::deleteDelegate( return tesSUCCESS; } +void +DelegateSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +DelegateSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp b/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp index f5e92bf06d..4d3d97e443 100644 --- a/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp +++ b/src/libxrpl/tx/transactors/delegate/DelegateUtils.cpp @@ -1,5 +1,14 @@ #include +#include +#include #include +#include +#include +#include +#include + +#include +#include namespace xrpl { NotTEC diff --git a/src/libxrpl/tx/transactors/dex/AMMBid.cpp b/src/libxrpl/tx/transactors/dex/AMMBid.cpp index 3fed28e3c2..e878585d4c 100644 --- a/src/libxrpl/tx/transactors/dex/AMMBid.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMBid.cpp @@ -1,12 +1,37 @@ -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { bool @@ -355,4 +380,18 @@ AMMBid::doApply() return result.first; } +void +AMMBid::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMBid::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp index e437da3e70..20ec184670 100644 --- a/src/libxrpl/tx/transactors/dex/AMMClawback.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMClawback.cpp @@ -1,13 +1,34 @@ -#include -#include -#include -#include -#include -#include -#include #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include namespace xrpl { @@ -105,7 +126,9 @@ AMMClawback::preclaim(PreclaimContext const& ctx) // permission if (((issuerFlagsIn & lsfAllowTrustLineClawback) == 0u) || ((issuerFlagsIn & lsfNoFreeze) != 0u)) - return tesSUCCESS; + { + return tecNO_PERMISSION; + } } auto const checkClawAsset = [&](Asset const asset) -> bool { @@ -364,4 +387,18 @@ AMMClawback::equalWithdrawMatchingOneAmount( ctx_.journal); } +void +AMMClawback::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMClawback::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp index 6f16b818e1..47363531d4 100644 --- a/src/libxrpl/tx/transactors/dex/AMMCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMCreate.cpp @@ -1,15 +1,41 @@ +#include + +#include +#include +#include #include +#include #include #include #include #include #include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include namespace xrpl { @@ -366,4 +392,18 @@ AMMCreate::doApply() return result.first; } +void +AMMCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMCreate::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/AMMDelete.cpp b/src/libxrpl/tx/transactors/dex/AMMDelete.cpp index f601a360d4..6d2c7b07c3 100644 --- a/src/libxrpl/tx/transactors/dex/AMMDelete.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMDelete.cpp @@ -1,9 +1,21 @@ +#include + +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include + +#include namespace xrpl { @@ -54,4 +66,18 @@ AMMDelete::doApply() return ter; } +void +AMMDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMDelete::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp b/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp index 0371388d29..344e3535da 100644 --- a/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMDeposit.cpp @@ -1,12 +1,36 @@ +#include + +#include +#include +#include +#include #include -#include #include #include #include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -983,4 +1007,18 @@ AMMDeposit::equalDepositInEmptyState( tfee); } +void +AMMDeposit::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMDeposit::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/AMMVote.cpp b/src/libxrpl/tx/transactors/dex/AMMVote.cpp index 42b339a65e..1287c8c428 100644 --- a/src/libxrpl/tx/transactors/dex/AMMVote.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMVote.cpp @@ -1,9 +1,30 @@ +#include + +#include +#include +#include +#include #include #include #include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include namespace xrpl { @@ -224,4 +245,18 @@ AMMVote::doApply() return result.first; } +void +AMMVote::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMVote::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp b/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp index 29043582b1..6ab78f9cb9 100644 --- a/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp +++ b/src/libxrpl/tx/transactors/dex/AMMWithdraw.cpp @@ -1,12 +1,43 @@ +#include + +#include #include +#include +#include +#include #include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -1114,4 +1145,18 @@ AMMWithdraw::isWithdrawAll(STTx const& tx) return WithdrawAll::Yes; return WithdrawAll::No; } +void +AMMWithdraw::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +AMMWithdraw::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/OfferCancel.cpp b/src/libxrpl/tx/transactors/dex/OfferCancel.cpp index f8164401b7..72682149a3 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCancel.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCancel.cpp @@ -1,8 +1,17 @@ -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -60,4 +69,18 @@ OfferCancel::doApply() return tesSUCCESS; } +void +OfferCancel::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +OfferCancel::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp index 2568806f51..2d21cebbe3 100644 --- a/src/libxrpl/tx/transactors/dex/OfferCreate.cpp +++ b/src/libxrpl/tx/transactors/dex/OfferCreate.cpp @@ -1,18 +1,55 @@ +#include + +#include #include +#include +#include +#include +#include #include #include +#include #include #include #include #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { TxConsequences @@ -557,7 +594,7 @@ OfferCreate::applyGuts(Sandbox& sb, Sandbox& sbCancel) auto const cancelSequence = ctx_.tx[~sfOfferSequence]; - // Note that we we use the value from the sequence or ticket as the + // Note that we use the value from the sequence or ticket as the // offer sequence. For more explanation see comments in SeqProxy.h. auto const offerSequence = ctx_.tx.getSeqValue(); @@ -919,4 +956,18 @@ OfferCreate::doApply() return result.first; } +void +OfferCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +OfferCreate::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/did/DIDDelete.cpp b/src/libxrpl/tx/transactors/did/DIDDelete.cpp index 0d5b63635f..a323822b9c 100644 --- a/src/libxrpl/tx/transactors/did/DIDDelete.cpp +++ b/src/libxrpl/tx/transactors/did/DIDDelete.cpp @@ -1,9 +1,23 @@ -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -56,4 +70,17 @@ DIDDelete::doApply() return deleteSLE(ctx_, keylet::did(account_), account_); } +void +DIDDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +DIDDelete::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/did/DIDSet.cpp b/src/libxrpl/tx/transactors/did/DIDSet.cpp index cd5c9bbc96..3aa9966570 100644 --- a/src/libxrpl/tx/transactors/did/DIDSet.cpp +++ b/src/libxrpl/tx/transactors/did/DIDSet.cpp @@ -1,11 +1,25 @@ -#include +#include + +#include #include +#include #include #include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -135,4 +149,18 @@ DIDSet::doApply() return addSLE(ctx_, sleDID, account_); } +void +DIDSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +DIDSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp index faa862b424..edc07fa0f7 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCancel.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include @@ -5,10 +7,24 @@ #include #include #include +#include +#include +#include #include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -203,4 +219,22 @@ EscrowCancel::doApply() return tesSUCCESS; } +void +EscrowCancel::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +EscrowCancel::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp index 789ca8ab1a..9d16d41914 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowCreate.cpp @@ -1,19 +1,40 @@ +#include + #include #include +#include #include +#include #include #include #include #include #include #include +#include +#include +#include #include #include +#include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -420,7 +441,7 @@ EscrowCreate::doApply() return tecDST_TAG_NEEDED; } - // Create escrow in ledger. Note that we we use the value from the + // Create escrow in ledger. Note that we use the value from the // sequence or ticket. For more explanation see comments in SeqProxy.h. Keylet const escrowKeylet = keylet::escrow(account_, ctx_.tx.getSeqValue()); auto const slep = std::make_shared(escrowKeylet); @@ -504,4 +525,22 @@ EscrowCreate::doApply() return tesSUCCESS; } +void +EscrowCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +EscrowCreate::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp index 8714bab5ff..c8697fbaa8 100644 --- a/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp +++ b/src/libxrpl/tx/transactors/escrow/EscrowFinish.cpp @@ -1,20 +1,38 @@ +#include + #include +#include #include #include #include #include #include +#include #include +#include #include #include #include #include +#include +#include +#include #include #include +#include +#include #include -#include +#include +#include +#include +#include +#include #include -#include +#include + +#include +#include +#include namespace xrpl { @@ -381,4 +399,22 @@ EscrowFinish::doApply() return tesSUCCESS; } +void +EscrowFinish::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +EscrowFinish::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp b/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp index bad55e9222..dea8dbbd34 100644 --- a/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp +++ b/src/libxrpl/tx/transactors/lending/LendingHelpers.cpp @@ -1,7 +1,30 @@ #include -// DO NOT REMOVE forces header file include to sort first + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include + namespace xrpl { bool diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp index c7493a71cd..16f95dd357 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverClawback.cpp @@ -1,9 +1,36 @@ #include -// + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include + namespace xrpl { bool @@ -328,6 +355,25 @@ LoanBrokerCoverClawback::doApply() return accountSend(view(), brokerPseudoID, account, clawAmount, j_, WaiveTransferFee::Yes); } +void +LoanBrokerCoverClawback::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanBrokerCoverClawback::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverDeposit.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverDeposit.cpp index 4630e6a360..36b5cab618 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverDeposit.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverDeposit.cpp @@ -1,9 +1,21 @@ #include -// + +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include + namespace xrpl { bool @@ -121,6 +133,25 @@ LoanBrokerCoverDeposit::doApply() return tesSUCCESS; } +void +LoanBrokerCoverDeposit::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanBrokerCoverDeposit::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp index d03edad0a2..c8479e941d 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerCoverWithdraw.cpp @@ -1,11 +1,25 @@ #include -// + +#include +#include +#include +#include #include -#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include -#include + +#include namespace xrpl { @@ -123,7 +137,7 @@ LoanBrokerCoverWithdraw::preclaim(PreclaimContext const& ctx) return roundToAsset( vaultAsset, tenthBipsOfValue(currentDebtTotal, TenthBips32(sleBroker->at(sfCoverRateMinimum))), - currentDebtTotal.exponent()); + scale(currentDebtTotal, vaultAsset)); }(); if (coverAvail < amount) return tecINSUFFICIENT_FUNDS; @@ -172,6 +186,25 @@ LoanBrokerCoverWithdraw::doApply() return doWithdraw(view(), tx, account_, dstAcct, brokerPseudoID, preFeeBalance_, amount, j_); } +void +LoanBrokerCoverWithdraw::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanBrokerCoverWithdraw::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerDelete.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerDelete.cpp index a755db7942..6f774eaeae 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerDelete.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerDelete.cpp @@ -1,10 +1,24 @@ #include -// + +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include + namespace xrpl { bool @@ -176,6 +190,25 @@ LoanBrokerDelete::doApply() return tesSUCCESS; } +void +LoanBrokerDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanBrokerDelete::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanBrokerSet.cpp b/src/libxrpl/tx/transactors/lending/LoanBrokerSet.cpp index f8813ddbef..3322df9fe3 100644 --- a/src/libxrpl/tx/transactors/lending/LoanBrokerSet.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanBrokerSet.cpp @@ -1,10 +1,28 @@ #include -// + +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include + namespace xrpl { bool @@ -260,6 +278,25 @@ LoanBrokerSet::doApply() return tesSUCCESS; } +void +LoanBrokerSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanBrokerSet::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanDelete.cpp b/src/libxrpl/tx/transactors/lending/LoanDelete.cpp index 39b28f5110..28948a4139 100644 --- a/src/libxrpl/tx/transactors/lending/LoanDelete.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanDelete.cpp @@ -1,9 +1,23 @@ #include -// + +#include +#include // IWYU pragma: keep +#include +#include #include +#include +#include +#include // IWYU pragma: keep +#include #include +#include +#include +#include +#include #include +#include + namespace xrpl { bool @@ -127,6 +141,20 @@ LoanDelete::doApply() return tesSUCCESS; } +void +LoanDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanDelete::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanManage.cpp b/src/libxrpl/tx/transactors/lending/LoanManage.cpp index 8c3e625963..1b87421e71 100644 --- a/src/libxrpl/tx/transactors/lending/LoanManage.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanManage.cpp @@ -1,10 +1,33 @@ #include -// + +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include +#include +#include +#include + namespace xrpl { bool @@ -411,6 +434,20 @@ LoanManage::doApply() return result; } +void +LoanManage::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanManage::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanPay.cpp b/src/libxrpl/tx/transactors/lending/LoanPay.cpp index d400fb3630..8360303fd8 100644 --- a/src/libxrpl/tx/transactors/lending/LoanPay.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanPay.cpp @@ -1,14 +1,35 @@ #include -// + +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include #include +#include #include +#include +#include namespace xrpl { @@ -624,6 +645,20 @@ LoanPay::doApply() return tesSUCCESS; } +void +LoanPay::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanPay::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/lending/LoanSet.cpp b/src/libxrpl/tx/transactors/lending/LoanSet.cpp index 9cc4042365..1027fdea9f 100644 --- a/src/libxrpl/tx/transactors/lending/LoanSet.cpp +++ b/src/libxrpl/tx/transactors/lending/LoanSet.cpp @@ -1,11 +1,40 @@ #include -// + +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { bool @@ -617,6 +646,20 @@ LoanSet::doApply() return tesSUCCESS; } +void +LoanSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LoanSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + //------------------------------------------------------------------------------ } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp index 95955bd0bd..296020ff95 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenAcceptOffer.cpp @@ -1,10 +1,29 @@ +#include + +#include +#include +#include +#include #include #include #include #include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include namespace xrpl { @@ -550,4 +569,23 @@ NFTokenAcceptOffer::doApply() return tecINTERNAL; // LCOV_EXCL_LINE } +void +NFTokenAcceptOffer::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +NFTokenAcceptOffer::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp b/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp index 1653da3ea4..a0d10ca07d 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenBurn.cpp @@ -1,9 +1,20 @@ -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + namespace xrpl { NotTEC @@ -83,4 +94,18 @@ NFTokenBurn::doApply() return tesSUCCESS; } +void +NFTokenBurn::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +NFTokenBurn::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp index 699714e0ac..9d25a7335f 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenCancelOffer.cpp @@ -1,10 +1,22 @@ -#include -#include -#include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -18,8 +30,8 @@ NFTokenCancelOffer::preflight(PreflightContext const& ctx) // In order to prevent unnecessarily overlarge transactions, we // disallow duplicates in the list of offers to cancel. STVector256 ids = ctx.tx.getFieldV256(sfNFTokenOffers); - std::sort(ids.begin(), ids.end()); - if (std::adjacent_find(ids.begin(), ids.end()) != ids.end()) + std::ranges::sort(ids); + if (std::ranges::adjacent_find(ids) != ids.end()) return temMALFORMED; return tesSUCCESS; @@ -32,7 +44,7 @@ NFTokenCancelOffer::preclaim(PreclaimContext const& ctx) auto const& ids = ctx.tx[sfNFTokenOffers]; - auto ret = std::find_if(ids.begin(), ids.end(), [&ctx, &account](uint256 const& id) { + auto ret = std::ranges::find_if(ids, [&ctx, &account](uint256 const& id) { auto const offer = ctx.view.read(keylet::child(id)); // If id is not in the ledger we assume the offer was consumed @@ -85,4 +97,23 @@ NFTokenCancelOffer::doApply() return tesSUCCESS; } +void +NFTokenCancelOffer::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +NFTokenCancelOffer::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp b/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp index 19bf34c560..9ca5220a8c 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenCreateOffer.cpp @@ -1,8 +1,20 @@ +#include + +#include +#include #include #include -#include +#include +#include +#include +#include #include -#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -79,4 +91,23 @@ NFTokenCreateOffer::doApply() ctx_.tx.getFlags()); } +void +NFTokenCreateOffer::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +NFTokenCreateOffer::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenMint.cpp b/src/libxrpl/tx/transactors/nft/NFTokenMint.cpp index 7bebbd0070..b8150c3261 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenMint.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenMint.cpp @@ -1,14 +1,33 @@ -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include +#include +#include +#include // IWYU pragma: keep +#include +#include namespace xrpl { @@ -323,4 +342,18 @@ NFTokenMint::doApply() return tesSUCCESS; } +void +NFTokenMint::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +NFTokenMint::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp b/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp index 79c019de96..392d928f02 100644 --- a/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp +++ b/src/libxrpl/tx/transactors/nft/NFTokenModify.cpp @@ -1,8 +1,21 @@ -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -55,4 +68,23 @@ NFTokenModify::doApply() return nft::changeTokenURI(view(), owner, nftokenID, ctx_.tx[~sfURI]); } +void +NFTokenModify::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +NFTokenModify::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/oracle/OracleDelete.cpp b/src/libxrpl/tx/transactors/oracle/OracleDelete.cpp index bde403f821..c6896b78d4 100644 --- a/src/libxrpl/tx/transactors/oracle/OracleDelete.cpp +++ b/src/libxrpl/tx/transactors/oracle/OracleDelete.cpp @@ -1,10 +1,20 @@ -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -78,4 +88,23 @@ OracleDelete::doApply() return tecINTERNAL; // LCOV_EXCL_LINE } +void +OracleDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +OracleDelete::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/oracle/OracleSet.cpp b/src/libxrpl/tx/transactors/oracle/OracleSet.cpp index 772756ad6d..4304427646 100644 --- a/src/libxrpl/tx/transactors/oracle/OracleSet.cpp +++ b/src/libxrpl/tx/transactors/oracle/OracleSet.cpp @@ -1,12 +1,31 @@ -#include -#include +#include + +#include +#include #include #include #include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -308,4 +327,18 @@ OracleSet::doApply() return tesSUCCESS; } +void +OracleSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +OracleSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp b/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp index 0f4681a3ad..f8dca6bb58 100644 --- a/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp +++ b/src/libxrpl/tx/transactors/payment/DepositPreauth.cpp @@ -1,14 +1,31 @@ +#include + #include -#include +#include +#include +#include #include #include #include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include namespace xrpl { @@ -279,4 +296,23 @@ DepositPreauth::removeFromLedger(ApplyView& view, uint256 const& preauthIndex, b return tesSUCCESS; } +void +DepositPreauth::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +DepositPreauth::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/payment/Payment.cpp b/src/libxrpl/tx/transactors/payment/Payment.cpp index 3a64b5c739..644d5210c0 100644 --- a/src/libxrpl/tx/transactors/payment/Payment.cpp +++ b/src/libxrpl/tx/transactors/payment/Payment.cpp @@ -1,17 +1,47 @@ -#include +#include + +#include +#include +#include +#include +#include +#include #include #include #include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include #include -#include + +#include +#include +#include +#include +#include namespace xrpl { @@ -346,8 +376,7 @@ Payment::preclaim(PreclaimContext const& ctx) { STPathSet const& paths = ctx.tx.getFieldPathSet(sfPaths); - if (paths.size() > MaxPathSize || - std::any_of(paths.begin(), paths.end(), [](STPath const& path) { + if (paths.size() > MaxPathSize || std::ranges::any_of(paths, [](STPath const& path) { return path.size() > MaxPathLength; })) { @@ -648,4 +677,18 @@ Payment::doApply() return tesSUCCESS; } +void +Payment::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +Payment::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp index e53e32c844..256d1e87ca 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelClaim.cpp @@ -1,13 +1,30 @@ +#include + +#include +#include #include -#include #include #include +#include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -184,4 +201,22 @@ PaymentChannelClaim::doApply() return tesSUCCESS; } +void +PaymentChannelClaim::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +PaymentChannelClaim::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp index c12169fc0e..4ced2d10bc 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelCreate.cpp @@ -1,13 +1,27 @@ +#include + #include +#include +#include #include #include #include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include #include -#include +#include +#include + +#include namespace xrpl { @@ -123,7 +137,7 @@ PaymentChannelCreate::doApply() // Create PayChan in ledger. // - // Note that we we use the value from the sequence or ticket as the + // Note that we use the value from the sequence or ticket as the // payChan sequence. For more explanation see comments in SeqProxy.h. Keylet const payChanKeylet = keylet::payChan(account, dst, ctx_.tx.getSeqValue()); auto const slep = std::make_shared(payChanKeylet); @@ -172,4 +186,22 @@ PaymentChannelCreate::doApply() return tesSUCCESS; } +void +PaymentChannelCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +PaymentChannelCreate::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp index f8e2399bb1..4e588eda1e 100644 --- a/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp +++ b/src/libxrpl/tx/transactors/payment_channel/PaymentChannelFund.cpp @@ -1,9 +1,25 @@ -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { TxConsequences @@ -90,4 +106,22 @@ PaymentChannelFund::doApply() return tesSUCCESS; } +void +PaymentChannelFund::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +PaymentChannelFund::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.cpp b/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.cpp index 565631b3fd..87794b8dc2 100644 --- a/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.cpp +++ b/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainDelete.cpp @@ -1,8 +1,19 @@ -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -62,4 +73,23 @@ PermissionedDomainDelete::doApply() return tesSUCCESS; } +void +PermissionedDomainDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +PermissionedDomainDelete::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp b/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp index 30f24241aa..e7853b529b 100644 --- a/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp +++ b/src/libxrpl/tx/transactors/permissioned_domain/PermissionedDomainSet.cpp @@ -1,11 +1,24 @@ #include -// -#include + +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -118,4 +131,23 @@ PermissionedDomainSet::doApply() return tesSUCCESS; } +void +PermissionedDomainSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +PermissionedDomainSet::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/system/Batch.cpp b/src/libxrpl/tx/transactors/system/Batch.cpp index cd3ac9a16c..1218f0d59f 100644 --- a/src/libxrpl/tx/transactors/system/Batch.cpp +++ b/src/libxrpl/tx/transactors/system/Batch.cpp @@ -1,13 +1,32 @@ +#include + #include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include -#include -#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -262,10 +281,8 @@ Batch::preflight(PreflightContext const& ctx) return temINVALID; } - if (std::any_of( - disabledTxTypes.begin(), disabledTxTypes.end(), [txType](auto const& disabled) { - return txType == disabled; - })) + if (std::ranges::any_of( + disabledTxTypes, [txType](auto const& disabled) { return txType == disabled; })) { return temINVALID_INNER_BATCH; } @@ -500,4 +517,18 @@ Batch::doApply() return tesSUCCESS; } +void +Batch::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +Batch::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/system/Change.cpp b/src/libxrpl/tx/transactors/system/Change.cpp index a1d9183ca4..60dbb06a17 100644 --- a/src/libxrpl/tx/transactors/system/Change.cpp +++ b/src/libxrpl/tx/transactors/system/Change.cpp @@ -1,13 +1,31 @@ -#include -#include -#include -#include -#include -#include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -156,7 +174,7 @@ Change::applyAmendment() STVector256 amendments = amendmentObject->getFieldV256(sfAmendments); - if (std::find(amendments.begin(), amendments.end(), amendment) != amendments.end()) + if (std::ranges::find(amendments, amendment) != amendments.end()) return tefALREADY; auto flags = ctx_.tx.getFlags(); @@ -392,4 +410,18 @@ Change::applyUNLModify() return tesSUCCESS; } +void +Change::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +Change::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp b/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp index 321e472aa5..27cbad2e88 100644 --- a/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp +++ b/src/libxrpl/tx/transactors/system/LedgerStateFix.cpp @@ -1,10 +1,19 @@ -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -63,4 +72,23 @@ LedgerStateFix::doApply() return tecINTERNAL; // LCOV_EXCL_LINE } +void +LedgerStateFix::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +LedgerStateFix::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/system/TicketCreate.cpp b/src/libxrpl/tx/transactors/system/TicketCreate.cpp index c4e281c357..fd6b947c5e 100644 --- a/src/libxrpl/tx/transactors/system/TicketCreate.cpp +++ b/src/libxrpl/tx/transactors/system/TicketCreate.cpp @@ -1,10 +1,23 @@ -#include +#include + +#include +#include +#include +#include #include #include -#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -121,4 +134,23 @@ TicketCreate::doApply() return tesSUCCESS; } +void +TicketCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +TicketCreate::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/Clawback.cpp b/src/libxrpl/tx/transactors/token/Clawback.cpp index 18c631b5f2..c9e6d32f6c 100644 --- a/src/libxrpl/tx/transactors/token/Clawback.cpp +++ b/src/libxrpl/tx/transactors/token/Clawback.cpp @@ -1,12 +1,31 @@ -#include +#include + +#include +#include #include #include +#include +#include #include #include +#include +#include #include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include namespace xrpl { @@ -251,4 +270,18 @@ Clawback::doApply() ctx_.tx[sfAmount].asset().value()); } +void +Clawback::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +Clawback::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/ConfidentialMPTClawback.cpp b/src/libxrpl/tx/transactors/token/ConfidentialMPTClawback.cpp index 80347924c4..22fa2e6ff7 100644 --- a/src/libxrpl/tx/transactors/token/ConfidentialMPTClawback.cpp +++ b/src/libxrpl/tx/transactors/token/ConfidentialMPTClawback.cpp @@ -1,11 +1,19 @@ -#include +#include + +#include #include #include #include #include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include namespace xrpl { @@ -165,4 +173,24 @@ ConfidentialMPTClawback::doApply() return tesSUCCESS; } + +void +ConfidentialMPTClawback::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +ConfidentialMPTClawback::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/ConfidentialMPTConvert.cpp b/src/libxrpl/tx/transactors/token/ConfidentialMPTConvert.cpp index 2227354f4c..9c051fbd00 100644 --- a/src/libxrpl/tx/transactors/token/ConfidentialMPTConvert.cpp +++ b/src/libxrpl/tx/transactors/token/ConfidentialMPTConvert.cpp @@ -1,12 +1,23 @@ -#include +#include + +#include #include #include #include #include #include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -156,15 +167,17 @@ ConfidentialMPTConvert::preclaim(PreclaimContext const& ctx) { auditor.emplace( ConfidentialRecipient{ - (*sleIssuance)[sfAuditorEncryptionKey], ctx.tx[sfAuditorEncryptedAmount]}); + .publicKey = (*sleIssuance)[sfAuditorEncryptionKey], + .encryptedAmount = ctx.tx[sfAuditorEncryptedAmount]}); } auto const blindingFactor = ctx.tx[sfBlindingFactor]; if (auto const ter = verifyRevealedAmount( amount, Slice(blindingFactor.data(), blindingFactor.size()), - {holderPubKey, ctx.tx[sfHolderEncryptedAmount]}, - {(*sleIssuance)[sfIssuerEncryptionKey], ctx.tx[sfIssuerEncryptedAmount]}, + {.publicKey = holderPubKey, .encryptedAmount = ctx.tx[sfHolderEncryptedAmount]}, + {.publicKey = (*sleIssuance)[sfIssuerEncryptionKey], + .encryptedAmount = ctx.tx[sfIssuerEncryptedAmount]}, auditor); !isTesSuccess(ter)) { @@ -279,4 +292,23 @@ ConfidentialMPTConvert::doApply() return tesSUCCESS; } +void +ConfidentialMPTConvert::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +ConfidentialMPTConvert::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/ConfidentialMPTConvertBack.cpp b/src/libxrpl/tx/transactors/token/ConfidentialMPTConvertBack.cpp index 1071995264..f51ec3fb64 100644 --- a/src/libxrpl/tx/transactors/token/ConfidentialMPTConvertBack.cpp +++ b/src/libxrpl/tx/transactors/token/ConfidentialMPTConvertBack.cpp @@ -1,14 +1,24 @@ -#include +#include + +#include +#include #include #include #include #include #include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include -#include +#include +#include +#include namespace xrpl { @@ -81,7 +91,8 @@ verifyProofs( { auditor.emplace( ConfidentialRecipient{ - (*issuance)[sfAuditorEncryptionKey], tx[sfAuditorEncryptedAmount]}); + .publicKey = (*issuance)[sfAuditorEncryptionKey], + .encryptedAmount = tx[sfAuditorEncryptedAmount]}); } // Run all verifications before returning any error to prevent timing attacks @@ -91,8 +102,9 @@ verifyProofs( if (auto const ter = verifyRevealedAmount( amount, Slice(blindingFactor.data(), blindingFactor.size()), - {holderPubKey, tx[sfHolderEncryptedAmount]}, - {(*issuance)[sfIssuerEncryptionKey], tx[sfIssuerEncryptedAmount]}, + {.publicKey = holderPubKey, .encryptedAmount = tx[sfHolderEncryptedAmount]}, + {.publicKey = (*issuance)[sfIssuerEncryptionKey], + .encryptedAmount = tx[sfIssuerEncryptedAmount]}, auditor); !isTesSuccess(ter)) { @@ -242,4 +254,23 @@ ConfidentialMPTConvertBack::doApply() return tesSUCCESS; } +void +ConfidentialMPTConvertBack::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +ConfidentialMPTConvertBack::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/ConfidentialMPTMergeInbox.cpp b/src/libxrpl/tx/transactors/token/ConfidentialMPTMergeInbox.cpp index 1cebca7010..87889ff020 100644 --- a/src/libxrpl/tx/transactors/token/ConfidentialMPTMergeInbox.cpp +++ b/src/libxrpl/tx/transactors/token/ConfidentialMPTMergeInbox.cpp @@ -1,12 +1,21 @@ -#include +#include + +#include #include #include #include #include #include +#include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include namespace xrpl { @@ -105,4 +114,23 @@ ConfidentialMPTMergeInbox::doApply() return tesSUCCESS; } +void +ConfidentialMPTMergeInbox::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +ConfidentialMPTMergeInbox::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/ConfidentialMPTSend.cpp b/src/libxrpl/tx/transactors/token/ConfidentialMPTSend.cpp index 13c7a3eea7..c68fc14219 100644 --- a/src/libxrpl/tx/transactors/token/ConfidentialMPTSend.cpp +++ b/src/libxrpl/tx/transactors/token/ConfidentialMPTSend.cpp @@ -1,13 +1,22 @@ -#include +#include + #include #include #include #include #include #include +#include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include +#include namespace xrpl { @@ -85,9 +94,12 @@ verifySendProofs( std::optional auditor; if (hasAuditor) + { auditor.emplace( ConfidentialRecipient{ - (*sleIssuance)[sfAuditorEncryptionKey], ctx.tx[sfAuditorEncryptedAmount]}); + .publicKey = (*sleIssuance)[sfAuditorEncryptionKey], + .encryptedAmount = ctx.tx[sfAuditorEncryptedAmount]}); + } auto const contextHash = getSendContextHash( ctx.tx[sfAccount], @@ -98,9 +110,12 @@ verifySendProofs( return verifySendProof( ctx.tx[sfZKProof], - {(*sleSenderMPToken)[sfHolderEncryptionKey], ctx.tx[sfSenderEncryptedAmount]}, - {(*sleDestinationMPToken)[sfHolderEncryptionKey], ctx.tx[sfDestinationEncryptedAmount]}, - {(*sleIssuance)[sfIssuerEncryptionKey], ctx.tx[sfIssuerEncryptedAmount]}, + {.publicKey = (*sleSenderMPToken)[sfHolderEncryptionKey], + .encryptedAmount = ctx.tx[sfSenderEncryptedAmount]}, + {.publicKey = (*sleDestinationMPToken)[sfHolderEncryptionKey], + .encryptedAmount = ctx.tx[sfDestinationEncryptedAmount]}, + {.publicKey = (*sleIssuance)[sfIssuerEncryptionKey], + .encryptedAmount = ctx.tx[sfIssuerEncryptedAmount]}, auditor, (*sleSenderMPToken)[sfConfidentialBalanceSpending], ctx.tx[sfAmountCommitment], @@ -311,4 +326,23 @@ ConfidentialMPTSend::doApply() return tesSUCCESS; } +void +ConfidentialMPTSend::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +ConfidentialMPTSend::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp index 195df60de4..fe521d2886 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenAuthorize.cpp @@ -1,11 +1,21 @@ -#include +#include + +#include #include -#include #include #include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include + +#include +#include namespace xrpl { @@ -165,4 +175,23 @@ MPTokenAuthorize::doApply() tx[~sfHolder]); } +void +MPTokenAuthorize::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +MPTokenAuthorize::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp index c90d1f8f1c..435e763a3e 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceCreate.cpp @@ -1,9 +1,27 @@ -#include +#include + +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include + +#include +#include namespace xrpl { @@ -24,9 +42,8 @@ MPTokenIssuanceCreate::checkExtraFeatures(PreflightContext const& ctx) // can not set tmfMPTCannotMutateCanConfidentialAmount without featureConfidentialTransfer auto const mutableFlags = ctx.tx[~sfMutableFlags]; - if (mutableFlags && (*mutableFlags & tmfMPTCannotMutateCanConfidentialAmount) && - !ctx.rules.enabled(featureConfidentialTransfer)) - return false; + if (mutableFlags && (*mutableFlags & tmfMPTCannotMutateCanConfidentialAmount) != 0) + return ctx.rules.enabled(featureConfidentialTransfer); return true; } @@ -164,4 +181,23 @@ MPTokenIssuanceCreate::doApply() return result ? tesSUCCESS : result.error(); } +void +MPTokenIssuanceCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +MPTokenIssuanceCreate::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceDestroy.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceDestroy.cpp index 8ec1f37886..80b185641a 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceDestroy.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceDestroy.cpp @@ -1,9 +1,16 @@ -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + namespace xrpl { NotTEC @@ -51,4 +58,23 @@ MPTokenIssuanceDestroy::doApply() return tesSUCCESS; } +void +MPTokenIssuanceDestroy::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +MPTokenIssuanceDestroy::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp index d3988133ac..504db0b6fc 100644 --- a/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp +++ b/src/libxrpl/tx/transactors/token/MPTokenIssuanceSet.cpp @@ -1,9 +1,31 @@ +#include + +#include +#include +#include +#include +#include #include #include #include +#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include + +#include +#include +#include +#include +#include namespace xrpl { @@ -34,17 +56,35 @@ struct MPTMutabilityFlags }; static constexpr std::array mptMutabilityFlags = { - {{tmfMPTSetCanLock, tmfMPTClearCanLock, lsmfMPTCanMutateCanLock, lsfMPTCanLock}, - {tmfMPTSetRequireAuth, tmfMPTClearRequireAuth, lsmfMPTCanMutateRequireAuth, lsfMPTRequireAuth}, - {tmfMPTSetCanEscrow, tmfMPTClearCanEscrow, lsmfMPTCanMutateCanEscrow, lsfMPTCanEscrow}, - {tmfMPTSetCanTrade, tmfMPTClearCanTrade, lsmfMPTCanMutateCanTrade, lsfMPTCanTrade}, - {tmfMPTSetCanTransfer, tmfMPTClearCanTransfer, lsmfMPTCanMutateCanTransfer, lsfMPTCanTransfer}, - {tmfMPTSetCanClawback, tmfMPTClearCanClawback, lsmfMPTCanMutateCanClawback, lsfMPTCanClawback}, - {tmfMPTSetCanConfidentialAmount, - tmfMPTClearCanConfidentialAmount, - lsmfMPTCannotMutateCanConfidentialAmount, - lsfMPTCanConfidentialAmount, - true}}}; + {{.setFlag = tmfMPTSetCanLock, + .clearFlag = tmfMPTClearCanLock, + .mutabilityFlag = lsmfMPTCanMutateCanLock, + .targetFlag = lsfMPTCanLock}, + {.setFlag = tmfMPTSetRequireAuth, + .clearFlag = tmfMPTClearRequireAuth, + .mutabilityFlag = lsmfMPTCanMutateRequireAuth, + .targetFlag = lsfMPTRequireAuth}, + {.setFlag = tmfMPTSetCanEscrow, + .clearFlag = tmfMPTClearCanEscrow, + .mutabilityFlag = lsmfMPTCanMutateCanEscrow, + .targetFlag = lsfMPTCanEscrow}, + {.setFlag = tmfMPTSetCanTrade, + .clearFlag = tmfMPTClearCanTrade, + .mutabilityFlag = lsmfMPTCanMutateCanTrade, + .targetFlag = lsfMPTCanTrade}, + {.setFlag = tmfMPTSetCanTransfer, + .clearFlag = tmfMPTClearCanTransfer, + .mutabilityFlag = lsmfMPTCanMutateCanTransfer, + .targetFlag = lsfMPTCanTransfer}, + {.setFlag = tmfMPTSetCanClawback, + .clearFlag = tmfMPTClearCanClawback, + .mutabilityFlag = lsmfMPTCanMutateCanClawback, + .targetFlag = lsfMPTCanClawback}, + {.setFlag = tmfMPTSetCanConfidentialAmount, + .clearFlag = tmfMPTClearCanConfidentialAmount, + .mutabilityFlag = lsmfMPTCannotMutateCanConfidentialAmount, + .targetFlag = lsfMPTCanConfidentialAmount, + .isCannotMutate = true}}}; NotTEC MPTokenIssuanceSet::preflight(PreflightContext const& ctx) @@ -58,7 +98,8 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) auto const txFlags = ctx.tx.getFlags(); auto const mutatePrivacy = mutableFlags && - ((*mutableFlags & (tmfMPTSetCanConfidentialAmount | tmfMPTClearCanConfidentialAmount))); + ((*mutableFlags & (tmfMPTSetCanConfidentialAmount | tmfMPTClearCanConfidentialAmount)) != + 0u); auto const hasDomain = ctx.tx.isFieldPresent(sfDomainID); auto const hasHolder = ctx.tx.isFieldPresent(sfHolder); @@ -116,12 +157,9 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) return temINVALID_FLAG; // Can not set and clear the same flag - if (std::any_of( - mptMutabilityFlags.begin(), - mptMutabilityFlags.end(), - [mutableFlags](auto const& f) { - return (*mutableFlags & f.setFlag) && (*mutableFlags & f.clearFlag); - })) + if (std::ranges::any_of(mptMutabilityFlags, [mutableFlags](auto const& f) { + return (*mutableFlags & f.setFlag) && (*mutableFlags & f.clearFlag); + })) return temINVALID_FLAG; // Trying to set a non-zero TransferFee and clear MPTCanTransfer @@ -139,7 +177,7 @@ MPTokenIssuanceSet::preflight(PreflightContext const& ctx) // Cannot set keys while clearing confidential amount if ((hasIssuerElGamalKey || hasAuditorElGamalKey) && mutableFlags && - (*mutableFlags & tmfMPTClearCanConfidentialAmount)) + (*mutableFlags & tmfMPTClearCanConfidentialAmount) != 0u) return temINVALID_FLAG; if (hasIssuerElGamalKey && !isValidCompressedECPoint(ctx.tx[sfIssuerEncryptionKey])) @@ -247,18 +285,21 @@ MPTokenIssuanceSet::preclaim(PreclaimContext const& ctx) auto const mutableFlags = ctx.tx[~sfMutableFlags]; if (mutableFlags) { - if (std::any_of( - mptMutabilityFlags.begin(), - mptMutabilityFlags.end(), - [mutableFlags, &isMutableFlag](auto const& f) { - bool const canMutate = f.isCannotMutate ? isMutableFlag(f.mutabilityFlag) - : !isMutableFlag(f.mutabilityFlag); - return canMutate && (*mutableFlags & (f.setFlag | f.clearFlag)); - })) + if (std::ranges::any_of(mptMutabilityFlags, [mutableFlags, &isMutableFlag](auto const& f) { + bool const canMutate = f.isCannotMutate ? isMutableFlag(f.mutabilityFlag) + : !isMutableFlag(f.mutabilityFlag); + return canMutate && (*mutableFlags & (f.setFlag | f.clearFlag)); + })) return tecNO_PERMISSION; - if ((*mutableFlags & tmfMPTSetCanConfidentialAmount) || - (*mutableFlags & tmfMPTClearCanConfidentialAmount)) + // Clearing lsfMPTRequireAuth is invalid when the issuance already has + // a DomainID set, because a DomainID requires RequireAuth to be active. + if ((*mutableFlags & tmfMPTClearRequireAuth) != 0u && + sleMptIssuance->isFieldPresent(sfDomainID)) + return tecNO_PERMISSION; + + if ((*mutableFlags & tmfMPTSetCanConfidentialAmount) != 0u || + (*mutableFlags & tmfMPTClearCanConfidentialAmount) != 0u) { std::uint64_t const confidentialOA = (*sleMptIssuance)[~sfConfidentialOutstandingAmount].value_or(0); @@ -302,7 +343,7 @@ MPTokenIssuanceSet::preclaim(PreclaimContext const& ctx) // Check if the transaction is enabling confidential amounts bool const enablesConfidentialAmount = - mutableFlags && (*mutableFlags & tmfMPTSetCanConfidentialAmount); + mutableFlags && (*mutableFlags & tmfMPTSetCanConfidentialAmount) != 0u; // Encryption keys can only be set if confidential amounts are already // enabled on the issuance OR if the transaction is enabling it @@ -458,4 +499,23 @@ MPTokenIssuanceSet::doApply() return tesSUCCESS; } +void +MPTokenIssuanceSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +MPTokenIssuanceSet::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/token/TrustSet.cpp b/src/libxrpl/tx/transactors/token/TrustSet.cpp index 13c444af8b..1610b2e5b9 100644 --- a/src/libxrpl/tx/transactors/token/TrustSet.cpp +++ b/src/libxrpl/tx/transactors/token/TrustSet.cpp @@ -1,14 +1,34 @@ -#include +#include + +#include +#include +#include +#include +#include #include #include #include #include +#include #include #include +#include +#include #include #include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include + +#include +#include +#include namespace { @@ -655,4 +675,18 @@ TrustSet::doApply() return terResult; } +void +TrustSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +TrustSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/vault/VaultClawback.cpp b/src/libxrpl/tx/transactors/vault/VaultClawback.cpp index 095b44e072..da22b82578 100644 --- a/src/libxrpl/tx/transactors/vault/VaultClawback.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultClawback.cpp @@ -1,18 +1,35 @@ +#include + +#include +#include +#include +#include +#include #include -#include +#include #include #include #include +#include +#include +#include +#include +#include #include #include #include -#include +#include +#include // IWYU pragma: keep #include +#include #include -#include -#include +#include +#include +#include +#include #include +#include #include namespace xrpl { @@ -453,4 +470,23 @@ VaultClawback::doApply() return tesSUCCESS; } +void +VaultClawback::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +VaultClawback::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp index 02f8ecb57b..cc28abfe65 100644 --- a/src/libxrpl/tx/transactors/vault/VaultCreate.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultCreate.cpp @@ -1,3 +1,8 @@ +#include + +#include +#include +#include #include #include #include @@ -6,16 +11,23 @@ #include #include #include +#include #include #include #include -#include +#include +#include // IWYU pragma: keep #include +#include #include #include -#include +#include +#include #include -#include + +#include +#include +#include namespace xrpl { @@ -181,8 +193,10 @@ VaultCreate::doApply() .sequence = 1, .flags = mptFlags, .assetScale = scale, + .transferFee = std::nullopt, .metadata = tx[~sfMPTokenMetadata], .domainId = tx[~sfDomainID], + .mutableFlags = std::nullopt, }); if (!maybeShare) return maybeShare.error(); // LCOV_EXCL_LINE @@ -235,4 +249,18 @@ VaultCreate::doApply() return tesSUCCESS; } +void +VaultCreate::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +VaultCreate::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/vault/VaultDelete.cpp b/src/libxrpl/tx/transactors/vault/VaultDelete.cpp index 5a60c0032c..e4542d524f 100644 --- a/src/libxrpl/tx/transactors/vault/VaultDelete.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultDelete.cpp @@ -1,14 +1,23 @@ -#include +#include + +#include +#include +#include #include #include #include -#include +#include +#include #include -#include -#include +#include +#include +#include // IWYU pragma: keep +#include #include -#include -#include +#include +#include + +#include namespace xrpl { @@ -203,4 +212,18 @@ VaultDelete::doApply() return tesSUCCESS; } +void +VaultDelete::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +VaultDelete::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp b/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp index 04b249d211..fbb8908ddb 100644 --- a/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultDeposit.cpp @@ -1,19 +1,27 @@ -#include +#include + +#include +#include +#include #include #include #include #include -#include #include +#include #include #include #include -#include +#include +#include // IWYU pragma: keep #include +#include #include -#include -#include -#include +#include +#include + +#include +#include namespace xrpl { @@ -270,4 +278,23 @@ VaultDeposit::doApply() return tesSUCCESS; } +void +VaultDeposit::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +VaultDeposit::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/vault/VaultSet.cpp b/src/libxrpl/tx/transactors/vault/VaultSet.cpp index b54389bcde..a5b0b20699 100644 --- a/src/libxrpl/tx/transactors/vault/VaultSet.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultSet.cpp @@ -1,13 +1,21 @@ -#include -#include +#include + +#include +#include #include #include +#include +#include #include -#include +#include +#include // IWYU pragma: keep #include +#include #include -#include -#include +#include +#include + +#include namespace xrpl { @@ -171,4 +179,18 @@ VaultSet::doApply() return tesSUCCESS; } +void +VaultSet::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +VaultSet::finalizeInvariants(STTx const&, TER, XRPAmount, ReadView const&, beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp b/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp index b3d2864380..3e608733b6 100644 --- a/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp +++ b/src/libxrpl/tx/transactors/vault/VaultWithdraw.cpp @@ -1,15 +1,28 @@ +#include + +#include +#include +#include +#include #include -#include #include #include #include #include +#include +#include +#include #include -#include +#include +#include // IWYU pragma: keep #include +#include #include -#include -#include +#include +#include + +#include +#include namespace xrpl { @@ -282,4 +295,23 @@ VaultWithdraw::doApply() view(), ctx_.tx, account_, dstAcct, vaultAccount, preFeeBalance_, assetsWithdrawn, j_); } +void +VaultWithdraw::visitInvariantEntry( + bool, + std::shared_ptr const&, + std::shared_ptr const&) +{ +} + +bool +VaultWithdraw::finalizeInvariants( + STTx const&, + TER, + XRPAmount, + ReadView const&, + beast::Journal const&) +{ + return true; +} + } // namespace xrpl diff --git a/src/test/app/AMMCalc_test.cpp b/src/test/app/AMMCalc_test.cpp index 029a3121fe..6c32c6118d 100644 --- a/src/test/app/AMMCalc_test.cpp +++ b/src/test/app/AMMCalc_test.cpp @@ -1,13 +1,35 @@ -#include +#include +#include +#include + +#include +#include #include +#include +#include #include +#include +#include +#include -#include -#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { /** AMM Calculator. Uses AMM formulas to simulate the payment engine * expected results. Assuming the formulas are correct some unit-tests can @@ -435,5 +457,4 @@ class AMMCalc_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_MANUAL(AMMCalc, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AMMClawbackMPT_test.cpp b/src/test/app/AMMClawbackMPT_test.cpp index c1da7aab9c..393c0b062c 100644 --- a/src/test/app/AMMClawbackMPT_test.cpp +++ b/src/test/app/AMMClawbackMPT_test.cpp @@ -1,12 +1,32 @@ -#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include + +namespace xrpl::test { class AMMClawbackMPT_test : public beast::unit_test::suite { void @@ -1817,5 +1837,4 @@ class AMMClawbackMPT_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(AMMClawbackMPT, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AMMClawback_test.cpp b/src/test/app/AMMClawback_test.cpp index 5803d1a0d3..bf08b57bf3 100644 --- a/src/test/app/AMMClawback_test.cpp +++ b/src/test/app/AMMClawback_test.cpp @@ -1,23 +1,41 @@ -#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include + +namespace xrpl::test { class AMMClawback_test : public beast::unit_test::suite { void - testInvalidRequest() + testInvalidRequest(FeatureBitset features) { testcase("test invalid request"); using namespace jtx; // Test if holder does not exist. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(100000), gw, alice); @@ -42,7 +60,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if asset pair provided does not exist. This should // return terNO_AMM error. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(100000), gw, alice); @@ -74,7 +92,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the issuer field and holder field is the same. This should // return temMALFORMED error. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -102,7 +120,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the Asset field matches the Account field. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -130,7 +148,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the Amount field matches the Asset field. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -159,7 +177,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the Amount is invalid, which is less than zero. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -192,7 +210,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if the issuer did not set asfAllowTrustLineClawback, AMMClawback // transaction is prohibited. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -216,7 +234,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test invalid flag. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -244,7 +262,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test if tfClawTwoAssets is set when the two assets in the AMM pool // are not issued by the same issuer. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(10000), gw, alice); @@ -275,7 +293,7 @@ class AMMClawback_test : public beast::unit_test::suite // Test clawing back XRP is being prohibited. { - Env env(*this); + Env env(*this, features); Account const gw{"gateway"}; Account const alice{"alice"}; env.fund(XRP(1000000), gw, alice); @@ -2491,10 +2509,14 @@ class AMMClawback_test : public beast::unit_test::suite FeatureBitset const all = jtx::testable_amendments() - featureSingleAssetVault - featureLendingProtocol; - testInvalidRequest(); + testInvalidRequest(all); + testInvalidRequest(all - featureMPTokensV2); testFeatureDisabled(all - featureAMMClawback); for (auto const& features : - {all - fixAMMv1_3 - fixAMMClawbackRounding, all - fixAMMClawbackRounding, all}) + {all - fixAMMv1_3 - fixAMMClawbackRounding - featureMPTokensV2, + all - fixAMMClawbackRounding - featureMPTokensV2, + all - featureMPTokensV2, + all}) { testAMMClawbackSpecificAmount(features); testAMMClawbackExceedBalance(features); @@ -2510,5 +2532,4 @@ class AMMClawback_test : public beast::unit_test::suite } }; BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AMMExtendedMPT_test.cpp b/src/test/app/AMMExtendedMPT_test.cpp index 9ef71dec8c..44ced2edc2 100644 --- a/src/test/app/AMMExtendedMPT_test.cpp +++ b/src/test/app/AMMExtendedMPT_test.cpp @@ -1,16 +1,59 @@ -#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include -namespace xrpl { -namespace test { +#include +#include +#include + +namespace xrpl::test { /** * Tests of AMM MPT that use offers. @@ -3615,5 +3658,4 @@ private: BEAST_DEFINE_TESTSUITE_PRIO(AMMExtendedMPT, app, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AMMExtended_test.cpp b/src/test/app/AMMExtended_test.cpp index 4b9f00bdd1..c94f0f405f 100644 --- a/src/test/app/AMMExtended_test.cpp +++ b/src/test/app/AMMExtended_test.cpp @@ -1,24 +1,66 @@ -#include #include #include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { /** * Tests of AMM that use offers too. @@ -3543,5 +3585,4 @@ private: BEAST_DEFINE_TESTSUITE_PRIO(AMMExtended, app, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AMMMPT_test.cpp b/src/test/app/AMMMPT_test.cpp index 69de309383..9884645836 100644 --- a/src/test/app/AMMMPT_test.cpp +++ b/src/test/app/AMMMPT_test.cpp @@ -1,14 +1,59 @@ -#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { /** * Basic tests of AMM functionality involving MPT assets, excluding those that @@ -7038,5 +7083,4 @@ private: BEAST_DEFINE_TESTSUITE_PRIO(AMMMPT, app, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AMM_test.cpp b/src/test/app/AMM_test.cpp index a434eb96c7..d2d7fbf2c7 100644 --- a/src/test/app/AMM_test.cpp +++ b/src/test/app/AMM_test.cpp @@ -1,27 +1,70 @@ -#include #include #include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { /** * Basic tests of AMM that do not use offers. @@ -5932,6 +5975,7 @@ private: } void + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) testFixOverflowOffer(FeatureBitset featuresInitial) { using namespace jtx; @@ -7091,5 +7135,4 @@ private: BEAST_DEFINE_TESTSUITE_PRIO(AMM, app, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AccountDelete_test.cpp b/src/test/app/AccountDelete_test.cpp index 4382fb27c7..c2ecb91a84 100644 --- a/src/test/app/AccountDelete_test.cpp +++ b/src/test/app/AccountDelete_test.cpp @@ -1,10 +1,50 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include + +namespace xrpl::test { class AccountDelete_test : public beast::unit_test::suite { @@ -1050,5 +1090,4 @@ public: BEAST_DEFINE_TESTSUITE_PRIO(AccountDelete, app, xrpl, 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/AccountSet_test.cpp b/src/test/app/AccountSet_test.cpp index 246f18c445..15012abe36 100644 --- a/src/test/app/AccountSet_test.cpp +++ b/src/test/app/AccountSet_test.cpp @@ -1,13 +1,54 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { class AccountSet_test : public beast::unit_test::suite @@ -84,7 +125,7 @@ public: continue; } - if (std::find(goodFlags.begin(), goodFlags.end(), flag) != goodFlags.end()) + if (std::ranges::find(goodFlags, flag) != goodFlags.end()) { // Good flag env.require(nflags(alice, flag)); @@ -320,13 +361,13 @@ public: doTests( testable_amendments(), - {{1.0, tesSUCCESS, 1.0}, - {1.1, tesSUCCESS, 1.1}, - {2.0, tesSUCCESS, 2.0}, - {2.1, temBAD_TRANSFER_RATE, 2.0}, - {0.0, tesSUCCESS, 1.0}, - {2.0, tesSUCCESS, 2.0}, - {0.9, temBAD_TRANSFER_RATE, 2.0}}); + {{.set = 1.0, .code = tesSUCCESS, .get = 1.0}, + {.set = 1.1, .code = tesSUCCESS, .get = 1.1}, + {.set = 2.0, .code = tesSUCCESS, .get = 2.0}, + {.set = 2.1, .code = temBAD_TRANSFER_RATE, .get = 2.0}, + {.set = 0.0, .code = tesSUCCESS, .get = 1.0}, + {.set = 2.0, .code = tesSUCCESS, .get = 2.0}, + {.set = 0.9, .code = temBAD_TRANSFER_RATE, .get = 2.0}}); } void diff --git a/src/test/app/AccountTxPaging_test.cpp b/src/test/app/AccountTxPaging_test.cpp index 1f2e909927..d5c299b782 100644 --- a/src/test/app/AccountTxPaging_test.cpp +++ b/src/test/app/AccountTxPaging_test.cpp @@ -1,7 +1,13 @@ -#include -#include -#include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include diff --git a/src/test/app/AmendmentTable_test.cpp b/src/test/app/AmendmentTable_test.cpp index 007715f9d1..7edaef3821 100644 --- a/src/test/app/AmendmentTable_test.cpp +++ b/src/test/app/AmendmentTable_test.cpp @@ -1,21 +1,44 @@ #include +#include #include +#include +#include #include #include -#include +#include +#include #include -#include +#include +#include +#include #include +#include #include +#include #include +#include +#include #include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { class AmendmentTable_test final : public beast::unit_test::suite @@ -419,7 +442,7 @@ public: BEAST_EXPECT(table->unVeto(unvetoedID)); std::vector const desired = table->getDesired(); - BEAST_EXPECT(std::find(desired.begin(), desired.end(), unvetoedID) != desired.end()); + BEAST_EXPECT(std::ranges::find(desired, unvetoedID) != desired.end()); } // Veto all supported amendments. Now desired should be empty. @@ -954,10 +977,9 @@ public: // We need a hash_set to pass to trustChanged. hash_set trustedValidators; trustedValidators.reserve(validators.size()); - std::for_each( - validators.begin(), validators.end(), [&trustedValidators](auto const& val) { - trustedValidators.insert(val.first); - }); + std::ranges::for_each(validators, [&trustedValidators](auto const& val) { + trustedValidators.insert(val.first); + }); // Tell the AmendmentTable that the UNL changed. table->trustChanged(trustedValidators); @@ -1151,9 +1173,8 @@ public: BEAST_EXPECT(table->needValidatedLedger(1)); std::set enabled; - std::for_each(unsupported_.begin(), unsupported_.end(), [&enabled](auto const& s) { - enabled.insert(amendmentId(s)); - }); + std::ranges::for_each( + unsupported_, [&enabled](auto const& s) { enabled.insert(amendmentId(s)); }); majorityAmendments_t majority; table->doValidatedLedger(1, enabled, majority); @@ -1161,12 +1182,9 @@ public: BEAST_EXPECT(!table->firstUnsupportedExpected()); NetClock::duration t{1000s}; - std::for_each( - unsupportedMajority_.begin(), - unsupportedMajority_.end(), - [&majority, &t](auto const& s) { - majority[amendmentId(s)] = NetClock::time_point{--t}; - }); + std::ranges::for_each(unsupportedMajority_, [&majority, &t](auto const& s) { + majority[amendmentId(s)] = NetClock::time_point{--t}; + }); table->doValidatedLedger(1, enabled, majority); BEAST_EXPECT(table->hasUnsupportedEnabled()); diff --git a/src/test/app/Batch_test.cpp b/src/test/app/Batch_test.cpp index 0bc2157b9d..6d8e1f2de3 100644 --- a/src/test/app/Batch_test.cpp +++ b/src/test/app/Batch_test.cpp @@ -1,22 +1,78 @@ -#include +#include +#include #include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include #include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class Batch_test : public beast::unit_test::suite { @@ -2601,10 +2657,9 @@ class Batch_test : public beast::unit_test::suite { testcase("loan"); - bool const lendingBatchEnabled = !std::any_of( - Batch::disabledTxTypes.begin(), Batch::disabledTxTypes.end(), [](auto const& disabled) { - return disabled == ttLOAN_BROKER_SET; - }); + bool const lendingBatchEnabled = !std::ranges::any_of( + Batch::disabledTxTypes, + [](auto const& disabled) { return disabled == ttLOAN_BROKER_SET; }); using namespace test::jtx; @@ -4367,5 +4422,4 @@ public: BEAST_DEFINE_TESTSUITE(Batch, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/CheckMPT_test.cpp b/src/test/app/CheckMPT_test.cpp index a1f35d0507..fb9d413e6e 100644 --- a/src/test/app/CheckMPT_test.cpp +++ b/src/test/app/CheckMPT_test.cpp @@ -1,9 +1,54 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { class CheckMPT_test : public beast::unit_test::suite @@ -1335,10 +1380,14 @@ class CheckMPT_test : public beast::unit_test::suite AccountOwns( beast::unit_test::suite& s, Env& e, - Account const& a, + Account a, bool isIssuer_, bool requireAuth_ = false) - : suite(s), env(e), acct(a), isIssuer(isIssuer_), requireAuth(requireAuth_) + : suite(s) + , env(e) + , acct(std::move(a)) + , isIssuer(isIssuer_) + , requireAuth(requireAuth_) { } diff --git a/src/test/app/Check_test.cpp b/src/test/app/Check_test.cpp index e062bd8e72..f2c7ab3a38 100644 --- a/src/test/app/Check_test.cpp +++ b/src/test/app/Check_test.cpp @@ -1,9 +1,52 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include + namespace xrpl { class Check_test : public beast::unit_test::suite @@ -1838,8 +1881,8 @@ class Check_test : public beast::unit_test::suite } }; - AccountOwns alice{*this, env, "alice", 0}; - AccountOwns bob{*this, env, "bob", 0}; + AccountOwns alice{.suite = *this, .env = env, .acct = "alice", .owners = 0}; + AccountOwns bob{.suite = *this, .env = env, .acct = "bob", .owners = 0}; // Fund with noripple so the accounts do not have any flags set. env.fund(XRP(5000), noripple(alice, bob)); @@ -1848,7 +1891,7 @@ class Check_test : public beast::unit_test::suite // Automatic trust line creation should fail if the check destination // can't afford the reserve for the trust line. { - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; // Fund gw1 with noripple (even though that's atypical for a // gateway) so it does not have any flags set. We'll set flags @@ -1968,7 +2011,7 @@ class Check_test : public beast::unit_test::suite { // No account root flags on any participant. // Automatic trust line from issuer to destination. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; BEAST_EXPECT((*env.le(gw1))[sfFlags] == 0); BEAST_EXPECT((*env.le(alice))[sfFlags] == 0); @@ -2021,7 +2064,7 @@ class Check_test : public beast::unit_test::suite // Transfer of assets using offers does not require rippling. // So bob's offer is successfully crossed which creates the // trust line. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; IOU const OF1 = gw1["OF1"]; env(offer(alice, XRP(97), OF1(97))); env.close(); @@ -2070,7 +2113,7 @@ class Check_test : public beast::unit_test::suite { // gw1 enables rippling. // Automatic trust line from issuer to non-issuer should still work. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; env(fset(gw1, asfDefaultRipple)); env.close(); @@ -2118,7 +2161,7 @@ class Check_test : public beast::unit_test::suite // to non-issuer should work. // Use offers to automatically create the trust line. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; IOU const OF2 = gw1["OF2"]; env(offer(alice, XRP(95), OF2(95))); env.close(); @@ -2159,7 +2202,7 @@ class Check_test : public beast::unit_test::suite // change any outcomes. // // Automatic trust line from issuer to non-issuer should still work. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; env(fset(gw1, asfDepositAuth)); env(fset(alice, asfDepositAuth)); env(fset(bob, asfDepositAuth)); @@ -2209,7 +2252,7 @@ class Check_test : public beast::unit_test::suite // automatic trust line creation. // Use offers to automatically create the trust line. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; IOU const OF3 = gw1["OF3"]; env(offer(alice, XRP(93), OF3(93))); env.close(); @@ -2246,7 +2289,7 @@ class Check_test : public beast::unit_test::suite { // Set lsfGlobalFreeze on gw1. That should stop any automatic // trust lines from being created. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; env(fset(gw1, asfGlobalFreeze)); env.close(); @@ -2288,7 +2331,7 @@ class Check_test : public beast::unit_test::suite // no automatic trust line creation between non-issuers. // Use offers to automatically create the trust line. - AccountOwns const gw1{*this, env, "gw1", 0}; + AccountOwns const gw1{.suite = *this, .env = env, .acct = "gw1", .owners = 0}; IOU const OF4 = gw1["OF4"]; env(offer(alice, XRP(91), OF4(91)), ter(tecFROZEN)); env.close(); @@ -2327,7 +2370,7 @@ class Check_test : public beast::unit_test::suite // flag on an account that already has trust lines. So we'll fund // a new gateway and use that. { - AccountOwns gw2{*this, env, "gw2", 0}; + AccountOwns gw2{.suite = *this, .env = env, .acct = "gw2", .owners = 0}; env.fund(XRP(5000), gw2); env.close(); @@ -2391,7 +2434,7 @@ class Check_test : public beast::unit_test::suite // no automatic trust line creation between non-issuers. // Use offers to automatically create the trust line. - AccountOwns const gw2{*this, env, "gw2", 0}; + AccountOwns const gw2{.suite = *this, .env = env, .acct = "gw2", .owners = 0}; IOU const OF5 = gw2["OF5"]; env(offer(alice, XRP(91), OF5(91)), ter(tecUNFUNDED_OFFER)); env.close(); diff --git a/src/test/app/Clawback_test.cpp b/src/test/app/Clawback_test.cpp index 902acf3222..8efcece295 100644 --- a/src/test/app/Clawback_test.cpp +++ b/src/test/app/Clawback_test.cpp @@ -1,7 +1,28 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include + +#include +#include +#include namespace xrpl { diff --git a/src/test/app/ConfidentialTransfer_test.cpp b/src/test/app/ConfidentialTransfer_test.cpp index 321464167f..43a2ea8f46 100644 --- a/src/test/app/ConfidentialTransfer_test.cpp +++ b/src/test/app/ConfidentialTransfer_test.cpp @@ -1,12 +1,44 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include -#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -70,7 +102,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite return trivialCommitment; } - std::string + static std::string getTrivialSendProofHex() { Buffer buf(ecSendProofLength); @@ -5383,12 +5415,14 @@ class ConfidentialTransfer_test : public beast::unit_test::suite auto holderPubKeySet = false; auto verifyToggle = [&](TER expectedResult, uint64_t amt) { if (!holderPubKeySet) + { mptAlice.convert({ .account = bob, .amt = amt, .holderPubKey = mptAlice.getPubKey(bob), .err = expectedResult, }); + } else { mptAlice.convert({ @@ -7354,7 +7388,7 @@ class ConfidentialTransfer_test : public beast::unit_test::suite // alice is issuer; bob has 'bobAmt' in confidential spending; carol has // 'carolAmt' in confidential spending; dave is initialised with pubkey but // zero spending/inbox. - void + static void setupBatchEnv( test::jtx::MPTTester& mpt, test::jtx::Account const& alice, diff --git a/src/test/app/Credentials_test.cpp b/src/test/app/Credentials_test.cpp index 317fd47b2b..3c9a658aca 100644 --- a/src/test/app/Credentials_test.cpp +++ b/src/test/app/Credentials_test.cpp @@ -1,18 +1,38 @@ -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include +#include #include #include +#include #include +#include +#include #include #include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { struct Credentials_test : public beast::unit_test::suite { @@ -1028,5 +1048,4 @@ struct Credentials_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Credentials, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/CrossingLimitsMPT_test.cpp b/src/test/app/CrossingLimitsMPT_test.cpp index 6e977a6e68..8efacaae21 100644 --- a/src/test/app/CrossingLimitsMPT_test.cpp +++ b/src/test/app/CrossingLimitsMPT_test.cpp @@ -1,10 +1,22 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class CrossingLimitsMPT_test : public beast::unit_test::suite { @@ -427,5 +439,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(CrossingLimitsMPT, tx, xrpl, 10); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/CrossingLimits_test.cpp b/src/test/app/CrossingLimits_test.cpp index a0e0a95437..0cbe57a464 100644 --- a/src/test/app/CrossingLimits_test.cpp +++ b/src/test/app/CrossingLimits_test.cpp @@ -1,10 +1,20 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class CrossingLimits_test : public beast::unit_test::suite { @@ -398,5 +408,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(CrossingLimits, app, xrpl, 10); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/DID_test.cpp b/src/test/app/DID_test.cpp index 20c367d64f..bd3ea59971 100644 --- a/src/test/app/DID_test.cpp +++ b/src/test/app/DID_test.cpp @@ -1,12 +1,21 @@ -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include + +#include #include #include +#include +#include -#include - -namespace xrpl { -namespace test { +namespace xrpl::test { struct DID_test : public beast::unit_test::suite { @@ -369,5 +378,4 @@ struct DID_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(DID, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/DNS_test.cpp b/src/test/app/DNS_test.cpp index 2273a77e09..3997da60db 100644 --- a/src/test/app/DNS_test.cpp +++ b/src/test/app/DNS_test.cpp @@ -1,14 +1,22 @@ -#include +#include + +#include #include #include +#include + +#include +#include #include +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class DNS_test : public beast::unit_test::suite { @@ -111,5 +119,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(DNS, app, xrpl, 20); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Delegate_test.cpp b/src/test/app/Delegate_test.cpp index 0710ddf2d1..d43f264cb7 100644 --- a/src/test/app/Delegate_test.cpp +++ b/src/test/app/Delegate_test.cpp @@ -1,13 +1,56 @@ -#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class Delegate_test : public beast::unit_test::suite { void @@ -1901,5 +1944,4 @@ class Delegate_test : public beast::unit_test::suite } }; BEAST_DEFINE_TESTSUITE(Delegate, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/DeliverMin_test.cpp b/src/test/app/DeliverMin_test.cpp index fe044353b7..4b3b6d34ad 100644 --- a/src/test/app/DeliverMin_test.cpp +++ b/src/test/app/DeliverMin_test.cpp @@ -1,10 +1,22 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class DeliverMin_test : public beast::unit_test::suite { @@ -128,5 +140,4 @@ public: BEAST_DEFINE_TESTSUITE(DeliverMin, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/DepositAuth_test.cpp b/src/test/app/DepositAuth_test.cpp index 9b5dca3ca2..c9773cba8b 100644 --- a/src/test/app/DepositAuth_test.cpp +++ b/src/test/app/DepositAuth_test.cpp @@ -1,11 +1,50 @@ -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { // Helper function that returns the reserve on an account based on // the passed in number of owners. @@ -1369,5 +1408,4 @@ struct DepositPreauth_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(DepositAuth, app, xrpl); BEAST_DEFINE_TESTSUITE(DepositPreauth, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Discrepancy_test.cpp b/src/test/app/Discrepancy_test.cpp index d8c14df64e..b01b11aa11 100644 --- a/src/test/app/Discrepancy_test.cpp +++ b/src/test/app/Discrepancy_test.cpp @@ -1,13 +1,25 @@ -#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include #include +#include #include +#include + namespace xrpl { class Discrepancy_test : public beast::unit_test::suite diff --git a/src/test/app/EscrowToken_test.cpp b/src/test/app/EscrowToken_test.cpp index 6e08c3eddf..d77043a624 100644 --- a/src/test/app/EscrowToken_test.cpp +++ b/src/test/app/EscrowToken_test.cpp @@ -1,19 +1,47 @@ -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include #include +#include #include +#include #include #include +#include +#include +#include +#include #include +#include #include +#include #include -#include #include +#include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { struct EscrowToken_test : public beast::unit_test::suite { @@ -985,13 +1013,17 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), aa) != aod.end()); } { xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 4); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), aa) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), aa) != iod.end()); } env(escrow::create(bob, bob, USD(1'000)), @@ -1006,13 +1038,17 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) != bod.end()); } { xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 5); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), bb) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), bb) != iod.end()); } env.close(5s); @@ -1024,15 +1060,21 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), aa) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) != bod.end()); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 4); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), bb) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), bb) != iod.end()); } env.close(5s); @@ -1044,11 +1086,15 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) == bod.end()); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 3); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), bb) == iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), bb) == iod.end()); } } { @@ -1087,21 +1133,33 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) != aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 3); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) != bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) != bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); - BEAST_EXPECT(std::find(cod.begin(), cod.end(), bc) != cod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(cod.begin(), cod.end(), bc) != cod.end()); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 5); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), ab) != iod.end()); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), bc) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), ab) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), bc) != iod.end()); } env.close(5s); @@ -1112,20 +1170,30 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) != bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 4); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), ab) == iod.end()); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), bc) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), ab) == iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), bc) != iod.end()); } env.close(5s); @@ -1136,20 +1204,30 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) == bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 3); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), ab) == iod.end()); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), bc) == iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), ab) == iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), bc) == iod.end()); } } @@ -1184,14 +1262,18 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ag) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ag) != aod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 3); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), ag) != iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), ag) != iod.end()); } env.close(5s); @@ -1201,14 +1283,18 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ag) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ag) == aod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 2); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), ag) == iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), ag) == iod.end()); } } } @@ -1231,21 +1317,53 @@ struct EscrowToken_test : public beast::unit_test::suite std::array const tests = {{ // src > dst && src > issuer && dst no trustline - {Account("alice2"), Account("bob0"), Account{"gw0"}, false, true}, + {.src = Account("alice2"), + .dst = Account("bob0"), + .gw = Account{"gw0"}, + .hasTrustline = false, + .negative = true}, // src < dst && src < issuer && dst no trustline - {Account("carol0"), Account("dan1"), Account{"gw1"}, false, false}, + {.src = Account("carol0"), + .dst = Account("dan1"), + .gw = Account{"gw1"}, + .hasTrustline = false, + .negative = false}, // dst > src && dst > issuer && dst no trustline - {Account("dan1"), Account("alice2"), Account{"gw0"}, false, true}, + {.src = Account("dan1"), + .dst = Account("alice2"), + .gw = Account{"gw0"}, + .hasTrustline = false, + .negative = true}, // dst < src && dst < issuer && dst no trustline - {Account("bob0"), Account("carol0"), Account{"gw1"}, false, false}, + {.src = Account("bob0"), + .dst = Account("carol0"), + .gw = Account{"gw1"}, + .hasTrustline = false, + .negative = false}, // src > dst && src > issuer && dst has trustline - {Account("alice2"), Account("bob0"), Account{"gw0"}, true, true}, + {.src = Account("alice2"), + .dst = Account("bob0"), + .gw = Account{"gw0"}, + .hasTrustline = true, + .negative = true}, // src < dst && src < issuer && dst has trustline - {Account("carol0"), Account("dan1"), Account{"gw1"}, true, false}, + {.src = Account("carol0"), + .dst = Account("dan1"), + .gw = Account{"gw1"}, + .hasTrustline = true, + .negative = false}, // dst > src && dst > issuer && dst has trustline - {Account("dan1"), Account("alice2"), Account{"gw0"}, true, true}, + {.src = Account("dan1"), + .dst = Account("alice2"), + .gw = Account{"gw0"}, + .hasTrustline = true, + .negative = true}, // dst < src && dst < issuer && dst has trustline - {Account("bob0"), Account("carol0"), Account{"gw1"}, true, false}, + {.src = Account("bob0"), + .dst = Account("carol0"), + .gw = Account{"gw1"}, + .hasTrustline = true, + .negative = false}, }}; for (auto const& t : tests) @@ -1337,13 +1455,13 @@ struct EscrowToken_test : public beast::unit_test::suite std::array const gwDstTests = {{ // src > dst && src > issuer && dst has trustline - {Account("alice2"), Account{"gw0"}, true}, + {.src = Account("alice2"), .dst = Account{"gw0"}, .hasTrustline = true}, // src < dst && src < issuer && dst has trustline - {Account("carol0"), Account{"gw1"}, true}, + {.src = Account("carol0"), .dst = Account{"gw1"}, .hasTrustline = true}, // dst > src && dst > issuer && dst has trustline - {Account("dan1"), Account{"gw0"}, true}, + {.src = Account("dan1"), .dst = Account{"gw0"}, .hasTrustline = true}, // dst < src && dst < issuer && dst has trustline - {Account("bob0"), Account{"gw1"}, true}, + {.src = Account("bob0"), .dst = Account{"gw1"}, .hasTrustline = true}, }}; // issuer is destination @@ -3102,13 +3220,17 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), aa) != aod.end()); } { xrpl::Dir const iod(*env.current(), keylet::ownerDir(gw.id())); BEAST_EXPECT(std::distance(iod.begin(), iod.end()) == 1); - BEAST_EXPECT(std::find(iod.begin(), iod.end(), aa) == iod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(iod.begin(), iod.end(), aa) == iod.end()); } env(escrow::create(bob, bob, MPT(1'000)), @@ -3123,7 +3245,9 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) != bod.end()); } env.close(5s); @@ -3135,11 +3259,15 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), aa) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) != bod.end()); } env.close(5s); @@ -3151,7 +3279,9 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) == bod.end()); } } @@ -3193,16 +3323,24 @@ struct EscrowToken_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 2); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) != aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 3); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) != bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) != bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); - BEAST_EXPECT(std::find(cod.begin(), cod.end(), bc) != cod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(cod.begin(), cod.end(), bc) != cod.end()); } env.close(5s); @@ -3213,12 +3351,18 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) != bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 2); @@ -3232,12 +3376,18 @@ struct EscrowToken_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bob.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) == bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); @@ -3786,5 +3936,4 @@ public: BEAST_DEFINE_TESTSUITE(EscrowToken, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Escrow_test.cpp b/src/test/app/Escrow_test.cpp index 05640cde01..77d51f2758 100644 --- a/src/test/app/Escrow_test.cpp +++ b/src/test/app/Escrow_test.cpp @@ -1,17 +1,38 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include #include +#include +#include #include #include #include #include +#include +#include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { struct Escrow_test : public beast::unit_test::suite { @@ -1102,7 +1123,9 @@ struct Escrow_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), aa) != aod.end()); } env(escrow::create(bruce, bruce, XRP(1000)), @@ -1117,7 +1140,9 @@ struct Escrow_test : public beast::unit_test::suite { xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) != bod.end()); } env.close(5s); @@ -1129,11 +1154,15 @@ struct Escrow_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 0); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), aa) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), aa) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) != bod.end()); } env.close(5s); @@ -1145,7 +1174,9 @@ struct Escrow_test : public beast::unit_test::suite xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 0); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bb) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bb) == bod.end()); } } { @@ -1176,16 +1207,24 @@ struct Escrow_test : public beast::unit_test::suite { xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 1); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) != aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) != aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 2); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) != bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) != bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); - BEAST_EXPECT(std::find(cod.begin(), cod.end(), bc) != cod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(cod.begin(), cod.end(), bc) != cod.end()); } env.close(5s); @@ -1196,12 +1235,18 @@ struct Escrow_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 0); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 1); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) != bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) != bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 1); @@ -1215,12 +1260,18 @@ struct Escrow_test : public beast::unit_test::suite xrpl::Dir const aod(*env.current(), keylet::ownerDir(alice.id())); BEAST_EXPECT(std::distance(aod.begin(), aod.end()) == 0); - BEAST_EXPECT(std::find(aod.begin(), aod.end(), ab) == aod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(aod.begin(), aod.end(), ab) == aod.end()); xrpl::Dir const bod(*env.current(), keylet::ownerDir(bruce.id())); BEAST_EXPECT(std::distance(bod.begin(), bod.end()) == 0); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), ab) == bod.end()); - BEAST_EXPECT(std::find(bod.begin(), bod.end(), bc) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), ab) == bod.end()); + BEAST_EXPECT( + // NOLINTNEXTLINE(modernize-use-ranges) + std::find(bod.begin(), bod.end(), bc) == bod.end()); xrpl::Dir const cod(*env.current(), keylet::ownerDir(carol.id())); BEAST_EXPECT(std::distance(cod.begin(), cod.end()) == 0); @@ -1591,5 +1642,4 @@ public: BEAST_DEFINE_TESTSUITE(Escrow, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/FeeVote_test.cpp b/src/test/app/FeeVote_test.cpp index 62f1058de5..e24b54c82a 100644 --- a/src/test/app/FeeVote_test.cpp +++ b/src/test/app/FeeVote_test.cpp @@ -1,18 +1,40 @@ -#include + +#include #include +#include #include +#include +#include +#include +#include #include #include #include +#include #include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { struct FeeSettingsFields { @@ -176,7 +198,7 @@ getTxs(std::shared_ptr const& txSet) { auto const data = i->slice(); auto serialIter = SerialIter(data); - txs.push_back(STTx(serialIter)); + txs.emplace_back(serialIter); } return txs; }; @@ -725,5 +747,4 @@ class FeeVote_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(FeeVote, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/FixNFTokenPageLinks_test.cpp b/src/test/app/FixNFTokenPageLinks_test.cpp index e5ecdf2639..56484bb396 100644 --- a/src/test/app/FixNFTokenPageLinks_test.cpp +++ b/src/test/app/FixNFTokenPageLinks_test.cpp @@ -1,9 +1,32 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -#include +#include + +#include +#include +#include namespace xrpl { @@ -71,7 +94,7 @@ class FixNFTokenPageLinks_test : public beast::unit_test::suite // Sort the NFTs so they are listed in storage order, not // creation order. - std::sort(nfts.begin(), nfts.end()); + std::ranges::sort(nfts); // Verify that the owner does indeed have exactly three pages // of NFTs with 32 entries in each page. diff --git a/src/test/app/FlowMPT_test.cpp b/src/test/app/FlowMPT_test.cpp index 004bb6eee4..eabd239550 100644 --- a/src/test/app/FlowMPT_test.cpp +++ b/src/test/app/FlowMPT_test.cpp @@ -1,17 +1,49 @@ -#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include - +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { struct FlowMPT_test : public beast::unit_test::suite { @@ -824,7 +856,8 @@ struct FlowMPT_test : public beast::unit_test::suite // available. Consequently, the entire offer is crossed. // Note remaining takerGets is 541 rather than 540 due to integral // rounding. XRP has a similar result. - return TokenData{EUR, USD, EUR(541), USD(450)}; + return TokenData{ + .gets = EUR, .pays = USD, .remTakerGets = EUR(541), .remTakerPays = USD(450)}; }; auto initXRP = [&](Env& env) { @@ -836,7 +869,11 @@ struct FlowMPT_test : public beast::unit_test::suite // available. Consequently, the entire offer is crossed. // Note remaining takerGets is 540.000001 rather than 540 due to // integral rounding. - return TokenData{XRP, USD, XRP(540.000001), USD(450)}; + return TokenData{ + .gets = XRP, + .pays = USD, + .remTakerGets = XRP(540.000001), + .remTakerPays = USD(450)}; }; auto initIOU = [&](Env& env) { @@ -848,7 +885,8 @@ struct FlowMPT_test : public beast::unit_test::suite // Payment's engine last step is limited by alice's // trustline - 606. Therefore, only 6EUR is delivered // and the offer is partially crossed. - return TokenData{EUR, USD, EUR(594), USD(495)}; + return TokenData{ + .gets = EUR, .pays = USD, .remTakerGets = EUR(594), .remTakerPays = USD(495)}; }; auto initIOU1 = [&](Env& env) { @@ -860,7 +898,8 @@ struct FlowMPT_test : public beast::unit_test::suite // Payment's engine last step is not limited by alice's // trustline. Therefore, the entire offer is crossed. // This the same result as with MPT. - return TokenData{EUR, USD, EUR(540), USD(450)}; + return TokenData{ + .gets = EUR, .pays = USD, .remTakerGets = EUR(540), .remTakerPays = USD(450)}; }; auto test = [&](auto&& initToken) { @@ -2107,5 +2146,4 @@ struct FlowMPT_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_PRIO(FlowMPT, app, xrpl, 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Flow_test.cpp b/src/test/app/Flow_test.cpp index 218f6fe03a..8f096a970f 100644 --- a/src/test/app/Flow_test.cpp +++ b/src/test/app/Flow_test.cpp @@ -1,18 +1,55 @@ -#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include - +#include #include +#include +#include +#include +#include #include #include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { bool getNoRippleFlag( @@ -1286,5 +1323,4 @@ struct Flow_manual_test : public Flow_test BEAST_DEFINE_TESTSUITE_PRIO(Flow, app, xrpl, 2); BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Flow_manual, app, xrpl, 4); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Freeze_test.cpp b/src/test/app/Freeze_test.cpp index ed5ee47578..29127ec8e1 100644 --- a/src/test/app/Freeze_test.cpp +++ b/src/test/app/Freeze_test.cpp @@ -1,12 +1,38 @@ -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include #include +#include #include +#include +#include +#include +#include + namespace xrpl { class Freeze_test : public beast::unit_test::suite diff --git a/src/test/app/GRPCServerTLS_test.cpp b/src/test/app/GRPCServerTLS_test.cpp new file mode 100644 index 0000000000..a421f981f7 --- /dev/null +++ b/src/test/app/GRPCServerTLS_test.cpp @@ -0,0 +1,849 @@ +#include +#include + +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace { + +constexpr std::string_view kCA_CERT_CONTENT = + "-----BEGIN CERTIFICATE-----\n" + "MIIFhjCCA26gAwIBAgIJAL9P70zX30oiMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV\n" + "BAYTAlVTMQ0wCwYDVQQIDARUZXN0MQ0wCwYDVQQHDARUZXN0MRgwFgYDVQQKDA9S\n" + "aXBwbGVkIFRlc3QgQ0ExEDAOBgNVBAMMB1Rlc3QgQ0EwIBcNMjYwNDA5MTMyNTA2\n" + "WhgPMjEyNjAzMTYxMzI1MDZaMFcxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARUZXN0\n" + "MQ0wCwYDVQQHDARUZXN0MRgwFgYDVQQKDA9SaXBwbGVkIFRlc3QgQ0ExEDAOBgNV\n" + "BAMMB1Rlc3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzOJ5s\n" + "dy1O0GN/kmbeWf5DmFbQBSS9FRKxh6/o9V9BqRBQfECrVK9T5Y4FYrGGtmUW3YEV\n" + "uMDZ5q6rvBT2zrrzPXnWA5Pb4I4mKqC/yk5L7Mm8A9xQsNoRzgTyl/NuHiXKn+yQ\n" + "FuidA6U36qwIAcDR7gLqrJ1ud/ng9f9Q4k6+IItY/XGhcz4nKlQq9jpzmfdSlBkU\n" + "hXsIsdNtC+UGlQMCMX2jwysIFfjjCOMlH7KFQ3dKodhsW+Ym6AsPwyRGCgNXO/zd\n" + "Fqt1MIMs1F7r40DtfVO3R7w4/2SblcceZlsDrYQUbJnH+sEPWO0SGGo6Y7Ohs09+\n" + "aJSOAGGQVgTSLuAcFtR4BXD0GLn39+10PDvHGOsMJKL1de1f96s8kPlifQ5AGWuc\n" + "xy6XsupGSa0F8LozwQmKD7hVkyladUTWFPknz5tsPEVApTO0U8Vuknuhyovo6+mx\n" + "qBoSD32NwHveFz3jWqfj0CGX9BwL9AOpMabDhROVQfyM5GrLeLOOdgOnsBXJYYdW\n" + "MeJwz6BH30q9yvEd9Ti26jSk3fM8WPuEkZzNNp8STEMyDrfhaKOe5fGPWLnqMQAf\n" + "yMCDLwB1WqIN1Q6gOELb3rxyYDVH/5x6/JXosdUe1qx/tzvRoSWxxssRRd2Em+e+\n" + "MUFLXz+9D6kZ9XCuP/mLyRGW6LEiwwQkGKMnzwIDAQABo1MwUTAPBgNVHRMBAf8E\n" + "BTADAQH/MB0GA1UdDgQWBBQPK5hXxLdTj3QqfVzGpfTga6IF3zAfBgNVHSMEGDAW\n" + "gBQPK5hXxLdTj3QqfVzGpfTga6IF3zANBgkqhkiG9w0BAQsFAAOCAgEAa06whkqv\n" + "KmdT1HVhkV7AkWEAeHMWPLLaaFbcwble7a1Vizh6GjCyNpLtoN+mtwqwiOdsIlRE\n" + "42pWILc6CuuX0ae0nHSrcQS5mq8ZKSMr1xTo9RSfBq7CDfdyquxzG83HhpdApViZ\n" + "87Bjy3WoRuomM+YiONfUVdCbC5ZmXW/z+xrXJ+JqIXrtv66sZxpQIR0+ShnWT0DE\n" + "w9jB5fxjydPFwEudYi4z9XjEZaZJ1f8VNWDuUvi3yTJtTlNaWnKveudtDZBw/fA+\n" + "MBFd9ccYVhGQPxOs6S0Ev6q5IjcnzGeEBNZOjgjQk9aFrAs2Iiy018AbYQj5XD64\n" + "hHyiNgyPjl/VgXJE1Xl3lXGpiiJlXctgnCd3UGMfKznhBIpDT13i2CmHFyR3uk7o\n" + "UOZUXCnbnmgthejmFxB35Wf5TmGaYubtRMfCPHGNbQD+7Kg2+8eel3J3JSuG6RQ8\n" + "hwNyHHQnaPVUSANItJ4cMe5DutM0vUCMkJbajL+fjC5SdsTcGfR2VmAFqulNDXjH\n" + "sGWBiWVNsgddax63m6kL9UOeE+8pu8yStKZ4mVn2EjE9eJk4vyZt4BaI6sDUMlke\n" + "S9OjcI5iYlxXNgbRQBtwK70+c3D3JoRPREkTRPPwC4NiAFed7UwXSMh5nWbpt/dq\n" + "fAbAYqu0rfMFHUYjzIVnu8WRCC56qYHO5tU=\n" + "-----END CERTIFICATE-----\n"; + +constexpr std::string_view kSERVER_CERT_CONTENT = + "-----BEGIN CERTIFICATE-----\n" + "MIIFizCCA3OgAwIBAgIJAIErcpMflkrRMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV\n" + "BAYTAlVTMQ0wCwYDVQQIDARUZXN0MQ0wCwYDVQQHDARUZXN0MRgwFgYDVQQKDA9S\n" + "aXBwbGVkIFRlc3QgQ0ExEDAOBgNVBAMMB1Rlc3QgQ0EwIBcNMjYwNDA5MTMyNTA3\n" + "WhgPMjEyNjAzMTYxMzI1MDdaMFExCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARUZXN0\n" + "MQ0wCwYDVQQHDARUZXN0MRAwDgYDVQQKDAdSaXBwbGVkMRIwEAYDVQQDDAlsb2Nh\n" + "bGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCv+Lj9LJfPuSOE\n" + "yZqTn2gmG5tJt02ywnuIQet7N5tduxnNs50yXQ00Jeb40dth0HwI5I+AsEVNPIG3\n" + "7tJ9RtCwwTyltaZ4bXuL9ujEVr6TAKY6rlU9bL+Zmr62Lm8B0SLouxfPtyzKhBv6\n" + "7bGUrdIX7o9DbTQ3/2mQTc7KjPCJTEutmpVyD3dABN1qDM9Qzac0NtK1nixvYGd4\n" + "SpbK95BRXby3X9um0dVXoUMbc2gDV9uUZw1xLSjuKDJtQ/rleqe0mmS6JSoagwbb\n" + "DmPX/GbIf21IWUsg3m7AyIwYf9FtIJArB/j3iVBsY9lTB0mXSLxiyN6KM822+QjH\n" + "/VeHKDUWdQB6N3smmi1OLQasukRpSUTmTsoucn30dUqS6qdTtkHzvqGEN+CXBWgG\n" + "i1AS2CacOjYSVHRppC10r/3kEChYY/9rqYBz7GedFRJ6VzQzrwFYZleLJvX6GWfe\n" + "4gNvgwLfo/q2Af1HkCY2aHO+19eAghVsy1MRUDnm/GbZAhHSrX10iEfRjs+GhfxY\n" + "v0xMrvGBCm/2CiJ8RAvdRPpNkM/3u9fjOmqdKvE9NTqDOX1HUBoqa/UguIzi6o/k\n" + "BlBtohfaeL6ZeYXl6MefIIs2pipR7S1VQ1RY9OSdnN5nIJidyn1l85P9vLn49QVw\n" + "2OAT+TcEZnxyaiHCKU6nWtusuMt3wQIDAQABo14wXDAaBgNVHREEEzARgglsb2Nh\n" + "bGhvc3SHBH8AAAEwHQYDVR0OBBYEFO9bPc31jmMlMVNhOd+eXgZPD/+pMB8GA1Ud\n" + "IwQYMBaAFA8rmFfEt1OPdCp9XMal9OBrogXfMA0GCSqGSIb3DQEBCwUAA4ICAQCm\n" + "+hnvRdr9N9a260yOD53b/Gs0c4viAOU3WmxAa89upLHnpPEi7/GlKlw+ed6SwYoX\n" + "CSopDw8AG2Ub/oHM3uIrONjfdHBwUl/SUS8wNhiELuQjKm0qGjkh/n/FHY903flc\n" + "0VP2ciLnqhSS2NY+KH0O8uny3yR4FVH7Byqtk648Z7LfIhe02TjTIjhXDrGwn5dS\n" + "tuTKEAGaxxPJuINCR1BZlwfk+10ipJK59rSpCW//P1YJVr16sdnyh3YJXoAJ5qxP\n" + "P8QWHiRIl2ZGs7KB5SU9fX1dVEU5gwrl/KF3oP+iS01wfNZGvnR+eHMPJsl/IwoC\n" + "SOZAMjgkTZh06cprfEXne8bcidiHvETbF9szMAofA91PbXi0lcwMqpkHG2AElOXI\n" + "by4ejjs9RZJF2Ef38qZPb8RuT+gLORFH5SuPQUwXKlszjpzpxkQ6IKYjFJY+j8CS\n" + "XlXhdkzK5h18cf7J2i5SQdIzE1btQqdcaMb9DzX+drCqqD8JZd1Vczua7Q5tbZ/g\n" + "Bq19Zzo1KQL0xXPdomWv+sP6eUMiW+3J5oFN2hJpilKuFSCAhDmgcmLooFy5t6rR\n" + "kW0n1P3iTWvgQHNzB/3msanvC4/hHyrHHOVGQtAjhxuoRioBJ+hg4RKDptSUcHJX\n" + "YSyd81wvumIpP+I7BDkQLgTb+NzMmoBIjRg3aVvXSg==\n" + "-----END CERTIFICATE-----\n"; + +constexpr std::string_view kSERVER_KEY_CONTENT = + "-----BEGIN PRIVATE KEY-----\n" + "MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCv+Lj9LJfPuSOE\n" + "yZqTn2gmG5tJt02ywnuIQet7N5tduxnNs50yXQ00Jeb40dth0HwI5I+AsEVNPIG3\n" + "7tJ9RtCwwTyltaZ4bXuL9ujEVr6TAKY6rlU9bL+Zmr62Lm8B0SLouxfPtyzKhBv6\n" + "7bGUrdIX7o9DbTQ3/2mQTc7KjPCJTEutmpVyD3dABN1qDM9Qzac0NtK1nixvYGd4\n" + "SpbK95BRXby3X9um0dVXoUMbc2gDV9uUZw1xLSjuKDJtQ/rleqe0mmS6JSoagwbb\n" + "DmPX/GbIf21IWUsg3m7AyIwYf9FtIJArB/j3iVBsY9lTB0mXSLxiyN6KM822+QjH\n" + "/VeHKDUWdQB6N3smmi1OLQasukRpSUTmTsoucn30dUqS6qdTtkHzvqGEN+CXBWgG\n" + "i1AS2CacOjYSVHRppC10r/3kEChYY/9rqYBz7GedFRJ6VzQzrwFYZleLJvX6GWfe\n" + "4gNvgwLfo/q2Af1HkCY2aHO+19eAghVsy1MRUDnm/GbZAhHSrX10iEfRjs+GhfxY\n" + "v0xMrvGBCm/2CiJ8RAvdRPpNkM/3u9fjOmqdKvE9NTqDOX1HUBoqa/UguIzi6o/k\n" + "BlBtohfaeL6ZeYXl6MefIIs2pipR7S1VQ1RY9OSdnN5nIJidyn1l85P9vLn49QVw\n" + "2OAT+TcEZnxyaiHCKU6nWtusuMt3wQIDAQABAoICAQCZilzm0uT3Y2RBdaMBUaKP\n" + "NaFONbl+00D0SAhOr9tJcnp2SFVN33Eo4jVhP8K62y2OmNc5gxRE6xmIQsK4enSW\n" + "9VSUhiXliCm3m03IGqQYIgXox7oqaVvYi/QBhAxpunBKPwzsubhET/cWABXlU7Ew\n" + "HoA0ZfGdNqeGOM3JYCZ0tfSGWo4xQptbaaND6D9wErDk1z0NKSE+YRCHHhXqrQ3o\n" + "YPDL08EVEpui5VtndU/5Msyt9Sj+alf/TWWKfzlIx7fS1rAy10Cgd1khA7JMf7ez\n" + "E7Rn3zm1ST+7yICs08IJBNOmKEOswMxCdvDmCELG1LlDPF8omUDSeQKXdU7M6GFA\n" + "b5PQ11Ik6xZVw1NUESf4d9g0VhEJRXSdGwA3KepAkwRejkB5jI56C8z9dB0LWdWH\n" + "2r3dX2ZpbJv0XVNxAELRgKwyfqWxYrF3caGLrxxWAiyPFvD9FgZJB1ftBU3D+HZZ\n" + "bltdfHJBgZe3pwoCr3X2JPhcA6ecITsset14dvsXHSi9IAXTHbeXxjrHCRcXs6xV\n" + "v4ZSL5r43dv6qk7XiFONCmV8diIwJOxcaSvoBgeeCykX4RKGSk/6Atlo4C9hXb47\n" + "BAuXu3Y+SkS98EljsdeNKCr013Tvt0p4H2QfeoDTKuzC+j3hu9fCkEP3oak2nWFl\n" + "bOkrYMJCc6yxu20G58vzrQKCAQEA1y93gNuNa7Z+VrZCSEcJX2BZl1mTyhLEa9mN\n" + "QOmKlW10VrfCsJxLu+dTGWccy0c6Q8wk6uGjgYJHsdyFPIdSroPR2ysJKSP/5Vzu\n" + "xNymgbeLPnWoivC9TctovWY/15fdboYNUO54jOpFheCC1wq9ZP6CyJmw5O96Y7tJ\n" + "1l5Dq7Fe4iQbIQHPt54wVVHsm7G1ZNywgSbt0HXHeP43YN3mRawJ51++MaEksCXv\n" + "rW+vOxPdiW8djE0tqcK0tqFMhI6p+WcUu8128aRHd0iHlKsVsFU4OLLZr10zwy9i\n" + "COHoF4Fh53pGp05jv+5eMtuEiem87ZUmpJn7whHZt8sKSE71AwKCAQEA0Vkwr4KA\n" + "kRRCUPvor5mdNil05N1mLrYgr/4UAHg3tbeTGxOjSX65KnJWi5dsDmZUdGTL4StD\n" + "8H6uLzzjX88gQkpKvtRYPYKBFtTRsI+ItOvIIo8czK/Kv8dwC2WXZbZBjsCAhrCm\n" + "0fKL2jx7rgdjaqvQeqSRtcHiyiYJG/jC7Iqwm4CyPr+nkVUWKZUWXopw0QXZXHWp\n" + "Glz9TXreEI7Xb/R+RXYU21exBqg0SfHq9pA//aNTQWxWGlNVwqO/KUao9HZupKHb\n" + "mA73oxFJTKhVNNNdC5cC91pxDeDTUzpIEjCGeLI3Aa35CD0WFqEbELJphr5HGkGo\n" + "VkYod6P79+Ta6wKCAQAadFpzvAop2Ni1XljNu/X6BMVe5wNVT3NYcvl7pnqEHl20\n" + "H4lO3xgsdKbxs4yFrS8LkLhlK/JHBLY9toemxlgy3j/ZevP4W9Wk5ATyrNHHlsIG\n" + "nr5mvmv3eW9aAY0Nuzzczpwqe/bUFCUR7WUIfOiF1whLEyH9MzfPtQHB2frly7uH\n" + "f7raFvfrcgYtJxI4neNYEA2fAyMvgptQU6iJPx6FKD5bdJjUTyRMh41svBNF5w5Q\n" + "TBnM2twnR6mh3jii/0sEP1j8MalS0ch7cK5CZ7oV4JQ13D8I4SNw9o1N3EAFS8G2\n" + "jIDNJsT6npp0FCq6LcMtTi3fBJM/66PhhZOxCgvzAoIBAH1LnE/vE3PBZE+D9afj\n" + "kKwx87xmphme98FdmCsPyIgB7xFtl3UNW1WESTgS0KFtrW5cRYnmkysFJssu7gcR\n" + "uIT0YfgErythSFGZ3kaGIZPm6kmEzf/T1s0hWHX5v7soceQ2YrY6VB2jxQBA4uUt\n" + "ltrpKkW86ViXSl0ilqEfKcrY1wq64/OaUXgyLKmGiXTb9tmjXoxv/12/+fq9ZtsS\n" + "Iu7mrgx0t9bvjQwm7+Sx3abkfugXMGUfqgjnh5SO3IKfv89QcrgmB3/itWPrnKs8\n" + "tIKBXlbpcuUIRFHCFbjiUPBSCqmCQFnI/htoNCgnFEPSBEaY64VTdqTsKJwykUO0\n" + "vTECggEAEAB8vyHHk7fpU+IOwD8TP7MCMHwoJzoHQp35So7TlhmO7oDranNhg3nl\n" + "jhTOeISLG2dmPkT49vhsO30tal4CgSXVZo1bPbOK83UvgeLH5Rhji44Dmah+ohKy\n" + "wCuVLuF6YSSp5rD7VIrahhegBFXEYdW5+ZBFbDpE5EXp0WeHc7IRPwWvm+ixr1m8\n" + "VqLeeh1xkMG5WdTTwGjgKWIFXZQ3bOIdVK7uya8wFDAtftkswXiBxAlb9L6Id+Dp\n" + "bKfMAHNouU1TQn5duFgPnCbSU1Js74HkkC0NEEIjQX8k2UCPrhV0VfLfViPuPFax\n" + "S/RYUSUkZ4VvqFUfo7wT8x18urb87w==\n" + "-----END PRIVATE KEY-----\n"; + +constexpr std::string_view kCLIENT_CERT_CONTENT = + "-----BEGIN CERTIFICATE-----\n" + "MIIFeDCCA2CgAwIBAgIJAIErcpMflkrSMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV\n" + "BAYTAlVTMQ0wCwYDVQQIDARUZXN0MQ0wCwYDVQQHDARUZXN0MRgwFgYDVQQKDA9S\n" + "aXBwbGVkIFRlc3QgQ0ExEDAOBgNVBAMMB1Rlc3QgQ0EwIBcNMjYwNDA5MTMyNTA3\n" + "WhgPMjEyNjAzMTYxMzI1MDdaMFoxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARUZXN0\n" + "MQ0wCwYDVQQHDARUZXN0MRcwFQYDVQQKDA5SaXBwbGVkIENsaWVudDEUMBIGA1UE\n" + "AwwLdGVzdC1jbGllbnQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDP\n" + "QHttw3TLjOqYS3VkLF3KMRaP2ZtO6A1mXfTbqbKvD41Fazf/cM/v9lPMAlRd2SEY\n" + "3MeE8KVddKJwsbF0kNgDkKB5D5V42WrTw5biFNMOeHAZMR/oWChIvZbbGbDxIdIO\n" + "2+W3X0kjpa2eKcK9qBk8xoyIeilyXtleGWuWvHxiZP9iGHxaTWB+wIKUIK6vrEOb\n" + "iO3P/9XPpHzsBt0HdTDh4V7fwnr2UndVeQyBwUwLn6pd73sTKBfA26YppRwDjPIj\n" + "6NYtF3I28lRCUo+47TAVZM97gjN9oEwyHIVtOc7fnZPwtN26M5v5083SGXU1k/PN\n" + "3xGAlDUiCF3RSMbBRylGgUVtsAD57i8tI2SqCr+ZG233VFiOdwTRKKVNTyMC9TCJ\n" + "dCFFEDFDHTTSimKRQKy0Cm2qoL6JBkziAIiu/0Zzv9YjAAnRoJ2cweMXQ/9z1oWe\n" + "EUZBLRsggYQ8FbM13FOkOs8IlzacSuhwrYKOq8LsMX4cH2mnn783FtXXqrL/xfL7\n" + "11KhzGpZNrz187ilJ+ZsmP9D6vCBP/tR7V52dgtB6I291o8zxdH8GheIGenEFaZa\n" + "oAwyN2FuJgXZqx9319I9gYerZ/BbUzA2MuOxFd0ywtdcTPqKiyAQ9rxQVCVQyYWj\n" + "kfBEYRzWxjfj3XhNprxdm3cauz01NAoTDiz52dZhGQIDAQABo0IwQDAdBgNVHQ4E\n" + "FgQUXVKwiGRrXC1sjK2D86jsjMVV0XgwHwYDVR0jBBgwFoAUDyuYV8S3U490Kn1c\n" + "xqX04GuiBd8wDQYJKoZIhvcNAQELBQADggIBACpHTm9GZMZ7OPhqVo4VltVOW9a9\n" + "LLDsVYmvpAF9+yjZGims6+p3f7eY+o+TRdUE4HEBCmH0UiFVODXCZSoqXo6y9xq7\n" + "TS1dmXll1Sajbfi7YXsM8CAUb+cSsHtmT57JtbGicDiVXAqIOlT65yXkuujdcEa0\n" + "OAw45vJDkWk/6nneFJKdTs7aT3fvIGTlMAxgMJngVsA8BRsX8TWoo05Lum8ClNgi\n" + "s6mtl+nUvjOaM0omFL/K9kqLy7OJAbmE5xuhkC9q6Kn0pHBL4u0YSWaWTpyrvAX7\n" + "BuOE0G1JezcCAcqJvXbKFvhnOSHTvzdlMgXhteGW8Uwgf8cGKtVLSwh6YTjI1XaL\n" + "DkNZfJabAyH7BsGGbAd9Jts4h+4auPqHgcpEz16280oCgZdcfLSP0UKrfwYuXOar\n" + "8KWlVRFl2NBpEJwRf2KjZFQUqYoX1MmfX0gyy+kk0ZP12L7oGNqAxkaWySfb4PSv\n" + "Hsnb8iD6sIJQjZvZ/2wLV8xwFTbFjvGbmSx+XLnMUVV8cVAMUpZz5X2R9pBvpVi4\n" + "KfUccTvIVA0p1wFSdWYQ0+QNxHxZGX1rin6KVUdV1z8K6J3FgGlRqzfz4bruGpXs\n" + "6vX5vqF9KTFpwLTOxDU+kAoIfHowHeu/LQX1l+rk1ww2UZQ1zvgKb6fxWMtviq3F\n" + "cTe8jkzRqYdUfAoV\n" + "-----END CERTIFICATE-----\n"; + +constexpr std::string_view kCLIENT_KEY_CONTENT = + "-----BEGIN PRIVATE KEY-----\n" + "MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDPQHttw3TLjOqY\n" + "S3VkLF3KMRaP2ZtO6A1mXfTbqbKvD41Fazf/cM/v9lPMAlRd2SEY3MeE8KVddKJw\n" + "sbF0kNgDkKB5D5V42WrTw5biFNMOeHAZMR/oWChIvZbbGbDxIdIO2+W3X0kjpa2e\n" + "KcK9qBk8xoyIeilyXtleGWuWvHxiZP9iGHxaTWB+wIKUIK6vrEObiO3P/9XPpHzs\n" + "Bt0HdTDh4V7fwnr2UndVeQyBwUwLn6pd73sTKBfA26YppRwDjPIj6NYtF3I28lRC\n" + "Uo+47TAVZM97gjN9oEwyHIVtOc7fnZPwtN26M5v5083SGXU1k/PN3xGAlDUiCF3R\n" + "SMbBRylGgUVtsAD57i8tI2SqCr+ZG233VFiOdwTRKKVNTyMC9TCJdCFFEDFDHTTS\n" + "imKRQKy0Cm2qoL6JBkziAIiu/0Zzv9YjAAnRoJ2cweMXQ/9z1oWeEUZBLRsggYQ8\n" + "FbM13FOkOs8IlzacSuhwrYKOq8LsMX4cH2mnn783FtXXqrL/xfL711KhzGpZNrz1\n" + "87ilJ+ZsmP9D6vCBP/tR7V52dgtB6I291o8zxdH8GheIGenEFaZaoAwyN2FuJgXZ\n" + "qx9319I9gYerZ/BbUzA2MuOxFd0ywtdcTPqKiyAQ9rxQVCVQyYWjkfBEYRzWxjfj\n" + "3XhNprxdm3cauz01NAoTDiz52dZhGQIDAQABAoICADTppZmUeVEunQZc3Y/BtABX\n" + "IAeB6yDuJd2ox0b9wFzpf4vln9pblvsQzLwdLCT5tnV+iIHsXovJp19WPpQgFsZy\n" + "OkYuMF82Qwvlt7Po1Smwng4QeLD9MOvBW658lKw7kkGw6qkybp3nQrhKuSlqrWbS\n" + "2jZN2h8VEDHyE4HchXUpi/ojfjwf3S7/P1dKMM8xD+G5x91+17u3px0rc2rgBKbm\n" + "vy4pnPMegtETopnOG/grv3dUGPv/FHFsorOnL8vIRFnerC+++K4GmHSGV6NDCy+r\n" + "GT3TNAoyzsFMftQwGh0FQiwGQUW0v3G9HaMyVLZlG63H8dP+AsK5mBpCllvqKyMb\n" + "TQcS8mTBYAvBgiKqZBy6cwbnLaN5hYftDTg4zS62LVZzNlaMeTFGGYINDrth2S6X\n" + "+qH2GcXAUqd8aYIz/BLimCGhZMFQ0hAFCcq72Lh8UJsvvf9ng8Di/6oiZFJeN4nf\n" + "/LHUjlOyBqj8prTh0UCBjM0hdzzs96K+e3eBGjFHdVrdK5QytKZh1KTBSu0t64b2\n" + "0MSW5+2vFbdaQT5jed2lyh9YMmtGJV07T+5LKjWQGcJcc53DLA6uQ8lQuckQReE4\n" + "VzTWoG0eKEvk8ahltbl+0Gk7+fQlsMD5VizbET7EDOoiFPT3SpA/5dybXglNSuH4\n" + "9T65s7Xj2/zD8khLb3CxAoIBAQDwV3OQ66kqIC554Emz7F9ZNInMx4Vjuatd4wxe\n" + "WMT1Vlyg0ZeNSgdfggPmfntDW56NZ/h7q9F9feGfF3OogfZXVv2NzsynAOS4DR1c\n" + "0JR8/y7NG8vxHmDkNVJ3YkHfNYqK3x+sMCoXF0jDdaILXaP0nzAdcnLrRLyU9F3r\n" + "RVJpyaMWt9mtnRzlf1PTlc9WQ99MYuMfqxFj/zBFddnNFiI0FaG3/3Xdg6EH9x42\n" + "/2GXT/TlSUQo4e6Dh9mGhupUYzJt+AqjCnFA2n+D68QIdVq8ykOqGvnpwmfF94qt\n" + "8xfrKhI4zskj4N0X/xwByfEBOkU8nI8zP8PdVqKCbCRG1Z93AoIBAQDcwSRpPD5J\n" + "dmfXY2MGHvGQiJme/3YGPhcA15fQVRzWuZtn1PHULlI2V62NintzTUhjmv6SkGyX\n" + "6ze4RSCxrRFJumJwev5HtohQ7DH/nDtg+Y9Ewn32ehSEotycz1HUskOtgtLOQjwY\n" + "m66gTx6OzG4T6G2YRHcK8hFk9eLR0t2fIqPtu6APfRuo5OowiuYVzRKOplzh2J05\n" + "Q1TCJ4QL6geJQ/MzxVx33yopXWfRxZekG7ri4OJTIv8zj1Ocrytgz4hxAc8xJEf5\n" + "Z50k4JaWGBy+O/mKZ9sOGsolNv/FMUauE2EjSeNWNgvCFFvh4hDUciIakPzEeslp\n" + "hZdZCG9IV8fvAoIBAQDoDbfSbAc4Wjwlhq4C362sJrMKGnarNADGtMsjaRg6PTlQ\n" + "OS3XyGtYBuOXL/X5skNjCsj7N4kcXmdywST1xQ3BhIdp3QryEEXFgzwfenB0Q7q/\n" + "ZSBDXW51yRonlKI/TqXGseoVyadKBjxGJJTh3nbIYM8HD5Lvn71pIIxx9cu9wmcK\n" + "L1cobvMQjyCzwQigpQW77hqXYAd5glHsLv6tKrq5iU1Mp4X46/eWBj6RIYDrpNKy\n" + "c0wxIPu22XrojelAs0pkrUIv64wv7weBqyjqdcy3TZ+JZWR5FDA4D2tByt4EO+m+\n" + "GcJRNvKiEbnL7FwbMFTbUdpdxCpr0hM0VA+uqOG/AoIBAB24JuXABYawWSSHLdKq\n" + "Ic1ahowASmxmuYQUgky62KoTzNc6tN/i6JCGV0gh56LLOb6nJDSpGuWM9jBpphAl\n" + "g5lQbWZFOKyA53M1iTmnV9sjXeVc5cZkAxUkM90skBC5eyEF5sl740lQ1D6iyDNj\n" + "VEJ73R1NwlUH582WyNWEtO9yo20jAFZ1el7PirPET1uKA0CPJxwEpI4MAYIt/bn4\n" + "5NDXBAvpOxysP6nX+F0mY9blINDgg7e7k23mktQaRRXAetbz7mfoQYRTLbXEQqGs\n" + "V1pJCrxWZQhOFP7Tm7V5f9F5rG8qyF9X4VdclE4huDBRuUOoV09AVJNPN+P1nb24\n" + "i6MCggEBAIHUb8G0QKM4LPfdUmv575YmbnYY+Y3O982+jjRg4uAkYHnEkNfL6FKE\n" + "6ot7vcwDTN2Ccw6UKZU8GvyAQOGotmj6Nkgny2wFnEfoTzJaENjhPlnCHD9LDCps\n" + "w/tuoCHOUyyEb/Ygc+4xTsc0W3y2dbaYcg1qvLeIFuVZBNvY1XNlVf40/sVoiyet\n" + "Abh2yPwqOgOu8FpK4gcM8iSwL/xhEJJgT2wE+1MyHOd8KKklFHR7dF2WX1dF0Sif\n" + "cerPwqKXCvWh7og0RIJXe24fymMxtIsURBer9a3bPzUPVQoOXki4/u/kdEGH66GH\n" + "+6f4hsbp29hg+BUZ+UPdk7QyCKpZD1A=\n" + "-----END PRIVATE KEY-----\n"; + +/** + * RAII helper for managing temporary TLS certificates in tests. + * + * Creates a temporary directory and writes test certificates to it. + * Automatically cleans up the directory when destroyed. + */ +class TemporaryTLSCertificates +{ +public: + static constexpr std::string_view kCA_CERT_FILENAME = "ca.pem"; + static constexpr std::string_view kSERVER_CERT_FILENAME = "server_cert.pem"; + static constexpr std::string_view kSERVER_KEY_FILENAME = "server_key.pem"; + static constexpr std::string_view kCLIENT_CERT_FILENAME = "client_cert.pem"; + static constexpr std::string_view kCLIENT_KEY_FILENAME = "client_key.pem"; + static constexpr std::string_view kCERTS_DIR_PREFIX = "grpc_tls_test_"; + + TemporaryTLSCertificates() + { + auto tmpDir = std::filesystem::temp_directory_path(); + auto uniqueDirName = + boost::filesystem::unique_path(std::string(kCERTS_DIR_PREFIX) + "%%%%%%%%"); + tempDir_ = tmpDir / uniqueDirName.string(); + std::filesystem::create_directories(tempDir_); + + writeFile(tempDir_ / kCA_CERT_FILENAME, kCA_CERT_CONTENT); + writeFile(tempDir_ / kSERVER_CERT_FILENAME, kSERVER_CERT_CONTENT); + writeFile(tempDir_ / kSERVER_KEY_FILENAME, kSERVER_KEY_CONTENT); + writeFile(tempDir_ / kCLIENT_CERT_FILENAME, kCLIENT_CERT_CONTENT); + writeFile(tempDir_ / kCLIENT_KEY_FILENAME, kCLIENT_KEY_CONTENT); + } + + virtual ~TemporaryTLSCertificates() + { + std::error_code ec; + std::filesystem::remove_all(tempDir_, ec); + } + + TemporaryTLSCertificates(TemporaryTLSCertificates const&) = delete; + TemporaryTLSCertificates& + operator=(TemporaryTLSCertificates const&) = delete; + TemporaryTLSCertificates(TemporaryTLSCertificates&&) = delete; + TemporaryTLSCertificates& + operator=(TemporaryTLSCertificates&&) = delete; + + [[nodiscard]] std::filesystem::path + getCACertPath() const + { + return tempDir_ / kCA_CERT_FILENAME; + } + + [[nodiscard]] std::filesystem::path + getServerCertPath() const + { + return tempDir_ / kSERVER_CERT_FILENAME; + } + + [[nodiscard]] std::filesystem::path + getServerKeyPath() const + { + return tempDir_ / kSERVER_KEY_FILENAME; + } + + [[nodiscard]] std::filesystem::path + getClientCertPath() const + { + return tempDir_ / kCLIENT_CERT_FILENAME; + } + + [[nodiscard]] std::filesystem::path + getClientKeyPath() const + { + return tempDir_ / kCLIENT_KEY_FILENAME; + } + + [[nodiscard]] std::filesystem::path + getTempDir() const + { + return tempDir_; + } + +private: + static void + writeFile(std::filesystem::path const& path, std::string_view content) + { + std::ofstream file(path); + if (!file) + throw std::runtime_error("Failed to create file: " + path.string()); + file << content; + if (!file) + throw std::runtime_error("Failed to write file: " + path.string()); + } + + std::filesystem::path tempDir_; +}; + +} // namespace + +namespace xrpl::test { +/** + * Helper function to make a simple gRPC call to test connectivity. + * Returns true if the call succeeded, false otherwise. + */ +bool +makeTestGRPCCall(std::unique_ptr const& stub) +{ + grpc::ClientContext context; + org::xrpl::rpc::v1::GetLedgerRequest const request; + org::xrpl::rpc::v1::GetLedgerResponse response; + + // Set a short deadline to avoid hanging on failed connections + context.set_deadline(std::chrono::system_clock::now() + std::chrono::seconds(2)); + + grpc::Status const status = stub->GetLedger(&context, request, &response); + return status.ok(); +} + +class GRPCServerTLS_test : public beast::unit_test::suite, public TemporaryTLSCertificates +{ +public: + void + testWithoutTLS() + { + testcase("GRPCServer without TLS"); + + using namespace jtx; + + // Create config without TLS settings + auto cfg = envconfig(addGrpcConfig); + Env env(*this, std::move(cfg)); + + // Verify the server actually started by checking the port + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort > 0); + + // Test 1: Plaintext client should connect successfully + std::string const serverAddress = "localhost:" + std::to_string(*grpcPort); + auto plaintextStub = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::InsecureChannelCredentials())); + BEAST_EXPECT(makeTestGRPCCall(plaintextStub)); + } + + void + testWithValidTLS() + { + testcase("GRPCServer with valid TLS configuration (no mutual TLS)"); + + using namespace jtx; + + // Test with just server cert and key (no client verification) + auto cfg = envconfig( + addGrpcConfigWithTLS, getServerCertPath().string(), getServerKeyPath().string()); + Env env(*this, std::move(cfg)); + + // Verify the server actually started by checking the port + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort > 0); + + std::string const serverAddress = "localhost:" + std::to_string(*grpcPort); + + // Test 1: Plaintext client should FAIL against TLS server + auto plaintextStub = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::InsecureChannelCredentials())); + BEAST_EXPECT(!makeTestGRPCCall(plaintextStub)); + + // Test 2: TLS client with server CA should succeed + grpc::SslCredentialsOptions sslOpts; + sslOpts.pem_root_certs = std::string(kCA_CERT_CONTENT); + auto tlsStub = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::SslCredentials(sslOpts))); + BEAST_EXPECT(makeTestGRPCCall(tlsStub)); + } + + void + testWithMutualTLS() + { + testcase("GRPCServer with mutual TLS (client verification enabled)"); + + using namespace jtx; + + // Test with server cert, key, and CA for client verification + auto cfg = envconfig( + addGrpcConfigWithTLSAndClientCA, + getServerCertPath().string(), + getServerKeyPath().string(), + getCACertPath().string()); + Env env(*this, std::move(cfg)); + + // Verify the server actually started by checking the port + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort > 0); + + auto const serverAddress = "localhost:" + std::to_string(*grpcPort); + + // Test 1: TLS client WITHOUT client certificate should FAIL (mTLS requires client cert) + grpc::SslCredentialsOptions sslOptsNoClient; + sslOptsNoClient.pem_root_certs = std::string(kCA_CERT_CONTENT); + auto tlsStubNoClient = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::SslCredentials(sslOptsNoClient))); + BEAST_EXPECT(!makeTestGRPCCall(tlsStubNoClient)); + + // Test 2: TLS client WITH client certificate should succeed + grpc::SslCredentialsOptions sslOptsWithClient; + sslOptsWithClient.pem_root_certs = std::string(kCA_CERT_CONTENT); + sslOptsWithClient.pem_cert_chain = std::string(kCLIENT_CERT_CONTENT); + sslOptsWithClient.pem_private_key = std::string(kCLIENT_KEY_CONTENT); + auto tlsStubWithClient = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::SslCredentials(sslOptsWithClient))); + BEAST_EXPECT(makeTestGRPCCall(tlsStubWithClient)); + } + + void + testWithMissingKey() + { + testcase("GRPCServer with cert but no key"); + + using namespace jtx; + + // Create config with only cert (missing key) + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + // Intentionally omit ssl_key + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for incomplete TLS config"); + } + catch (std::runtime_error const& e) + { + BEAST_EXPECT( + std::string(e.what()).find("Incomplete TLS configuration") != std::string::npos); + } + } + + void + testWithMissingCert() + { + testcase("GRPCServer with key but no cert"); + + using namespace jtx; + + // Create config with only key (missing cert) + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + // Intentionally omit ssl_cert + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for incomplete TLS config"); + } + catch (std::runtime_error const& e) + { + BEAST_EXPECT( + std::string(e.what()).find("Incomplete TLS configuration") != std::string::npos); + } + } + + void + testWithClientCAButNoTLS() + { + testcase("GRPCServer with ssl_client_ca but without both ssl_cert and ssl_key"); + + using namespace jtx; + + // Test 1: ssl_client_ca specified without any TLS config + { + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", getCACertPath().string()); + // Intentionally omit both ssl_cert and ssl_key + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for ssl_client_ca without TLS config"); + } + catch (std::runtime_error const& e) + { + BEAST_EXPECT( + std::string(e.what()).find( + "ssl_client_ca requires both ssl_cert and ssl_key") != std::string::npos); + } + } + + // Test 2: ssl_client_ca with only ssl_cert (missing ssl_key) + { + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", getCACertPath().string()); + // Intentionally omit ssl_key + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for ssl_client_ca with only ssl_cert"); + } + catch (std::runtime_error const& e) + { + // This should fail with "Incomplete TLS configuration" first + // because ssl_cert is specified without ssl_key + BEAST_EXPECT( + std::string(e.what()).find("Incomplete TLS configuration") != + std::string::npos); + } + } + + // Test 3: ssl_client_ca with only ssl_key (missing ssl_cert) + { + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", getCACertPath().string()); + // Intentionally omit ssl_cert + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for ssl_client_ca with only ssl_key"); + } + catch (std::runtime_error const& e) + { + // This should fail with "Incomplete TLS configuration" first + // because ssl_key is specified without ssl_cert + BEAST_EXPECT( + std::string(e.what()).find("Incomplete TLS configuration") != + std::string::npos); + } + } + } + + void + testWithCertChainButNoTLS() + { + testcase("GRPCServer with ssl_cert_chain but without both ssl_cert and ssl_key"); + + using namespace jtx; + + // Test 1: ssl_cert_chain specified without any TLS config + { + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert_chain", getCACertPath().string()); + // Intentionally omit both ssl_cert and ssl_key + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for ssl_cert_chain without TLS config"); + } + catch (std::runtime_error const& e) + { + BEAST_EXPECT( + std::string(e.what()).find( + "ssl_cert_chain requires both ssl_cert and ssl_key") != std::string::npos); + } + } + + // Test 2: ssl_cert_chain with only ssl_cert (missing ssl_key) + { + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert_chain", getCACertPath().string()); + // Intentionally omit ssl_key + + try + { + Env const env(*this, std::move(cfg)); + fail("Should have thrown exception for ssl_cert_chain with only ssl_cert"); + } + catch (std::runtime_error const& e) + { + // This should fail with "Incomplete TLS configuration" first + // because ssl_cert is specified without ssl_key + BEAST_EXPECT( + std::string(e.what()).find("Incomplete TLS configuration") != + std::string::npos); + } + } + } + + void + testWithCertChain() + { + testcase("GRPCServer with ssl_cert_chain for intermediate CA certificates"); + + using namespace jtx; + + // Test with server cert, key, and cert chain (intermediate CA) + // In this test, we use the CA cert as a stand-in for an intermediate CA cert + auto cfg = envconfig( + addGrpcConfigWithTLSAndCertChain, + getServerCertPath().string(), + getServerKeyPath().string(), + getCACertPath().string()); + Env env(*this, std::move(cfg)); + + // Verify the server actually started by checking the port + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort > 0); + + auto const serverAddress = "localhost:" + std::to_string(*grpcPort); + + // Test: TLS client should be able to connect (no client cert required) + grpc::SslCredentialsOptions sslOpts; + sslOpts.pem_root_certs = std::string(kCA_CERT_CONTENT); + auto tlsStub = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::SslCredentials(sslOpts))); + BEAST_EXPECT(makeTestGRPCCall(tlsStub)); + + // Insecure client should fail + auto insecureStub = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::InsecureChannelCredentials())); + BEAST_EXPECT(!makeTestGRPCCall(insecureStub)); + } + + void + testWithInvalidCertFile() + { + testcase("GRPCServer with invalid/non-existent certificate file"); + + using namespace jtx; + + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", "/nonexistent/path/to/cert.pem"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + + Env env(*this, std::move(cfg)); + + // Server should fail to start - verify port is 0 + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort == 0); // Server should not have started + } + + void + testWithInvalidKeyFile() + { + testcase("GRPCServer with invalid/non-existent key file"); + + using namespace jtx; + + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", "/nonexistent/path/to/key.pem"); + + Env env(*this, std::move(cfg)); + + // Server should fail to start - verify port is 0 + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort == 0); // Server should not have started + } + + void + testWithInvalidCertChainFile() + { + testcase("GRPCServer with invalid/non-existent cert chain file"); + + using namespace jtx; + + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert_chain", "/nonexistent/path/to/chain.pem"); + + Env env(*this, std::move(cfg)); + + // Server should fail to start - verify port is 0 + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort == 0); // Server should not have started + } + + void + testWithInvalidClientCAFile() + { + testcase("GRPCServer with invalid/non-existent client CA file"); + + using namespace jtx; + + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", "/nonexistent/path/to/ca.pem"); + + Env env(*this, std::move(cfg)); + + // Server should fail to start - verify port is 0 + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort == 0); // Server should not have started + } + + void + testWithEmptyClientCAFile() + { + testcase("GRPCServer with empty client CA file"); + + using namespace jtx; + + // Create an empty file for client CA + auto emptyCAPath = getTempDir() / "empty_ca.pem"; + std::ofstream emptyFile(emptyCAPath); + emptyFile.close(); + + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", "127.0.0.1"); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", emptyCAPath.string()); + + Env env(*this, std::move(cfg)); + + // Server should fail to start due to empty CA file + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort == 0); // Server should not have started + } + + void + testWithBothCertChainAndClientCA() + { + testcase("GRPCServer with both cert chain and client CA (full mTLS with intermediates)"); + + using namespace jtx; + + // Test with all TLS features enabled: cert, key, cert_chain, and client_ca + auto cfg = envconfig(); + (*cfg)[SECTION_PORT_GRPC].set("ip", getEnvLocalhostAddr()); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", getServerCertPath().string()); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", getServerKeyPath().string()); + (*cfg)[SECTION_PORT_GRPC].set( + "ssl_cert_chain", getCACertPath().string()); // Using CA as intermediate + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", getCACertPath().string()); + + Env env(*this, std::move(cfg)); + + // Verify the server started successfully + auto const grpcPort = env.app().config()[SECTION_PORT_GRPC].get("port"); + BEAST_EXPECT(grpcPort.has_value()); + BEAST_EXPECT(*grpcPort > 0); + + auto const serverAddress = "localhost:" + std::to_string(*grpcPort); + + // Test 1: TLS client WITHOUT client certificate should FAIL (mTLS requires client cert) + grpc::SslCredentialsOptions sslOptsNoClient; + sslOptsNoClient.pem_root_certs = std::string(kCA_CERT_CONTENT); + auto tlsStubNoClient = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::SslCredentials(sslOptsNoClient))); + BEAST_EXPECT(!makeTestGRPCCall(tlsStubNoClient)); + + // Test 2: TLS client WITH client certificate should succeed + grpc::SslCredentialsOptions sslOptsWithClient; + sslOptsWithClient.pem_root_certs = std::string(kCA_CERT_CONTENT); + sslOptsWithClient.pem_cert_chain = std::string(kCLIENT_CERT_CONTENT); + sslOptsWithClient.pem_private_key = std::string(kCLIENT_KEY_CONTENT); + auto tlsStubWithClient = org::xrpl::rpc::v1::XRPLedgerAPIService::NewStub( + grpc::CreateChannel(serverAddress, grpc::SslCredentials(sslOptsWithClient))); + BEAST_EXPECT(makeTestGRPCCall(tlsStubWithClient)); + } + + void + run() override + { + testWithoutTLS(); + testWithValidTLS(); + testWithMutualTLS(); + testWithMissingKey(); + testWithMissingCert(); + testWithClientCAButNoTLS(); + testWithCertChainButNoTLS(); + testWithCertChain(); + testWithInvalidCertFile(); + testWithInvalidKeyFile(); + testWithInvalidCertChainFile(); + testWithInvalidClientCAFile(); + testWithEmptyClientCAFile(); + testWithBothCertChainAndClientCA(); + } +}; + +BEAST_DEFINE_TESTSUITE(GRPCServerTLS, app, xrpl); + +} // namespace xrpl::test diff --git a/src/test/app/HashRouter_test.cpp b/src/test/app/HashRouter_test.cpp index e53515e421..3ad317b157 100644 --- a/src/test/app/HashRouter_test.cpp +++ b/src/test/app/HashRouter_test.cpp @@ -2,11 +2,17 @@ #include #include -#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class HashRouter_test : public beast::unit_test::suite { @@ -405,5 +411,4 @@ public: BEAST_DEFINE_TESTSUITE(HashRouter, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Invariants_test.cpp b/src/test/app/Invariants_test.cpp index e9d3948202..6060fc8950 100644 --- a/src/test/app/Invariants_test.cpp +++ b/src/test/app/Invariants_test.cpp @@ -1,29 +1,79 @@ -#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #include #include #include #include +#include #include #include +#include +#include +#include #include +#include #include +#include +#include +#include #include -#include +#include +#include +#include #include +#include #include +#include #include +#include #include -#include +#include +#include +#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { -namespace test { + +// Test-only factory — not part of the public API. +// The returned Transactor holds a raw reference to ctx; the caller must ensure +// the ApplyContext outlives the Transactor. Implemented in applySteps.cpp +std::unique_ptr +makeTransactor(ApplyContext& ctx); + +} // namespace xrpl + +namespace xrpl::test { class Invariants_test : public beast::unit_test::suite { @@ -132,6 +182,10 @@ class Invariants_test : public beast::unit_test::suite BEAST_EXPECT(precheck(A1, A2, ac)); + auto transactor = makeTransactor(ac); + if (!BEAST_EXPECT(transactor)) + return; + // invoke check twice to cover tec and tef cases if (!BEAST_EXPECT(ters.size() == 2)) return; @@ -139,8 +193,10 @@ class Invariants_test : public beast::unit_test::suite TER terActual = tesSUCCESS; for (TER const& terExpect : ters) { - terActual = ac.checkInvariants(terActual, fee); - BEAST_EXPECTS(terExpect == terActual, std::to_string(TERtoInt(terActual))); + terActual = transactor->checkInvariants(terActual, fee); + BEAST_EXPECTS( + terExpect == terActual, + "expected: " + transToken(terExpect) + " got: " + transToken(terActual)); auto const messages = sink.messages().str(); if (!isTesSuccess(terActual)) @@ -1626,23 +1682,24 @@ class Invariants_test : public beast::unit_test::suite }; auto const mods = std::to_array({ { - "pseudo-account has 0 pseudo-account fields set", - [this](SLE::pointer& sle) { - BEAST_EXPECT(sle->at(~sfVaultID)); - sle->at(~sfVaultID) = std::nullopt; - }, + .expectedFailure = "pseudo-account has 0 pseudo-account fields set", + .func = + [this](SLE::pointer& sle) { + BEAST_EXPECT(sle->at(~sfVaultID)); + sle->at(~sfVaultID) = std::nullopt; + }, }, { - "pseudo-account sequence changed", - [](SLE::pointer& sle) { sle->at(sfSequence) = 12345; }, + .expectedFailure = "pseudo-account sequence changed", + .func = [](SLE::pointer& sle) { sle->at(sfSequence) = 12345; }, }, { - "pseudo-account flags are not set", - [](SLE::pointer& sle) { sle->at(sfFlags) = lsfNoFreeze; }, + .expectedFailure = "pseudo-account flags are not set", + .func = [](SLE::pointer& sle) { sle->at(sfFlags) = lsfNoFreeze; }, }, { - "pseudo-account has a regular key", - [](SLE::pointer& sle) { sle->at(sfRegularKey) = Account("regular").id(); }, + .expectedFailure = "pseudo-account has a regular key", + .func = [](SLE::pointer& sle) { sle->at(sfRegularKey) = Account("regular").id(); }, }, }); @@ -1737,8 +1794,10 @@ class Invariants_test : public beast::unit_test::suite using namespace test::jtx; bool const fixPDEnabled = features[fixPermissionedDomainInvariant]; + bool const fixS313Enabled = features[fixSecurity3_1_3]; - testcase << "PermissionedDEX" + std::string(fixPDEnabled ? " fix" : ""); + testcase << "PermissionedDEX" + std::string(fixPDEnabled ? " fixPD" : "") + + std::string(fixS313Enabled ? " fixS313" : ""); doInvariantCheck( Env(*this, features), @@ -1826,6 +1885,45 @@ class Invariants_test : public beast::unit_test::suite {tecINVARIANT_FAILED, tecINVARIANT_FAILED}); } + // empty sfAdditionalBooks (size 0) + { + Env env1(*this, features); + + Account const A1{"A1"}; + Account const A2{"A2"}; + env1.fund(XRP(1000), A1, A2); + env1.close(); + + [[maybe_unused]] auto [seq1, pd1] = createPermissionedDomainEnv(env1, A1, A2); + env1.close(); + + doInvariantCheck( + std::move(env1), + A1, + A2, + fixS313Enabled ? std::vector{{"hybrid offer is malformed"}} + : std::vector{}, + [&pd1](Account const& A1, Account const& A2, ApplyContext& ac) { + Keylet const offerKey = keylet::offer(A2.id(), 10); + auto sleOffer = std::make_shared(offerKey); + sleOffer->setAccountID(sfAccount, A2); + sleOffer->setFieldAmount(sfTakerPays, A1["USD"](10)); + sleOffer->setFieldAmount(sfTakerGets, XRP(1)); + sleOffer->setFlag(lsfHybrid); + sleOffer->setFieldH256(sfDomainID, pd1); + + STArray const bookArr; // empty array, size 0 + sleOffer->setFieldArray(sfAdditionalBooks, bookArr); + ac.view().insert(sleOffer); + return true; + }, + XRPAmount{}, + STTx{ttOFFER_CREATE, [&](STObject&) {}}, + fixS313Enabled + ? std::initializer_list{tecINVARIANT_FAILED, tecINVARIANT_FAILED} + : std::initializer_list{tesSUCCESS, tesSUCCESS}); + } + // hybrid offer missing sfAdditionalBooks { Env env1(*this, features); @@ -2432,9 +2530,9 @@ class Invariants_test : public beast::unit_test::suite .sharesTotal = adjustment, .vaultAssets = adjustment, .accountAssets = // - AccountAmount{id, -adjustment}, + AccountAmount{.account = id, .amount = -adjustment}, .accountShares = // - AccountAmount{id, adjustment}}; + AccountAmount{.account = id, .amount = adjustment}}; fn(sample); return sample; }; @@ -4003,6 +4101,128 @@ class Invariants_test : public beast::unit_test::suite } } + void + testVaultComputeCoarsestScale() + { + using namespace jtx; + + Account const issuer{"issuer"}; + PrettyAsset const vaultAsset = issuer["IOU"]; + + struct TestCase + { + std::string name; + std::int32_t expectedMinScale; + std::vector values; + }; + + NumberMantissaScaleGuard const g{MantissaRange::large}; + + auto makeDelta = [&vaultAsset](Number const& n) -> ValidVault::DeltaInfo { + return {.delta = n, .scale = scale(n, vaultAsset.raw())}; + }; + + auto const testCases = std::vector{ + { + .name = "No values", + .expectedMinScale = 0, + .values = {}, + }, + { + .name = "Mixed integer and Number values", + .expectedMinScale = -15, + .values = {makeDelta(1), makeDelta(-1), makeDelta(Number{10, -1})}, + }, + { + .name = "Mixed scales", + .expectedMinScale = -17, + .values = + {makeDelta(Number{1, -2}), makeDelta(Number{5, -3}), makeDelta(Number{3, -2})}, + }, + { + .name = "Equal scales", + .expectedMinScale = -16, + .values = + {makeDelta(Number{1, -1}), makeDelta(Number{5, -1}), makeDelta(Number{1, -1})}, + }, + { + .name = "Mixed mantissa sizes", + .expectedMinScale = -12, + .values = + {makeDelta(Number{1}), + makeDelta(Number{1234, -3}), + makeDelta(Number{12345, -6}), + makeDelta(Number{123, 1})}, + }, + }; + + for (auto const& tc : testCases) + { + testcase("vault computeCoarsestScale: " + tc.name); + + auto const actualScale = ValidVault::computeCoarsestScale(tc.values); + + BEAST_EXPECTS( + actualScale == tc.expectedMinScale, + "expected: " + std::to_string(tc.expectedMinScale) + + ", actual: " + std::to_string(actualScale)); + for (auto const& num : tc.values) + { + // None of these scales are far enough apart that rounding the + // values would lose information, so check that the rounded + // value matches the original. + auto const actualRounded = roundToAsset(vaultAsset, num.delta, actualScale); + BEAST_EXPECTS( + actualRounded == num.delta, + "number " + to_string(num.delta) + " rounded to scale " + + std::to_string(actualScale) + " is " + to_string(actualRounded)); + } + } + + auto const testCases2 = std::vector{ + { + .name = "False equivalence", + .expectedMinScale = -15, + .values = + { + makeDelta(Number{1234567890123456789, -18}), + makeDelta(Number{12345, -4}), + makeDelta(Number{1}), + }, + }, + }; + + // Unlike the first set of test cases, the values in these test could + // look equivalent if using the wrong scale. + for (auto const& tc : testCases2) + { + testcase("vault computeCoarsestScale: " + tc.name); + + auto const actualScale = ValidVault::computeCoarsestScale(tc.values); + + BEAST_EXPECTS( + actualScale == tc.expectedMinScale, + "expected: " + std::to_string(tc.expectedMinScale) + + ", actual: " + std::to_string(actualScale)); + std::optional first; + Number firstRounded; + for (auto const& num : tc.values) + { + if (!first) + { + first = num.delta; + firstRounded = roundToAsset(vaultAsset, num.delta, actualScale); + continue; + } + auto const numRounded = roundToAsset(vaultAsset, num.delta, actualScale); + BEAST_EXPECTS( + numRounded != firstRounded, + "at a scale of " + std::to_string(actualScale) + " " + to_string(num.delta) + + " == " + to_string(*first)); + } + } + } + void testConfidentialMPTTransfer() { @@ -4213,16 +4433,20 @@ public: testPermissionedDomainInvariants(defaultAmendments() - fixPermissionedDomainInvariant); testPermissionedDEX(defaultAmendments() | fixPermissionedDomainInvariant); testPermissionedDEX(defaultAmendments() - fixPermissionedDomainInvariant); + testPermissionedDEX( + (defaultAmendments() | fixPermissionedDomainInvariant) - fixSecurity3_1_3); + testPermissionedDEX( + defaultAmendments() - fixPermissionedDomainInvariant - fixSecurity3_1_3); testNoModifiedUnmodifiableFields(); testValidPseudoAccounts(); testValidLoanBroker(); testVault(); testConfidentialMPTTransfer(); testMPT(); + testVaultComputeCoarsestScale(); } }; BEAST_DEFINE_TESTSUITE(Invariants, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/LPTokenTransfer_test.cpp b/src/test/app/LPTokenTransfer_test.cpp index 3a99c8782d..2b440c67d5 100644 --- a/src/test/app/LPTokenTransfer_test.cpp +++ b/src/test/app/LPTokenTransfer_test.cpp @@ -1,9 +1,26 @@ -#include #include #include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class LPTokenTransfer_test : public jtx::AMMTest { @@ -432,5 +449,4 @@ public: }; BEAST_DEFINE_TESTSUITE(LPTokenTransfer, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/LedgerHistory_test.cpp b/src/test/app/LedgerHistory_test.cpp index 453c424251..e78bdc588f 100644 --- a/src/test/app/LedgerHistory_test.cpp +++ b/src/test/app/LedgerHistory_test.cpp @@ -1,19 +1,30 @@ -#include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include #include -#include +#include +#include +#include #include +#include +#include #include -#include -#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class LedgerHistory_test : public beast::unit_test::suite { @@ -170,5 +181,4 @@ public: BEAST_DEFINE_TESTSUITE(LedgerHistory, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/LedgerLoad_test.cpp b/src/test/app/LedgerLoad_test.cpp index c4610d0225..a97b492921 100644 --- a/src/test/app/LedgerLoad_test.cpp +++ b/src/test/app/LedgerLoad_test.cpp @@ -1,17 +1,33 @@ -#include +#include #include +#include +#include +#include +#include -#include +#include + +#include #include #include #include +#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/test/app/LedgerMaster_test.cpp b/src/test/app/LedgerMaster_test.cpp index 7a8904dbd7..625eb22ac5 100644 --- a/src/test/app/LedgerMaster_test.cpp +++ b/src/test/app/LedgerMaster_test.cpp @@ -1,10 +1,24 @@ -#include +#include #include +#include +#include +#include #include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace xrpl::test { class LedgerMaster_test : public beast::unit_test::suite { @@ -115,5 +129,4 @@ public: BEAST_DEFINE_TESTSUITE(LedgerMaster, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/LedgerReplay_test.cpp b/src/test/app/LedgerReplay_test.cpp index f9ab08e900..aec0bec592 100644 --- a/src/test/app/LedgerReplay_test.cpp +++ b/src/test/app/LedgerReplay_test.cpp @@ -1,7 +1,15 @@ -#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include #include @@ -9,16 +17,53 @@ #include #include #include +#include +#include +#include #include -#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { struct LedgerReplay_test : public beast::unit_test::suite { @@ -68,9 +113,9 @@ public: : ledgerSource(ledgerSource), ledgerSink(ledgerSink), bhvr(bhvr) { } - virtual ~MagicInboundLedgers() = default; + ~MagicInboundLedgers() override = default; - virtual std::shared_ptr + std::shared_ptr acquire(uint256 const& hash, std::uint32_t seq, InboundLedger::Reason) override { if (bhvr == InboundLedgersBehavior::DropAll) @@ -84,18 +129,18 @@ public: return {}; } - virtual void + void acquireAsync(uint256 const& hash, std::uint32_t seq, InboundLedger::Reason reason) override { } - virtual std::shared_ptr + std::shared_ptr find(LedgerHash const& hash) override { return {}; } - virtual bool + bool gotLedgerData( LedgerHash const& ledgerHash, std::shared_ptr, @@ -104,59 +149,59 @@ public: return false; } - virtual void + void gotStaleData(std::shared_ptr packet) override { } - virtual void + void logFailure(uint256 const& h, std::uint32_t seq) override { } - virtual bool + bool isFailure(uint256 const& h) override { return false; } - virtual void + void clearFailures() override { } - virtual Json::Value + Json::Value getInfo() override { return {}; } - virtual std::size_t + std::size_t fetchRate() override { return 0; } - virtual void + void onLedgerFetched() override { } - virtual void + void gotFetchPack() override { } - virtual void + void sweep() override { } - virtual void + void stop() override { } - virtual size_t + size_t cacheSize() override { return 0; @@ -653,7 +698,7 @@ public: findTask(uint256 const& hash, int totalReplay) { std::unique_lock const lock(replayer.mtx_); - auto i = std::find_if(replayer.tasks_.begin(), replayer.tasks_.end(), [&](auto const& t) { + auto i = std::ranges::find_if(replayer.tasks_, [&](auto const& t) { return t->parameter_.finishHash_ == hash && t->parameter_.totalLedgers_ == totalReplay; }); if (i == replayer.tasks_.end()) @@ -858,7 +903,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite testProofPath() { testcase("ProofPath"); - LedgerServer server(*this, {1}); + LedgerServer server(*this, {.initLedgers = 1}); auto const l = server.ledgerMaster.getClosedLedger(); { @@ -916,7 +961,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite testReplayDelta() { testcase("ReplayDelta"); - LedgerServer server(*this, {1}); + LedgerServer server(*this, {.initLedgers = 1}); auto const l = server.ledgerMaster.getClosedLedger(); { @@ -1079,7 +1124,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite auto ilBhvr = InboundLedgersBehavior::DropAll; auto peerFeature = PeerFeature::None; - NetworkOfTwo net(*this, {totalReplay + 1}, psBhvr, ilBhvr, peerFeature); + NetworkOfTwo net(*this, {.initLedgers = totalReplay + 1}, psBhvr, ilBhvr, peerFeature); auto l = net.server.ledgerMaster.getClosedLedger(); uint256 const finalHash = l->header().hash; @@ -1114,7 +1159,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite testcase("all the ledgers from InboundLedgers"); NetworkOfTwo net( *this, - {totalReplay + 1}, + {.initLedgers = totalReplay + 1}, PeerSetBehavior::DropAll, InboundLedgersBehavior::Good, PeerFeature::None); @@ -1170,7 +1215,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite NetworkOfTwo net( *this, - {totalReplay + 1}, + {.initLedgers = totalReplay + 1}, peerSetBehavior, InboundLedgersBehavior::DropAll, PeerFeature::LedgerReplayEnabled); @@ -1203,7 +1248,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite int const totalReplay = 3; NetworkOfTwo net( *this, - {totalReplay + 1}, + {.initLedgers = totalReplay + 1}, PeerSetBehavior::DropAll, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); @@ -1228,7 +1273,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite int const totalReplay = 3; NetworkOfTwo net( *this, - {totalReplay + 1 + 1}, + {.initLedgers = totalReplay + 1 + 1}, PeerSetBehavior::DropAll, InboundLedgersBehavior::DropAll, PeerFeature::LedgerReplayEnabled); @@ -1261,7 +1306,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite int const totalReplay = 3; NetworkOfTwo net( *this, - {totalReplay + 1}, + {.initLedgers = totalReplay + 1}, PeerSetBehavior::DropLedgerDeltaReply, InboundLedgersBehavior::DropAll, PeerFeature::LedgerReplayEnabled); @@ -1294,7 +1339,7 @@ struct LedgerReplayer_test : public beast::unit_test::suite int const totalReplay = 5; NetworkOfTwo net( *this, - {(totalReplay * 3) + 1}, + {.initLedgers = (totalReplay * 3) + 1}, PeerSetBehavior::Good, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); @@ -1392,7 +1437,7 @@ struct LedgerReplayerTimeout_test : public beast::unit_test::suite int const totalReplay = 3; NetworkOfTwo net( *this, - {totalReplay + 1}, + {.initLedgers = totalReplay + 1}, PeerSetBehavior::DropAll, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); @@ -1418,7 +1463,7 @@ struct LedgerReplayerTimeout_test : public beast::unit_test::suite int const totalReplay = 3; NetworkOfTwo net( *this, - {totalReplay + 1}, + {.initLedgers = totalReplay + 1}, PeerSetBehavior::DropAll, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); @@ -1457,7 +1502,7 @@ struct LedgerReplayerLong_test : public beast::unit_test::suite int const rounds = 4; NetworkOfTwo net( *this, - {(totalReplay * rounds) + 1}, + {.initLedgers = (totalReplay * rounds) + 1}, PeerSetBehavior::Good, InboundLedgersBehavior::Good, PeerFeature::LedgerReplayEnabled); @@ -1505,5 +1550,4 @@ BEAST_DEFINE_TESTSUITE_PRIO(LedgerReplayer, app, xrpl, 1); BEAST_DEFINE_TESTSUITE(LedgerReplayerTimeout, app, xrpl); BEAST_DEFINE_TESTSUITE_MANUAL(LedgerReplayerLong, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/LendingHelpers_test.cpp b/src/test/app/LendingHelpers_test.cpp index 06728413c8..1e43c45104 100644 --- a/src/test/app/LendingHelpers_test.cpp +++ b/src/test/app/LendingHelpers_test.cpp @@ -1,22 +1,19 @@ #include // DO NOT REMOVE -#include #include +#include #include -#include -#include -#include -#include +#include +#include +#include #include -#include -#include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class LendingHelpers_test : public beast::unit_test::suite { @@ -1211,5 +1208,4 @@ public: BEAST_DEFINE_TESTSUITE(LendingHelpers, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/LoadFeeTrack_test.cpp b/src/test/app/LoadFeeTrack_test.cpp index 68ebcc70a1..f6d05bf0e6 100644 --- a/src/test/app/LoadFeeTrack_test.cpp +++ b/src/test/app/LoadFeeTrack_test.cpp @@ -1,7 +1,7 @@ #include -#include -#include +#include +#include #include namespace xrpl { diff --git a/src/test/app/LoanBroker_test.cpp b/src/test/app/LoanBroker_test.cpp index 9204a17b69..55818b131c 100644 --- a/src/test/app/LoanBroker_test.cpp +++ b/src/test/app/LoanBroker_test.cpp @@ -1,10 +1,63 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class LoanBroker_test : public beast::unit_test::suite { @@ -1798,5 +1851,4 @@ public: BEAST_DEFINE_TESTSUITE(LoanBroker, tx, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Loan_test.cpp b/src/test/app/Loan_test.cpp index bf46f886bd..8d919d7dd3 100644 --- a/src/test/app/Loan_test.cpp +++ b/src/test/app/Loan_test.cpp @@ -1,19 +1,86 @@ #include // -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class Loan_test : public beast::unit_test::suite { @@ -114,8 +181,11 @@ protected: jtx::PrettyAsset const& asset_, Keylet const& brokerKeylet_, Keylet const& vaultKeylet_, - BrokerParameters const& p) - : asset(asset_), brokerID(brokerKeylet_.key), vaultID(vaultKeylet_.key), params(p) + BrokerParameters p) + : asset(asset_) + , brokerID(brokerKeylet_.key) + , vaultID(vaultKeylet_.key) + , params(std::move(p)) { } @@ -2679,7 +2749,7 @@ protected: env(manage(lender, loanKeylet.key, tfLoanDefault), ter(tecNO_PERMISSION)); }); -#if LOANTODO +#if LOAN_TODO // TODO /* @@ -3603,10 +3673,9 @@ protected: // From FIND-001 testcase << "Batch Bypass Counterparty"; - bool const lendingBatchEnabled = !std::any_of( - Batch::disabledTxTypes.begin(), Batch::disabledTxTypes.end(), [](auto const& disabled) { - return disabled == ttLOAN_BROKER_SET; - }); + bool const lendingBatchEnabled = !std::ranges::any_of( + Batch::disabledTxTypes, + [](auto const& disabled) { return disabled == ttLOAN_BROKER_SET; }); using namespace jtx; using namespace std::chrono_literals; @@ -5344,7 +5413,7 @@ protected: } } -#if LOANTODO +#if LOAN_TODO void testLoanPayLateFullPaymentBypassesPenalties() { @@ -6999,14 +7068,145 @@ protected: BEAST_EXPECT(afterSecondCoverAvailable == 0); } + // Tests that vault withdrawals work correctly when the vault has unrealized + // loss from an impaired loan, ensuring the invariant check properly + // accounts for the loss. + void + testWithdrawReflectsUnrealizedLoss() + { + using namespace jtx; + using namespace loan; + using namespace std::chrono_literals; + + testcase("Vault withdraw reflects sfLossUnrealized"); + + // Test constants + static constexpr std::int64_t INITIAL_FUNDING = 1'000'000; + static constexpr std::int64_t LENDER_INITIAL_IOU = 5'000'000; + static constexpr std::int64_t DEPOSITOR_INITIAL_IOU = 1'000'000; + static constexpr std::int64_t BORROWER_INITIAL_IOU = 100'000; + static constexpr std::int64_t DEPOSIT_AMOUNT = 5'000; + static constexpr std::int64_t PRINCIPAL_AMOUNT = 99; + static constexpr std::uint64_t EXPECTED_SHARES_PER_DEPOSITOR = 5'000'000'000; + static constexpr std::uint32_t PAYMENT_INTERVAL = 600; + static constexpr std::uint32_t PAYMENT_TOTAL = 2; + + Env env(*this, all); + + // Setup accounts + Account const issuer{"issuer"}; + Account const lender{"lender"}; + Account const depositorA{"lpA"}; + Account const depositorB{"lpB"}; + Account const borrower{"borrowerA"}; + + env.fund(XRP(INITIAL_FUNDING), issuer, lender, depositorA, depositorB, borrower); + env.close(); + + // Setup trust lines + PrettyAsset const iouAsset = issuer[iouCurrency]; + env(trust(lender, iouAsset(10'000'000))); + env(trust(depositorA, iouAsset(10'000'000))); + env(trust(depositorB, iouAsset(10'000'000))); + env(trust(borrower, iouAsset(10'000'000))); + env.close(); + + // Fund accounts with IOUs + env(pay(issuer, lender, iouAsset(LENDER_INITIAL_IOU))); + env(pay(issuer, depositorA, iouAsset(DEPOSITOR_INITIAL_IOU))); + env(pay(issuer, depositorB, iouAsset(DEPOSITOR_INITIAL_IOU))); + env(pay(issuer, borrower, iouAsset(BORROWER_INITIAL_IOU))); + env.close(); + + // Create vault and broker, then add deposits from two depositors + auto const broker = createVaultAndBroker(env, iouAsset, lender); + Vault v{env}; + + env(v.deposit({ + .depositor = depositorA, + .id = broker.vaultKeylet().key, + .amount = iouAsset(DEPOSIT_AMOUNT), + }), + ter(tesSUCCESS)); + env(v.deposit({ + .depositor = depositorB, + .id = broker.vaultKeylet().key, + .amount = iouAsset(DEPOSIT_AMOUNT), + }), + ter(tesSUCCESS)); + env.close(); + + // Create a loan + auto const sleBroker = env.le(keylet::loanbroker(broker.brokerID)); + if (!BEAST_EXPECT(sleBroker)) + return; + + auto const loanKeylet = keylet::loan(broker.brokerID, sleBroker->at(sfLoanSequence)); + + env(set(borrower, broker.brokerID, PRINCIPAL_AMOUNT), + sig(sfCounterpartySignature, lender), + paymentTotal(PAYMENT_TOTAL), + paymentInterval(PAYMENT_INTERVAL), + fee(env.current()->fees().base * 2), + ter(tesSUCCESS)); + env.close(); + + // Impair the loan to create unrealized loss + env(manage(lender, loanKeylet.key, tfLoanImpair), ter(tesSUCCESS)); + env.close(); + + // Verify unrealized loss is recorded in the vault + auto const vaultAfterImpair = env.le(broker.vaultKeylet()); + if (!BEAST_EXPECT(vaultAfterImpair)) + return; + + BEAST_EXPECT( + vaultAfterImpair->at(sfLossUnrealized) == broker.asset(PRINCIPAL_AMOUNT).value()); + + // Helper to get share balance for a depositor + auto const shareAsset = vaultAfterImpair->at(sfShareMPTID); + auto const getShareBalance = [&](Account const& depositor) -> std::uint64_t { + auto const token = env.le(keylet::mptoken(shareAsset, depositor.id())); + return token ? token->getFieldU64(sfMPTAmount) : 0; + }; + + // Verify both depositors have equal shares + auto const sharesLpA = getShareBalance(depositorA); + auto const sharesLpB = getShareBalance(depositorB); + BEAST_EXPECT(sharesLpA == EXPECTED_SHARES_PER_DEPOSITOR); + BEAST_EXPECT(sharesLpB == EXPECTED_SHARES_PER_DEPOSITOR); + BEAST_EXPECT(sharesLpA == sharesLpB); + + // Helper to attempt withdrawal + auto const attemptWithdrawShares = [&](Account const& depositor, + std::uint64_t shareAmount, + TER expected) { + STAmount const shareAmt{MPTIssue{shareAsset}, Number(shareAmount)}; + env(v.withdraw( + {.depositor = depositor, .id = broker.vaultKeylet().key, .amount = shareAmt}), + ter(expected)); + env.close(); + }; + + // Regression test: Both depositors should successfully withdraw despite + // unrealized loss. Previously failed with invariant violation: + // "withdrawal must change vault and destination balance by equal + // amount". This was caused by sharesToAssetsWithdraw rounding down, + // creating a mismatch where vaultDeltaAssets * -1 != destinationDelta + // when unrealized loss exists. + attemptWithdrawShares(depositorA, sharesLpA, tesSUCCESS); + attemptWithdrawShares(depositorB, sharesLpB, tesSUCCESS); + } + public: void run() override { -#if LOANTODO +#if LOAN_TODO testLoanPayLateFullPaymentBypassesPenalties(); testLoanCoverMinimumRoundingExploit(); #endif + testWithdrawReflectsUnrealizedLoss(); testInvalidLoanSet(); auto const all = jtx::testable_amendments(); @@ -7185,5 +7385,4 @@ BEAST_DEFINE_TESTSUITE(Loan, tx, xrpl); BEAST_DEFINE_TESTSUITE_MANUAL(LoanBatch, tx, xrpl); BEAST_DEFINE_TESTSUITE_MANUAL(LoanArbitrary, tx, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/MPToken_test.cpp b/src/test/app/MPToken_test.cpp index 4ec6162ea1..314cfc2f7d 100644 --- a/src/test/app/MPToken_test.cpp +++ b/src/test/app/MPToken_test.cpp @@ -1,26 +1,72 @@ -#include #include #include +#include +#include #include +#include +#include // IWYU pragma: keep #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include #include #include +#include +#include #include -#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #include -#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class MPToken_test : public beast::unit_test::suite { @@ -2997,45 +3043,83 @@ class MPToken_test : public beast::unit_test::suite testcase("Mutate MPTRequireAuth"); using namespace test::jtx; - Env env{*this, features}; - Account const alice("alice"); - Account const bob("bob"); + // test mutating RequireAuth flag on the issuance and its effect on payment authorization + { + Env env{*this, features}; + Account const alice("alice"); + Account const bob("bob"); - MPTTester mptAlice(env, alice, {.holders = {bob}}); - mptAlice.create( - {.ownerCount = 1, - .flags = tfMPTRequireAuth, - .mutableFlags = tmfMPTCanMutateRequireAuth}); + MPTTester mptAlice(env, alice, {.holders = {bob}}); + mptAlice.create( + {.ownerCount = 1, + .flags = tfMPTRequireAuth, + .mutableFlags = tmfMPTCanMutateRequireAuth}); - mptAlice.authorize({.account = bob}); - mptAlice.authorize({.account = alice, .holder = bob}); + mptAlice.authorize({.account = bob}); + mptAlice.authorize({.account = alice, .holder = bob}); - // Pay to bob - mptAlice.pay(alice, bob, 1000); + // Pay to bob + mptAlice.pay(alice, bob, 1000); - // Unauthorize bob - mptAlice.authorize({.account = alice, .holder = bob, .flags = tfMPTUnauthorize}); + // Unauthorize bob + mptAlice.authorize({.account = alice, .holder = bob, .flags = tfMPTUnauthorize}); - // Can not pay to bob - mptAlice.pay(bob, alice, 100, tecNO_AUTH); + // Can not pay to bob + mptAlice.pay(bob, alice, 100, tecNO_AUTH); - // Clear RequireAuth - mptAlice.set({.account = alice, .mutableFlags = tmfMPTClearRequireAuth}); + // Clear RequireAuth + mptAlice.set({.account = alice, .mutableFlags = tmfMPTClearRequireAuth}); - // Can pay to bob - mptAlice.pay(alice, bob, 1000); + // Can pay to bob + mptAlice.pay(alice, bob, 1000); - // Set RequireAuth again - mptAlice.set({.account = alice, .mutableFlags = tmfMPTSetRequireAuth}); + // Set RequireAuth again + mptAlice.set({.account = alice, .mutableFlags = tmfMPTSetRequireAuth}); - // Can not pay to bob since he is not authorized - mptAlice.pay(bob, alice, 100, tecNO_AUTH); + // Can not pay to bob since he is not authorized + mptAlice.pay(bob, alice, 100, tecNO_AUTH); - // Authorize bob again - mptAlice.authorize({.account = alice, .holder = bob}); + // Authorize bob again + mptAlice.authorize({.account = alice, .holder = bob}); - // Can pay to bob again - mptAlice.pay(alice, bob, 100); + // Can pay to bob again + mptAlice.pay(alice, bob, 100); + } + + // Cannot clear RequireAuth when a DomainID is set on the issuance + { + Account const alice{"alice"}; + Account const bob{"bob"}; + Account const credIssuer{"credIssuer"}; + pdomain::Credentials const credentials{ + {.issuer = credIssuer, .credType = "credential"}}; + + Env env{*this, features}; + env.fund(XRP(1000), credIssuer); + env.close(); + + env(pdomain::setTx(credIssuer, credentials)); + env.close(); + auto const domainId = pdomain::getNewDomain(env.meta()); + + MPTTester mptAlice(env, alice, {.holders = {bob}}); + mptAlice.create({ + .ownerCount = 1, + .flags = tfMPTRequireAuth, + .mutableFlags = tmfMPTCanMutateRequireAuth, + .domainID = domainId, + }); + + // Clearing RequireAuth while a DomainID is present must be rejected, + mptAlice.set({ + .account = alice, + .mutableFlags = tmfMPTClearRequireAuth, + .err = tecNO_PERMISSION, + }); + + // Setting RequireAuth (already set) is still allowed, though it has no effect. + mptAlice.set({.account = alice, .mutableFlags = tmfMPTSetRequireAuth}); + } } void @@ -6730,5 +6814,4 @@ public: BEAST_DEFINE_TESTSUITE_PRIO(MPToken, app, xrpl, 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Manifest_test.cpp b/src/test/app/Manifest_test.cpp index c2f789e80c..1025b73fe8 100644 --- a/src/test/app/Manifest_test.cpp +++ b/src/test/app/Manifest_test.cpp @@ -1,23 +1,43 @@ -#include +#include #include #include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include -#include +#include #include #include -#include -#include -#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class Manifest_test : public beast::unit_test::suite { @@ -76,7 +96,7 @@ public: { } } - ~Manifest_test() + ~Manifest_test() override { try { @@ -217,7 +237,7 @@ public: return result; }; auto sort = [](std::vector mv) -> std::vector { - std::sort(mv.begin(), mv.end(), [](Manifest const* lhs, Manifest const* rhs) { + std::ranges::sort(mv, [](Manifest const* lhs, Manifest const* rhs) { return lhs->serialized < rhs->serialized; }); return mv; @@ -930,5 +950,4 @@ public: BEAST_DEFINE_TESTSUITE(Manifest, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/MultiSign_test.cpp b/src/test/app/MultiSign_test.cpp index 7a5a49ca9b..f41042644f 100644 --- a/src/test/app/MultiSign_test.cpp +++ b/src/test/app/MultiSign_test.cpp @@ -1,12 +1,51 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include + +namespace xrpl::test { class MultiSign_test : public beast::unit_test::suite { @@ -323,7 +362,7 @@ public: env.require(owners(alice, 1)); msig phantoms{bogie, demon}; - std::reverse(phantoms.signers.begin(), phantoms.signers.end()); + std::ranges::reverse(phantoms.signers); std::uint32_t const aliceSeq = env.seq(alice); env(noop(alice), phantoms, @@ -1162,7 +1201,7 @@ public: STTx local = *(tx.stx); // Unsort the Signers array. auto& signers = local.peekFieldArray(sfSigners); - std::reverse(signers.begin(), signers.end()); + std::ranges::reverse(signers); // Signature should fail. auto const info = submitSTTx(local); BEAST_EXPECT( @@ -1524,5 +1563,4 @@ public: BEAST_DEFINE_TESTSUITE(MultiSign, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/NFTokenAuth_test.cpp b/src/test/app/NFTokenAuth_test.cpp index e64935c8ab..2542f2eb36 100644 --- a/src/test/app/NFTokenAuth_test.cpp +++ b/src/test/app/NFTokenAuth_test.cpp @@ -1,6 +1,31 @@ -#include -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/test/app/NFTokenBurn_test.cpp b/src/test/app/NFTokenBurn_test.cpp index 99b1832466..08d7b4305e 100644 --- a/src/test/app/NFTokenBurn_test.cpp +++ b/src/test/app/NFTokenBurn_test.cpp @@ -1,11 +1,44 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include #include +#include namespace xrpl { @@ -367,7 +400,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Sort the NFTs so they are listed in storage order, not // creation order. - std::sort(nfts.begin(), nfts.end()); + std::ranges::sort(nfts); // Verify that the ledger does indeed contain exactly three pages // of NFTs with 32 entries in each page. @@ -621,7 +654,7 @@ class NFTokenBurn_test : public beast::unit_test::suite return; // Burn all the tokens in the first page. - std::reverse(nfts.begin(), nfts.end()); + std::ranges::reverse(nfts); for (int i = 0; i < 32; ++i) { env(token::burn(alice, {nfts.back()})); @@ -649,7 +682,7 @@ class NFTokenBurn_test : public beast::unit_test::suite BEAST_EXPECT(!lastNFTokenPage->isFieldPresent(sfNextPageMin)); // Burn all the tokens in the last page. - std::reverse(nfts.begin(), nfts.end()); + std::ranges::reverse(nfts); for (int i = 0; i < 32; ++i) { env(token::burn(alice, {nfts.back()})); @@ -1024,7 +1057,7 @@ class NFTokenBurn_test : public beast::unit_test::suite // Sort the NFTs so they are listed in storage order, not // creation order. - std::sort(nfts.begin(), nfts.end()); + std::ranges::sort(nfts); // Verify that the ledger does indeed contain exactly three pages // of NFTs with 32 entries in each page. diff --git a/src/test/app/NFTokenDir_test.cpp b/src/test/app/NFTokenDir_test.cpp index 6ed5912034..5764e87f76 100644 --- a/src/test/app/NFTokenDir_test.cpp +++ b/src/test/app/NFTokenDir_test.cpp @@ -1,11 +1,38 @@ -#include -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include + +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include namespace xrpl { @@ -121,7 +148,7 @@ class NFTokenDir_test : public beast::unit_test::suite } // Buyer accepts all of the offers in reverse order. - std::reverse(offers.begin(), offers.end()); + std::ranges::reverse(offers); for (uint256 const& offer : offers) { env(token::acceptSellOffer(buyer, offer)); @@ -230,7 +257,7 @@ class NFTokenDir_test : public beast::unit_test::suite { uint256 ownedID; BEAST_EXPECT(ownedID.parseHex(ownedNFT[sfNFTokenID.jsonName].asString())); - auto const foundIter = std::find(nftIDs.begin(), nftIDs.end(), ownedID); + auto const foundIter = std::ranges::find(nftIDs, ownedID); // Assuming we find the NFT, erase it so we know it's been // found and can't be found again. @@ -438,7 +465,7 @@ class NFTokenDir_test : public beast::unit_test::suite { uint256 ownedID; BEAST_EXPECT(ownedID.parseHex(ownedNFT[sfNFTokenID.jsonName].asString())); - auto const foundIter = std::find(nftIDs.begin(), nftIDs.end(), ownedID); + auto const foundIter = std::ranges::find(nftIDs, ownedID); // Assuming we find the NFT, erase it so we know it's been // found and can't be found again. @@ -676,7 +703,7 @@ class NFTokenDir_test : public beast::unit_test::suite { uint256 ownedID; BEAST_EXPECT(ownedID.parseHex(ownedNFT[sfNFTokenID.jsonName].asString())); - auto const foundIter = std::find(nftIDs.begin(), nftIDs.end(), ownedID); + auto const foundIter = std::ranges::find(nftIDs, ownedID); // Assuming we find the NFT, erase it so we know it's been found // and can't be found again. diff --git a/src/test/app/NFToken_test.cpp b/src/test/app/NFToken_test.cpp index 5bdd686512..40934cc095 100644 --- a/src/test/app/NFToken_test.cpp +++ b/src/test/app/NFToken_test.cpp @@ -1,11 +1,56 @@ -#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include + +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -2474,9 +2519,9 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite sortedNFTs.reserve(nfts.size()); for (std::size_t i = 0; i < nfts.size(); ++i) sortedNFTs.push_back(nfts[i]); - std::sort( - sortedNFTs.begin(), - sortedNFTs.end(), + std::ranges::sort( + sortedNFTs, + [](Json::Value const& lhs, Json::Value const& rhs) { return lhs[jss::nft_serial] < rhs[jss::nft_serial]; }); @@ -5578,7 +5623,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // The new NFT minted will not have the same ID // as any of the NFTs authorized minter minted - BEAST_EXPECT(std::find(nftIDs.begin(), nftIDs.end(), remintNFTokenID) == nftIDs.end()); + BEAST_EXPECT(std::ranges::find(nftIDs, remintNFTokenID) == nftIDs.end()); } // When an account mints and burns a batch of NFTokens using tickets, @@ -5677,7 +5722,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // The new NFT minted will not have the same ID // as any of the NFTs authorized minter minted using tickets - BEAST_EXPECT(std::find(nftIDs.begin(), nftIDs.end(), remintNFTokenID) == nftIDs.end()); + BEAST_EXPECT(std::ranges::find(nftIDs, remintNFTokenID) == nftIDs.end()); } // When an authorized minter mints and burns a batch of NFTokens using // tickets, issuer's account needs to wait a longer time before it can @@ -5780,7 +5825,7 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite // The new NFT minted will not have the same ID // as one of NFTs authorized minter minted using tickets - BEAST_EXPECT(std::find(nftIDs.begin(), nftIDs.end(), remintNFTokenID) == nftIDs.end()); + BEAST_EXPECT(std::ranges::find(nftIDs, remintNFTokenID) == nftIDs.end()); } void @@ -6098,8 +6143,8 @@ class NFTokenBaseUtil_test : public beast::unit_test::suite }); // Sort both array to prepare for comparison - std::sort(metaIDs.begin(), metaIDs.end()); - std::sort(actualNftIDs.begin(), actualNftIDs.end()); + std::ranges::sort(metaIDs); + std::ranges::sort(actualNftIDs); // Make sure the expect number of NFTs is correct BEAST_EXPECT(metaIDs.size() == actualNftIDs.size()); diff --git a/src/test/app/NetworkID_test.cpp b/src/test/app/NetworkID_test.cpp index 17245f7ee5..5ac97b8df3 100644 --- a/src/test/app/NetworkID_test.cpp +++ b/src/test/app/NetworkID_test.cpp @@ -1,13 +1,27 @@ // Copyright (c) 2020 Dev Null Productions -#include #include +#include +#include +#include +#include +#include +#include + +#include +#include #include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { class NetworkID_test : public beast::unit_test::suite { @@ -141,5 +155,4 @@ public: BEAST_DEFINE_TESTSUITE(NetworkID, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/NetworkOPs_test.cpp b/src/test/app/NetworkOPs_test.cpp index a176279444..e6673dc2f5 100644 --- a/src/test/app/NetworkOPs_test.cpp +++ b/src/test/app/NetworkOPs_test.cpp @@ -1,11 +1,21 @@ -#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include -namespace xrpl { -namespace test { +#include + +namespace xrpl::test { class NetworkOPs_test : public beast::unit_test::suite { @@ -51,5 +61,4 @@ public: BEAST_DEFINE_TESTSUITE(NetworkOPs, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/OfferMPT_test.cpp b/src/test/app/OfferMPT_test.cpp index 12d7b74c0a..b07fe043d2 100644 --- a/src/test/app/OfferMPT_test.cpp +++ b/src/test/app/OfferMPT_test.cpp @@ -1,14 +1,57 @@ -#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class OfferMPT_test : public beast::unit_test::suite { @@ -1989,37 +2032,37 @@ public: // clang-format off TestData const tests[]{ // acct fundXrp bookAmt preTrust offerAmt tec spentXrp balanceUSD offers owners scale - {"ann", reserve(env, 0) + 0 * f, 1, noPreAuth, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, // Account is at the reserve, and will dip below once fees are subtracted. - {"bev", reserve(env, 0) + 1 * f, 1, noPreAuth, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, // Account has just enough for the reserve and the fee. - {"cam", reserve(env, 0) + 2 * f, 0, noPreAuth, 1000, tecINSUF_RESERVE_OFFER, f, USD( 0), 0, 0}, // Account has enough for the reserve, the fee and the offer, and a bit more, but not enough for the reserve after the offer is placed. - {"deb", reserve(env, 0) + 2 * f, 1, noPreAuth, 1000, tesSUCCESS, 2 * f, USD( 1), 0, 1, 100000}, // Account has enough to buy a little USD then the offer runs dry. - {"eve", reserve(env, 1) + 0 * f, 0, noPreAuth, 1000, tesSUCCESS, f, USD( 0), 1, 1}, // No offer to cross - {"flo", reserve(env, 1) + 0 * f, 1, noPreAuth, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 0, 1}, - {"gay", reserve(env, 1) + 1 * f, 1000, noPreAuth, 1000, tesSUCCESS, XRP( 50) + f, USD( 50), 0, 1}, - {"hye", XRP(1000) + 1 * f, 1000, noPreAuth, 1000, tesSUCCESS, XRP( 800) + f, USD( 800), 0, 1}, - {"ivy", XRP( 1) + reserve(env, 1) + 1 * f, 1, noPreAuth, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 0, 1}, - {"joy", XRP( 1) + reserve(env, 2) + 1 * f, 1, noPreAuth, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 2}, - {"kim", XRP( 900) + reserve(env, 2) + 1 * f, 999, noPreAuth, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1}, - {"liz", XRP( 998) + reserve(env, 0) + 1 * f, 999, noPreAuth, 1000, tesSUCCESS, XRP( 998) + f, USD( 998), 0, 1}, - {"meg", XRP( 998) + reserve(env, 1) + 1 * f, 999, noPreAuth, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1}, - {"nia", XRP( 998) + reserve(env, 2) + 1 * f, 999, noPreAuth, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 1, 2}, - {"ova", XRP( 999) + reserve(env, 0) + 1 * f, 1000, noPreAuth, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1}, - {"pam", XRP( 999) + reserve(env, 1) + 1 * f, 1000, noPreAuth, 1000, tesSUCCESS, XRP(1000) + f, USD( 1000), 0, 1}, - {"rae", XRP( 999) + reserve(env, 2) + 1 * f, 1000, noPreAuth, 1000, tesSUCCESS, XRP(1000) + f, USD( 1000), 0, 1}, - {"sue", XRP(1000) + reserve(env, 2) + 1 * f, 0, noPreAuth, 1000, tesSUCCESS, f, USD( 0), 1, 1}, + {.account="ann", .fundXrp=reserve(env, 0) + 0 * f, .bookAmount=1, .preAuth=noPreAuth, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, // Account is at the reserve, and will dip below once fees are subtracted. + {.account="bev", .fundXrp=reserve(env, 0) + 1 * f, .bookAmount=1, .preAuth=noPreAuth, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, // Account has just enough for the reserve and the fee. + {.account="cam", .fundXrp=reserve(env, 0) + 2 * f, .bookAmount=0, .preAuth=noPreAuth, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, // Account has enough for the reserve, the fee and the offer, and a bit more, but not enough for the reserve after the offer is placed. + {.account="deb", .fundXrp=reserve(env, 0) + 2 * f, .bookAmount=1, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=2 * f, .balanceUsd=USD( 1), .offers=0, .owners=1, .scale=100000}, // Account has enough to buy a little USD then the offer runs dry. + {.account="eve", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=0, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=f, .balanceUsd=USD( 0), .offers=1, .owners=1}, // No offer to cross + {.account="flo", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=1, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=0, .owners=1}, + {.account="gay", .fundXrp=reserve(env, 1) + 1 * f, .bookAmount=1000, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 50) + f, .balanceUsd=USD( 50), .offers=0, .owners=1}, + {.account="hye", .fundXrp=XRP(1000) + 1 * f, .bookAmount=1000, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 800) + f, .balanceUsd=USD( 800), .offers=0, .owners=1}, + {.account="ivy", .fundXrp=XRP( 1) + reserve(env, 1) + 1 * f, .bookAmount=1, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=0, .owners=1}, + {.account="joy", .fundXrp=XRP( 1) + reserve(env, 2) + 1 * f, .bookAmount=1, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=1, .owners=2}, + {.account="kim", .fundXrp=XRP( 900) + reserve(env, 2) + 1 * f, .bookAmount=999, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=0, .owners=1}, + {.account="liz", .fundXrp=XRP( 998) + reserve(env, 0) + 1 * f, .bookAmount=999, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 998) + f, .balanceUsd=USD( 998), .offers=0, .owners=1}, + {.account="meg", .fundXrp=XRP( 998) + reserve(env, 1) + 1 * f, .bookAmount=999, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=0, .owners=1}, + {.account="nia", .fundXrp=XRP( 998) + reserve(env, 2) + 1 * f, .bookAmount=999, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=1, .owners=2}, + {.account="ova", .fundXrp=XRP( 999) + reserve(env, 0) + 1 * f, .bookAmount=1000, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=0, .owners=1}, + {.account="pam", .fundXrp=XRP( 999) + reserve(env, 1) + 1 * f, .bookAmount=1000, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(1000) + f, .balanceUsd=USD( 1000), .offers=0, .owners=1}, + {.account="rae", .fundXrp=XRP( 999) + reserve(env, 2) + 1 * f, .bookAmount=1000, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(1000) + f, .balanceUsd=USD( 1000), .offers=0, .owners=1}, + {.account="sue", .fundXrp=XRP(1000) + reserve(env, 2) + 1 * f, .bookAmount=0, .preAuth=noPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=f, .balanceUsd=USD( 0), .offers=1, .owners=1}, //---------------- Pre-created MPT --------------------- // Unlike from IOU, an issuer can't pre-create MPToken for an account (see similar tests in Offer_test.cpp) - {"ned", reserve(env, 1) + 0 * f, 1, acctPreAuth, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"ole", reserve(env, 1) + 1 * f, 1, acctPreAuth, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"pat", reserve(env, 1) + 2 * f, 0, acctPreAuth, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"quy", reserve(env, 1) + 2 * f, 1, acctPreAuth, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"ron", reserve(env, 1) + 3 * f, 0, acctPreAuth, 1000, tecINSUF_RESERVE_OFFER, 2 * f, USD( 0), 0, 1}, - {"syd", reserve(env, 1) + 3 * f, 1, acctPreAuth, 1000, tesSUCCESS, 3 * f, USD( 1), 0, 1, 100000}, - {"ted", XRP( 20) + reserve(env, 1) + 2 * f, 1000, acctPreAuth, 1000, tesSUCCESS, XRP(20) + 2 * f, USD( 20), 0, 1}, - {"uli", reserve(env, 2) + 0 * f, 0, acctPreAuth, 1000, tecINSUF_RESERVE_OFFER, 2 * f, USD( 0), 0, 1}, - {"vic", reserve(env, 2) + 0 * f, 1, acctPreAuth, 1000, tesSUCCESS, XRP( 1) + 2 * f, USD( 1), 0, 1}, - {"wes", reserve(env, 2) + 1 * f, 0, acctPreAuth, 1000, tesSUCCESS, 2 * f, USD( 0), 1, 2}, - {"xan", reserve(env, 2) + 1 * f, 1, acctPreAuth, 1000, tesSUCCESS, XRP( 1) + 2 * f, USD( 1), 1, 2}, + {.account="ned", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=1, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="ole", .fundXrp=reserve(env, 1) + 1 * f, .bookAmount=1, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="pat", .fundXrp=reserve(env, 1) + 2 * f, .bookAmount=0, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="quy", .fundXrp=reserve(env, 1) + 2 * f, .bookAmount=1, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="ron", .fundXrp=reserve(env, 1) + 3 * f, .bookAmount=0, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="syd", .fundXrp=reserve(env, 1) + 3 * f, .bookAmount=1, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=3 * f, .balanceUsd=USD( 1), .offers=0, .owners=1, .scale=100000}, + {.account="ted", .fundXrp=XRP( 20) + reserve(env, 1) + 2 * f, .bookAmount=1000, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(20) + 2 * f, .balanceUsd=USD( 20), .offers=0, .owners=1}, + {.account="uli", .fundXrp=reserve(env, 2) + 0 * f, .bookAmount=0, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="vic", .fundXrp=reserve(env, 2) + 0 * f, .bookAmount=1, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + 2 * f, .balanceUsd=USD( 1), .offers=0, .owners=1}, + {.account="wes", .fundXrp=reserve(env, 2) + 1 * f, .bookAmount=0, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=1, .owners=2}, + {.account="xan", .fundXrp=reserve(env, 2) + 1 * f, .bookAmount=1, .preAuth=acctPreAuth, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + 2 * f, .balanceUsd=USD( 1), .offers=1, .owners=2}, }; // clang-format on @@ -2443,34 +2486,34 @@ public: // Constructor with takerGets/takerPays TestData( - std::string&& account_, // Account operated on - STAmount const& fundXrp_, // XRP acct funded with - STAmount const& fundUSD_, // USD acct funded with - STAmount const& gwGets_, // gw's offer - STAmount const& gwPays_, // - STAmount const& acctGets_, // acct's offer - STAmount const& acctPays_, // - TER tec_, // Returned tec code - STAmount const& spentXrp_, // Amount removed from fundXrp - STAmount const& finalUsd_, // Final USD balance on acct - int offers_, // Offers on acct - int owners_, // Owners on acct - STAmount const& takerGets_, // Remainder of acct's offer - STAmount const& takerPays_) // + std::string&& account_, // Account operated on + STAmount fundXrp_, // XRP acct funded with + STAmount fundUSD_, // USD acct funded with + STAmount gwGets_, // gw's offer + STAmount gwPays_, // + STAmount acctGets_, // acct's offer + STAmount acctPays_, // + TER tec_, // Returned tec code + STAmount spentXrp_, // Amount removed from fundXrp + STAmount finalUsd_, // Final USD balance on acct + int offers_, // Offers on acct + int owners_, // Owners on acct + STAmount takerGets_, // Remainder of acct's offer + STAmount takerPays_) // : account(std::move(account_)) - , fundXrp(fundXrp_) - , fundUSD(fundUSD_) - , gwGets(gwGets_) - , gwPays(gwPays_) - , acctGets(acctGets_) - , acctPays(acctPays_) + , fundXrp(std::move(fundXrp_)) + , fundUSD(std::move(fundUSD_)) + , gwGets(std::move(gwGets_)) + , gwPays(std::move(gwPays_)) + , acctGets(std::move(acctGets_)) + , acctPays(std::move(acctPays_)) , tec(tec_) - , spentXrp(spentXrp_) - , finalUsd(finalUsd_) + , spentXrp(std::move(spentXrp_)) + , finalUsd(std::move(finalUsd_)) , offers(offers_) , owners(owners_) - , takerGets(takerGets_) - , takerPays(takerPays_) + , takerGets(std::move(takerGets_)) + , takerPays(std::move(takerPays_)) { } @@ -4107,9 +4150,8 @@ public: sortedOffersOnAccount(jtx::Env& env, jtx::Account const& acct) { std::vector> offers{offersOnAccount(env, acct)}; - std::sort( - offers.begin(), - offers.end(), + std::ranges::sort( + offers, [](std::shared_ptr const& rhs, std::shared_ptr const& lhs) { return (*rhs)[sfSequence] < (*lhs)[sfSequence]; }); @@ -4727,5 +4769,4 @@ public: BEAST_DEFINE_TESTSUITE_PRIO(OfferMPT, tx, xrpl, 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/OfferStream_test.cpp b/src/test/app/OfferStream_test.cpp index becb190513..9cd3724b7b 100644 --- a/src/test/app/OfferStream_test.cpp +++ b/src/test/app/OfferStream_test.cpp @@ -1,5 +1,4 @@ -#include -#include +#include namespace xrpl { diff --git a/src/test/app/Offer_test.cpp b/src/test/app/Offer_test.cpp index 1aeeb728f2..0c00c91f63 100644 --- a/src/test/app/Offer_test.cpp +++ b/src/test/app/Offer_test.cpp @@ -1,13 +1,60 @@ -#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class OfferBaseUtil_test : public beast::unit_test::suite { @@ -2199,45 +2246,45 @@ public: // clang-format off TestData const tests[]{ // acct fundXrp bookAmt preTrust offerAmount tec spentXrp balanceUSD offers owners - {"ann", reserve(env, 0) + 0 * f, 1, noPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, // Account is at the reserve, and will dip below once fees are subtracted. - {"bev", reserve(env, 0) + 1 * f, 1, noPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, // Account has just enough for the reserve and the fee. - {"cam", reserve(env, 0) + 2 * f, 0, noPreTrust, 1000, tecINSUF_RESERVE_OFFER, f, USD( 0), 0, 0}, // Account has enough for the reserve, the fee and the offer, and a bit more, but not enough for the reserve after the offer is placed. - {"deb", drops(10) + reserve(env, 0) + 1 * f, 1, noPreTrust, 1000, tesSUCCESS, drops(10) + f, USD(0.00001), 0, 1}, // Account has enough to buy a little USD then the offer runs dry. - {"eve", reserve(env, 1) + 0 * f, 0, noPreTrust, 1000, tesSUCCESS, f, USD( 0), 1, 1}, // No offer to cross - {"flo", reserve(env, 1) + 0 * f, 1, noPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 0, 1}, - {"gay", reserve(env, 1) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP( 50) + f, USD( 50), 0, 1}, - {"hye", XRP(1000) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP( 800) + f, USD( 800), 0, 1}, - {"ivy", XRP( 1) + reserve(env, 1) + 1 * f, 1, noPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 0, 1}, - {"joy", XRP( 1) + reserve(env, 2) + 1 * f, 1, noPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 2}, - {"kim", XRP( 900) + reserve(env, 2) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1}, - {"liz", XRP( 998) + reserve(env, 0) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 998) + f, USD( 998), 0, 1}, - {"meg", XRP( 998) + reserve(env, 1) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1}, - {"nia", XRP( 998) + reserve(env, 2) + 1 * f, 999, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 1, 2}, - {"ova", XRP( 999) + reserve(env, 0) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP( 999) + f, USD( 999), 0, 1}, - {"pam", XRP( 999) + reserve(env, 1) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP(1000) + f, USD( 1000), 0, 1}, - {"rae", XRP( 999) + reserve(env, 2) + 1 * f, 1000, noPreTrust, 1000, tesSUCCESS, XRP(1000) + f, USD( 1000), 0, 1}, - {"sue", XRP(1000) + reserve(env, 2) + 1 * f, 0, noPreTrust, 1000, tesSUCCESS, f, USD( 0), 1, 1}, + {.account="ann", .fundXrp=reserve(env, 0) + 0 * f, .bookAmount=1, .preTrust=noPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, // Account is at the reserve, and will dip below once fees are subtracted. + {.account="bev", .fundXrp=reserve(env, 0) + 1 * f, .bookAmount=1, .preTrust=noPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, // Account has just enough for the reserve and the fee. + {.account="cam", .fundXrp=reserve(env, 0) + 2 * f, .bookAmount=0, .preTrust=noPreTrust, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, // Account has enough for the reserve, the fee and the offer, and a bit more, but not enough for the reserve after the offer is placed. + {.account="deb", .fundXrp=drops(10) + reserve(env, 0) + 1 * f, .bookAmount=1, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=drops(10) + f, .balanceUsd=USD(0.00001), .offers=0, .owners=1}, // Account has enough to buy a little USD then the offer runs dry. + {.account="eve", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=0, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=f, .balanceUsd=USD( 0), .offers=1, .owners=1}, // No offer to cross + {.account="flo", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=1, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=0, .owners=1}, + {.account="gay", .fundXrp=reserve(env, 1) + 1 * f, .bookAmount=1000, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 50) + f, .balanceUsd=USD( 50), .offers=0, .owners=1}, + {.account="hye", .fundXrp=XRP(1000) + 1 * f, .bookAmount=1000, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 800) + f, .balanceUsd=USD( 800), .offers=0, .owners=1}, + {.account="ivy", .fundXrp=XRP( 1) + reserve(env, 1) + 1 * f, .bookAmount=1, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=0, .owners=1}, + {.account="joy", .fundXrp=XRP( 1) + reserve(env, 2) + 1 * f, .bookAmount=1, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=1, .owners=2}, + {.account="kim", .fundXrp=XRP( 900) + reserve(env, 2) + 1 * f, .bookAmount=999, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=0, .owners=1}, + {.account="liz", .fundXrp=XRP( 998) + reserve(env, 0) + 1 * f, .bookAmount=999, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 998) + f, .balanceUsd=USD( 998), .offers=0, .owners=1}, + {.account="meg", .fundXrp=XRP( 998) + reserve(env, 1) + 1 * f, .bookAmount=999, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=0, .owners=1}, + {.account="nia", .fundXrp=XRP( 998) + reserve(env, 2) + 1 * f, .bookAmount=999, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=1, .owners=2}, + {.account="ova", .fundXrp=XRP( 999) + reserve(env, 0) + 1 * f, .bookAmount=1000, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 999) + f, .balanceUsd=USD( 999), .offers=0, .owners=1}, + {.account="pam", .fundXrp=XRP( 999) + reserve(env, 1) + 1 * f, .bookAmount=1000, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(1000) + f, .balanceUsd=USD( 1000), .offers=0, .owners=1}, + {.account="rae", .fundXrp=XRP( 999) + reserve(env, 2) + 1 * f, .bookAmount=1000, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(1000) + f, .balanceUsd=USD( 1000), .offers=0, .owners=1}, + {.account="sue", .fundXrp=XRP(1000) + reserve(env, 2) + 1 * f, .bookAmount=0, .preTrust=noPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=f, .balanceUsd=USD( 0), .offers=1, .owners=1}, //---------------- Pre-established trust lines --------------------- - {"abe", reserve(env, 0) + 0 * f, 1, gwPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, - {"bud", reserve(env, 0) + 1 * f, 1, gwPreTrust, 1000, tecUNFUNDED_OFFER, f, USD( 0), 0, 0}, - {"che", reserve(env, 0) + 2 * f, 0, gwPreTrust, 1000, tecINSUF_RESERVE_OFFER, f, USD( 0), 0, 0}, - {"dan", drops(10) + reserve(env, 0) + 1 * f, 1, gwPreTrust, 1000, tesSUCCESS, drops(10) + f, USD(0.00001), 0, 0}, - {"eli", XRP( 20) + reserve(env, 0) + 1 * f, 1000, gwPreTrust, 1000, tesSUCCESS, XRP(20) + 1 * f, USD( 20), 0, 0}, - {"fyn", reserve(env, 1) + 0 * f, 0, gwPreTrust, 1000, tesSUCCESS, f, USD( 0), 1, 1}, - {"gar", reserve(env, 1) + 0 * f, 1, gwPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 1}, - {"hal", reserve(env, 1) + 1 * f, 1, gwPreTrust, 1000, tesSUCCESS, XRP( 1) + f, USD( 1), 1, 1}, + {.account="abe", .fundXrp=reserve(env, 0) + 0 * f, .bookAmount=1, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, + {.account="bud", .fundXrp=reserve(env, 0) + 1 * f, .bookAmount=1, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, + {.account="che", .fundXrp=reserve(env, 0) + 2 * f, .bookAmount=0, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=f, .balanceUsd=USD( 0), .offers=0, .owners=0}, + {.account="dan", .fundXrp=drops(10) + reserve(env, 0) + 1 * f, .bookAmount=1, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=drops(10) + f, .balanceUsd=USD(0.00001), .offers=0, .owners=0}, + {.account="eli", .fundXrp=XRP( 20) + reserve(env, 0) + 1 * f, .bookAmount=1000, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(20) + 1 * f, .balanceUsd=USD( 20), .offers=0, .owners=0}, + {.account="fyn", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=0, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=f, .balanceUsd=USD( 0), .offers=1, .owners=1}, + {.account="gar", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=1, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=1, .owners=1}, + {.account="hal", .fundXrp=reserve(env, 1) + 1 * f, .bookAmount=1, .preTrust=gwPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + f, .balanceUsd=USD( 1), .offers=1, .owners=1}, - {"ned", reserve(env, 1) + 0 * f, 1, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"ole", reserve(env, 1) + 1 * f, 1, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"pat", reserve(env, 1) + 2 * f, 0, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"quy", reserve(env, 1) + 2 * f, 1, acctPreTrust, 1000, tecUNFUNDED_OFFER, 2 * f, USD( 0), 0, 1}, - {"ron", reserve(env, 1) + 3 * f, 0, acctPreTrust, 1000, tecINSUF_RESERVE_OFFER, 2 * f, USD( 0), 0, 1}, - {"syd", drops(10) + reserve(env, 1) + 2 * f, 1, acctPreTrust, 1000, tesSUCCESS, drops(10) + 2 * f, USD(0.00001), 0, 1}, - {"ted", XRP( 20) + reserve(env, 1) + 2 * f, 1000, acctPreTrust, 1000, tesSUCCESS, XRP(20) + 2 * f, USD( 20), 0, 1}, - {"uli", reserve(env, 2) + 0 * f, 0, acctPreTrust, 1000, tecINSUF_RESERVE_OFFER, 2 * f, USD( 0), 0, 1}, - {"vic", reserve(env, 2) + 0 * f, 1, acctPreTrust, 1000, tesSUCCESS, XRP( 1) + 2 * f, USD( 1), 0, 1}, - {"wes", reserve(env, 2) + 1 * f, 0, acctPreTrust, 1000, tesSUCCESS, 2 * f, USD( 0), 1, 2}, - {"xan", reserve(env, 2) + 1 * f, 1, acctPreTrust, 1000, tesSUCCESS, XRP( 1) + 2 * f, USD( 1), 1, 2}, + {.account="ned", .fundXrp=reserve(env, 1) + 0 * f, .bookAmount=1, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="ole", .fundXrp=reserve(env, 1) + 1 * f, .bookAmount=1, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="pat", .fundXrp=reserve(env, 1) + 2 * f, .bookAmount=0, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="quy", .fundXrp=reserve(env, 1) + 2 * f, .bookAmount=1, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tecUNFUNDED_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="ron", .fundXrp=reserve(env, 1) + 3 * f, .bookAmount=0, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="syd", .fundXrp=drops(10) + reserve(env, 1) + 2 * f, .bookAmount=1, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=drops(10) + 2 * f, .balanceUsd=USD(0.00001), .offers=0, .owners=1}, + {.account="ted", .fundXrp=XRP( 20) + reserve(env, 1) + 2 * f, .bookAmount=1000, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP(20) + 2 * f, .balanceUsd=USD( 20), .offers=0, .owners=1}, + {.account="uli", .fundXrp=reserve(env, 2) + 0 * f, .bookAmount=0, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tecINSUF_RESERVE_OFFER, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=0, .owners=1}, + {.account="vic", .fundXrp=reserve(env, 2) + 0 * f, .bookAmount=1, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + 2 * f, .balanceUsd=USD( 1), .offers=0, .owners=1}, + {.account="wes", .fundXrp=reserve(env, 2) + 1 * f, .bookAmount=0, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=2 * f, .balanceUsd=USD( 0), .offers=1, .owners=2}, + {.account="xan", .fundXrp=reserve(env, 2) + 1 * f, .bookAmount=1, .preTrust=acctPreTrust, .offerAmount=1000, .tec=tesSUCCESS, .spentXrp=XRP( 1) + 2 * f, .balanceUsd=USD( 1), .offers=1, .owners=2}, }; // clang-format on @@ -2648,34 +2695,34 @@ public: // Constructor with takerGets/takerPays TestData( - std::string&& account_, // Account operated on - STAmount const& fundXrp_, // XRP acct funded with - STAmount const& fundUSD_, // USD acct funded with - STAmount const& gwGets_, // gw's offer - STAmount const& gwPays_, // - STAmount const& acctGets_, // acct's offer - STAmount const& acctPays_, // - TER tec_, // Returned tec code - STAmount const& spentXrp_, // Amount removed from fundXrp - STAmount const& finalUsd_, // Final USD balance on acct - int offers_, // Offers on acct - int owners_, // Owners on acct - STAmount const& takerGets_, // Remainder of acct's offer - STAmount const& takerPays_) // + std::string&& account_, // Account operated on + STAmount fundXrp_, // XRP acct funded with + STAmount fundUSD_, // USD acct funded with + STAmount gwGets_, // gw's offer + STAmount gwPays_, // + STAmount acctGets_, // acct's offer + STAmount acctPays_, // + TER tec_, // Returned tec code + STAmount spentXrp_, // Amount removed from fundXrp + STAmount finalUsd_, // Final USD balance on acct + int offers_, // Offers on acct + int owners_, // Owners on acct + STAmount takerGets_, // Remainder of acct's offer + STAmount takerPays_) // : account(std::move(account_)) - , fundXrp(fundXrp_) - , fundUSD(fundUSD_) - , gwGets(gwGets_) - , gwPays(gwPays_) - , acctGets(acctGets_) - , acctPays(acctPays_) + , fundXrp(std::move(fundXrp_)) + , fundUSD(std::move(fundUSD_)) + , gwGets(std::move(gwGets_)) + , gwPays(std::move(gwPays_)) + , acctGets(std::move(acctGets_)) + , acctPays(std::move(acctPays_)) , tec(tec_) - , spentXrp(spentXrp_) - , finalUsd(finalUsd_) + , spentXrp(std::move(spentXrp_)) + , finalUsd(std::move(finalUsd_)) , offers(offers_) , owners(owners_) - , takerGets(takerGets_) - , takerPays(takerPays_) + , takerGets(std::move(takerGets_)) + , takerPays(std::move(takerPays_)) { } @@ -3288,12 +3335,12 @@ public: // clang-format off TestData const tests[]{ // acct fundXRP fundUSD fundEUR firstOfferTec secondOfferTec - {"ann", reserve(env, 3) + f * 4, USD(1000), EUR(1000), tesSUCCESS, tesSUCCESS}, - {"bev", reserve(env, 3) + f * 4, USD( 1), EUR(1000), tesSUCCESS, tesSUCCESS}, - {"cam", reserve(env, 3) + f * 4, USD(1000), EUR( 1), tesSUCCESS, tesSUCCESS}, - {"deb", reserve(env, 3) + f * 4, USD( 0), EUR( 1), tesSUCCESS, tecUNFUNDED_OFFER}, - {"eve", reserve(env, 3) + f * 4, USD( 1), EUR( 0), tecUNFUNDED_OFFER, tesSUCCESS}, - {"flo", reserve(env, 3) + 0, USD(1000), EUR(1000), tecINSUF_RESERVE_OFFER, tecINSUF_RESERVE_OFFER}, + {.acct="ann", .fundXRP=reserve(env, 3) + f * 4, .fundUSD=USD(1000), .fundEUR=EUR(1000), .firstOfferTec=tesSUCCESS, .secondOfferTec=tesSUCCESS}, + {.acct="bev", .fundXRP=reserve(env, 3) + f * 4, .fundUSD=USD( 1), .fundEUR=EUR(1000), .firstOfferTec=tesSUCCESS, .secondOfferTec=tesSUCCESS}, + {.acct="cam", .fundXRP=reserve(env, 3) + f * 4, .fundUSD=USD(1000), .fundEUR=EUR( 1), .firstOfferTec=tesSUCCESS, .secondOfferTec=tesSUCCESS}, + {.acct="deb", .fundXRP=reserve(env, 3) + f * 4, .fundUSD=USD( 0), .fundEUR=EUR( 1), .firstOfferTec=tesSUCCESS, .secondOfferTec=tecUNFUNDED_OFFER}, + {.acct="eve", .fundXRP=reserve(env, 3) + f * 4, .fundUSD=USD( 1), .fundEUR=EUR( 0), .firstOfferTec=tecUNFUNDED_OFFER, .secondOfferTec=tesSUCCESS}, + {.acct="flo", .fundXRP=reserve(env, 3) + 0, .fundUSD=USD(1000), .fundEUR=EUR(1000), .firstOfferTec=tecINSUF_RESERVE_OFFER, .secondOfferTec=tecINSUF_RESERVE_OFFER}, }; //clang-format on @@ -3874,10 +3921,10 @@ public: // clang-format off TestData const tests[]{ // btcStart --------------------- actor[0] --------------------- -------------------- actor[1] ------------------- - {0, 0, 1, BTC(20), {{"ann", 0, drops(3900000'000000 - (4 * baseFee)), BTC(20.0), USD(3000)}, {"abe", 0, drops(4100000'000000 - (3 * baseFee)), BTC( 0), USD(750)}}}, // no BTC xfer fee - {0, 1, 0, BTC(20), {{"bev", 0, drops(4100000'000000 - (4 * baseFee)), BTC( 7.5), USD(2000)}, {"bob", 0, drops(3900000'000000 - (3 * baseFee)), BTC(10), USD( 0)}}}, // no USD xfer fee - {0, 0, 0, BTC(20), {{"cam", 0, drops(4000000'000000 - (5 * baseFee)), BTC(20.0), USD(2000)} }}, // no xfer fee - {0, 1, 0, BTC( 5), {{"deb", 1, drops(4040000'000000 - (4 * baseFee)), BTC( 0.0), USD(2000)}, {"dan", 1, drops(3960000'000000 - (3 * baseFee)), BTC( 4), USD( 0)}}}, // no USD xfer fee + {.self=0, .leg0=0, .leg1=1, .btcStart=BTC(20), .actors={{"ann", 0, drops(3900000'000000 - (4 * baseFee)), BTC(20.0), USD(3000)}, {"abe", 0, drops(4100000'000000 - (3 * baseFee)), BTC( 0), USD(750)}}}, // no BTC xfer fee + {.self=0, .leg0=1, .leg1=0, .btcStart=BTC(20), .actors={{"bev", 0, drops(4100000'000000 - (4 * baseFee)), BTC( 7.5), USD(2000)}, {"bob", 0, drops(3900000'000000 - (3 * baseFee)), BTC(10), USD( 0)}}}, // no USD xfer fee + {.self=0, .leg0=0, .leg1=0, .btcStart=BTC(20), .actors={{"cam", 0, drops(4000000'000000 - (5 * baseFee)), BTC(20.0), USD(2000)} }}, // no xfer fee + {.self=0, .leg0=1, .leg1=0, .btcStart=BTC( 5), .actors={{"deb", 1, drops(4040000'000000 - (4 * baseFee)), BTC( 0.0), USD(2000)}, {"dan", 1, drops(3960000'000000 - (3 * baseFee)), BTC( 4), USD( 0)}}}, // no USD xfer fee }; // clang-format on @@ -3926,12 +3973,9 @@ public: auto actorOffers = offersOnAccount(env, actor.acct); auto const offerCount = std::distance( actorOffers.begin(), - std::remove_if( - actorOffers.begin(), - actorOffers.end(), - [](std::shared_ptr& offer) { - return (*offer)[sfTakerGets].signum() == 0; - })); + std::ranges::remove_if(actorOffers, [](std::shared_ptr& offer) { + return (*offer)[sfTakerGets].signum() == 0; + }).begin()); BEAST_EXPECT(offerCount == actor.offers); env.require(balance(actor.acct, actor.xrp)); @@ -4025,8 +4069,8 @@ public: // clang-format off TestData const tests[]{ // btcStart ------------------- actor[0] -------------------- ------------------- actor[1] -------------------- - {0, 0, 1, BTC(5), {{"gay", 1, drops(3950000'000000 - (4 * baseFee)), BTC(5), USD(2500)}, {"gar", 1, drops(4050000'000000 - (3 * baseFee)), BTC(0), USD(1375)}}}, // no BTC xfer fee - {0, 0, 0, BTC(5), {{"hye", 2, drops(4000000'000000 - (5 * baseFee)), BTC(5), USD(2000)} }} // no xfer fee + {.self=0, .leg0=0, .leg1=1, .btcStart=BTC(5), .actors={{"gay", 1, drops(3950000'000000 - (4 * baseFee)), BTC(5), USD(2500)}, {"gar", 1, drops(4050000'000000 - (3 * baseFee)), BTC(0), USD(1375)}}}, // no BTC xfer fee + {.self=0, .leg0=0, .leg1=0, .btcStart=BTC(5), .actors={{"hye", 2, drops(4000000'000000 - (5 * baseFee)), BTC(5), USD(2000)} }} // no xfer fee }; // clang-format on @@ -4075,12 +4119,9 @@ public: auto actorOffers = offersOnAccount(env, actor.acct); auto const offerCount = std::distance( actorOffers.begin(), - std::remove_if( - actorOffers.begin(), - actorOffers.end(), - [](std::shared_ptr& offer) { - return (*offer)[sfTakerGets].signum() == 0; - })); + std::ranges::remove_if(actorOffers, [](std::shared_ptr& offer) { + return (*offer)[sfTakerGets].signum() == 0; + }).begin()); BEAST_EXPECT(offerCount == actor.offers); env.require(balance(actor.acct, actor.xrp)); @@ -4632,9 +4673,8 @@ public: sortedOffersOnAccount(jtx::Env& env, jtx::Account const& acct) { std::vector> offers{offersOnAccount(env, acct)}; - std::sort( - offers.begin(), - offers.end(), + std::ranges::sort( + offers, [](std::shared_ptr const& rhs, std::shared_ptr const& lhs) { return (*rhs)[sfSequence] < (*lhs)[sfSequence]; }); @@ -5176,5 +5216,4 @@ BEAST_DEFINE_TESTSUITE_PRIO(OfferWOSmallQOffers, app, xrpl, 2); BEAST_DEFINE_TESTSUITE_PRIO(OfferAllFeatures, app, xrpl, 2); BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Offer_manual, app, xrpl, 20); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Oracle_test.cpp b/src/test/app/Oracle_test.cpp index 83b658ac41..43d4a13e2b 100644 --- a/src/test/app/Oracle_test.cpp +++ b/src/test/app/Oracle_test.cpp @@ -1,11 +1,37 @@ +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { -namespace oracle { +#include +#include +#include + +namespace xrpl::test::jtx::oracle { struct Oracle_test : public beast::unit_test::suite { @@ -792,10 +818,4 @@ public: BEAST_DEFINE_TESTSUITE(Oracle, app, xrpl); -} // namespace oracle - -} // namespace jtx - -} // namespace test - -} // namespace xrpl +} // namespace xrpl::test::jtx::oracle diff --git a/src/test/app/OversizeMeta_test.cpp b/src/test/app/OversizeMeta_test.cpp index d6305bedb6..17f4410cf6 100644 --- a/src/test/app/OversizeMeta_test.cpp +++ b/src/test/app/OversizeMeta_test.cpp @@ -1,9 +1,18 @@ -#include -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include -namespace xrpl { -namespace test { +#include +#include + +#include +#include + +namespace xrpl::test { // Make sure "plump" order books don't have problems class PlumpBook_test : public beast::unit_test::suite @@ -169,5 +178,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(FindOversizeCross, app, xrpl, 50); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PathMPT_test.cpp b/src/test/app/PathMPT_test.cpp index 9562f1478f..482d120342 100644 --- a/src/test/app/PathMPT_test.cpp +++ b/src/test/app/PathMPT_test.cpp @@ -1,24 +1,45 @@ -#include -#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include -#include +#include #include #include -#include -#include +#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include + +namespace xrpl::test { namespace detail { static Json::Value @@ -95,16 +116,16 @@ public: Resource::Consumer c; RPC::JsonContext context{ - {env.journal, - app, - loadType, - app.getOPs(), - app.getLedgerMaster(), - c, - Role::USER, - {}, - {}, - RPC::apiVersionIfUnspecified}, + {.j = env.journal, + .app = app, + .loadType = loadType, + .netOps = app.getOPs(), + .ledgerMaster = app.getLedgerMaster(), + .consumer = c, + .role = Role::USER, + .coro = {}, + .infoSub = {}, + .apiVersion = RPC::apiVersionIfUnspecified}, {}, {}}; Json::Value result; @@ -439,5 +460,4 @@ public: BEAST_DEFINE_TESTSUITE(PathMPT, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Path_test.cpp b/src/test/app/Path_test.cpp index 7e7354c9ee..505d052faa 100644 --- a/src/test/app/Path_test.cpp +++ b/src/test/app/Path_test.cpp @@ -1,28 +1,62 @@ -#include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include // IWYU pragma: keep +#include +#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include #include -#include +#include +#include +#include #include #include +#include +#include #include +#include +#include +#include +#include #include +#include +#include #include +#include #include +#include +#include #include +#include +#include +#include +#include #include #include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { //------------------------------------------------------------------------------ @@ -121,16 +155,16 @@ public: Resource::Consumer c; RPC::JsonContext context{ - {env.journal, - app, - loadType, - app.getOPs(), - app.getLedgerMaster(), - c, - Role::USER, - {}, - {}, - RPC::apiVersionIfUnspecified}, + {.j = env.journal, + .app = app, + .loadType = loadType, + .netOps = app.getOPs(), + .ledgerMaster = app.getLedgerMaster(), + .consumer = c, + .role = Role::USER, + .coro = {}, + .infoSub = {}, + .apiVersion = RPC::apiVersionIfUnspecified}, {}, {}}; @@ -232,16 +266,16 @@ public: Resource::Consumer c; RPC::JsonContext context{ - {env.journal, - app, - loadType, - app.getOPs(), - app.getLedgerMaster(), - c, - Role::USER, - {}, - {}, - RPC::apiVersionIfUnspecified}, + {.j = env.journal, + .app = app, + .loadType = loadType, + .netOps = app.getOPs(), + .ledgerMaster = app.getLedgerMaster(), + .consumer = c, + .role = Role::USER, + .coro = {}, + .infoSub = {}, + .apiVersion = RPC::apiVersionIfUnspecified}, {}, {}}; Json::Value result; @@ -1878,5 +1912,4 @@ public: BEAST_DEFINE_TESTSUITE(Path, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PayChan_test.cpp b/src/test/app/PayChan_test.cpp index 768031c3af..758d16931c 100644 --- a/src/test/app/PayChan_test.cpp +++ b/src/test/app/PayChan_test.cpp @@ -1,15 +1,58 @@ -#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { using namespace jtx::paychan; struct PayChan_test : public beast::unit_test::suite @@ -1606,6 +1649,7 @@ struct PayChan_test : public beast::unit_test::suite Account const& acc, std::shared_ptr const& chan) -> bool { xrpl::Dir const ownerDir(view, keylet::ownerDir(acc.id())); + // NOLINTNEXTLINE(modernize-use-ranges) return std::find(ownerDir.begin(), ownerDir.end(), chan) != ownerDir.end(); }; @@ -1936,5 +1980,4 @@ public: }; BEAST_DEFINE_TESTSUITE(PayChan, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PayStrandMPT_test.cpp b/src/test/app/PayStrandMPT_test.cpp index cfeeaa5d35..44f25d54dc 100644 --- a/src/test/app/PayStrandMPT_test.cpp +++ b/src/test/app/PayStrandMPT_test.cpp @@ -1,24 +1,50 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include +#include #include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { struct PayStrandMPT_test : public beast::unit_test::suite { static jtx::DirectStepInfo makeEndpointStep(jtx::Account const& src, jtx::Account const& dst, jtx::IOU const& iou) { - return jtx::DirectStepInfo{src, dst, iou.currency}; + return jtx::DirectStepInfo{.src = src, .dst = dst, .currency = iou.currency}; } static jtx::MPTEndpointStepInfo makeEndpointStep(jtx::Account const& src, jtx::Account const& dst, jtx::MPT const& mpt) { - return jtx::MPTEndpointStepInfo{src, dst, mpt.mpt()}; + return jtx::MPTEndpointStepInfo{.src = src, .dst = dst, .mptid = mpt.mpt()}; } void @@ -623,5 +649,4 @@ struct PayStrandMPT_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(PayStrandMPT, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PayStrand_test.cpp b/src/test/app/PayStrand_test.cpp index e0ead8536c..24efb4b155 100644 --- a/src/test/app/PayStrand_test.cpp +++ b/src/test/app/PayStrand_test.cpp @@ -1,21 +1,53 @@ -#include +#include +#include #include - -#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { enum class TrustFlag { freeze, auth, noripple }; @@ -1127,5 +1159,4 @@ struct PayStrand_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(PayStrand, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PermissionedDEX_test.cpp b/src/test/app/PermissionedDEX_test.cpp index f3aed0579b..600f753c96 100644 --- a/src/test/app/PermissionedDEX_test.cpp +++ b/src/test/app/PermissionedDEX_test.cpp @@ -1,34 +1,51 @@ -#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include -#include -#include +#include #include -#include +#include +#include +#include #include -#include #include #include #include #include +#include #include +#include +#include #include #include -#include -#include -#include +#include +#include #include -#include #include +#include #include #include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { using namespace jtx; @@ -1372,6 +1389,73 @@ class PermissionedDEX_test : public beast::unit_test::suite BEAST_EXPECT(!offerExists(env, bob, carolOfferSeq)); } + void + testHybridMalformedOffer(FeatureBitset features) + { + bool const fixS313Enabled = features[fixSecurity3_1_3]; + + testcase << "Hybrid offer with empty AdditionalBooks" + << (fixS313Enabled ? " (fixSecurity3_1_3 enabled)" + : " (fixSecurity3_1_3 disabled)"); + + // offerInDomain has two code paths gated by fixSecurity3_1_3: + // + // pre-fix: only rejects a hybrid offer when sfAdditionalBooks is + // entirely absent — an empty array (size 0) passes through. + // post-fix: also rejects a hybrid offer whose sfAdditionalBooks array + // has size != 1 (i.e. 0 or >1 entries). + // + // We create a valid hybrid offer, then directly manipulate its SLE to + // produce the size==0 case that cannot occur via normal transactions, + // and verify that the two code paths produce the expected outcomes. + // + // Note: the PermissionedDEX invariant checker (ValidPermissionedDEX) + // does not flag this malformation for ttPAYMENT — only for + // ttOFFER_CREATE — so the without-fix payment completes as tesSUCCESS. + + Env env(*this, features); + auto const& [gw, domainOwner, alice, bob, carol, USD, domainID, credType] = + PermissionedDEX(env); + + // Create a valid hybrid offer (sfAdditionalBooks has exactly 1 entry) + auto const bobOfferSeq{env.seq(bob)}; + env(offer(bob, XRP(10), USD(10)), txflags(tfHybrid), domain(domainID)); + env.close(); + BEAST_EXPECT(offerExists(env, bob, bobOfferSeq)); + + // Directly manipulate the offer SLE in the open ledger so that + // sfAdditionalBooks is present but empty (size 0). This is the + // malformed state that fixSecurity3_1_3 is designed to catch. + auto const offerKey = keylet::offer(bob.id(), bobOfferSeq); + env.app().getOpenLedger().modify([&offerKey](OpenView& view, beast::Journal) { + auto const sle = view.read(offerKey); + if (!sle) + return false; + auto replacement = std::make_shared(*sle, sle->key()); + replacement->setFieldArray(sfAdditionalBooks, STArray{}); + view.rawReplace(replacement); + return true; + }); + + if (fixS313Enabled) + { + // post-fixSecurity3_1_3: offerInDomain rejects the malformed + // offer (size == 0), so no valid domain offer is found. + env(pay(alice, carol, USD(10)), + path(~USD), + sendmax(XRP(10)), + domain(domainID), + ter(tecPATH_PARTIAL)); + } + else + { + // pre-fixSecurity3_1_3: offerInDomain only checks for a missing + // sfAdditionalBooks field; size == 0 passes through, so the + // malformed offer is crossed and the payment succeeds. + env(pay(alice, carol, USD(10)), path(~USD), sendmax(XRP(10)), domain(domainID)); + } + } + public: void run() override @@ -1393,10 +1477,11 @@ public: testHybridBookStep(all); testHybridInvalidOffer(all); testHybridOfferDirectories(all); + testHybridMalformedOffer(all); + testHybridMalformedOffer(all - fixSecurity3_1_3); } }; BEAST_DEFINE_TESTSUITE(PermissionedDEX, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PermissionedDomains_test.cpp b/src/test/app/PermissionedDomains_test.cpp index c4bde9831a..f94fc53f71 100644 --- a/src/test/app/PermissionedDomains_test.cpp +++ b/src/test/app/PermissionedDomains_test.cpp @@ -1,18 +1,35 @@ -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include + +#include +#include +#include #include +#include +#include +#include #include -#include +#include #include #include #include #include +#include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { using namespace jtx; @@ -531,5 +548,4 @@ public: BEAST_DEFINE_TESTSUITE(PermissionedDomains, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/PseudoTx_test.cpp b/src/test/app/PseudoTx_test.cpp index a9180d0e03..22c0cff075 100644 --- a/src/test/app/PseudoTx_test.cpp +++ b/src/test/app/PseudoTx_test.cpp @@ -1,13 +1,24 @@ -#include +#include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { struct PseudoTx_test : public beast::unit_test::suite { @@ -16,7 +27,7 @@ struct PseudoTx_test : public beast::unit_test::suite { std::vector res; - res.emplace_back(STTx(ttFEE, [&](auto& obj) { + res.emplace_back(ttFEE, [&](auto& obj) { obj[sfAccount] = AccountID(); obj[sfLedgerSequence] = seq; if (rules.enabled(featureXRPFees)) @@ -32,13 +43,13 @@ struct PseudoTx_test : public beast::unit_test::suite obj[sfReserveIncrement] = 0; obj[sfReferenceFeeUnits] = 0; } - })); + }); - res.emplace_back(STTx(ttAMENDMENT, [&](auto& obj) { + res.emplace_back(ttAMENDMENT, [&](auto& obj) { obj.setAccountID(sfAccount, AccountID()); obj.setFieldH256(sfAmendment, uint256(2)); obj.setFieldU32(sfLedgerSequence, seq); - })); + }); return res; } @@ -48,12 +59,12 @@ struct PseudoTx_test : public beast::unit_test::suite { std::vector res; - res.emplace_back(STTx(ttACCOUNT_SET, [&](auto& obj) { obj[sfAccount] = AccountID(1); })); + res.emplace_back(ttACCOUNT_SET, [&](auto& obj) { obj[sfAccount] = AccountID(1); }); - res.emplace_back(STTx(ttPAYMENT, [&](auto& obj) { + res.emplace_back(ttPAYMENT, [&](auto& obj) { obj.setAccountID(sfAccount, AccountID(2)); obj.setAccountID(sfDestination, AccountID(3)); - })); + }); return res; } @@ -104,5 +115,4 @@ struct PseudoTx_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(PseudoTx, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/RCLValidations_test.cpp b/src/test/app/RCLValidations_test.cpp index 32267cbf45..164ded6138 100644 --- a/src/test/app/RCLValidations_test.cpp +++ b/src/test/app/RCLValidations_test.cpp @@ -1,13 +1,25 @@ -#include + +#include #include +#include +#include #include -#include +#include +#include #include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { class RCLValidations_test : public beast::unit_test::suite { @@ -312,5 +324,4 @@ public: BEAST_DEFINE_TESTSUITE(RCLValidations, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/ReducedOffer_test.cpp b/src/test/app/ReducedOffer_test.cpp index 3aa57423b5..a6d7160071 100644 --- a/src/test/app/ReducedOffer_test.cpp +++ b/src/test/app/ReducedOffer_test.cpp @@ -1,13 +1,30 @@ -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include +#include +#include +#include #include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class ReducedOffer_test : public beast::unit_test::suite { @@ -667,5 +684,4 @@ public: BEAST_DEFINE_TESTSUITE_PRIO(ReducedOffer, app, xrpl, 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Regression_test.cpp b/src/test/app/Regression_test.cpp index 59ab0e427d..c38013d1f3 100644 --- a/src/test/app/Regression_test.cpp +++ b/src/test/app/Regression_test.cpp @@ -1,18 +1,57 @@ -#include +#include +#include +#include +#include +#include // IWYU pragma: keep #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { struct Regression_test : public beast::unit_test::suite { @@ -309,5 +348,4 @@ struct Regression_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Regression, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/SHAMapStore_test.cpp b/src/test/app/SHAMapStore_test.cpp index 73cbf1c617..75e4c0c721 100644 --- a/src/test/app/SHAMapStore_test.cpp +++ b/src/test/app/SHAMapStore_test.cpp @@ -1,17 +1,38 @@ -#include +#include +#include #include #include #include #include #include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class SHAMapStore_test : public beast::unit_test::suite { @@ -157,10 +178,10 @@ public: auto ledgerTmp = env.rpc("ledger", "0"); BEAST_EXPECT(bad(ledgerTmp)); - ledgers.emplace(std::make_pair(1, env.rpc("ledger", "1"))); + ledgers.emplace(1, env.rpc("ledger", "1")); BEAST_EXPECT(goodLedger(env, ledgers[1], "1")); - ledgers.emplace(std::make_pair(2, env.rpc("ledger", "2"))); + ledgers.emplace(2, env.rpc("ledger", "2")); BEAST_EXPECT(goodLedger(env, ledgers[2], "2")); ledgerTmp = env.rpc("ledger", "current"); @@ -187,7 +208,7 @@ public: for (auto i = 3; i < deleteInterval + lastRotated; ++i) { - ledgers.emplace(std::make_pair(i, env.rpc("ledger", std::to_string(i)))); + ledgers.emplace(i, env.rpc("ledger", std::to_string(i))); BEAST_EXPECT( goodLedger(env, ledgers[i], std::to_string(i), true) && !getHash(ledgers[i]).empty()); @@ -224,7 +245,7 @@ public: ledgerTmp = env.rpc("ledger", "current"); BEAST_EXPECT(goodLedger(env, ledgerTmp, std::to_string(i + 3))); - ledgers.emplace(std::make_pair(i, env.rpc("ledger", std::to_string(i)))); + ledgers.emplace(i, env.rpc("ledger", std::to_string(i))); BEAST_EXPECT( store.getLastRotated() == lastRotated || i == lastRotated + deleteInterval - 2); BEAST_EXPECT( @@ -576,5 +597,4 @@ public: // VFALCO This test fails because of thread asynchronous issues BEAST_DEFINE_TESTSUITE(SHAMapStore, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/SetAuth_test.cpp b/src/test/app/SetAuth_test.cpp index a38cf7175a..5982fc282d 100644 --- a/src/test/app/SetAuth_test.cpp +++ b/src/test/app/SetAuth_test.cpp @@ -1,10 +1,24 @@ -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include #include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include + +namespace xrpl::test { struct SetAuth_test : public beast::unit_test::suite { @@ -59,5 +73,4 @@ struct SetAuth_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(SetAuth, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/SetRegularKey_test.cpp b/src/test/app/SetRegularKey_test.cpp index 3cce01a112..af79bb75bc 100644 --- a/src/test/app/SetRegularKey_test.cpp +++ b/src/test/app/SetRegularKey_test.cpp @@ -1,6 +1,25 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include namespace xrpl { diff --git a/src/test/app/TheoreticalQuality_test.cpp b/src/test/app/TheoreticalQuality_test.cpp index 0f73b8da6a..2316b3249f 100644 --- a/src/test/app/TheoreticalQuality_test.cpp +++ b/src/test/app/TheoreticalQuality_test.cpp @@ -1,18 +1,50 @@ -#include -#include -#include -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include #include #include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { struct RippleCalcTestParams { @@ -511,5 +543,4 @@ public: BEAST_DEFINE_TESTSUITE_PRIO(TheoreticalQuality, app, xrpl, 3); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/Ticket_test.cpp b/src/test/app/Ticket_test.cpp index 7f96caa05f..0dc9f0155f 100644 --- a/src/test/app/Ticket_test.cpp +++ b/src/test/app/Ticket_test.cpp @@ -1,10 +1,48 @@ -#include + +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { class Ticket_test : public beast::unit_test::suite @@ -190,8 +228,8 @@ class Ticket_test : public beast::unit_test::suite // Verify that all the expected Tickets were created. BEAST_EXPECT(ticketSeqs.size() == count); - std::sort(ticketSeqs.begin(), ticketSeqs.end()); - BEAST_EXPECT(std::adjacent_find(ticketSeqs.begin(), ticketSeqs.end()) == ticketSeqs.end()); + std::ranges::sort(ticketSeqs); + BEAST_EXPECT(std::ranges::adjacent_find(ticketSeqs) == ticketSeqs.end()); BEAST_EXPECT(*ticketSeqs.rbegin() == acctRootFinalSeq - 1); } diff --git a/src/test/app/Transaction_ordering_test.cpp b/src/test/app/Transaction_ordering_test.cpp index c50fbf4e56..af5001b06e 100644 --- a/src/test/app/Transaction_ordering_test.cpp +++ b/src/test/app/Transaction_ordering_test.cpp @@ -1,9 +1,24 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include #include +#include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { struct Transaction_ordering_test : public beast::unit_test::suite { @@ -134,5 +149,4 @@ struct Transaction_ordering_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Transaction_ordering, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/TrustAndBalance_test.cpp b/src/test/app/TrustAndBalance_test.cpp index e4cc1d34d5..e6cc7e71ca 100644 --- a/src/test/app/TrustAndBalance_test.cpp +++ b/src/test/app/TrustAndBalance_test.cpp @@ -1,11 +1,26 @@ -#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include +#include +#include +#include #include #include +#include #include +#include + namespace xrpl { class TrustAndBalance_test : public beast::unit_test::suite diff --git a/src/test/app/TrustSet_test.cpp b/src/test/app/TrustSet_test.cpp index d359ba1f26..6d24b695c7 100644 --- a/src/test/app/TrustSet_test.cpp +++ b/src/test/app/TrustSet_test.cpp @@ -1,11 +1,30 @@ -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include #include +#include #include -namespace xrpl { +#include +#include -namespace test { +namespace xrpl::test { class TrustSet_test : public beast::unit_test::suite { @@ -600,5 +619,4 @@ public: } }; BEAST_DEFINE_TESTSUITE(TrustSet, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/TxQ_test.cpp b/src/test/app/TxQ_test.cpp index 6f13f9d419..248c8121f4 100644 --- a/src/test/app/TxQ_test.cpp +++ b/src/test/app/TxQ_test.cpp @@ -1,22 +1,61 @@ -#include +#include +#include +#include #include -#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include -#include #include #include +#include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace test { +namespace xrpl::test { class TxQPosNegFlows_test : public beast::unit_test::suite { @@ -4654,5 +4693,4 @@ class TxQMetaInfo_test : public TxQPosNegFlows_test BEAST_DEFINE_TESTSUITE_PRIO(TxQPosNegFlows, app, xrpl, 1); BEAST_DEFINE_TESTSUITE_PRIO(TxQMetaInfo, app, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/ValidatorKeys_test.cpp b/src/test/app/ValidatorKeys_test.cpp index 3be6fcd028..bbc77671bc 100644 --- a/src/test/app/ValidatorKeys_test.cpp +++ b/src/test/app/ValidatorKeys_test.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -6,13 +7,20 @@ #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class ValidatorKeys_test : public beast::unit_test::suite { @@ -167,5 +175,4 @@ public: BEAST_DEFINE_TESTSUITE(ValidatorKeys, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/ValidatorList_test.cpp b/src/test/app/ValidatorList_test.cpp index 74b208e5e2..63c2ca37d8 100644 --- a/src/test/app/ValidatorList_test.cpp +++ b/src/test/app/ValidatorList_test.cpp @@ -1,23 +1,55 @@ -#include + +#include +#include #include +#include #include #include +#include #include +#include #include +#include +#include #include +#include #include +#include +#include #include +#include #include +#include #include #include -#include +#include +#include +#include #include +#include -namespace xrpl { -namespace test { +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class ValidatorList_test : public beast::unit_test::suite { @@ -92,9 +124,9 @@ private: auto const masterPublic = derivePublicKey(KeyType::ed25519, secret); auto const signingKeys = randomKeyPair(KeyType::secp256k1); return { - masterPublic, - signingKeys.first, - base64_encode(makeManifestString( + .masterPublic = masterPublic, + .signingPublic = signingKeys.first, + .manifest = base64_encode(makeManifestString( masterPublic, secret, signingKeys.first, signingKeys.second, 1))}; } @@ -1866,11 +1898,11 @@ private: auto const sig2 = signList(blob2, pubSigningKeys); return PreparedList{ - publisherPublic, - manifest, - {{blob1, sig1, {}}, {blob2, sig2, {}}}, - version, - {expiration1, expiration2}}; + .publisherPublic = publisherPublic, + .manifest = manifest, + .blobs = {{blob1, sig1, {}}, {blob2, sig2, {}}}, + .version = version, + .expirations = {expiration1, expiration2}}; }; // Configure two publishers and prepare 2 lists @@ -3917,5 +3949,4 @@ public: BEAST_DEFINE_TESTSUITE(ValidatorList, app, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/app/ValidatorSite_test.cpp b/src/test/app/ValidatorSite_test.cpp index 9f9b0cbdf7..f652689b2b 100644 --- a/src/test/app/ValidatorSite_test.cpp +++ b/src/test/app/ValidatorSite_test.cpp @@ -1,21 +1,34 @@ -#include +#include #include +#include #include +#include #include +#include #include -#include +#include +#include +#include +#include #include #include -#include -#include +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { namespace detail { @@ -164,7 +177,7 @@ private: for (auto const& cfg : paths) { - servers.push_back(cfg); + servers.emplace_back(cfg); auto& item = servers.back(); item.isRetry = cfg.path == "/bad-resource"; item.list.reserve(listSize); diff --git a/src/test/app/Vault_test.cpp b/src/test/app/Vault_test.cpp index 95b9165feb..0e6b680ff3 100644 --- a/src/test/app/Vault_test.cpp +++ b/src/test/app/Vault_test.cpp @@ -1,15 +1,37 @@ -#include +#include #include +#include #include +#include #include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include #include #include +#include +#include #include #include #include @@ -18,16 +40,27 @@ #include #include #include +#include #include #include #include #include +#include #include #include +#include +#include #include #include +#include +#include +#include +#include #include +#include +#include +#include namespace xrpl { @@ -4837,8 +4870,8 @@ class Vault_test : public beast::unit_test::suite } }; - Account owner{"alice"}; - Account depositor{"bob"}; + Account const owner{"alice"}; + Account const depositor{"bob"}; Account const issuer{"issuer"}; env.fund(XRP(10000), issuer, owner, depositor); @@ -5337,7 +5370,7 @@ class Vault_test : public beast::unit_test::suite }; Account owner{"alice"}; - Account depositor{"bob"}; + Account const depositor{"bob"}; Account const issuer{"issuer"}; env.fund(XRP(10000), issuer, owner, depositor); diff --git a/src/test/app/XChain_test.cpp b/src/test/app/XChain_test.cpp index 5386d9ecdc..852bbbbb8b 100644 --- a/src/test/app/XChain_test.cpp +++ b/src/test/app/XChain_test.cpp @@ -1,25 +1,54 @@ -#include +#include #include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include + +#include +#include #include +#include +#include +#include #include #include #include +#include #include +#include #include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include #include #include #include +#include +#include #include #include @@ -2302,15 +2331,15 @@ struct XChain_test : public beast::unit_test::suite, public jtx::XChainBridgeObj Account const ua{"ua"}; // unfunded account we want to create BridgeDef xrp_b{ - doorA, - xrpIssue(), - Account::master, - xrpIssue(), - XRP(1), // reward - XRP(20), // minAccountCreate - 4, // quorum - signers, - Json::nullValue}; + .doorA = doorA, + .issueA = xrpIssue(), + .doorB = Account::master, + .issueB = xrpIssue(), + .reward = XRP(1), // reward + .minAccountCreate = XRP(20), // minAccountCreate + .quorum = 4, // quorum + .signers = signers, + .jvb = Json::nullValue}; xrp_b.initBridge(mcEnv, scEnv); @@ -4500,30 +4529,30 @@ public: // create XRP -> XRP bridge // ------------------------ BridgeDef xrp_b{ - doorXRPLocking, - xrpIssue(), - Account::master, - xrpIssue(), - XRP(1), - XRP(20), - quorum, - signers, - Json::nullValue}; + .doorA = doorXRPLocking, + .issueA = xrpIssue(), + .doorB = Account::master, + .issueB = xrpIssue(), + .reward = XRP(1), + .minAccountCreate = XRP(20), + .quorum = quorum, + .signers = signers, + .jvb = Json::nullValue}; initBridge(xrp_b); // create USD -> USD bridge // ------------------------ BridgeDef usd_b{ - doorUSDLocking, - usdLocking, - doorUSDIssuing, - usdIssuing, - XRP(1), - XRP(20), - quorum, - signers, - Json::nullValue}; + .doorA = doorUSDLocking, + .issueA = usdLocking, + .doorB = doorUSDIssuing, + .issueB = usdIssuing, + .reward = XRP(1), + .minAccountCreate = XRP(20), + .quorum = quorum, + .signers = signers, + .jvb = Json::nullValue}; initBridge(usd_b); @@ -4532,79 +4561,262 @@ public: // give time enough for ua[0] to be funded now so it can reserve // the claimID // ----------------------------------------------------------------- - ac(0, st, xrp_b, {a[0], ua[0], XRP(777), xrp_b.reward, true}); - xfer(8, st, xrp_b, {a[0], ua[0], a[2], XRP(3), true}); + ac(0, + st, + xrp_b, + {.from = a[0], .to = ua[0], .amt = XRP(777), .reward = xrp_b.reward, .a2b = true}); + xfer( + 8, + st, + xrp_b, + {.from = a[0], .to = ua[0], .finaldest = a[2], .amt = XRP(3), .a2b = true}); runSimulation(st); // try the same thing in the other direction // ----------------------------------------- - ac(0, st, xrp_b, {a[0], ua[0], XRP(777), xrp_b.reward, false}); - xfer(8, st, xrp_b, {a[0], ua[0], a[2], XRP(3), false}); + ac(0, + st, + xrp_b, + {.from = a[0], .to = ua[0], .amt = XRP(777), .reward = xrp_b.reward, .a2b = false}); + xfer( + 8, + st, + xrp_b, + {.from = a[0], .to = ua[0], .finaldest = a[2], .amt = XRP(3), .a2b = false}); runSimulation(st); // run multiple XRP transfers // -------------------------- - xfer(0, st, xrp_b, {a[0], a[0], a[1], XRP(6), true, WithClaim::no}); - xfer(1, st, xrp_b, {a[0], a[0], a[1], XRP(8), false, WithClaim::no}); - xfer(1, st, xrp_b, {a[1], a[1], a[1], XRP(1), true}); - xfer(2, st, xrp_b, {a[0], a[0], a[1], XRP(3), false}); - xfer(2, st, xrp_b, {a[1], a[1], a[1], XRP(5), false}); - xfer(2, st, xrp_b, {a[0], a[0], a[1], XRP(7), false, WithClaim::no}); - xfer(2, st, xrp_b, {a[1], a[1], a[1], XRP(9), true}); + xfer( + 0, + st, + xrp_b, + {.from = a[0], + .to = a[0], + .finaldest = a[1], + .amt = XRP(6), + .a2b = true, + .with_claim = WithClaim::no}); + xfer( + 1, + st, + xrp_b, + {.from = a[0], + .to = a[0], + .finaldest = a[1], + .amt = XRP(8), + .a2b = false, + .with_claim = WithClaim::no}); + xfer( + 1, + st, + xrp_b, + {.from = a[1], .to = a[1], .finaldest = a[1], .amt = XRP(1), .a2b = true}); + xfer( + 2, + st, + xrp_b, + {.from = a[0], .to = a[0], .finaldest = a[1], .amt = XRP(3), .a2b = false}); + xfer( + 2, + st, + xrp_b, + {.from = a[1], .to = a[1], .finaldest = a[1], .amt = XRP(5), .a2b = false}); + xfer( + 2, + st, + xrp_b, + {.from = a[0], + .to = a[0], + .finaldest = a[1], + .amt = XRP(7), + .a2b = false, + .with_claim = WithClaim::no}); + xfer( + 2, + st, + xrp_b, + {.from = a[1], .to = a[1], .finaldest = a[1], .amt = XRP(9), .a2b = true}); runSimulation(st); // run one USD transfer // -------------------- - xfer(0, st, usd_b, {a[0], a[1], a[2], usdLocking(3), true}); + xfer( + 0, + st, + usd_b, + {.from = a[0], .to = a[1], .finaldest = a[2], .amt = usdLocking(3), .a2b = true}); runSimulation(st); // run multiple USD transfers // -------------------------- - xfer(0, st, usd_b, {a[0], a[0], a[1], usdLocking(6), true}); - xfer(1, st, usd_b, {a[0], a[0], a[1], usdIssuing(8), false}); - xfer(1, st, usd_b, {a[1], a[1], a[1], usdLocking(1), true}); - xfer(2, st, usd_b, {a[0], a[0], a[1], usdIssuing(3), false}); - xfer(2, st, usd_b, {a[1], a[1], a[1], usdIssuing(5), false}); - xfer(2, st, usd_b, {a[0], a[0], a[1], usdIssuing(7), false}); - xfer(2, st, usd_b, {a[1], a[1], a[1], usdLocking(9), true}); + xfer( + 0, + st, + usd_b, + {.from = a[0], .to = a[0], .finaldest = a[1], .amt = usdLocking(6), .a2b = true}); + xfer( + 1, + st, + usd_b, + {.from = a[0], .to = a[0], .finaldest = a[1], .amt = usdIssuing(8), .a2b = false}); + xfer( + 1, + st, + usd_b, + {.from = a[1], .to = a[1], .finaldest = a[1], .amt = usdLocking(1), .a2b = true}); + xfer( + 2, + st, + usd_b, + {.from = a[0], .to = a[0], .finaldest = a[1], .amt = usdIssuing(3), .a2b = false}); + xfer( + 2, + st, + usd_b, + {.from = a[1], .to = a[1], .finaldest = a[1], .amt = usdIssuing(5), .a2b = false}); + xfer( + 2, + st, + usd_b, + {.from = a[0], .to = a[0], .finaldest = a[1], .amt = usdIssuing(7), .a2b = false}); + xfer( + 2, + st, + usd_b, + {.from = a[1], .to = a[1], .finaldest = a[1], .amt = usdLocking(9), .a2b = true}); runSimulation(st); // run mixed transfers // ------------------- - xfer(0, st, xrp_b, {a[0], a[0], a[0], XRP(1), true}); - xfer(0, st, usd_b, {a[1], a[3], a[3], usdIssuing(3), false}); - xfer(0, st, usd_b, {a[3], a[2], a[1], usdIssuing(5), false}); + xfer( + 0, + st, + xrp_b, + {.from = a[0], .to = a[0], .finaldest = a[0], .amt = XRP(1), .a2b = true}); + xfer( + 0, + st, + usd_b, + {.from = a[1], .to = a[3], .finaldest = a[3], .amt = usdIssuing(3), .a2b = false}); + xfer( + 0, + st, + usd_b, + {.from = a[3], .to = a[2], .finaldest = a[1], .amt = usdIssuing(5), .a2b = false}); - xfer(1, st, xrp_b, {a[0], a[0], a[0], XRP(4), false}); - xfer(1, st, xrp_b, {a[1], a[1], a[0], XRP(8), true}); - xfer(1, st, usd_b, {a[4], a[1], a[1], usdLocking(7), true}); + xfer( + 1, + st, + xrp_b, + {.from = a[0], .to = a[0], .finaldest = a[0], .amt = XRP(4), .a2b = false}); + xfer( + 1, + st, + xrp_b, + {.from = a[1], .to = a[1], .finaldest = a[0], .amt = XRP(8), .a2b = true}); + xfer( + 1, + st, + usd_b, + {.from = a[4], .to = a[1], .finaldest = a[1], .amt = usdLocking(7), .a2b = true}); - xfer(3, st, xrp_b, {a[1], a[1], a[0], XRP(7), true}); - xfer(3, st, xrp_b, {a[0], a[4], a[3], XRP(2), false}); - xfer(3, st, xrp_b, {a[1], a[1], a[0], XRP(9), true}); - xfer(3, st, usd_b, {a[3], a[1], a[1], usdIssuing(11), false}); + xfer( + 3, + st, + xrp_b, + {.from = a[1], .to = a[1], .finaldest = a[0], .amt = XRP(7), .a2b = true}); + xfer( + 3, + st, + xrp_b, + {.from = a[0], .to = a[4], .finaldest = a[3], .amt = XRP(2), .a2b = false}); + xfer( + 3, + st, + xrp_b, + {.from = a[1], .to = a[1], .finaldest = a[0], .amt = XRP(9), .a2b = true}); + xfer( + 3, + st, + usd_b, + {.from = a[3], .to = a[1], .finaldest = a[1], .amt = usdIssuing(11), .a2b = false}); runSimulation(st); // run multiple account create to stress attestation batching // ---------------------------------------------------------- - ac(0, st, xrp_b, {a[0], ua[1], XRP(301), xrp_b.reward, true}); - ac(0, st, xrp_b, {a[1], ua[2], XRP(302), xrp_b.reward, true}); - ac(1, st, xrp_b, {a[0], ua[3], XRP(303), xrp_b.reward, true}); - ac(2, st, xrp_b, {a[1], ua[4], XRP(304), xrp_b.reward, true}); - ac(3, st, xrp_b, {a[0], ua[5], XRP(305), xrp_b.reward, true}); - ac(4, st, xrp_b, {a[1], ua[6], XRP(306), xrp_b.reward, true}); - ac(6, st, xrp_b, {a[0], ua[7], XRP(307), xrp_b.reward, true}); - ac(7, st, xrp_b, {a[2], ua[8], XRP(308), xrp_b.reward, true}); - ac(9, st, xrp_b, {a[0], ua[9], XRP(309), xrp_b.reward, true}); - ac(9, st, xrp_b, {a[0], ua[9], XRP(309), xrp_b.reward, true}); - ac(10, st, xrp_b, {a[0], ua[10], XRP(310), xrp_b.reward, true}); - ac(12, st, xrp_b, {a[0], ua[11], XRP(311), xrp_b.reward, true}); - ac(12, st, xrp_b, {a[3], ua[12], XRP(312), xrp_b.reward, true}); - ac(12, st, xrp_b, {a[4], ua[13], XRP(313), xrp_b.reward, true}); - ac(12, st, xrp_b, {a[3], ua[14], XRP(314), xrp_b.reward, true}); - ac(12, st, xrp_b, {a[6], ua[15], XRP(315), xrp_b.reward, true}); - ac(13, st, xrp_b, {a[7], ua[16], XRP(316), xrp_b.reward, true}); - ac(15, st, xrp_b, {a[3], ua[17], XRP(317), xrp_b.reward, true}); + ac(0, + st, + xrp_b, + {.from = a[0], .to = ua[1], .amt = XRP(301), .reward = xrp_b.reward, .a2b = true}); + ac(0, + st, + xrp_b, + {.from = a[1], .to = ua[2], .amt = XRP(302), .reward = xrp_b.reward, .a2b = true}); + ac(1, + st, + xrp_b, + {.from = a[0], .to = ua[3], .amt = XRP(303), .reward = xrp_b.reward, .a2b = true}); + ac(2, + st, + xrp_b, + {.from = a[1], .to = ua[4], .amt = XRP(304), .reward = xrp_b.reward, .a2b = true}); + ac(3, + st, + xrp_b, + {.from = a[0], .to = ua[5], .amt = XRP(305), .reward = xrp_b.reward, .a2b = true}); + ac(4, + st, + xrp_b, + {.from = a[1], .to = ua[6], .amt = XRP(306), .reward = xrp_b.reward, .a2b = true}); + ac(6, + st, + xrp_b, + {.from = a[0], .to = ua[7], .amt = XRP(307), .reward = xrp_b.reward, .a2b = true}); + ac(7, + st, + xrp_b, + {.from = a[2], .to = ua[8], .amt = XRP(308), .reward = xrp_b.reward, .a2b = true}); + ac(9, + st, + xrp_b, + {.from = a[0], .to = ua[9], .amt = XRP(309), .reward = xrp_b.reward, .a2b = true}); + ac(9, + st, + xrp_b, + {.from = a[0], .to = ua[9], .amt = XRP(309), .reward = xrp_b.reward, .a2b = true}); + ac(10, + st, + xrp_b, + {.from = a[0], .to = ua[10], .amt = XRP(310), .reward = xrp_b.reward, .a2b = true}); + ac(12, + st, + xrp_b, + {.from = a[0], .to = ua[11], .amt = XRP(311), .reward = xrp_b.reward, .a2b = true}); + ac(12, + st, + xrp_b, + {.from = a[3], .to = ua[12], .amt = XRP(312), .reward = xrp_b.reward, .a2b = true}); + ac(12, + st, + xrp_b, + {.from = a[4], .to = ua[13], .amt = XRP(313), .reward = xrp_b.reward, .a2b = true}); + ac(12, + st, + xrp_b, + {.from = a[3], .to = ua[14], .amt = XRP(314), .reward = xrp_b.reward, .a2b = true}); + ac(12, + st, + xrp_b, + {.from = a[6], .to = ua[15], .amt = XRP(315), .reward = xrp_b.reward, .a2b = true}); + ac(13, + st, + xrp_b, + {.from = a[7], .to = ua[16], .amt = XRP(316), .reward = xrp_b.reward, .a2b = true}); + ac(15, + st, + xrp_b, + {.from = a[3], .to = ua[17], .amt = XRP(317), .reward = xrp_b.reward, .a2b = true}); runSimulation(st, true); // balances verification working now. } diff --git a/src/test/app/tx/apply_test.cpp b/src/test/app/tx/apply_test.cpp index 6d3efea5f3..ffacc0a563 100644 --- a/src/test/app/tx/apply_test.cpp +++ b/src/test/app/tx/apply_test.cpp @@ -2,10 +2,16 @@ #include +#include #include -#include +#include +#include +#include #include +#include +#include + namespace xrpl { class Apply_test : public beast::unit_test::suite diff --git a/src/test/basics/Buffer_test.cpp b/src/test/basics/Buffer_test.cpp index 95a8853975..1fd0ed9e09 100644 --- a/src/test/basics/Buffer_test.cpp +++ b/src/test/basics/Buffer_test.cpp @@ -1,11 +1,14 @@ #include -#include +#include +#include +#include #include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { struct Buffer_test : beast::unit_test::suite { @@ -100,8 +103,8 @@ struct Buffer_test : beast::unit_test::suite { testcase("Move Construction / Assignment"); - static_assert(std::is_nothrow_move_constructible::value, ""); - static_assert(std::is_nothrow_move_assignable::value, ""); + static_assert(std::is_nothrow_move_constructible_v, ""); + static_assert(std::is_nothrow_move_assignable_v, ""); { // Move-construct from empty buf Buffer x; @@ -262,5 +265,4 @@ struct Buffer_test : beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Buffer, basics, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/basics/DetectCrash_test.cpp b/src/test/basics/DetectCrash_test.cpp index 0dd2787dff..b47975873e 100644 --- a/src/test/basics/DetectCrash_test.cpp +++ b/src/test/basics/DetectCrash_test.cpp @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { struct DetectCrash_test : public beast::unit_test::suite { @@ -24,5 +23,4 @@ struct DetectCrash_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_MANUAL(DetectCrash, basics, beast); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/basics/Expected_test.cpp b/src/test/basics/Expected_test.cpp index fa35946624..b76955f53a 100644 --- a/src/test/basics/Expected_test.cpp +++ b/src/test/basics/Expected_test.cpp @@ -1,15 +1,20 @@ #include -#include +#include #include +#include +#include + +#include +#include +#include +#include + #if BOOST_VERSION >= 107500 -#include // Not part of boost before version 1.75 -#endif // BOOST_VERSION -#include +#endif // BOOST_VERSION #include -namespace xrpl { -namespace test { +namespace xrpl::test { struct Expected_test : beast::unit_test::suite { @@ -213,5 +218,4 @@ struct Expected_test : beast::unit_test::suite BEAST_DEFINE_TESTSUITE(Expected, basics, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/basics/FileUtilities_test.cpp b/src/test/basics/FileUtilities_test.cpp index b63f8baf0a..b427e800ec 100644 --- a/src/test/basics/FileUtilities_test.cpp +++ b/src/test/basics/FileUtilities_test.cpp @@ -2,7 +2,10 @@ #include #include -#include +#include + +#include +#include namespace xrpl { diff --git a/src/test/basics/IOUAmount_test.cpp b/src/test/basics/IOUAmount_test.cpp index d0e272c28b..95362c7545 100644 --- a/src/test/basics/IOUAmount_test.cpp +++ b/src/test/basics/IOUAmount_test.cpp @@ -1,6 +1,12 @@ -#include +#include +#include +#include #include +#include +#include +#include + namespace xrpl { class IOUAmount_test : public beast::unit_test::suite diff --git a/src/test/basics/IntrusiveShared_test.cpp b/src/test/basics/IntrusiveShared_test.cpp index 52cb8f5c1c..23b0c43499 100644 --- a/src/test/basics/IntrusiveShared_test.cpp +++ b/src/test/basics/IntrusiveShared_test.cpp @@ -1,24 +1,29 @@ -#include -#include +#include // IWYU pragma: keep +#include // IWYU pragma: keep #include -#include -#include +#include +#include #include #include -#include -#include +#include +#include // IWYU pragma: keep #include +#include +#include +#include #include +#include #include #include #include #include +#include #include +#include -namespace xrpl { -namespace tests { +namespace xrpl::tests { /** Experimentally, we discovered that using std::barrier performs extremely @@ -122,7 +127,7 @@ public: assert(state.size() > id_); state[id_].store(TrackedState::alive, std::memory_order_relaxed); } - ~TIBase() + ~TIBase() override { using enum TrackedState; @@ -234,7 +239,7 @@ public: BEAST_EXPECT(b->use_count() == 1); for (int i = 0; i < 10; ++i) { - weak.push_back(b); + weak.emplace_back(b); BEAST_EXPECT(b->use_count() == 1); } BEAST_EXPECT(TIBase::getState(id) == alive); @@ -525,11 +530,11 @@ public: { if (isStrongDist(eng)) { - result.push_back(SharedIntrusive(toClone)); + result.emplace_back(SharedIntrusive(toClone)); } else { - result.push_back(WeakIntrusive(toClone)); + result.emplace_back(WeakIntrusive(toClone)); } } return result; @@ -576,7 +581,7 @@ public: toClone.resize(numThreads); auto strong = make_SharedIntrusive(); strong->tracingCallback_ = tracingCallback; - std::fill(toClone.begin(), toClone.end(), strong); + std::ranges::fill(toClone, strong); } // ------ Sync Point ------ @@ -656,7 +661,7 @@ public: auto numToCreate = toCreateDist(eng); result.reserve(numToCreate); for (int i = 0; i < numToCreate; ++i) - result.push_back(SharedIntrusive(toClone)); + result.emplace_back(SharedIntrusive(toClone)); return result; }; constexpr int loopIters = 2 * 1024; @@ -703,7 +708,7 @@ public: toClone.resize(numThreads); auto strong = make_SharedIntrusive(); strong->tracingCallback_ = tracingCallback; - std::fill(toClone.begin(), toClone.end(), strong); + std::ranges::fill(toClone, strong); } // ------ Sync Point ------ @@ -824,7 +829,7 @@ public: toLock.resize(numThreads); auto strong = make_SharedIntrusive(); strong->tracingCallback_ = tracingCallback; - std::fill(toLock.begin(), toLock.end(), strong); + std::ranges::fill(toLock, strong); } // ------ Sync Point ------ @@ -871,5 +876,4 @@ public: }; // namespace tests BEAST_DEFINE_TESTSUITE(IntrusiveShared, basics, xrpl); -} // namespace tests -} // namespace xrpl +} // namespace xrpl::tests diff --git a/src/test/basics/KeyCache_test.cpp b/src/test/basics/KeyCache_test.cpp index 55b275ae09..2370f87f5d 100644 --- a/src/test/basics/KeyCache_test.cpp +++ b/src/test/basics/KeyCache_test.cpp @@ -1,10 +1,13 @@ #include #include -#include +#include // IWYU pragma: keep #include +#include #include +#include + namespace xrpl { class KeyCache_test : public beast::unit_test::suite diff --git a/src/test/basics/Number_test.cpp b/src/test/basics/Number_test.cpp index 856b379533..cc7ccaa8c2 100644 --- a/src/test/basics/Number_test.cpp +++ b/src/test/basics/Number_test.cpp @@ -1,10 +1,18 @@ #include -#include +#include #include +#include #include #include +#include +#include +#include +#include +#include #include +#include +#include #include namespace xrpl { diff --git a/src/test/basics/PerfLog_test.cpp b/src/test/basics/PerfLog_test.cpp index 470a52d220..cd00b180e7 100644 --- a/src/test/basics/PerfLog_test.cpp +++ b/src/test/basics/PerfLog_test.cpp @@ -1,20 +1,39 @@ #include #include +#include #include #include -#include +#include #include +#include +#include #include #include +#include +#include #include -#include +#include +#include +#include +#include + +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include //------------------------------------------------------------------------------ @@ -86,7 +105,7 @@ class PerfLog_test : public beast::unit_test::suite perfLog(WithFile withFile) { perf::PerfLog::Setup const setup{ - withFile == WithFile::no ? "" : logFile(), logInterval()}; + .perfLog = withFile == WithFile::no ? "" : logFile(), .logInterval = logInterval()}; return perf::make_PerfLog(setup, app_, j_, [this]() { signalStop(); return; @@ -159,7 +178,7 @@ class PerfLog_test : public beast::unit_test::suite // Note that the longest durations should be at the front of the // vector since they were started first. - std::sort(currents.begin(), currents.end(), [](Cur const& lhs, Cur const& rhs) { + std::ranges::sort(currents, [](Cur const& lhs, Cur const& rhs) { if (lhs.dur != rhs.dur) return (rhs.dur < lhs.dur); return (lhs.name < rhs.name); diff --git a/src/test/basics/StringUtilities_test.cpp b/src/test/basics/StringUtilities_test.cpp index fb7cdb3d69..e566e43c9f 100644 --- a/src/test/basics/StringUtilities_test.cpp +++ b/src/test/basics/StringUtilities_test.cpp @@ -1,7 +1,9 @@ #include #include #include -#include +#include + +#include namespace xrpl { diff --git a/src/test/basics/TaggedCache_test.cpp b/src/test/basics/TaggedCache_test.cpp index 78dc25380b..9621719803 100644 --- a/src/test/basics/TaggedCache_test.cpp +++ b/src/test/basics/TaggedCache_test.cpp @@ -1,10 +1,13 @@ #include #include -#include +#include // IWYU pragma: keep #include +#include #include +#include + namespace xrpl { /* diff --git a/src/test/basics/Units_test.cpp b/src/test/basics/Units_test.cpp index 6bb7f400cc..8769a0d386 100644 --- a/src/test/basics/Units_test.cpp +++ b/src/test/basics/Units_test.cpp @@ -1,9 +1,15 @@ -#include +#include +#include +#include #include #include +#include -namespace xrpl { -namespace test { +#include +#include +#include + +namespace xrpl::test { class units_test : public beast::unit_test::suite { @@ -335,5 +341,4 @@ public: BEAST_DEFINE_TESTSUITE(units, basics, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/basics/XRPAmount_test.cpp b/src/test/basics/XRPAmount_test.cpp index ad81050558..b0e8213b73 100644 --- a/src/test/basics/XRPAmount_test.cpp +++ b/src/test/basics/XRPAmount_test.cpp @@ -1,6 +1,10 @@ -#include +#include +#include #include +#include +#include + namespace xrpl { class XRPAmount_test : public beast::unit_test::suite diff --git a/src/test/basics/base58_test.cpp b/src/test/basics/base58_test.cpp index 52d06b324d..948195b424 100644 --- a/src/test/basics/base58_test.cpp +++ b/src/test/basics/base58_test.cpp @@ -1,20 +1,31 @@ +#include +#include + +#include // IWYU pragma: keep + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifndef _MSC_VER -#include #include #include -#include -#include - #include #include #include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { namespace { [[nodiscard]] inline auto @@ -89,7 +100,7 @@ printAsChar(std::span a, std::span b) auto asString = [](std::span s) { std::string r; r.resize(s.size()); - std::copy(s.begin(), s.end(), r.begin()); + std::ranges::copy(s, r.begin()); return r; }; auto sa = asString(a); @@ -275,7 +286,7 @@ class base58_test : public beast::unit_test::suite b256Data.data(), b256Data.size(), tmpBuf.data(), tmpBuf.size()); BEAST_EXPECT(s.size()); b58Result[i] = outBuf.subspan(0, s.size()); - std::copy(s.begin(), s.end(), b58Result[i].begin()); + std::ranges::copy(s, b58Result[i].begin()); } } if (BEAST_EXPECT(b58Result[0].size() == b58Result[1].size())) @@ -304,7 +315,7 @@ class base58_test : public beast::unit_test::suite std::string const s = xrpl::b58_ref::detail::decodeBase58(st); BEAST_EXPECT(s.size()); b256Result[i] = outBuf.subspan(0, s.size()); - std::copy(s.begin(), s.end(), b256Result[i].begin()); + std::ranges::copy(s, b256Result[i].begin()); } } @@ -341,7 +352,7 @@ class base58_test : public beast::unit_test::suite xrpl::b58_ref::encodeBase58Token(tokType, b256Data.data(), b256Data.size()); BEAST_EXPECT(s.size()); b58Result[i] = outBuf.subspan(0, s.size()); - std::copy(s.begin(), s.end(), b58Result[i].begin()); + std::ranges::copy(s, b58Result[i].begin()); } } if (BEAST_EXPECT(b58Result[0].size() == b58Result[1].size())) @@ -370,7 +381,7 @@ class base58_test : public beast::unit_test::suite std::string const s = xrpl::b58_ref::decodeBase58Token(st, tokType); BEAST_EXPECT(s.size()); b256Result[i] = outBuf.subspan(0, s.size()); - std::copy(s.begin(), s.end(), b256Result[i].begin()); + std::ranges::copy(s, b256Result[i].begin()); } } @@ -423,6 +434,6 @@ class base58_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(base58, basics, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test + #endif // _MSC_VER diff --git a/src/test/basics/base_uint_test.cpp b/src/test/basics/base_uint_test.cpp index 139c635e5f..8148f3bdce 100644 --- a/src/test/basics/base_uint_test.cpp +++ b/src/test/basics/base_uint_test.cpp @@ -1,15 +1,25 @@ #include #include #include -#include +#include +#include -#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { // a non-hashing Hasher that just copies the bytes. // Used to test hash_append in base_uint @@ -40,8 +50,8 @@ struct nonhash struct base_uint_test : beast::unit_test::suite { using test96 = base_uint<96>; - static_assert(std::is_copy_constructible::value); - static_assert(std::is_copy_assignable::value); + static_assert(std::is_copy_constructible_v); + static_assert(std::is_copy_assignable_v); void testComparisons() @@ -112,8 +122,8 @@ struct base_uint_test : beast::unit_test::suite { testcase("base_uint: general purpose tests"); - static_assert(!std::is_constructible>::value); - static_assert(!std::is_assignable>::value); + static_assert(!std::is_constructible_v>); + static_assert(!std::is_assignable_v>); testComparisons(); @@ -345,5 +355,4 @@ struct base_uint_test : beast::unit_test::suite BEAST_DEFINE_TESTSUITE(base_uint, basics, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/basics/hardened_hash_test.cpp b/src/test/basics/hardened_hash_test.cpp index 3910e5e414..361a961312 100644 --- a/src/test/basics/hardened_hash_test.cpp +++ b/src/test/basics/hardened_hash_test.cpp @@ -1,14 +1,18 @@ #include -#include +#include #include +#include #include #include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { template class test_user_type_member @@ -50,8 +54,7 @@ public: } }; -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail //------------------------------------------------------------------------------ @@ -78,7 +81,7 @@ class unsigned_integer { private: static_assert( - std::is_integral::value && std::is_unsigned::value, + std::is_integral_v && std::is_unsigned_v, "UInt must be an unsigned integral type"); static_assert(Bits % (8 * sizeof(UInt)) == 0, "Bits must be a multiple of 8*sizeof(UInt)"); diff --git a/src/test/basics/join_test.cpp b/src/test/basics/join_test.cpp index 36d34eee04..c03a027971 100644 --- a/src/test/basics/join_test.cpp +++ b/src/test/basics/join_test.cpp @@ -1,10 +1,17 @@ #include +#include #include -#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { struct join_test : beast::unit_test::suite { @@ -73,5 +80,4 @@ struct join_test : beast::unit_test::suite BEAST_DEFINE_TESTSUITE(join, basics, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/beast/IPEndpointCommon.h b/src/test/beast/IPEndpointCommon.h index 73cbe7d95b..2f839af5e2 100644 --- a/src/test/beast/IPEndpointCommon.h +++ b/src/test/beast/IPEndpointCommon.h @@ -1,8 +1,7 @@ #include #include -namespace beast { -namespace IP { +namespace beast::IP { inline Endpoint randomEP(bool v4 = true) @@ -39,5 +38,4 @@ randomEP(bool v4 = true) rand_int(1, UINT16_MAX)}; } -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/src/test/beast/IPEndpoint_test.cpp b/src/test/beast/IPEndpoint_test.cpp index ce01743896..759a3fe3ad 100644 --- a/src/test/beast/IPEndpoint_test.cpp +++ b/src/test/beast/IPEndpoint_test.cpp @@ -4,15 +4,25 @@ #include #include +#include +#include +#include #include -#include +#include -#include +#include #include +#include #include +#include -namespace beast { -namespace IP { +#include +#include +#include +#include +#include + +namespace beast::IP { //------------------------------------------------------------------------------ @@ -456,5 +466,4 @@ public: BEAST_DEFINE_TESTSUITE(IPEndpoint, beast, beast); -} // namespace IP -} // namespace beast +} // namespace beast::IP diff --git a/src/test/beast/LexicalCast_test.cpp b/src/test/beast/LexicalCast_test.cpp index aa3ccfe64e..410358111e 100644 --- a/src/test/beast/LexicalCast_test.cpp +++ b/src/test/beast/LexicalCast_test.cpp @@ -1,7 +1,12 @@ #include -#include +#include #include +#include +#include +#include +#include + namespace beast { class LexicalCast_test : public unit_test::suite diff --git a/src/test/beast/SemanticVersion_test.cpp b/src/test/beast/SemanticVersion_test.cpp index cae10497af..7e25e845fc 100644 --- a/src/test/beast/SemanticVersion_test.cpp +++ b/src/test/beast/SemanticVersion_test.cpp @@ -1,5 +1,7 @@ #include -#include +#include + +#include namespace beast { diff --git a/src/test/beast/aged_associative_container_test.cpp b/src/test/beast/aged_associative_container_test.cpp index c47b41478b..a979cdbb38 100644 --- a/src/test/beast/aged_associative_container_test.cpp +++ b/src/test/beast/aged_associative_container_test.cpp @@ -7,9 +7,18 @@ #include #include #include -#include +#include +#include +#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #ifndef BEAST_AGED_UNORDERED_NO_ALLOC_DEFAULTCTOR @@ -36,6 +45,8 @@ public: template struct CompT { + CompT() = delete; + explicit CompT(int) { } @@ -51,7 +62,6 @@ public: } private: - CompT() = delete; std::less m_less; }; @@ -59,6 +69,8 @@ public: class HashT { public: + HashT() = delete; + explicit HashT(int) { } @@ -70,7 +82,6 @@ public: } private: - HashT() = delete; std::hash m_hash; }; @@ -78,6 +89,8 @@ public: struct EqualT { public: + EqualT() = delete; + explicit EqualT(int) { } @@ -89,7 +102,6 @@ public: } private: - EqualT() = delete; std::equal_to m_eq; }; @@ -148,7 +160,6 @@ public: { } #else - private: AllocT() = delete; #endif }; @@ -392,22 +403,22 @@ public: //-------------------------------------------------------------------------- template - typename std::enable_if::type + std::enable_if_t checkMapContents(Container& c, Values const& v); template - typename std::enable_if::type + std::enable_if_t checkMapContents(Container, Values const&) { } // unordered template - typename std::enable_if::type::is_unordered::value>::type + std::enable_if_t::type::is_unordered::value> checkUnorderedContentsRefRef(C&& c, Values const& v); template - typename std::enable_if::type::is_unordered::value>::type + std::enable_if_t::type::is_unordered::value> checkUnorderedContentsRefRef(C&&, Values const&) { } @@ -428,32 +439,32 @@ public: // ordered template - typename std::enable_if::type + std::enable_if_t testConstructEmpty(); // unordered template - typename std::enable_if::type + std::enable_if_t testConstructEmpty(); // ordered template - typename std::enable_if::type + std::enable_if_t testConstructRange(); // unordered template - typename std::enable_if::type + std::enable_if_t testConstructRange(); // ordered template - typename std::enable_if::type + std::enable_if_t testConstructInitList(); // unordered template - typename std::enable_if::type + std::enable_if_t testConstructInitList(); //-------------------------------------------------------------------------- @@ -470,11 +481,11 @@ public: // Unordered containers don't have reverse iterators template - typename std::enable_if::type + std::enable_if_t testReverseIterator(); template - typename std::enable_if::type + std::enable_if_t testReverseIterator() { } @@ -519,11 +530,11 @@ public: // map, unordered_map template - typename std::enable_if::type + std::enable_if_t testArrayCreate(); template - typename std::enable_if::type + std::enable_if_t testArrayCreate() { } @@ -563,11 +574,11 @@ public: // ordered template - typename std::enable_if::type + std::enable_if_t testCompare(); template - typename std::enable_if::type + std::enable_if_t testCompare() { } @@ -576,12 +587,12 @@ public: // ordered template - typename std::enable_if::type + std::enable_if_t testObservers(); // unordered template - typename std::enable_if::type + std::enable_if_t testObservers(); //-------------------------------------------------------------------------- @@ -604,7 +615,7 @@ public: // Check contents via at() and operator[] // map, unordered_map template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::checkMapContents(Container& c, Values const& v) { if (v.empty()) @@ -630,10 +641,10 @@ aged_associative_container_test_base::checkMapContents(Container& c, Values cons // unordered template -typename std::enable_if::type::is_unordered::value>::type +std::enable_if_t::type::is_unordered::value> aged_associative_container_test_base::checkUnorderedContentsRefRef(C&& c, Values const& v) { - using Cont = typename std::remove_reference::type; + using Cont = std::remove_reference_t; using Traits = TestTraits; using size_type = typename Cont::size_type; @@ -659,7 +670,7 @@ template void aged_associative_container_test_base::checkContentsRefRef(C&& c, Values const& v) { - using Cont = typename std::remove_reference::type; + using Cont = std::remove_reference_t; using size_type = typename Cont::size_type; BEAST_EXPECT(c.size() == v.size()); @@ -704,7 +715,7 @@ aged_associative_container_test_base::checkContents(Cont& c) // ordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testConstructEmpty() { using Traits = TestTraits; @@ -740,7 +751,7 @@ aged_associative_container_test_base::testConstructEmpty() // unordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testConstructEmpty() { using Traits = TestTraits; @@ -798,7 +809,7 @@ aged_associative_container_test_base::testConstructEmpty() // ordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testConstructRange() { using Traits = TestTraits; @@ -845,7 +856,7 @@ aged_associative_container_test_base::testConstructRange() // unordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testConstructRange() { using Traits = TestTraits; @@ -911,7 +922,7 @@ aged_associative_container_test_base::testConstructRange() // ordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testConstructInitList() { using Traits = TestTraits; @@ -927,7 +938,7 @@ aged_associative_container_test_base::testConstructInitList() // unordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testConstructInitList() { using Traits = TestTraits; @@ -1073,7 +1084,7 @@ aged_associative_container_test_base::testIterator() } template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testReverseIterator() { using Traits = TestTraits; @@ -1349,7 +1360,7 @@ aged_associative_container_test_base::testChronological() // map, unordered_map template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testArrayCreate() { using Traits = TestTraits; @@ -1632,7 +1643,7 @@ aged_associative_container_test_base::testRangeErase() // ordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testCompare() { using Traits = TestTraits; @@ -1663,7 +1674,7 @@ aged_associative_container_test_base::testCompare() // ordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testObservers() { using Traits = TestTraits; @@ -1681,7 +1692,7 @@ aged_associative_container_test_base::testObservers() // unordered template -typename std::enable_if::type +std::enable_if_t aged_associative_container_test_base::testObservers() { using Traits = TestTraits; @@ -1733,45 +1744,43 @@ public: using T = int; static_assert( - std::is_same, detail::aged_ordered_container>::value, + std::is_same_v, detail::aged_ordered_container>, "bad alias: aged_set"); static_assert( - std::is_same, detail::aged_ordered_container>:: - value, + std::is_same_v, detail::aged_ordered_container>, "bad alias: aged_multiset"); static_assert( - std::is_same, detail::aged_ordered_container>::value, + std::is_same_v, detail::aged_ordered_container>, "bad alias: aged_map"); static_assert( - std::is_same, detail::aged_ordered_container>:: - value, + std::is_same_v, detail::aged_ordered_container>, "bad alias: aged_multimap"); static_assert( - std::is_same< + std::is_same_v< aged_unordered_set, - detail::aged_unordered_container>::value, + detail::aged_unordered_container>, "bad alias: aged_unordered_set"); static_assert( - std::is_same< + std::is_same_v< aged_unordered_multiset, - detail::aged_unordered_container>::value, + detail::aged_unordered_container>, "bad alias: aged_unordered_multiset"); static_assert( - std::is_same< + std::is_same_v< aged_unordered_map, - detail::aged_unordered_container>::value, + detail::aged_unordered_container>, "bad alias: aged_unordered_map"); static_assert( - std::is_same< + std::is_same_v< aged_unordered_multimap, - detail::aged_unordered_container>::value, + detail::aged_unordered_container>, "bad alias: aged_unordered_multimap"); void diff --git a/src/test/beast/beast_CurrentThreadName_test.cpp b/src/test/beast/beast_CurrentThreadName_test.cpp index 2a365c6e9c..d3d3850d75 100644 --- a/src/test/beast/beast_CurrentThreadName_test.cpp +++ b/src/test/beast/beast_CurrentThreadName_test.cpp @@ -1,12 +1,17 @@ #include -#include +#include #include +#if BOOST_OS_LINUX +#include +#endif + +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class CurrentThreadName_test : public beast::unit_test::suite { @@ -100,5 +105,4 @@ public: BEAST_DEFINE_TESTSUITE(CurrentThreadName, beast, beast); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/beast/beast_Journal_test.cpp b/src/test/beast/beast_Journal_test.cpp index 35ab3640bd..7a96a1e2aa 100644 --- a/src/test/beast/beast_Journal_test.cpp +++ b/src/test/beast/beast_Journal_test.cpp @@ -1,6 +1,8 @@ -#include +#include #include +#include + namespace beast { class Journal_test : public unit_test::suite diff --git a/src/test/beast/beast_PropertyStream_test.cpp b/src/test/beast/beast_PropertyStream_test.cpp index 9e76749218..6709671a70 100644 --- a/src/test/beast/beast_PropertyStream_test.cpp +++ b/src/test/beast/beast_PropertyStream_test.cpp @@ -1,6 +1,8 @@ -#include +#include #include +#include + namespace beast { class PropertyStream_test : public unit_test::suite diff --git a/src/test/beast/beast_Zero_test.cpp b/src/test/beast/beast_Zero_test.cpp index c3dfbc8c4b..a509723773 100644 --- a/src/test/beast/beast_Zero_test.cpp +++ b/src/test/beast/beast_Zero_test.cpp @@ -1,4 +1,4 @@ -#include +#include #include namespace beast { diff --git a/src/test/beast/beast_abstract_clock_test.cpp b/src/test/beast/beast_abstract_clock_test.cpp index 43a210e128..c1a0c18839 100644 --- a/src/test/beast/beast_abstract_clock_test.cpp +++ b/src/test/beast/beast_abstract_clock_test.cpp @@ -2,9 +2,10 @@ #include #include -#include +#include -#include +#include +#include #include #include diff --git a/src/test/beast/beast_basic_seconds_clock_test.cpp b/src/test/beast/beast_basic_seconds_clock_test.cpp index ccdd76da20..b0d8ab5e92 100644 --- a/src/test/beast/beast_basic_seconds_clock_test.cpp +++ b/src/test/beast/beast_basic_seconds_clock_test.cpp @@ -1,5 +1,5 @@ #include -#include +#include namespace beast { diff --git a/src/test/beast/beast_io_latency_probe_test.cpp b/src/test/beast/beast_io_latency_probe_test.cpp index dfa18e6770..dfd20eced0 100644 --- a/src/test/beast/beast_io_latency_probe_test.cpp +++ b/src/test/beast/beast_io_latency_probe_test.cpp @@ -1,16 +1,22 @@ #include #include -#include +#include #include -#include -#include +#include // IWYU pragma: keep #include +#include +#include -#include -#include -#include -#include +#include +#include // IWYU pragma: keep +#include +#include +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include +#include +#include // IWYU pragma: keep #include using namespace std::chrono_literals; diff --git a/src/test/beast/define_print.cpp b/src/test/beast/define_print.cpp index 07b1422a54..e3da3e7fe1 100644 --- a/src/test/beast/define_print.cpp +++ b/src/test/beast/define_print.cpp @@ -5,13 +5,15 @@ #include #include #include +#include +#include +#include #include // Include this .cpp in your project to gain access to the printing suite -namespace beast { -namespace unit_test { +namespace beast::unit_test { /** A suite that prints the list of globally defined suites. */ class print_test : public suite @@ -42,5 +44,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL(print, beast, beast); -} // namespace unit_test -} // namespace beast +} // namespace beast::unit_test diff --git a/src/test/beast/xxhasher_test.cpp b/src/test/beast/xxhasher_test.cpp index 868d522384..385ed0558a 100644 --- a/src/test/beast/xxhasher_test.cpp +++ b/src/test/beast/xxhasher_test.cpp @@ -1,5 +1,7 @@ #include -#include +#include + +#include namespace beast { diff --git a/src/test/conditions/PreimageSha256_test.cpp b/src/test/conditions/PreimageSha256_test.cpp index 374b6eb925..3e6ee24d57 100644 --- a/src/test/conditions/PreimageSha256_test.cpp +++ b/src/test/conditions/PreimageSha256_test.cpp @@ -1,19 +1,16 @@ #include #include #include -#include -#include +#include #include #include -#include -#include #include +#include #include #include -namespace xrpl { -namespace cryptoconditions { +namespace xrpl::cryptoconditions { class PreimageSha256_test : public beast::unit_test::suite { @@ -168,6 +165,4 @@ class PreimageSha256_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(PreimageSha256, conditions, xrpl); -} // namespace cryptoconditions - -} // namespace xrpl +} // namespace xrpl::cryptoconditions diff --git a/src/test/consensus/ByzantineFailureSim_test.cpp b/src/test/consensus/ByzantineFailureSim_test.cpp index f86ae556bf..19de5ac83c 100644 --- a/src/test/consensus/ByzantineFailureSim_test.cpp +++ b/src/test/consensus/ByzantineFailureSim_test.cpp @@ -1,11 +1,20 @@ #include +#include +#include +#include +#include +#include +#include -#include +#include -#include +#include -namespace xrpl { -namespace test { +#include +#include +#include + +namespace xrpl::test { class ByzantineFailureSim_test : public beast::unit_test::suite { @@ -77,5 +86,4 @@ class ByzantineFailureSim_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_MANUAL(ByzantineFailureSim, consensus, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/Consensus_test.cpp b/src/test/consensus/Consensus_test.cpp index 8b562454e3..c8be3f09f5 100644 --- a/src/test/consensus/Consensus_test.cpp +++ b/src/test/consensus/Consensus_test.cpp @@ -1,13 +1,35 @@ #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include -#include -#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class Consensus_test : public beast::unit_test::suite { @@ -1028,7 +1050,7 @@ public: // Simulate clients submitting 1 tx every 5 seconds to a random // validator - Rate const rate{1, 5s}; + Rate const rate{.count = 1, .duration = 5s}; auto peerSelector = makeSelector( network.begin(), network.end(), std::vector(network.size(), 1.), sim.rng); auto txSubmitter = makeSubmitter( @@ -1421,5 +1443,4 @@ public: }; BEAST_DEFINE_TESTSUITE(Consensus, consensus, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/DistributedValidatorsSim_test.cpp b/src/test/consensus/DistributedValidatorsSim_test.cpp index f510e00628..70a7e59988 100644 --- a/src/test/consensus/DistributedValidatorsSim_test.cpp +++ b/src/test/consensus/DistributedValidatorsSim_test.cpp @@ -1,18 +1,26 @@ #include +#include +#include +#include +#include +#include +#include -#include - -#include -#include +#include #include +#include +#include #include +#include +#include +#include +#include #include #include -#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { /** In progress simulations for diversifying and distributing validators */ @@ -61,7 +69,7 @@ class DistributedValidators_test : public beast::unit_test::suite // Run for 10 minutes, submitting 100 tx/second std::chrono::nanoseconds const simDuration = 10min; std::chrono::nanoseconds const quiet = 10s; - Rate const rate{100, 1000ms}; + Rate const rate{.count = 100, .duration = 1000ms}; // Initialize timers HeartbeatTimer heart(sim.scheduler); @@ -157,7 +165,7 @@ class DistributedValidators_test : public beast::unit_test::suite // Run for 10 minutes, submitting 100 tx/second std::chrono::nanoseconds const simDuration = 10min; std::chrono::nanoseconds const quiet = 10s; - Rate const rate{100, 1000ms}; + Rate const rate{.count = 100, .duration = 1000ms}; // Initialize timers HeartbeatTimer heart(sim.scheduler); @@ -242,5 +250,4 @@ class DistributedValidators_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(DistributedValidators, consensus, xrpl, 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/LedgerTiming_test.cpp b/src/test/consensus/LedgerTiming_test.cpp index 8313ffd0d4..749a2488b3 100644 --- a/src/test/consensus/LedgerTiming_test.cpp +++ b/src/test/consensus/LedgerTiming_test.cpp @@ -1,8 +1,12 @@ -#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include + +namespace xrpl::test { class LedgerTiming_test : public beast::unit_test::suite { @@ -111,5 +115,4 @@ class LedgerTiming_test : public beast::unit_test::suite }; BEAST_DEFINE_TESTSUITE(LedgerTiming, consensus, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/LedgerTrie_test.cpp b/src/test/consensus/LedgerTrie_test.cpp index 0836b9c342..1ae6e99d80 100644 --- a/src/test/consensus/LedgerTrie_test.cpp +++ b/src/test/consensus/LedgerTrie_test.cpp @@ -2,12 +2,13 @@ #include -#include +#include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class LedgerTrie_test : public beast::unit_test::suite { @@ -707,5 +708,4 @@ class LedgerTrie_test : public beast::unit_test::suite }; BEAST_DEFINE_TESTSUITE(LedgerTrie, consensus, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/NegativeUNL_test.cpp b/src/test/consensus/NegativeUNL_test.cpp index 0f97704755..220ca5ef12 100644 --- a/src/test/consensus/NegativeUNL_test.cpp +++ b/src/test/consensus/NegativeUNL_test.cpp @@ -1,15 +1,42 @@ -#include + +#include #include #include #include -#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { /* * This file implements the following negative UNL related tests: @@ -758,7 +785,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite */ { // 1. no skip list - NetworkHistory history = {*this, {10, 0, false, false, 1}}; + NetworkHistory history = { + *this, + {.numNodes = 10, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 1}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -770,7 +803,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite { // 2. short skip list - NetworkHistory history = {*this, {10, 0, false, false, 256 / 2}}; + NetworkHistory history = { + *this, + {.numNodes = 10, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 256 / 2}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -782,7 +821,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite { // 3. local node not enough history - NetworkHistory history = {*this, {10, 0, false, false, 256 + 2}}; + NetworkHistory history = { + *this, + {.numNodes = 10, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 256 + 2}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -801,7 +846,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite { // 4. a node double validated some seq // 5. local node had enough validations but on a wrong chain - NetworkHistory history = {*this, {10, 0, false, false, 256 + 2}}; + NetworkHistory history = { + *this, + {.numNodes = 10, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 256 + 2}}; // We need two chains for these tests bool const wrongChainSuccess = history.goodHistory; BEAST_EXPECT(wrongChainSuccess); @@ -862,7 +913,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite { // 6. a good case - NetworkHistory history = {*this, {10, 0, false, false, 256 + 1}}; + NetworkHistory history = { + *this, + {.numNodes = 10, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 256 + 1}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -934,7 +991,13 @@ class NegativeUNLVoteInternal_test : public beast::unit_test::suite * 8. 2 new validators have bad scores, not in negUnl * 9. expired the new validators have bad scores, not in negUnl */ - NetworkHistory history = {*this, {35, 0, false, false, 0}}; + NetworkHistory history = { + *this, + {.numNodes = 35, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 0}}; hash_set negUnl_012; for (std::uint32_t i = 0; i < 3; ++i) @@ -1309,7 +1372,13 @@ class NegativeUNLVoteScoreTable_test : public beast::unit_test::suite { for (std::uint32_t sp = 0; sp < 4; ++sp) { - NetworkHistory history = {*this, {unlSize, 0, false, false, 256 + 2}}; + NetworkHistory history = { + *this, + {.numNodes = unlSize, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = 256 + 2}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1424,7 +1493,13 @@ class NegativeUNLVoteGoodScore_test : public beast::unit_test::suite { //== all good score, negativeUNL empty //-- txSet.size = 0 - NetworkHistory history = {*this, {51, 0, false, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 51, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1439,7 +1514,13 @@ class NegativeUNLVoteGoodScore_test : public beast::unit_test::suite { // all good score, negativeUNL not empty (use hasToDisable) //-- txSet.size = 1 - NetworkHistory history = {*this, {37, 0, true, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 37, + .negUNLSize = 0, + .hasToDisable = true, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1469,7 +1550,13 @@ class NegativeUNLVoteOffline_test : public beast::unit_test::suite { //== 2 nodes offline, negativeUNL empty (use hasToReEnable) //-- txSet.size = 1 - NetworkHistory history = {*this, {29, 1, false, true, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 29, + .negUNLSize = 1, + .hasToDisable = false, + .hasToReEnable = true, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1485,7 +1572,13 @@ class NegativeUNLVoteOffline_test : public beast::unit_test::suite { // 2 nodes offline, in negativeUNL //-- txSet.size = 0 - NetworkHistory history = {*this, {30, 1, true, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 30, + .negUNLSize = 1, + .hasToDisable = true, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1519,7 +1612,13 @@ class NegativeUNLVoteMaxListed_test : public beast::unit_test::suite { // 2 nodes offline, not in negativeUNL, but maxListed //-- txSet.size = 0 - NetworkHistory history = {*this, {32, 8, true, true, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 32, + .negUNLSize = 8, + .hasToDisable = true, + .hasToReEnable = true, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1550,7 +1649,13 @@ class NegativeUNLVoteRetiredValidator_test : public beast::unit_test::suite { //== 2 nodes offline including me, not in negativeUNL //-- txSet.size = 0 - NetworkHistory history = {*this, {35, 0, false, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 35, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1565,7 +1670,13 @@ class NegativeUNLVoteRetiredValidator_test : public beast::unit_test::suite { // 2 nodes offline, not in negativeUNL, but I'm not a validator //-- txSet.size = 0 - NetworkHistory history = {*this, {40, 0, false, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 40, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1580,7 +1691,13 @@ class NegativeUNLVoteRetiredValidator_test : public beast::unit_test::suite { //== 2 in negativeUNL, but not in unl, no other remove candidates //-- txSet.size = 1 - NetworkHistory history = {*this, {25, 2, false, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 25, + .negUNLSize = 2, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1614,7 +1731,13 @@ class NegativeUNLVoteNewValidator_test : public beast::unit_test::suite { //== 2 new validators have bad scores //-- txSet.size = 0 - NetworkHistory history = {*this, {15, 0, false, false, {}}}; + NetworkHistory history = { + *this, + {.numNodes = 15, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = {}}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1640,7 +1763,12 @@ class NegativeUNLVoteNewValidator_test : public beast::unit_test::suite //== 2 expired new validators have bad scores //-- txSet.size = 1 NetworkHistory history = { - *this, {21, 0, false, false, NegativeUNLVote::newValidatorDisableSkip * 2}}; + *this, + {.numNodes = 21, + .negUNLSize = 0, + .hasToDisable = false, + .hasToReEnable = false, + .numLedgers = NegativeUNLVote::newValidatorDisableSkip * 2}}; BEAST_EXPECT(history.goodHistory); if (history.goodHistory) { @@ -1858,5 +1986,4 @@ createTx(bool disabling, LedgerIndex seq, PublicKey const& txKey) return STTx(ttUNL_MODIFY, fill); } -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/RCLCensorshipDetector_test.cpp b/src/test/consensus/RCLCensorshipDetector_test.cpp index 4093ffe900..1ebf85c848 100644 --- a/src/test/consensus/RCLCensorshipDetector_test.cpp +++ b/src/test/consensus/RCLCensorshipDetector_test.cpp @@ -1,12 +1,12 @@ #include -#include +#include #include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class RCLCensorshipDetector_test : public beast::unit_test::suite { @@ -80,5 +80,4 @@ public: }; BEAST_DEFINE_TESTSUITE(RCLCensorshipDetector, consensus, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/ScaleFreeSim_test.cpp b/src/test/consensus/ScaleFreeSim_test.cpp index 2c8014d8e8..23952ab850 100644 --- a/src/test/consensus/ScaleFreeSim_test.cpp +++ b/src/test/consensus/ScaleFreeSim_test.cpp @@ -1,12 +1,21 @@ #include +#include +#include +#include #include +#include +#include -#include +#include -#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include + +namespace xrpl::test { class ScaleFreeSim_test : public beast::unit_test::suite { @@ -58,7 +67,7 @@ class ScaleFreeSim_test : public beast::unit_test::suite // Run for 10 minutes, submitting 100 tx/second std::chrono::nanoseconds const simDuration = 10min; std::chrono::nanoseconds const quiet = 10s; - Rate const rate{100, 1000ms}; + Rate const rate{.count = 100, .duration = 1000ms}; // txs, start/stop/step, target auto peerSelector = makeSelector(network.begin(), network.end(), ranks, sim.rng); @@ -98,5 +107,4 @@ class ScaleFreeSim_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(ScaleFreeSim, consensus, xrpl, 80); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/consensus/Validations_test.cpp b/src/test/consensus/Validations_test.cpp index fef6e79036..2cb8ae2f6c 100644 --- a/src/test/consensus/Validations_test.cpp +++ b/src/test/consensus/Validations_test.cpp @@ -1,17 +1,25 @@ #include +#include #include #include +#include +#include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { class Validations_test : public beast::unit_test::suite { using clock_type = beast::abstract_clock const; @@ -1047,6 +1055,4 @@ class Validations_test : public beast::unit_test::suite }; BEAST_DEFINE_TESTSUITE(Validations, consensus, xrpl); -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/core/ClosureCounter_test.cpp b/src/test/core/ClosureCounter_test.cpp index 088b7b9ff9..d8e95a1dda 100644 --- a/src/test/core/ClosureCounter_test.cpp +++ b/src/test/core/ClosureCounter_test.cpp @@ -1,14 +1,16 @@ #include +#include -#include +#include +#include #include #include -#include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { //------------------------------------------------------------------------------ @@ -317,5 +319,4 @@ public: BEAST_DEFINE_TESTSUITE(ClosureCounter, core, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/core/Config_test.cpp b/src/test/core/Config_test.cpp index 6392a75f80..a3137b8e69 100644 --- a/src/test/core/Config_test.cpp +++ b/src/test/core/Config_test.cpp @@ -4,15 +4,31 @@ #include #include +#include #include #include #include -#include -#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include namespace xrpl { namespace detail { @@ -249,9 +265,7 @@ public: return absolute(file()).string(); } - ~ValidatorsTxtGuard() - { - } + ~ValidatorsTxtGuard() = default; }; } // namespace detail @@ -507,7 +521,7 @@ port_wss_admin { c.loadFromString(boost::str(configTemplate % validationSeed % token)); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -528,7 +542,7 @@ port_wss_admin main )xrpldConfig"); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -541,7 +555,7 @@ main c.loadFromString(R"xrpldConfig( )xrpldConfig"); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -556,7 +570,7 @@ main 255 )xrpldConfig"); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -571,7 +585,7 @@ main 10000 )xrpldConfig"); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -598,7 +612,7 @@ main Config c; c.loadFromString(boost::str(cc % missingPath)); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -617,7 +631,7 @@ main Config c; c.loadFromString(boost::str(cc % invalidFile.string())); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -725,7 +739,7 @@ trust-these-validators.gov c.loadFromString(toLoad); fail(); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -754,7 +768,7 @@ value = 2 c.loadFromString(toLoad); fail(); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -802,7 +816,7 @@ trust-these-validators.gov c.loadFromString(toLoad); fail(); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -948,7 +962,7 @@ trust-these-validators.gov c.loadFromString(boost::str(cc % vtg.validatorsFile())); fail(); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -974,7 +988,7 @@ trust-these-validators.gov Config c2; c2.loadFromString(boost::str(cc % vtg.validatorsFile())); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -1262,20 +1276,41 @@ r.ripple.com:51235 }; std::array const tests = { - {{"password = aaaa\\#bbbb", "password", "aaaa#bbbb", false}, - {"password = aaaa#bbbb", "password", "aaaa", true}, - {"password = aaaa #bbbb", "password", "aaaa", true}, + {{.line = "password = aaaa\\#bbbb", + .field = "password", + .expect = "aaaa#bbbb", + .had_comment = false}, + {.line = "password = aaaa#bbbb", + .field = "password", + .expect = "aaaa", + .had_comment = true}, + {.line = "password = aaaa #bbbb", + .field = "password", + .expect = "aaaa", + .had_comment = true}, // since the value is all comment, this doesn't parse as k=v : - {"password = #aaaa #bbbb", "", "password =", true}, - {"password = aaaa\\# #bbbb", "password", "aaaa#", true}, - {"password = aaaa\\##bbbb", "password", "aaaa#", true}, - {"aaaa#bbbb", "", "aaaa", true}, - {"aaaa\\#bbbb", "", "aaaa#bbbb", false}, - {"aaaa\\##bbbb", "", "aaaa#", true}, - {"aaaa #bbbb", "", "aaaa", true}, - {"1 #comment", "", "1", true}, - {"#whole thing is comment", "", "", false}, - {" #whole comment with space", "", "", false}}}; + {.line = "password = #aaaa #bbbb", + .field = "", + .expect = "password =", + .had_comment = true}, + {.line = "password = aaaa\\# #bbbb", + .field = "password", + .expect = "aaaa#", + .had_comment = true}, + {.line = "password = aaaa\\##bbbb", + .field = "password", + .expect = "aaaa#", + .had_comment = true}, + {.line = "aaaa#bbbb", .field = "", .expect = "aaaa", .had_comment = true}, + {.line = "aaaa\\#bbbb", .field = "", .expect = "aaaa#bbbb", .had_comment = false}, + {.line = "aaaa\\##bbbb", .field = "", .expect = "aaaa#", .had_comment = true}, + {.line = "aaaa #bbbb", .field = "", .expect = "aaaa", .had_comment = true}, + {.line = "1 #comment", .field = "", .expect = "1", .had_comment = true}, + {.line = "#whole thing is comment", .field = "", .expect = "", .had_comment = false}, + {.line = " #whole comment with space", + .field = "", + .expect = "", + .had_comment = false}}}; for (auto const& t : tests) { @@ -1451,7 +1486,7 @@ r.ripple.com:51235 fail(); } } - catch (std::runtime_error&) + catch (std::runtime_error const&) { if (!shouldPass) { @@ -1477,7 +1512,7 @@ r.ripple.com:51235 c.loadFromString("[overlay]\nmax_unknown_time=" + value); return c.MAX_UNKNOWN_TIME; } - catch (std::runtime_error&) + catch (std::runtime_error const&) { return {}; } @@ -1511,7 +1546,7 @@ r.ripple.com:51235 c.loadFromString("[overlay]\nmax_diverged_time=" + value); return c.MAX_DIVERGED_TIME; } - catch (std::runtime_error&) + catch (std::runtime_error const&) { return {}; } diff --git a/src/test/core/Coroutine_test.cpp b/src/test/core/Coroutine_test.cpp index 4cfb86f931..38bafe08fd 100644 --- a/src/test/core/Coroutine_test.cpp +++ b/src/test/core/Coroutine_test.cpp @@ -1,12 +1,21 @@ -#include +#include +#include + +#include + +#include +#include +#include #include +#include #include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class Coroutine_test : public beast::unit_test::suite { @@ -165,5 +174,4 @@ public: BEAST_DEFINE_TESTSUITE(Coroutine, core, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/core/JobQueue_test.cpp b/src/test/core/JobQueue_test.cpp index 13142c299f..8163c7b057 100644 --- a/src/test/core/JobQueue_test.cpp +++ b/src/test/core/JobQueue_test.cpp @@ -1,10 +1,13 @@ #include -#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { //------------------------------------------------------------------------------ @@ -138,5 +141,4 @@ public: BEAST_DEFINE_TESTSUITE(JobQueue, core, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/core/SociDB_test.cpp b/src/test/core/SociDB_test.cpp index c58c34756a..29aeca7ce5 100644 --- a/src/test/core/SociDB_test.cpp +++ b/src/test/core/SociDB_test.cpp @@ -2,12 +2,28 @@ #include #include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include namespace xrpl { class SociDB_test final : public TestSuite @@ -64,7 +80,7 @@ public: { } } - ~SociDB_test() + ~SociDB_test() override { try { @@ -113,10 +129,8 @@ public: for (int i = 0; i < stringResult.size(); ++i) { auto si = std::distance( - stringData.begin(), - std::find(stringData.begin(), stringData.end(), stringResult[i])); - auto ii = std::distance( - intData.begin(), std::find(intData.begin(), intData.end(), intResult[i])); + stringData.begin(), std::ranges::find(stringData, stringResult[i])); + auto ii = std::distance(intData.begin(), std::ranges::find(intData, intResult[i])); BEAST_EXPECT(si == ii && si < stringResult.size()); } }; diff --git a/src/test/core/Workers_test.cpp b/src/test/core/Workers_test.cpp index 6631cff1c4..84ff85f4ec 100644 --- a/src/test/core/Workers_test.cpp +++ b/src/test/core/Workers_test.cpp @@ -1,4 +1,5 @@ -#include +#include +#include #include #include #include diff --git a/src/test/csf/BasicNetwork.h b/src/test/csf/BasicNetwork.h index 85c77ac47d..63d85c3070 100644 --- a/src/test/csf/BasicNetwork.h +++ b/src/test/csf/BasicNetwork.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Peer to peer network simulator. The network is formed from a set of Peer objects representing @@ -74,7 +72,7 @@ class BasicNetwork { bool inbound = false; duration delay{}; - time_point established{}; + time_point established; link_type() = default; link_type(bool inbound_, duration delay_, time_point established_) : inbound(inbound_), delay(delay_), established(established_) @@ -224,6 +222,4 @@ BasicNetwork::send(Peer const& from, Peer const& to, Function&& f) }); } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/BasicNetwork_test.cpp b/src/test/csf/BasicNetwork_test.cpp index eee16c2ce1..d81638c214 100644 --- a/src/test/csf/BasicNetwork_test.cpp +++ b/src/test/csf/BasicNetwork_test.cpp @@ -1,13 +1,12 @@ #include #include -#include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class BasicNetwork_test : public beast::unit_test::suite { @@ -132,5 +131,4 @@ public: BEAST_DEFINE_TESTSUITE(BasicNetwork, csf, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/csf/CollectorRef.h b/src/test/csf/CollectorRef.h index 735a42ab16..23baa020b8 100644 --- a/src/test/csf/CollectorRef.h +++ b/src/test/csf/CollectorRef.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Holds a type-erased reference to an arbitrary collector. @@ -139,31 +137,31 @@ class CollectorRef Any& operator=(Any&&) = default; - virtual void + void on(PeerID node, tp when, Share const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Share const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Share const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Share const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Share const& e) override { t_.on(node, when, e); @@ -175,25 +173,25 @@ class CollectorRef t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Receive const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Receive const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Receive const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Receive const& e) override { t_.on(node, when, e); @@ -205,61 +203,61 @@ class CollectorRef t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Relay const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Relay const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Relay const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, Relay const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, SubmitTx const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, StartRound const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, CloseLedger const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, AcceptLedger const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, WrongPrevLedger const& e) override { t_.on(node, when, e); } - virtual void + void on(PeerID node, tp when, FullyValidateLedger const& e) override { t_.on(node, when, e); @@ -324,6 +322,4 @@ public: } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Digraph.h b/src/test/csf/Digraph.h index 66ef73390a..a5678cc539 100644 --- a/src/test/csf/Digraph.h +++ b/src/test/csf/Digraph.h @@ -18,8 +18,7 @@ struct NoEdgeData } // namespace detail -namespace test { -namespace csf { +namespace test::csf { /** Directed graph @@ -225,6 +224,6 @@ public: } }; -} // namespace csf -} // namespace test +} // namespace test::csf + } // namespace xrpl diff --git a/src/test/csf/Digraph_test.cpp b/src/test/csf/Digraph_test.cpp index 1c34bbcfec..8f5a0fea1b 100644 --- a/src/test/csf/Digraph_test.cpp +++ b/src/test/csf/Digraph_test.cpp @@ -1,12 +1,13 @@ #include -#include +#include +#include #include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class Digraph_test : public beast::unit_test::suite { @@ -77,5 +78,4 @@ public: BEAST_DEFINE_TESTSUITE(Digraph, csf, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/csf/Histogram.h b/src/test/csf/Histogram.h index cbc2d42d6c..6eef1b08c1 100644 --- a/src/test/csf/Histogram.h +++ b/src/test/csf/Histogram.h @@ -6,9 +6,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Basic histogram. @@ -108,6 +106,4 @@ public: } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Histogram_test.cpp b/src/test/csf/Histogram_test.cpp index b0a8d8490d..6de04ad1ab 100644 --- a/src/test/csf/Histogram_test.cpp +++ b/src/test/csf/Histogram_test.cpp @@ -1,9 +1,8 @@ #include -#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class Histogram_test : public beast::unit_test::suite { @@ -64,5 +63,4 @@ public: BEAST_DEFINE_TESTSUITE(Histogram, csf, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/csf/Peer.h b/src/test/csf/Peer.h index fb1238990e..5cf2757ab1 100644 --- a/src/test/csf/Peer.h +++ b/src/test/csf/Peer.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -19,9 +20,7 @@ #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { namespace bc = boost::container; @@ -62,8 +61,8 @@ struct Peer return proposal_.getJson(); } - std::string - render() const + static std::string + render() { return ""; } @@ -295,9 +294,13 @@ struct Peer using namespace std::chrono_literals; if (when == 0ns) + { what(); + } else + { scheduler.in(when, std::forward(what)); + } } // Issue a new event to the collectors @@ -340,8 +343,10 @@ struct Peer trusts(PeerID const& oId) { for (auto const p : trustGraph.trustedPeers(this)) + { if (p->id == oId) return true; + } return false; } @@ -486,7 +491,7 @@ struct Peer Result onClose(Ledger const& prevLedger, NetClock::time_point closeTime, ConsensusMode mode) { - issue(CloseLedger{prevLedger, openTxs}); + issue(CloseLedger{.prevLedger = prevLedger, .txs = openTxs}); return Result( TxSet{openTxs}, @@ -526,15 +531,14 @@ struct Peer prevLedger, acceptedTxs.txs(), closeResolution, result.position.closeTime()); ledgers[newLedger.id()] = newLedger; - issue(AcceptLedger{newLedger, lastClosedLedger}); + issue(AcceptLedger{.ledger = newLedger, .prior = lastClosedLedger}); prevProposers = result.proposers; prevRoundTime = result.roundTime.read(); lastClosedLedger = newLedger; - auto const it = std::remove_if(openTxs.begin(), openTxs.end(), [&](Tx const& tx) { - return acceptedTxs.exists(tx.id()); - }); - openTxs.erase(it, openTxs.end()); + auto const removed = std::ranges::remove_if( + openTxs, [&](Tx const& tx) { return acceptedTxs.exists(tx.id()); }); + openTxs.erase(removed.begin(), removed.end()); // Only send validation if the new ledger is compatible with our // fully validated ledger @@ -588,7 +592,7 @@ struct Peer if (netLgr != ledgerID) { JLOG(j.trace()) << Json::Compact(validations.getJsonTrie()); - issue(WrongPrevLedger{ledgerID, netLgr}); + issue(WrongPrevLedger{.wrong = ledgerID, .right = netLgr}); } return netLgr; @@ -661,7 +665,7 @@ struct Peer quorum = static_cast(std::ceil(numTrustedPeers * 0.8)); if (count >= quorum && ledger.isAncestor(fullyValidatedLedger)) { - issue(FullyValidateLedger{ledger, fullyValidatedLedger}); + issue(FullyValidateLedger{.ledger = ledger, .prior = fullyValidatedLedger}); fullyValidatedLedger = ledger; } } @@ -750,7 +754,7 @@ struct Peer // TODO: This always suppresses relay of peer positions already seen // Should it allow forwarding if for a recent ledger ? auto& dest = peerPositions[p.prevLedger()]; - if (std::find(dest.begin(), dest.end(), p) != dest.end()) + if (std::ranges::find(dest, p) != dest.end()) return false; dest.push_back(p); @@ -774,7 +778,7 @@ struct Peer { // Ignore and suppress relay of transactions already in last ledger TxSetType const& lastClosedTxs = lastClosedLedger.txs(); - if (lastClosedTxs.find(tx) != lastClosedTxs.end()) + if (lastClosedTxs.contains(tx)) return false; // only relay if it was new to our open ledger @@ -830,8 +834,8 @@ struct Peer { } - bool - validating() const + static bool + validating() { // does not matter return false; @@ -871,7 +875,7 @@ struct Peer if (bestLCL == Ledger::ID{0}) bestLCL = lastClosedLedger.id(); - issue(StartRound{bestLCL, lastClosedLedger}); + issue(StartRound{.bestLedger = bestLCL, .prevLedger = lastClosedLedger}); // Not yet modeling dynamic UNL. hash_set const nowUntrusted; @@ -941,6 +945,4 @@ struct Peer } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/PeerGroup.h b/src/test/csf/PeerGroup.h index 5df6de84a6..6503ac62df 100644 --- a/src/test/csf/PeerGroup.h +++ b/src/test/csf/PeerGroup.h @@ -6,9 +6,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** A group of simulation Peers @@ -35,11 +33,11 @@ public: } PeerGroup(std::vector&& peers) : peers_{std::move(peers)} { - std::sort(peers_.begin(), peers_.end()); + std::ranges::sort(peers_); } PeerGroup(std::vector const& peers) : peers_{peers} { - std::sort(peers_.begin(), peers_.end()); + std::ranges::sort(peers_); } PeerGroup(std::set const& peers) : peers_{peers.begin(), peers.end()} @@ -79,15 +77,14 @@ public: bool contains(Peer const* p) { - return std::find(peers_.begin(), peers_.end(), p) != peers_.end(); + return std::ranges::find(peers_, p) != peers_.end(); } bool contains(PeerID id) { - return std::find_if(peers_.begin(), peers_.end(), [id](Peer const* p) { - return p->id == id; - }) != peers_.end(); + return std::ranges::find_if(peers_, [id](Peer const* p) { return p->id == id; }) != + peers_.end(); } std::size_t @@ -215,12 +212,7 @@ public: operator+(PeerGroup const& a, PeerGroup const& b) { PeerGroup res; - std::set_union( - a.peers_.begin(), - a.peers_.end(), - b.peers_.begin(), - b.peers_.end(), - std::back_inserter(res.peers_)); + std::ranges::set_union(a.peers_, b.peers_, std::back_inserter(res.peers_)); return res; } @@ -230,12 +222,7 @@ public: { PeerGroup res; - std::set_difference( - a.peers_.begin(), - a.peers_.end(), - b.peers_.begin(), - b.peers_.end(), - std::back_inserter(res.peers_)); + std::ranges::set_difference(a.peers_, b.peers_, std::back_inserter(res.peers_)); return res; } @@ -346,6 +333,4 @@ randomRankedConnect( } } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Proposal.h b/src/test/csf/Proposal.h index 641fd2010a..06486daed3 100644 --- a/src/test/csf/Proposal.h +++ b/src/test/csf/Proposal.h @@ -6,14 +6,10 @@ #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Proposal is a position taken in the consensus process and is represented directly from the generic types. */ using Proposal = ConsensusProposal; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Scheduler.h b/src/test/csf/Scheduler.h index 61ec8f62ff..82753124d9 100644 --- a/src/test/csf/Scheduler.h +++ b/src/test/csf/Scheduler.h @@ -9,9 +9,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Simulated discrete-event scheduler. @@ -265,7 +263,7 @@ inline Scheduler::queue_type::~queue_type() auto e = &*iter; ++iter; e->~event(); - alloc_->deallocate(e, sizeof(e)); + alloc_->deallocate(e, sizeof(e)); // NOLINT(bugprone-sizeof-expression) } } @@ -381,8 +379,10 @@ Scheduler::step() if (!step_one()) return false; for (;;) + { if (!step_one()) break; + } return true; } @@ -427,6 +427,4 @@ Scheduler::step_for(std::chrono::duration const& amount) return step_until(now() + amount); } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Scheduler_test.cpp b/src/test/csf/Scheduler_test.cpp index a0b57dd87f..6b14a771d3 100644 --- a/src/test/csf/Scheduler_test.cpp +++ b/src/test/csf/Scheduler_test.cpp @@ -1,11 +1,10 @@ #include -#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class Scheduler_test : public beast::unit_test::suite { @@ -66,5 +65,4 @@ public: BEAST_DEFINE_TESTSUITE(Scheduler, csf, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/csf/Sim.h b/src/test/csf/Sim.h index e5f64cae1f..ca85d79f47 100644 --- a/src/test/csf/Sim.h +++ b/src/test/csf/Sim.h @@ -13,9 +13,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Sink that prepends simulation time to messages */ class BasicSink : public beast::Journal::Sink @@ -151,6 +149,4 @@ public: branches() const; }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/SimTime.h b/src/test/csf/SimTime.h index 2131de9b41..662f3fe19c 100644 --- a/src/test/csf/SimTime.h +++ b/src/test/csf/SimTime.h @@ -4,9 +4,7 @@ #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { using RealClock = std::chrono::system_clock; using RealDuration = RealClock::duration; @@ -16,6 +14,4 @@ using SimClock = beast::manual_clock; using SimDuration = typename SimClock::duration; using SimTime = typename SimClock::time_point; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/TrustGraph.h b/src/test/csf/TrustGraph.h index 3f1fcae0c1..096104bc15 100644 --- a/src/test/csf/TrustGraph.h +++ b/src/test/csf/TrustGraph.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -9,9 +10,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Trust graph @@ -146,6 +145,4 @@ public: } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Tx.h b/src/test/csf/Tx.h index 81393f7bda..8e8f6ea7e4 100644 --- a/src/test/csf/Tx.h +++ b/src/test/csf/Tx.h @@ -12,10 +12,9 @@ #include #include #include +#include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { //! A single transaction class Tx @@ -96,7 +95,7 @@ public: }; TxSet() = default; - TxSet(TxSetType const& s) : txs_{s}, id_{calcID(txs_)} + TxSet(TxSetType s) : txs_{std::move(s)}, id_{calcID(txs_)} { } @@ -183,9 +182,13 @@ operator<<(std::ostream& o, boost::container::flat_set const& ts) for (auto const& t : ts) { if (do_comma) + { o << ", "; + } else + { do_comma = true; + } o << t; } o << " }"; @@ -208,6 +211,4 @@ hash_append(Hasher& h, Tx const& tx) hash_append(h, tx.id()); } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/Validation.h b/src/test/csf/Validation.h index ba4da148f4..2adf64196b 100644 --- a/src/test/csf/Validation.h +++ b/src/test/csf/Validation.h @@ -8,9 +8,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { struct PeerIDTag; //< Uniquely identifies a peer @@ -58,7 +56,7 @@ public: , seq_{seq} , signTime_{sign} , seenTime_{seen} - , key_{key} + , key_{std::move(key)} , nodeID_{nodeID} , full_{full} , loadFee_{loadFee} @@ -172,6 +170,4 @@ public: } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/collectors.h b/src/test/csf/collectors.h index cfe40330ff..8da86cc287 100644 --- a/src/test/csf/collectors.h +++ b/src/test/csf/collectors.h @@ -11,9 +11,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { // A collector is any class that implements // @@ -134,7 +132,9 @@ struct SimDurationCollector init = true; } else + { stop = when; + } } }; @@ -631,7 +631,7 @@ struct JumpCollector { // Not a direct child -> parent switch if (e.ledger.parentID() != e.prior.id()) - closeJumps.emplace_back(Jump{who, when, e.prior, e.ledger}); + closeJumps.emplace_back(Jump{.id = who, .when = when, .from = e.prior, .to = e.ledger}); } void @@ -639,10 +639,11 @@ struct JumpCollector { // Not a direct child -> parent switch if (e.ledger.parentID() != e.prior.id()) - fullyValidatedJumps.emplace_back(Jump{who, when, e.prior, e.ledger}); + { + fullyValidatedJumps.emplace_back( + Jump{.id = who, .when = when, .from = e.prior, .to = e.ledger}); + } } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/events.h b/src/test/csf/events.h index 2aae22d125..ea163d3a80 100644 --- a/src/test/csf/events.h +++ b/src/test/csf/events.h @@ -7,9 +7,7 @@ #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { // Events are emitted by peers at a variety of points during the simulation. // Each event is emitted by a particular peer at a particular time. Collectors @@ -126,6 +124,4 @@ struct FullyValidateLedger Ledger prior; }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/impl/Sim.cpp b/src/test/csf/impl/Sim.cpp index a775dd30ff..8cf6869522 100644 --- a/src/test/csf/impl/Sim.cpp +++ b/src/test/csf/impl/Sim.cpp @@ -1,8 +1,14 @@ #include -namespace xrpl { -namespace test { -namespace csf { +#include +#include + +#include +#include +#include +#include + +namespace xrpl::test::csf { void Sim::run(int ledgers) @@ -38,7 +44,7 @@ Sim::synchronized(PeerGroup const& g) if (g.size() < 1) return true; Peer const* ref = g[0]; - return std::all_of(g.begin(), g.end(), [&ref](Peer const* p) { + return std::ranges::all_of(g, [&ref](Peer const* p) { return p->lastClosedLedger.id() == ref->lastClosedLedger.id() && p->fullyValidatedLedger.id() == ref->fullyValidatedLedger.id(); }); @@ -61,6 +67,4 @@ Sim::branches(PeerGroup const& g) const return oracle.branches(ledgers); } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/impl/ledgers.cpp b/src/test/csf/impl/ledgers.cpp index 9b0a4e3973..a4203b2a15 100644 --- a/src/test/csf/impl/ledgers.cpp +++ b/src/test/csf/impl/ledgers.cpp @@ -1,10 +1,19 @@ #include -#include +#include -namespace xrpl { -namespace test { -namespace csf { +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::csf { Ledger::Instance const Ledger::genesis; @@ -155,6 +164,4 @@ LedgerOracle::branches(std::set const& ledgers) // The size of tips is the number of branches return tips.size(); } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/ledgers.h b/src/test/csf/ledgers.h index 67a7427af6..3869fb7bd4 100644 --- a/src/test/csf/ledgers.h +++ b/src/test/csf/ledgers.h @@ -14,9 +14,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** A ledger is a set of observed transactions and a sequence number identifying the ledger. @@ -59,9 +57,7 @@ private: // ID by the oracle struct Instance { - Instance() - { - } + Instance() = default; // Sequence number Seq seq{0}; @@ -332,6 +328,4 @@ struct LedgerHistoryHelper } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/random.h b/src/test/csf/random.h index f3ecca1dbc..a5c54ec9bf 100644 --- a/src/test/csf/random.h +++ b/src/test/csf/random.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { /** Return a randomly shuffled copy of vector based on weights w. @@ -76,7 +74,7 @@ public: { using tag = typename std::iterator_traits::iterator_category; static_assert( - std::is_same::value, + std::is_same_v, "Selector only supports random access iterators."); // TODO: Allow for forward iterators } @@ -111,7 +109,7 @@ public: } template - inline double + double operator()(Generator&) { return t_; @@ -140,7 +138,7 @@ public: } template - inline double + double operator()(Generator& g) { // use inverse transform of CDF to sample @@ -149,6 +147,4 @@ public: } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/submitters.h b/src/test/csf/submitters.h index ae81b3e89c..be45b4ea2a 100644 --- a/src/test/csf/submitters.h +++ b/src/test/csf/submitters.h @@ -7,9 +7,7 @@ #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { // Submitters are classes for simulating submission of transactions to the // network @@ -62,7 +60,7 @@ class Submitter } template - static std::enable_if_t::value, SimDuration> + static std::enable_if_t, SimDuration> asDuration(T t) { return SimDuration{static_cast(t)}; @@ -105,6 +103,4 @@ makeSubmitter( return Submitter(dist, start, end, sel, s, g); } -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/csf/timers.h b/src/test/csf/timers.h index beb4e142d9..2f2ec4dc93 100644 --- a/src/test/csf/timers.h +++ b/src/test/csf/timers.h @@ -6,9 +6,7 @@ #include #include -namespace xrpl { -namespace test { -namespace csf { +namespace xrpl::test::csf { // Timers are classes that schedule repeated events and are mostly independent // of simulation-specific details. @@ -60,6 +58,4 @@ public: } }; -} // namespace csf -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::csf diff --git a/src/test/jtx/AMM.h b/src/test/jtx/AMM.h index 45f0e13797..faad982bcc 100644 --- a/src/test/jtx/AMM.h +++ b/src/test/jtx/AMM.h @@ -14,9 +14,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class LPToken { @@ -99,7 +97,7 @@ struct BidArg std::optional account = std::nullopt; std::optional> bidMin = std::nullopt; std::optional> bidMax = std::nullopt; - std::vector authAccounts = {}; + std::vector authAccounts = {}; // NOLINT(readability-redundant-member-init) std::optional flags = std::nullopt; std::optional> assets = std::nullopt; }; @@ -139,9 +137,9 @@ class AMM public: AMM(Env& env, - Account const& account, - STAmount const& asset1, - STAmount const& asset2, + Account account, + STAmount asset1, + STAmount asset2, bool log = false, std::uint16_t tfee = 0, std::uint32_t fee = 0, @@ -372,13 +370,13 @@ public: } std::string - operator[](AccountID const& lp) + operator[](AccountID const& lp) const { return ammRpcInfo(lp).toStyledString(); } Json::Value - operator()(AccountID const& lp) + operator()(AccountID const& lp) const { return ammRpcInfo(lp); } @@ -425,9 +423,13 @@ public: auto const& jr = p.amm.ammRpcInfo(); auto out = [&](Json::Value const& jv) { if (jv.isMember(jss::value)) + { std::cout << jv[jss::value].asString(); + } else + { std::cout << jv.asString(); + } std::cout << " "; }; if (p.names.empty()) @@ -456,9 +458,13 @@ public: { auto out = [&](Json::Value const& jv) { if (jv.isMember(jss::value)) + { s << jv[jss::value].asString(); + } else + { s << jv; + } }; for (auto const& o : offers.jv[jss::offers]) { @@ -517,6 +523,4 @@ ammClawback( std::optional const& amount); } // namespace amm -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/AMMTest.h b/src/test/jtx/AMMTest.h index a3d126646d..8f46ef6f59 100644 --- a/src/test/jtx/AMMTest.h +++ b/src/test/jtx/AMMTest.h @@ -7,9 +7,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class AMM; @@ -152,6 +150,4 @@ protected: pathTestEnv(); }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/AbstractClient.h b/src/test/jtx/AbstractClient.h index 94e58f60cd..2002b3a7d8 100644 --- a/src/test/jtx/AbstractClient.h +++ b/src/test/jtx/AbstractClient.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { /* Abstract XRPL client interface. @@ -38,5 +37,4 @@ public: version() const = 0; }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/Account.h b/src/test/jtx/Account.h index 6f796e08b3..1e39f5a546 100644 --- a/src/test/jtx/Account.h +++ b/src/test/jtx/Account.h @@ -8,9 +8,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class IOU; @@ -143,6 +141,4 @@ operator<=>(Account const& lhs, Account const& rhs) noexcept return lhs.id() <=> rhs.id(); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/CaptureLogs.h b/src/test/jtx/CaptureLogs.h index 8c8da6817b..0e9598decd 100644 --- a/src/test/jtx/CaptureLogs.h +++ b/src/test/jtx/CaptureLogs.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { /** * @brief Log manager for CaptureSinks. This class holds the stream @@ -66,5 +65,4 @@ public: } }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/CheckMessageLogs.h b/src/test/jtx/CheckMessageLogs.h index 286cfa1844..4c6bd35036 100644 --- a/src/test/jtx/CheckMessageLogs.h +++ b/src/test/jtx/CheckMessageLogs.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { /** Log manager that searches for a specific message substring */ @@ -55,5 +54,4 @@ public: } }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/Env.h b/src/test/jtx/Env.h index d638d520ba..75c0195f40 100644 --- a/src/test/jtx/Env.h +++ b/src/test/jtx/Env.h @@ -40,9 +40,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Wrapper that captures std::source_location when implicitly constructed. This solves the problem of combining std::source_location with variadic @@ -85,9 +83,13 @@ testable_amendments() { (void)vote; if (auto const f = getRegisteredFeature(s)) + { feats.push_back(*f); + } else + { Throw("Unknown feature: " + s + " in allAmendments."); + } } return FeatureBitset(feats); }(); @@ -128,12 +130,12 @@ public: /// Used by parseResult() and postConditions() struct ParsedResult { - std::optional ter{}; + std::optional ter; // RPC errors tend to return either a "code" and a "message" (sometimes // with an "error" that corresponds to the "code"), or with an "error" // and an "exception". However, this structure allows all possible // combinations. - std::optional rpcCode{}; + std::optional rpcCode; std::string rpcMessage; std::string rpcError; std::string rpcException; @@ -256,6 +258,7 @@ public: virtual ~Env() = default; Application& + // NOLINTNEXTLINE(readability-make-member-function-const) app() { return *bundle_.app; @@ -268,6 +271,7 @@ public: } ManualTimeKeeper& + // NOLINTNEXTLINE(readability-make-member-function-const) timeKeeper() { return *bundle_.timeKeeper; @@ -279,6 +283,7 @@ public: close or by callers. */ NetClock::time_point + // NOLINTNEXTLINE(readability-make-member-function-const) now() { return timeKeeper().now(); @@ -286,6 +291,7 @@ public: /** Returns the connected client. */ AbstractClient& + // NOLINTNEXTLINE(readability-make-member-function-const) client() { return *bundle_.client; @@ -773,7 +779,7 @@ public: trust(STAmount const& amount, Account const& to0, Account const& to1, Accounts const&... toN) { trust(amount, to0); - trust(amount, to1, toN...); + trust(amount, to1, toN...); // NOLINT(readability-suspicious-call-argument) } /** @} */ @@ -877,6 +883,4 @@ Env::rpc(std::string const& cmd, Args&&... args) return rpc(std::unordered_map(), cmd, std::forward(args)...); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/Env_ss.h b/src/test/jtx/Env_ss.h index d6f5fd1a29..e9f6ae3bb1 100644 --- a/src/test/jtx/Env_ss.h +++ b/src/test/jtx/Env_ss.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** A transaction testing environment wrapper. Transactions submitted in sign-and-submit mode @@ -66,6 +64,4 @@ public: } }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/Env_test.cpp b/src/test/jtx/Env_test.cpp index 4e9f0d99e2..6cef617ea7 100644 --- a/src/test/jtx/Env_test.cpp +++ b/src/test/jtx/Env_test.cpp @@ -1,21 +1,69 @@ -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class Env_test : public beast::unit_test::suite { @@ -61,10 +109,10 @@ public: PrettyAmount(0u); // NOLINT(bugprone-unused-raii) PrettyAmount(1u); // NOLINT(bugprone-unused-raii) PrettyAmount(-1); // NOLINT(bugprone-unused-raii) - static_assert(!std::is_trivially_constructible::value, ""); - static_assert(!std::is_trivially_constructible::value, ""); - static_assert(!std::is_trivially_constructible::value, ""); - static_assert(!std::is_trivially_constructible::value, ""); + static_assert(!std::is_trivially_constructible_v, ""); + static_assert(!std::is_trivially_constructible_v, ""); + static_assert(!std::is_trivially_constructible_v, ""); + static_assert(!std::is_trivially_constructible_v, ""); try { @@ -854,5 +902,4 @@ public: BEAST_DEFINE_TESTSUITE(Env, jtx, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/JSONRPCClient.h b/src/test/jtx/JSONRPCClient.h index 41129a36ec..a2ff815f48 100644 --- a/src/test/jtx/JSONRPCClient.h +++ b/src/test/jtx/JSONRPCClient.h @@ -6,12 +6,10 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { /** Returns a client using JSON-RPC over HTTP/S. */ std::unique_ptr makeJSONRPCClient(Config const& cfg, unsigned rpc_version = 2); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/JTx.h b/src/test/jtx/JTx.h index bf43d0aa75..a4db523ff5 100644 --- a/src/test/jtx/JTx.h +++ b/src/test/jtx/JTx.h @@ -12,9 +12,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class Env; @@ -152,6 +150,4 @@ private: prop_list props_; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/ManualTimeKeeper.h b/src/test/jtx/ManualTimeKeeper.h index d5fdd467e1..1fd94858d6 100644 --- a/src/test/jtx/ManualTimeKeeper.h +++ b/src/test/jtx/ManualTimeKeeper.h @@ -4,13 +4,12 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { class ManualTimeKeeper : public TimeKeeper { private: - std::atomic now_{}; + std::atomic now_; public: ManualTimeKeeper() = default; @@ -28,5 +27,4 @@ public: } }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/Oracle.h b/src/test/jtx/Oracle.h index 8f48ad4d37..42376b3599 100644 --- a/src/test/jtx/Oracle.h +++ b/src/test/jtx/Oracle.h @@ -4,10 +4,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { -namespace oracle { +namespace xrpl::test::jtx::oracle { using AnyValue = std::variant; using OraclesData = std::vector, std::optional>>; @@ -58,7 +55,7 @@ struct UpdateArg { std::optional owner = std::nullopt; std::optional documentID = std::nullopt; - DataSeries series = {}; + DataSeries series = {}; // NOLINT(readability-redundant-member-init) std::optional assetClass = std::nullopt; std::optional provider = std::nullopt; std::optional uri = "URI"; @@ -177,7 +174,4 @@ public: } }; -} // namespace oracle -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::oracle diff --git a/src/test/jtx/PathSet.h b/src/test/jtx/PathSet.h index 86b38f7eaf..4db3b7d62e 100644 --- a/src/test/jtx/PathSet.h +++ b/src/test/jtx/PathSet.h @@ -6,8 +6,7 @@ #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { /** Count offer */ @@ -186,5 +185,4 @@ private: } }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/SignerUtils.h b/src/test/jtx/SignerUtils.h index 994868e4a2..dd68701303 100644 --- a/src/test/jtx/SignerUtils.h +++ b/src/test/jtx/SignerUtils.h @@ -2,11 +2,11 @@ #include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { struct Reg { @@ -17,7 +17,7 @@ struct Reg { } - Reg(Account const& acct_, Account const& regularSig) : acct(acct_), sig(regularSig) + Reg(Account acct_, Account regularSig) : acct(std::move(acct_)), sig(std::move(regularSig)) { } @@ -40,11 +40,7 @@ struct Reg inline void sortSigners(std::vector& signers) { - std::sort(signers.begin(), signers.end(), [](Reg const& lhs, Reg const& rhs) { - return lhs.acct < rhs.acct; - }); + std::ranges::sort(signers, [](Reg const& lhs, Reg const& rhs) { return lhs.acct < rhs.acct; }); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/TestHelpers.h b/src/test/jtx/TestHelpers.h index 0beca74e90..70692d1675 100644 --- a/src/test/jtx/TestHelpers.h +++ b/src/test/jtx/TestHelpers.h @@ -13,12 +13,12 @@ #include #include +#include #include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Generic helper class for helper classes that set a field on a JTx. @@ -40,7 +40,7 @@ protected: SV value_; public: - explicit JTxField(SF const& sfield, SV const& value) : sfield_(sfield), value_(value) + explicit JTxField(SF const& sfield, SV value) : sfield_(sfield), value_(std::move(value)) { } @@ -68,7 +68,7 @@ protected: SV value_; public: - explicit JTxField(SF const& sfield, SV const& value) : sfield_(sfield), value_(value) + explicit JTxField(SF const& sfield, SV value) : sfield_(sfield), value_(std::move(value)) { } @@ -367,7 +367,7 @@ void stpath_append_one(STPath& st, Account const& account); template -std::enable_if_t::value> +std::enable_if_t> stpath_append_one(STPath& st, T const& t) { stpath_append_one(st, Account{t}); @@ -424,7 +424,7 @@ same(STPathSet const& st1, Args const&... args) for (auto const& p : st2) { - if (std::find(st1.begin(), st1.end(), p) == st1.end()) + if (std::ranges::find(st1, p) == st1.end()) return false; } return true; @@ -994,9 +994,9 @@ struct IssuerArgs { jtx::Env& env; // 3-letter currency if Issue, ignored if MPT - std::string token = ""; + std::string token; jtx::Account issuer; - std::vector holders = {}; + std::vector holders = {}; // NOLINT(readability-redundant-member-init) // trust-limit if Issue, maxAmount if MPT std::optional limit = std::nullopt; // 0-50'000 (0-50%) @@ -1035,6 +1035,4 @@ testHelper3TokensMix(TTester&& tester) tester(detail::issueHelperIOU, detail::issueHelperIOU, detail::issueHelperMPT); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/TrustedPublisherServer.h b/src/test/jtx/TrustedPublisherServer.h index c9304426cf..097dae97bb 100644 --- a/src/test/jtx/TrustedPublisherServer.h +++ b/src/test/jtx/TrustedPublisherServer.h @@ -21,9 +21,9 @@ #include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class TrustedPublisherServer : public std::enable_shared_from_this { @@ -54,7 +54,7 @@ class TrustedPublisherServer : public std::enable_shared_from_this( path.substr(strlen(refreshPrefix))); + } res.body() = getList2_(refresh); } } @@ -543,16 +554,22 @@ private: res.result(http::status::ok); res.insert("Content-Type", "application/json"); if (path == "/validators/bad") + { res.body() = "{ 'bad': \"1']"; + } else if (path == "/validators/missing") + { res.body() = "{\"version\": 1}"; + } else { int refresh = 5; constexpr char const* refreshPrefix = "/validators/refresh/"; if (boost::starts_with(path, refreshPrefix)) + { refresh = boost::lexical_cast( path.substr(strlen(refreshPrefix))); + } res.body() = getList_(refresh); } } @@ -570,8 +587,10 @@ private: { std::stringstream body; for (auto i = 0; i < 1024; ++i) + { body << static_cast(rand_int(32, 126)), res.body() = body.str(); + } } } else if (boost::starts_with(path, "/sleep/")) @@ -582,13 +601,21 @@ private: else if (boost::starts_with(path, "/redirect")) { if (boost::ends_with(path, "/301")) + { res.result(http::status::moved_permanently); + } else if (boost::ends_with(path, "/302")) + { res.result(http::status::found); + } else if (boost::ends_with(path, "/307")) + { res.result(http::status::temporary_redirect); + } else if (boost::ends_with(path, "/308")) + { res.result(http::status::permanent_redirect); + } std::stringstream location; if (boost::starts_with(path, "/redirect_to/")) @@ -630,9 +657,13 @@ private: } if (ssl) + { write(*ssl_stream, res, ec); + } else + { write(sock, res, ec); + } if (ec || req.need_eof()) break; @@ -662,5 +693,4 @@ make_TrustedPublisherServer( return r; } -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/WSClient.h b/src/test/jtx/WSClient.h index d1801cb4a9..e95920d085 100644 --- a/src/test/jtx/WSClient.h +++ b/src/test/jtx/WSClient.h @@ -8,8 +8,7 @@ #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class WSClient : public AbstractClient { @@ -33,5 +32,4 @@ makeWSClient( unsigned rpc_version = 2, std::unordered_map const& headers = {}); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/WSClient_test.cpp b/src/test/jtx/WSClient_test.cpp index 206b550b87..157b7665a8 100644 --- a/src/test/jtx/WSClient_test.cpp +++ b/src/test/jtx/WSClient_test.cpp @@ -1,10 +1,13 @@ -#include +#include #include +#include -#include +#include +#include -namespace xrpl { -namespace test { +#include + +namespace xrpl::test { class WSClient_test : public beast::unit_test::suite { @@ -29,5 +32,4 @@ public: BEAST_DEFINE_TESTSUITE(WSClient, jtx, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/account_txn_id.h b/src/test/jtx/account_txn_id.h index 71ac606418..424ce13b14 100644 --- a/src/test/jtx/account_txn_id.h +++ b/src/test/jtx/account_txn_id.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { struct account_txn_id { @@ -19,6 +17,4 @@ public: void operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/acctdelete.h b/src/test/jtx/acctdelete.h index c081eb92a5..774baca7a1 100644 --- a/src/test/jtx/acctdelete.h +++ b/src/test/jtx/acctdelete.h @@ -5,9 +5,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Delete account. If successful transfer remaining XRP to dest. */ Json::Value @@ -19,7 +17,4 @@ acctdelete(Account const& account, Account const& dest); void incLgrSeqForAccDel(jtx::Env& env, jtx::Account const& acc, std::uint32_t margin = 0); -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/amount.h b/src/test/jtx/amount.h index 7819a09451..122af2faa1 100644 --- a/src/test/jtx/amount.h +++ b/src/test/jtx/amount.h @@ -13,6 +13,7 @@ #include #include #include +#include namespace xrpl { namespace detail { @@ -24,8 +25,7 @@ struct epsilon_multiple } // namespace detail -namespace test { -namespace jtx { +namespace test::jtx { /* @@ -74,7 +74,8 @@ public: PrettyAmount& operator=(PrettyAmount const&) = default; - PrettyAmount(STAmount const& amount, std::string const& name) : amount_(amount), name_(name) + PrettyAmount(STAmount amount, std::string name) + : amount_(std::move(amount)), name_(std::move(name)) { } @@ -120,7 +121,7 @@ public: return amount_; } - inline int + int signum() const { return amount_.signum(); @@ -257,8 +258,8 @@ struct XRP_t return xrpIssue(); } - bool - integral() const + static bool + integral() { return true; } @@ -360,9 +361,7 @@ drops(XRPAmount i) // The smallest possible IOU STAmount struct epsilon_t { - epsilon_t() - { - } + epsilon_t() = default; detail::epsilon_multiple operator()(std::size_t n) const @@ -386,8 +385,8 @@ public: Account account; xrpl::Currency currency; - IOU(Account const& account_, xrpl::Currency const& currency_) - : account(account_), currency(currency_) + IOU(Account account_, xrpl::Currency const& currency_) + : account(std::move(account_)), currency(currency_) { } @@ -427,7 +426,7 @@ public: template < class T, - class = std::enable_if_t= sizeof(int) && std::is_arithmetic::value>> + class = std::enable_if_t= sizeof(int) && std::is_arithmetic_v>> PrettyAmount operator()(T v) const { @@ -476,17 +475,16 @@ public: std::string name; xrpl::MPTID issuanceID; - MPT(std::string const& n, xrpl::MPTID const& issuanceID_) : name(n), issuanceID(issuanceID_) + MPT(std::string n, xrpl::MPTID const& issuanceID_) : name(std::move(n)), issuanceID(issuanceID_) { } - MPT(std::string const& n = "") : name(n), issuanceID(noMPT()) + MPT(std::string n = "") : name(std::move(n)), issuanceID(noMPT()) { } - MPT(Asset const& asset) : name(""), issuanceID(asset.get()) + MPT(Asset const& asset) : issuanceID(asset.get()) { } - MPT(AccountID const& account, std::int32_t seq = 0) - : name(""), issuanceID(makeMptID(seq, account)) + MPT(AccountID const& account, std::int32_t seq = 0) : issuanceID(makeMptID(seq, account)) { } @@ -508,8 +506,8 @@ public: { return mptIssue(); } - bool - integral() const + static bool + integral() { return true; } @@ -586,11 +584,11 @@ struct AnyAmount AnyAmount& operator=(AnyAmount const&) = default; - AnyAmount(STAmount const& amount) : is_any(false), value(amount) + AnyAmount(STAmount amount) : is_any(false), value(std::move(amount)) { } - AnyAmount(STAmount const& amount, any_t const*) : is_any(true), value(amount) + AnyAmount(STAmount amount, any_t const*) : is_any(true), value(std::move(amount)) { } @@ -615,6 +613,6 @@ any_t::operator()(STAmount const& sta) const */ extern any_t const any; -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/attester.h b/src/test/jtx/attester.h index 6904135f21..1c38684890 100644 --- a/src/test/jtx/attester.h +++ b/src/test/jtx/attester.h @@ -13,8 +13,7 @@ class SecretKey; class STXChainBridge; class STAmount; -namespace test { -namespace jtx { +namespace test::jtx { Buffer sign_claim_attestation( @@ -40,6 +39,6 @@ sign_create_account_attestation( bool wasLockingChainSend, std::uint64_t createCount, AccountID const& dst); -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/balance.h b/src/test/jtx/balance.h index 2181429908..a75583b1a3 100644 --- a/src/test/jtx/balance.h +++ b/src/test/jtx/balance.h @@ -3,9 +3,9 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { /** A balance matches. @@ -23,17 +23,17 @@ private: STAmount const value_; public: - balance(Account const& account, none_t) : none_(true), account_(account), value_(XRP) + balance(Account account, none_t) : none_(true), account_(std::move(account)), value_(XRP) { } - balance(Account const& account, None const& value) - : none_(true), account_(account), value_(value.asset) + balance(Account account, None const& value) + : none_(true), account_(std::move(account)), value_(value.asset) { } - balance(Account const& account, STAmount const& value) - : none_(false), account_(account), value_(value) + balance(Account account, STAmount value) + : none_(false), account_(std::move(account)), value_(std::move(value)) { } @@ -41,6 +41,4 @@ public: operator()(Env&) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/basic_prop.h b/src/test/jtx/basic_prop.h index 080eecd34b..d2b4805651 100644 --- a/src/test/jtx/basic_prop.h +++ b/src/test/jtx/basic_prop.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { struct basic_prop { @@ -38,6 +36,4 @@ struct prop_type : basic_prop } }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/batch.h b/src/test/jtx/batch.h index f81bed3c6e..90a7bef8cc 100644 --- a/src/test/jtx/batch.h +++ b/src/test/jtx/batch.h @@ -2,24 +2,20 @@ #include #include +#include #include #include #include #include -#include "test/jtx/SignerUtils.h" - #include #include #include - -namespace xrpl { -namespace test { -namespace jtx { +#include /** Batch operations */ -namespace batch { +namespace xrpl::test::jtx::batch { /** Calculate Batch Fee. */ XRPAmount @@ -39,10 +35,10 @@ private: public: inner( - Json::Value const& txn, + Json::Value txn, std::uint32_t const& sequence, std::optional const& ticket = std::nullopt) - : txn_(txn), seq_(sequence), ticket_(ticket) + : txn_(std::move(txn)), seq_(sequence), ticket_(ticket) { txn_[jss::SigningPubKey] = ""; txn_[jss::Sequence] = seq_; @@ -109,16 +105,16 @@ public: Account master; std::vector signers; - msig(Account const& masterAccount, std::vector signers_) - : master(masterAccount), signers(std::move(signers_)) + msig(Account masterAccount, std::vector signers_) + : master(std::move(masterAccount)), signers(std::move(signers_)) { sortSigners(signers); } template requires std::convertible_to - explicit msig(Account const& masterAccount, AccountType&& a0, Accounts&&... aN) - : master(masterAccount) + explicit msig(Account masterAccount, AccountType&& a0, Accounts&&... aN) + : master(std::move(masterAccount)) , signers{std::forward(a0), std::forward(aN)...} { sortSigners(signers); @@ -128,9 +124,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace batch - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::batch diff --git a/src/test/jtx/check.h b/src/test/jtx/check.h index 9a1c6b2d2c..fc1d8054c6 100644 --- a/src/test/jtx/check.h +++ b/src/test/jtx/check.h @@ -4,9 +4,9 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { /** Check operations. */ namespace check { @@ -19,7 +19,7 @@ cash(jtx::Account const& dest, uint256 const& checkId, STAmount const& amount); struct DeliverMin { STAmount value; - explicit DeliverMin(STAmount const& deliverMin) : value(deliverMin) + explicit DeliverMin(STAmount deliverMin) : value(std::move(deliverMin)) { } }; @@ -37,7 +37,4 @@ cancel(jtx::Account const& dest, uint256 const& checkId); /** Match the number of checks on the account. */ using checks = owner_count; -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/credentials.h b/src/test/jtx/credentials.h index 56d127fca9..fd6d31f56d 100644 --- a/src/test/jtx/credentials.h +++ b/src/test/jtx/credentials.h @@ -4,11 +4,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { - -namespace credentials { +namespace xrpl::test::jtx::credentials { inline Keylet keylet( @@ -80,7 +76,4 @@ ledgerEntry( Json::Value ledgerEntry(jtx::Env& env, std::string const& credIdx); -} // namespace credentials -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::credentials diff --git a/src/test/jtx/delegate.h b/src/test/jtx/delegate.h index 7aecb54922..197750a511 100644 --- a/src/test/jtx/delegate.h +++ b/src/test/jtx/delegate.h @@ -3,11 +3,9 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +#include -namespace delegate { +namespace xrpl::test::jtx::delegate { Json::Value set(jtx::Account const& account, @@ -23,7 +21,7 @@ private: jtx::Account delegate_; public: - explicit as(jtx::Account const& account) : delegate_(account) + explicit as(jtx::Account account) : delegate_(std::move(account)) { } @@ -34,7 +32,4 @@ public: } }; -} // namespace delegate -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::delegate diff --git a/src/test/jtx/delivermin.h b/src/test/jtx/delivermin.h index 3edb38ffef..6dc0bea2ad 100644 --- a/src/test/jtx/delivermin.h +++ b/src/test/jtx/delivermin.h @@ -4,9 +4,9 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { /** Sets the DeliverMin on a JTx. */ class deliver_min @@ -15,7 +15,7 @@ private: STAmount amount_; public: - deliver_min(STAmount const& amount) : amount_(amount) + deliver_min(STAmount amount) : amount_(std::move(amount)) { } @@ -23,6 +23,4 @@ public: operator()(Env&, JTx& jtx) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/deposit.h b/src/test/jtx/deposit.h index d7762e9ae3..d74db770c7 100644 --- a/src/test/jtx/deposit.h +++ b/src/test/jtx/deposit.h @@ -3,12 +3,8 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { - /** Deposit preauthorize operations */ -namespace deposit { +namespace xrpl::test::jtx::deposit { /** Preauthorize for deposit. Invoke as deposit::auth. */ Json::Value @@ -52,9 +48,4 @@ authCredentials(jtx::Account const& account, std::vector c Json::Value unauthCredentials(jtx::Account const& account, std::vector const& auth); -} // namespace deposit - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::deposit diff --git a/src/test/jtx/did.h b/src/test/jtx/did.h index e6b06f8f7c..faf4b2046c 100644 --- a/src/test/jtx/did.h +++ b/src/test/jtx/did.h @@ -4,12 +4,8 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { - /** DID operations. */ -namespace did { +namespace xrpl::test::jtx::did { Json::Value set(jtx::Account const& account); @@ -74,9 +70,4 @@ public: Json::Value del(jtx::Account const& account); -} // namespace did - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::did diff --git a/src/test/jtx/directory.h b/src/test/jtx/directory.h index e9fff35434..0940c23623 100644 --- a/src/test/jtx/directory.h +++ b/src/test/jtx/directory.h @@ -9,10 +9,8 @@ #include #include -namespace xrpl::test::jtx { - /** Directory operations. */ -namespace directory { +namespace xrpl::test::jtx::directory { enum Error { DirectoryRootNotFound, @@ -53,6 +51,4 @@ maximumPageIndex(Env const& env) -> std::uint64_t return dirNodeMaxPages - 1; } -} // namespace directory - -} // namespace xrpl::test::jtx +} // namespace xrpl::test::jtx::directory diff --git a/src/test/jtx/domain.h b/src/test/jtx/domain.h index cb67ce3622..993c89ee19 100644 --- a/src/test/jtx/domain.h +++ b/src/test/jtx/domain.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the domain on a JTx. */ class domain @@ -21,6 +19,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/envconfig.h b/src/test/jtx/envconfig.h index e4a1975e74..dcfafc426e 100644 --- a/src/test/jtx/envconfig.h +++ b/src/test/jtx/envconfig.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { // frequently used macros defined here for convenience. #define PORT_WS "port_ws" @@ -107,11 +106,56 @@ std::unique_ptr addGrpcConfig(std::unique_ptr); std::unique_ptr addGrpcConfigWithSecureGateway(std::unique_ptr, std::string const& secureGateway); +/// @brief add a grpc address, port and TLS certificate/key paths to config +/// +/// This is intended for use with envconfig, for tests that require a grpc +/// server with TLS enabled. +/// +/// @param cfg config instance to be modified +/// @param certPath path to SSL certificate file +/// @param keyPath path to SSL private key file +std::unique_ptr +addGrpcConfigWithTLS( + std::unique_ptr, + std::string const& certPath, + std::string const& keyPath); + +/// @brief add a grpc address, port and TLS certificate/key/client CA paths to config +/// +/// This is intended for use with envconfig, for tests that require a grpc +/// server with mutual TLS (client certificate verification) enabled. +/// +/// @param cfg config instance to be modified +/// @param certPath path to SSL certificate file +/// @param keyPath path to SSL private key file +/// @param clientCAPath path to SSL client CA certificate file for mTLS +std::unique_ptr +addGrpcConfigWithTLSAndClientCA( + std::unique_ptr, + std::string const& certPath, + std::string const& keyPath, + std::string const& clientCAPath); + +/// @brief add a grpc address, port and TLS with server cert chain to config +/// +/// This is intended for use with envconfig, for tests that require a grpc +/// server with TLS enabled and intermediate CA certificates. +/// +/// @param cfg config instance to be modified +/// @param certPath path to SSL certificate file +/// @param keyPath path to SSL private key file +/// @param certChainPath path to SSL intermediate CA certificate(s) file +std::unique_ptr +addGrpcConfigWithTLSAndCertChain( + std::unique_ptr, + std::string const& certPath, + std::string const& keyPath, + std::string const& certChainPath); + std::unique_ptr makeConfig( std::map extraTxQ = {}, std::map extraVoting = {}); } // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/escrow.h b/src/test/jtx/escrow.h index 8fe9d9f5f9..8bb505a592 100644 --- a/src/test/jtx/escrow.h +++ b/src/test/jtx/escrow.h @@ -8,12 +8,8 @@ #include -namespace xrpl { -namespace test { -namespace jtx { - /** Escrow operations. */ -namespace escrow { +namespace xrpl::test::jtx::escrow { Json::Value create(AccountID const& account, AccountID const& to, STAmount const& amount); @@ -79,9 +75,4 @@ auto const condition = JTxFieldWrapper(sfCondition); auto const fulfillment = JTxFieldWrapper(sfFulfillment); -} // namespace escrow - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::escrow diff --git a/src/test/jtx/fee.h b/src/test/jtx/fee.h index 281066f0aa..f586e2a082 100644 --- a/src/test/jtx/fee.h +++ b/src/test/jtx/fee.h @@ -8,9 +8,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the fee on a JTx. */ class fee @@ -47,6 +45,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/flags.h b/src/test/jtx/flags.h index c4fb5cb34c..4bf095e685 100644 --- a/src/test/jtx/flags.h +++ b/src/test/jtx/flags.h @@ -6,6 +6,8 @@ #include #include +#include + namespace xrpl { namespace detail { @@ -87,8 +89,7 @@ protected: } // namespace detail -namespace test { -namespace jtx { +namespace test::jtx { // JSON generators @@ -111,7 +112,7 @@ private: public: template - flags(Account const& account, Args... args) : flags_helper(args...), account_(account) + flags(Account account, Args... args) : flags_helper(args...), account_(std::move(account)) { } @@ -127,7 +128,7 @@ private: public: template - nflags(Account const& account, Args... args) : flags_helper(args...), account_(account) + nflags(Account account, Args... args) : flags_helper(args...), account_(std::move(account)) { } @@ -135,6 +136,6 @@ public: operator()(Env& env) const; }; -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/impl/AMM.cpp b/src/test/jtx/impl/AMM.cpp index 79f4fa222e..6f68033fc4 100644 --- a/src/test/jtx/impl/AMM.cpp +++ b/src/test/jtx/impl/AMM.cpp @@ -1,16 +1,44 @@ #include -#include +#include +#include +#include +#include +#include + +#include +#include #include +#include +#include #include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx { static Number number(STAmount const& a) @@ -33,9 +61,9 @@ AMM::initialTokens() AMM::AMM( Env& env, - Account const& account, - STAmount const& asset1, - STAmount const& asset2, + Account account, + STAmount asset1, + STAmount asset2, bool log, std::uint16_t tfee, std::uint32_t fee, @@ -45,14 +73,14 @@ AMM::AMM( std::optional const& ter, bool close) : env_(env) - , creatorAccount_(account) - , asset1_(asset1) - , asset2_(asset2) + , creatorAccount_(std::move(account)) + , asset1_(std::move(asset1)) + , asset2_(std::move(asset2)) , ammID_(keylet::amm(asset1_.asset(), asset2_.asset()).key) , log_(log) , doClose_(close) , lastPurchasePrice_(0) - , msig_(ms) + , msig_(std::move(ms)) , fee_(fee) , ammAccount_(create(tfee, flags, seq, ter)) , lptIssue_(xrpl::ammLPTIssue(asset1_.asset(), asset2_.asset(), ammAccount_)) @@ -282,10 +310,8 @@ AMM::expectAuctionSlot(std::vector const& authAccounts) const [&](std::uint32_t, std::optional, IOUAmount const&, STArray const& accounts) { for (auto const& account : accounts) { - if (std::find( - authAccounts.cbegin(), - authAccounts.cend(), - account.getAccountID(sfAccount)) == authAccounts.end()) + if (std::ranges::find(authAccounts, account.getAccountID(sfAccount)) == + authAccounts.end()) return false; } return true; @@ -892,6 +918,4 @@ ammClawback( return jv; } } // namespace amm -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/AMMTest.cpp b/src/test/jtx/impl/AMMTest.cpp index 9527dd1e4e..24d831be7d 100644 --- a/src/test/jtx/impl/AMMTest.cpp +++ b/src/test/jtx/impl/AMMTest.cpp @@ -1,19 +1,34 @@ -#include #include + +#include +#include #include #include +#include +#include #include #include +#include -#include +#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx { [[maybe_unused]] std::vector fund( @@ -204,6 +219,4 @@ AMMTest::pathTestEnv() return cfg; })); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/Account.cpp b/src/test/jtx/impl/Account.cpp index a7b71ea6eb..4e09940487 100644 --- a/src/test/jtx/impl/Account.cpp +++ b/src/test/jtx/impl/Account.cpp @@ -1,11 +1,25 @@ #include + #include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx { std::unordered_map, Account, beast::uhash<>> Account::cache_; @@ -79,6 +93,4 @@ Account::operator[](std::string const& s) const return IOU(*this, currency); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/Env.cpp b/src/test/jtx/impl/Env.cpp index bba10439ed..f03e26b567 100644 --- a/src/test/jtx/impl/Env.cpp +++ b/src/test/jtx/impl/Env.cpp @@ -1,25 +1,48 @@ #include + +#include #include +#include +#include +#include #include #include #include #include #include #include +#include #include #include +#include #include +#include +#include #include -#include +#include +#include +#include #include +#include #include +#include +#include +#include #include +#include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include #include #include #include @@ -27,12 +50,22 @@ #include #include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { //------------------------------------------------------------------------------ @@ -661,6 +694,4 @@ Env::disableFeature(uint256 const feature) app().config().features.erase(feature); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/JSONRPCClient.cpp b/src/test/jtx/impl/JSONRPCClient.cpp index 6b60744aad..c44371c13e 100644 --- a/src/test/jtx/impl/JSONRPCClient.cpp +++ b/src/test/jtx/impl/JSONRPCClient.cpp @@ -1,21 +1,37 @@ #include +#include + +#include + +#include +#include #include +#include #include #include #include -#include +#include +#include +#include +#include +#include +#include #include #include #include #include +#include #include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class JSONRPCClient : public AbstractClient { @@ -31,7 +47,7 @@ class JSONRPCClient : public AbstractClient continue; ParsedPort pp; parse_Port(pp, cfg[name], log); - if (pp.protocol.count("http") == 0) + if (not pp.protocol.contains("http")) continue; using namespace boost::asio::ip; if (pp.ip && pp.ip->is_unspecified()) @@ -74,12 +90,6 @@ public: stream_.connect(ep_); } - ~JSONRPCClient() override - { - // stream_.shutdown(boost::asio::ip::tcp::socket::shutdown_both); - // stream_.close(); - } - /* Return value is an Object type with up to three keys: status @@ -148,5 +158,4 @@ makeJSONRPCClient(Config const& cfg, unsigned rpc_version) return std::make_unique(cfg, rpc_version); } -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/impl/Oracle.cpp b/src/test/jtx/impl/Oracle.cpp index c692664b93..7e49cdcd3d 100644 --- a/src/test/jtx/impl/Oracle.cpp +++ b/src/test/jtx/impl/Oracle.cpp @@ -1,16 +1,34 @@ #include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include // IWYU pragma: keep +#include -#include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { -namespace oracle { +namespace xrpl::test::jtx::oracle { Oracle::Oracle(Env& env, CreateArg const& arg, bool submit) : env_(env) { @@ -116,7 +134,7 @@ Oracle::expectPrice(DataSeries const& series) const return false; for (auto const& data : series) { - if (std::find_if(leSeries.begin(), leSeries.end(), [&](STObject const& o) -> bool { + if (std::ranges::find_if(leSeries, [&](STObject const& o) -> bool { auto const& baseAsset = o.getFieldCurrency(sfBaseAsset); auto const& quoteAsset = o.getFieldCurrency(sfQuoteAsset); auto const& price = o.getFieldU64(sfAssetPrice); @@ -401,7 +419,4 @@ validDocumentID(AnyValue const& v) } } -} // namespace oracle -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::oracle diff --git a/src/test/jtx/impl/TestHelpers.cpp b/src/test/jtx/impl/TestHelpers.cpp index 8010f171f7..2495e151f3 100644 --- a/src/test/jtx/impl/TestHelpers.cpp +++ b/src/test/jtx/impl/TestHelpers.cpp @@ -1,20 +1,67 @@ #include + +#include +#include +#include +#include // IWYU pragma: keep +#include #include #include #include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx { // Functions used in debugging Json::Value @@ -168,16 +215,16 @@ find_paths_request( Resource::Consumer c; RPC::JsonContext context{ - {env.journal, - app, - loadType, - app.getOPs(), - app.getLedgerMaster(), - c, - Role::USER, - {}, - {}, - RPC::apiVersionIfUnspecified}, + {.j = env.journal, + .app = app, + .loadType = loadType, + .netOps = app.getOPs(), + .ledgerMaster = app.getLedgerMaster(), + .consumer = c, + .role = Role::USER, + .coro = {}, + .infoSub = {}, + .apiVersion = RPC::apiVersionIfUnspecified}, {}, {}}; @@ -366,7 +413,7 @@ expectOffers( if (sle->getType() == ltOFFER) { ++cnt; - if (std::find_if(toMatch.begin(), toMatch.end(), [&](auto const& a) { + if (std::ranges::find_if(toMatch, [&](auto const& a) { return a.in == sle->getFieldAmount(sfTakerPays) && a.out == sle->getFieldAmount(sfTakerGets); }) != toMatch.end()) @@ -809,6 +856,4 @@ pay(AccountID const& account, uint256 const& loanID, STAmount const& amount, std } } // namespace loan -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/WSClient.cpp b/src/test/jtx/impl/WSClient.cpp index 2c3389c131..617e2b8881 100644 --- a/src/test/jtx/impl/WSClient.cpp +++ b/src/test/jtx/impl/WSClient.cpp @@ -1,23 +1,48 @@ -#include #include +#include + +#include +#include #include +#include #include #include #include +#include +#include #include #include +#include +#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class WSClientImpl : public WSClient { @@ -309,5 +334,4 @@ makeWSClient( return std::make_unique(cfg, v2, rpc_version, headers); } -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/impl/account_txn_id.cpp b/src/test/jtx/impl/account_txn_id.cpp index ceda6e7b50..a556ea8e91 100644 --- a/src/test/jtx/impl/account_txn_id.cpp +++ b/src/test/jtx/impl/account_txn_id.cpp @@ -1,8 +1,11 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +#include + +namespace xrpl::test::jtx { void account_txn_id::operator()(Env&, JTx& jt) const @@ -11,6 +14,4 @@ account_txn_id::operator()(Env&, JTx& jt) const jt["AccountTxnID"] = strHex(hash_); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/acctdelete.cpp b/src/test/jtx/impl/acctdelete.cpp index 0b87d501dd..433ed5ec92 100644 --- a/src/test/jtx/impl/acctdelete.cpp +++ b/src/test/jtx/impl/acctdelete.cpp @@ -1,11 +1,16 @@ -#include #include +#include +#include + +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { // Delete account. If successful transfer remaining XRP to dest. Json::Value @@ -38,6 +43,4 @@ incLgrSeqForAccDel(jtx::Env& env, jtx::Account const& acc, std::uint32_t margin) env.test.BEAST_EXPECT(openLedgerSeq(env) == env.seq(acc) + 255 - margin); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/amount.cpp b/src/test/jtx/impl/amount.cpp index c3ae76967a..1a02e07bdf 100644 --- a/src/test/jtx/impl/amount.cpp +++ b/src/test/jtx/impl/amount.cpp @@ -1,13 +1,22 @@ -#include #include +#include + +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { PrettyAmount:: operator AnyAmount() const @@ -109,6 +118,4 @@ operator<<(std::ostream& os, MPT const& mpt) any_t const any{}; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/attester.cpp b/src/test/jtx/impl/attester.cpp index d4693e69fb..74c0ae24ed 100644 --- a/src/test/jtx/impl/attester.cpp +++ b/src/test/jtx/impl/attester.cpp @@ -1,13 +1,16 @@ #include +#include #include +#include #include #include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { Buffer sign_claim_attestation( @@ -51,6 +54,4 @@ sign_create_account_attestation( return sign(pk, sk, makeSlice(toSign)); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/balance.cpp b/src/test/jtx/impl/balance.cpp index 157c6c4d8e..1c7b4c0c25 100644 --- a/src/test/jtx/impl/balance.cpp +++ b/src/test/jtx/impl/balance.cpp @@ -1,8 +1,17 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +#include +#include +#include +#include +#include +#include + +#include + +namespace xrpl::test::jtx { #define TEST_EXPECT(cond) env.test.expect(cond, __FILE__, __LINE__) #define TEST_EXPECTS(cond, reason) \ @@ -71,6 +80,4 @@ balance::operator()(Env& env) const value_.asset().value()); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/batch.cpp b/src/test/jtx/impl/batch.cpp index 65aca2a935..d45f195b66 100644 --- a/src/test/jtx/impl/batch.cpp +++ b/src/test/jtx/impl/batch.cpp @@ -1,19 +1,34 @@ #include + +#include +#include +#include #include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include #include -#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { - -namespace batch { +namespace xrpl::test::jtx::batch { XRPAmount calcBatchFee(test::jtx::Env const& env, uint32_t const& numSigners, uint32_t const& txns) @@ -119,8 +134,4 @@ msig::operator()(Env& env, JTx& jt) const } } -} // namespace batch - -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::batch diff --git a/src/test/jtx/impl/check.cpp b/src/test/jtx/impl/check.cpp index 22f348aa3f..d03700e2c3 100644 --- a/src/test/jtx/impl/check.cpp +++ b/src/test/jtx/impl/check.cpp @@ -1,13 +1,14 @@ #include -#include +#include + +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { - -namespace check { +namespace xrpl::test::jtx::check { // Cash a check requiring that a specific amount be delivered. Json::Value @@ -44,8 +45,4 @@ cancel(jtx::Account const& dest, uint256 const& checkId) return jv; } -} // namespace check - -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::check diff --git a/src/test/jtx/impl/creds.cpp b/src/test/jtx/impl/creds.cpp index e1018cc0e5..4d38d6d88b 100644 --- a/src/test/jtx/impl/creds.cpp +++ b/src/test/jtx/impl/creds.cpp @@ -1,13 +1,16 @@ +#include +#include #include -#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include -namespace credentials { +namespace xrpl::test::jtx::credentials { Json::Value create(jtx::Account const& subject, jtx::Account const& issuer, std::string_view credType) @@ -73,9 +76,4 @@ ledgerEntry(jtx::Env& env, std::string const& credIdx) return env.rpc("json", "ledger_entry", to_string(jvParams)); } -} // namespace credentials - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::credentials diff --git a/src/test/jtx/impl/delegate.cpp b/src/test/jtx/impl/delegate.cpp index 7cca9aa738..e4e5e4ca96 100644 --- a/src/test/jtx/impl/delegate.cpp +++ b/src/test/jtx/impl/delegate.cpp @@ -1,12 +1,17 @@ #include +#include +#include + +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include -namespace delegate { +namespace xrpl::test::jtx::delegate { Json::Value set(jtx::Account const& account, @@ -42,7 +47,4 @@ entry(jtx::Env& env, jtx::Account const& account, jtx::Account const& authorize) return env.rpc("json", "ledger_entry", to_string(jvParams)); } -} // namespace delegate -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::delegate diff --git a/src/test/jtx/impl/delivermin.cpp b/src/test/jtx/impl/delivermin.cpp index a5c1414525..140f4d7c66 100644 --- a/src/test/jtx/impl/delivermin.cpp +++ b/src/test/jtx/impl/delivermin.cpp @@ -1,10 +1,11 @@ #include +#include +#include + #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { void deliver_min::operator()(Env& env, JTx& jt) const @@ -12,6 +13,4 @@ deliver_min::operator()(Env& env, JTx& jt) const jt.jv[jss::DeliverMin] = amount_.getJson(JsonOptions::none); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/deposit.cpp b/src/test/jtx/impl/deposit.cpp index 4a2ecf0139..5e432b6aa8 100644 --- a/src/test/jtx/impl/deposit.cpp +++ b/src/test/jtx/impl/deposit.cpp @@ -1,12 +1,15 @@ #include +#include + +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include -namespace deposit { +namespace xrpl::test::jtx::deposit { // Add DepositPreauth. Json::Value @@ -66,8 +69,4 @@ unauthCredentials(jtx::Account const& account, std::vector return jv; } -} // namespace deposit - -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::deposit diff --git a/src/test/jtx/impl/dids.cpp b/src/test/jtx/impl/dids.cpp index bb782bcd43..9b3a08bbfa 100644 --- a/src/test/jtx/impl/dids.cpp +++ b/src/test/jtx/impl/dids.cpp @@ -1,14 +1,14 @@ +#include #include -#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { - /** DID operations. */ -namespace did { +namespace xrpl::test::jtx::did { Json::Value set(jtx::Account const& account) @@ -38,9 +38,4 @@ del(jtx::Account const& account) return jv; } -} // namespace did - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::did diff --git a/src/test/jtx/impl/directory.cpp b/src/test/jtx/impl/directory.cpp index da0a338e7c..ac4d81bdfb 100644 --- a/src/test/jtx/impl/directory.cpp +++ b/src/test/jtx/impl/directory.cpp @@ -1,11 +1,25 @@ #include -#include +#include -namespace xrpl::test::jtx { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include /** Directory operations. */ -namespace directory { +namespace xrpl::test::jtx::directory { auto bumpLastPage( @@ -122,6 +136,4 @@ adjustOwnerNode(ApplyView& view, uint256 key, std::uint64_t page) return false; } -} // namespace directory - -} // namespace xrpl::test::jtx +} // namespace xrpl::test::jtx::directory diff --git a/src/test/jtx/impl/domain.cpp b/src/test/jtx/impl/domain.cpp index 91568783d2..70d4daf002 100644 --- a/src/test/jtx/impl/domain.cpp +++ b/src/test/jtx/impl/domain.cpp @@ -1,10 +1,12 @@ #include -#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { void domain::operator()(Env&, JTx& jt) const @@ -12,6 +14,4 @@ domain::operator()(Env&, JTx& jt) const jt[sfDomainID.jsonName] = to_string(v_); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/envconfig.cpp b/src/test/jtx/impl/envconfig.cpp index e31e687c3d..ae05e4f1dd 100644 --- a/src/test/jtx/impl/envconfig.cpp +++ b/src/test/jtx/impl/envconfig.cpp @@ -1,10 +1,16 @@ -#include #include +#include + +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include + +namespace xrpl::test { std::atomic envUseIPv4{false}; @@ -125,6 +131,49 @@ addGrpcConfigWithSecureGateway(std::unique_ptr cfg, std::string const& s return cfg; } +std::unique_ptr +addGrpcConfigWithTLS( + std::unique_ptr cfg, + std::string const& certPath, + std::string const& keyPath) +{ + (*cfg)[SECTION_PORT_GRPC].set("ip", getEnvLocalhostAddr()); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", certPath); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", keyPath); + return cfg; +} + +std::unique_ptr +addGrpcConfigWithTLSAndClientCA( + std::unique_ptr cfg, + std::string const& certPath, + std::string const& keyPath, + std::string const& clientCAPath) +{ + (*cfg)[SECTION_PORT_GRPC].set("ip", getEnvLocalhostAddr()); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", certPath); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", keyPath); + (*cfg)[SECTION_PORT_GRPC].set("ssl_client_ca", clientCAPath); + return cfg; +} + +std::unique_ptr +addGrpcConfigWithTLSAndCertChain( + std::unique_ptr cfg, + std::string const& certPath, + std::string const& keyPath, + std::string const& certChainPath) +{ + (*cfg)[SECTION_PORT_GRPC].set("ip", getEnvLocalhostAddr()); + (*cfg)[SECTION_PORT_GRPC].set("port", "0"); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert", certPath); + (*cfg)[SECTION_PORT_GRPC].set("ssl_key", keyPath); + (*cfg)[SECTION_PORT_GRPC].set("ssl_cert_chain", certChainPath); + return cfg; +} + std::unique_ptr makeConfig( std::map extraTxQ, @@ -159,5 +208,4 @@ makeConfig( } } // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/jtx/impl/escrow.cpp b/src/test/jtx/impl/escrow.cpp index 067c304178..3d5d1e2bac 100644 --- a/src/test/jtx/impl/escrow.cpp +++ b/src/test/jtx/impl/escrow.cpp @@ -1,14 +1,21 @@ #include +#include +#include + +#include +#include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace test { -namespace jtx { +#include /** Escrow operations. */ -namespace escrow { +namespace xrpl::test::jtx::escrow { Json::Value create(AccountID const& account, AccountID const& to, STAmount const& amount) @@ -55,9 +62,4 @@ rate(Env& env, Account const& account, std::uint32_t const& seq) return Rate{0}; } -} // namespace escrow - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::escrow diff --git a/src/test/jtx/impl/fee.cpp b/src/test/jtx/impl/fee.cpp index fc05afcb46..edc3b5adf9 100644 --- a/src/test/jtx/impl/fee.cpp +++ b/src/test/jtx/impl/fee.cpp @@ -1,10 +1,13 @@ #include -#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include + +#include + +namespace xrpl::test::jtx { void fee::operator()(Env& env, JTx& jt) const @@ -23,6 +26,4 @@ fee::operator()(Env& env, JTx& jt) const } } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/flags.cpp b/src/test/jtx/impl/flags.cpp index aee01a107e..3caa2ece17 100644 --- a/src/test/jtx/impl/flags.cpp +++ b/src/test/jtx/impl/flags.cpp @@ -1,10 +1,15 @@ #include +#include +#include + +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { Json::Value fset(Account const& account, std::uint32_t on, std::uint32_t off) @@ -55,6 +60,4 @@ nflags::operator()(Env& env) const } } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/invoice_id.cpp b/src/test/jtx/impl/invoice_id.cpp index 6d6dae0fbf..ce3eb783ac 100644 --- a/src/test/jtx/impl/invoice_id.cpp +++ b/src/test/jtx/impl/invoice_id.cpp @@ -1,8 +1,11 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +#include + +namespace xrpl::test::jtx { void invoice_id::operator()(Env&, JTx& jt) const @@ -11,6 +14,4 @@ invoice_id::operator()(Env&, JTx& jt) const jt["InvoiceID"] = strHex(hash_); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/jtx_json.cpp b/src/test/jtx/impl/jtx_json.cpp index c39503d038..0360dba351 100644 --- a/src/test/jtx/impl/jtx_json.cpp +++ b/src/test/jtx/impl/jtx_json.cpp @@ -1,12 +1,17 @@ #include + +#include +#include #include #include #include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { json::json(std::string const& s) { @@ -30,6 +35,4 @@ json::operator()(Env&, JTx& jt) const jv[iter.key().asString()] = *iter; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/last_ledger_sequence.cpp b/src/test/jtx/impl/last_ledger_sequence.cpp index 5f29282ad6..dc4bae6212 100644 --- a/src/test/jtx/impl/last_ledger_sequence.cpp +++ b/src/test/jtx/impl/last_ledger_sequence.cpp @@ -1,8 +1,9 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { void last_ledger_seq::operator()(Env&, JTx& jt) const @@ -10,6 +11,4 @@ last_ledger_seq::operator()(Env&, JTx& jt) const jt["LastLedgerSequence"] = num_; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/ledgerStateFixes.cpp b/src/test/jtx/impl/ledgerStateFixes.cpp index e5a7495a44..99cd03cbb6 100644 --- a/src/test/jtx/impl/ledgerStateFixes.cpp +++ b/src/test/jtx/impl/ledgerStateFixes.cpp @@ -1,14 +1,12 @@ +#include #include -#include +#include +#include #include #include -namespace xrpl { -namespace test { -namespace jtx { - -namespace ledgerStateFix { +namespace xrpl::test::jtx::ledgerStateFix { // Fix NFTokenPage links on owner's account. acct pays fee. Json::Value @@ -22,8 +20,4 @@ nftPageLinks(jtx::Account const& acct, jtx::Account const& owner) return jv; } -} // namespace ledgerStateFix - -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::ledgerStateFix diff --git a/src/test/jtx/impl/memo.cpp b/src/test/jtx/impl/memo.cpp index e503b9a073..f092f48d70 100644 --- a/src/test/jtx/impl/memo.cpp +++ b/src/test/jtx/impl/memo.cpp @@ -1,8 +1,11 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +#include + +namespace xrpl::test::jtx { void memo::operator()(Env&, JTx& jt) const @@ -46,6 +49,4 @@ memo_type::operator()(Env&, JTx& jt) const m["MemoType"] = strHex(s_); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/mpt.cpp b/src/test/jtx/impl/mpt.cpp index 6bd2421fdd..6e851796b2 100644 --- a/src/test/jtx/impl/mpt.cpp +++ b/src/test/jtx/impl/mpt.cpp @@ -1,20 +1,55 @@ -#include #include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include #include +#include #include +#include +#include +#include #include #include -#include -#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx { /** * @brief Helper function to convert a PedersenProofParams into the C library struct. @@ -65,9 +100,9 @@ MPTTester::makeHolders(std::vector const& holders) return accounts; } -MPTTester::MPTTester(Env& env, Account const& issuer, MPTInit const& arg) +MPTTester::MPTTester(Env& env, Account issuer, MPTInit const& arg) : env_(env) - , issuer_(issuer) + , issuer_(std::move(issuer)) , holders_(makeHolders(arg.holders)) , auditor_(arg.auditor) , close_(arg.close) @@ -102,11 +137,11 @@ MPTTester::MPTTester(Env& env, Account const& issuer, MPTInit const& arg) MPTTester::MPTTester( Env& env, - Account const& issuer, + Account issuer, MPTID const& id, std::vector const& holders, bool close) - : env_(env), issuer_(issuer), holders_(makeHolders(holders)), id_(id), close_(close) + : env_(env), issuer_(std::move(issuer)), holders_(makeHolders(holders)), id_(id), close_(close) { } @@ -355,9 +390,7 @@ void MPTTester::authorizeHolders(Holders const& holders) { for (auto const& holder : holders) - { authorize({.account = holder}); - } } Json::Value @@ -421,7 +454,7 @@ MPTTester::set(MPTSet const& arg) .auditorPubKey = arg.auditorPubKey}); if (submit(arg, jv) == tesSUCCESS && ((arg.flags.value_or(0) != 0u) || arg.mutableFlags)) { - if ((arg.flags.value_or(0) || arg.mutableFlags)) + if ((arg.flags.value_or(0) != 0u || arg.mutableFlags)) { auto require = [&](std::optional const& holder, bool unchanged) { auto flags = getFlags(holder); @@ -520,8 +553,10 @@ MPTTester::set(MPTSet const& arg) { auto const issuerPubKey = getPubKey(issuer_); if (!issuerPubKey) + { Throw( "MPTTester::set: issuer's pubkey is not set"); + } return strHex((*sle)[sfIssuerEncryptionKey]) == strHex(*issuerPubKey); } @@ -541,8 +576,10 @@ MPTTester::set(MPTSet const& arg) auto const auditorPubKey = getPubKey(*auditor_); if (!auditorPubKey) + { Throw( "MPTTester::set: auditor's pubkey is not set"); + } return strHex((*sle)[sfAuditorEncryptionKey]) == strHex(*auditorPubKey); } @@ -958,20 +995,28 @@ MPTTester::getEncryptedBalance(Account const& account, EncryptedBalanceType opti if (auto const sle = env_.le(keylet::mptoken(*id_, account.id()))) { if (option == HOLDER_ENCRYPTED_INBOX && sle->isFieldPresent(sfConfidentialBalanceInbox)) + { return Buffer( (*sle)[sfConfidentialBalanceInbox].data(), (*sle)[sfConfidentialBalanceInbox].size()); + } if (option == HOLDER_ENCRYPTED_SPENDING && sle->isFieldPresent(sfConfidentialBalanceSpending)) + { return Buffer( (*sle)[sfConfidentialBalanceSpending].data(), (*sle)[sfConfidentialBalanceSpending].size()); + } if (option == ISSUER_ENCRYPTED_BALANCE && sle->isFieldPresent(sfIssuerEncryptedBalance)) + { return Buffer( (*sle)[sfIssuerEncryptedBalance].data(), (*sle)[sfIssuerEncryptedBalance].size()); + } if (option == AUDITOR_ENCRYPTED_BALANCE && sle->isFieldPresent(sfAuditorEncryptedBalance)) + { return Buffer( (*sle)[sfAuditorEncryptedBalance].data(), (*sle)[sfAuditorEncryptedBalance].size()); + } } return {}; @@ -1017,25 +1062,37 @@ MPTTester::fillConversionCiphertexts( // Handle Holder if (arg.holderEncryptedAmt) + { holderCiphertext = *arg.holderEncryptedAmt; + } else + { holderCiphertext = encryptAmount(*arg.account, *arg.amt, blindingFactor); + } jv[sfHolderEncryptedAmount.jsonName] = strHex(holderCiphertext); // Handle Issuer if (arg.issuerEncryptedAmt) + { issuerCiphertext = *arg.issuerEncryptedAmt; + } else + { issuerCiphertext = encryptAmount(issuer_, *arg.amt, blindingFactor); + } jv[sfIssuerEncryptedAmount.jsonName] = strHex(issuerCiphertext); // Handle Auditor if (arg.auditorEncryptedAmt) + { auditorCiphertext = *arg.auditorEncryptedAmt; + } else if (auditor_.has_value() && *arg.fillAuditorEncryptedAmt) + { auditorCiphertext = encryptAmount(*auditor_, *arg.amt, blindingFactor); + } // Update auditor JSON only if ciphertext exists if (auditorCiphertext) @@ -1047,13 +1104,19 @@ MPTTester::convert(MPTConvert const& arg) { Json::Value jv; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } jv[jss::TransactionType] = jss::ConfidentialMPTConvert; if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -1076,7 +1139,9 @@ MPTTester::convert(MPTConvert const& arg) jv[sfBlindingFactor.jsonName] = strHex(blindingFactor); if (arg.proof) + { jv[sfZKProof.jsonName] = *arg.proof; + } else if (arg.fillSchnorrProof.value_or(arg.holderPubKey.has_value())) { // whether to automatically generate and attach a Schnorr proof: @@ -1088,9 +1153,13 @@ MPTTester::convert(MPTConvert const& arg) auto const proof = getSchnorrProof(*arg.account, contextHash); if (proof) + { jv[sfZKProof.jsonName] = strHex(*proof); + } else + { jv[sfZKProof.jsonName] = strHex(makeZeroBuffer(ecSchnorrProofLength)); + } } auto const holderAmt = getBalance(*arg.account); @@ -1166,9 +1235,11 @@ MPTTester::convert(MPTConvert const& arg) { auto const holderPubKey = getPubKey(*arg.account); if (!holderPubKey) + { Throw( "MPTTester::convert: holder's pubkey is " "not set"); + } return strHex((*sle)[sfHolderEncryptionKey]) == strHex(*holderPubKey); } @@ -1185,13 +1256,19 @@ MPTTester::convertJV(MPTConvert const& arg, std::uint32_t seq) { Json::Value jv; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } jv[jss::TransactionType] = jss::ConfidentialMPTConvert; if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -1215,15 +1292,21 @@ MPTTester::convertJV(MPTConvert const& arg, std::uint32_t seq) jv[sfBlindingFactor.jsonName] = strHex(blindingFactor); if (arg.proof) + { jv[sfZKProof.jsonName] = *arg.proof; + } else if (arg.fillSchnorrProof.value_or(arg.holderPubKey.has_value())) { auto const contextHash = getConvertContextHash(arg.account->id(), *id_, seq); auto const proof = getSchnorrProof(*arg.account, contextHash); if (proof) + { jv[sfZKProof.jsonName] = strHex(*proof); + } else + { jv[sfZKProof.jsonName] = strHex(makeZeroBuffer(ecSchnorrProofLength)); + } } return jv; @@ -1236,20 +1319,30 @@ MPTTester::send(MPTConfidentialSend const& arg) jv[jss::TransactionType] = jss::ConfidentialMPTSend; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } if (arg.dest) + { jv[sfDestination] = arg.dest->human(); + } else + { Throw("Destination not specified"); + } if (!arg.amt) Throw("Amount not specified for testing purposes"); if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -1272,9 +1365,13 @@ MPTTester::send(MPTConfidentialSend const& arg) std::optional auditorAmt; if (arg.auditorEncryptedAmt) + { auditorAmt = arg.auditorEncryptedAmt; + } else if (auditor_.has_value() && *arg.fillAuditorEncryptedAmt) + { auditorAmt = encryptAmount(*auditor_, *arg.amt, blindingFactor); + } jv[sfSenderEncryptedAmount] = strHex(senderAmt); jv[sfDestinationEncryptedAmount] = strHex(destAmt); @@ -1329,23 +1426,33 @@ MPTTester::send(MPTConfidentialSend const& arg) // for each would cause proof verification to fail. Buffer amountCommitment, balanceCommitment; if (arg.amountCommitment) + { amountCommitment = *arg.amountCommitment; + } else + { amountCommitment = getPedersenCommitment(*arg.amt, blindingFactor); + } jv[sfAmountCommitment] = strHex(amountCommitment); auto const balanceBlindingFactor = generateBlindingFactor(); if (arg.balanceCommitment) + { balanceCommitment = *arg.balanceCommitment; + } else + { balanceCommitment = getPedersenCommitment(*prevSenderSpending, balanceBlindingFactor); + } jv[sfBalanceCommitment] = strHex(balanceCommitment); // Fill in the proof if not provided if (arg.proof) + { jv[sfZKProof] = *arg.proof; + } else { auto const version = getMPTokenVersion(*arg.account); @@ -1396,15 +1503,20 @@ MPTTester::send(MPTConfidentialSend const& arg) recipients, blindingFactor, ctxHash, - {amountCommitment, *arg.amt, senderAmt, blindingFactor}, - {balanceCommitment, - *prevSenderSpending, - *prevEncryptedSenderSpending, - balanceBlindingFactor}); + {.pedersenCommitment = amountCommitment, + .amt = *arg.amt, + .encryptedAmt = senderAmt, + .blindingFactor = blindingFactor}, + {.pedersenCommitment = balanceCommitment, + .amt = *prevSenderSpending, + .encryptedAmt = *prevEncryptedSenderSpending, + .blindingFactor = balanceBlindingFactor}); } if (proof) + { jv[sfZKProof.jsonName] = strHex(*proof); + } else { jv[sfZKProof.jsonName] = strHex(makeZeroBuffer(ecSendProofLength)); @@ -1512,20 +1624,30 @@ MPTTester::sendJV( jv[jss::TransactionType] = jss::ConfidentialMPTSend; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } if (arg.dest) + { jv[sfDestination] = arg.dest->human(); + } else + { Throw("Destination not specified"); + } if (!arg.amt) Throw("Amount not specified for testing purposes"); if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -1547,9 +1669,13 @@ MPTTester::sendJV( std::optional auditorAmt; if (arg.auditorEncryptedAmt) + { auditorAmt = arg.auditorEncryptedAmt; + } else if (auditor_.has_value() && *arg.fillAuditorEncryptedAmt) + { auditorAmt = encryptAmount(*auditor_, *arg.amt, blindingFactor); + } jv[sfSenderEncryptedAmount] = strHex(senderAmt); jv[sfDestinationEncryptedAmount] = strHex(destAmt); @@ -1587,22 +1713,32 @@ MPTTester::sendJV( // encryption blinding factor. Buffer amountCommitment, balanceCommitment; if (arg.amountCommitment) + { amountCommitment = *arg.amountCommitment; + } else + { amountCommitment = getPedersenCommitment(*arg.amt, blindingFactor); + } jv[sfAmountCommitment] = strHex(amountCommitment); auto const balanceBlindingFactor = generateBlindingFactor(); if (arg.balanceCommitment) + { balanceCommitment = *arg.balanceCommitment; + } else + { balanceCommitment = getPedersenCommitment(prevSenderSpending, balanceBlindingFactor); + } jv[sfBalanceCommitment] = strHex(balanceCommitment); if (arg.proof) + { jv[sfZKProof.jsonName] = *arg.proof; + } else { auto const ctxHash = @@ -1642,17 +1778,24 @@ MPTTester::sendJV( recipients, blindingFactor, ctxHash, - {amountCommitment, *arg.amt, senderAmt, blindingFactor}, - {balanceCommitment, - prevSenderSpending, - *prevEncryptedSenderSpending, - balanceBlindingFactor}); + {.pedersenCommitment = amountCommitment, + .amt = *arg.amt, + .encryptedAmt = senderAmt, + .blindingFactor = blindingFactor}, + {.pedersenCommitment = balanceCommitment, + .amt = prevSenderSpending, + .encryptedAmt = *prevEncryptedSenderSpending, + .blindingFactor = balanceBlindingFactor}); } if (proof) + { jv[sfZKProof.jsonName] = strHex(*proof); + } else + { jv[sfZKProof.jsonName] = strHex(makeZeroBuffer(ecSendProofLength)); + } } return jv; @@ -1716,23 +1859,35 @@ MPTTester::confidentialClaw(MPTConfidentialClawback const& arg) jv[sfAccount] = account.human(); if (arg.holder) + { jv[sfHolder] = arg.holder->human(); + } else + { Throw("Holder not specified"); + } jv[jss::TransactionType] = jss::ConfidentialMPTClawback; if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else if (id_) + { jv[sfMPTokenIssuanceID] = to_string(*id_); + } else + { Throw("MPT has not been created"); + } if (arg.amt) jv[sfMPTAmount] = std::to_string(*arg.amt); if (arg.proof) + { jv[sfZKProof] = *arg.proof; + } else { auto const seq = arg.ticketSeq ? *arg.ticketSeq : env_.seq(account); @@ -1745,9 +1900,13 @@ MPTTester::confidentialClaw(MPTConfidentialClawback const& arg) auto const proof = getClawbackProof(*arg.holder, *arg.amt, *privKey, contextHash); if (proof) + { jv[sfZKProof] = strHex(*proof); + } else + { jv[sfZKProof] = strHex(makeZeroBuffer(ecClawbackProofLength)); + } } auto const holderPubAmt = getBalance(*arg.holder); @@ -1794,7 +1953,7 @@ MPTTester::generateKeyPair(Account const& account) { unsigned char privKey[ecPrivKeyLength]; secp256k1_pubkey pubKey; - if (!secp256k1_elgamal_generate_keypair(secp256k1Context(), privKey, &pubKey)) + if (secp256k1_elgamal_generate_keypair(secp256k1Context(), privKey, &pubKey) == 0) Throw("failed to generate key pair"); // Serialize public key to compressed format (33 bytes) @@ -1803,9 +1962,7 @@ MPTTester::generateKeyPair(Account const& account) if (secp256k1_ec_pubkey_serialize( secp256k1Context(), compressedPubKey, &outLen, &pubKey, SECP256K1_EC_COMPRESSED) != 1 || outLen != ecPubKeyLength) - { Throw("failed to serialize public key"); - } pubKeys.insert({account.id(), Buffer{compressedPubKey, ecPubKeyLength}}); privKeys.insert({account.id(), Buffer{privKey, ecPrivKeyLength}}); @@ -1859,11 +2016,9 @@ MPTTester::decryptAmount(Account const& account, Buffer const& amt) const return std::nullopt; uint64_t decryptedAmt = 0; - if (!secp256k1_elgamal_decrypt( - secp256k1Context(), &decryptedAmt, &pair->c1, &pair->c2, privKey->data())) - { + if (secp256k1_elgamal_decrypt( + secp256k1Context(), &decryptedAmt, &pair->c1, &pair->c2, privKey->data()) == 0) return std::nullopt; - } return decryptedAmt; } @@ -1881,7 +2036,9 @@ MPTTester::getDecryptedBalance(Account const& account, EncryptedBalanceType bala Account decryptor = account; if (balanceType == ISSUER_ENCRYPTED_BALANCE) + { decryptor = issuer_; + } else if (balanceType == AUDITOR_ENCRYPTED_BALANCE) { if (!auditor_) @@ -1897,11 +2054,18 @@ MPTTester::mergeInboxJV(MPTMergeInbox const& arg) const { Json::Value jv; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } + if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -1917,11 +2081,18 @@ MPTTester::mergeInbox(MPTMergeInbox const& arg) { Json::Value jv; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } + if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -1996,13 +2167,19 @@ MPTTester::convertBack(MPTConvertBack const& arg) { Json::Value jv; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } jv[jss::TransactionType] = jss::ConfidentialMPTConvertBack; if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -2033,14 +2210,20 @@ MPTTester::convertBack(MPTConvertBack const& arg) Buffer pedersenCommitment; Buffer const pcBlindingFactor = generateBlindingFactor(); if (arg.pedersenCommitment) + { pedersenCommitment = *arg.pedersenCommitment; + } else + { pedersenCommitment = getPedersenCommitment(*prevSpendingBalance, pcBlindingFactor); + } jv[sfBalanceCommitment] = strHex(pedersenCommitment); if (arg.proof) + { jv[sfZKProof.jsonName] = strHex(*arg.proof); + } else { auto const version = getMPTokenVersion(*arg.account); @@ -2056,7 +2239,9 @@ MPTTester::convertBack(MPTConvertBack const& arg) // generate a dummy proof if no encrypted amount field, so that other // preflight/preclaim are checked if (!prevEncryptedSpendingBalance) + { proof = makeZeroBuffer(ecConvertBackProofLength); + } else { proof = getConvertBackProof( @@ -2137,13 +2322,19 @@ MPTTester::convertBackJV(MPTConvertBack const& arg, std::uint32_t seq) { Json::Value jv; if (arg.account) + { jv[sfAccount] = arg.account->human(); + } else + { Throw("Account not specified"); + } jv[jss::TransactionType] = jss::ConfidentialMPTConvertBack; if (arg.id) + { jv[sfMPTokenIssuanceID] = to_string(*arg.id); + } else { if (!id_) @@ -2171,14 +2362,20 @@ MPTTester::convertBackJV(MPTConvertBack const& arg, std::uint32_t seq) Buffer pedersenCommitment; Buffer const pcBlindingFactor = generateBlindingFactor(); if (arg.pedersenCommitment) + { pedersenCommitment = *arg.pedersenCommitment; + } else + { pedersenCommitment = getPedersenCommitment(*prevSpendingBalance, pcBlindingFactor); + } jv[sfBalanceCommitment] = strHex(pedersenCommitment); if (arg.proof) + { jv[sfZKProof.jsonName] = strHex(*arg.proof); + } else { auto const version = getMPTokenVersion(*arg.account); @@ -2187,8 +2384,11 @@ MPTTester::convertBackJV(MPTConvertBack const& arg, std::uint32_t seq) Buffer proof; if (!prevEncSpending) + { proof = makeZeroBuffer(ecConvertBackProofLength); + } else + { proof = getConvertBackProof( *arg.account, *arg.amt, @@ -2199,6 +2399,7 @@ MPTTester::convertBackJV(MPTConvertBack const& arg, std::uint32_t seq) .encryptedAmt = *prevEncSpending, .blindingFactor = pcBlindingFactor, }); + } jv[sfZKProof] = strHex(proof); } @@ -2206,6 +2407,4 @@ MPTTester::convertBackJV(MPTConvertBack const& arg, std::uint32_t seq) return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/multisign.cpp b/src/test/jtx/impl/multisign.cpp index 8e3c37f68c..e21a3621be 100644 --- a/src/test/jtx/impl/multisign.cpp +++ b/src/test/jtx/impl/multisign.cpp @@ -1,15 +1,31 @@ #include + +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { Json::Value signers(Account const& account, std::uint32_t quorum, std::vector const& v) @@ -93,6 +109,4 @@ msig::operator()(Env& env, JTx& jt) const } } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/offer.cpp b/src/test/jtx/impl/offer.cpp index 5a2264601a..abb777484a 100644 --- a/src/test/jtx/impl/offer.cpp +++ b/src/test/jtx/impl/offer.cpp @@ -1,10 +1,14 @@ #include +#include + +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { Json::Value offer( @@ -33,6 +37,4 @@ offer_cancel(Account const& account, std::uint32_t offerSeq) return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/owners.cpp b/src/test/jtx/impl/owners.cpp index 855c5b04ff..fde456f3ab 100644 --- a/src/test/jtx/impl/owners.cpp +++ b/src/test/jtx/impl/owners.cpp @@ -1,6 +1,16 @@ #include +#include + +#include +#include #include +#include +#include +#include + +#include +#include namespace xrpl { namespace detail { @@ -28,8 +38,7 @@ owned_count_helper( } // namespace detail -namespace test { -namespace jtx { +namespace test::jtx { void owners::operator()(Env& env) const @@ -37,6 +46,6 @@ owners::operator()(Env& env) const env.test.expect(env.le(account_)->getFieldU32(sfOwnerCount) == value_); } -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/impl/paths.cpp b/src/test/jtx/impl/paths.cpp index 718aca6979..f508d0d3b6 100644 --- a/src/test/jtx/impl/paths.cpp +++ b/src/test/jtx/impl/paths.cpp @@ -1,14 +1,26 @@ #include +#include +#include +#include + +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { void paths::operator()(Env& env, JTx& jt) const @@ -104,6 +116,4 @@ path::operator()(Env& env, JTx& jt) const jt.jv["Paths"].append(jv_); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/pay.cpp b/src/test/jtx/impl/pay.cpp index 9e927c6270..34b6b13d86 100644 --- a/src/test/jtx/impl/pay.cpp +++ b/src/test/jtx/impl/pay.cpp @@ -1,11 +1,14 @@ #include +#include +#include + +#include +#include #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { Json::Value pay(AccountID const& account, AccountID const& to, AnyAmount amount) @@ -25,6 +28,4 @@ pay(Account const& account, Account const& to, AnyAmount amount) return pay(account.id(), to.id(), amount); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/permissioned_dex.cpp b/src/test/jtx/impl/permissioned_dex.cpp index 494ea897d4..012932fed5 100644 --- a/src/test/jtx/impl/permissioned_dex.cpp +++ b/src/test/jtx/impl/permissioned_dex.cpp @@ -1,13 +1,19 @@ -#include -#include -#include +#include -#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { -namespace jtx { +#include + +#include +#include + +namespace xrpl::test::jtx { uint256 setupDomain( @@ -61,6 +67,4 @@ PermissionedDEX::PermissionedDEX(Env& env) } } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/permissioned_domains.cpp b/src/test/jtx/impl/permissioned_domains.cpp index 60d653e956..ff3146e67a 100644 --- a/src/test/jtx/impl/permissioned_domains.cpp +++ b/src/test/jtx/impl/permissioned_domains.cpp @@ -1,9 +1,28 @@ -#include +#include -namespace xrpl { -namespace test { -namespace jtx { -namespace pdomain { +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx::pdomain { // helpers // Make json for PermissionedDomainSet transaction @@ -149,7 +168,4 @@ getNewDomain(std::shared_ptr const& meta) return ret; } -} // namespace pdomain -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::pdomain diff --git a/src/test/jtx/impl/quality2.cpp b/src/test/jtx/impl/quality2.cpp index 9da366d4c2..32aca1b1cd 100644 --- a/src/test/jtx/impl/quality2.cpp +++ b/src/test/jtx/impl/quality2.cpp @@ -1,11 +1,14 @@ +#include +#include #include #include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { qualityInPercent::qualityInPercent(double percent) // NOLINTNEXTLINE(cppcoreguidelines-use-default-member-init) @@ -51,6 +54,4 @@ qualityOutPercent::operator()(Env&, JTx& jt) const insertQualityIntoJtx(sfQualityOut, qOut_, jt); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/rate.cpp b/src/test/jtx/impl/rate.cpp index b4e9b2cb60..dab02b33c4 100644 --- a/src/test/jtx/impl/rate.cpp +++ b/src/test/jtx/impl/rate.cpp @@ -1,13 +1,15 @@ #include +#include + #include +#include #include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { Json::Value rate(Account const& account, double multiplier) @@ -21,6 +23,4 @@ rate(Account const& account, double multiplier) return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/regkey.cpp b/src/test/jtx/impl/regkey.cpp index a2e2198eee..2f4c1bccdd 100644 --- a/src/test/jtx/impl/regkey.cpp +++ b/src/test/jtx/impl/regkey.cpp @@ -1,10 +1,13 @@ #include +#include +#include + +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { Json::Value regkey(Account const& account, disabled_t) @@ -25,6 +28,4 @@ regkey(Account const& account, Account const& signer) return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/sendmax.cpp b/src/test/jtx/impl/sendmax.cpp index f117458cfa..c33cab79fa 100644 --- a/src/test/jtx/impl/sendmax.cpp +++ b/src/test/jtx/impl/sendmax.cpp @@ -1,10 +1,11 @@ #include +#include +#include + #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { void sendmax::operator()(Env& env, JTx& jt) const @@ -12,6 +13,4 @@ sendmax::operator()(Env& env, JTx& jt) const jt.jv[jss::SendMax] = amount_.getJson(JsonOptions::none); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/seq.cpp b/src/test/jtx/impl/seq.cpp index 99c6ddbf0d..cab970974b 100644 --- a/src/test/jtx/impl/seq.cpp +++ b/src/test/jtx/impl/seq.cpp @@ -1,10 +1,11 @@ #include +#include +#include + #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { void seq::operator()(Env&, JTx& jt) const @@ -16,6 +17,4 @@ seq::operator()(Env&, JTx& jt) const jt[jss::Sequence] = *num_; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/sig.cpp b/src/test/jtx/impl/sig.cpp index 1bdadc0bd3..fe246f8f90 100644 --- a/src/test/jtx/impl/sig.cpp +++ b/src/test/jtx/impl/sig.cpp @@ -1,9 +1,10 @@ #include + +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { void sig::operator()(Env&, JTx& jt) const @@ -33,6 +34,4 @@ sig::operator()(Env&, JTx& jt) const } } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/tag.cpp b/src/test/jtx/impl/tag.cpp index 8321322f75..9c1dab724c 100644 --- a/src/test/jtx/impl/tag.cpp +++ b/src/test/jtx/impl/tag.cpp @@ -1,8 +1,9 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { void dtag::operator()(Env&, JTx& jt) const @@ -16,6 +17,4 @@ stag::operator()(Env&, JTx& jt) const jt.jv["SourceTag"] = value_; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/ticket.cpp b/src/test/jtx/impl/ticket.cpp index 2cb1826bbb..f0975e6151 100644 --- a/src/test/jtx/impl/ticket.cpp +++ b/src/test/jtx/impl/ticket.cpp @@ -1,12 +1,16 @@ #include +#include +#include +#include + +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include -namespace ticket { +namespace xrpl::test::jtx::ticket { Json::Value create(Account const& account, std::uint32_t count) @@ -26,8 +30,4 @@ use::operator()(Env&, JTx& jt) const jt[sfTicketSequence.jsonName] = ticketSeq_; } -} // namespace ticket - -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::ticket diff --git a/src/test/jtx/impl/token.cpp b/src/test/jtx/impl/token.cpp index 9db79361eb..c3779c3c56 100644 --- a/src/test/jtx/impl/token.cpp +++ b/src/test/jtx/impl/token.cpp @@ -1,14 +1,23 @@ -#include #include +#include +#include +#include +#include + +#include +#include #include +#include #include +#include #include -namespace xrpl { -namespace test { -namespace jtx { -namespace token { +#include +#include +#include + +namespace xrpl::test::jtx::token { Json::Value mint(jtx::Account const& account, std::uint32_t nfTokenTaxon) @@ -210,7 +219,4 @@ modify(jtx::Account const& account, uint256 const& nftokenID) return jv; } -} // namespace token -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::token diff --git a/src/test/jtx/impl/trust.cpp b/src/test/jtx/impl/trust.cpp index 08cd4ef94c..5450e0892d 100644 --- a/src/test/jtx/impl/trust.cpp +++ b/src/test/jtx/impl/trust.cpp @@ -1,13 +1,18 @@ #include +#include + #include +#include +#include +#include #include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { Json::Value trust(Account const& account, STAmount const& amount, std::uint32_t flags) @@ -56,6 +61,4 @@ claw(Account const& account, STAmount const& amount, std::optional cons return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/txflags.cpp b/src/test/jtx/impl/txflags.cpp index 7b49f9380b..686be767fe 100644 --- a/src/test/jtx/impl/txflags.cpp +++ b/src/test/jtx/impl/txflags.cpp @@ -1,10 +1,11 @@ #include +#include +#include + #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { void txflags::operator()(Env&, JTx& jt) const @@ -12,6 +13,4 @@ txflags::operator()(Env&, JTx& jt) const jt[jss::Flags] = v_ /*| tfFullyCanonicalSig*/; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/utility.cpp b/src/test/jtx/impl/utility.cpp index 7332358031..4bb6c83b88 100644 --- a/src/test/jtx/impl/utility.cpp +++ b/src/test/jtx/impl/utility.cpp @@ -1,18 +1,30 @@ #include +#include + #include #include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include -#include +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include + +namespace xrpl::test::jtx { STObject parse(Json::Value const& jv) @@ -89,6 +101,4 @@ cmdToJSONRPC(std::vector const& args, beast::Journal j, unsigned in return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/vault.cpp b/src/test/jtx/impl/vault.cpp index 49c0dddaec..5f4b488092 100644 --- a/src/test/jtx/impl/vault.cpp +++ b/src/test/jtx/impl/vault.cpp @@ -1,15 +1,20 @@ -#include #include +#include + +#include #include -#include +#include +#include +#include +#include +#include #include #include +#include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { std::tuple Vault::create(CreateArgs const& args) const @@ -79,6 +84,4 @@ Vault::clawback(ClawbackArgs const& args) return jv; } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/impl/xchain_bridge.cpp b/src/test/jtx/impl/xchain_bridge.cpp index 0e5a2c56d0..2cf1c305a7 100644 --- a/src/test/jtx/impl/xchain_bridge.cpp +++ b/src/test/jtx/impl/xchain_bridge.cpp @@ -1,20 +1,31 @@ -#include -#include #include +#include +#include +#include +#include +#include + +#include #include +#include +#include #include +#include #include +#include #include #include -#include -#include -#include #include -namespace xrpl { -namespace test { -namespace jtx { +#include +#include +#include +#include +#include +#include + +namespace xrpl::test::jtx { // use this for creating a bridge for a transaction Json::Value @@ -468,6 +479,4 @@ XChainBridgeObjects::createBridgeObjects(Env& mcEnv, Env& scEnv) createMcBridgeObjects(mcEnv); createScBridgeObjects(scEnv); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/invoice_id.h b/src/test/jtx/invoice_id.h index fd1b7ae45b..9366cc9bf5 100644 --- a/src/test/jtx/invoice_id.h +++ b/src/test/jtx/invoice_id.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { struct invoice_id { @@ -19,6 +17,4 @@ public: void operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/jtx_json.h b/src/test/jtx/jtx_json.h index c7f52fe283..0bd7c2ff94 100644 --- a/src/test/jtx/jtx_json.h +++ b/src/test/jtx/jtx_json.h @@ -4,9 +4,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Inject raw JSON. */ class json @@ -37,6 +35,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/last_ledger_sequence.h b/src/test/jtx/last_ledger_sequence.h index 540d6ff384..9015c87f02 100644 --- a/src/test/jtx/last_ledger_sequence.h +++ b/src/test/jtx/last_ledger_sequence.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { struct last_ledger_seq { @@ -20,6 +18,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/ledgerStateFix.h b/src/test/jtx/ledgerStateFix.h index 7adc863cb4..8735882d15 100644 --- a/src/test/jtx/ledgerStateFix.h +++ b/src/test/jtx/ledgerStateFix.h @@ -3,20 +3,11 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { - /** LedgerStateFix operations. */ -namespace ledgerStateFix { +namespace xrpl::test::jtx::ledgerStateFix { /** Repair the links in an NFToken directory. */ Json::Value nftPageLinks(jtx::Account const& acct, jtx::Account const& owner); -} // namespace ledgerStateFix - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::ledgerStateFix diff --git a/src/test/jtx/memo.h b/src/test/jtx/memo.h index 2371490b30..8cb41b3f1c 100644 --- a/src/test/jtx/memo.h +++ b/src/test/jtx/memo.h @@ -2,9 +2,9 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { /** Add a memo to a JTx. @@ -19,8 +19,8 @@ private: std::string type_; public: - memo(std::string const& data, std::string const& format, std::string const& type) - : data_(data), format_(format), type_(type) + memo(std::string data, std::string format, std::string type) + : data_(std::move(data)), format_(std::move(format)), type_(std::move(type)) { } @@ -34,7 +34,7 @@ private: std::string s_; public: - memo_data(std::string const& s) : s_(s) + memo_data(std::string s) : s_(std::move(s)) { } @@ -48,7 +48,7 @@ private: std::string s_; public: - memo_format(std::string const& s) : s_(s) + memo_format(std::string s) : s_(std::move(s)) { } @@ -62,7 +62,7 @@ private: std::string s_; public: - memo_type(std::string const& s) : s_(s) + memo_type(std::string s) : s_(std::move(s)) { } @@ -70,6 +70,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/mpt.h b/src/test/jtx/mpt.h index c35ca4b44a..17bdfad1aa 100644 --- a/src/test/jtx/mpt.h +++ b/src/test/jtx/mpt.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -12,11 +13,7 @@ #include #include -#include - -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class MPTTester; @@ -118,7 +115,7 @@ struct MPTCreate struct MPTInit { - Holders holders = {}; + Holders holders = {}; // NOLINT(readability-redundant-member-init) std::optional auditor = std::nullopt; PrettyAmount const xrp = XRP(10'000); PrettyAmount const xrpHolders = XRP(10'000); @@ -133,7 +130,7 @@ struct MPTInitDef { Env& env; Account issuer; - Holders holders = {}; + Holders holders = {}; // NOLINT(readability-redundant-member-init) std::optional auditor = std::nullopt; std::uint16_t transferFee = 0; std::optional pay = std::nullopt; @@ -357,11 +354,11 @@ public: AUDITOR_ENCRYPTED_BALANCE, }; - MPTTester(Env& env, Account const& issuer, MPTInit const& constr = {}); + MPTTester(Env& env, Account issuer, MPTInit const& constr = {}); MPTTester(MPTInitDef const& constr); MPTTester( Env& env, - Account const& issuer, + Account issuer, MPTID const& id, std::vector const& holders = {}, bool close = true); @@ -583,7 +580,7 @@ public: std::uint32_t getMPTokenVersion(Account const account) const; - Buffer + static Buffer getPedersenCommitment(std::uint64_t const amount, Buffer const& pedersenBlindingFactor); friend BookSpec @@ -619,20 +616,31 @@ private: dstTag = arg.destinationTag; if (ticketSeq && delegateAcct) + { env_( jv, expectedFlags, expectedTer, ticket::use(*ticketSeq), delegate::as(*delegateAcct)); + } else if (ticketSeq) + { env_(jv, expectedFlags, expectedTer, ticket::use(*ticketSeq)); + } else if (delegateAcct) + { env_(jv, expectedFlags, expectedTer, delegate::as(*delegateAcct)); + } else if (dstTag) + { env_(jv, expectedFlags, expectedTer, dtag(*dstTag)); + } else + { env_(jv, expectedFlags, expectedTer); + } + auto const err = env_.ter(); if (close_) env_.close(); @@ -663,6 +671,4 @@ private: Buffer& blindingFactor) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/multisign.h b/src/test/jtx/multisign.h index b3f38cc453..5b6a18b527 100644 --- a/src/test/jtx/multisign.h +++ b/src/test/jtx/multisign.h @@ -10,9 +10,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** A signer in a SignerList */ struct signer @@ -100,6 +98,4 @@ public: /** The number of signer lists matches. */ using siglists = owner_count; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/noop.h b/src/test/jtx/noop.h index 47d12fb9af..29c6188386 100644 --- a/src/test/jtx/noop.h +++ b/src/test/jtx/noop.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** The null transaction. */ inline Json::Value @@ -13,6 +11,4 @@ noop(Account const& account) return fset(account, 0); } -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/offer.h b/src/test/jtx/offer.h index 0fad9ec6dc..5f81db751f 100644 --- a/src/test/jtx/offer.h +++ b/src/test/jtx/offer.h @@ -5,9 +5,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Create an offer. */ Json::Value @@ -21,6 +19,4 @@ offer( Json::Value offer_cancel(Account const& account, std::uint32_t offerSeq); -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/owners.h b/src/test/jtx/owners.h index b24f0a686f..572b63757c 100644 --- a/src/test/jtx/owners.h +++ b/src/test/jtx/owners.h @@ -7,6 +7,7 @@ #include #include +#include namespace xrpl { @@ -24,8 +25,7 @@ owned_count_helper( } // namespace detail -namespace test { -namespace jtx { +namespace test::jtx { // Helper for aliases template @@ -36,7 +36,7 @@ private: std::uint32_t value_; public: - owner_count(Account const& account, std::uint32_t value) : account_(account), value_(value) + owner_count(Account account, std::uint32_t value) : account_(std::move(account)), value_(value) { } @@ -55,7 +55,7 @@ private: std::uint32_t value_; public: - owners(Account const& account, std::uint32_t value) : account_(account), value_(value) + owners(Account account, std::uint32_t value) : account_(std::move(account)), value_(value) { } @@ -72,6 +72,6 @@ using offers = owner_count; /** Match the number of MPToken in the account's owner directory */ using mptokens = owner_count; -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/paths.h b/src/test/jtx/paths.h index 8558b6232b..f63faa6292 100644 --- a/src/test/jtx/paths.h +++ b/src/test/jtx/paths.h @@ -8,8 +8,8 @@ namespace xrpl { class STPath; -namespace test { -namespace jtx { + +namespace test::jtx { /** Set Paths, SendMax on a JTx. */ class paths @@ -62,7 +62,7 @@ private: append_one(AccountID const& account); template - std::enable_if_t::value> + std::enable_if_t> append_one(T const& t) { append_one(Account{t}); @@ -94,6 +94,6 @@ path::append(T const& t, Args const&... args) append(args...); } -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/pay.h b/src/test/jtx/pay.h index a155d7bdc8..093920a970 100644 --- a/src/test/jtx/pay.h +++ b/src/test/jtx/pay.h @@ -5,9 +5,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Create a payment. */ Json::Value @@ -15,6 +13,4 @@ pay(AccountID const& account, AccountID const& to, AnyAmount amount); Json::Value pay(Account const& account, Account const& to, AnyAmount amount); -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/permissioned_dex.h b/src/test/jtx/permissioned_dex.h index 2023342ded..025097116f 100644 --- a/src/test/jtx/permissioned_dex.h +++ b/src/test/jtx/permissioned_dex.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { uint256 setupDomain( @@ -29,6 +27,4 @@ public: PermissionedDEX(Env& env); }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/permissioned_domains.h b/src/test/jtx/permissioned_domains.h index bf67722c9c..a582b001b1 100644 --- a/src/test/jtx/permissioned_domains.h +++ b/src/test/jtx/permissioned_domains.h @@ -4,10 +4,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { -namespace pdomain { +namespace xrpl::test::jtx::pdomain { // Helpers for PermissionedDomains testing using Credential = xrpl::test::jtx::deposit::AuthorizeCredentials; @@ -47,7 +44,4 @@ sortCredentials(Credentials const& input); uint256 getNewDomain(std::shared_ptr const& meta); -} // namespace pdomain -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::pdomain diff --git a/src/test/jtx/prop.h b/src/test/jtx/prop.h index b1f8cb5ffc..5651ac58ce 100644 --- a/src/test/jtx/prop.h +++ b/src/test/jtx/prop.h @@ -4,9 +4,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set a property on a JTx. */ template @@ -26,6 +24,4 @@ struct prop } }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/quality.h b/src/test/jtx/quality.h index 2da83eeef5..adb198038a 100644 --- a/src/test/jtx/quality.h +++ b/src/test/jtx/quality.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Sets the literal QualityIn on a trust JTx. */ class qualityIn @@ -62,6 +60,4 @@ public: operator()(Env&, JTx& jtx) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/rate.h b/src/test/jtx/rate.h index a92bd2364a..740c2ffd1a 100644 --- a/src/test/jtx/rate.h +++ b/src/test/jtx/rate.h @@ -4,14 +4,10 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set a transfer rate. */ Json::Value rate(Account const& account, double multiplier); -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/regkey.h b/src/test/jtx/regkey.h index 2c95baacc3..3da055c66f 100644 --- a/src/test/jtx/regkey.h +++ b/src/test/jtx/regkey.h @@ -5,9 +5,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Disable the regular key. */ Json::Value @@ -17,6 +15,4 @@ regkey(Account const& account, disabled_t); Json::Value regkey(Account const& account, Account const& signer); -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/require.h b/src/test/jtx/require.h index 7d712e8ab7..20f79ff838 100644 --- a/src/test/jtx/require.h +++ b/src/test/jtx/require.h @@ -20,8 +20,7 @@ require_args(test::jtx::requires_t& vec, Cond const& cond, Args const&... args) } // namespace detail -namespace test { -namespace jtx { +namespace test::jtx { /** Compose many condition functors into one */ template @@ -60,6 +59,6 @@ public: } }; -} // namespace jtx -} // namespace test +} // namespace test::jtx + } // namespace xrpl diff --git a/src/test/jtx/requires.h b/src/test/jtx/requires.h index 2411d040c6..d41d0cd0b0 100644 --- a/src/test/jtx/requires.h +++ b/src/test/jtx/requires.h @@ -3,15 +3,11 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class Env; using require_t = std::function; using requires_t = std::vector; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/rpc.h b/src/test/jtx/rpc.h index bbdecf1519..be7ab8d456 100644 --- a/src/test/jtx/rpc.h +++ b/src/test/jtx/rpc.h @@ -3,10 +3,9 @@ #include #include +#include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the expected result code for a JTx The test will fail if the code doesn't match. @@ -22,13 +21,13 @@ private: public: /// If there's an error code, we expect an error message explicit rpc(error_code_i code, std::optional m = {}) - : code_(code), errorMessage_(m) + : code_(code), errorMessage_(std::move(m)) { } /// If there is not a code, we expect an exception message explicit rpc(std::string error, std::optional exceptionMessage = {}) - : error_(error), errorException_(exceptionMessage) + : error_(error), errorException_(std::move(exceptionMessage)) { } @@ -56,6 +55,4 @@ public: } }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/sendmax.h b/src/test/jtx/sendmax.h index 8a471be3cd..e559a87641 100644 --- a/src/test/jtx/sendmax.h +++ b/src/test/jtx/sendmax.h @@ -4,9 +4,9 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +#include + +namespace xrpl::test::jtx { /** Sets the SendMax on a JTx. */ class sendmax @@ -15,7 +15,7 @@ private: STAmount amount_; public: - sendmax(STAmount const& amount) : amount_(amount) + sendmax(STAmount amount) : amount_(std::move(amount)) { } @@ -23,6 +23,4 @@ public: operator()(Env&, JTx& jtx) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/seq.h b/src/test/jtx/seq.h index b861800ac9..ea5ccfa259 100644 --- a/src/test/jtx/seq.h +++ b/src/test/jtx/seq.h @@ -5,9 +5,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the sequence number on a JTx. */ struct seq @@ -33,6 +31,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/sig.h b/src/test/jtx/sig.h index 0ed59de50e..e23022b4b5 100644 --- a/src/test/jtx/sig.h +++ b/src/test/jtx/sig.h @@ -4,9 +4,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the regular signature on a JTx. @note For multisign, use msig. @@ -56,6 +54,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/tag.h b/src/test/jtx/tag.h index c8d5723754..c11dff2550 100644 --- a/src/test/jtx/tag.h +++ b/src/test/jtx/tag.h @@ -2,10 +2,7 @@ #include -namespace xrpl { -namespace test { - -namespace jtx { +namespace xrpl::test::jtx { /** Set the destination tag on a JTx*/ struct dtag @@ -37,7 +34,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/tags.h b/src/test/jtx/tags.h index c8a6170048..9c7a21145d 100644 --- a/src/test/jtx/tags.h +++ b/src/test/jtx/tags.h @@ -1,45 +1,31 @@ #pragma once -namespace xrpl { -namespace test { - -namespace jtx { +namespace xrpl::test::jtx { struct none_t { - none_t() - { - } + none_t() = default; }; static none_t const none; struct autofill_t { - autofill_t() - { - } + autofill_t() = default; }; static autofill_t const autofill; struct disabled_t { - disabled_t() - { - } + disabled_t() = default; }; static disabled_t const disabled; /** Used for fee() calls that use an owner reserve increment */ struct increment_t { - increment_t() - { - } + increment_t() = default; }; static increment_t const increment; -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/ter.h b/src/test/jtx/ter.h index 074ba307cb..ab21bc8e2b 100644 --- a/src/test/jtx/ter.h +++ b/src/test/jtx/ter.h @@ -4,9 +4,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the expected result code for a JTx The test will fail if the code doesn't match. @@ -32,6 +30,4 @@ public: } }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/ticket.h b/src/test/jtx/ticket.h index dca16ac7c6..7ab3b9c1f9 100644 --- a/src/test/jtx/ticket.h +++ b/src/test/jtx/ticket.h @@ -6,9 +6,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /* This shows how the jtx system may be extended to other @@ -43,7 +41,4 @@ public: /** Match the number of tickets on the account. */ using tickets = owner_count; -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/token.h b/src/test/jtx/token.h index 3f4a3f75a3..28ccd7520b 100644 --- a/src/test/jtx/token.h +++ b/src/test/jtx/token.h @@ -8,11 +8,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { - -namespace token { +namespace xrpl::test::jtx::token { /** Mint an NFToken. */ Json::Value @@ -214,9 +210,4 @@ clearMinter(jtx::Account const& account); Json::Value modify(jtx::Account const& account, uint256 const& nftokenID); -} // namespace token - -} // namespace jtx - -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::token diff --git a/src/test/jtx/trust.h b/src/test/jtx/trust.h index afea256382..f6fb5b388f 100644 --- a/src/test/jtx/trust.h +++ b/src/test/jtx/trust.h @@ -5,9 +5,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Modify a trust line. */ Json::Value @@ -23,6 +21,4 @@ claw( STAmount const& amount, std::optional const& mptHolder = std::nullopt); -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/txflags.h b/src/test/jtx/txflags.h index f51c26d035..838f7f5f30 100644 --- a/src/test/jtx/txflags.h +++ b/src/test/jtx/txflags.h @@ -2,9 +2,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Set the flags on a JTx. */ class txflags @@ -21,6 +19,4 @@ public: operator()(Env&, JTx& jt) const; }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/utility.h b/src/test/jtx/utility.h index c9189efc36..b00f5b433e 100644 --- a/src/test/jtx/utility.h +++ b/src/test/jtx/utility.h @@ -8,9 +8,7 @@ #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { /** Thrown when parse fails. */ struct parse_error : std::logic_error @@ -53,6 +51,4 @@ fill_seq(Json::Value& jv, ReadView const& view); Json::Value cmdToJSONRPC(std::vector const& args, beast::Journal j, unsigned int apiVersion); -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/vault.h b/src/test/jtx/vault.h index 748d3341a5..bbd8c129cc 100644 --- a/src/test/jtx/vault.h +++ b/src/test/jtx/vault.h @@ -11,9 +11,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { class Env; @@ -25,7 +23,8 @@ struct Vault { Account owner; Asset asset; - std::optional flags{}; + std::optional flags = + std::nullopt; // NOLINT(readability-redundant-member-init) }; /** Return a VaultCreate transaction and the Vault's expected keylet. */ @@ -75,13 +74,11 @@ struct Vault Account issuer; uint256 id; Account holder; - std::optional amount{}; + std::optional amount = std::nullopt; // NOLINT(readability-redundant-member-init) }; static Json::Value clawback(ClawbackArgs const& args); }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/jtx/xchain_bridge.h b/src/test/jtx/xchain_bridge.h index 1270d03ed6..bb01bf17ba 100644 --- a/src/test/jtx/xchain_bridge.h +++ b/src/test/jtx/xchain_bridge.h @@ -8,9 +8,7 @@ #include #include -namespace xrpl { -namespace test { -namespace jtx { +namespace xrpl::test::jtx { using JValueVec = std::vector; @@ -224,13 +222,11 @@ struct XChainBridgeObjects Account const& acc, Json::Value const& bridge = Json::nullValue, STAmount const& _reward = XRP(1), - std::optional const& minAccountCreate = std::nullopt) + std::optional const& minAccountCreate = std::nullopt) const { return bridge_create( acc, bridge == Json::nullValue ? jvb : bridge, _reward, minAccountCreate); } }; -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx diff --git a/src/test/ledger/BookDirs_test.cpp b/src/test/ledger/BookDirs_test.cpp index 951a53185b..efd1688c6f 100644 --- a/src/test/ledger/BookDirs_test.cpp +++ b/src/test/ledger/BookDirs_test.cpp @@ -1,10 +1,21 @@ -#include +#include +#include +#include +#include +#include + +#include #include +#include #include +#include +#include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { struct BookDirs_test : public beast::unit_test::suite { @@ -88,5 +99,4 @@ struct BookDirs_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(BookDirs, ledger, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/ledger/Directory_test.cpp b/src/test/ledger/Directory_test.cpp index 518ec2511c..f14ce2f0d7 100644 --- a/src/test/ledger/Directory_test.cpp +++ b/src/test/ledger/Directory_test.cpp @@ -1,19 +1,50 @@ -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include + +#include #include +#include +#include +#include +#include +#include #include #include #include +#include #include +#include +#include +#include #include +#include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { struct Directory_test : public beast::unit_test::suite { @@ -102,7 +133,7 @@ struct Directory_test : public beast::unit_test::suite // Ensure that the entries in the page are sorted auto const& v = p->getFieldV256(sfIndexes); - BEAST_EXPECT(std::is_sorted(v.begin(), v.end())); + BEAST_EXPECT(std::ranges::is_sorted(v)); // Ensure that the page contains the correct orders by // calculating which sequence numbers belong here. @@ -568,5 +599,4 @@ struct Directory_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE_PRIO(Directory, ledger, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/ledger/PaymentSandbox_test.cpp b/src/test/ledger/PaymentSandbox_test.cpp index f1d648153c..0dc2cb6e74 100644 --- a/src/test/ledger/PaymentSandbox_test.cpp +++ b/src/test/ledger/PaymentSandbox_test.cpp @@ -1,14 +1,34 @@ +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include #include +#include #include #include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +#include + +namespace xrpl::test { class PaymentSandbox_test : public beast::unit_test::suite { @@ -377,5 +397,4 @@ public: BEAST_DEFINE_TESTSUITE(PaymentSandbox, ledger, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/ledger/PendingSaves_test.cpp b/src/test/ledger/PendingSaves_test.cpp index 5e08fc53e4..deca50c9be 100644 --- a/src/test/ledger/PendingSaves_test.cpp +++ b/src/test/ledger/PendingSaves_test.cpp @@ -1,8 +1,7 @@ -#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { struct PendingSaves_test : public beast::unit_test::suite { @@ -41,5 +40,4 @@ struct PendingSaves_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(PendingSaves, ledger, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/ledger/SkipList_test.cpp b/src/test/ledger/SkipList_test.cpp index a2695bfce8..33f6f505f1 100644 --- a/src/test/ledger/SkipList_test.cpp +++ b/src/test/ledger/SkipList_test.cpp @@ -1,11 +1,17 @@ #include -#include +#include + +#include +#include #include #include -namespace xrpl { -namespace test { +#include +#include +#include + +namespace xrpl::test { class SkipList_test : public beast::unit_test::suite { @@ -74,5 +80,4 @@ class SkipList_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(SkipList, ledger, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/ledger/View_test.cpp b/src/test/ledger/View_test.cpp index d2d930732e..cf2e478889 100644 --- a/src/test/ledger/View_test.cpp +++ b/src/test/ledger/View_test.cpp @@ -1,20 +1,55 @@ -#include -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include #include #include #include #include +#include #include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class View_test : public beast::unit_test::suite { @@ -1048,5 +1083,4 @@ class GetAmendments_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(View, ledger, xrpl); BEAST_DEFINE_TESTSUITE(GetAmendments, ledger, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/nodestore/Backend_test.cpp b/src/test/nodestore/Backend_test.cpp index 101138de88..0bba847c30 100644 --- a/src/test/nodestore/Backend_test.cpp +++ b/src/test/nodestore/Backend_test.cpp @@ -1,17 +1,22 @@ #include #include +#include #include -#include +#include #include +#include +#include #include #include +#include #include +#include +#include +#include -namespace xrpl { - -namespace NodeStore { +namespace xrpl::NodeStore { // Tests the Backend interface // @@ -73,8 +78,8 @@ public: Batch copy; fetchCopyOfBatch(*backend, ©, batch); // Canonicalize the source and destination batches - std::sort(batch.begin(), batch.end(), LessThan{}); - std::sort(copy.begin(), copy.end(), LessThan{}); + std::ranges::sort(batch, LessThan{}); + std::ranges::sort(copy, LessThan{}); BEAST_EXPECT(areBatchesEqual(batch, copy)); } } @@ -100,5 +105,4 @@ public: BEAST_DEFINE_TESTSUITE(Backend, nodestore, xrpl); -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/test/nodestore/Basics_test.cpp b/src/test/nodestore/Basics_test.cpp index c9755d04d7..f31111eed5 100644 --- a/src/test/nodestore/Basics_test.cpp +++ b/src/test/nodestore/Basics_test.cpp @@ -1,10 +1,14 @@ #include +#include +#include #include #include -namespace xrpl { -namespace NodeStore { +#include +#include + +namespace xrpl::NodeStore { // Tests predictable batches, and NodeObject blob encoding // @@ -66,5 +70,4 @@ public: BEAST_DEFINE_TESTSUITE(NodeStoreBasic, nodestore, xrpl); -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/test/nodestore/Database_test.cpp b/src/test/nodestore/Database_test.cpp index 43bda9dcae..684347c6cc 100644 --- a/src/test/nodestore/Database_test.cpp +++ b/src/test/nodestore/Database_test.cpp @@ -1,17 +1,32 @@ -#include #include +#include #include #include #include +#include + +#include +#include +#include #include +#include +#include #include #include +#include +#include #include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include -namespace NodeStore { +namespace xrpl::NodeStore { class Database_test : public TestBase { @@ -556,8 +571,8 @@ public: } // Canonicalize the source and destination batches - std::sort(batch.begin(), batch.end(), LessThan{}); - std::sort(copy.begin(), copy.end(), LessThan{}); + std::ranges::sort(batch, LessThan{}); + std::ranges::sort(copy, LessThan{}); BEAST_EXPECT(areBatchesEqual(batch, copy)); } @@ -621,8 +636,8 @@ public: fetchCopyOfBatch(*db, ©, batch); // Canonicalize the source and destination batches - std::sort(batch.begin(), batch.end(), LessThan{}); - std::sort(copy.begin(), copy.end(), LessThan{}); + std::ranges::sort(batch, LessThan{}); + std::ranges::sort(copy, LessThan{}); BEAST_EXPECT(areBatchesEqual(batch, copy)); } @@ -709,5 +724,4 @@ public: BEAST_DEFINE_TESTSUITE(Database, nodestore, xrpl); -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/test/nodestore/NuDBFactory_test.cpp b/src/test/nodestore/NuDBFactory_test.cpp index 3e6b68c9e5..0755708cee 100644 --- a/src/test/nodestore/NuDBFactory_test.cpp +++ b/src/test/nodestore/NuDBFactory_test.cpp @@ -3,15 +3,23 @@ #include #include +#include +#include +#include #include #include #include +#include +#include +#include #include #include +#include +#include +#include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { class NuDBFactory_test : public TestBase { @@ -438,5 +446,4 @@ public: BEAST_DEFINE_TESTSUITE(NuDBFactory, xrpl_core, xrpl); -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/test/nodestore/TestBase.h b/src/test/nodestore/TestBase.h index 893e06579c..e527942629 100644 --- a/src/test/nodestore/TestBase.h +++ b/src/test/nodestore/TestBase.h @@ -13,8 +13,7 @@ #include -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { /** Binary function that satisfies the strict-weak-ordering requirement. @@ -75,9 +74,10 @@ public: return hotTRANSACTION_NODE; case 3: return hotUNKNOWN; + default: + // will never happen, but make static analysis tool happy. + return hotUNKNOWN; } - // will never happen, but make static analysis tool happy. - return hotUNKNOWN; }(); uint256 hash; @@ -118,7 +118,7 @@ public: } // Store a batch in a backend - void + static void storeBatch(Backend& backend, Batch const& batch) { for (int i = 0; i < batch.size(); ++i) @@ -195,5 +195,4 @@ public: } }; -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/test/nodestore/Timing_test.cpp b/src/test/nodestore/Timing_test.cpp index 39e8b59638..cc9881dbac 100644 --- a/src/test/nodestore/Timing_test.cpp +++ b/src/test/nodestore/Timing_test.cpp @@ -2,34 +2,48 @@ #include #include +#include #include +#include +#include #include -#include +#include #include +#include #include #include +#include #include #include +#include +#include +#include -#include +#include +#include #include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include +#include #include +#include #ifndef NODESTORE_TIMING_DO_VERIFY #define NODESTORE_TIMING_DO_VERIFY 0 #endif -namespace xrpl { -namespace NodeStore { +namespace xrpl::NodeStore { std::unique_ptr make_Backend(Section const& config, Scheduler& scheduler, beast::Journal journal) @@ -211,7 +225,7 @@ public: parallel_for(std::size_t const n, std::size_t number_of_threads, Args const&... args) { std::atomic c(0); - std::vector t; + std::vector t; t.reserve(number_of_threads); for (std::size_t id = 0; id < number_of_threads; ++id) t.emplace_back(*this, parallel_for_lambda(n, c), args...); @@ -224,7 +238,7 @@ public: parallel_for_id(std::size_t const n, std::size_t number_of_threads, Args const&... args) { std::atomic c(0); - std::vector t; + std::vector t; t.reserve(number_of_threads); for (std::size_t id = 0; id < number_of_threads; ++id) t.emplace_back(*this, parallel_for_lambda(n, c), id, args...); @@ -714,5 +728,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Timing, nodestore, xrpl, 1); -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore diff --git a/src/test/nodestore/import_test.cpp b/src/test/nodestore/import_test.cpp index 6d336c1f51..1341b98894 100644 --- a/src/test/nodestore/import_test.cpp +++ b/src/test/nodestore/import_test.cpp @@ -1,23 +1,46 @@ #include -#include #include -#include #include -#include +#include #include #include -#include +#include // IWYU pragma: keep +#include +#include +#include -#include +#include // IWYU pragma: keep +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include #include +#include +#include /* diff --git a/src/test/nodestore/varint_test.cpp b/src/test/nodestore/varint_test.cpp index f6145a9f52..b97b31f1fe 100644 --- a/src/test/nodestore/varint_test.cpp +++ b/src/test/nodestore/varint_test.cpp @@ -1,12 +1,12 @@ -#include +#include #include #include +#include +#include #include -namespace xrpl { -namespace NodeStore { -namespace tests { +namespace xrpl::NodeStore::tests { class varint_test : public beast::unit_test::suite { @@ -54,6 +54,4 @@ public: BEAST_DEFINE_TESTSUITE(varint, nodestore, xrpl); -} // namespace tests -} // namespace NodeStore -} // namespace xrpl +} // namespace xrpl::NodeStore::tests diff --git a/src/test/overlay/ProtocolVersion_test.cpp b/src/test/overlay/ProtocolVersion_test.cpp index fc25812cbb..a04bb3b36e 100644 --- a/src/test/overlay/ProtocolVersion_test.cpp +++ b/src/test/overlay/ProtocolVersion_test.cpp @@ -1,6 +1,9 @@ #include -#include +#include + +#include +#include namespace xrpl { diff --git a/src/test/overlay/TMGetObjectByHash_test.cpp b/src/test/overlay/TMGetObjectByHash_test.cpp index a2a934f182..c1db5262d0 100644 --- a/src/test/overlay/TMGetObjectByHash_test.cpp +++ b/src/test/overlay/TMGetObjectByHash_test.cpp @@ -1,20 +1,42 @@ -#include #include +#include +#include #include +#include #include #include +#include #include -#include +#include +#include +#include #include -#include +#include +#include #include +#include +#include +#include #include -#include +#include +#include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +namespace xrpl::test { using namespace jtx; @@ -59,7 +81,7 @@ class TMGetObjectByHash_test : public beast::unit_test::suite { } - ~PeerTest() = default; + ~PeerTest() override = default; void run() override @@ -199,5 +221,4 @@ class TMGetObjectByHash_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(TMGetObjectByHash, overlay, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/overlay/cluster_test.cpp b/src/test/overlay/cluster_test.cpp index 6fc7f3f59b..41db90dc57 100644 --- a/src/test/overlay/cluster_test.cpp +++ b/src/test/overlay/cluster_test.cpp @@ -4,10 +4,20 @@ #include #include +#include +#include +#include +#include #include +#include -namespace xrpl { -namespace tests { +#include +#include +#include +#include +#include + +namespace xrpl::tests { class cluster_test : public xrpl::TestSuite { @@ -81,7 +91,7 @@ public: for (auto const& n : network) { - auto found = std::find(cluster.begin(), cluster.end(), n); + auto found = std::ranges::find(cluster, n); BEAST_EXPECT(static_cast(c->member(n)) == (found != cluster.end())); } } @@ -98,7 +108,7 @@ public: for (auto const& n : network) { - auto found = std::find(cluster.begin(), cluster.end(), n); + auto found = std::ranges::find(cluster, n); BEAST_EXPECT(static_cast(c->member(n)) == (found != cluster.end())); } } @@ -243,5 +253,4 @@ public: BEAST_DEFINE_TESTSUITE(cluster, overlay, xrpl); -} // namespace tests -} // namespace xrpl +} // namespace xrpl::tests diff --git a/src/test/overlay/compression_test.cpp b/src/test/overlay/compression_test.cpp index 4ffc805726..bb4b95220a 100644 --- a/src/test/overlay/compression_test.cpp +++ b/src/test/overlay/compression_test.cpp @@ -2,37 +2,55 @@ #include #include #include +#include #include -#include +#include #include #include #include #include #include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include -#include +#include #include -#include +#include +#include +#include +#include #include +#include +#include #include #include #include -#include #include -#include +#include +#include #include -#include +#include + +#include #include +#include +#include +#include +#include +#include -namespace xrpl { - -namespace test { +namespace xrpl::test { using namespace xrpl::test; using namespace xrpl::test::jtx; @@ -59,9 +77,7 @@ class compression_test : public beast::unit_test::suite using Algorithm = compression::Algorithm; public: - compression_test() - { - } + compression_test() = default; template void @@ -446,5 +462,4 @@ public: BEAST_DEFINE_TESTSUITE_MANUAL(compression, overlay, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/overlay/handshake_test.cpp b/src/test/overlay/handshake_test.cpp index 8e2d5d5ec1..50b987f794 100644 --- a/src/test/overlay/handshake_test.cpp +++ b/src/test/overlay/handshake_test.cpp @@ -1,10 +1,8 @@ #include -#include +#include -namespace xrpl { - -namespace test { +namespace xrpl::test { class handshake_test : public beast::unit_test::suite { @@ -42,5 +40,4 @@ public: BEAST_DEFINE_TESTSUITE(handshake, overlay, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/overlay/reduce_relay_test.cpp b/src/test/overlay/reduce_relay_test.cpp index bac70d35a6..842511b860 100644 --- a/src/test/overlay/reduce_relay_test.cpp +++ b/src/test/overlay/reduce_relay_test.cpp @@ -1,28 +1,52 @@ -#include #include +#include +#include #include #include +#include #include #include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include + +#include #include +#include #include +#include +#include +#include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { - -namespace test { +namespace xrpl::test { using namespace std::chrono; @@ -51,9 +75,7 @@ public: } PublicKey nodePublicKey_; - virtual ~PeerPartial() - { - } + ~PeerPartial() override = default; virtual void onMessage(MessageSPtr const& m, SquelchCB f) = 0; virtual void @@ -174,10 +196,10 @@ public: class ManualClock { public: - typedef uint64_t rep; - typedef std::milli period; - typedef std::chrono::duration duration; - typedef std::chrono::time_point time_point; + using rep = uint64_t; + using period = std::milli; + using duration = std::chrono::duration; + using time_point = std::chrono::time_point; inline static bool const is_steady = false; static void @@ -246,11 +268,8 @@ class Link using Latency = std::pair; public: - Link( - Validator& validator, - PeerSPtr peer, - Latency const& latency = {milliseconds(5), milliseconds(15)}) - : validator_(validator), peer_(peer), latency_(latency) + Link(Validator& validator, PeerSPtr peer, Latency latency = {milliseconds(5), milliseconds(15)}) + : validator_(validator), peer_(peer), latency_(std::move(latency)) { auto sp = peer_.lock(); assert(sp); @@ -371,9 +390,7 @@ public: for_links(LinkIterCB f, bool simulateSlow = false) { std::vector v; - std::transform(links_.begin(), links_.end(), std::back_inserter(v), [](auto& kv) { - return kv.second; - }); + std::ranges::transform(links_, std::back_inserter(v), [](auto& kv) { return kv.second; }); std::random_device d; std::mt19937 g(d()); std::shuffle(v.begin(), v.end(), g); @@ -443,7 +460,7 @@ public: id_ = sid_++; } - ~PeerSim() = default; + ~PeerSim() override = default; id_t id() const override @@ -477,7 +494,7 @@ public: } /** Remote Peer (Directly connected Peer) */ - virtual void + void onMessage(protocol::TMSquelch const& squelch) override { auto validator = squelch.validatorpubkey(); @@ -511,7 +528,7 @@ public: { } - ~OverlaySim() = default; + ~OverlaySim() override = default; void clear() @@ -752,8 +769,7 @@ public: void enableLink(std::uint16_t validatorId, Peer::id_t peer, bool enable) { - auto it = std::find_if( - validators_.begin(), validators_.end(), [&](auto& v) { return v.id() == validatorId; }); + auto it = std::ranges::find_if(validators_, [&](auto& v) { return v.id() == validatorId; }); assert(it != validators_.end()); if (enable) { @@ -1251,7 +1267,7 @@ protected: ManualClock::advance(seconds(601)); BEAST_EXPECT(propagateAndSquelch(log, true, false)); auto peers = network_.overlay().getPeers(network_.validator(0)); - auto it = std::find_if(peers.begin(), peers.end(), [&](auto it) { + auto it = std::ranges::find_if(peers, [&](auto it) { return std::get(it.second) == reduce_relay::PeerState::Squelched; }); @@ -1345,7 +1361,7 @@ vp_enable=0 { c.loadFromString(toLoad); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -1389,7 +1405,7 @@ vp_base_squelch_max_selected_peers=2 { c2.loadFromString(toLoad); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { error = e.what(); } @@ -1463,9 +1479,7 @@ vp_base_squelch_max_selected_peers=2 struct Handler : public reduce_relay::SquelchHandler { - Handler() - { - } + Handler() = default; void squelch(PublicKey const&, Peer::id_t, std::uint32_t duration) const override { @@ -1657,6 +1671,4 @@ class reduce_relay_simulate_test : public reduce_relay_test BEAST_DEFINE_TESTSUITE(reduce_relay, overlay, xrpl); BEAST_DEFINE_TESTSUITE_MANUAL(reduce_relay_simulate, overlay, xrpl); -} // namespace test - -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/overlay/short_read_test.cpp b/src/test/overlay/short_read_test.cpp index 0c8b7f8a43..5d145fb6b1 100644 --- a/src/test/overlay/short_read_test.cpp +++ b/src/test/overlay/short_read_test.cpp @@ -2,21 +2,39 @@ #include #include -#include +#include +#include #include #include +#include +#include +#include +#include #include +#include #include -#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include #include #include +#include namespace xrpl { /* @@ -627,7 +645,7 @@ public: { } - ~short_read_test() + ~short_read_test() override { work_.reset(); thread_.join(); diff --git a/src/test/overlay/traffic_count_test.cpp b/src/test/overlay/traffic_count_test.cpp index 5e6e4e685c..b5cb73c65d 100644 --- a/src/test/overlay/traffic_count_test.cpp +++ b/src/test/overlay/traffic_count_test.cpp @@ -1,12 +1,13 @@ -#include #include -#include -#include +#include -namespace xrpl { +#include -namespace test { +#include +#include + +namespace xrpl::test { class traffic_count_test : public beast::unit_test::suite { @@ -50,13 +51,13 @@ public: TrafficCount m_traffic; auto const counts = m_traffic.getCounts(); - std::for_each(counts.begin(), counts.end(), [&](auto const& pair) { + std::ranges::for_each(counts, [&](auto const& pair) { for (auto i = 0; i < tc.messageCount; ++i) m_traffic.addCount(pair.first, tc.inbound, tc.size); }); auto const counts_new = m_traffic.getCounts(); - std::for_each(counts_new.begin(), counts_new.end(), [&](auto const& pair) { + std::ranges::for_each(counts_new, [&](auto const& pair) { BEAST_EXPECT(pair.second.bytesIn.load() == tc.expectedBytesIn); BEAST_EXPECT(pair.second.bytesOut.load() == tc.expectedBytesOut); BEAST_EXPECT(pair.second.messagesIn.load() == tc.expectedMessagesIn); @@ -125,5 +126,4 @@ public: BEAST_DEFINE_TESTSUITE(traffic_count, overlay, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/overlay/tx_reduce_relay_test.cpp b/src/test/overlay/tx_reduce_relay_test.cpp index abb1632858..bbb31fd38b 100644 --- a/src/test/overlay/tx_reduce_relay_test.cpp +++ b/src/test/overlay/tx_reduce_relay_test.cpp @@ -1,16 +1,49 @@ -#include #include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include -namespace test { +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::test { class tx_reduce_relay_test : public beast::unit_test::suite { @@ -108,7 +141,7 @@ private: { sid_++; } - ~PeerTest() = default; + ~PeerTest() override = default; void run() override @@ -264,5 +297,4 @@ private: }; BEAST_DEFINE_TESTSUITE(tx_reduce_relay, overlay, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/peerfinder/Livecache_test.cpp b/src/test/peerfinder/Livecache_test.cpp index d12da84ffd..561b17f71c 100644 --- a/src/test/peerfinder/Livecache_test.cpp +++ b/src/test/peerfinder/Livecache_test.cpp @@ -1,16 +1,28 @@ #include #include +#include #include +#include #include -#include -#include +#include +#include +#include -#include +#include +#include +#include +#include -namespace xrpl { -namespace PeerFinder { +#include +#include +#include +#include +#include +#include + +namespace xrpl::PeerFinder { bool operator==(Endpoint const& a, Endpoint const& b) @@ -199,5 +211,4 @@ public: BEAST_DEFINE_TESTSUITE(Livecache, peerfinder, xrpl); -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/test/peerfinder/PeerFinder_test.cpp b/src/test/peerfinder/PeerFinder_test.cpp index 2726604c72..0e37c7baf4 100644 --- a/src/test/peerfinder/PeerFinder_test.cpp +++ b/src/test/peerfinder/PeerFinder_test.cpp @@ -2,15 +2,28 @@ #include #include +#include #include +#include #include +#include #include +#include #include #include -namespace xrpl { -namespace PeerFinder { +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::PeerFinder { class PeerFinder_test : public beast::unit_test::suite { @@ -516,5 +529,4 @@ public: BEAST_DEFINE_TESTSUITE(PeerFinder, peerfinder, xrpl); -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/test/protocol/ApiVersion_test.cpp b/src/test/protocol/ApiVersion_test.cpp index 0b7babc764..569aed5fa2 100644 --- a/src/test/protocol/ApiVersion_test.cpp +++ b/src/test/protocol/ApiVersion_test.cpp @@ -1,16 +1,7 @@ -#include #include #include -#include -#include -#include -#include -#include -#include - -namespace xrpl { -namespace test { +namespace xrpl::test { struct ApiVersion_test : beast::unit_test::suite { void @@ -47,5 +38,4 @@ struct ApiVersion_test : beast::unit_test::suite BEAST_DEFINE_TESTSUITE(ApiVersion, protocol, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/protocol/BuildInfo_test.cpp b/src/test/protocol/BuildInfo_test.cpp index 589eb00637..d157978744 100644 --- a/src/test/protocol/BuildInfo_test.cpp +++ b/src/test/protocol/BuildInfo_test.cpp @@ -1,4 +1,4 @@ -#include +#include #include namespace xrpl { diff --git a/src/test/protocol/Hooks_test.cpp b/src/test/protocol/Hooks_test.cpp index 6f08517c0f..c6254d16bb 100644 --- a/src/test/protocol/Hooks_test.cpp +++ b/src/test/protocol/Hooks_test.cpp @@ -1,7 +1,15 @@ -#include -#include +#include // IWYU pragma: keep + +#include +#include +#include +#include +#include +#include + +#include #include #include diff --git a/src/test/protocol/InnerObjectFormats_test.cpp b/src/test/protocol/InnerObjectFormats_test.cpp index 2961e90db7..8a4d527db3 100644 --- a/src/test/protocol/InnerObjectFormats_test.cpp +++ b/src/test/protocol/InnerObjectFormats_test.cpp @@ -1,11 +1,16 @@ -#include + +#include #include -#include -#include // Json::Reader +#include +#include // Json::Reader +#include #include // RPC::containsError #include // STParsedJSONObject +#include +#include + namespace xrpl { namespace InnerObjectFormatsUnitTestDetail { @@ -19,7 +24,7 @@ struct TestJSONTxt static TestJSONTxt const testArray[] = { // Valid SignerEntry - {R"({ + {.txt = R"({ "Account" : "rDg53Haik2475DJx8bjMDSDPj4VX7htaMd", "SignerEntries" : [ @@ -41,10 +46,10 @@ static TestJSONTxt const testArray[] = { "SignerQuorum" : 7, "TransactionType" : "SignerListSet" })", - false}, + .expectFail = false}, // SignerEntry missing Account - {R"({ + {.txt = R"({ "Account" : "rDg53Haik2475DJx8bjMDSDPj4VX7htaMd", "SignerEntries" : [ @@ -65,10 +70,10 @@ static TestJSONTxt const testArray[] = { "SignerQuorum" : 7, "TransactionType" : "SignerListSet" })", - true}, + .expectFail = true}, // SignerEntry missing SignerWeight - {R"({ + {.txt = R"({ "Account" : "rDg53Haik2475DJx8bjMDSDPj4VX7htaMd", "SignerEntries" : [ @@ -89,10 +94,10 @@ static TestJSONTxt const testArray[] = { "SignerQuorum" : 7, "TransactionType" : "SignerListSet" })", - true}, + .expectFail = true}, // SignerEntry with unexpected Amount - {R"({ + {.txt = R"({ "Account" : "rDg53Haik2475DJx8bjMDSDPj4VX7htaMd", "SignerEntries" : [ @@ -115,10 +120,10 @@ static TestJSONTxt const testArray[] = { "SignerQuorum" : 7, "TransactionType" : "SignerListSet" })", - true}, + .expectFail = true}, // SignerEntry with no Account and unexpected Amount - {R"({ + {.txt = R"({ "Account" : "rDg53Haik2475DJx8bjMDSDPj4VX7htaMd", "SignerEntries" : [ @@ -140,7 +145,7 @@ static TestJSONTxt const testArray[] = { "SignerQuorum" : 7, "TransactionType" : "SignerListSet" })", - true}, + .expectFail = true}, }; diff --git a/src/test/protocol/Issue_test.cpp b/src/test/protocol/Issue_test.cpp index eddaf1c6d8..116ac7ca27 100644 --- a/src/test/protocol/Issue_test.cpp +++ b/src/test/protocol/Issue_test.cpp @@ -1,15 +1,16 @@ #include -#include +#include +#include +#include #include #include +#include -#include - +#include #include #include #include -#include -#include +#include #if BEAST_MSVC #define STL_SET_HAS_EMPLACE 1 diff --git a/src/test/protocol/Memo_test.cpp b/src/test/protocol/Memo_test.cpp index a39fdfd194..fa6d7905a4 100644 --- a/src/test/protocol/Memo_test.cpp +++ b/src/test/protocol/Memo_test.cpp @@ -1,6 +1,17 @@ -#include + +#include +#include +#include +#include +#include +#include +#include #include +#include +#include + +#include namespace xrpl { diff --git a/src/test/protocol/MultiApiJson_test.cpp b/src/test/protocol/MultiApiJson_test.cpp index 5aafa19771..f0cbf805f3 100644 --- a/src/test/protocol/MultiApiJson_test.cpp +++ b/src/test/protocol/MultiApiJson_test.cpp @@ -1,14 +1,16 @@ -#include +#include +#include +#include #include -#include +#include +#include #include #include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { namespace { @@ -917,5 +919,4 @@ struct MultiApiJson_test : beast::unit_test::suite BEAST_DEFINE_TESTSUITE(MultiApiJson, protocol, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/protocol/PublicKey_test.cpp b/src/test/protocol/PublicKey_test.cpp index 79ab589404..cc5658d1c1 100644 --- a/src/test/protocol/PublicKey_test.cpp +++ b/src/test/protocol/PublicKey_test.cpp @@ -1,7 +1,17 @@ -#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include namespace xrpl { diff --git a/src/test/protocol/Quality_test.cpp b/src/test/protocol/Quality_test.cpp index f421f98c94..09308c71a8 100644 --- a/src/test/protocol/Quality_test.cpp +++ b/src/test/protocol/Quality_test.cpp @@ -1,6 +1,12 @@ -#include +#include +#include +#include +#include #include +#include +#include +#include #include namespace xrpl { @@ -16,17 +22,17 @@ public: template static STAmount - amount(Integer integer, std::enable_if_t::value>* = 0) + amount(Integer integer, std::enable_if_t>* = 0) { - static_assert(std::is_integral::value, ""); + static_assert(std::is_integral_v, ""); return STAmount(integer, false); } template static STAmount - amount(Integer integer, std::enable_if_t::value>* = 0) + amount(Integer integer, std::enable_if_t>* = 0) { - static_assert(std::is_integral::value, ""); + static_assert(std::is_integral_v, ""); if (integer < 0) return STAmount(-integer, true); return STAmount(integer, false); diff --git a/src/test/protocol/STAccount_test.cpp b/src/test/protocol/STAccount_test.cpp index 3b12605a92..eb356ecb8d 100644 --- a/src/test/protocol/STAccount_test.cpp +++ b/src/test/protocol/STAccount_test.cpp @@ -1,5 +1,12 @@ -#include +#include +#include +#include +#include #include +#include + +#include +#include namespace xrpl { diff --git a/src/test/protocol/STAmount_test.cpp b/src/test/protocol/STAmount_test.cpp index 92f30bbaa1..78ef9c2a8a 100644 --- a/src/test/protocol/STAmount_test.cpp +++ b/src/test/protocol/STAmount_test.cpp @@ -1,10 +1,30 @@ -#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { class STAmount_test : public beast::unit_test::suite diff --git a/src/test/protocol/STInteger_test.cpp b/src/test/protocol/STInteger_test.cpp index 4a0204d349..ccb3e726da 100644 --- a/src/test/protocol/STInteger_test.cpp +++ b/src/test/protocol/STInteger_test.cpp @@ -1,6 +1,7 @@ -#include +#include #include #include +#include #include #include diff --git a/src/test/protocol/STIssue_test.cpp b/src/test/protocol/STIssue_test.cpp index 2ffdb1d9af..41b8e27d7b 100644 --- a/src/test/protocol/STIssue_test.cpp +++ b/src/test/protocol/STIssue_test.cpp @@ -1,10 +1,17 @@ -#include -#include +#include +#include // IWYU pragma: keep + +#include +#include +#include +#include +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class STIssue_test : public beast::unit_test::suite { @@ -141,5 +148,4 @@ public: BEAST_DEFINE_TESTSUITE(STIssue, protocol, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/protocol/STNumber_test.cpp b/src/test/protocol/STNumber_test.cpp index d4e82eeef2..156f5b42aa 100644 --- a/src/test/protocol/STNumber_test.cpp +++ b/src/test/protocol/STNumber_test.cpp @@ -1,14 +1,20 @@ -#include +#include #include #include +#include #include #include #include #include +#include +#include +#include #include -#include #include +#include +#include +#include namespace xrpl { diff --git a/src/test/protocol/STObject_test.cpp b/src/test/protocol/STObject_test.cpp index 135c577fb4..d76446599c 100644 --- a/src/test/protocol/STObject_test.cpp +++ b/src/test/protocol/STObject_test.cpp @@ -1,4 +1,30 @@ -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -330,7 +356,7 @@ public: STObject st(sfGeneric); auto const v = ~st[~sf1Outer]; static_assert( - std::is_same, std::optional>::value, ""); + std::is_same_v, std::optional>, ""); } // UDT scalar fields @@ -405,7 +431,7 @@ public: BEAST_EXPECT(cst[sf][0] == 1); BEAST_EXPECT(cst[sf][1] == 2); static_assert( - std::is_same const&>::value, ""); + std::is_same_v const&>, ""); } // Default by reference field diff --git a/src/test/protocol/STParsedJSON_test.cpp b/src/test/protocol/STParsedJSON_test.cpp index 1c86a90348..75d3d74ddd 100644 --- a/src/test/protocol/STParsedJSON_test.cpp +++ b/src/test/protocol/STParsedJSON_test.cpp @@ -1,11 +1,27 @@ -#include -#include +#include + +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include -#include +#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -403,8 +419,7 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h128 = obj.object->getFieldH128(sfEmailHash); BEAST_EXPECT(h128.size() == 16); - bool const allZero = - std::all_of(h128.begin(), h128.end(), [](auto b) { return b == 0; }); + bool const allZero = std::ranges::all_of(h128, [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -499,8 +514,7 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h160 = obj.object->getFieldH160(sfTakerPaysCurrency); BEAST_EXPECT(h160.size() == 20); - bool const allZero = - std::all_of(h160.begin(), h160.end(), [](auto b) { return b == 0; }); + bool const allZero = std::ranges::all_of(h160, [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -588,8 +602,7 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h192 = obj.object->getFieldH192(sfMPTokenIssuanceID); BEAST_EXPECT(h192.size() == 24); - bool const allZero = - std::all_of(h192.begin(), h192.end(), [](auto b) { return b == 0; }); + bool const allZero = std::ranges::all_of(h192, [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -690,8 +703,7 @@ class STParsedJSON_test : public beast::unit_test::suite // NOLINTNEXTLINE(bugprone-unchecked-optional-access) auto const& h256 = obj.object->getFieldH256(sfLedgerHash); BEAST_EXPECT(h256.size() == 32); - bool const allZero = - std::all_of(h256.begin(), h256.end(), [](auto b) { return b == 0; }); + bool const allZero = std::ranges::all_of(h256, [](auto b) { return b == 0; }); BEAST_EXPECT(allZero); } @@ -2130,10 +2142,10 @@ class STParsedJSON_test : public beast::unit_test::suite STParsedJSONObject const parsed("test", faultyJson); BEAST_EXPECT(!parsed.object); } - catch (std::runtime_error& e) + catch (std::runtime_error const& e) { std::string const what(e.what()); - unexpected(what.find("First level children of `Template`") != 0); + unexpected(!what.starts_with("First level children of `Template`")); } } } diff --git a/src/test/protocol/STTx_test.cpp b/src/test/protocol/STTx_test.cpp index 0804c89bd4..70074ed496 100644 --- a/src/test/protocol/STTx_test.cpp +++ b/src/test/protocol/STTx_test.cpp @@ -1,15 +1,34 @@ #include -#include -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include #include +#include +#include #include +#include +#include #include #include +#include +#include #include #include -#include +#include + +#include +#include +#include +#include #include +#include +#include +#include namespace xrpl { diff --git a/src/test/protocol/STValidation_test.cpp b/src/test/protocol/STValidation_test.cpp index e426af3e44..779e4d4c55 100644 --- a/src/test/protocol/STValidation_test.cpp +++ b/src/test/protocol/STValidation_test.cpp @@ -1,12 +1,21 @@ -#include +#include #include -#include +#include #include -#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include namespace xrpl { diff --git a/src/test/protocol/SecretKey_test.cpp b/src/test/protocol/SecretKey_test.cpp index 9072f5c0d9..7e71775988 100644 --- a/src/test/protocol/SecretKey_test.cpp +++ b/src/test/protocol/SecretKey_test.cpp @@ -1,13 +1,22 @@ #include -#include +#include +#include +#include #include #include +#include +#include #include #include #include +#include #include +#include +#include +#include +#include #include #include @@ -158,8 +167,7 @@ public: // swaps the smallest and largest elements in buffer std::iter_swap( - std::min_element(badData.begin(), badData.end()), - std::max_element(badData.begin(), badData.end())); + std::ranges::min_element(badData), std::ranges::max_element(badData)); // Wrong data: should fail BEAST_EXPECT(!verify(pk, makeSlice(badData), sig)); @@ -345,1149 +353,1149 @@ public: private: // clang-format off inline static TestKeyData const secp256k1TestVectors[] = { - {{0xDE,0xDC,0xE9,0xCE,0x67,0xB4,0x51,0xD8,0x52,0xFD,0x4E,0x84,0x6F,0xCD,0xE3,0x1C}, - {0x03,0x30,0xE7,0xFC,0x9D,0x56,0xBB,0x25,0xD6,0x89,0x3B,0xA3,0xF3,0x17,0xAE,0x5B, + {.seed={0xDE,0xDC,0xE9,0xCE,0x67,0xB4,0x51,0xD8,0x52,0xFD,0x4E,0x84,0x6F,0xCD,0xE3,0x1C}, + .pubkey={0x03,0x30,0xE7,0xFC,0x9D,0x56,0xBB,0x25,0xD6,0x89,0x3B,0xA3,0xF3,0x17,0xAE,0x5B, 0xCF,0x33,0xB3,0x29,0x1B,0xD6,0x3D,0xB3,0x26,0x54,0xA3,0x13,0x22,0x2F,0x7F,0xD0,0x20}, - {0x1A,0xCA,0xAE,0xDE,0xCE,0x40,0x5B,0x2A,0x95,0x82,0x12,0x62,0x9E,0x16,0xF2,0xEB, + .seckey={0x1A,0xCA,0xAE,0xDE,0xCE,0x40,0x5B,0x2A,0x95,0x82,0x12,0x62,0x9E,0x16,0xF2,0xEB, 0x46,0xB1,0x53,0xEE,0xE9,0x4C,0xDD,0x35,0x0F,0xDE,0xFF,0x52,0x79,0x55,0x25,0xB7}, - "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}, - {{0xF7,0x5C,0x48,0xFE,0xC4,0x6D,0x4D,0x64,0x92,0x8B,0x79,0x5F,0x3F,0xBA,0xBB,0xA0}, - {0x03,0xAF,0x53,0xE8,0x01,0x1E,0x85,0xB3,0x66,0x64,0xF1,0x71,0x08,0x90,0x50,0x1C, + .addr="rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}, + {.seed={0xF7,0x5C,0x48,0xFE,0xC4,0x6D,0x4D,0x64,0x92,0x8B,0x79,0x5F,0x3F,0xBA,0xBB,0xA0}, + .pubkey={0x03,0xAF,0x53,0xE8,0x01,0x1E,0x85,0xB3,0x66,0x64,0xF1,0x71,0x08,0x90,0x50,0x1C, 0x3E,0x86,0xFC,0x2C,0x66,0x58,0xC2,0xEE,0x83,0xCA,0x58,0x0D,0xC9,0x97,0x25,0x41,0xB1}, - {0x5B,0x8A,0xB0,0xE7,0xCD,0xAF,0x48,0x87,0x4D,0x5D,0x99,0x34,0xBF,0x3E,0x7B,0x2C, + .seckey={0x5B,0x8A,0xB0,0xE7,0xCD,0xAF,0x48,0x87,0x4D,0x5D,0x99,0x34,0xBF,0x3E,0x7B,0x2C, 0xB0,0x6B,0xC4,0xC7,0xEA,0xAA,0xF7,0x62,0x68,0x2E,0xD8,0xD0,0xA3,0x1E,0x3C,0x70}, - "r9ZERztesFu3ZBs7zsWTeCvBg14GQ9zWF7"}, - {{0x7A,0xEA,0x88,0xC1,0x48,0xA8,0xC4,0xA8,0x90,0x69,0xF9,0x8A,0x37,0x33,0x16,0x7B}, - {0x03,0x7A,0xD9,0x30,0xB3,0x1B,0x0F,0x81,0x03,0x6D,0x65,0xA6,0x2D,0x4E,0x11,0x31, + .addr="r9ZERztesFu3ZBs7zsWTeCvBg14GQ9zWF7"}, + {.seed={0x7A,0xEA,0x88,0xC1,0x48,0xA8,0xC4,0xA8,0x90,0x69,0xF9,0x8A,0x37,0x33,0x16,0x7B}, + .pubkey={0x03,0x7A,0xD9,0x30,0xB3,0x1B,0x0F,0x81,0x03,0x6D,0x65,0xA6,0x2D,0x4E,0x11,0x31, 0xEF,0x60,0x5F,0x73,0x8E,0x7D,0x7F,0x95,0x46,0x5B,0xBE,0xCB,0xCB,0xFF,0xA7,0x07,0x6E}, - {0x3D,0xDC,0x5F,0xE1,0x63,0x78,0xAE,0x85,0x03,0xE9,0x74,0x23,0x30,0x17,0x79,0x1C, + .seckey={0x3D,0xDC,0x5F,0xE1,0x63,0x78,0xAE,0x85,0x03,0xE9,0x74,0x23,0x30,0x17,0x79,0x1C, 0xC0,0x7C,0x10,0x77,0x65,0x3A,0xB7,0x23,0xC8,0xF6,0x5B,0x17,0xB9,0x98,0x0D,0xA1}, - "rfmZ1iAuSzB2gxjoJgBub6iJPCk92D7YfC"}, - {{0xE4,0x24,0x9B,0xFF,0x02,0xB7,0x66,0x91,0x99,0xA2,0x3F,0xAF,0x48,0x8C,0x17,0x9E}, - {0x02,0xEF,0x88,0x8E,0x93,0xB9,0xA8,0x50,0xFC,0x93,0xCF,0x00,0xF6,0xA9,0x3C,0x3C, + .addr="rfmZ1iAuSzB2gxjoJgBub6iJPCk92D7YfC"}, + {.seed={0xE4,0x24,0x9B,0xFF,0x02,0xB7,0x66,0x91,0x99,0xA2,0x3F,0xAF,0x48,0x8C,0x17,0x9E}, + .pubkey={0x02,0xEF,0x88,0x8E,0x93,0xB9,0xA8,0x50,0xFC,0x93,0xCF,0x00,0xF6,0xA9,0x3C,0x3C, 0xDE,0xF2,0x86,0x0D,0xBF,0x3A,0x4F,0x11,0xCD,0x0A,0xE8,0xE6,0x45,0x4D,0x20,0x95,0xE3}, - {0x84,0xBF,0xD9,0x22,0x68,0xCA,0x02,0x01,0x9C,0xE6,0xD9,0x35,0xEF,0xA9,0x94,0x4B, + .seckey={0x84,0xBF,0xD9,0x22,0x68,0xCA,0x02,0x01,0x9C,0xE6,0xD9,0x35,0xEF,0xA9,0x94,0x4B, 0xAE,0xC3,0x3E,0x23,0x41,0x34,0xDE,0xF4,0xF2,0xA8,0xE7,0x75,0x19,0xF3,0x42,0xBE}, - "rwm4pKGoRDHez72gumG7VZw5Fb9ah7o6K2"}, - {{0x04,0xC7,0x18,0x9B,0x62,0x72,0x94,0x39,0x81,0x6B,0x25,0x9C,0x4E,0x61,0x99,0xE1}, - {0x03,0x3E,0x4F,0xA3,0x7A,0x91,0xFC,0xCD,0x49,0xEF,0x91,0xB8,0x1D,0x34,0x1F,0x27, + .addr="rwm4pKGoRDHez72gumG7VZw5Fb9ah7o6K2"}, + {.seed={0x04,0xC7,0x18,0x9B,0x62,0x72,0x94,0x39,0x81,0x6B,0x25,0x9C,0x4E,0x61,0x99,0xE1}, + .pubkey={0x03,0x3E,0x4F,0xA3,0x7A,0x91,0xFC,0xCD,0x49,0xEF,0x91,0xB8,0x1D,0x34,0x1F,0x27, 0x24,0x1A,0x35,0xE9,0x13,0x05,0x55,0x33,0xE3,0x0C,0xA0,0x4D,0xA4,0x12,0x10,0x8F,0xCA}, - {0xA6,0x74,0x67,0x08,0x1E,0x99,0x33,0xC0,0x74,0x63,0x5C,0xEB,0x81,0x92,0x51,0xA5, + .seckey={0xA6,0x74,0x67,0x08,0x1E,0x99,0x33,0xC0,0x74,0x63,0x5C,0xEB,0x81,0x92,0x51,0xA5, 0x02,0x5E,0xD3,0x6E,0x88,0x87,0xDC,0xC1,0xD9,0xEB,0x8F,0x5B,0x52,0x08,0x74,0x81}, - "rHsP2baL7CdEjfJ89AYoWuocKBiPSikBnm"}, - {{0x3E,0x94,0x83,0x6F,0xA5,0x42,0x87,0xA9,0x5D,0xAD,0xB1,0xDF,0xAF,0x03,0xB4,0x28}, - {0x03,0x6F,0x9B,0xB1,0x59,0xB4,0x72,0x58,0x7E,0xCC,0xD2,0x24,0x35,0xC2,0xA8,0xB8, + .addr="rHsP2baL7CdEjfJ89AYoWuocKBiPSikBnm"}, + {.seed={0x3E,0x94,0x83,0x6F,0xA5,0x42,0x87,0xA9,0x5D,0xAD,0xB1,0xDF,0xAF,0x03,0xB4,0x28}, + .pubkey={0x03,0x6F,0x9B,0xB1,0x59,0xB4,0x72,0x58,0x7E,0xCC,0xD2,0x24,0x35,0xC2,0xA8,0xB8, 0xC4,0xF5,0xF5,0x13,0x33,0xFA,0xAE,0xC5,0xA8,0x35,0xAE,0x58,0x34,0x68,0x97,0x8B,0x4B}, - {0xD1,0xB4,0xE7,0xFE,0x29,0x19,0xF9,0x7E,0x41,0x3F,0x41,0x74,0x4D,0x29,0x1B,0x46, + .seckey={0xD1,0xB4,0xE7,0xFE,0x29,0x19,0xF9,0x7E,0x41,0x3F,0x41,0x74,0x4D,0x29,0x1B,0x46, 0x77,0xD0,0x32,0xC1,0x52,0x61,0xAC,0x94,0x2A,0x9E,0x93,0x03,0x06,0x52,0x7A,0xA1}, - "rpuqfwe4b4vP4ndmUBkgVXwyquPYAtGFku"}, - {{0x82,0xCB,0xB5,0x75,0xC7,0x39,0xC6,0xCC,0x29,0x9E,0xC0,0x1C,0x21,0x21,0xB6,0x10}, - {0x03,0x58,0x8B,0x56,0x6F,0x57,0x3A,0xC8,0x30,0xE5,0xEC,0xE4,0x03,0x08,0x59,0x52, + .addr="rpuqfwe4b4vP4ndmUBkgVXwyquPYAtGFku"}, + {.seed={0x82,0xCB,0xB5,0x75,0xC7,0x39,0xC6,0xCC,0x29,0x9E,0xC0,0x1C,0x21,0x21,0xB6,0x10}, + .pubkey={0x03,0x58,0x8B,0x56,0x6F,0x57,0x3A,0xC8,0x30,0xE5,0xEC,0xE4,0x03,0x08,0x59,0x52, 0x3E,0x44,0x7A,0x5A,0xCA,0x95,0x51,0xB7,0xA1,0x18,0xB9,0x1F,0x37,0x24,0xD2,0x40,0x83}, - {0x79,0x63,0x69,0x53,0xF7,0x64,0x9B,0x82,0x39,0x86,0x31,0xCC,0x47,0xC9,0x7B,0xD8, + .seckey={0x79,0x63,0x69,0x53,0xF7,0x64,0x9B,0x82,0x39,0x86,0x31,0xCC,0x47,0xC9,0x7B,0xD8, 0xA8,0x84,0x74,0x70,0xB7,0xF7,0xFA,0x0C,0x48,0x47,0x73,0xF1,0x74,0xB7,0xA2,0x47}, - "rp45fL94nhjferVtQWa9PkyydFQK6aZbEy"}, - {{0x8A,0x91,0x69,0x2D,0x45,0x00,0x23,0xC4,0x65,0x0C,0xC2,0x18,0x5D,0xCF,0x0F,0x68}, - {0x02,0x09,0x65,0xCE,0x5C,0x65,0x51,0x0C,0xC6,0xD7,0xAA,0x64,0x98,0xFD,0x0C,0xE1, + .addr="rp45fL94nhjferVtQWa9PkyydFQK6aZbEy"}, + {.seed={0x8A,0x91,0x69,0x2D,0x45,0x00,0x23,0xC4,0x65,0x0C,0xC2,0x18,0x5D,0xCF,0x0F,0x68}, + .pubkey={0x02,0x09,0x65,0xCE,0x5C,0x65,0x51,0x0C,0xC6,0xD7,0xAA,0x64,0x98,0xFD,0x0C,0xE1, 0xD8,0xE9,0xAD,0xCD,0x72,0x00,0x12,0xA5,0x1D,0x36,0x64,0x94,0xB1,0x97,0xF6,0xB9,0x9E}, - {0xE3,0x69,0x28,0xEE,0x12,0x60,0x08,0x8D,0x47,0x90,0xB3,0x99,0x25,0x47,0x79,0xF7, + .seckey={0xE3,0x69,0x28,0xEE,0x12,0x60,0x08,0x8D,0x47,0x90,0xB3,0x99,0x25,0x47,0x79,0xF7, 0x9B,0xDD,0x48,0xA9,0xEC,0xAD,0xC1,0x3B,0xF4,0x59,0x7B,0x69,0xAD,0xE1,0x6F,0x3E}, - "rfZCLUjvKSNmg5xMufb6fgq9VfP5biBDfU"}, - {{0x9F,0x65,0x49,0xF5,0x89,0xA4,0x72,0x3C,0xD9,0x46,0x77,0xE2,0xCF,0xCD,0x6E,0xB9}, - {0x03,0x95,0xE9,0x7A,0x55,0xCE,0x55,0x2E,0xC0,0xE3,0xC0,0x00,0xF6,0x05,0x53,0x63, + .addr="rfZCLUjvKSNmg5xMufb6fgq9VfP5biBDfU"}, + {.seed={0x9F,0x65,0x49,0xF5,0x89,0xA4,0x72,0x3C,0xD9,0x46,0x77,0xE2,0xCF,0xCD,0x6E,0xB9}, + .pubkey={0x03,0x95,0xE9,0x7A,0x55,0xCE,0x55,0x2E,0xC0,0xE3,0xC0,0x00,0xF6,0x05,0x53,0x63, 0x2A,0x3E,0xEA,0xF9,0x47,0x34,0x64,0x0B,0xAB,0xD1,0x54,0x3A,0xD0,0xA6,0x90,0x05,0xCD}, - {0xB4,0xB6,0xAB,0x76,0x33,0x75,0x98,0xE2,0xBF,0x43,0x07,0x92,0xEF,0x14,0x04,0x36, + .seckey={0xB4,0xB6,0xAB,0x76,0x33,0x75,0x98,0xE2,0xBF,0x43,0x07,0x92,0xEF,0x14,0x04,0x36, 0xE2,0x5C,0x43,0xAD,0xA0,0x6B,0xED,0x8C,0xA1,0xCC,0x80,0x7F,0xEA,0x3B,0xA5,0x26}, - "rpyTz8db86bWHi8E43GGexhRsLDwwMRta3"}, - {{0xCE,0xEC,0xF7,0xAF,0xBF,0x34,0xEF,0xA3,0x0D,0x5C,0xBA,0x33,0xFC,0x5A,0x9A,0x83}, - {0x02,0xD2,0x6D,0xF4,0xAC,0x1F,0x19,0x04,0xD2,0x05,0x85,0xDC,0x21,0x9F,0xB3,0xE4, + .addr="rpyTz8db86bWHi8E43GGexhRsLDwwMRta3"}, + {.seed={0xCE,0xEC,0xF7,0xAF,0xBF,0x34,0xEF,0xA3,0x0D,0x5C,0xBA,0x33,0xFC,0x5A,0x9A,0x83}, + .pubkey={0x02,0xD2,0x6D,0xF4,0xAC,0x1F,0x19,0x04,0xD2,0x05,0x85,0xDC,0x21,0x9F,0xB3,0xE4, 0x35,0xAC,0xAE,0x14,0x0B,0xCF,0x59,0xBE,0x5E,0x91,0xD8,0xDC,0xCD,0xB7,0x41,0xB2,0xF3}, - {0x23,0x89,0x7A,0x4F,0xDD,0xD2,0x40,0xF7,0x3D,0x2F,0xA3,0x26,0xC5,0xBC,0x41,0x06, + .seckey={0x23,0x89,0x7A,0x4F,0xDD,0xD2,0x40,0xF7,0x3D,0x2F,0xA3,0x26,0xC5,0xBC,0x41,0x06, 0xD8,0x22,0xEA,0x2A,0x01,0x1D,0x7E,0x8E,0xDF,0xE8,0xC6,0xFE,0xAA,0x76,0x41,0x41}, - "rfwGiMcsffk9TcwQu1KMYYvkPq4cdHdMik"}, - {{0xFC,0x0D,0x60,0xC9,0xBF,0x88,0x71,0x32,0x49,0x5A,0xD7,0x53,0xA5,0x19,0x97,0xED}, - {0x03,0x90,0x69,0x2D,0x7C,0x32,0x6C,0x90,0xA7,0xF3,0x2B,0xA6,0x71,0xDB,0x1E,0x28, + .addr="rfwGiMcsffk9TcwQu1KMYYvkPq4cdHdMik"}, + {.seed={0xFC,0x0D,0x60,0xC9,0xBF,0x88,0x71,0x32,0x49,0x5A,0xD7,0x53,0xA5,0x19,0x97,0xED}, + .pubkey={0x03,0x90,0x69,0x2D,0x7C,0x32,0x6C,0x90,0xA7,0xF3,0x2B,0xA6,0x71,0xDB,0x1E,0x28, 0x29,0xC9,0xBB,0xA6,0x8B,0x95,0x6E,0x88,0x19,0x13,0x59,0xEE,0x7E,0x85,0x67,0xCC,0x35}, - {0x39,0x43,0x83,0x14,0xC3,0x6E,0x24,0x7B,0x66,0x3F,0x65,0x60,0x5A,0xA5,0xE2,0x0C, + .seckey={0x39,0x43,0x83,0x14,0xC3,0x6E,0x24,0x7B,0x66,0x3F,0x65,0x60,0x5A,0xA5,0xE2,0x0C, 0x71,0xAF,0x8D,0xBD,0x9A,0x04,0xBB,0x1D,0x3B,0x67,0xFC,0x63,0x0A,0x3D,0x74,0xB6}, - "rNYp97qFzBZ5SLfXRtRMwFNxHrGR9cQyGL"}, - {{0x57,0x44,0x63,0xB8,0x56,0x88,0x76,0xC7,0x58,0x2B,0x91,0xC9,0x82,0xF6,0xE4,0x6F}, - {0x03,0x00,0xF4,0x84,0x0C,0xD6,0x00,0xD1,0xC7,0x54,0x5D,0x2D,0xBD,0x1B,0xB7,0x9A, + .addr="rNYp97qFzBZ5SLfXRtRMwFNxHrGR9cQyGL"}, + {.seed={0x57,0x44,0x63,0xB8,0x56,0x88,0x76,0xC7,0x58,0x2B,0x91,0xC9,0x82,0xF6,0xE4,0x6F}, + .pubkey={0x03,0x00,0xF4,0x84,0x0C,0xD6,0x00,0xD1,0xC7,0x54,0x5D,0x2D,0xBD,0x1B,0xB7,0x9A, 0xE3,0x55,0x58,0x67,0x98,0x2E,0x2D,0x38,0x7C,0x3B,0x9C,0xE8,0x1D,0x85,0x76,0x94,0x6E}, - {0x12,0x8F,0xA4,0xE0,0x64,0xA3,0x06,0x90,0x3E,0xC7,0x33,0x44,0xF6,0x10,0xB3,0x8B, + .seckey={0x12,0x8F,0xA4,0xE0,0x64,0xA3,0x06,0x90,0x3E,0xC7,0x33,0x44,0xF6,0x10,0xB3,0x8B, 0xA4,0xDA,0x20,0x97,0x6C,0x46,0x91,0x9B,0xA7,0x81,0x05,0xCA,0x1E,0x8E,0x58,0xE6}, - "r9U2Q5oiKTxp643G8gh6okmToJL6xVhqUn"}, - {{0x6D,0xDD,0x5C,0xC5,0x55,0x90,0x7E,0x56,0x08,0x7D,0x08,0xAA,0xD0,0xCD,0xEB,0x85}, - {0x02,0xA1,0x82,0x14,0xBF,0xF9,0xA9,0x64,0xE3,0x52,0x60,0x5F,0xA3,0x7C,0xB4,0xE4, + .addr="r9U2Q5oiKTxp643G8gh6okmToJL6xVhqUn"}, + {.seed={0x6D,0xDD,0x5C,0xC5,0x55,0x90,0x7E,0x56,0x08,0x7D,0x08,0xAA,0xD0,0xCD,0xEB,0x85}, + .pubkey={0x02,0xA1,0x82,0x14,0xBF,0xF9,0xA9,0x64,0xE3,0x52,0x60,0x5F,0xA3,0x7C,0xB4,0xE4, 0x47,0x08,0xBE,0x9E,0xDF,0x3A,0xC7,0x9E,0x59,0xBC,0x09,0x7B,0x58,0x24,0xC8,0x43,0x78}, - {0x6E,0x46,0x58,0x1D,0x14,0x4D,0xA5,0x0A,0xEB,0xBE,0xD4,0xF5,0x24,0x9C,0x6E,0x7B, + .seckey={0x6E,0x46,0x58,0x1D,0x14,0x4D,0xA5,0x0A,0xEB,0xBE,0xD4,0xF5,0x24,0x9C,0x6E,0x7B, 0x63,0x00,0xA3,0xAB,0xFE,0x5B,0x64,0x23,0xE1,0x9A,0x31,0x82,0x8E,0xAD,0x03,0xFF}, - "raYyxUC2RFpNnoYcpd8u9yRcRUofg1VU1i"}, - {{0x21,0xE4,0xC8,0x8B,0x52,0x28,0x7A,0xF8,0x98,0x5C,0x86,0x20,0xB8,0xD6,0x12,0xA6}, - {0x03,0xBD,0x83,0x65,0x5D,0x79,0xDF,0x33,0xE8,0x47,0x28,0xA1,0xBC,0xD1,0x1E,0x9A, + .addr="raYyxUC2RFpNnoYcpd8u9yRcRUofg1VU1i"}, + {.seed={0x21,0xE4,0xC8,0x8B,0x52,0x28,0x7A,0xF8,0x98,0x5C,0x86,0x20,0xB8,0xD6,0x12,0xA6}, + .pubkey={0x03,0xBD,0x83,0x65,0x5D,0x79,0xDF,0x33,0xE8,0x47,0x28,0xA1,0xBC,0xD1,0x1E,0x9A, 0xD7,0x4E,0x03,0xDF,0x2E,0x77,0x12,0xA0,0x88,0xD1,0x90,0x4A,0x36,0xF1,0x0B,0xA5,0xC1}, - {0xED,0x14,0x67,0x13,0xDD,0x51,0xF0,0xF1,0x7F,0x9A,0x46,0xA3,0x2C,0x5E,0xA9,0x8A, + .seckey={0xED,0x14,0x67,0x13,0xDD,0x51,0xF0,0xF1,0x7F,0x9A,0x46,0xA3,0x2C,0x5E,0xA9,0x8A, 0xC6,0xF5,0xA8,0x1C,0x2F,0x41,0x7F,0x81,0x99,0x9B,0xFF,0x1C,0xBA,0x2A,0xF6,0x77}, - "raTGiNwu2Rrv33y1Ssv7BqhbRiyjPQLze4"}, - {{0x78,0x36,0xB1,0x6B,0x67,0x4D,0x8A,0xF1,0x2D,0xDC,0x09,0xF7,0x4D,0x56,0xAC,0x8A}, - {0x03,0x57,0xEE,0x1D,0x13,0x73,0x48,0xD5,0xA2,0x2C,0x9D,0x1F,0x31,0x25,0x4C,0x19, + .addr="raTGiNwu2Rrv33y1Ssv7BqhbRiyjPQLze4"}, + {.seed={0x78,0x36,0xB1,0x6B,0x67,0x4D,0x8A,0xF1,0x2D,0xDC,0x09,0xF7,0x4D,0x56,0xAC,0x8A}, + .pubkey={0x03,0x57,0xEE,0x1D,0x13,0x73,0x48,0xD5,0xA2,0x2C,0x9D,0x1F,0x31,0x25,0x4C,0x19, 0x5B,0x70,0xBE,0x48,0x08,0xCC,0xF0,0xF1,0xE6,0x39,0x98,0x69,0x81,0x65,0x8E,0xFB,0xEB}, - {0x5B,0x6E,0x55,0x4A,0x2D,0x42,0xDA,0x3E,0x9D,0x23,0x57,0xC2,0x69,0xD0,0x0D,0xDF, + .seckey={0x5B,0x6E,0x55,0x4A,0x2D,0x42,0xDA,0x3E,0x9D,0x23,0x57,0xC2,0x69,0xD0,0x0D,0xDF, 0xA8,0xFC,0x67,0x51,0x4F,0xE7,0xC4,0xE5,0xEB,0x36,0x90,0xF2,0x10,0x62,0xE9,0x02}, - "rJ9UHCYDkUrBrJK6Hr24BraygxKzpVG5LJ"}, - {{0x43,0x84,0x27,0x4F,0x79,0xE4,0xCF,0xBB,0x4B,0x10,0xFA,0x6C,0x1D,0xA9,0xFD,0xBD}, - {0x02,0x59,0xCE,0x86,0xBA,0xB6,0xF5,0x4E,0x6A,0xB8,0x83,0xD0,0x9C,0x05,0x98,0x8D, + .addr="rJ9UHCYDkUrBrJK6Hr24BraygxKzpVG5LJ"}, + {.seed={0x43,0x84,0x27,0x4F,0x79,0xE4,0xCF,0xBB,0x4B,0x10,0xFA,0x6C,0x1D,0xA9,0xFD,0xBD}, + .pubkey={0x02,0x59,0xCE,0x86,0xBA,0xB6,0xF5,0x4E,0x6A,0xB8,0x83,0xD0,0x9C,0x05,0x98,0x8D, 0x9E,0x8A,0x71,0x53,0x88,0x32,0xB5,0x0B,0xD4,0xDE,0x1E,0xFA,0x8B,0x13,0x50,0xF8,0xBC}, - {0x97,0x33,0xA7,0x37,0x8B,0x17,0x85,0x80,0x5B,0x16,0x3A,0x72,0xA0,0x13,0x2E,0xFE, + .seckey={0x97,0x33,0xA7,0x37,0x8B,0x17,0x85,0x80,0x5B,0x16,0x3A,0x72,0xA0,0x13,0x2E,0xFE, 0xF6,0x52,0x57,0x35,0x39,0x5F,0x4F,0xE8,0x3C,0xC0,0x3C,0x61,0x63,0xA3,0xA3,0x86}, - "r37FSSzFWe2FtR6kYfKdPeeZ8i6NZ8uDBU"}, - {{0x90,0x6F,0xF5,0xDF,0xA6,0x06,0xE2,0x6D,0xED,0x61,0xC5,0xFE,0x41,0x6F,0xAA,0x09}, - {0x03,0x71,0x70,0x38,0x45,0x72,0x99,0x33,0xA2,0xAB,0xF8,0x4C,0x51,0x82,0x9E,0x34, + .addr="r37FSSzFWe2FtR6kYfKdPeeZ8i6NZ8uDBU"}, + {.seed={0x90,0x6F,0xF5,0xDF,0xA6,0x06,0xE2,0x6D,0xED,0x61,0xC5,0xFE,0x41,0x6F,0xAA,0x09}, + .pubkey={0x03,0x71,0x70,0x38,0x45,0x72,0x99,0x33,0xA2,0xAB,0xF8,0x4C,0x51,0x82,0x9E,0x34, 0x00,0xA7,0x41,0x0F,0x9E,0x57,0x66,0x5C,0x65,0xD1,0xD6,0x07,0xF2,0xD1,0x67,0x52,0x2F}, - {0x55,0x80,0x14,0xCD,0xC8,0x08,0xB5,0x9A,0x6A,0x32,0x2D,0x61,0xB9,0xEA,0xE1,0x7B, + .seckey={0x55,0x80,0x14,0xCD,0xC8,0x08,0xB5,0x9A,0x6A,0x32,0x2D,0x61,0xB9,0xEA,0xE1,0x7B, 0xDD,0x73,0xCD,0x52,0x4A,0xDA,0x8B,0x7C,0x55,0x2E,0xAE,0x90,0xDB,0x65,0x18,0x9B}, - "rK5rBKf8uDunrTTNY7GWmB3Jnasg2CEuiE"}, - {{0x85,0x3C,0x3B,0xE4,0xD9,0x9F,0xF2,0x03,0x3D,0xF0,0xE2,0x35,0x40,0xA4,0xF3,0x7D}, - {0x03,0x44,0xB4,0x5E,0x37,0xCD,0xD1,0x73,0x88,0xD6,0xE0,0x20,0xED,0x0A,0x52,0x8D, + .addr="rK5rBKf8uDunrTTNY7GWmB3Jnasg2CEuiE"}, + {.seed={0x85,0x3C,0x3B,0xE4,0xD9,0x9F,0xF2,0x03,0x3D,0xF0,0xE2,0x35,0x40,0xA4,0xF3,0x7D}, + .pubkey={0x03,0x44,0xB4,0x5E,0x37,0xCD,0xD1,0x73,0x88,0xD6,0xE0,0x20,0xED,0x0A,0x52,0x8D, 0x94,0x0D,0x43,0x84,0x86,0x36,0x3B,0x5D,0x1D,0x6A,0xB0,0x3C,0x5E,0xDD,0xEC,0x1D,0x1E}, - {0xD4,0x88,0x5F,0x26,0xE9,0xB9,0x8F,0x46,0xAA,0x3C,0xD2,0x26,0x6A,0x57,0x32,0x48, + .seckey={0xD4,0x88,0x5F,0x26,0xE9,0xB9,0x8F,0x46,0xAA,0x3C,0xD2,0x26,0x6A,0x57,0x32,0x48, 0x61,0x03,0xD5,0x7B,0x5F,0x52,0xB3,0x49,0xC1,0xAA,0x4F,0xF6,0xDC,0x63,0xEE,0x28}, - "rB9xKaxuHXDxe3fYQSoTGTBN5LkMsXp7vB"}, - {{0x15,0x6F,0x19,0xDA,0xC4,0x69,0x5A,0x47,0x9C,0x8F,0x2D,0x59,0x90,0xC7,0x7A,0x96}, - {0x03,0x51,0x5A,0xAA,0x83,0x0A,0xDA,0xB9,0xD8,0xA5,0x1C,0x35,0x41,0xD0,0x0A,0xF8, + .addr="rB9xKaxuHXDxe3fYQSoTGTBN5LkMsXp7vB"}, + {.seed={0x15,0x6F,0x19,0xDA,0xC4,0x69,0x5A,0x47,0x9C,0x8F,0x2D,0x59,0x90,0xC7,0x7A,0x96}, + .pubkey={0x03,0x51,0x5A,0xAA,0x83,0x0A,0xDA,0xB9,0xD8,0xA5,0x1C,0x35,0x41,0xD0,0x0A,0xF8, 0x25,0x05,0x15,0x0A,0xD4,0x5B,0x9D,0x0A,0x66,0x79,0x97,0xCE,0x01,0x88,0xE7,0x57,0xA8}, - {0xEE,0x73,0xBC,0xC7,0xEA,0x9E,0x93,0x2D,0xA1,0x7A,0x28,0xD6,0x7E,0x2A,0x85,0x99, + .seckey={0xEE,0x73,0xBC,0xC7,0xEA,0x9E,0x93,0x2D,0xA1,0x7A,0x28,0xD6,0x7E,0x2A,0x85,0x99, 0x97,0x6D,0x18,0x29,0x60,0x1F,0x7D,0x17,0xD8,0x6D,0x68,0x53,0x82,0x2E,0x4D,0xF2}, - "rM83yYQQN6aLjfobwvfYMR2r6xo9bE66ZY"}, - {{0x95,0xCF,0x0F,0x72,0xD7,0xF6,0x87,0x8A,0x76,0xE6,0xF8,0x4E,0x96,0xFD,0x34,0x2B}, - {0x03,0xA7,0x5E,0x58,0x08,0xAB,0x79,0x48,0x34,0xAF,0xBB,0x7B,0x7C,0x14,0x3A,0x48, + .addr="rM83yYQQN6aLjfobwvfYMR2r6xo9bE66ZY"}, + {.seed={0x95,0xCF,0x0F,0x72,0xD7,0xF6,0x87,0x8A,0x76,0xE6,0xF8,0x4E,0x96,0xFD,0x34,0x2B}, + .pubkey={0x03,0xA7,0x5E,0x58,0x08,0xAB,0x79,0x48,0x34,0xAF,0xBB,0x7B,0x7C,0x14,0x3A,0x48, 0x83,0x53,0xF5,0x03,0xB2,0xFC,0x79,0x20,0x05,0x3E,0xDA,0x92,0xE3,0xFB,0xFE,0x53,0xA8}, - {0x43,0x6F,0x3A,0x67,0xC1,0xE4,0x2F,0x61,0x05,0x20,0x46,0x7D,0xB1,0x94,0x2B,0xDB, + .seckey={0x43,0x6F,0x3A,0x67,0xC1,0xE4,0x2F,0x61,0x05,0x20,0x46,0x7D,0xB1,0x94,0x2B,0xDB, 0xE9,0xD2,0xD6,0xE1,0x14,0x13,0xEB,0xE1,0x9B,0x87,0x63,0xBC,0x7C,0xCF,0x27,0x57}, - "rJ3MkKKsTAxzgW87YTZ6T5kauftDAa21hn"}, - {{0x27,0x8E,0x7E,0x47,0x39,0x7D,0xCC,0xF5,0x4B,0xBF,0x52,0x79,0xD8,0x5B,0x60,0x52}, - {0x02,0xA9,0x07,0xF0,0x09,0xFD,0x99,0xB5,0x9E,0x8C,0x90,0x46,0x99,0x59,0xCF,0xA9, + .addr="rJ3MkKKsTAxzgW87YTZ6T5kauftDAa21hn"}, + {.seed={0x27,0x8E,0x7E,0x47,0x39,0x7D,0xCC,0xF5,0x4B,0xBF,0x52,0x79,0xD8,0x5B,0x60,0x52}, + .pubkey={0x02,0xA9,0x07,0xF0,0x09,0xFD,0x99,0xB5,0x9E,0x8C,0x90,0x46,0x99,0x59,0xCF,0xA9, 0xEE,0xB8,0xE6,0x9F,0x66,0x8C,0xE3,0x21,0x15,0xAE,0x48,0x8F,0x37,0xDA,0x4B,0x3D,0xB5}, - {0x71,0xD8,0x4B,0x78,0x69,0x6B,0x9E,0x93,0x97,0xDB,0x07,0xB2,0x3D,0x4C,0x4B,0x6D, + .seckey={0x71,0xD8,0x4B,0x78,0x69,0x6B,0x9E,0x93,0x97,0xDB,0x07,0xB2,0x3D,0x4C,0x4B,0x6D, 0x7C,0x0B,0x87,0x9D,0x18,0xB5,0x45,0x61,0x27,0xF4,0x78,0x42,0xD8,0xE7,0x20,0xB5}, - "rMMn8XqJvtmn2CN3E19vvjA3Y8GLWdgwi"}, - {{0x92,0xF0,0x1F,0xC7,0x8F,0x22,0x58,0xB1,0xA9,0x70,0xF4,0xA2,0xDD,0xDD,0xD3,0xA1}, - {0x03,0x0C,0x28,0x5D,0x66,0x77,0x0A,0xFD,0x42,0xAB,0xAE,0x15,0x18,0x74,0x7A,0x64, + .addr="rMMn8XqJvtmn2CN3E19vvjA3Y8GLWdgwi"}, + {.seed={0x92,0xF0,0x1F,0xC7,0x8F,0x22,0x58,0xB1,0xA9,0x70,0xF4,0xA2,0xDD,0xDD,0xD3,0xA1}, + .pubkey={0x03,0x0C,0x28,0x5D,0x66,0x77,0x0A,0xFD,0x42,0xAB,0xAE,0x15,0x18,0x74,0x7A,0x64, 0x33,0xB7,0xD5,0x87,0x7A,0x92,0x66,0x78,0x05,0x78,0x2C,0x36,0xDD,0xEA,0x9A,0xF3,0x8F}, - {0x44,0xC0,0x46,0xE7,0x1D,0x7E,0x99,0xAE,0x70,0xDE,0x9B,0x97,0x1A,0x48,0xCA,0xB4, + .seckey={0x44,0xC0,0x46,0xE7,0x1D,0x7E,0x99,0xAE,0x70,0xDE,0x9B,0x97,0x1A,0x48,0xCA,0xB4, 0x26,0x06,0xB4,0xD7,0x81,0xE8,0x84,0x40,0x9B,0x8C,0xC6,0xB3,0x14,0xE1,0xA5,0xCA}, - "rMRLSmwj5SPYidP7UG6vLVmZm849vj9Boy"}, - {{0x4D,0x0A,0x15,0x15,0x19,0x8D,0xAC,0xF3,0xAA,0x74,0x70,0x06,0x24,0x75,0xE1,0x71}, - {0x02,0x3F,0xBA,0x9F,0xF3,0x33,0x71,0x35,0x12,0xE9,0xA3,0x16,0xA8,0x7A,0xBE,0x5E, + .addr="rMRLSmwj5SPYidP7UG6vLVmZm849vj9Boy"}, + {.seed={0x4D,0x0A,0x15,0x15,0x19,0x8D,0xAC,0xF3,0xAA,0x74,0x70,0x06,0x24,0x75,0xE1,0x71}, + .pubkey={0x02,0x3F,0xBA,0x9F,0xF3,0x33,0x71,0x35,0x12,0xE9,0xA3,0x16,0xA8,0x7A,0xBE,0x5E, 0x22,0x2D,0xE0,0xE1,0x82,0xE1,0x8F,0x4B,0xE8,0x05,0xC7,0xE4,0xE1,0x95,0xA8,0x58,0x27}, - {0x62,0x76,0x1B,0xC1,0xD8,0x79,0x83,0xC7,0xA5,0x49,0x1E,0x7F,0x4A,0x0F,0x6C,0x04, + .seckey={0x62,0x76,0x1B,0xC1,0xD8,0x79,0x83,0xC7,0xA5,0x49,0x1E,0x7F,0x4A,0x0F,0x6C,0x04, 0xC1,0xB4,0x36,0x17,0x31,0x99,0xFF,0x78,0x07,0x36,0xD4,0x58,0x3F,0xA9,0x24,0xA5}, - "rEwu1cBZ37WaTF6aJDMQKTKxBBok4bkeW9"}, - {{0xF9,0x3E,0x0D,0xFE,0xEB,0xFC,0x30,0x3B,0x2F,0x13,0x7C,0xF8,0xCF,0x9F,0x25,0x3B}, - {0x03,0x1B,0x7E,0xEC,0x18,0x2A,0xEA,0x64,0xB9,0x1F,0xF6,0x13,0x31,0x28,0x6F,0xC9, + .addr="rEwu1cBZ37WaTF6aJDMQKTKxBBok4bkeW9"}, + {.seed={0xF9,0x3E,0x0D,0xFE,0xEB,0xFC,0x30,0x3B,0x2F,0x13,0x7C,0xF8,0xCF,0x9F,0x25,0x3B}, + .pubkey={0x03,0x1B,0x7E,0xEC,0x18,0x2A,0xEA,0x64,0xB9,0x1F,0xF6,0x13,0x31,0x28,0x6F,0xC9, 0xC5,0xFA,0x62,0x91,0x8F,0x06,0xFF,0x04,0x84,0xF2,0x2C,0x7D,0x9B,0x11,0xBB,0xA2,0xC4}, - {0x4D,0x79,0xBC,0x7F,0x52,0x29,0x8C,0xEB,0x31,0x37,0xE9,0x83,0x31,0x28,0x8B,0x62, + .seckey={0x4D,0x79,0xBC,0x7F,0x52,0x29,0x8C,0xEB,0x31,0x37,0xE9,0x83,0x31,0x28,0x8B,0x62, 0xDE,0xB6,0x4C,0xCD,0x41,0x28,0x4B,0x59,0xBF,0xA7,0x3F,0xFA,0x99,0xE5,0x95,0xB4}, - "raaSAqSnLbGGyfpxgk7jNfyc3BwVdv6YFS"}, - {{0xFC,0xB2,0x17,0xA7,0xD4,0xE6,0x6A,0x5C,0x27,0x9F,0xED,0xFF,0x22,0xAD,0x35,0x8A}, - {0x02,0xB9,0xCE,0x1E,0xC9,0x4F,0x42,0x20,0x6E,0xCD,0xC0,0x11,0x65,0xAE,0xC9,0x28, + .addr="raaSAqSnLbGGyfpxgk7jNfyc3BwVdv6YFS"}, + {.seed={0xFC,0xB2,0x17,0xA7,0xD4,0xE6,0x6A,0x5C,0x27,0x9F,0xED,0xFF,0x22,0xAD,0x35,0x8A}, + .pubkey={0x02,0xB9,0xCE,0x1E,0xC9,0x4F,0x42,0x20,0x6E,0xCD,0xC0,0x11,0x65,0xAE,0xC9,0x28, 0x65,0xAB,0x84,0x97,0x59,0x6F,0x03,0x37,0xCA,0xEF,0xE1,0xF1,0x86,0xA5,0x6B,0xF9,0x24}, - {0x95,0x2E,0xBD,0xC1,0x1E,0xCB,0x7C,0x67,0xE6,0x90,0xF7,0x9D,0x7B,0xB9,0x72,0x3C, + .seckey={0x95,0x2E,0xBD,0xC1,0x1E,0xCB,0x7C,0x67,0xE6,0x90,0xF7,0x9D,0x7B,0xB9,0x72,0x3C, 0xCE,0x84,0xD6,0x0C,0x37,0x23,0xDE,0x71,0x66,0x9E,0xD8,0xF5,0xCA,0x7D,0xE5,0x60}, - "raCkMBRoTrd41BuoAQq6f54E8iA97Fgwiq"}, - {{0x20,0xE6,0xD1,0xE2,0x10,0x0D,0xF4,0x2C,0x39,0x81,0x03,0x61,0xEB,0x54,0xFA,0x6B}, - {0x02,0x51,0x6D,0xF5,0x75,0xF9,0x9E,0x61,0xB4,0xBE,0x78,0xFD,0xCC,0x7D,0x2E,0x53, + .addr="raCkMBRoTrd41BuoAQq6f54E8iA97Fgwiq"}, + {.seed={0x20,0xE6,0xD1,0xE2,0x10,0x0D,0xF4,0x2C,0x39,0x81,0x03,0x61,0xEB,0x54,0xFA,0x6B}, + .pubkey={0x02,0x51,0x6D,0xF5,0x75,0xF9,0x9E,0x61,0xB4,0xBE,0x78,0xFD,0xCC,0x7D,0x2E,0x53, 0x9E,0x3A,0x59,0xD4,0x6B,0x2E,0xA9,0xEA,0x90,0x2F,0x5C,0xBE,0x3C,0xC3,0xA1,0x71,0xA9}, - {0x4F,0x50,0xD3,0x78,0x7F,0x50,0x4D,0x4E,0xCF,0xD8,0xAE,0x40,0xD8,0xA0,0xB1,0xBE, + .seckey={0x4F,0x50,0xD3,0x78,0x7F,0x50,0x4D,0x4E,0xCF,0xD8,0xAE,0x40,0xD8,0xA0,0xB1,0xBE, 0x92,0x2E,0xD1,0x0F,0x1B,0x26,0x8A,0x97,0xF3,0x36,0xB2,0x1D,0xCB,0x9F,0x87,0x92}, - "rnqPbY4BaFVNrbt2YwLQUSwxk7CPRJChf2"}, - {{0x63,0x09,0x81,0x8C,0xB7,0xE1,0xFC,0x55,0x77,0xBE,0xC7,0xDE,0x6C,0x5A,0x2B,0x73}, - {0x03,0x64,0x7B,0x2F,0xF7,0xD8,0xC0,0x56,0xFC,0x19,0x0F,0xF1,0x5B,0x6F,0x51,0x53, + .addr="rnqPbY4BaFVNrbt2YwLQUSwxk7CPRJChf2"}, + {.seed={0x63,0x09,0x81,0x8C,0xB7,0xE1,0xFC,0x55,0x77,0xBE,0xC7,0xDE,0x6C,0x5A,0x2B,0x73}, + .pubkey={0x03,0x64,0x7B,0x2F,0xF7,0xD8,0xC0,0x56,0xFC,0x19,0x0F,0xF1,0x5B,0x6F,0x51,0x53, 0x00,0x1F,0xF7,0x9C,0x44,0x98,0xD7,0x34,0x72,0x21,0x89,0xD3,0xE8,0x00,0xBC,0x01,0xDA}, - {0xC5,0x0C,0x5C,0x92,0xB4,0xFB,0x2D,0x6A,0xC0,0xC6,0xCA,0xC0,0xD5,0xB4,0x26,0xC5, + .seckey={0xC5,0x0C,0x5C,0x92,0xB4,0xFB,0x2D,0x6A,0xC0,0xC6,0xCA,0xC0,0xD5,0xB4,0x26,0xC5, 0x03,0xAE,0xE7,0x72,0xEA,0xF1,0x71,0x3C,0xDC,0xE4,0xE4,0x78,0xFF,0x28,0x22,0xAF}, - "rsBwJKLppzK5XK6WscKXW96NT4ajjYN4oV"}, - {{0xBE,0x60,0x25,0x4D,0xB3,0xED,0xDE,0xE2,0x47,0x69,0x25,0x83,0x80,0xA6,0xF7,0x94}, - {0x02,0xD8,0x4C,0x88,0xBF,0x11,0x7E,0x9E,0xFB,0x30,0xC9,0x63,0x08,0x87,0x04,0x9A, + .addr="rsBwJKLppzK5XK6WscKXW96NT4ajjYN4oV"}, + {.seed={0xBE,0x60,0x25,0x4D,0xB3,0xED,0xDE,0xE2,0x47,0x69,0x25,0x83,0x80,0xA6,0xF7,0x94}, + .pubkey={0x02,0xD8,0x4C,0x88,0xBF,0x11,0x7E,0x9E,0xFB,0x30,0xC9,0x63,0x08,0x87,0x04,0x9A, 0xF2,0xB2,0x33,0x52,0xBC,0x77,0x81,0x3B,0x76,0x5B,0x56,0x0D,0xC5,0x49,0x21,0x20,0xE3}, - {0xAC,0x21,0xC4,0x05,0xED,0x57,0x17,0xB0,0xB7,0x20,0x6C,0x0A,0x59,0x1C,0x6A,0x32, + .seckey={0xAC,0x21,0xC4,0x05,0xED,0x57,0x17,0xB0,0xB7,0x20,0x6C,0x0A,0x59,0x1C,0x6A,0x32, 0xCF,0xD1,0x61,0xC2,0x18,0x2D,0xE4,0x24,0x88,0xA0,0xE2,0xE9,0xC5,0x7E,0x72,0xDB}, - "rGh8eA3PAbpXF2i4YuWdJGknvXxjLs7UFn"}, - {{0x92,0x9A,0x69,0xD1,0xA4,0x72,0x50,0xA4,0x40,0x58,0x00,0xB6,0x93,0xC4,0x0F,0x65}, - {0x03,0xB4,0xCE,0x74,0x68,0x26,0x64,0x2B,0xD9,0x2F,0x7E,0xC0,0xB3,0x6A,0x25,0xAA, + .addr="rGh8eA3PAbpXF2i4YuWdJGknvXxjLs7UFn"}, + {.seed={0x92,0x9A,0x69,0xD1,0xA4,0x72,0x50,0xA4,0x40,0x58,0x00,0xB6,0x93,0xC4,0x0F,0x65}, + .pubkey={0x03,0xB4,0xCE,0x74,0x68,0x26,0x64,0x2B,0xD9,0x2F,0x7E,0xC0,0xB3,0x6A,0x25,0xAA, 0xA8,0x72,0xE0,0x91,0x2A,0x2F,0x09,0x49,0x6B,0x5D,0x08,0xDD,0x0D,0xC3,0x29,0x7A,0xEA}, - {0x3D,0x6A,0x38,0x3A,0xCC,0x5D,0x22,0xD9,0x44,0xD2,0x84,0xE7,0xA2,0x73,0x34,0xE4, + .seckey={0x3D,0x6A,0x38,0x3A,0xCC,0x5D,0x22,0xD9,0x44,0xD2,0x84,0xE7,0xA2,0x73,0x34,0xE4, 0xE3,0x01,0x2A,0x0B,0x0C,0x5B,0x7E,0xAA,0x64,0xD0,0x41,0xE4,0x1E,0xE3,0x1D,0x38}, - "rPWb2cxWuXV39hFBJgEup4enkiBXDMMuPs"}, - {{0x72,0xF2,0x97,0x35,0x2E,0x8F,0x35,0xB3,0x4D,0x2E,0x6B,0xC7,0x3A,0x42,0xDD,0xC9}, - {0x02,0xB5,0x28,0xB7,0x7B,0x4E,0xA1,0xFC,0xC5,0x0D,0x00,0x72,0xD9,0x0B,0x69,0x46, + .addr="rPWb2cxWuXV39hFBJgEup4enkiBXDMMuPs"}, + {.seed={0x72,0xF2,0x97,0x35,0x2E,0x8F,0x35,0xB3,0x4D,0x2E,0x6B,0xC7,0x3A,0x42,0xDD,0xC9}, + .pubkey={0x02,0xB5,0x28,0xB7,0x7B,0x4E,0xA1,0xFC,0xC5,0x0D,0x00,0x72,0xD9,0x0B,0x69,0x46, 0x58,0x60,0xD6,0xD1,0x81,0xC1,0x1B,0xC4,0x8D,0xDD,0x01,0xAA,0x35,0x53,0x85,0x6E,0xBA}, - {0xA9,0x21,0xF9,0x54,0xF4,0xF7,0x78,0xA6,0xC9,0x78,0x90,0x46,0xED,0x12,0xCC,0xBA, + .seckey={0xA9,0x21,0xF9,0x54,0xF4,0xF7,0x78,0xA6,0xC9,0x78,0x90,0x46,0xED,0x12,0xCC,0xBA, 0x06,0x9C,0x79,0x71,0x8D,0x24,0xA0,0x33,0xC4,0x7B,0x91,0xDF,0x41,0xEC,0x17,0x00}, - "rMMikVEYA9b7cyA82F4Lezpccti8coi39u"}, - {{0xC8,0x55,0x71,0x45,0x38,0xC5,0xF7,0xAA,0xC4,0x62,0x05,0xDC,0xC5,0x4E,0x49,0xCC}, - {0x02,0xBB,0xD4,0x85,0x34,0x2E,0x89,0xEA,0x33,0x31,0xE7,0xC8,0x1C,0xAE,0x1D,0xE6, + .addr="rMMikVEYA9b7cyA82F4Lezpccti8coi39u"}, + {.seed={0xC8,0x55,0x71,0x45,0x38,0xC5,0xF7,0xAA,0xC4,0x62,0x05,0xDC,0xC5,0x4E,0x49,0xCC}, + .pubkey={0x02,0xBB,0xD4,0x85,0x34,0x2E,0x89,0xEA,0x33,0x31,0xE7,0xC8,0x1C,0xAE,0x1D,0xE6, 0x64,0x7C,0xE5,0xBE,0x2A,0xA2,0xF8,0xB9,0xAD,0x6E,0x44,0x66,0xD4,0xD8,0x3E,0xDC,0x71}, - {0x52,0xB9,0x26,0x2D,0xED,0xD5,0x1D,0xB5,0xA0,0x48,0x1A,0x64,0x32,0xD2,0xAE,0x2E, + .seckey={0x52,0xB9,0x26,0x2D,0xED,0xD5,0x1D,0xB5,0xA0,0x48,0x1A,0x64,0x32,0xD2,0xAE,0x2E, 0x95,0x12,0x66,0x0F,0xF1,0x04,0x99,0xBD,0xE2,0xA9,0x4A,0x7D,0x42,0x64,0x84,0xC0}, - "r4cJGjZb7v6u9oAG5vZHbzAZeKjG3oubhT"}, - {{0xA7,0x8F,0xA2,0xA0,0x01,0xEE,0xD7,0xC9,0xE4,0x8D,0x36,0x1B,0xBA,0xDD,0xB3,0x8C}, - {0x02,0x0D,0xAA,0xC3,0x5A,0xB5,0xEB,0x1D,0x24,0xFA,0xE0,0x10,0x8D,0xBC,0xE8,0xEA, + .addr="r4cJGjZb7v6u9oAG5vZHbzAZeKjG3oubhT"}, + {.seed={0xA7,0x8F,0xA2,0xA0,0x01,0xEE,0xD7,0xC9,0xE4,0x8D,0x36,0x1B,0xBA,0xDD,0xB3,0x8C}, + .pubkey={0x02,0x0D,0xAA,0xC3,0x5A,0xB5,0xEB,0x1D,0x24,0xFA,0xE0,0x10,0x8D,0xBC,0xE8,0xEA, 0x37,0xD4,0xEE,0xA7,0x1C,0xFA,0xF2,0x0C,0x24,0xAF,0xA1,0xF9,0x92,0x1E,0xD4,0x9B,0x67}, - {0xE8,0xFA,0x0D,0xEC,0x05,0x35,0xE5,0x46,0x5D,0x75,0x24,0x93,0x84,0x48,0x9B,0x55, + .seckey={0xE8,0xFA,0x0D,0xEC,0x05,0x35,0xE5,0x46,0x5D,0x75,0x24,0x93,0x84,0x48,0x9B,0x55, 0x16,0xA5,0x1D,0x9F,0xBF,0xB8,0xC3,0x9A,0x91,0xA8,0x63,0xF8,0xED,0x2C,0xC9,0x41}, - "rLEDPnaJhjcDYzFvYufDTaJvXBokJka1Wf"}, - {{0x8D,0x3B,0xC5,0x48,0x77,0x83,0x56,0x43,0xB9,0xA7,0x6A,0xBE,0xBE,0x16,0xEA,0xE9}, - {0x03,0x54,0x44,0x02,0x4A,0x23,0x22,0x3A,0xCB,0xA9,0x71,0xD5,0x7C,0x74,0xF4,0x25, + .addr="rLEDPnaJhjcDYzFvYufDTaJvXBokJka1Wf"}, + {.seed={0x8D,0x3B,0xC5,0x48,0x77,0x83,0x56,0x43,0xB9,0xA7,0x6A,0xBE,0xBE,0x16,0xEA,0xE9}, + .pubkey={0x03,0x54,0x44,0x02,0x4A,0x23,0x22,0x3A,0xCB,0xA9,0x71,0xD5,0x7C,0x74,0xF4,0x25, 0x49,0x77,0x9D,0x33,0xDC,0x3A,0x8E,0x61,0xF8,0xE7,0x34,0x5E,0x25,0x5D,0x8B,0x81,0x40}, - {0xCB,0x6F,0x1C,0xA0,0x22,0x68,0x5F,0xF1,0x4E,0x0C,0xBF,0xB7,0x90,0x4F,0x3A,0x13, + .seckey={0xCB,0x6F,0x1C,0xA0,0x22,0x68,0x5F,0xF1,0x4E,0x0C,0xBF,0xB7,0x90,0x4F,0x3A,0x13, 0x17,0x5E,0xEF,0x08,0x47,0x44,0xD3,0xA3,0x0A,0x21,0x75,0x9B,0x8A,0xB7,0xDD,0x94}, - "rnxJTkqbxpbdoC1nPQvAfPDi8zpmsschsR"}, - {{0x27,0x1B,0xEA,0xD4,0xBF,0x66,0x55,0x06,0xCE,0x06,0x7D,0xA6,0xF8,0xAF,0xFC,0xF3}, - {0x03,0x01,0xC3,0xBE,0xA1,0xD1,0xA8,0x57,0x5E,0x29,0x85,0x56,0x93,0x81,0x12,0xD0, + .addr="rnxJTkqbxpbdoC1nPQvAfPDi8zpmsschsR"}, + {.seed={0x27,0x1B,0xEA,0xD4,0xBF,0x66,0x55,0x06,0xCE,0x06,0x7D,0xA6,0xF8,0xAF,0xFC,0xF3}, + .pubkey={0x03,0x01,0xC3,0xBE,0xA1,0xD1,0xA8,0x57,0x5E,0x29,0x85,0x56,0x93,0x81,0x12,0xD0, 0x41,0x7F,0x08,0x57,0xCC,0x7C,0x15,0xCC,0x75,0x22,0x5E,0x51,0xEC,0x3A,0x1A,0xAF,0x17}, - {0xA3,0x2A,0x64,0x81,0xC8,0xFA,0xFB,0xD0,0xF6,0x7C,0x80,0xD6,0xD4,0x30,0x98,0x4E, + .seckey={0xA3,0x2A,0x64,0x81,0xC8,0xFA,0xFB,0xD0,0xF6,0x7C,0x80,0xD6,0xD4,0x30,0x98,0x4E, 0xC1,0xDA,0x9E,0x63,0x8E,0xDE,0x69,0x3C,0xE1,0xFA,0xD0,0x63,0xCA,0xA8,0x62,0xD9}, - "rENrUzb4cctMQApEcDRLRNkwHbVencPYSn"}, - {{0x3B,0x1A,0x33,0x24,0x72,0xF4,0x1A,0xF6,0xDA,0x71,0x5F,0x02,0x0E,0x90,0x96,0xAE}, - {0x03,0x5C,0x34,0x4A,0x9B,0x4A,0xE2,0xFF,0x1B,0xF4,0x5C,0xDE,0x91,0x92,0xA2,0xF6, + .addr="rENrUzb4cctMQApEcDRLRNkwHbVencPYSn"}, + {.seed={0x3B,0x1A,0x33,0x24,0x72,0xF4,0x1A,0xF6,0xDA,0x71,0x5F,0x02,0x0E,0x90,0x96,0xAE}, + .pubkey={0x03,0x5C,0x34,0x4A,0x9B,0x4A,0xE2,0xFF,0x1B,0xF4,0x5C,0xDE,0x91,0x92,0xA2,0xF6, 0x23,0x27,0x0E,0x0B,0xC0,0x0C,0xB3,0x31,0x9B,0x18,0x33,0x11,0x1A,0x37,0x76,0xCE,0x57}, - {0x51,0xBD,0x74,0x0F,0xCD,0xEC,0x6D,0x96,0x36,0xB4,0xC8,0x53,0x11,0x00,0xD7,0xB5, + .seckey={0x51,0xBD,0x74,0x0F,0xCD,0xEC,0x6D,0x96,0x36,0xB4,0xC8,0x53,0x11,0x00,0xD7,0xB5, 0xD6,0xE9,0x9B,0xED,0x27,0x85,0x6C,0x48,0x22,0xE7,0x13,0x94,0xCD,0x85,0x7D,0xA9}, - "rraNgbPXeioSQyDw9gq1otuJURr4tkrVbR"}, - {{0xC6,0xC2,0x5B,0x54,0xB5,0xF3,0x67,0x54,0xE5,0xE1,0x3E,0x07,0xFB,0x8B,0x9A,0x12}, - {0x02,0x44,0x78,0x11,0x6A,0x52,0x0F,0x16,0xCD,0xD9,0x0E,0x73,0xFF,0xDD,0x73,0x50, + .addr="rraNgbPXeioSQyDw9gq1otuJURr4tkrVbR"}, + {.seed={0xC6,0xC2,0x5B,0x54,0xB5,0xF3,0x67,0x54,0xE5,0xE1,0x3E,0x07,0xFB,0x8B,0x9A,0x12}, + .pubkey={0x02,0x44,0x78,0x11,0x6A,0x52,0x0F,0x16,0xCD,0xD9,0x0E,0x73,0xFF,0xDD,0x73,0x50, 0xAE,0x40,0x3F,0x70,0xAF,0x1C,0xC6,0xB6,0xC9,0x07,0xE3,0x49,0x9D,0xF0,0x86,0xBB,0x01}, - {0x0C,0x13,0x9C,0x31,0x96,0xAB,0xCD,0x88,0x76,0x4F,0x75,0x28,0xCE,0xCC,0x17,0x4A, + .seckey={0x0C,0x13,0x9C,0x31,0x96,0xAB,0xCD,0x88,0x76,0x4F,0x75,0x28,0xCE,0xCC,0x17,0x4A, 0x02,0xA7,0x75,0xF5,0x9A,0xA7,0xA7,0x03,0x01,0x38,0xD4,0xFD,0x1D,0x2B,0x57,0x82}, - "rraDh9AGcTXLCZ6mX6v1vXT8kTpZ9A2E4o"}, - {{0x82,0x34,0xCA,0xC5,0x2D,0x12,0x9E,0xAC,0x87,0xA8,0xA3,0x96,0x25,0x24,0x7C,0x3C}, - {0x03,0xA0,0x24,0xFA,0xB8,0x0C,0x29,0x10,0x22,0xE8,0x3E,0xEE,0xD0,0xBB,0xA1,0x0C, + .addr="rraDh9AGcTXLCZ6mX6v1vXT8kTpZ9A2E4o"}, + {.seed={0x82,0x34,0xCA,0xC5,0x2D,0x12,0x9E,0xAC,0x87,0xA8,0xA3,0x96,0x25,0x24,0x7C,0x3C}, + .pubkey={0x03,0xA0,0x24,0xFA,0xB8,0x0C,0x29,0x10,0x22,0xE8,0x3E,0xEE,0xD0,0xBB,0xA1,0x0C, 0x58,0x2D,0x7F,0x74,0x99,0x87,0xE4,0x86,0x3D,0xCD,0xFD,0x4C,0x97,0xEB,0xEF,0xF1,0x88}, - {0x8C,0xA9,0x94,0xCD,0xF0,0x44,0xD1,0xE0,0x3C,0xC2,0xD8,0x81,0xE5,0x88,0x41,0xF8, + .seckey={0x8C,0xA9,0x94,0xCD,0xF0,0x44,0xD1,0xE0,0x3C,0xC2,0xD8,0x81,0xE5,0x88,0x41,0xF8, 0xD6,0x2F,0xDF,0x28,0x23,0x04,0x7A,0x9A,0x9D,0x1E,0x53,0x35,0x56,0x12,0xD1,0x9E}, - "rfHFE2euELEfCS1jSqSZbZct7K3rDYxJiA"}, - {{0x60,0x31,0x24,0xCB,0xD1,0xD6,0xFF,0xCB,0x2A,0xC0,0x07,0x0E,0xC2,0x34,0x84,0xE0}, - {0x03,0x08,0xE5,0x04,0xD0,0x1D,0xB2,0x94,0xB0,0xDB,0xD1,0xD6,0x9F,0xCF,0xE7,0x87, + .addr="rfHFE2euELEfCS1jSqSZbZct7K3rDYxJiA"}, + {.seed={0x60,0x31,0x24,0xCB,0xD1,0xD6,0xFF,0xCB,0x2A,0xC0,0x07,0x0E,0xC2,0x34,0x84,0xE0}, + .pubkey={0x03,0x08,0xE5,0x04,0xD0,0x1D,0xB2,0x94,0xB0,0xDB,0xD1,0xD6,0x9F,0xCF,0xE7,0x87, 0x70,0x83,0x81,0xF4,0x99,0x04,0xE9,0x51,0x12,0x6F,0xAF,0x27,0x51,0xF7,0x26,0xC0,0xCC}, - {0xD1,0x76,0x39,0xE8,0x2D,0xDB,0x35,0x67,0x24,0x19,0xFE,0x65,0x25,0x5B,0xE2,0x43, + .seckey={0xD1,0x76,0x39,0xE8,0x2D,0xDB,0x35,0x67,0x24,0x19,0xFE,0x65,0x25,0x5B,0xE2,0x43, 0x56,0x45,0xE0,0x20,0x69,0xCF,0xD9,0x32,0x21,0xB6,0xD0,0xEF,0x3A,0x3E,0xBD,0xD9}, - "rh1KG2QmCBwZiNJpVzJxw2mDR7bQz6QeeA"}, - {{0xF3,0x8C,0xD6,0x55,0x1D,0xCF,0x05,0xC1,0x09,0xFD,0x04,0xDD,0x06,0xCF,0x04,0xDB}, - {0x02,0xDA,0xBD,0xB1,0x5F,0x23,0xB9,0x23,0xD6,0x3D,0x6F,0xC3,0x96,0x68,0xB3,0xAC, + .addr="rh1KG2QmCBwZiNJpVzJxw2mDR7bQz6QeeA"}, + {.seed={0xF3,0x8C,0xD6,0x55,0x1D,0xCF,0x05,0xC1,0x09,0xFD,0x04,0xDD,0x06,0xCF,0x04,0xDB}, + .pubkey={0x02,0xDA,0xBD,0xB1,0x5F,0x23,0xB9,0x23,0xD6,0x3D,0x6F,0xC3,0x96,0x68,0xB3,0xAC, 0x77,0x58,0xA2,0x17,0x46,0xE9,0xE8,0xC3,0x91,0x91,0xCB,0xFA,0x89,0x43,0xB1,0x77,0xF4}, - {0x29,0x59,0xF0,0xAF,0x1B,0xDB,0x52,0x16,0xB8,0x26,0x42,0xEB,0x87,0x1C,0x90,0xBC, + .seckey={0x29,0x59,0xF0,0xAF,0x1B,0xDB,0x52,0x16,0xB8,0x26,0x42,0xEB,0x87,0x1C,0x90,0xBC, 0x96,0xCC,0xE9,0xE4,0x95,0xBF,0xE6,0x02,0x5D,0xDB,0x26,0x2E,0x1B,0x6D,0xC6,0x8E}, - "rfsgasx89kAvYvqhLmJt8Pn5JsHFnZadwm"}, - {{0x30,0x9F,0xC8,0x61,0x10,0x78,0xE1,0x2C,0x0B,0x3F,0x80,0x01,0x16,0x0D,0x00,0xB0}, - {0x02,0x23,0xE5,0x05,0xAD,0x30,0x89,0x32,0x66,0x12,0x0F,0xCD,0xDE,0xB8,0xFD,0xF9, + .addr="rfsgasx89kAvYvqhLmJt8Pn5JsHFnZadwm"}, + {.seed={0x30,0x9F,0xC8,0x61,0x10,0x78,0xE1,0x2C,0x0B,0x3F,0x80,0x01,0x16,0x0D,0x00,0xB0}, + .pubkey={0x02,0x23,0xE5,0x05,0xAD,0x30,0x89,0x32,0x66,0x12,0x0F,0xCD,0xDE,0xB8,0xFD,0xF9, 0xC2,0xFA,0xE0,0x6D,0xCE,0xBA,0x67,0x1B,0xEB,0xE1,0x25,0x85,0xD0,0xB6,0x23,0xE7,0xE0}, - {0xCE,0xD8,0xD9,0xEB,0x26,0xB5,0xD2,0x5A,0xD1,0xC7,0xDD,0x84,0xA3,0xD1,0x4F,0x07, + .seckey={0xCE,0xD8,0xD9,0xEB,0x26,0xB5,0xD2,0x5A,0xD1,0xC7,0xDD,0x84,0xA3,0xD1,0x4F,0x07, 0xB4,0xBC,0xE0,0x1A,0xA7,0xA1,0xBD,0xBD,0x41,0x7B,0x2C,0xF1,0x72,0xC3,0xD8,0x6E}, - "rMnU6UGDbmG4FNHPwY8KZaiY96fJWA8uqN"}, - {{0x03,0x09,0x10,0x63,0x99,0xE1,0x71,0x0E,0xE7,0xC2,0x4E,0xC2,0xD3,0x07,0x11,0x55}, - {0x03,0x4F,0x9D,0x3A,0x5B,0x58,0x4C,0x9F,0x1C,0xF6,0x8C,0x5D,0xB0,0x0E,0x3F,0xB9, + .addr="rMnU6UGDbmG4FNHPwY8KZaiY96fJWA8uqN"}, + {.seed={0x03,0x09,0x10,0x63,0x99,0xE1,0x71,0x0E,0xE7,0xC2,0x4E,0xC2,0xD3,0x07,0x11,0x55}, + .pubkey={0x03,0x4F,0x9D,0x3A,0x5B,0x58,0x4C,0x9F,0x1C,0xF6,0x8C,0x5D,0xB0,0x0E,0x3F,0xB9, 0xC9,0xDC,0x91,0xFF,0x4E,0x43,0xAA,0x6C,0x9E,0x49,0x77,0x83,0xDE,0x51,0x17,0x0F,0x96}, - {0x2E,0xF1,0x99,0x7B,0x37,0xCE,0x08,0x4B,0x04,0x8D,0x18,0x47,0x10,0x9B,0xA6,0xF8, + .seckey={0x2E,0xF1,0x99,0x7B,0x37,0xCE,0x08,0x4B,0x04,0x8D,0x18,0x47,0x10,0x9B,0xA6,0xF8, 0xA9,0xED,0x24,0x91,0x9A,0x3B,0x03,0xB2,0x32,0x09,0x0E,0x60,0x6B,0x08,0x63,0xD3}, - "rPDive23VFL8tBzwSsh5VfxYM69EhFYUmV"}, - {{0xC4,0x43,0x48,0xC9,0xFE,0x00,0xC4,0x9F,0x60,0xA0,0x6D,0xE5,0x67,0xB8,0x2C,0x1A}, - {0x02,0xF9,0x76,0xF3,0x6E,0x24,0x6D,0x65,0x79,0x76,0xE8,0x05,0xCF,0x65,0xEC,0x84, + .addr="rPDive23VFL8tBzwSsh5VfxYM69EhFYUmV"}, + {.seed={0xC4,0x43,0x48,0xC9,0xFE,0x00,0xC4,0x9F,0x60,0xA0,0x6D,0xE5,0x67,0xB8,0x2C,0x1A}, + .pubkey={0x02,0xF9,0x76,0xF3,0x6E,0x24,0x6D,0x65,0x79,0x76,0xE8,0x05,0xCF,0x65,0xEC,0x84, 0xC9,0x17,0x94,0x2C,0x04,0xBA,0x68,0x0B,0x42,0xB2,0x2C,0x6B,0x02,0x13,0xF8,0xD8,0x4E}, - {0x75,0x56,0xCF,0x71,0x82,0x3C,0xA4,0x93,0xEB,0x0B,0xD9,0xAE,0xEF,0x89,0xE4,0xE7, + .seckey={0x75,0x56,0xCF,0x71,0x82,0x3C,0xA4,0x93,0xEB,0x0B,0xD9,0xAE,0xEF,0x89,0xE4,0xE7, 0xCE,0x09,0x0F,0x50,0x67,0xD8,0x5D,0x95,0xA4,0x26,0x52,0x17,0x0B,0x1A,0xFF,0x18}, - "rNxe7tnN6gAjov9RERrbqPQmQZX5XDo5BJ"}, - {{0x44,0x7A,0x7B,0xEF,0x65,0x8D,0x23,0x7A,0x3E,0x43,0x33,0x49,0x63,0x66,0x97,0x5B}, - {0x03,0xC3,0xAD,0x1A,0xFF,0x40,0x0C,0x0B,0xCA,0x4C,0x30,0x45,0xB6,0x58,0xE3,0x7F, + .addr="rNxe7tnN6gAjov9RERrbqPQmQZX5XDo5BJ"}, + {.seed={0x44,0x7A,0x7B,0xEF,0x65,0x8D,0x23,0x7A,0x3E,0x43,0x33,0x49,0x63,0x66,0x97,0x5B}, + .pubkey={0x03,0xC3,0xAD,0x1A,0xFF,0x40,0x0C,0x0B,0xCA,0x4C,0x30,0x45,0xB6,0x58,0xE3,0x7F, 0x34,0xE7,0x6C,0x2A,0x80,0xD8,0xE0,0x99,0x29,0x83,0x39,0xED,0x3C,0x2C,0x0C,0x86,0x49}, - {0x6D,0x74,0x5A,0xDE,0xCC,0x4E,0xC9,0x80,0xFD,0x23,0x81,0xE3,0xE6,0x53,0x6F,0x97, + .seckey={0x6D,0x74,0x5A,0xDE,0xCC,0x4E,0xC9,0x80,0xFD,0x23,0x81,0xE3,0xE6,0x53,0x6F,0x97, 0x7E,0xD1,0x9B,0x28,0x41,0x61,0x6E,0xB8,0x4D,0x00,0x3D,0x97,0x6B,0x8C,0xE3,0xBD}, - "rMun2HwdoraftsxG3JoHXKYhBnCfwmWjyK"}, - {{0x34,0xE3,0x6E,0xC3,0x13,0x76,0xC4,0xB0,0x11,0x94,0x81,0x90,0x89,0xB1,0x24,0x92}, - {0x02,0x89,0x33,0x7D,0x4D,0x1D,0xD8,0x72,0x8F,0x8F,0xF4,0x1B,0xC6,0xDE,0x73,0x0F, + .addr="rMun2HwdoraftsxG3JoHXKYhBnCfwmWjyK"}, + {.seed={0x34,0xE3,0x6E,0xC3,0x13,0x76,0xC4,0xB0,0x11,0x94,0x81,0x90,0x89,0xB1,0x24,0x92}, + .pubkey={0x02,0x89,0x33,0x7D,0x4D,0x1D,0xD8,0x72,0x8F,0x8F,0xF4,0x1B,0xC6,0xDE,0x73,0x0F, 0x21,0x35,0x85,0x4D,0xA9,0x8E,0xA2,0x08,0xC3,0x2C,0xD2,0x50,0x7C,0x57,0x39,0xB4,0xBC}, - {0xCA,0x68,0x9E,0x9C,0x73,0x76,0x0F,0x91,0x37,0xC6,0x41,0x4C,0xBA,0x88,0x44,0xBD, + .seckey={0xCA,0x68,0x9E,0x9C,0x73,0x76,0x0F,0x91,0x37,0xC6,0x41,0x4C,0xBA,0x88,0x44,0xBD, 0x23,0x28,0xD8,0x5C,0x77,0x40,0x81,0x6B,0xB9,0xD8,0xF3,0x3A,0x0A,0x8F,0x0E,0xA0}, - "rEFR7fgCegzeKBSJYGgvxMVuUcw1QmYrqm"}, - {{0x60,0x08,0x22,0x98,0x97,0xAA,0xB6,0x7E,0x1B,0x24,0x63,0x50,0xA8,0x6A,0x5D,0x40}, - {0x03,0x61,0x72,0xB2,0x19,0x99,0xC8,0x7D,0xE4,0x4B,0x0B,0x93,0x42,0x4F,0x46,0xB0, + .addr="rEFR7fgCegzeKBSJYGgvxMVuUcw1QmYrqm"}, + {.seed={0x60,0x08,0x22,0x98,0x97,0xAA,0xB6,0x7E,0x1B,0x24,0x63,0x50,0xA8,0x6A,0x5D,0x40}, + .pubkey={0x03,0x61,0x72,0xB2,0x19,0x99,0xC8,0x7D,0xE4,0x4B,0x0B,0x93,0x42,0x4F,0x46,0xB0, 0x8B,0x3F,0x45,0xA0,0xEC,0xF3,0xE1,0xE4,0x14,0x87,0x99,0x6C,0x42,0xD1,0x2E,0x1C,0xC4}, - {0x5B,0x65,0x66,0x3C,0x23,0xF9,0x4A,0x85,0x26,0x02,0x7E,0x99,0xEC,0xDB,0xB9,0x0A, + .seckey={0x5B,0x65,0x66,0x3C,0x23,0xF9,0x4A,0x85,0x26,0x02,0x7E,0x99,0xEC,0xDB,0xB9,0x0A, 0x7F,0xA2,0xB5,0x6F,0x80,0x92,0x1A,0x2E,0xE9,0x74,0x80,0x0C,0xF5,0x32,0x31,0x72}, - "rMyoPQ4P86M5PYUd9y63muzy28dJ6oS9zk"}, - {{0xE3,0x47,0x3F,0xB0,0xDC,0x1D,0x26,0x01,0xCE,0xF4,0x36,0x7C,0xA6,0xCF,0x65,0xD7}, - {0x02,0x20,0x9F,0xF0,0xB0,0x08,0x49,0x66,0xF9,0xAA,0xD6,0x41,0xDD,0xC3,0x9C,0x7B, + .addr="rMyoPQ4P86M5PYUd9y63muzy28dJ6oS9zk"}, + {.seed={0xE3,0x47,0x3F,0xB0,0xDC,0x1D,0x26,0x01,0xCE,0xF4,0x36,0x7C,0xA6,0xCF,0x65,0xD7}, + .pubkey={0x02,0x20,0x9F,0xF0,0xB0,0x08,0x49,0x66,0xF9,0xAA,0xD6,0x41,0xDD,0xC3,0x9C,0x7B, 0xAE,0x6A,0xAF,0x87,0xF1,0x29,0xDC,0x19,0x7E,0x62,0xD1,0x15,0xF2,0x9D,0xE8,0xE2,0xF7}, - {0xDF,0xF6,0x37,0x4B,0xFC,0x42,0x2C,0x2C,0xF3,0x48,0xC2,0xF1,0xBF,0x4B,0x30,0xB1, + .seckey={0xDF,0xF6,0x37,0x4B,0xFC,0x42,0x2C,0x2C,0xF3,0x48,0xC2,0xF1,0xBF,0x4B,0x30,0xB1, 0x66,0x0E,0xCB,0xA9,0x0C,0xA9,0x32,0x77,0x71,0xB8,0x4A,0xB0,0xDC,0x24,0x69,0x86}, - "rKD4abu3RY94MdoZXG4SrUBxdkQcUJLKFq"}, - {{0xB1,0x25,0x1E,0xC0,0x39,0xFD,0xA9,0xD1,0x84,0x3A,0x08,0xE8,0x38,0xD6,0xE7,0xDA}, - {0x03,0xEC,0x13,0x79,0x7E,0x49,0xE2,0x01,0x11,0xB0,0x0E,0x04,0xCA,0xA9,0x05,0xE3, + .addr="rKD4abu3RY94MdoZXG4SrUBxdkQcUJLKFq"}, + {.seed={0xB1,0x25,0x1E,0xC0,0x39,0xFD,0xA9,0xD1,0x84,0x3A,0x08,0xE8,0x38,0xD6,0xE7,0xDA}, + .pubkey={0x03,0xEC,0x13,0x79,0x7E,0x49,0xE2,0x01,0x11,0xB0,0x0E,0x04,0xCA,0xA9,0x05,0xE3, 0x03,0xF3,0xEB,0x93,0xE5,0x07,0xC0,0xA9,0xAD,0xBA,0xD3,0xA0,0x14,0x8D,0x24,0x0E,0x5F}, - {0x9F,0xF4,0x31,0xC9,0x16,0xAF,0xAB,0x6A,0xCA,0x80,0xC1,0x2D,0xE6,0x76,0xEF,0x86, + .seckey={0x9F,0xF4,0x31,0xC9,0x16,0xAF,0xAB,0x6A,0xCA,0x80,0xC1,0x2D,0xE6,0x76,0xEF,0x86, 0x94,0xB4,0xE4,0x8B,0xFD,0x31,0x77,0x5C,0x2D,0xCD,0x9D,0x17,0x71,0x5B,0x95,0x3F}, - "rnvVe22GM2vweXRNuqggRXoEx3XAZs9knV"}, - {{0x84,0x22,0xC2,0xF7,0x26,0xF0,0xAA,0xBE,0x8A,0xDB,0x36,0xF3,0xE0,0xCC,0x68,0x3E}, - {0x03,0xEB,0x3C,0xE9,0xB6,0xFB,0xD1,0xDF,0x71,0x13,0x5E,0x06,0xA3,0x2F,0x42,0x9B, + .addr="rnvVe22GM2vweXRNuqggRXoEx3XAZs9knV"}, + {.seed={0x84,0x22,0xC2,0xF7,0x26,0xF0,0xAA,0xBE,0x8A,0xDB,0x36,0xF3,0xE0,0xCC,0x68,0x3E}, + .pubkey={0x03,0xEB,0x3C,0xE9,0xB6,0xFB,0xD1,0xDF,0x71,0x13,0x5E,0x06,0xA3,0x2F,0x42,0x9B, 0x1C,0x4F,0xBC,0xA5,0xB4,0x89,0xA7,0x22,0x4B,0x0F,0x91,0xAD,0x6F,0x6C,0x3B,0x98,0x02}, - {0xAF,0xA4,0x70,0x55,0xA0,0x5B,0xE6,0x7C,0x99,0x62,0x4F,0xB8,0xCE,0xE1,0x62,0x48, + .seckey={0xAF,0xA4,0x70,0x55,0xA0,0x5B,0xE6,0x7C,0x99,0x62,0x4F,0xB8,0xCE,0xE1,0x62,0x48, 0x19,0xD4,0xE9,0xEF,0x86,0x10,0x67,0x97,0x0E,0x8E,0x37,0x6B,0xB5,0x82,0xA4,0x6D}, - "r4UZeovKZA8evpNM8AEkodxUPE759ZJx6K"}, - {{0xE4,0x0B,0x92,0x07,0x46,0x0F,0x30,0xC6,0x5D,0xB3,0xB0,0xFE,0xA6,0x8E,0x9C,0x88}, - {0x03,0x14,0x17,0x68,0xD2,0xEE,0x03,0x9D,0xCE,0xB4,0xB1,0x25,0x1F,0x09,0x21,0xBE, + .addr="r4UZeovKZA8evpNM8AEkodxUPE759ZJx6K"}, + {.seed={0xE4,0x0B,0x92,0x07,0x46,0x0F,0x30,0xC6,0x5D,0xB3,0xB0,0xFE,0xA6,0x8E,0x9C,0x88}, + .pubkey={0x03,0x14,0x17,0x68,0xD2,0xEE,0x03,0x9D,0xCE,0xB4,0xB1,0x25,0x1F,0x09,0x21,0xBE, 0x82,0xA1,0xDB,0xED,0x44,0xAE,0x20,0x88,0xD4,0x93,0xDB,0xF4,0x29,0xDB,0x8B,0xCA,0xB1}, - {0x1A,0xBD,0xD6,0xB1,0x15,0x03,0x3D,0x43,0xED,0xD7,0x71,0x22,0x7D,0xA1,0xEC,0x59, + .seckey={0x1A,0xBD,0xD6,0xB1,0x15,0x03,0x3D,0x43,0xED,0xD7,0x71,0x22,0x7D,0xA1,0xEC,0x59, 0x17,0x6B,0xC5,0x56,0x85,0x22,0x68,0x2A,0x3A,0x84,0x0B,0x76,0x96,0x07,0x32,0xB3}, - "rfxzt744qLZjaupkaMz6Vyg9HfAqhAxHuN"}, - {{0xE0,0xA1,0xA6,0xA2,0xF8,0x4E,0xE7,0x83,0x37,0x67,0x93,0xF6,0x9B,0xAB,0x6A,0x1C}, - {0x02,0x14,0x45,0xE1,0xB9,0x85,0x3A,0x10,0xFB,0x3D,0x19,0x51,0x06,0x29,0x89,0x86, + .addr="rfxzt744qLZjaupkaMz6Vyg9HfAqhAxHuN"}, + {.seed={0xE0,0xA1,0xA6,0xA2,0xF8,0x4E,0xE7,0x83,0x37,0x67,0x93,0xF6,0x9B,0xAB,0x6A,0x1C}, + .pubkey={0x02,0x14,0x45,0xE1,0xB9,0x85,0x3A,0x10,0xFB,0x3D,0x19,0x51,0x06,0x29,0x89,0x86, 0xD3,0x21,0xFC,0xD6,0xEA,0xA4,0xA2,0x1F,0x0C,0x21,0x99,0xF4,0xB9,0x17,0xEF,0x9A,0x98}, - {0xC1,0xFC,0x56,0xB0,0xE6,0x3F,0x27,0xC4,0xB3,0x3D,0x83,0x8D,0x3F,0x51,0xBB,0x30, + .seckey={0xC1,0xFC,0x56,0xB0,0xE6,0x3F,0x27,0xC4,0xB3,0x3D,0x83,0x8D,0x3F,0x51,0xBB,0x30, 0xBD,0xF0,0x1B,0x79,0xD2,0x39,0x17,0xFE,0x81,0xEB,0x4F,0xB4,0x4B,0x2B,0x68,0x4E}, - "rGmqckB9JMAtx4qgW8kJzvnftRcm3He4pC"}, - {{0x08,0x89,0x4E,0x50,0x14,0xC7,0x4B,0x29,0x0A,0x92,0x8E,0x49,0x7A,0x41,0x03,0x94}, - {0x03,0xC9,0xAB,0x0B,0x23,0x91,0x7F,0x68,0x93,0x4F,0x05,0x5C,0x22,0x9B,0x84,0x9F, + .addr="rGmqckB9JMAtx4qgW8kJzvnftRcm3He4pC"}, + {.seed={0x08,0x89,0x4E,0x50,0x14,0xC7,0x4B,0x29,0x0A,0x92,0x8E,0x49,0x7A,0x41,0x03,0x94}, + .pubkey={0x03,0xC9,0xAB,0x0B,0x23,0x91,0x7F,0x68,0x93,0x4F,0x05,0x5C,0x22,0x9B,0x84,0x9F, 0xFD,0x39,0x27,0x45,0x1F,0x2A,0x91,0x29,0xD1,0x7D,0x89,0x35,0xF7,0xA5,0xC4,0x7C,0x68}, - {0xCD,0x24,0x10,0xF6,0xB3,0x4F,0xC9,0xBA,0xC5,0x12,0xEB,0x65,0xFB,0xB2,0x69,0xFB, + .seckey={0xCD,0x24,0x10,0xF6,0xB3,0x4F,0xC9,0xBA,0xC5,0x12,0xEB,0x65,0xFB,0xB2,0x69,0xFB, 0x9F,0xC5,0x10,0xA8,0x64,0xF3,0xA8,0x65,0x1E,0x7B,0xF4,0x54,0xD4,0xDD,0xE7,0x48}, - "rBUZAvsXZJfUHCc9tWhEqDJUnDGdPTbA61"}, - {{0xA9,0xEA,0x18,0x15,0x9C,0x7E,0x1B,0xF4,0xCB,0xD7,0x2D,0x3E,0x16,0xF1,0x1A,0x45}, - {0x02,0x3F,0xF7,0x7D,0x42,0x2D,0xE7,0x08,0xA1,0xB8,0xC5,0x56,0x55,0x2C,0xE8,0x74, + .addr="rBUZAvsXZJfUHCc9tWhEqDJUnDGdPTbA61"}, + {.seed={0xA9,0xEA,0x18,0x15,0x9C,0x7E,0x1B,0xF4,0xCB,0xD7,0x2D,0x3E,0x16,0xF1,0x1A,0x45}, + .pubkey={0x02,0x3F,0xF7,0x7D,0x42,0x2D,0xE7,0x08,0xA1,0xB8,0xC5,0x56,0x55,0x2C,0xE8,0x74, 0xF4,0x40,0x9A,0xA8,0x84,0xD7,0x44,0x0C,0x4D,0x03,0xC9,0x99,0xD2,0x9D,0xF9,0xEF,0x89}, - {0x73,0xEA,0xB1,0xD5,0x7E,0xC8,0x36,0x1C,0x41,0x53,0x94,0x2F,0xBC,0x30,0xB7,0x1A, + .seckey={0x73,0xEA,0xB1,0xD5,0x7E,0xC8,0x36,0x1C,0x41,0x53,0x94,0x2F,0xBC,0x30,0xB7,0x1A, 0xA2,0xA0,0x75,0x39,0xD9,0x59,0x4A,0x66,0x7E,0xF3,0xB3,0x41,0xA9,0x5C,0x11,0xD0}, - "rBxAYvkEfc9LwqvNDuij3PnVPtf2LeZvZG"}, - {{0x85,0x12,0xCF,0xA4,0xB8,0xAB,0x77,0x60,0x1A,0xAF,0xB0,0x16,0x22,0xFD,0xF7,0xE0}, - {0x02,0xA0,0x25,0x79,0x1A,0x75,0x9B,0xDE,0x29,0xB6,0x0A,0xA1,0x55,0x82,0xF6,0x3D, + .addr="rBxAYvkEfc9LwqvNDuij3PnVPtf2LeZvZG"}, + {.seed={0x85,0x12,0xCF,0xA4,0xB8,0xAB,0x77,0x60,0x1A,0xAF,0xB0,0x16,0x22,0xFD,0xF7,0xE0}, + .pubkey={0x02,0xA0,0x25,0x79,0x1A,0x75,0x9B,0xDE,0x29,0xB6,0x0A,0xA1,0x55,0x82,0xF6,0x3D, 0x7E,0x59,0x9A,0x1C,0xD3,0x30,0x28,0x44,0xF1,0x51,0x8A,0xA8,0x2D,0x9B,0x64,0x7B,0x12}, - {0xEA,0x04,0x9E,0xBC,0x5E,0xCB,0xEB,0x71,0xD9,0xC1,0x3E,0x00,0xA4,0x53,0x1F,0xFA, + .seckey={0xEA,0x04,0x9E,0xBC,0x5E,0xCB,0xEB,0x71,0xD9,0xC1,0x3E,0x00,0xA4,0x53,0x1F,0xFA, 0x88,0x32,0x9D,0xC2,0xA2,0x6F,0x9B,0x38,0xDC,0xDC,0xA7,0xDF,0xAE,0x60,0xCF,0xC8}, - "rwqKXTVGf6DqKKHKtVYTqiyTi9Utj4dtUg"}, - {{0xDB,0xB2,0x21,0xA2,0x30,0xF8,0xDE,0x09,0xCB,0x4A,0xD7,0xA3,0x4D,0xCF,0x65,0x8F}, - {0x02,0x24,0x93,0x14,0x32,0xAB,0x9B,0xAD,0x1C,0xCB,0x55,0x48,0x52,0x86,0xD8,0x53, + .addr="rwqKXTVGf6DqKKHKtVYTqiyTi9Utj4dtUg"}, + {.seed={0xDB,0xB2,0x21,0xA2,0x30,0xF8,0xDE,0x09,0xCB,0x4A,0xD7,0xA3,0x4D,0xCF,0x65,0x8F}, + .pubkey={0x02,0x24,0x93,0x14,0x32,0xAB,0x9B,0xAD,0x1C,0xCB,0x55,0x48,0x52,0x86,0xD8,0x53, 0xAD,0xFE,0x69,0x63,0x35,0x85,0x7D,0xF7,0xBE,0xBB,0xC2,0x38,0x37,0xC5,0x16,0xDB,0x85}, - {0xCC,0x3F,0x07,0xB0,0x02,0xCF,0x11,0x8C,0x6E,0x16,0x52,0xA9,0x0E,0x53,0xB3,0xE4, + .seckey={0xCC,0x3F,0x07,0xB0,0x02,0xCF,0x11,0x8C,0x6E,0x16,0x52,0xA9,0x0E,0x53,0xB3,0xE4, 0x9A,0x02,0x59,0xB0,0x85,0x55,0x66,0x12,0xE7,0x64,0x24,0x5C,0xC9,0x87,0x68,0x94}, - "rwUVvqHuUdHHbaUgRL2tboAT8BtfnLKzu7"}, - {{0x13,0x13,0xED,0xD6,0xA9,0x99,0xEC,0x78,0x41,0xB9,0xAF,0x7B,0x63,0x4C,0x72,0x40}, - {0x03,0xAB,0x57,0x27,0x14,0xC7,0x64,0xBD,0x16,0xCC,0xC3,0xEC,0xCC,0x73,0xB8,0xC5, + .addr="rwUVvqHuUdHHbaUgRL2tboAT8BtfnLKzu7"}, + {.seed={0x13,0x13,0xED,0xD6,0xA9,0x99,0xEC,0x78,0x41,0xB9,0xAF,0x7B,0x63,0x4C,0x72,0x40}, + .pubkey={0x03,0xAB,0x57,0x27,0x14,0xC7,0x64,0xBD,0x16,0xCC,0xC3,0xEC,0xCC,0x73,0xB8,0xC5, 0x25,0xDC,0xD0,0xAE,0x44,0x7D,0xE5,0xE6,0x99,0xFC,0xA1,0x77,0xEB,0x6D,0x8A,0x3D,0x68}, - {0xCE,0xEA,0x88,0x81,0x86,0x7C,0xB8,0x75,0xEA,0x2E,0xE6,0x3D,0x16,0xDC,0x31,0x45, + .seckey={0xCE,0xEA,0x88,0x81,0x86,0x7C,0xB8,0x75,0xEA,0x2E,0xE6,0x3D,0x16,0xDC,0x31,0x45, 0xA0,0x6B,0xF9,0x84,0xD5,0xBC,0x9F,0x9C,0x3D,0xF6,0x0E,0x70,0xDC,0x4E,0x45,0xEA}, - "r4JubQs7WVESYxYbF4Uvsf7sUpJ7awzC4v"}, - {{0xC6,0x4B,0x3E,0xF6,0x4B,0x44,0x46,0xBA,0x46,0x86,0x8D,0x60,0x68,0xFD,0xBA,0x79}, - {0x02,0xDC,0xC5,0x44,0xEF,0xAF,0x0B,0xAD,0x8C,0x12,0x0F,0xA7,0xC7,0x9B,0xB9,0xF3, + .addr="r4JubQs7WVESYxYbF4Uvsf7sUpJ7awzC4v"}, + {.seed={0xC6,0x4B,0x3E,0xF6,0x4B,0x44,0x46,0xBA,0x46,0x86,0x8D,0x60,0x68,0xFD,0xBA,0x79}, + .pubkey={0x02,0xDC,0xC5,0x44,0xEF,0xAF,0x0B,0xAD,0x8C,0x12,0x0F,0xA7,0xC7,0x9B,0xB9,0xF3, 0xC8,0x8A,0x2A,0x7B,0x9C,0xB0,0x87,0xDD,0x1D,0x06,0x77,0x01,0x05,0x1D,0x77,0x92,0x34}, - {0x0E,0x26,0x89,0x9C,0xED,0xB1,0x4E,0xD2,0x90,0x99,0x2D,0x38,0xAD,0xCD,0x48,0xA2, + .seckey={0x0E,0x26,0x89,0x9C,0xED,0xB1,0x4E,0xD2,0x90,0x99,0x2D,0x38,0xAD,0xCD,0x48,0xA2, 0xCA,0x76,0x13,0xEE,0x42,0xCC,0x0E,0x00,0xEC,0xCC,0x72,0xEE,0x20,0xCE,0xF2,0x82}, - "rGpXpDnhPMqgNR2yxhiAbW2H15mJrxhfVp"}, - {{0xCE,0x2A,0x1F,0xEC,0xCE,0x8D,0x4F,0xEF,0x4D,0x33,0xCE,0x57,0xF2,0xC8,0x4E,0x6E}, - {0x02,0x14,0x57,0xE0,0x7D,0xBF,0x3A,0x09,0x07,0x30,0x10,0x57,0x64,0x5C,0x9F,0xCD, + .addr="rGpXpDnhPMqgNR2yxhiAbW2H15mJrxhfVp"}, + {.seed={0xCE,0x2A,0x1F,0xEC,0xCE,0x8D,0x4F,0xEF,0x4D,0x33,0xCE,0x57,0xF2,0xC8,0x4E,0x6E}, + .pubkey={0x02,0x14,0x57,0xE0,0x7D,0xBF,0x3A,0x09,0x07,0x30,0x10,0x57,0x64,0x5C,0x9F,0xCD, 0xE0,0x57,0x2E,0xAB,0x73,0x24,0x34,0x6C,0x1D,0x93,0xC4,0xD3,0xBB,0xF1,0x52,0x66,0x1D}, - {0x9A,0xF2,0x85,0x67,0x64,0x0B,0x12,0x29,0x45,0x2D,0xC8,0x51,0xBC,0x86,0x1C,0x24, + .seckey={0x9A,0xF2,0x85,0x67,0x64,0x0B,0x12,0x29,0x45,0x2D,0xC8,0x51,0xBC,0x86,0x1C,0x24, 0x30,0x18,0x8E,0xF8,0xFB,0x11,0x5D,0x45,0xDA,0x1F,0x67,0xE6,0xBC,0x5B,0x94,0x92}, - "r3qch21RVHuqAHapjovBW5owVHRFoiN8xB"}, - {{0xF4,0x78,0x3A,0x98,0xA3,0x8E,0x79,0xF1,0xC4,0x26,0x0C,0x04,0x6F,0xB4,0x28,0xD8}, - {0x02,0xA3,0x68,0x74,0x6B,0x3D,0x7D,0x10,0xFC,0x5C,0x51,0x8E,0x44,0xBE,0x95,0xD3, + .addr="r3qch21RVHuqAHapjovBW5owVHRFoiN8xB"}, + {.seed={0xF4,0x78,0x3A,0x98,0xA3,0x8E,0x79,0xF1,0xC4,0x26,0x0C,0x04,0x6F,0xB4,0x28,0xD8}, + .pubkey={0x02,0xA3,0x68,0x74,0x6B,0x3D,0x7D,0x10,0xFC,0x5C,0x51,0x8E,0x44,0xBE,0x95,0xD3, 0xAB,0x09,0x94,0x97,0x8C,0xD5,0x3E,0x0D,0x1B,0x4B,0x8F,0x41,0x08,0x67,0x0B,0x15,0x50}, - {0x3C,0xCC,0x43,0x41,0xDC,0x14,0x8F,0xB6,0x65,0x1E,0x47,0x6F,0xA5,0x57,0x53,0xBA, + .seckey={0x3C,0xCC,0x43,0x41,0xDC,0x14,0x8F,0xB6,0x65,0x1E,0x47,0x6F,0xA5,0x57,0x53,0xBA, 0x15,0xF1,0x14,0x4E,0x45,0x5F,0x15,0x52,0x30,0xBB,0xCD,0x4E,0x49,0x6A,0x76,0x77}, - "rs1b7fDHFMxovR6czQVekuYnRrBQJs2JjG"}, - {{0x16,0x7C,0x0B,0xB3,0xC7,0x9D,0x2B,0xC4,0x45,0xCA,0x0F,0x0C,0x16,0x20,0xF2,0xC0}, - {0x02,0x4F,0xA3,0xA0,0x8A,0xA4,0x00,0xFC,0x9D,0xC4,0x43,0x6C,0xB3,0x5F,0xC5,0x9B, + .addr="rs1b7fDHFMxovR6czQVekuYnRrBQJs2JjG"}, + {.seed={0x16,0x7C,0x0B,0xB3,0xC7,0x9D,0x2B,0xC4,0x45,0xCA,0x0F,0x0C,0x16,0x20,0xF2,0xC0}, + .pubkey={0x02,0x4F,0xA3,0xA0,0x8A,0xA4,0x00,0xFC,0x9D,0xC4,0x43,0x6C,0xB3,0x5F,0xC5,0x9B, 0xEB,0x96,0x6A,0x06,0x95,0x1C,0x90,0x78,0x87,0xD0,0xC1,0x3C,0x36,0xC8,0x9E,0xA6,0xF0}, - {0x1F,0x3F,0xBE,0xDD,0xFD,0xA4,0x79,0xA5,0xA0,0x01,0x8B,0x88,0x86,0x46,0x0C,0xC4, + .seckey={0x1F,0x3F,0xBE,0xDD,0xFD,0xA4,0x79,0xA5,0xA0,0x01,0x8B,0x88,0x86,0x46,0x0C,0xC4, 0x02,0x6A,0x62,0x14,0x42,0x02,0xA8,0x9A,0x4C,0x2B,0x1C,0x73,0xBA,0x02,0xDB,0x4E}, - "rNoQNeoYjCBQHUBhpmNi43yNVc3hQnYPGK"}, - {{0x5C,0x30,0xD9,0xEF,0xDF,0x24,0x77,0xA3,0x7C,0x1B,0x14,0x06,0xE2,0xF6,0x10,0x7A}, - {0x02,0xA1,0xEC,0x81,0xC0,0xBE,0xBC,0x84,0x78,0x09,0xD8,0x49,0x20,0x39,0x3A,0xE8, + .addr="rNoQNeoYjCBQHUBhpmNi43yNVc3hQnYPGK"}, + {.seed={0x5C,0x30,0xD9,0xEF,0xDF,0x24,0x77,0xA3,0x7C,0x1B,0x14,0x06,0xE2,0xF6,0x10,0x7A}, + .pubkey={0x02,0xA1,0xEC,0x81,0xC0,0xBE,0xBC,0x84,0x78,0x09,0xD8,0x49,0x20,0x39,0x3A,0xE8, 0x6C,0x2E,0x8E,0xF1,0x9F,0xFB,0x46,0xB8,0xD3,0x98,0x67,0x9F,0xA6,0x76,0x41,0x21,0x9B}, - {0xA2,0xE3,0x24,0xD9,0x10,0xA4,0x50,0x4A,0x6E,0x03,0x2F,0x93,0x30,0xB9,0xF7,0xFE, + .seckey={0xA2,0xE3,0x24,0xD9,0x10,0xA4,0x50,0x4A,0x6E,0x03,0x2F,0x93,0x30,0xB9,0xF7,0xFE, 0xAE,0x1D,0xEB,0x05,0x95,0x15,0xEA,0x72,0x1C,0xF0,0x0E,0xFA,0x23,0x6F,0x3D,0xA5}, - "rhPf4tS9DK2BTbUrbCqn4TpTWMC9WrgFWA"}, - {{0xD2,0xA7,0xDE,0x9A,0x73,0x18,0x28,0x05,0x99,0x2D,0x56,0x44,0xBC,0xF3,0x01,0xA9}, - {0x03,0x35,0x3C,0x34,0x9E,0x96,0x28,0xEF,0xEE,0x83,0x6E,0x74,0x03,0xF9,0x41,0xA2, + .addr="rhPf4tS9DK2BTbUrbCqn4TpTWMC9WrgFWA"}, + {.seed={0xD2,0xA7,0xDE,0x9A,0x73,0x18,0x28,0x05,0x99,0x2D,0x56,0x44,0xBC,0xF3,0x01,0xA9}, + .pubkey={0x03,0x35,0x3C,0x34,0x9E,0x96,0x28,0xEF,0xEE,0x83,0x6E,0x74,0x03,0xF9,0x41,0xA2, 0xBF,0xAA,0x33,0x51,0x49,0x52,0xA5,0xAE,0x90,0xE9,0x3C,0x86,0x23,0xA6,0x5E,0xF4,0x68}, - {0x75,0x8F,0xE1,0x17,0x2F,0x22,0xB7,0xC9,0x8B,0xF8,0x45,0xB2,0x2C,0x60,0x3D,0xF3, + .seckey={0x75,0x8F,0xE1,0x17,0x2F,0x22,0xB7,0xC9,0x8B,0xF8,0x45,0xB2,0x2C,0x60,0x3D,0xF3, 0xDB,0xB1,0xE6,0x16,0x55,0x38,0x18,0x7F,0x0A,0xE6,0x7A,0xCF,0x7D,0x59,0x1B,0xC9}, - "rKysepUdRUS3mSsb1F5qFKmwQiA2j7N6Rp"}, - {{0xDB,0xC5,0xFE,0x60,0xD5,0x0B,0xD3,0x17,0x6A,0x6E,0x17,0xF3,0x50,0x3C,0xD3,0x44}, - {0x02,0x08,0xE0,0x68,0xD4,0x94,0x17,0xE6,0xA1,0xA7,0xF2,0x20,0x99,0xA9,0xFF,0xD3, + .addr="rKysepUdRUS3mSsb1F5qFKmwQiA2j7N6Rp"}, + {.seed={0xDB,0xC5,0xFE,0x60,0xD5,0x0B,0xD3,0x17,0x6A,0x6E,0x17,0xF3,0x50,0x3C,0xD3,0x44}, + .pubkey={0x02,0x08,0xE0,0x68,0xD4,0x94,0x17,0xE6,0xA1,0xA7,0xF2,0x20,0x99,0xA9,0xFF,0xD3, 0x02,0xA1,0x1F,0xD1,0xD3,0x06,0xED,0x61,0xCF,0x3A,0xA0,0xC3,0x50,0x79,0x7C,0xFE,0x21}, - {0x56,0xEF,0x3F,0xAF,0xFC,0xDD,0x12,0x60,0xEE,0xC3,0xB7,0xC6,0xE4,0x26,0x48,0xA2, + .seckey={0x56,0xEF,0x3F,0xAF,0xFC,0xDD,0x12,0x60,0xEE,0xC3,0xB7,0xC6,0xE4,0x26,0x48,0xA2, 0x58,0x7D,0xF4,0x85,0xC8,0x18,0x8B,0x7A,0xF8,0x35,0x8D,0xF5,0x14,0x73,0xBE,0xA0}, - "rECdVqueE3m1oUn2GBuwZap6M8ohGUPi3"}, - {{0x02,0xD0,0x7A,0xEE,0xF2,0x0F,0x48,0x49,0xE0,0x8E,0x59,0x0B,0xE5,0x0F,0x8A,0xC1}, - {0x03,0x2D,0x3C,0x65,0x57,0x78,0xB4,0xE1,0x6F,0x29,0xCD,0x06,0x7F,0x7A,0x3F,0xFE, + .addr="rECdVqueE3m1oUn2GBuwZap6M8ohGUPi3"}, + {.seed={0x02,0xD0,0x7A,0xEE,0xF2,0x0F,0x48,0x49,0xE0,0x8E,0x59,0x0B,0xE5,0x0F,0x8A,0xC1}, + .pubkey={0x03,0x2D,0x3C,0x65,0x57,0x78,0xB4,0xE1,0x6F,0x29,0xCD,0x06,0x7F,0x7A,0x3F,0xFE, 0xD0,0x66,0xB5,0x2A,0x69,0x28,0x42,0xB9,0xD3,0x46,0xB6,0xD7,0xC3,0xFE,0x41,0xA3,0x4E}, - {0x18,0x2C,0x95,0x96,0x1D,0x22,0x9C,0x2C,0xF1,0x3F,0xD6,0x06,0x41,0x87,0x8C,0x04, + .seckey={0x18,0x2C,0x95,0x96,0x1D,0x22,0x9C,0x2C,0xF1,0x3F,0xD6,0x06,0x41,0x87,0x8C,0x04, 0x43,0x31,0x0D,0xAA,0x0B,0x41,0x89,0xF5,0x6C,0xBA,0xBC,0xE5,0xF7,0xA1,0xD5,0xB0}, - "rwmvZKoC8nPtyggfBBXcAwgVs5vnDX6pQu"}, - {{0xEB,0xC8,0xC9,0xA3,0xC0,0x39,0xB2,0x10,0x49,0x6C,0x95,0x3C,0xC9,0x47,0xD4,0x13}, - {0x03,0xAA,0x10,0xE0,0xA3,0x1A,0x3F,0x49,0x07,0xCF,0x96,0xA8,0x3E,0x4A,0x4C,0x26, + .addr="rwmvZKoC8nPtyggfBBXcAwgVs5vnDX6pQu"}, + {.seed={0xEB,0xC8,0xC9,0xA3,0xC0,0x39,0xB2,0x10,0x49,0x6C,0x95,0x3C,0xC9,0x47,0xD4,0x13}, + .pubkey={0x03,0xAA,0x10,0xE0,0xA3,0x1A,0x3F,0x49,0x07,0xCF,0x96,0xA8,0x3E,0x4A,0x4C,0x26, 0xA2,0xA0,0x03,0x33,0x7A,0x76,0x4D,0xFB,0x9C,0xFA,0x0C,0x9E,0x61,0x68,0x4E,0xCD,0x83}, - {0xC1,0x17,0x0A,0x11,0x40,0xCD,0x86,0xB1,0xE0,0x8D,0x00,0x1E,0x36,0x96,0xDA,0x35, + .seckey={0xC1,0x17,0x0A,0x11,0x40,0xCD,0x86,0xB1,0xE0,0x8D,0x00,0x1E,0x36,0x96,0xDA,0x35, 0x37,0x92,0x09,0x73,0xC9,0xEA,0x0B,0x88,0x72,0xA7,0xEC,0x3A,0xA0,0x00,0x70,0x5F}, - "raCPJGiwzZUP9Kq2dUEtegMFVFqPYvYUnJ"}, - {{0x58,0x17,0x37,0x52,0x1F,0x1B,0x9F,0x6D,0xFC,0xBB,0xE4,0xC8,0xE6,0x71,0x0F,0x57}, - {0x03,0xB3,0x7D,0x66,0x22,0x5B,0x46,0x1A,0xC1,0xB3,0x34,0x87,0x70,0x52,0x32,0xB7, + .addr="raCPJGiwzZUP9Kq2dUEtegMFVFqPYvYUnJ"}, + {.seed={0x58,0x17,0x37,0x52,0x1F,0x1B,0x9F,0x6D,0xFC,0xBB,0xE4,0xC8,0xE6,0x71,0x0F,0x57}, + .pubkey={0x03,0xB3,0x7D,0x66,0x22,0x5B,0x46,0x1A,0xC1,0xB3,0x34,0x87,0x70,0x52,0x32,0xB7, 0x8F,0x26,0x56,0x3B,0x9B,0xE7,0x0D,0x3A,0x49,0xCA,0xF1,0xC4,0x24,0x91,0x44,0xD1,0x93}, - {0xE3,0x40,0x86,0xA5,0x1A,0xBE,0xBE,0x68,0x6B,0x6B,0x3C,0x1F,0x8D,0xE9,0x72,0x40, + .seckey={0xE3,0x40,0x86,0xA5,0x1A,0xBE,0xBE,0x68,0x6B,0x6B,0x3C,0x1F,0x8D,0xE9,0x72,0x40, 0x4C,0x44,0x98,0xC3,0x20,0x5C,0x73,0xBF,0x7E,0x41,0x89,0xF8,0x4A,0x5C,0x34,0x71}, - "rGUdJNjYKPTscEdv32PBA3sLHFGgNJvKZw"}, - {{0xCD,0x63,0x23,0xF6,0xBB,0xAF,0xB2,0xF7,0x57,0x43,0xD0,0xA4,0x2E,0x4E,0x6F,0xC6}, - {0x02,0xB4,0x24,0x17,0xAD,0x45,0xA7,0xA2,0x53,0xC0,0x6A,0x14,0x37,0x5F,0x66,0xFF, + .addr="rGUdJNjYKPTscEdv32PBA3sLHFGgNJvKZw"}, + {.seed={0xCD,0x63,0x23,0xF6,0xBB,0xAF,0xB2,0xF7,0x57,0x43,0xD0,0xA4,0x2E,0x4E,0x6F,0xC6}, + .pubkey={0x02,0xB4,0x24,0x17,0xAD,0x45,0xA7,0xA2,0x53,0xC0,0x6A,0x14,0x37,0x5F,0x66,0xFF, 0x1E,0xFA,0xC0,0x45,0x9E,0x1E,0x95,0xCE,0x4C,0x37,0x0B,0x2B,0x09,0xE0,0x9D,0x69,0xA2}, - {0x78,0x6E,0xE9,0x7A,0xB1,0x4E,0x9D,0x14,0x67,0x92,0x2E,0xB2,0x4C,0xEB,0xAD,0x95, + .seckey={0x78,0x6E,0xE9,0x7A,0xB1,0x4E,0x9D,0x14,0x67,0x92,0x2E,0xB2,0x4C,0xEB,0xAD,0x95, 0x71,0x7F,0x09,0xBA,0xD9,0xF7,0x47,0xBB,0x6F,0x45,0xDC,0x0A,0x4B,0x7A,0x12,0x9C}, - "rK98g4BtQRoFGich8iakyB9as6twXb99bi"}, - {{0x67,0x0C,0x12,0x8C,0xE5,0x2A,0x14,0x34,0x13,0x26,0xFA,0xFB,0xDA,0x88,0x9C,0x7E}, - {0x03,0x09,0x7E,0xED,0x79,0x95,0xE2,0x52,0xDC,0x01,0xF8,0x6D,0x6C,0x88,0x63,0x60, + .addr="rK98g4BtQRoFGich8iakyB9as6twXb99bi"}, + {.seed={0x67,0x0C,0x12,0x8C,0xE5,0x2A,0x14,0x34,0x13,0x26,0xFA,0xFB,0xDA,0x88,0x9C,0x7E}, + .pubkey={0x03,0x09,0x7E,0xED,0x79,0x95,0xE2,0x52,0xDC,0x01,0xF8,0x6D,0x6C,0x88,0x63,0x60, 0x8B,0xF0,0x69,0xC7,0x99,0x30,0xFF,0x7C,0xA2,0x09,0xC1,0x58,0x0B,0x49,0xF1,0xDA,0xCA}, - {0x35,0x19,0x45,0x94,0x2E,0x70,0xDB,0x5E,0xC6,0x87,0xD8,0xFF,0xE8,0xBA,0x1F,0x9D, + .seckey={0x35,0x19,0x45,0x94,0x2E,0x70,0xDB,0x5E,0xC6,0x87,0xD8,0xFF,0xE8,0xBA,0x1F,0x9D, 0xF3,0xC7,0xF9,0x84,0xC3,0x3A,0x46,0x63,0xA1,0x0D,0x21,0x49,0x30,0xF9,0x95,0xA4}, - "raFXt1LJkm732epPXyTE1xW3DrEb7oUt6m"}, - {{0xF8,0x1F,0xAB,0xD1,0x2A,0x1E,0x8B,0x8B,0xF4,0x24,0x88,0xC0,0xCB,0x95,0xF4,0x5F}, - {0x02,0x8E,0xEA,0xEC,0x17,0xD8,0xAF,0x7E,0x2F,0x06,0xE4,0xA4,0xE1,0x2C,0x3F,0x41, + .addr="raFXt1LJkm732epPXyTE1xW3DrEb7oUt6m"}, + {.seed={0xF8,0x1F,0xAB,0xD1,0x2A,0x1E,0x8B,0x8B,0xF4,0x24,0x88,0xC0,0xCB,0x95,0xF4,0x5F}, + .pubkey={0x02,0x8E,0xEA,0xEC,0x17,0xD8,0xAF,0x7E,0x2F,0x06,0xE4,0xA4,0xE1,0x2C,0x3F,0x41, 0x42,0xA0,0x29,0x69,0x45,0x2D,0x94,0xF7,0x18,0xEE,0x47,0x80,0x1F,0x86,0x40,0x25,0x12}, - {0x53,0x1F,0xDE,0xDB,0xEB,0x50,0xC0,0x49,0x37,0xFF,0x57,0xE5,0x7E,0x8A,0x59,0x6C, + .seckey={0x53,0x1F,0xDE,0xDB,0xEB,0x50,0xC0,0x49,0x37,0xFF,0x57,0xE5,0x7E,0x8A,0x59,0x6C, 0xC3,0x75,0xF1,0xA0,0x69,0x82,0x62,0xF0,0x06,0xF3,0x1E,0xA0,0xEC,0xA7,0x14,0xEB}, - "rpCWmksupngLFRiYd7Dwn2v9qLr2ipHAFA"}, - {{0x55,0x9F,0x01,0xFB,0x87,0x06,0x8F,0x68,0xB2,0x42,0x5B,0x83,0xC8,0xFE,0x98,0xE3}, - {0x03,0x8F,0x99,0x37,0x38,0xFA,0xA0,0xA4,0x1A,0x07,0xDF,0x9D,0xE9,0x8F,0x5E,0x16, + .addr="rpCWmksupngLFRiYd7Dwn2v9qLr2ipHAFA"}, + {.seed={0x55,0x9F,0x01,0xFB,0x87,0x06,0x8F,0x68,0xB2,0x42,0x5B,0x83,0xC8,0xFE,0x98,0xE3}, + .pubkey={0x03,0x8F,0x99,0x37,0x38,0xFA,0xA0,0xA4,0x1A,0x07,0xDF,0x9D,0xE9,0x8F,0x5E,0x16, 0xBC,0x75,0x98,0xC7,0x51,0x39,0x96,0x63,0x47,0xE5,0x78,0xAB,0xE6,0x1E,0x56,0x5A,0xB8}, - {0x4E,0xC4,0x2C,0x51,0x67,0x8D,0x99,0xC2,0xA3,0x81,0x5F,0x83,0x93,0x4C,0xD6,0xC6, + .seckey={0x4E,0xC4,0x2C,0x51,0x67,0x8D,0x99,0xC2,0xA3,0x81,0x5F,0x83,0x93,0x4C,0xD6,0xC6, 0x23,0x68,0x00,0xE9,0x23,0x83,0xD0,0x5D,0xC6,0x06,0xF9,0xB5,0xA2,0x68,0xB2,0x0C}, - "r9y3WKMydDKLxN3YyxHZi4fNvm2kqMJcCb"}, - {{0x49,0x27,0x9B,0x34,0x0D,0xFF,0xFC,0xF8,0xD7,0x42,0x04,0x66,0x7E,0xF3,0xEC,0x4C}, - {0x03,0x16,0x76,0xEF,0x9A,0xED,0xE0,0x96,0xDA,0x3F,0x97,0xF3,0xF4,0x86,0x66,0xBA, + .addr="r9y3WKMydDKLxN3YyxHZi4fNvm2kqMJcCb"}, + {.seed={0x49,0x27,0x9B,0x34,0x0D,0xFF,0xFC,0xF8,0xD7,0x42,0x04,0x66,0x7E,0xF3,0xEC,0x4C}, + .pubkey={0x03,0x16,0x76,0xEF,0x9A,0xED,0xE0,0x96,0xDA,0x3F,0x97,0xF3,0xF4,0x86,0x66,0xBA, 0x73,0x41,0x03,0xBD,0xBE,0x7A,0x72,0x27,0xEF,0xC3,0x55,0xA3,0x32,0x76,0x7F,0x28,0x60}, - {0xD0,0x36,0x6F,0x72,0xF5,0x3E,0x30,0x54,0x66,0xAB,0x5E,0x8E,0x90,0x00,0xDA,0x4B, + .seckey={0xD0,0x36,0x6F,0x72,0xF5,0x3E,0x30,0x54,0x66,0xAB,0x5E,0x8E,0x90,0x00,0xDA,0x4B, 0x3C,0x29,0x18,0xA8,0x33,0xD3,0x6D,0x1C,0x36,0x61,0xF3,0x89,0x86,0x3B,0x40,0x3F}, - "rL6so6e6amZa5whfyERVc5xPS5T67AMKKS"}, - {{0xFC,0x36,0x64,0x43,0xE6,0x7B,0x56,0xD0,0xB8,0x37,0xE2,0xF4,0x04,0x38,0xD3,0xCF}, - {0x03,0xA2,0xB4,0xEA,0x91,0xE4,0x79,0x11,0xDB,0xA3,0x58,0x08,0x52,0x25,0x73,0x4F, + .addr="rL6so6e6amZa5whfyERVc5xPS5T67AMKKS"}, + {.seed={0xFC,0x36,0x64,0x43,0xE6,0x7B,0x56,0xD0,0xB8,0x37,0xE2,0xF4,0x04,0x38,0xD3,0xCF}, + .pubkey={0x03,0xA2,0xB4,0xEA,0x91,0xE4,0x79,0x11,0xDB,0xA3,0x58,0x08,0x52,0x25,0x73,0x4F, 0xF4,0xD2,0xCB,0xF2,0xE9,0x3F,0x11,0xC7,0x65,0xA5,0x91,0x39,0x7E,0x43,0xA1,0x26,0xCC}, - {0x84,0x00,0xD2,0x01,0x17,0x8E,0x9D,0x59,0xFD,0xBE,0x42,0xB3,0x03,0x22,0x5F,0x5F, + .seckey={0x84,0x00,0xD2,0x01,0x17,0x8E,0x9D,0x59,0xFD,0xBE,0x42,0xB3,0x03,0x22,0x5F,0x5F, 0x6C,0x1E,0x5B,0x44,0x8B,0xEE,0x09,0xE0,0x28,0x38,0x9D,0x9A,0xE3,0xC6,0xBA,0x81}, - "rCDbqPiELAx4yWT6tzxSsLPpRjMAk6Fch"}, - {{0xF6,0x89,0x85,0xC1,0x1D,0x7D,0x8D,0x7D,0xC7,0xE4,0xA0,0x4C,0x6C,0xE4,0x14,0x57}, - {0x02,0xCB,0x96,0xE5,0xBF,0xB8,0x22,0xCB,0x83,0xF3,0xB9,0x0C,0x17,0xB0,0x2F,0x6B, + .addr="rCDbqPiELAx4yWT6tzxSsLPpRjMAk6Fch"}, + {.seed={0xF6,0x89,0x85,0xC1,0x1D,0x7D,0x8D,0x7D,0xC7,0xE4,0xA0,0x4C,0x6C,0xE4,0x14,0x57}, + .pubkey={0x02,0xCB,0x96,0xE5,0xBF,0xB8,0x22,0xCB,0x83,0xF3,0xB9,0x0C,0x17,0xB0,0x2F,0x6B, 0x20,0x9B,0xFD,0x8C,0x50,0x3C,0x18,0x52,0xB4,0xD1,0xE9,0x63,0xD8,0x49,0xAD,0x21,0x90}, - {0x6B,0xCD,0x18,0x4E,0x5B,0x3D,0x86,0x49,0x1A,0x7E,0xFD,0x20,0x1B,0x23,0xB7,0x26, + .seckey={0x6B,0xCD,0x18,0x4E,0x5B,0x3D,0x86,0x49,0x1A,0x7E,0xFD,0x20,0x1B,0x23,0xB7,0x26, 0xCB,0x11,0x97,0x25,0x03,0xF9,0x74,0x2C,0x2D,0x4F,0x98,0xD3,0x39,0xA2,0x50,0x7E}, - "rUYQbfFYyPmSqmoy4B81MR8hZ6AfFGQRdw"}, - {{0xB2,0x2F,0x75,0xE7,0x47,0x95,0xB9,0xBE,0x63,0x05,0xD0,0xBE,0x63,0x62,0xBC,0xDE}, - {0x03,0xA2,0xA9,0x69,0x7F,0x83,0x3D,0x36,0x50,0xB0,0x34,0x4A,0xD1,0x0D,0xD9,0x58, + .addr="rUYQbfFYyPmSqmoy4B81MR8hZ6AfFGQRdw"}, + {.seed={0xB2,0x2F,0x75,0xE7,0x47,0x95,0xB9,0xBE,0x63,0x05,0xD0,0xBE,0x63,0x62,0xBC,0xDE}, + .pubkey={0x03,0xA2,0xA9,0x69,0x7F,0x83,0x3D,0x36,0x50,0xB0,0x34,0x4A,0xD1,0x0D,0xD9,0x58, 0x34,0xC5,0xA8,0x49,0x06,0xA5,0x1F,0x97,0x11,0x39,0x4C,0xFE,0xA9,0x5A,0xBF,0xD3,0x1B}, - {0x97,0x91,0xE1,0xE5,0x89,0x57,0x43,0x49,0x09,0x1C,0xB7,0xF1,0x00,0xC4,0xBE,0x3B, + .seckey={0x97,0x91,0xE1,0xE5,0x89,0x57,0x43,0x49,0x09,0x1C,0xB7,0xF1,0x00,0xC4,0xBE,0x3B, 0xA4,0xD6,0x7F,0x46,0x2F,0x4E,0x3D,0xE7,0x0B,0x3C,0x6F,0xE1,0xFB,0x49,0x9C,0x63}, - "rML4d4KyRFaCS6r77TtzvEQB6WGExUqcv9"}, - {{0x4B,0xAE,0xC7,0x44,0xC6,0x88,0xC1,0x32,0x64,0x5D,0x84,0x64,0x30,0x70,0x34,0x33}, - {0x03,0x22,0x46,0x84,0xAB,0xA5,0xB0,0x09,0x17,0x01,0xC3,0xAB,0x50,0xCA,0x14,0xA2, + .addr="rML4d4KyRFaCS6r77TtzvEQB6WGExUqcv9"}, + {.seed={0x4B,0xAE,0xC7,0x44,0xC6,0x88,0xC1,0x32,0x64,0x5D,0x84,0x64,0x30,0x70,0x34,0x33}, + .pubkey={0x03,0x22,0x46,0x84,0xAB,0xA5,0xB0,0x09,0x17,0x01,0xC3,0xAB,0x50,0xCA,0x14,0xA2, 0x68,0xC6,0xFA,0xDA,0xAF,0x60,0xD1,0xC9,0xD1,0xAC,0x7D,0x35,0x6B,0xDA,0x37,0xC4,0xBF}, - {0x32,0x76,0x88,0xBF,0xAE,0x1F,0x3D,0xCF,0xF4,0x3A,0xBC,0xFA,0xB2,0xD3,0x0C,0xF8, + .seckey={0x32,0x76,0x88,0xBF,0xAE,0x1F,0x3D,0xCF,0xF4,0x3A,0xBC,0xFA,0xB2,0xD3,0x0C,0xF8, 0xD8,0x98,0x11,0x64,0x2F,0x3A,0x3F,0xDC,0x47,0x45,0x41,0xDA,0x29,0x1D,0xB4,0x16}, - "rhuSsVQ4xKy2vDo54usSAKqfwqJPGw6G9F"}, - {{0xE4,0x35,0x2C,0xEF,0x61,0x98,0x0C,0x0D,0x96,0x43,0x37,0x1B,0x15,0x36,0x4C,0x7F}, - {0x03,0xB6,0xBF,0x72,0x89,0xCA,0x30,0x20,0xD3,0xD7,0x7F,0xB5,0x16,0x43,0x41,0x3C, + .addr="rhuSsVQ4xKy2vDo54usSAKqfwqJPGw6G9F"}, + {.seed={0xE4,0x35,0x2C,0xEF,0x61,0x98,0x0C,0x0D,0x96,0x43,0x37,0x1B,0x15,0x36,0x4C,0x7F}, + .pubkey={0x03,0xB6,0xBF,0x72,0x89,0xCA,0x30,0x20,0xD3,0xD7,0x7F,0xB5,0x16,0x43,0x41,0x3C, 0xCC,0x43,0x68,0x8D,0x78,0xB4,0xEE,0x34,0x27,0x1D,0x5C,0x75,0x8F,0xB4,0x08,0x5B,0xA4}, - {0x5A,0x30,0x70,0x43,0x3F,0x4A,0x6A,0x86,0x8A,0x26,0x44,0xAC,0x26,0xCA,0x96,0xCB, + .seckey={0x5A,0x30,0x70,0x43,0x3F,0x4A,0x6A,0x86,0x8A,0x26,0x44,0xAC,0x26,0xCA,0x96,0xCB, 0xAF,0x44,0x2D,0x62,0xBB,0xE4,0x87,0x99,0x51,0x2D,0xA8,0xCF,0xD1,0x38,0xDB,0x95}, - "rJrJVxcGtPvr9FpVdpAGZfvvjGHUKApbni"}, - {{0xD0,0x0C,0xCA,0xD5,0x2B,0x2C,0x4C,0x35,0xA6,0x2F,0x02,0x3B,0xC8,0x11,0xEE,0xA5}, - {0x03,0xAB,0x25,0xBD,0x7F,0x32,0x6C,0xCB,0x08,0x44,0xFF,0x70,0x4C,0xD1,0x22,0x09, + .addr="rJrJVxcGtPvr9FpVdpAGZfvvjGHUKApbni"}, + {.seed={0xD0,0x0C,0xCA,0xD5,0x2B,0x2C,0x4C,0x35,0xA6,0x2F,0x02,0x3B,0xC8,0x11,0xEE,0xA5}, + .pubkey={0x03,0xAB,0x25,0xBD,0x7F,0x32,0x6C,0xCB,0x08,0x44,0xFF,0x70,0x4C,0xD1,0x22,0x09, 0x52,0x67,0x0B,0x7D,0x7C,0x3E,0xE4,0xD1,0x2B,0x05,0x0B,0x5F,0x3D,0xC8,0x2A,0x16,0xE7}, - {0x55,0xA2,0x8E,0x3B,0xA9,0xA1,0x33,0xA1,0x6F,0xA2,0x0E,0x6A,0x5F,0x50,0x47,0x74, + .seckey={0x55,0xA2,0x8E,0x3B,0xA9,0xA1,0x33,0xA1,0x6F,0xA2,0x0E,0x6A,0x5F,0x50,0x47,0x74, 0x85,0xFC,0x39,0xD5,0x21,0x23,0x5B,0x46,0x18,0x94,0x37,0x1C,0x90,0x22,0x07,0x70}, - "rLsjU161cWg3apNv1tPeQ3FKs3MSYUsieW"}, - {{0x08,0x86,0xA3,0x91,0x6D,0xD5,0xF6,0x36,0xCF,0xFD,0x4E,0xD6,0x90,0x64,0x1C,0xA5}, - {0x02,0x3B,0x48,0xD2,0x6E,0xAE,0xF4,0x29,0x4F,0x29,0xA7,0x05,0xB8,0x3A,0x67,0x36, + .addr="rLsjU161cWg3apNv1tPeQ3FKs3MSYUsieW"}, + {.seed={0x08,0x86,0xA3,0x91,0x6D,0xD5,0xF6,0x36,0xCF,0xFD,0x4E,0xD6,0x90,0x64,0x1C,0xA5}, + .pubkey={0x02,0x3B,0x48,0xD2,0x6E,0xAE,0xF4,0x29,0x4F,0x29,0xA7,0x05,0xB8,0x3A,0x67,0x36, 0xDA,0xCF,0xEB,0x72,0x34,0x3A,0xA5,0x13,0x9A,0xF5,0x2E,0x91,0xC8,0xED,0x27,0x8B,0xE7}, - {0xB4,0x67,0x02,0xDA,0xD6,0xBB,0x10,0x74,0x38,0x0D,0xFB,0xA7,0x5E,0x1F,0xD4,0x07, + .seckey={0xB4,0x67,0x02,0xDA,0xD6,0xBB,0x10,0x74,0x38,0x0D,0xFB,0xA7,0x5E,0x1F,0xD4,0x07, 0x37,0xCA,0x86,0x03,0x42,0x81,0xF7,0x88,0x81,0x86,0xF7,0xFF,0x04,0xE0,0xD5,0xA9}, - "rEvTZcokycXRHtvhvNphV6z3792SxGqXXL"}, - {{0x96,0x14,0x14,0xBE,0xCC,0x47,0xFF,0xD8,0x5B,0x6A,0x58,0x7A,0x07,0x32,0x3B,0x81}, - {0x03,0x58,0x9F,0xAB,0x0E,0xE6,0xA2,0x4C,0x5F,0x69,0x5E,0xD3,0xB5,0xD7,0x55,0x84, + .addr="rEvTZcokycXRHtvhvNphV6z3792SxGqXXL"}, + {.seed={0x96,0x14,0x14,0xBE,0xCC,0x47,0xFF,0xD8,0x5B,0x6A,0x58,0x7A,0x07,0x32,0x3B,0x81}, + .pubkey={0x03,0x58,0x9F,0xAB,0x0E,0xE6,0xA2,0x4C,0x5F,0x69,0x5E,0xD3,0xB5,0xD7,0x55,0x84, 0x8D,0xAE,0xB0,0x95,0x48,0xEB,0x87,0xE8,0x51,0xF4,0x5C,0xB2,0x52,0x50,0x81,0x5E,0xAE}, - {0xDC,0x68,0x56,0x7F,0x75,0x88,0x8D,0xB3,0xB9,0xD2,0x53,0x07,0x34,0x94,0xA3,0xDD, + .seckey={0xDC,0x68,0x56,0x7F,0x75,0x88,0x8D,0xB3,0xB9,0xD2,0x53,0x07,0x34,0x94,0xA3,0xDD, 0x0E,0x54,0xBD,0x25,0x21,0x08,0x9B,0xEA,0x1D,0x3F,0xA7,0x81,0x2E,0x01,0xFB,0x12}, - "rLmR9oBFB9dk7xzshrRtCaLQqB35ZnFR7u"}, - {{0xD0,0x73,0x46,0x77,0x1B,0x7C,0xDD,0xF5,0xB8,0xC6,0xAD,0x6D,0x61,0xFA,0x39,0x5A}, - {0x03,0x2C,0x6E,0x59,0xED,0x4C,0xED,0x4F,0xDF,0x99,0x3A,0x81,0x38,0xA0,0x82,0x49, + .addr="rLmR9oBFB9dk7xzshrRtCaLQqB35ZnFR7u"}, + {.seed={0xD0,0x73,0x46,0x77,0x1B,0x7C,0xDD,0xF5,0xB8,0xC6,0xAD,0x6D,0x61,0xFA,0x39,0x5A}, + .pubkey={0x03,0x2C,0x6E,0x59,0xED,0x4C,0xED,0x4F,0xDF,0x99,0x3A,0x81,0x38,0xA0,0x82,0x49, 0xA9,0x08,0xCB,0x5F,0x4D,0x09,0x77,0x8A,0xF2,0xAD,0x2E,0xDE,0x21,0x71,0xC4,0x68,0x0D}, - {0xA7,0x19,0x7C,0x70,0xAC,0x21,0xB5,0x88,0xB5,0xB5,0x30,0x5E,0x35,0x80,0x6F,0x18, + .seckey={0xA7,0x19,0x7C,0x70,0xAC,0x21,0xB5,0x88,0xB5,0xB5,0x30,0x5E,0x35,0x80,0x6F,0x18, 0xA6,0x74,0x3F,0x2F,0x55,0x5A,0xDE,0xF7,0x9A,0xAC,0xAC,0xE9,0x5D,0x5B,0x02,0xD2}, - "rfJ21METXMqkygW1qWJHZnBPhXHAmjSKwn"}, - {{0xE6,0x8F,0x9A,0xA4,0x0E,0x73,0x2B,0x57,0x13,0xEE,0x4D,0xC3,0xDD,0xB8,0xB9,0x75}, - {0x02,0x20,0x8D,0x14,0xE1,0x30,0xF2,0x50,0xC3,0xDD,0x37,0xBF,0x89,0x13,0x46,0xF2, + .addr="rfJ21METXMqkygW1qWJHZnBPhXHAmjSKwn"}, + {.seed={0xE6,0x8F,0x9A,0xA4,0x0E,0x73,0x2B,0x57,0x13,0xEE,0x4D,0xC3,0xDD,0xB8,0xB9,0x75}, + .pubkey={0x02,0x20,0x8D,0x14,0xE1,0x30,0xF2,0x50,0xC3,0xDD,0x37,0xBF,0x89,0x13,0x46,0xF2, 0x35,0xE2,0x75,0x52,0x91,0x0C,0x1F,0x16,0x0A,0x1A,0x3B,0xF7,0xD1,0x8F,0xF9,0x87,0xBF}, - {0x17,0x49,0xCE,0xFB,0xA1,0xD2,0x03,0xBC,0x53,0x4C,0x66,0x6F,0x9B,0x4E,0x88,0x5A, + .seckey={0x17,0x49,0xCE,0xFB,0xA1,0xD2,0x03,0xBC,0x53,0x4C,0x66,0x6F,0x9B,0x4E,0x88,0x5A, 0xCB,0xBB,0x25,0x96,0x59,0x48,0x72,0xC5,0xD3,0x8C,0x35,0x29,0x44,0x6F,0x02,0xB0}, - "rKtzApfAhyETwX6uhgAxPHXELzd9snNNQp"}, - {{0x00,0x5B,0x64,0x20,0x65,0xF1,0x78,0x8D,0x52,0x3B,0x14,0x8C,0x72,0xB3,0x36,0x95}, - {0x02,0xFB,0xF2,0xC9,0x46,0x4A,0x2D,0x61,0xF0,0xD6,0x3A,0x26,0x10,0xD2,0x1E,0xAC, + .addr="rKtzApfAhyETwX6uhgAxPHXELzd9snNNQp"}, + {.seed={0x00,0x5B,0x64,0x20,0x65,0xF1,0x78,0x8D,0x52,0x3B,0x14,0x8C,0x72,0xB3,0x36,0x95}, + .pubkey={0x02,0xFB,0xF2,0xC9,0x46,0x4A,0x2D,0x61,0xF0,0xD6,0x3A,0x26,0x10,0xD2,0x1E,0xAC, 0xD3,0xAB,0x13,0xF1,0x22,0xB5,0x67,0xBD,0xA5,0xF8,0x22,0x3D,0x2A,0xE0,0x92,0x17,0xCE}, - {0xDF,0xCB,0xE0,0x55,0xF4,0x02,0x89,0x24,0xF0,0x8E,0xE0,0x7E,0x5E,0x1E,0xCA,0x70, + .seckey={0xDF,0xCB,0xE0,0x55,0xF4,0x02,0x89,0x24,0xF0,0x8E,0xE0,0x7E,0x5E,0x1E,0xCA,0x70, 0x5B,0x27,0x05,0x1C,0xAF,0x2B,0xA9,0x04,0xA4,0xCC,0x4A,0x41,0x69,0xCE,0xF3,0x56}, - "rfZGGsJvDoKuQugtqe6F3gYF2acVsakwpN"}, - {{0x04,0x85,0xFB,0x73,0xE3,0x20,0x9F,0x46,0x61,0x24,0xD7,0x0B,0x73,0x01,0x3B,0x7F}, - {0x03,0xD6,0x4A,0xFF,0x62,0x93,0xC5,0xF2,0xAB,0x1E,0x49,0xD9,0x43,0x87,0x4E,0x9D, + .addr="rfZGGsJvDoKuQugtqe6F3gYF2acVsakwpN"}, + {.seed={0x04,0x85,0xFB,0x73,0xE3,0x20,0x9F,0x46,0x61,0x24,0xD7,0x0B,0x73,0x01,0x3B,0x7F}, + .pubkey={0x03,0xD6,0x4A,0xFF,0x62,0x93,0xC5,0xF2,0xAB,0x1E,0x49,0xD9,0x43,0x87,0x4E,0x9D, 0x8C,0x1C,0x8E,0x31,0x0D,0xE3,0x12,0x9B,0xDA,0x1C,0xBE,0x68,0x35,0x67,0x10,0xCB,0x7E}, - {0xB8,0x75,0xD8,0x38,0xF9,0x8E,0xEE,0x21,0x52,0x08,0x52,0xD1,0xE6,0x8D,0x1D,0x24, + .seckey={0xB8,0x75,0xD8,0x38,0xF9,0x8E,0xEE,0x21,0x52,0x08,0x52,0xD1,0xE6,0x8D,0x1D,0x24, 0x57,0x4D,0x3D,0xD1,0x17,0xA9,0xD4,0x03,0xE3,0xB5,0xD5,0x71,0x75,0x0D,0x43,0xFE}, - "rrpPqHKZZirhRZXERvhd4uaNviXFxPfAqL"}, - {{0x6E,0x3B,0xA9,0x5A,0x9B,0x01,0x25,0x68,0x72,0xC6,0x92,0x0B,0x8E,0x41,0x66,0xC1}, - {0x03,0xA5,0x99,0x0F,0xC7,0x1B,0x92,0xB3,0x07,0x0C,0x45,0xBC,0x84,0x31,0x61,0x9C, + .addr="rrpPqHKZZirhRZXERvhd4uaNviXFxPfAqL"}, + {.seed={0x6E,0x3B,0xA9,0x5A,0x9B,0x01,0x25,0x68,0x72,0xC6,0x92,0x0B,0x8E,0x41,0x66,0xC1}, + .pubkey={0x03,0xA5,0x99,0x0F,0xC7,0x1B,0x92,0xB3,0x07,0x0C,0x45,0xBC,0x84,0x31,0x61,0x9C, 0xF8,0x86,0x20,0x90,0x20,0x16,0x26,0xB9,0xCC,0x55,0x96,0x1E,0x6B,0x90,0xE0,0x5C,0x04}, - {0x47,0xC2,0xE3,0xBB,0x91,0xC2,0xBD,0x02,0x63,0x11,0xC6,0x9D,0x09,0x6D,0x1E,0xE0, + .seckey={0x47,0xC2,0xE3,0xBB,0x91,0xC2,0xBD,0x02,0x63,0x11,0xC6,0x9D,0x09,0x6D,0x1E,0xE0, 0xD3,0x15,0x78,0x14,0xF5,0x0A,0x20,0x8C,0xF1,0x58,0xB4,0x98,0xF6,0xF5,0x45,0x61}, - "rLK3rs3qjCoMEZ4NymVLn3xQ48Y3HWxSJT"}, - {{0xDC,0x53,0x22,0x9E,0x30,0x02,0xAF,0xFB,0x9B,0x78,0x97,0xD5,0x74,0x02,0x40,0x11}, - {0x02,0xD1,0xA5,0x65,0x10,0x30,0xE8,0xE8,0x49,0x1E,0x4C,0xCB,0xDA,0xDD,0xC1,0x6D, + .addr="rLK3rs3qjCoMEZ4NymVLn3xQ48Y3HWxSJT"}, + {.seed={0xDC,0x53,0x22,0x9E,0x30,0x02,0xAF,0xFB,0x9B,0x78,0x97,0xD5,0x74,0x02,0x40,0x11}, + .pubkey={0x02,0xD1,0xA5,0x65,0x10,0x30,0xE8,0xE8,0x49,0x1E,0x4C,0xCB,0xDA,0xDD,0xC1,0x6D, 0x77,0x2B,0xBA,0x2D,0x66,0x77,0x5C,0xB7,0xF7,0x5F,0xE2,0xD8,0x17,0x68,0x93,0x36,0x0A}, - {0xF7,0x7C,0x0B,0x27,0x03,0xB6,0xEE,0x18,0x47,0x32,0x32,0x60,0xC0,0x41,0x57,0x6D, + .seckey={0xF7,0x7C,0x0B,0x27,0x03,0xB6,0xEE,0x18,0x47,0x32,0x32,0x60,0xC0,0x41,0x57,0x6D, 0x67,0xB0,0x1A,0x88,0x7E,0x14,0x35,0xF3,0xCB,0xDC,0x80,0xE3,0x63,0x4B,0xE2,0xE6}, - "rQDdUbPvEMn2GyZaHcaoLA5kb3tc2Hmcjw"}, - {{0x28,0x60,0x32,0xD1,0x23,0x21,0x4B,0xBB,0xC2,0x9A,0x46,0x47,0x6F,0x44,0x23,0xD6}, - {0x03,0xC6,0xB0,0x71,0x0D,0x59,0x5B,0x3D,0xE9,0x45,0x69,0x08,0x86,0x7C,0x7B,0x4C, + .addr="rQDdUbPvEMn2GyZaHcaoLA5kb3tc2Hmcjw"}, + {.seed={0x28,0x60,0x32,0xD1,0x23,0x21,0x4B,0xBB,0xC2,0x9A,0x46,0x47,0x6F,0x44,0x23,0xD6}, + .pubkey={0x03,0xC6,0xB0,0x71,0x0D,0x59,0x5B,0x3D,0xE9,0x45,0x69,0x08,0x86,0x7C,0x7B,0x4C, 0x0B,0x1A,0x0C,0x3D,0xDE,0x6B,0x50,0x80,0xCA,0x74,0x03,0x6A,0xBC,0x9D,0x45,0x31,0x21}, - {0xD5,0xAC,0xDA,0x20,0xD0,0x09,0xEF,0x93,0xD3,0xC0,0xF7,0xB9,0x08,0x20,0x3A,0xFA, + .seckey={0xD5,0xAC,0xDA,0x20,0xD0,0x09,0xEF,0x93,0xD3,0xC0,0xF7,0xB9,0x08,0x20,0x3A,0xFA, 0x6D,0x5C,0xDC,0xD6,0x5F,0xC3,0xD6,0x02,0x66,0x5D,0x63,0x11,0x02,0x23,0x56,0xD4}, - "rsaHcnSaQqyUh3ZHbfBXoVA2kU5DcsoLev"}, - {{0x41,0x21,0xFA,0x4A,0xDC,0x02,0xF0,0xF9,0x49,0x08,0x95,0xEA,0xF0,0x4A,0xEC,0x39}, - {0x03,0x56,0x5B,0x47,0xFF,0x02,0x01,0x64,0x64,0x0B,0x6F,0xE3,0x45,0x63,0xC6,0xD6, + .addr="rsaHcnSaQqyUh3ZHbfBXoVA2kU5DcsoLev"}, + {.seed={0x41,0x21,0xFA,0x4A,0xDC,0x02,0xF0,0xF9,0x49,0x08,0x95,0xEA,0xF0,0x4A,0xEC,0x39}, + .pubkey={0x03,0x56,0x5B,0x47,0xFF,0x02,0x01,0x64,0x64,0x0B,0x6F,0xE3,0x45,0x63,0xC6,0xD6, 0xD8,0xC7,0x95,0xFB,0x28,0x2F,0xD0,0x16,0x3E,0xDE,0xB5,0x05,0x89,0xCE,0x91,0x87,0xDA}, - {0x92,0x91,0x84,0x4E,0x08,0x44,0x8F,0x8D,0x38,0xAE,0xF8,0xB3,0xC3,0xD8,0x3A,0xF3, + .seckey={0x92,0x91,0x84,0x4E,0x08,0x44,0x8F,0x8D,0x38,0xAE,0xF8,0xB3,0xC3,0xD8,0x3A,0xF3, 0x6B,0x6C,0xD5,0x64,0x59,0x7F,0x5C,0x31,0x82,0x05,0xE7,0x38,0x82,0xF7,0xB1,0x9D}, - "rfD992xwtGE81HFt63FJ9GrmjqpMmE9DjX"}, - {{0x51,0x47,0x8C,0x21,0xB8,0xBA,0x1A,0x79,0x79,0x3E,0x4E,0x1F,0x84,0xC5,0xF2,0xAF}, - {0x02,0xBD,0xD3,0xCE,0x87,0xE0,0x71,0xD1,0x43,0x12,0x78,0x09,0x27,0x13,0x93,0x3A, + .addr="rfD992xwtGE81HFt63FJ9GrmjqpMmE9DjX"}, + {.seed={0x51,0x47,0x8C,0x21,0xB8,0xBA,0x1A,0x79,0x79,0x3E,0x4E,0x1F,0x84,0xC5,0xF2,0xAF}, + .pubkey={0x02,0xBD,0xD3,0xCE,0x87,0xE0,0x71,0xD1,0x43,0x12,0x78,0x09,0x27,0x13,0x93,0x3A, 0xB0,0xE8,0xAC,0x70,0x50,0x20,0x7E,0x03,0xC7,0x25,0xCA,0xF2,0x2C,0xE3,0x56,0xF0,0x80}, - {0xBD,0x3F,0xDA,0x5C,0x4B,0xB2,0xAA,0x89,0xD2,0x31,0x70,0x07,0xDF,0x2A,0x20,0xBB, + .seckey={0xBD,0x3F,0xDA,0x5C,0x4B,0xB2,0xAA,0x89,0xD2,0x31,0x70,0x07,0xDF,0x2A,0x20,0xBB, 0xD3,0x12,0x96,0xC1,0xCC,0x6F,0xDD,0xCB,0xC4,0xFD,0x71,0xCA,0xDC,0xAE,0x3B,0xFA}, - "rfvXs2SzVri4gK7iLo89V1VagjZFxXo9Yy"}, - {{0x7B,0x12,0x69,0x74,0x33,0xD8,0x99,0x4D,0x1E,0xBF,0x98,0x69,0x0D,0x57,0xA4,0x1C}, - {0x03,0x3A,0x6B,0x78,0x60,0x0C,0x0B,0x47,0xB2,0x81,0x63,0x47,0x3C,0x9A,0x48,0x23, + .addr="rfvXs2SzVri4gK7iLo89V1VagjZFxXo9Yy"}, + {.seed={0x7B,0x12,0x69,0x74,0x33,0xD8,0x99,0x4D,0x1E,0xBF,0x98,0x69,0x0D,0x57,0xA4,0x1C}, + .pubkey={0x03,0x3A,0x6B,0x78,0x60,0x0C,0x0B,0x47,0xB2,0x81,0x63,0x47,0x3C,0x9A,0x48,0x23, 0x5C,0xC0,0x86,0xDE,0xAF,0x92,0xA5,0xC6,0x99,0xA0,0xA9,0x66,0xBB,0xA6,0x43,0x79,0x1F}, - {0x9A,0xD7,0x7A,0xEF,0x71,0x7B,0x26,0x32,0x3C,0xCC,0xE4,0xDE,0x74,0xAB,0x69,0x0C, + .seckey={0x9A,0xD7,0x7A,0xEF,0x71,0x7B,0x26,0x32,0x3C,0xCC,0xE4,0xDE,0x74,0xAB,0x69,0x0C, 0x65,0x00,0xEE,0x33,0x43,0x73,0xA4,0xA3,0x29,0x3F,0x78,0x15,0x76,0xF7,0x43,0xB2}, - "rfPrK4Wd87KNxS8sHY4YwWvhcWafGUr6MA"}, - {{0x8F,0x94,0xC3,0xE1,0xD5,0xFF,0xBB,0x25,0x8B,0xF0,0xA1,0xF5,0xD9,0x3D,0xAE,0x95}, - {0x02,0x48,0x25,0x2D,0x93,0x06,0x30,0x16,0xD4,0xF6,0xCF,0xCB,0x4B,0xA4,0xCA,0x21, + .addr="rfPrK4Wd87KNxS8sHY4YwWvhcWafGUr6MA"}, + {.seed={0x8F,0x94,0xC3,0xE1,0xD5,0xFF,0xBB,0x25,0x8B,0xF0,0xA1,0xF5,0xD9,0x3D,0xAE,0x95}, + .pubkey={0x02,0x48,0x25,0x2D,0x93,0x06,0x30,0x16,0xD4,0xF6,0xCF,0xCB,0x4B,0xA4,0xCA,0x21, 0x7C,0x91,0x92,0x62,0x19,0x41,0x97,0xDD,0x91,0x15,0x05,0x72,0x64,0x3A,0xBB,0xA6,0x67}, - {0x86,0xD3,0x84,0xF4,0x45,0xF9,0xF7,0xA0,0x73,0x8C,0xB8,0xE1,0xAB,0xE0,0xFA,0xAB, + .seckey={0x86,0xD3,0x84,0xF4,0x45,0xF9,0xF7,0xA0,0x73,0x8C,0xB8,0xE1,0xAB,0xE0,0xFA,0xAB, 0x09,0x8B,0xDE,0xD4,0x82,0x76,0x49,0xCA,0x31,0xC0,0xB8,0x75,0xD0,0x9D,0x1C,0x33}, - "rJ7VtUxctZEXqeYud3Caakv21UJksrXouq"}, - {{0xD0,0x2B,0xFC,0x58,0xC1,0xF6,0xCC,0xEC,0x84,0xB4,0x2D,0x2A,0x80,0xD2,0x51,0x78}, - {0x03,0xBB,0xF0,0xD5,0x04,0x63,0xFE,0x0E,0x28,0x9F,0x1D,0x4F,0xF3,0x0F,0x14,0x82, + .addr="rJ7VtUxctZEXqeYud3Caakv21UJksrXouq"}, + {.seed={0xD0,0x2B,0xFC,0x58,0xC1,0xF6,0xCC,0xEC,0x84,0xB4,0x2D,0x2A,0x80,0xD2,0x51,0x78}, + .pubkey={0x03,0xBB,0xF0,0xD5,0x04,0x63,0xFE,0x0E,0x28,0x9F,0x1D,0x4F,0xF3,0x0F,0x14,0x82, 0x23,0x00,0xDB,0x6B,0x90,0x9F,0x9A,0x52,0x78,0x82,0x26,0x1F,0x72,0x18,0xF5,0x49,0xDD}, - {0x7B,0xA2,0x53,0x96,0x22,0x33,0x6E,0x49,0xD7,0xCA,0xE8,0x15,0x46,0xD1,0xD5,0xDA, + .seckey={0x7B,0xA2,0x53,0x96,0x22,0x33,0x6E,0x49,0xD7,0xCA,0xE8,0x15,0x46,0xD1,0xD5,0xDA, 0xB5,0x84,0xBD,0x35,0x68,0xEB,0x6C,0x00,0x8F,0xE4,0xDA,0xC7,0x11,0x07,0x62,0xED}, - "rPp3JQPodyon8FS3Xi7vmj7eLkVuQG3DNw"}, - {{0x70,0xD0,0xFA,0x4C,0xE3,0x0E,0xBD,0x73,0x7B,0x1E,0xEE,0x48,0x25,0x2F,0xAC,0xAE}, - {0x03,0x29,0x71,0xCB,0xB1,0x40,0xBF,0xCB,0x43,0x1D,0x23,0xDC,0x29,0x30,0x71,0x3B, + .addr="rPp3JQPodyon8FS3Xi7vmj7eLkVuQG3DNw"}, + {.seed={0x70,0xD0,0xFA,0x4C,0xE3,0x0E,0xBD,0x73,0x7B,0x1E,0xEE,0x48,0x25,0x2F,0xAC,0xAE}, + .pubkey={0x03,0x29,0x71,0xCB,0xB1,0x40,0xBF,0xCB,0x43,0x1D,0x23,0xDC,0x29,0x30,0x71,0x3B, 0xEC,0xA3,0x23,0xC3,0x65,0x98,0x52,0x27,0x5D,0x2A,0x6E,0x79,0xD2,0x43,0xC1,0xE7,0xB7}, - {0x03,0xFD,0x46,0xBA,0xC2,0x9F,0x06,0x73,0x31,0x47,0x7B,0x94,0x81,0x20,0x54,0x78, + .seckey={0x03,0xFD,0x46,0xBA,0xC2,0x9F,0x06,0x73,0x31,0x47,0x7B,0x94,0x81,0x20,0x54,0x78, 0x0D,0x48,0x81,0x6A,0x89,0xBD,0x9D,0xA2,0xF0,0x85,0xDA,0x2F,0x1D,0x01,0xC7,0x22}, - "rLj3kdAoNSaLbM78rZL4sxPzLUmnD6TJx9"}, - {{0x09,0xD8,0x00,0x1B,0xF3,0xED,0x9D,0x61,0x37,0xAA,0xF9,0x2A,0x59,0xB7,0xE5,0x83}, - {0x03,0x3F,0x4D,0x07,0xBC,0xEA,0x06,0xB8,0x52,0xD0,0x42,0xDC,0x2B,0x18,0x5E,0xAD, + .addr="rLj3kdAoNSaLbM78rZL4sxPzLUmnD6TJx9"}, + {.seed={0x09,0xD8,0x00,0x1B,0xF3,0xED,0x9D,0x61,0x37,0xAA,0xF9,0x2A,0x59,0xB7,0xE5,0x83}, + .pubkey={0x03,0x3F,0x4D,0x07,0xBC,0xEA,0x06,0xB8,0x52,0xD0,0x42,0xDC,0x2B,0x18,0x5E,0xAD, 0xEA,0xF1,0x42,0x5A,0x2B,0x73,0xD4,0xF5,0x74,0x1B,0x05,0xD4,0x9C,0x1B,0xE6,0xDF,0x59}, - {0x5B,0x6A,0x89,0x0A,0x3C,0x10,0xA9,0xAE,0x72,0x89,0xC2,0x9A,0x4D,0xFA,0xE9,0xFE, + .seckey={0x5B,0x6A,0x89,0x0A,0x3C,0x10,0xA9,0xAE,0x72,0x89,0xC2,0x9A,0x4D,0xFA,0xE9,0xFE, 0x36,0x8C,0xDA,0xE5,0x57,0x9A,0x39,0xF6,0xB6,0xE3,0xDB,0x27,0x46,0xFE,0x64,0xB1}, - "rU39rkKyaPEDdSmyqTiwAzMWHXvFDjtgvB"}, - {{0x31,0x4D,0x49,0x2B,0x8D,0x6A,0x2A,0xCC,0x18,0x6C,0x4D,0xEF,0x51,0xC7,0x5A,0x88}, - {0x03,0x7A,0x92,0xC7,0x9E,0xC2,0x64,0xFA,0x7E,0x8B,0x27,0x80,0xB1,0x43,0xF2,0x78, + .addr="rU39rkKyaPEDdSmyqTiwAzMWHXvFDjtgvB"}, + {.seed={0x31,0x4D,0x49,0x2B,0x8D,0x6A,0x2A,0xCC,0x18,0x6C,0x4D,0xEF,0x51,0xC7,0x5A,0x88}, + .pubkey={0x03,0x7A,0x92,0xC7,0x9E,0xC2,0x64,0xFA,0x7E,0x8B,0x27,0x80,0xB1,0x43,0xF2,0x78, 0x98,0x42,0xF5,0x11,0xB9,0x83,0x2D,0xEA,0xB2,0x80,0x11,0x36,0x78,0x27,0xF6,0x4C,0x06}, - {0x10,0xF6,0x70,0xA7,0x7C,0x5F,0x7C,0x47,0x35,0xE0,0x83,0xA0,0x42,0x4E,0xF2,0x9F, + .seckey={0x10,0xF6,0x70,0xA7,0x7C,0x5F,0x7C,0x47,0x35,0xE0,0x83,0xA0,0x42,0x4E,0xF2,0x9F, 0x17,0x6E,0xA8,0xEA,0xD3,0x5B,0x0B,0x4C,0x09,0xB8,0x8C,0x5B,0xFF,0x1C,0x67,0xF1}, - "rstDhfAJHDmJ6bJWMo6cmRR4BqDDBtfVZY"}, - {{0x44,0x21,0x1C,0x1C,0xAB,0x78,0x83,0xA4,0x62,0x56,0xA6,0x2D,0x59,0x39,0x47,0x7B}, - {0x02,0x88,0xEC,0xDF,0x6A,0x6C,0x38,0x63,0x4D,0xF9,0xA1,0x02,0x82,0xDD,0x65,0x5A, + .addr="rstDhfAJHDmJ6bJWMo6cmRR4BqDDBtfVZY"}, + {.seed={0x44,0x21,0x1C,0x1C,0xAB,0x78,0x83,0xA4,0x62,0x56,0xA6,0x2D,0x59,0x39,0x47,0x7B}, + .pubkey={0x02,0x88,0xEC,0xDF,0x6A,0x6C,0x38,0x63,0x4D,0xF9,0xA1,0x02,0x82,0xDD,0x65,0x5A, 0x84,0x50,0x26,0x12,0x6F,0xA9,0x60,0x66,0x20,0x25,0xD9,0xBC,0xC4,0x42,0x1C,0xE0,0x76}, - {0x31,0x7D,0x2F,0x06,0xFA,0xBC,0xC2,0xE1,0x37,0x89,0x58,0x57,0x76,0x62,0xDB,0x76, + .seckey={0x31,0x7D,0x2F,0x06,0xFA,0xBC,0xC2,0xE1,0x37,0x89,0x58,0x57,0x76,0x62,0xDB,0x76, 0x4D,0x5F,0x43,0x19,0x35,0xA4,0xB6,0x95,0x64,0xBA,0x98,0x53,0xCA,0x9C,0x94,0xAF}, - "rLdLivptphqe4SLAEWaTYoD9ur5af5dnJ1"}, - {{0xDB,0xEB,0xF6,0xC6,0x1D,0x64,0x25,0xAF,0xB4,0x52,0x85,0x83,0xA4,0x21,0x2E,0x57}, - {0x02,0x20,0x87,0xC0,0xBA,0xCD,0x25,0xEC,0x51,0x4B,0xE7,0x73,0x5E,0x1C,0x28,0x39, + .addr="rLdLivptphqe4SLAEWaTYoD9ur5af5dnJ1"}, + {.seed={0xDB,0xEB,0xF6,0xC6,0x1D,0x64,0x25,0xAF,0xB4,0x52,0x85,0x83,0xA4,0x21,0x2E,0x57}, + .pubkey={0x02,0x20,0x87,0xC0,0xBA,0xCD,0x25,0xEC,0x51,0x4B,0xE7,0x73,0x5E,0x1C,0x28,0x39, 0xA1,0x82,0xFB,0xC6,0x81,0x2B,0xE8,0xC4,0x0F,0x22,0xF4,0xE5,0x27,0x97,0x7E,0x31,0xFC}, - {0xFF,0x37,0xB9,0xD1,0x0E,0x21,0x52,0x35,0x18,0x76,0x37,0xA7,0xB8,0x96,0xB9,0x69, + .seckey={0xFF,0x37,0xB9,0xD1,0x0E,0x21,0x52,0x35,0x18,0x76,0x37,0xA7,0xB8,0x96,0xB9,0x69, 0xB9,0xA3,0x5B,0xC9,0xB1,0x6A,0x18,0x14,0x9F,0xDB,0xE2,0x69,0xEF,0x59,0x28,0x70}, - "rsYryUWhbYRiQivh693pgjnseAwPHezNj1"} + .addr="rsYryUWhbYRiQivh693pgjnseAwPHezNj1"} }; inline static TestKeyData const ed25519TestVectors[] = { - {{0xAF,0x41,0xFF,0x66,0xF7,0x5E,0xBD,0x3A,0x6B,0x18,0xFB,0x7A,0x1D,0xF6,0x1C,0x97}, - {0xED,0x48,0xCB,0xBB,0xE0,0xEE,0x7B,0x86,0x86,0xA7,0xDE,0x9F,0x0A,0x01,0x59,0x73, + {.seed={0xAF,0x41,0xFF,0x66,0xF7,0x5E,0xBD,0x3A,0x6B,0x18,0xFB,0x7A,0x1D,0xF6,0x1C,0x97}, + .pubkey={0xED,0x48,0xCB,0xBB,0xE0,0xEE,0x7B,0x86,0x86,0xA7,0xDE,0x9F,0x0A,0x01,0x59,0x73, 0x4E,0x65,0xF9,0xC3,0x69,0x94,0x7F,0x2E,0x26,0x96,0x23,0x2B,0x46,0x1E,0x55,0x32,0x13}, - {0x1A,0x10,0x97,0xFC,0xD9,0xCE,0x4E,0x1D,0xA2,0x46,0x66,0xB6,0x98,0x87,0x97,0x66, + .seckey={0x1A,0x10,0x97,0xFC,0xD9,0xCE,0x4E,0x1D,0xA2,0x46,0x66,0xB6,0x98,0x87,0x97,0x66, 0xE1,0x75,0x75,0x47,0xD1,0xD4,0xE3,0x64,0xB6,0x43,0x55,0xF7,0xC8,0x4B,0xA0,0xF3}, - "rVAEQBhWT6nZ4woEifdN3TMMdUZaxeXnR"}, - {{0x14,0x0C,0x1D,0x08,0x13,0x19,0x33,0x9C,0x79,0x9D,0xC6,0xA1,0x65,0x95,0x1B,0xE1}, - {0xED,0x3B,0xC8,0x2E,0xF4,0x5F,0x89,0x09,0xCC,0x00,0xF8,0xB7,0xAA,0xF0,0x59,0x31, + .addr="rVAEQBhWT6nZ4woEifdN3TMMdUZaxeXnR"}, + {.seed={0x14,0x0C,0x1D,0x08,0x13,0x19,0x33,0x9C,0x79,0x9D,0xC6,0xA1,0x65,0x95,0x1B,0xE1}, + .pubkey={0xED,0x3B,0xC8,0x2E,0xF4,0x5F,0x89,0x09,0xCC,0x00,0xF8,0xB7,0xAA,0xF0,0x59,0x31, 0x68,0x14,0x11,0x75,0x8C,0x11,0x71,0x24,0x87,0x50,0x66,0xC2,0x83,0x98,0xFE,0x15,0x6D}, - {0xFE,0x3E,0x5A,0x82,0xB8,0x0D,0xD8,0x2E,0x91,0x5F,0x76,0x38,0x94,0x2A,0x33,0x2C, + .seckey={0xFE,0x3E,0x5A,0x82,0xB8,0x0D,0xD8,0x2E,0x91,0x5F,0x76,0x38,0x94,0x2A,0x33,0x2C, 0xE3,0x06,0x88,0x79,0x74,0x0C,0x7E,0x90,0xE2,0x20,0xA4,0xFB,0x0B,0x37,0xCE,0xC8}, - "rK57dJ9533WtoY8NNwVWGY7ffuAc8WCcPE"}, - {{0x86,0x53,0x23,0xB6,0xE4,0x5A,0xD6,0xEE,0xFA,0x27,0x9F,0xA5,0x84,0x85,0x2E,0xD4}, - {0xED,0xE8,0x34,0x22,0xEB,0xE0,0x75,0x70,0x73,0x12,0x66,0x1E,0x4B,0x03,0x3A,0x29, + .addr="rK57dJ9533WtoY8NNwVWGY7ffuAc8WCcPE"}, + {.seed={0x86,0x53,0x23,0xB6,0xE4,0x5A,0xD6,0xEE,0xFA,0x27,0x9F,0xA5,0x84,0x85,0x2E,0xD4}, + .pubkey={0xED,0xE8,0x34,0x22,0xEB,0xE0,0x75,0x70,0x73,0x12,0x66,0x1E,0x4B,0x03,0x3A,0x29, 0xBA,0x86,0x38,0x62,0x30,0x50,0x0C,0xF2,0x8C,0xF1,0x65,0xF3,0xC2,0x1E,0x90,0x6D,0x00}, - {0xA3,0xC4,0xE2,0x43,0xA4,0x64,0x4E,0x73,0x8A,0x24,0x7A,0x59,0xAA,0xBB,0x5C,0x89, + .seckey={0xA3,0xC4,0xE2,0x43,0xA4,0x64,0x4E,0x73,0x8A,0x24,0x7A,0x59,0xAA,0xBB,0x5C,0x89, 0xE4,0x09,0x0D,0x1B,0x73,0x02,0xF2,0x45,0x82,0x64,0x87,0xC8,0x38,0xDA,0x69,0x89}, - "rfZiEDieHSHsQJ1UNfv2jYDuQawdRSBFwz"}, - {{0xC3,0x90,0x0B,0x26,0x1C,0x5E,0x7D,0x50,0xBA,0xC7,0x12,0x2D,0x97,0x35,0xDB,0xF9}, - {0xED,0x8D,0x64,0x8A,0x7B,0xD5,0xAD,0x7E,0xF2,0x41,0x5A,0x5D,0x38,0xA9,0xC1,0x3A, + .addr="rfZiEDieHSHsQJ1UNfv2jYDuQawdRSBFwz"}, + {.seed={0xC3,0x90,0x0B,0x26,0x1C,0x5E,0x7D,0x50,0xBA,0xC7,0x12,0x2D,0x97,0x35,0xDB,0xF9}, + .pubkey={0xED,0x8D,0x64,0x8A,0x7B,0xD5,0xAD,0x7E,0xF2,0x41,0x5A,0x5D,0x38,0xA9,0xC1,0x3A, 0x82,0xF0,0xD2,0x51,0x4B,0x7F,0xDC,0x47,0x57,0x04,0xC0,0x89,0x42,0x40,0x0C,0x69,0x38}, - {0x79,0xE6,0x10,0x38,0xA3,0x7E,0xB1,0x37,0xA7,0x7F,0xE0,0xDF,0x17,0xC8,0x44,0x9E, + .seckey={0x79,0xE6,0x10,0x38,0xA3,0x7E,0xB1,0x37,0xA7,0x7F,0xE0,0xDF,0x17,0xC8,0x44,0x9E, 0xA1,0x7A,0x85,0x71,0xD5,0x7D,0x33,0x15,0x4B,0x09,0x2D,0x39,0x38,0xAD,0x6A,0x0D}, - "r9Ug1JMQjGH92gpgh7kZJgF2dvwXpfmVXL"}, - {{0x63,0x9B,0x6A,0xE7,0x62,0x76,0x40,0x6D,0xBB,0x95,0x0F,0x39,0xA4,0xC2,0x77,0x27}, - {0xED,0x48,0x69,0x7E,0x9B,0x17,0x43,0x8B,0x30,0xB2,0x8C,0xBE,0x9E,0x88,0xEB,0xEE, + .addr="r9Ug1JMQjGH92gpgh7kZJgF2dvwXpfmVXL"}, + {.seed={0x63,0x9B,0x6A,0xE7,0x62,0x76,0x40,0x6D,0xBB,0x95,0x0F,0x39,0xA4,0xC2,0x77,0x27}, + .pubkey={0xED,0x48,0x69,0x7E,0x9B,0x17,0x43,0x8B,0x30,0xB2,0x8C,0xBE,0x9E,0x88,0xEB,0xEE, 0x32,0xC7,0xC8,0x64,0xAE,0x99,0x5C,0x96,0x8D,0x68,0x84,0xAD,0x1D,0x64,0xCB,0xAD,0xAA}, - {0x0D,0xC3,0xB8,0x2D,0xDA,0xA5,0x86,0x49,0x03,0x41,0xAA,0x5E,0xDF,0x0B,0x45,0x7B, + .seckey={0x0D,0xC3,0xB8,0x2D,0xDA,0xA5,0x86,0x49,0x03,0x41,0xAA,0x5E,0xDF,0x0B,0x45,0x7B, 0xCE,0x45,0x3F,0x2E,0xDC,0x0F,0x1F,0xFE,0xE1,0x2E,0xD1,0x50,0x26,0xCB,0x23,0x64}, - "rGTbZBCD2UrFooY8F7Q6dnxSpp12xX13ZE"}, - {{0xA3,0x8D,0x1E,0xB3,0x79,0x31,0x63,0xEF,0x28,0x3C,0xB9,0x88,0x85,0x80,0xFE,0xF8}, - {0xED,0x05,0xA1,0x49,0x6B,0x70,0x20,0x8C,0x26,0xDA,0x92,0xFF,0x97,0x8A,0x1C,0x69, + .addr="rGTbZBCD2UrFooY8F7Q6dnxSpp12xX13ZE"}, + {.seed={0xA3,0x8D,0x1E,0xB3,0x79,0x31,0x63,0xEF,0x28,0x3C,0xB9,0x88,0x85,0x80,0xFE,0xF8}, + .pubkey={0xED,0x05,0xA1,0x49,0x6B,0x70,0x20,0x8C,0x26,0xDA,0x92,0xFF,0x97,0x8A,0x1C,0x69, 0xAC,0xEC,0xFE,0x16,0x5A,0x1B,0x41,0x82,0xBA,0xD9,0xDC,0x13,0x17,0x21,0x7D,0xE3,0x75}, - {0xA8,0x6D,0x59,0x90,0xE1,0x63,0xEA,0x86,0x27,0x6D,0x8A,0x30,0x74,0x83,0x15,0xD4, + .seckey={0xA8,0x6D,0x59,0x90,0xE1,0x63,0xEA,0x86,0x27,0x6D,0x8A,0x30,0x74,0x83,0x15,0xD4, 0x35,0x6D,0x0B,0x65,0x10,0xE4,0xC8,0xE3,0xA4,0xA7,0xD9,0xA9,0x3E,0xE7,0x29,0x4D}, - "rDxumR1RE4rVUHHy1fHwURFw1ZLHkqqhXj"}, - {{0xF9,0x57,0x52,0x2C,0x0C,0xF4,0x93,0x67,0xF9,0x0D,0xCF,0x67,0x4D,0x26,0x31,0x47}, - {0xED,0x26,0x9F,0xD9,0xAF,0xE4,0xA5,0xC4,0x52,0x54,0x3F,0x92,0x27,0xAE,0xB2,0x93, + .addr="rDxumR1RE4rVUHHy1fHwURFw1ZLHkqqhXj"}, + {.seed={0xF9,0x57,0x52,0x2C,0x0C,0xF4,0x93,0x67,0xF9,0x0D,0xCF,0x67,0x4D,0x26,0x31,0x47}, + .pubkey={0xED,0x26,0x9F,0xD9,0xAF,0xE4,0xA5,0xC4,0x52,0x54,0x3F,0x92,0x27,0xAE,0xB2,0x93, 0xE8,0xEB,0xC4,0xC0,0x74,0x30,0x12,0x75,0xC6,0xA2,0x61,0x1D,0xC8,0x52,0xEC,0x11,0x76}, - {0x57,0xD1,0x51,0x01,0xA4,0x20,0x78,0x76,0xA2,0xFE,0xF5,0xC4,0x71,0x17,0x3E,0x48, + .seckey={0x57,0xD1,0x51,0x01,0xA4,0x20,0x78,0x76,0xA2,0xFE,0xF5,0xC4,0x71,0x17,0x3E,0x48, 0xC7,0x18,0x1B,0x52,0x10,0xA2,0xFD,0x1B,0x32,0xEE,0xF8,0xF5,0x33,0x58,0xAC,0x44}, - "rL2eCZwE2ziPN6LCLQc2NqzhEkyWSe9aYw"}, - {{0x47,0x94,0x2C,0x2D,0x0F,0xE1,0x64,0x2D,0xC5,0x23,0x6D,0x08,0x3D,0x61,0xA4,0x78}, - {0xED,0x33,0x3A,0xEC,0x09,0x30,0x3C,0x01,0x0F,0x34,0x17,0xEB,0xD3,0x21,0x36,0xC3, + .addr="rL2eCZwE2ziPN6LCLQc2NqzhEkyWSe9aYw"}, + {.seed={0x47,0x94,0x2C,0x2D,0x0F,0xE1,0x64,0x2D,0xC5,0x23,0x6D,0x08,0x3D,0x61,0xA4,0x78}, + .pubkey={0xED,0x33,0x3A,0xEC,0x09,0x30,0x3C,0x01,0x0F,0x34,0x17,0xEB,0xD3,0x21,0x36,0xC3, 0xF3,0x8C,0xF5,0x2C,0x9B,0x14,0xAF,0xB0,0xAB,0x6E,0x82,0x05,0xDB,0xEE,0x61,0x06,0x53}, - {0x76,0x73,0x6B,0x24,0xB6,0xD1,0x16,0xCD,0xCC,0x6F,0x4B,0x85,0x05,0x0B,0xBA,0x67, + .seckey={0x76,0x73,0x6B,0x24,0xB6,0xD1,0x16,0xCD,0xCC,0x6F,0x4B,0x85,0x05,0x0B,0xBA,0x67, 0xDE,0x79,0xB6,0x93,0xD0,0x57,0x10,0x35,0x18,0x71,0x6D,0x03,0x3A,0xB8,0x58,0xFE}, - "rGvzhRmWqvC67oZyAqrJqgo3MNeXahkBzj"}, - {{0xBA,0xFE,0x17,0x25,0x21,0x89,0x1D,0xDB,0x2D,0xE5,0x10,0x24,0xA7,0x21,0x9F,0xB6}, - {0xED,0x1A,0x37,0x9C,0xD6,0x6B,0x0A,0x85,0xDB,0x9F,0x0E,0xAE,0xA5,0x9E,0x8D,0xEE, + .addr="rGvzhRmWqvC67oZyAqrJqgo3MNeXahkBzj"}, + {.seed={0xBA,0xFE,0x17,0x25,0x21,0x89,0x1D,0xDB,0x2D,0xE5,0x10,0x24,0xA7,0x21,0x9F,0xB6}, + .pubkey={0xED,0x1A,0x37,0x9C,0xD6,0x6B,0x0A,0x85,0xDB,0x9F,0x0E,0xAE,0xA5,0x9E,0x8D,0xEE, 0xDC,0xA2,0x53,0x45,0xCB,0xC2,0x67,0x0E,0xFC,0x3C,0x34,0xA4,0x96,0x9F,0x80,0xDA,0x84}, - {0x8C,0x95,0x46,0x34,0xD6,0xD3,0x98,0x96,0x6B,0x28,0xBF,0xA6,0xB7,0xE2,0xEB,0x78, + .seckey={0x8C,0x95,0x46,0x34,0xD6,0xD3,0x98,0x96,0x6B,0x28,0xBF,0xA6,0xB7,0xE2,0xEB,0x78, 0x14,0x4B,0x5A,0x87,0xF6,0x64,0x91,0x01,0x3B,0xCB,0x9B,0x8C,0xCE,0xEE,0x9F,0x44}, - "r95fjtovjRNhUEuv2JJnPBFyhgXyX5p8wD"}, - {{0xD8,0x0F,0x6B,0xB7,0x88,0xBA,0x01,0xEC,0x66,0xA0,0x7A,0x74,0xA4,0xA8,0xC6,0x35}, - {0xED,0x01,0xDD,0xD2,0x59,0x15,0x86,0xBC,0x53,0x44,0x0B,0xB3,0x65,0xA9,0x33,0x04, + .addr="r95fjtovjRNhUEuv2JJnPBFyhgXyX5p8wD"}, + {.seed={0xD8,0x0F,0x6B,0xB7,0x88,0xBA,0x01,0xEC,0x66,0xA0,0x7A,0x74,0xA4,0xA8,0xC6,0x35}, + .pubkey={0xED,0x01,0xDD,0xD2,0x59,0x15,0x86,0xBC,0x53,0x44,0x0B,0xB3,0x65,0xA9,0x33,0x04, 0x01,0x1E,0xD9,0x4E,0x17,0x2C,0xC3,0xB8,0x1C,0x1B,0x9A,0x40,0xFA,0x6B,0x17,0xD4,0x91}, - {0x17,0xDB,0xCC,0x50,0x27,0xAF,0xE2,0x42,0x30,0xA4,0xE7,0x98,0xA4,0xE9,0x76,0x39, + .seckey={0x17,0xDB,0xCC,0x50,0x27,0xAF,0xE2,0x42,0x30,0xA4,0xE7,0x98,0xA4,0xE9,0x76,0x39, 0x9A,0x8F,0x86,0xB3,0x5B,0x5D,0xEB,0x70,0x34,0x1B,0x8E,0x95,0x31,0x9D,0x69,0xDC}, - "rnBDWLjCaA6q9phZCqdEp7hjqAPfwHnfPA"}, - {{0x6B,0x5D,0x6A,0xC6,0x16,0xE9,0x2E,0x67,0x75,0xCC,0xAA,0x9D,0x7E,0x0B,0x06,0xEE}, - {0xED,0xE9,0xF8,0x84,0x0B,0x73,0x6B,0xC9,0x21,0xDF,0xAF,0xF5,0x69,0x8C,0x55,0xA1, + .addr="rnBDWLjCaA6q9phZCqdEp7hjqAPfwHnfPA"}, + {.seed={0x6B,0x5D,0x6A,0xC6,0x16,0xE9,0x2E,0x67,0x75,0xCC,0xAA,0x9D,0x7E,0x0B,0x06,0xEE}, + .pubkey={0xED,0xE9,0xF8,0x84,0x0B,0x73,0x6B,0xC9,0x21,0xDF,0xAF,0xF5,0x69,0x8C,0x55,0xA1, 0xB4,0xF6,0xFD,0x4F,0xA9,0xB6,0x6C,0xC2,0x2F,0x8E,0x98,0x5B,0x6F,0xD6,0x45,0x74,0x89}, - {0x67,0x4D,0xB7,0x06,0xEC,0xC0,0xB6,0xA0,0xA7,0xF9,0x5D,0xA6,0xE4,0x30,0x68,0x54, + .seckey={0x67,0x4D,0xB7,0x06,0xEC,0xC0,0xB6,0xA0,0xA7,0xF9,0x5D,0xA6,0xE4,0x30,0x68,0x54, 0x4D,0x12,0x35,0x17,0x78,0xA7,0x55,0xC1,0x55,0x23,0xD1,0xED,0x22,0x91,0xC8,0x01}, - "ra4G5d8mvtNJyZYFdo11BrWrgAz9AvP3Gz"}, - {{0x00,0xFB,0x91,0x86,0x81,0xE9,0x7E,0xF1,0x9D,0xF0,0x95,0x74,0x55,0xC2,0x06,0xA8}, - {0xED,0x07,0x88,0x61,0x92,0x19,0x34,0xBA,0xF4,0x20,0xCC,0x6F,0x7F,0xC5,0x90,0xE5, + .addr="ra4G5d8mvtNJyZYFdo11BrWrgAz9AvP3Gz"}, + {.seed={0x00,0xFB,0x91,0x86,0x81,0xE9,0x7E,0xF1,0x9D,0xF0,0x95,0x74,0x55,0xC2,0x06,0xA8}, + .pubkey={0xED,0x07,0x88,0x61,0x92,0x19,0x34,0xBA,0xF4,0x20,0xCC,0x6F,0x7F,0xC5,0x90,0xE5, 0x1A,0x8F,0xF7,0x59,0x07,0x05,0x3B,0x0C,0xD1,0xF6,0x99,0x52,0xE1,0x22,0x8F,0x02,0x08}, - {0xB1,0x8D,0xCE,0x19,0xF5,0xFD,0xA0,0x3E,0x92,0xEA,0x23,0x8A,0x35,0xB3,0x40,0xF2, + .seckey={0xB1,0x8D,0xCE,0x19,0xF5,0xFD,0xA0,0x3E,0x92,0xEA,0x23,0x8A,0x35,0xB3,0x40,0xF2, 0xA9,0x16,0xAF,0xEE,0x16,0x8B,0x9B,0xA4,0x44,0xBC,0x6E,0x59,0xC3,0x71,0x87,0x03}, - "rDaKYn9RrKrLHdeZAixuyi24uKnxSU5odT"}, - {{0x9A,0xF1,0x00,0x6A,0x00,0x74,0x91,0x8C,0x6A,0x0F,0xFB,0xD8,0x5E,0xD5,0xCA,0x1F}, - {0xED,0x19,0x23,0x72,0xA2,0xD8,0xB4,0x80,0x23,0x5A,0x74,0x69,0x39,0xDB,0x54,0xBF, + .addr="rDaKYn9RrKrLHdeZAixuyi24uKnxSU5odT"}, + {.seed={0x9A,0xF1,0x00,0x6A,0x00,0x74,0x91,0x8C,0x6A,0x0F,0xFB,0xD8,0x5E,0xD5,0xCA,0x1F}, + .pubkey={0xED,0x19,0x23,0x72,0xA2,0xD8,0xB4,0x80,0x23,0x5A,0x74,0x69,0x39,0xDB,0x54,0xBF, 0x7E,0xCF,0x3A,0x52,0xBB,0xE8,0xFC,0xB1,0x74,0x04,0xAE,0x2D,0x62,0x69,0x7B,0x33,0x4A}, - {0x21,0x79,0xBF,0x60,0xD5,0xF4,0xAB,0x6A,0x1D,0x72,0xB9,0xC4,0xAD,0xEE,0xFB,0x04, + .seckey={0x21,0x79,0xBF,0x60,0xD5,0xF4,0xAB,0x6A,0x1D,0x72,0xB9,0xC4,0xAD,0xEE,0xFB,0x04, 0x39,0x3D,0xD0,0xB3,0x17,0xAF,0xEC,0xE3,0x6D,0xB6,0xC1,0x1E,0xE1,0x73,0x98,0xDF}, - "rUyMe6fvoJ4Lm1PnPquFabP3VSKzqjBkkw"}, - {{0xCA,0x67,0x89,0xD8,0x5A,0x4F,0x15,0x1F,0xF5,0x1C,0x9B,0x1B,0x66,0xC2,0xFD,0xE0}, - {0xED,0x6A,0x17,0x41,0x82,0xEF,0x33,0xF7,0xC3,0x68,0x3C,0x0C,0x61,0xF0,0x17,0xDB, + .addr="rUyMe6fvoJ4Lm1PnPquFabP3VSKzqjBkkw"}, + {.seed={0xCA,0x67,0x89,0xD8,0x5A,0x4F,0x15,0x1F,0xF5,0x1C,0x9B,0x1B,0x66,0xC2,0xFD,0xE0}, + .pubkey={0xED,0x6A,0x17,0x41,0x82,0xEF,0x33,0xF7,0xC3,0x68,0x3C,0x0C,0x61,0xF0,0x17,0xDB, 0x12,0x68,0xE3,0x27,0x3F,0x39,0xE5,0x39,0x63,0x59,0x17,0x84,0xAF,0x08,0x71,0xAF,0x6E}, - {0x05,0xF2,0x19,0x7C,0xCB,0x44,0xD3,0x9E,0x60,0x88,0xA3,0x57,0x38,0x04,0x9E,0x23, + .seckey={0x05,0xF2,0x19,0x7C,0xCB,0x44,0xD3,0x9E,0x60,0x88,0xA3,0x57,0x38,0x04,0x9E,0x23, 0xD8,0x8F,0x42,0xDC,0x5A,0xB2,0x10,0x16,0xB1,0x07,0xF5,0x8F,0x0D,0x26,0xAB,0x09}, - "rN9pVkhR6qUeT73hkPCKyDHsuWWyarWRK"}, - {{0x31,0x95,0xC9,0x48,0x17,0x51,0xA8,0x9E,0xC5,0x6F,0xE1,0xC9,0x63,0x30,0x78,0xAF}, - {0xED,0x9C,0xEF,0xC2,0xF4,0xB3,0xC9,0x2D,0xC8,0xC2,0x01,0xE5,0xC5,0x21,0x0C,0x6B, + .addr="rN9pVkhR6qUeT73hkPCKyDHsuWWyarWRK"}, + {.seed={0x31,0x95,0xC9,0x48,0x17,0x51,0xA8,0x9E,0xC5,0x6F,0xE1,0xC9,0x63,0x30,0x78,0xAF}, + .pubkey={0xED,0x9C,0xEF,0xC2,0xF4,0xB3,0xC9,0x2D,0xC8,0xC2,0x01,0xE5,0xC5,0x21,0x0C,0x6B, 0x27,0x77,0x91,0xF8,0x6D,0x8F,0xE1,0x7B,0x8D,0x45,0xBB,0x70,0x56,0x7F,0x59,0xB5,0xFA}, - {0x8D,0x29,0xBE,0x69,0x84,0xF2,0x49,0x7E,0xE6,0xE1,0x6F,0xB1,0xD7,0x40,0x6A,0x78, + .seckey={0x8D,0x29,0xBE,0x69,0x84,0xF2,0x49,0x7E,0xE6,0xE1,0x6F,0xB1,0xD7,0x40,0x6A,0x78, 0x93,0x5C,0xDF,0x01,0xB5,0xBB,0xE2,0xB7,0xAA,0x0B,0x44,0x08,0x82,0x56,0xC6,0xD2}, - "rJcfnmHiPFzbn5gqQYdDk3aziuNztmGLcv"}, - {{0x29,0x03,0x13,0x97,0x68,0x4B,0xD2,0x9A,0x2A,0x09,0xF8,0xFF,0xC7,0x5A,0x87,0x07}, - {0xED,0xCA,0x63,0x21,0xD4,0xA9,0xDB,0x02,0x5E,0xE9,0x2A,0x2D,0xF3,0xCD,0x12,0xFD, + .addr="rJcfnmHiPFzbn5gqQYdDk3aziuNztmGLcv"}, + {.seed={0x29,0x03,0x13,0x97,0x68,0x4B,0xD2,0x9A,0x2A,0x09,0xF8,0xFF,0xC7,0x5A,0x87,0x07}, + .pubkey={0xED,0xCA,0x63,0x21,0xD4,0xA9,0xDB,0x02,0x5E,0xE9,0x2A,0x2D,0xF3,0xCD,0x12,0xFD, 0x75,0x69,0x7B,0xA4,0x39,0x4F,0xE4,0xA5,0x08,0xE0,0x8E,0xAD,0x21,0x83,0xAC,0x58,0xFD}, - {0x07,0x71,0x01,0xB4,0x34,0xA8,0x2D,0xCF,0x05,0x2D,0xD6,0x8E,0x08,0x14,0xCA,0x25, + .seckey={0x07,0x71,0x01,0xB4,0x34,0xA8,0x2D,0xCF,0x05,0x2D,0xD6,0x8E,0x08,0x14,0xCA,0x25, 0x1A,0xCB,0x12,0x62,0x25,0x2D,0x7B,0x14,0xA0,0x09,0xF0,0x6C,0x82,0x57,0xF9,0x24}, - "rU619NnNQQGiyPXLCGRcuXP7MhZR1TxFmP"}, - {{0xBA,0x63,0xEC,0x83,0x0F,0x51,0x96,0x76,0x67,0xC6,0x00,0x1C,0x9C,0x23,0x76,0xCB}, - {0xED,0xB7,0x37,0xBD,0xAD,0x90,0x48,0x85,0xDE,0xF9,0xBE,0x25,0x2D,0xA4,0x59,0x77, + .addr="rU619NnNQQGiyPXLCGRcuXP7MhZR1TxFmP"}, + {.seed={0xBA,0x63,0xEC,0x83,0x0F,0x51,0x96,0x76,0x67,0xC6,0x00,0x1C,0x9C,0x23,0x76,0xCB}, + .pubkey={0xED,0xB7,0x37,0xBD,0xAD,0x90,0x48,0x85,0xDE,0xF9,0xBE,0x25,0x2D,0xA4,0x59,0x77, 0xC7,0x5E,0xD7,0x8B,0x47,0x39,0x83,0xCC,0x66,0xA0,0x3F,0x5D,0x22,0x4F,0x17,0x60,0x9C}, - {0x1B,0x52,0xBB,0x05,0x64,0x2E,0x9B,0x06,0xB9,0x72,0xAF,0xE0,0x77,0x5B,0x1B,0xE5, + .seckey={0x1B,0x52,0xBB,0x05,0x64,0x2E,0x9B,0x06,0xB9,0x72,0xAF,0xE0,0x77,0x5B,0x1B,0xE5, 0x68,0x92,0x14,0xCB,0x32,0xC8,0x1A,0x46,0xB3,0x99,0xDC,0x52,0xDA,0x7B,0xD2,0x4D}, - "rP7ywfUBLDeAk1uV1RnWhu1pyJnG3sQL9h"}, - {{0x60,0x4C,0x3E,0x3D,0xA8,0xB3,0xF5,0xD7,0x67,0x8A,0xA7,0xAD,0xBB,0xBE,0x54,0xCB}, - {0xED,0x51,0xD2,0x7A,0x66,0x94,0xB6,0x09,0xE4,0xE4,0x76,0xFD,0x3E,0x67,0xB6,0x52, + .addr="rP7ywfUBLDeAk1uV1RnWhu1pyJnG3sQL9h"}, + {.seed={0x60,0x4C,0x3E,0x3D,0xA8,0xB3,0xF5,0xD7,0x67,0x8A,0xA7,0xAD,0xBB,0xBE,0x54,0xCB}, + .pubkey={0xED,0x51,0xD2,0x7A,0x66,0x94,0xB6,0x09,0xE4,0xE4,0x76,0xFD,0x3E,0x67,0xB6,0x52, 0x5C,0x76,0x83,0x75,0x4E,0x8C,0x82,0x36,0xA9,0xBC,0x5E,0x5F,0xBE,0xEC,0x2B,0xCB,0x7F}, - {0xE8,0x47,0xB6,0xE5,0xE8,0xC4,0x0F,0x70,0x92,0xC7,0x2E,0xE4,0xFD,0xF6,0x94,0xC4, + .seckey={0xE8,0x47,0xB6,0xE5,0xE8,0xC4,0x0F,0x70,0x92,0xC7,0x2E,0xE4,0xFD,0xF6,0x94,0xC4, 0x9E,0xB4,0x07,0x6D,0x93,0xD0,0xE7,0xCF,0x3C,0x54,0xCD,0x3C,0xC5,0x89,0x14,0xBA}, - "rDrShqPhNLn9e1yP7UTNZCty2ghfEgQMNa"}, - {{0x98,0xCC,0x63,0x7E,0x7C,0xE8,0x3C,0xD9,0xE2,0xDF,0xFA,0xC5,0xF2,0x32,0x84,0xA0}, - {0xED,0x22,0x7A,0xF8,0x21,0x57,0x3B,0xCC,0xCB,0x17,0xD9,0xD9,0x02,0x2D,0x20,0xFF, + .addr="rDrShqPhNLn9e1yP7UTNZCty2ghfEgQMNa"}, + {.seed={0x98,0xCC,0x63,0x7E,0x7C,0xE8,0x3C,0xD9,0xE2,0xDF,0xFA,0xC5,0xF2,0x32,0x84,0xA0}, + .pubkey={0xED,0x22,0x7A,0xF8,0x21,0x57,0x3B,0xCC,0xCB,0x17,0xD9,0xD9,0x02,0x2D,0x20,0xFF, 0xB4,0x35,0x1C,0x86,0xFF,0x3F,0xE6,0x34,0xB4,0xB1,0xB2,0x72,0x81,0x0A,0x76,0x98,0x32}, - {0x38,0xD3,0x62,0x0A,0xB9,0x25,0xD6,0x14,0xCF,0x7D,0x14,0x9B,0x68,0x31,0x46,0xF5, + .seckey={0x38,0xD3,0x62,0x0A,0xB9,0x25,0xD6,0x14,0xCF,0x7D,0x14,0x9B,0x68,0x31,0x46,0xF5, 0xB0,0xAE,0x35,0x6F,0xDA,0x00,0xFD,0x85,0x8F,0xC4,0x1F,0x26,0x9B,0xCC,0x54,0x84}, - "r3uekKMfuYuxuYkZjsrmYgJG8K39VE4VJY"}, - {{0x78,0x60,0x6D,0xAF,0x5A,0x6E,0xB5,0xD5,0xBF,0x54,0x65,0xD5,0xCB,0x85,0x69,0x07}, - {0xED,0x99,0x8D,0x93,0x23,0x7C,0x18,0x9A,0x18,0xA9,0x3C,0xB7,0xA0,0x0E,0xD7,0x70, + .addr="r3uekKMfuYuxuYkZjsrmYgJG8K39VE4VJY"}, + {.seed={0x78,0x60,0x6D,0xAF,0x5A,0x6E,0xB5,0xD5,0xBF,0x54,0x65,0xD5,0xCB,0x85,0x69,0x07}, + .pubkey={0xED,0x99,0x8D,0x93,0x23,0x7C,0x18,0x9A,0x18,0xA9,0x3C,0xB7,0xA0,0x0E,0xD7,0x70, 0x1C,0xE3,0x58,0x9A,0xDA,0x7D,0x72,0xDE,0xE2,0x38,0x26,0xB3,0xFC,0x0F,0x3E,0x4A,0xD7}, - {0xA9,0x43,0xF9,0x80,0xC7,0x65,0x70,0x41,0x90,0xB1,0x19,0xEC,0x1B,0x8A,0xE1,0xAA, + .seckey={0xA9,0x43,0xF9,0x80,0xC7,0x65,0x70,0x41,0x90,0xB1,0x19,0xEC,0x1B,0x8A,0xE1,0xAA, 0x00,0xB3,0x34,0xC7,0x36,0x64,0x5A,0xB4,0x94,0xB4,0x88,0x14,0x23,0x4B,0xFF,0xD9}, - "rNUXnPHuuwqftzNbwosussmnFcUePnbwjQ"}, - {{0x3F,0x2C,0xE1,0xDF,0x92,0x1B,0xD3,0xFE,0xA3,0x1B,0x4C,0x00,0xE1,0x2D,0x7F,0x3D}, - {0xED,0x31,0x8C,0x56,0x0E,0x69,0x41,0x7D,0x2E,0xCF,0x9F,0xDB,0x61,0xAC,0xB3,0xE0, + .addr="rNUXnPHuuwqftzNbwosussmnFcUePnbwjQ"}, + {.seed={0x3F,0x2C,0xE1,0xDF,0x92,0x1B,0xD3,0xFE,0xA3,0x1B,0x4C,0x00,0xE1,0x2D,0x7F,0x3D}, + .pubkey={0xED,0x31,0x8C,0x56,0x0E,0x69,0x41,0x7D,0x2E,0xCF,0x9F,0xDB,0x61,0xAC,0xB3,0xE0, 0x7B,0x99,0xC3,0x93,0x44,0x72,0xAC,0x5E,0x7B,0xE0,0xED,0x53,0xCB,0x3D,0x92,0x76,0x18}, - {0xD9,0xF7,0x8C,0x20,0x08,0xEB,0xBF,0xFF,0x76,0xA7,0xA9,0x32,0x3E,0x7E,0x7E,0x6A, + .seckey={0xD9,0xF7,0x8C,0x20,0x08,0xEB,0xBF,0xFF,0x76,0xA7,0xA9,0x32,0x3E,0x7E,0x7E,0x6A, 0x35,0x18,0x4F,0x2F,0xB5,0xE9,0xE5,0xF1,0xE9,0x3B,0x3F,0x00,0x33,0x49,0xB8,0x42}, - "rnj6vSuUXmMW8qwdXwUKWEezmBUWjf8krG"}, - {{0x98,0x3F,0x64,0x6B,0x02,0xDB,0xE9,0x4A,0x46,0x52,0x2D,0xA5,0x5C,0x73,0x04,0x66}, - {0xED,0x26,0x87,0xDB,0x80,0x3B,0xE4,0x35,0x5F,0x19,0xC1,0x57,0x74,0xDB,0x80,0x0A, + .addr="rnj6vSuUXmMW8qwdXwUKWEezmBUWjf8krG"}, + {.seed={0x98,0x3F,0x64,0x6B,0x02,0xDB,0xE9,0x4A,0x46,0x52,0x2D,0xA5,0x5C,0x73,0x04,0x66}, + .pubkey={0xED,0x26,0x87,0xDB,0x80,0x3B,0xE4,0x35,0x5F,0x19,0xC1,0x57,0x74,0xDB,0x80,0x0A, 0xD7,0xB4,0xB8,0xA9,0xA1,0x4D,0x41,0xCE,0x4B,0xFC,0xE5,0x13,0x4E,0x69,0x6A,0x2B,0xD3}, - {0x1D,0xF8,0x5C,0xFF,0xA0,0x11,0x59,0x99,0xB6,0xF4,0x33,0xE5,0xAA,0x2A,0x92,0x5D, + .seckey={0x1D,0xF8,0x5C,0xFF,0xA0,0x11,0x59,0x99,0xB6,0xF4,0x33,0xE5,0xAA,0x2A,0x92,0x5D, 0x8E,0x12,0x63,0xD3,0xD0,0x3C,0x65,0x6E,0xA2,0x7E,0x53,0xCE,0xC0,0x4B,0x87,0x0C}, - "rLwPm1MKU645YKtuEUCtUBfaKLuUafZKpK"}, - {{0x1E,0x03,0x9B,0x04,0x57,0xC1,0x9E,0xE3,0xA9,0xBF,0x48,0x1C,0x78,0x54,0x6C,0x3A}, - {0xED,0x1C,0x54,0xB7,0x64,0x7D,0xD8,0xD3,0x59,0x4D,0x9E,0x08,0xAA,0xF0,0x22,0xC2, + .addr="rLwPm1MKU645YKtuEUCtUBfaKLuUafZKpK"}, + {.seed={0x1E,0x03,0x9B,0x04,0x57,0xC1,0x9E,0xE3,0xA9,0xBF,0x48,0x1C,0x78,0x54,0x6C,0x3A}, + .pubkey={0xED,0x1C,0x54,0xB7,0x64,0x7D,0xD8,0xD3,0x59,0x4D,0x9E,0x08,0xAA,0xF0,0x22,0xC2, 0x85,0xCD,0xC6,0x54,0x76,0xD6,0x77,0x44,0x94,0x9A,0x7D,0x0F,0xDB,0x07,0xC1,0xAA,0x44}, - {0x18,0xE9,0xD0,0xA8,0xDE,0xA7,0x55,0x3E,0xA7,0xD2,0x88,0x6F,0x49,0xBB,0x0C,0xCD, + .seckey={0x18,0xE9,0xD0,0xA8,0xDE,0xA7,0x55,0x3E,0xA7,0xD2,0x88,0x6F,0x49,0xBB,0x0C,0xCD, 0xA4,0x46,0x42,0x9D,0x88,0xE8,0x3D,0xF0,0x38,0xC5,0x47,0xD8,0x95,0xF2,0x21,0x34}, - "r4JxbSBo2LNGLLkYF7D3waf3Nhcz2wJVPD"}, - {{0x3A,0x11,0x4E,0x5D,0xE8,0xBB,0x4E,0x17,0x9C,0x9E,0x31,0x92,0xD9,0x94,0x4E,0x88}, - {0xED,0x90,0x0E,0x5C,0xF1,0xED,0xCB,0xC3,0x8E,0xE2,0x40,0x1D,0x51,0xB4,0x1E,0x19, + .addr="r4JxbSBo2LNGLLkYF7D3waf3Nhcz2wJVPD"}, + {.seed={0x3A,0x11,0x4E,0x5D,0xE8,0xBB,0x4E,0x17,0x9C,0x9E,0x31,0x92,0xD9,0x94,0x4E,0x88}, + .pubkey={0xED,0x90,0x0E,0x5C,0xF1,0xED,0xCB,0xC3,0x8E,0xE2,0x40,0x1D,0x51,0xB4,0x1E,0x19, 0x8D,0xFC,0xA8,0x2C,0x6E,0x23,0xB4,0x28,0x2D,0xBA,0xF4,0x44,0xF2,0x86,0xE0,0x9A,0xC2}, - {0x64,0x21,0xB4,0x02,0x02,0x63,0x68,0xD5,0xEB,0xFB,0xA6,0x15,0x29,0x03,0x04,0x2D, + .seckey={0x64,0x21,0xB4,0x02,0x02,0x63,0x68,0xD5,0xEB,0xFB,0xA6,0x15,0x29,0x03,0x04,0x2D, 0x05,0xC6,0xB2,0x7C,0xCD,0x52,0x2C,0x21,0xBE,0x93,0xEE,0x3F,0x13,0xB0,0x0D,0x0F}, - "rPowZBd6n845AtJsjTnpMQQ4go4aE5rSrU"}, - {{0x27,0x2C,0x1B,0x39,0x6F,0x36,0x48,0xC8,0x45,0x68,0x7E,0x27,0x0C,0x31,0xD1,0x38}, - {0xED,0x98,0xBB,0xF9,0x98,0x65,0xED,0xAF,0x1A,0x03,0x81,0xE7,0x14,0x9E,0x49,0xC1, + .addr="rPowZBd6n845AtJsjTnpMQQ4go4aE5rSrU"}, + {.seed={0x27,0x2C,0x1B,0x39,0x6F,0x36,0x48,0xC8,0x45,0x68,0x7E,0x27,0x0C,0x31,0xD1,0x38}, + .pubkey={0xED,0x98,0xBB,0xF9,0x98,0x65,0xED,0xAF,0x1A,0x03,0x81,0xE7,0x14,0x9E,0x49,0xC1, 0x29,0x03,0x99,0x63,0xD4,0x60,0xB1,0x65,0xF5,0x9F,0x1D,0xDA,0xA9,0x5B,0x31,0xA9,0x25}, - {0x03,0x2C,0x27,0x61,0xB0,0x0F,0xA4,0xAB,0x89,0xB4,0x03,0x67,0x83,0x42,0x12,0x94, + .seckey={0x03,0x2C,0x27,0x61,0xB0,0x0F,0xA4,0xAB,0x89,0xB4,0x03,0x67,0x83,0x42,0x12,0x94, 0x16,0xAA,0xB1,0x3A,0x39,0x5F,0x3D,0x02,0x87,0xE4,0x4C,0xC9,0xDF,0x36,0x91,0xFD}, - "rsdP5KvUtanQDrDZ7gebdSMQN2zJveJL7n"}, - {{0x22,0xA2,0x2B,0xCA,0xB7,0xC7,0xD2,0x27,0xEC,0xD2,0x72,0x6A,0x4E,0xF2,0x8A,0x60}, - {0xED,0x75,0xBC,0x6C,0x7D,0x63,0x18,0x08,0x5F,0xEE,0xE3,0x66,0x81,0x34,0x3B,0x25, + .addr="rsdP5KvUtanQDrDZ7gebdSMQN2zJveJL7n"}, + {.seed={0x22,0xA2,0x2B,0xCA,0xB7,0xC7,0xD2,0x27,0xEC,0xD2,0x72,0x6A,0x4E,0xF2,0x8A,0x60}, + .pubkey={0xED,0x75,0xBC,0x6C,0x7D,0x63,0x18,0x08,0x5F,0xEE,0xE3,0x66,0x81,0x34,0x3B,0x25, 0xB5,0x23,0xD9,0x59,0xE7,0x1C,0xF8,0x93,0x08,0xD6,0xD6,0xF9,0xEF,0x10,0xF9,0xD7,0x23}, - {0x87,0xD1,0x07,0xAD,0x10,0x12,0x58,0x85,0xEA,0xF1,0xCD,0x2D,0x48,0x96,0xE2,0xA7, + .seckey={0x87,0xD1,0x07,0xAD,0x10,0x12,0x58,0x85,0xEA,0xF1,0xCD,0x2D,0x48,0x96,0xE2,0xA7, 0x17,0x11,0x28,0x4F,0xC1,0xCC,0x33,0x5E,0x83,0x6A,0x31,0xBD,0xB2,0xBD,0xA0,0xFE}, - "rwpWQzs9x9tZofsf1PdZA7E7LBzjgzC5DD"}, - {{0xF7,0xDA,0xC7,0x2E,0x0A,0x0B,0x75,0xB9,0x04,0x0C,0xFB,0xE9,0xAA,0x5B,0x96,0xAE}, - {0xED,0x82,0xE4,0x7D,0xF7,0xC4,0x6B,0xBF,0x23,0x43,0x65,0x51,0xB8,0xD0,0xF6,0x21, + .addr="rwpWQzs9x9tZofsf1PdZA7E7LBzjgzC5DD"}, + {.seed={0xF7,0xDA,0xC7,0x2E,0x0A,0x0B,0x75,0xB9,0x04,0x0C,0xFB,0xE9,0xAA,0x5B,0x96,0xAE}, + .pubkey={0xED,0x82,0xE4,0x7D,0xF7,0xC4,0x6B,0xBF,0x23,0x43,0x65,0x51,0xB8,0xD0,0xF6,0x21, 0x8B,0x98,0xE5,0x92,0x9E,0x57,0xDB,0x82,0x52,0x43,0xDB,0x74,0x77,0x7B,0x7A,0x6D,0x86}, - {0xA7,0x53,0xFD,0x0F,0xCC,0x59,0xA7,0xCA,0x47,0x74,0x46,0x5C,0xAC,0x2C,0x3C,0x5D, + .seckey={0xA7,0x53,0xFD,0x0F,0xCC,0x59,0xA7,0xCA,0x47,0x74,0x46,0x5C,0xAC,0x2C,0x3C,0x5D, 0x3E,0x59,0x8E,0x7C,0x68,0x99,0x81,0x91,0x09,0x15,0x3D,0x40,0x7A,0x3E,0xA5,0x11}, - "rfSP8muPdQGdevuRZmt1SDRWbzuLAk2S4C"}, - {{0x4B,0xC7,0x86,0x0F,0x05,0x33,0xEA,0x29,0xF0,0x17,0x45,0x94,0xB1,0x80,0x79,0xD9}, - {0xED,0x09,0xE6,0x5E,0xFA,0xD0,0x39,0x72,0x82,0x33,0xA6,0xE4,0x3D,0xDB,0xD5,0x97, + .addr="rfSP8muPdQGdevuRZmt1SDRWbzuLAk2S4C"}, + {.seed={0x4B,0xC7,0x86,0x0F,0x05,0x33,0xEA,0x29,0xF0,0x17,0x45,0x94,0xB1,0x80,0x79,0xD9}, + .pubkey={0xED,0x09,0xE6,0x5E,0xFA,0xD0,0x39,0x72,0x82,0x33,0xA6,0xE4,0x3D,0xDB,0xD5,0x97, 0x17,0x56,0xB8,0xB3,0xAA,0xE4,0x0C,0x37,0x28,0x3E,0x21,0x73,0x4B,0x2C,0x31,0x3C,0x4E}, - {0x07,0xC0,0x48,0xA5,0x27,0x72,0xCC,0xC0,0xCD,0x49,0xF3,0xE9,0xFC,0xEB,0x0A,0x89, + .seckey={0x07,0xC0,0x48,0xA5,0x27,0x72,0xCC,0xC0,0xCD,0x49,0xF3,0xE9,0xFC,0xEB,0x0A,0x89, 0xAC,0xCD,0x70,0xB0,0x72,0x43,0x60,0xFA,0x4E,0xBD,0x87,0x49,0x7A,0x43,0x3A,0x1F}, - "rhPpCGk6r6f1bLHaBvT1fc4sCknWLi6Kyd"}, - {{0x64,0x66,0x2B,0xCD,0x83,0x06,0x43,0xCC,0x2B,0x59,0x07,0x2F,0x3B,0x6C,0x6C,0xF7}, - {0xED,0xC8,0x1E,0x2D,0x5B,0xF8,0x3E,0xEB,0x9A,0x70,0x46,0x56,0x67,0x37,0x05,0xD0, + .addr="rhPpCGk6r6f1bLHaBvT1fc4sCknWLi6Kyd"}, + {.seed={0x64,0x66,0x2B,0xCD,0x83,0x06,0x43,0xCC,0x2B,0x59,0x07,0x2F,0x3B,0x6C,0x6C,0xF7}, + .pubkey={0xED,0xC8,0x1E,0x2D,0x5B,0xF8,0x3E,0xEB,0x9A,0x70,0x46,0x56,0x67,0x37,0x05,0xD0, 0x27,0xAC,0x07,0xDC,0x33,0x37,0xC2,0xD1,0x67,0x30,0xB6,0xEC,0x6D,0x6D,0x3B,0xD8,0x39}, - {0x8E,0xE8,0xF0,0x87,0x00,0x3E,0xA3,0x2E,0x94,0x62,0x2A,0x6F,0x3E,0x38,0xCC,0x1B, + .seckey={0x8E,0xE8,0xF0,0x87,0x00,0x3E,0xA3,0x2E,0x94,0x62,0x2A,0x6F,0x3E,0x38,0xCC,0x1B, 0xA9,0xFD,0x2E,0x19,0x7A,0x71,0x3C,0xB6,0x12,0x54,0x1A,0x1F,0x8F,0xBD,0xBC,0x57}, - "rMBy6xJfbGV4RNDy8mdBVDYTpoGArkEu95"}, - {{0xC2,0xBB,0x19,0xF7,0x2A,0x8B,0x59,0x5A,0xAF,0x57,0x34,0xB8,0xD0,0xCF,0x35,0x63}, - {0xED,0xB0,0x76,0xC8,0x12,0x11,0x54,0x3C,0x9D,0x49,0xF2,0xED,0x2E,0x7D,0xD5,0xF4, + .addr="rMBy6xJfbGV4RNDy8mdBVDYTpoGArkEu95"}, + {.seed={0xC2,0xBB,0x19,0xF7,0x2A,0x8B,0x59,0x5A,0xAF,0x57,0x34,0xB8,0xD0,0xCF,0x35,0x63}, + .pubkey={0xED,0xB0,0x76,0xC8,0x12,0x11,0x54,0x3C,0x9D,0x49,0xF2,0xED,0x2E,0x7D,0xD5,0xF4, 0x94,0x3B,0x74,0x55,0xB3,0xB1,0x93,0x73,0xF9,0x71,0x80,0x1F,0x9B,0x6D,0xC0,0xC3,0x4C}, - {0x1A,0xD7,0x16,0x90,0x7D,0x6A,0xDA,0x1A,0x27,0xD9,0x3C,0xB9,0xC6,0x29,0x90,0x24, + .seckey={0x1A,0xD7,0x16,0x90,0x7D,0x6A,0xDA,0x1A,0x27,0xD9,0x3C,0xB9,0xC6,0x29,0x90,0x24, 0x59,0x38,0x0B,0x5C,0x62,0xC0,0x91,0x19,0x70,0x45,0x57,0xA1,0x48,0xB3,0x57,0x55}, - "rDoEhMUA33qViCmhx69WxvmtfFXC55Avah"}, - {{0xCF,0xE0,0x00,0x67,0x9F,0x8E,0x7F,0xEC,0x63,0xDA,0x7C,0x9E,0x59,0xFB,0xD5,0xE9}, - {0xED,0x2A,0x83,0x43,0xF3,0x6B,0xCC,0x64,0xB3,0x9A,0x24,0xAD,0xE1,0xCB,0x94,0x39, + .addr="rDoEhMUA33qViCmhx69WxvmtfFXC55Avah"}, + {.seed={0xCF,0xE0,0x00,0x67,0x9F,0x8E,0x7F,0xEC,0x63,0xDA,0x7C,0x9E,0x59,0xFB,0xD5,0xE9}, + .pubkey={0xED,0x2A,0x83,0x43,0xF3,0x6B,0xCC,0x64,0xB3,0x9A,0x24,0xAD,0xE1,0xCB,0x94,0x39, 0x77,0xFC,0x33,0x66,0xE8,0xA2,0x50,0xD7,0x24,0x7D,0x06,0xE2,0xD8,0x07,0x75,0x38,0xC2}, - {0x25,0x52,0x3F,0x87,0xBB,0x6F,0x80,0x84,0x0C,0x40,0x3E,0xBA,0x50,0xE9,0x1D,0x46, + .seckey={0x25,0x52,0x3F,0x87,0xBB,0x6F,0x80,0x84,0x0C,0x40,0x3E,0xBA,0x50,0xE9,0x1D,0x46, 0x13,0x9F,0xA8,0x7F,0x25,0x0B,0x50,0x34,0x50,0xCC,0x35,0x83,0x41,0x94,0x01,0x5D}, - "rJ8ry1zRxQTnp1fu9qSxPNhxfWtFb2caio"}, - {{0x49,0x47,0xC6,0x34,0x42,0x84,0x19,0xC3,0x1A,0x26,0x7D,0xFF,0x87,0xDA,0x69,0xED}, - {0xED,0xD2,0x87,0xFB,0xDA,0xC8,0x4E,0x88,0x29,0x47,0x13,0x87,0x30,0x20,0x2B,0xF9, + .addr="rJ8ry1zRxQTnp1fu9qSxPNhxfWtFb2caio"}, + {.seed={0x49,0x47,0xC6,0x34,0x42,0x84,0x19,0xC3,0x1A,0x26,0x7D,0xFF,0x87,0xDA,0x69,0xED}, + .pubkey={0xED,0xD2,0x87,0xFB,0xDA,0xC8,0x4E,0x88,0x29,0x47,0x13,0x87,0x30,0x20,0x2B,0xF9, 0xA4,0xCA,0x90,0x10,0x38,0xC3,0x7D,0xD8,0x00,0xB5,0xD2,0xBA,0xBB,0x57,0xE6,0xED,0xD1}, - {0xBB,0xE6,0x3C,0x1F,0x2B,0x03,0x71,0xDC,0xEB,0x27,0x4E,0x64,0x48,0xE9,0x05,0xE0, + .seckey={0xBB,0xE6,0x3C,0x1F,0x2B,0x03,0x71,0xDC,0xEB,0x27,0x4E,0x64,0x48,0xE9,0x05,0xE0, 0x95,0xE2,0x04,0xB8,0xDA,0x32,0xD4,0x96,0x45,0x15,0xC3,0x77,0xA9,0xB4,0xC3,0x8A}, - "rBTmbytPkthAonMoFEFdr9ewQc9d5AQdVE"}, - {{0x6B,0xC3,0x37,0xB0,0x07,0x6F,0xB7,0x60,0xAF,0x78,0x58,0x9A,0xDE,0xDA,0x0D,0x71}, - {0xED,0x7E,0x0D,0xBB,0x97,0xD6,0x0D,0xB6,0x74,0x57,0xB0,0x22,0x28,0xF0,0x20,0x34, + .addr="rBTmbytPkthAonMoFEFdr9ewQc9d5AQdVE"}, + {.seed={0x6B,0xC3,0x37,0xB0,0x07,0x6F,0xB7,0x60,0xAF,0x78,0x58,0x9A,0xDE,0xDA,0x0D,0x71}, + .pubkey={0xED,0x7E,0x0D,0xBB,0x97,0xD6,0x0D,0xB6,0x74,0x57,0xB0,0x22,0x28,0xF0,0x20,0x34, 0x9F,0x1B,0xCD,0x89,0xA0,0xB5,0xFB,0xD3,0x2B,0xE8,0x8C,0x5B,0x2A,0x8D,0x50,0x5A,0x4F}, - {0xEE,0xC0,0x42,0x75,0x85,0x15,0x24,0xC5,0x30,0x62,0xE6,0x21,0xBA,0xC7,0x02,0xEC, + .seckey={0xEE,0xC0,0x42,0x75,0x85,0x15,0x24,0xC5,0x30,0x62,0xE6,0x21,0xBA,0xC7,0x02,0xEC, 0x3C,0x46,0x3F,0xC1,0x7D,0xDF,0x03,0xD4,0xAA,0xF4,0xF4,0x83,0xCE,0xB1,0x59,0xF2}, - "r3q66ccmLGZHdsStqGDawGt8ek8DKthLU"}, - {{0xD8,0xE6,0x93,0x8A,0x9F,0x79,0xDE,0x01,0x3B,0x76,0x47,0x9E,0xD5,0x1C,0xB5,0xF4}, - {0xED,0x2A,0xCC,0x07,0xAC,0x51,0x1E,0xEB,0x5F,0x0C,0x37,0xC4,0x5B,0x4D,0x7F,0x58, + .addr="r3q66ccmLGZHdsStqGDawGt8ek8DKthLU"}, + {.seed={0xD8,0xE6,0x93,0x8A,0x9F,0x79,0xDE,0x01,0x3B,0x76,0x47,0x9E,0xD5,0x1C,0xB5,0xF4}, + .pubkey={0xED,0x2A,0xCC,0x07,0xAC,0x51,0x1E,0xEB,0x5F,0x0C,0x37,0xC4,0x5B,0x4D,0x7F,0x58, 0xBE,0x16,0x9B,0xF7,0x30,0xE8,0x6D,0x5B,0x39,0x3F,0x61,0x7A,0xFD,0xDA,0xFA,0x6F,0xBA}, - {0x97,0x18,0xB2,0x55,0xAE,0xC6,0x25,0x34,0xE9,0xC7,0x7C,0x1F,0xC7,0xCF,0xA9,0x9A, + .seckey={0x97,0x18,0xB2,0x55,0xAE,0xC6,0x25,0x34,0xE9,0xC7,0x7C,0x1F,0xC7,0xCF,0xA9,0x9A, 0x24,0x6E,0x41,0xFF,0xB5,0x19,0x7F,0x14,0xB7,0x33,0x17,0x4A,0xBE,0x06,0x5E,0x9C}, - "rMS5BvvLjC1HCDtL81M394JAbg7ymqymiV"}, - {{0xB6,0x14,0xFA,0x0C,0x4A,0x18,0x83,0x96,0x5E,0x04,0x93,0x55,0x83,0xBC,0x7D,0x88}, - {0xED,0xB0,0xD8,0xE9,0x32,0x13,0xB6,0x10,0xF9,0x0B,0xF7,0xEE,0x59,0x01,0x52,0xFD, + .addr="rMS5BvvLjC1HCDtL81M394JAbg7ymqymiV"}, + {.seed={0xB6,0x14,0xFA,0x0C,0x4A,0x18,0x83,0x96,0x5E,0x04,0x93,0x55,0x83,0xBC,0x7D,0x88}, + .pubkey={0xED,0xB0,0xD8,0xE9,0x32,0x13,0xB6,0x10,0xF9,0x0B,0xF7,0xEE,0x59,0x01,0x52,0xFD, 0x21,0xCA,0x9D,0xC9,0x4B,0xCD,0x02,0x03,0x45,0x6C,0xF2,0x86,0xF2,0x65,0x52,0x2B,0xCA}, - {0x3B,0xD7,0x9F,0x6C,0xFC,0x9F,0x74,0x03,0x0E,0xB1,0xE9,0x1E,0xA9,0x78,0x0E,0x82, + .seckey={0x3B,0xD7,0x9F,0x6C,0xFC,0x9F,0x74,0x03,0x0E,0xB1,0xE9,0x1E,0xA9,0x78,0x0E,0x82, 0x77,0x64,0x4D,0x4B,0x9C,0x15,0xD7,0x59,0x05,0xC4,0x90,0x57,0xB1,0x61,0x04,0x43}, - "rGGVv46pEy7R8G7tcYsPAsjWhR6WCA7L4T"}, - {{0xA7,0xA2,0x39,0xD1,0x52,0xA2,0x89,0xE4,0xD5,0x02,0xC2,0x43,0x8E,0xFF,0x6B,0x71}, - {0xED,0xFE,0xA6,0xAF,0x9A,0xEA,0x34,0xC8,0xA2,0x78,0x3C,0xED,0x52,0x25,0x97,0x28, + .addr="rGGVv46pEy7R8G7tcYsPAsjWhR6WCA7L4T"}, + {.seed={0xA7,0xA2,0x39,0xD1,0x52,0xA2,0x89,0xE4,0xD5,0x02,0xC2,0x43,0x8E,0xFF,0x6B,0x71}, + .pubkey={0xED,0xFE,0xA6,0xAF,0x9A,0xEA,0x34,0xC8,0xA2,0x78,0x3C,0xED,0x52,0x25,0x97,0x28, 0x1E,0x2E,0x0E,0x47,0xC4,0x8B,0x5D,0x7E,0xDD,0x80,0xAE,0x6B,0xE7,0x30,0x05,0x14,0x84}, - {0xEA,0x8D,0x5B,0x9F,0xA2,0x5B,0x56,0x31,0x97,0x07,0x73,0x6C,0x3B,0xB2,0xA0,0x24, + .seckey={0xEA,0x8D,0x5B,0x9F,0xA2,0x5B,0x56,0x31,0x97,0x07,0x73,0x6C,0x3B,0xB2,0xA0,0x24, 0x66,0x84,0xBA,0x72,0x3E,0xA8,0x64,0x9D,0xDE,0xB7,0x66,0x33,0x54,0x49,0xCE,0xE7}, - "rSZmSEymX238fWeoscc1DqvP3GuXNmNDR"}, - {{0xF6,0xA6,0xE7,0x2C,0xD6,0x32,0x8B,0x7B,0xAF,0x46,0x32,0xC3,0xC5,0x08,0x6C,0xE7}, - {0xED,0x80,0xE2,0x78,0x44,0x83,0x23,0x7B,0xE7,0x14,0xF6,0xE6,0x65,0x34,0x64,0xF2, + .addr="rSZmSEymX238fWeoscc1DqvP3GuXNmNDR"}, + {.seed={0xF6,0xA6,0xE7,0x2C,0xD6,0x32,0x8B,0x7B,0xAF,0x46,0x32,0xC3,0xC5,0x08,0x6C,0xE7}, + .pubkey={0xED,0x80,0xE2,0x78,0x44,0x83,0x23,0x7B,0xE7,0x14,0xF6,0xE6,0x65,0x34,0x64,0xF2, 0x72,0x16,0x11,0xEF,0x4A,0xAC,0x79,0xCC,0xD9,0xA5,0x5E,0x94,0xBB,0x5C,0x8E,0x9A,0x0D}, - {0x9A,0x0F,0xB3,0x5E,0x98,0x6E,0x7C,0x86,0x6E,0xB1,0x99,0x5C,0xD6,0xFA,0xFC,0x97, + .seckey={0x9A,0x0F,0xB3,0x5E,0x98,0x6E,0x7C,0x86,0x6E,0xB1,0x99,0x5C,0xD6,0xFA,0xFC,0x97, 0xE7,0xE3,0x93,0x59,0xF8,0xA9,0x4E,0xBC,0x2C,0xA0,0x3D,0xD2,0x35,0x45,0xCE,0x75}, - "rDdnbVT5k4GDWtqE8qVUTTVvj1Hpsxnm31"}, - {{0x52,0x9B,0x42,0xD5,0x7F,0xC7,0x88,0x9B,0x76,0x37,0xA9,0x3A,0x78,0xF3,0x25,0xA8}, - {0xED,0x42,0xFD,0x63,0x56,0x5F,0x4F,0xBD,0xBA,0x05,0x64,0x07,0xB0,0xD1,0xB7,0xEC, + .addr="rDdnbVT5k4GDWtqE8qVUTTVvj1Hpsxnm31"}, + {.seed={0x52,0x9B,0x42,0xD5,0x7F,0xC7,0x88,0x9B,0x76,0x37,0xA9,0x3A,0x78,0xF3,0x25,0xA8}, + .pubkey={0xED,0x42,0xFD,0x63,0x56,0x5F,0x4F,0xBD,0xBA,0x05,0x64,0x07,0xB0,0xD1,0xB7,0xEC, 0x22,0x57,0x1F,0x40,0x16,0x88,0xA1,0xA1,0x4E,0x4F,0x64,0xF8,0xF7,0xC5,0xD1,0x75,0x75}, - {0xB0,0xC0,0x27,0x7E,0x16,0xF9,0xAD,0xEF,0x10,0xC8,0x69,0xBE,0x35,0x21,0xD2,0xE9, + .seckey={0xB0,0xC0,0x27,0x7E,0x16,0xF9,0xAD,0xEF,0x10,0xC8,0x69,0xBE,0x35,0x21,0xD2,0xE9, 0x3C,0x88,0x97,0x77,0xAD,0xE9,0xAE,0x0C,0x9E,0x54,0xDD,0xB4,0x06,0xDE,0xD3,0xF0}, - "rNLiq2KbE7N4qTcuiFzTAJ34hHKgaSAp22"}, - {{0x39,0xCF,0x81,0xC4,0x1F,0xD3,0xB3,0x2E,0x94,0x55,0x86,0xC7,0x6C,0xF9,0x9B,0x6E}, - {0xED,0x79,0x65,0x13,0x48,0x56,0x93,0xFD,0xE0,0x53,0x85,0x5A,0x95,0xB9,0x17,0x6A, + .addr="rNLiq2KbE7N4qTcuiFzTAJ34hHKgaSAp22"}, + {.seed={0x39,0xCF,0x81,0xC4,0x1F,0xD3,0xB3,0x2E,0x94,0x55,0x86,0xC7,0x6C,0xF9,0x9B,0x6E}, + .pubkey={0xED,0x79,0x65,0x13,0x48,0x56,0x93,0xFD,0xE0,0x53,0x85,0x5A,0x95,0xB9,0x17,0x6A, 0x7D,0x87,0x1D,0x1A,0xA5,0xB9,0x6A,0x5D,0x05,0x3D,0x71,0x71,0xD9,0x4B,0x8F,0xCA,0x78}, - {0x8C,0x38,0x71,0x66,0x07,0x67,0x21,0x7C,0x56,0xBD,0xC9,0xAE,0x16,0x8C,0x3C,0x20, + .seckey={0x8C,0x38,0x71,0x66,0x07,0x67,0x21,0x7C,0x56,0xBD,0xC9,0xAE,0x16,0x8C,0x3C,0x20, 0xED,0xE4,0x08,0xED,0x9E,0xF5,0xEA,0x74,0xDF,0xAA,0xE8,0xC6,0x3E,0xA0,0x16,0xF1}, - "rnAiWEMNatkbaQkCeTdkwB4jeR56Ybwn8H"}, - {{0xE0,0x82,0x92,0x4A,0x14,0x48,0x1B,0xE5,0x91,0xAC,0xD9,0xED,0x33,0x5C,0xDE,0xD7}, - {0xED,0x8D,0xCE,0x64,0x63,0xCB,0xF2,0x73,0x98,0xC1,0xF3,0x5A,0x01,0x51,0xA5,0x22, + .addr="rnAiWEMNatkbaQkCeTdkwB4jeR56Ybwn8H"}, + {.seed={0xE0,0x82,0x92,0x4A,0x14,0x48,0x1B,0xE5,0x91,0xAC,0xD9,0xED,0x33,0x5C,0xDE,0xD7}, + .pubkey={0xED,0x8D,0xCE,0x64,0x63,0xCB,0xF2,0x73,0x98,0xC1,0xF3,0x5A,0x01,0x51,0xA5,0x22, 0x71,0xD3,0xF4,0xF6,0xD7,0x1A,0x10,0x4B,0x05,0x1F,0x23,0x16,0xDD,0xE5,0x0C,0xAC,0x71}, - {0x5A,0xC1,0x39,0x8F,0x4E,0x80,0xF9,0x9D,0xCB,0xC2,0xEF,0xF4,0x16,0xDB,0x5C,0xE6, + .seckey={0x5A,0xC1,0x39,0x8F,0x4E,0x80,0xF9,0x9D,0xCB,0xC2,0xEF,0xF4,0x16,0xDB,0x5C,0xE6, 0xD1,0x62,0xDE,0xA4,0xBD,0x0D,0x99,0x66,0x3C,0xCE,0xFF,0xC9,0xF9,0x84,0xD6,0xB2}, - "r8wffJxiecJuUHxFvhWK6pUP5CG7zKqJR"}, - {{0xD9,0xCB,0x92,0x95,0xB6,0xE6,0xD3,0xBC,0xC9,0x07,0xF9,0x51,0x5D,0xF3,0x11,0x58}, - {0xED,0x86,0xB3,0x5D,0x6E,0xFD,0xDE,0x1E,0x35,0x47,0x48,0x75,0xFB,0xB2,0xA7,0x5B, + .addr="r8wffJxiecJuUHxFvhWK6pUP5CG7zKqJR"}, + {.seed={0xD9,0xCB,0x92,0x95,0xB6,0xE6,0xD3,0xBC,0xC9,0x07,0xF9,0x51,0x5D,0xF3,0x11,0x58}, + .pubkey={0xED,0x86,0xB3,0x5D,0x6E,0xFD,0xDE,0x1E,0x35,0x47,0x48,0x75,0xFB,0xB2,0xA7,0x5B, 0x27,0xC4,0x85,0x56,0xDC,0x34,0x19,0xC3,0xEA,0x2E,0xA6,0xA5,0x42,0x7B,0x5B,0x41,0x29}, - {0xB5,0x5A,0xD0,0xD9,0x93,0x95,0x8E,0xC5,0xF4,0x65,0x00,0x05,0x3F,0xA6,0xD5,0xB4, + .seckey={0xB5,0x5A,0xD0,0xD9,0x93,0x95,0x8E,0xC5,0xF4,0x65,0x00,0x05,0x3F,0xA6,0xD5,0xB4, 0x3F,0x21,0x46,0x0B,0x07,0x37,0xD1,0xD1,0x85,0xF7,0x90,0x62,0x76,0x0F,0x28,0x9B}, - "rGqEtykmqM48BLYHpaX1EvLQRAsxcQdrVb"}, - {{0xC0,0x48,0xD9,0x81,0x1D,0x69,0x70,0x9C,0xD5,0xCE,0x39,0x3A,0xC4,0x53,0x4F,0x10}, - {0xED,0x03,0x77,0x2E,0x58,0x61,0xB1,0xE3,0xEE,0x00,0xDA,0xF6,0x56,0xCD,0x31,0x1B, + .addr="rGqEtykmqM48BLYHpaX1EvLQRAsxcQdrVb"}, + {.seed={0xC0,0x48,0xD9,0x81,0x1D,0x69,0x70,0x9C,0xD5,0xCE,0x39,0x3A,0xC4,0x53,0x4F,0x10}, + .pubkey={0xED,0x03,0x77,0x2E,0x58,0x61,0xB1,0xE3,0xEE,0x00,0xDA,0xF6,0x56,0xCD,0x31,0x1B, 0x3F,0x69,0x49,0x93,0xA0,0x1C,0x57,0x82,0xD5,0x76,0x29,0xB0,0x00,0xCD,0x77,0x2E,0xDB}, - {0xD3,0xED,0x63,0x35,0x0D,0x04,0xF8,0x63,0x98,0xAF,0x78,0xBA,0xCA,0x05,0xB9,0x6F, + .seckey={0xD3,0xED,0x63,0x35,0x0D,0x04,0xF8,0x63,0x98,0xAF,0x78,0xBA,0xCA,0x05,0xB9,0x6F, 0xD4,0x77,0xCF,0x9A,0xA1,0xB4,0xC1,0xFA,0x97,0x8D,0xF9,0xCE,0xF2,0xE3,0xD8,0xE4}, - "rL4NnQiQnF6c5Y1RpcmRLoDXBfhqGbXfz7"}, - {{0x59,0x15,0xCB,0xBC,0xBE,0x81,0x71,0x7F,0x92,0x87,0xB4,0x9D,0xC0,0x71,0x92,0xCE}, - {0xED,0x50,0xBF,0xA6,0x4D,0x2D,0x46,0xB6,0x37,0xCB,0xF7,0x4C,0xEB,0x0B,0xAE,0xF2, + .addr="rL4NnQiQnF6c5Y1RpcmRLoDXBfhqGbXfz7"}, + {.seed={0x59,0x15,0xCB,0xBC,0xBE,0x81,0x71,0x7F,0x92,0x87,0xB4,0x9D,0xC0,0x71,0x92,0xCE}, + .pubkey={0xED,0x50,0xBF,0xA6,0x4D,0x2D,0x46,0xB6,0x37,0xCB,0xF7,0x4C,0xEB,0x0B,0xAE,0xF2, 0xF4,0xAF,0xB2,0x67,0xEF,0x7D,0x9B,0xE9,0x23,0x46,0x20,0x2B,0x67,0x6E,0x7B,0x96,0x68}, - {0xFB,0x75,0x27,0xE7,0xA6,0x5F,0x41,0x04,0xA4,0xFE,0x56,0xB3,0xFD,0x22,0x8A,0x38, + .seckey={0xFB,0x75,0x27,0xE7,0xA6,0x5F,0x41,0x04,0xA4,0xFE,0x56,0xB3,0xFD,0x22,0x8A,0x38, 0x73,0x28,0x1E,0x01,0x07,0xF7,0x50,0x7C,0x33,0x9B,0x64,0x53,0x01,0x65,0x1B,0x9D}, - "rUxeSACZn7nT3VqubgoREY3yqnRbzKLYs"}, - {{0xB9,0xE1,0x68,0xB8,0x95,0x4C,0xA3,0xB2,0x7E,0x03,0x68,0xC0,0xC8,0x45,0x13,0x47}, - {0xED,0xB4,0x64,0xF1,0x2B,0xFB,0x7B,0x04,0x93,0x5E,0xFC,0x6E,0x46,0x40,0xBB,0x46, + .addr="rUxeSACZn7nT3VqubgoREY3yqnRbzKLYs"}, + {.seed={0xB9,0xE1,0x68,0xB8,0x95,0x4C,0xA3,0xB2,0x7E,0x03,0x68,0xC0,0xC8,0x45,0x13,0x47}, + .pubkey={0xED,0xB4,0x64,0xF1,0x2B,0xFB,0x7B,0x04,0x93,0x5E,0xFC,0x6E,0x46,0x40,0xBB,0x46, 0x6D,0x40,0x94,0x72,0x61,0x60,0xA7,0xC2,0x08,0xF6,0x80,0x1C,0x1A,0xE8,0xEF,0xAF,0x1D}, - {0xE8,0xD3,0x03,0x76,0xA9,0x68,0x90,0x03,0xE5,0x87,0x4E,0x37,0x3C,0xD6,0x78,0xE1, + .seckey={0xE8,0xD3,0x03,0x76,0xA9,0x68,0x90,0x03,0xE5,0x87,0x4E,0x37,0x3C,0xD6,0x78,0xE1, 0x0E,0xCC,0x9C,0xB0,0xAD,0xD5,0xB6,0x6D,0xFA,0xDF,0x70,0xAA,0x68,0x86,0xED,0x07}, - "rMCAnfWAwGSNCq8aBh6QdZjwvfjy1icMnA"}, - {{0x35,0xD6,0x75,0x85,0x52,0xBF,0x61,0x4C,0xA7,0xEB,0xA4,0xB5,0xDD,0x03,0x01,0x75}, - {0xED,0x9C,0xC9,0x6A,0x89,0x2E,0x2D,0x7B,0x10,0xEB,0x55,0xAD,0x5B,0xE1,0xDC,0x9B, + .addr="rMCAnfWAwGSNCq8aBh6QdZjwvfjy1icMnA"}, + {.seed={0x35,0xD6,0x75,0x85,0x52,0xBF,0x61,0x4C,0xA7,0xEB,0xA4,0xB5,0xDD,0x03,0x01,0x75}, + .pubkey={0xED,0x9C,0xC9,0x6A,0x89,0x2E,0x2D,0x7B,0x10,0xEB,0x55,0xAD,0x5B,0xE1,0xDC,0x9B, 0x40,0xC4,0x5C,0xE8,0x5B,0x4C,0xEA,0x53,0x03,0x3B,0x96,0x58,0xBD,0x0F,0x50,0x6A,0x21}, - {0x43,0xA6,0xFB,0x04,0xA6,0xBB,0x0A,0x6E,0x8B,0x0D,0x16,0x7E,0x1F,0x4E,0x60,0xEF, + .seckey={0x43,0xA6,0xFB,0x04,0xA6,0xBB,0x0A,0x6E,0x8B,0x0D,0x16,0x7E,0x1F,0x4E,0x60,0xEF, 0x8D,0x54,0xFF,0x7F,0xCD,0x8B,0x4C,0x4B,0x67,0xAF,0x26,0x86,0x46,0xB1,0x67,0x0B}, - "rB9EttAzy3mwq1snef5nZdTVrvEU7BXfmv"}, - {{0xD2,0xB7,0x78,0x83,0x50,0x80,0x9B,0x83,0x32,0x01,0xBE,0xF2,0x0E,0xF4,0xA5,0x77}, - {0xED,0x9D,0x0B,0x8F,0x08,0x35,0x7A,0xF9,0x27,0x52,0xAB,0x85,0x56,0x7A,0x6C,0xA6, + .addr="rB9EttAzy3mwq1snef5nZdTVrvEU7BXfmv"}, + {.seed={0xD2,0xB7,0x78,0x83,0x50,0x80,0x9B,0x83,0x32,0x01,0xBE,0xF2,0x0E,0xF4,0xA5,0x77}, + .pubkey={0xED,0x9D,0x0B,0x8F,0x08,0x35,0x7A,0xF9,0x27,0x52,0xAB,0x85,0x56,0x7A,0x6C,0xA6, 0xE3,0xCC,0x6F,0xEF,0x6F,0x68,0xBE,0xEA,0xE9,0x23,0x3C,0x17,0x38,0xF3,0xFE,0x7A,0x21}, - {0x3C,0xF3,0xD7,0x99,0x8B,0x32,0xE1,0xE3,0xFD,0x4C,0x2D,0x64,0x81,0xA4,0x5B,0x37, + .seckey={0x3C,0xF3,0xD7,0x99,0x8B,0x32,0xE1,0xE3,0xFD,0x4C,0x2D,0x64,0x81,0xA4,0x5B,0x37, 0x32,0xBC,0x5E,0xF2,0x49,0x3B,0x66,0x8C,0xF7,0x09,0x7D,0xBF,0xEE,0x04,0x20,0x42}, - "rHRcCSww7zrZd6YWATkHSPfB8hiY95x89W"}, - {{0xE6,0xC3,0x5D,0x69,0xB0,0x5A,0xA4,0x68,0xC4,0x55,0xCF,0xBE,0x48,0x1C,0x44,0xDA}, - {0xED,0x06,0x93,0x43,0xDF,0x20,0x7F,0x83,0x13,0x36,0x92,0x84,0xD4,0x8E,0xAA,0xD4, + .addr="rHRcCSww7zrZd6YWATkHSPfB8hiY95x89W"}, + {.seed={0xE6,0xC3,0x5D,0x69,0xB0,0x5A,0xA4,0x68,0xC4,0x55,0xCF,0xBE,0x48,0x1C,0x44,0xDA}, + .pubkey={0xED,0x06,0x93,0x43,0xDF,0x20,0x7F,0x83,0x13,0x36,0x92,0x84,0xD4,0x8E,0xAA,0xD4, 0xDA,0xC9,0x2F,0x90,0x68,0xE5,0xFB,0x70,0xE9,0x02,0x4E,0x6C,0xD3,0x0E,0x95,0x56,0x59}, - {0xDE,0x0B,0x64,0x22,0xB7,0x27,0x23,0x17,0xC1,0xC2,0x87,0x14,0xFE,0x76,0x12,0x01, + .seckey={0xDE,0x0B,0x64,0x22,0xB7,0x27,0x23,0x17,0xC1,0xC2,0x87,0x14,0xFE,0x76,0x12,0x01, 0xE3,0x88,0x61,0xFC,0xCB,0x3C,0x6C,0xD1,0x28,0xB2,0x5F,0xE5,0xBA,0xAF,0xA1,0xF5}, - "rMGb1sfstgo3wrEsaJHpUq7HnQHGB18ca4"}, - {{0xBC,0xA0,0x3D,0xB1,0xC1,0xAC,0x5D,0x95,0x8A,0x0A,0x8F,0x85,0x57,0xEA,0x8F,0x3A}, - {0xED,0x81,0xFD,0x11,0x50,0xF0,0x7E,0x30,0x8C,0x82,0x09,0xAE,0xA6,0x18,0xFA,0x00, + .addr="rMGb1sfstgo3wrEsaJHpUq7HnQHGB18ca4"}, + {.seed={0xBC,0xA0,0x3D,0xB1,0xC1,0xAC,0x5D,0x95,0x8A,0x0A,0x8F,0x85,0x57,0xEA,0x8F,0x3A}, + .pubkey={0xED,0x81,0xFD,0x11,0x50,0xF0,0x7E,0x30,0x8C,0x82,0x09,0xAE,0xA6,0x18,0xFA,0x00, 0xDC,0xF7,0xA9,0xD8,0xCE,0xB4,0xA6,0x07,0x53,0x6F,0x3D,0x2B,0x16,0xEE,0xDD,0x27,0x27}, - {0xB4,0x02,0x85,0x56,0xD6,0xDF,0x94,0x96,0x02,0x17,0x3B,0x35,0xA4,0xF3,0x23,0xC9, + .seckey={0xB4,0x02,0x85,0x56,0xD6,0xDF,0x94,0x96,0x02,0x17,0x3B,0x35,0xA4,0xF3,0x23,0xC9, 0xB2,0x63,0x6B,0xDA,0x5A,0xC2,0xF0,0x62,0x0C,0x5E,0xBF,0x3B,0xE2,0x1B,0xDD,0x1C}, - "rMd5FozFR6P5KZpdiYobDsR7pLcGYzYNNC"}, - {{0x6E,0x8F,0x73,0xA9,0x4F,0x55,0xD8,0x78,0x79,0xF7,0x1F,0xDA,0x52,0xF2,0x21,0xFE}, - {0xED,0x10,0x2F,0xF5,0xD3,0xED,0xC4,0xDB,0xB8,0xF7,0x8F,0x1B,0x76,0xF0,0xFC,0x1B, + .addr="rMd5FozFR6P5KZpdiYobDsR7pLcGYzYNNC"}, + {.seed={0x6E,0x8F,0x73,0xA9,0x4F,0x55,0xD8,0x78,0x79,0xF7,0x1F,0xDA,0x52,0xF2,0x21,0xFE}, + .pubkey={0xED,0x10,0x2F,0xF5,0xD3,0xED,0xC4,0xDB,0xB8,0xF7,0x8F,0x1B,0x76,0xF0,0xFC,0x1B, 0x4E,0xB6,0x5A,0xFA,0xD5,0x88,0x70,0xA7,0xD0,0x97,0xB3,0x03,0x6F,0x76,0x49,0x15,0x47}, - {0xF2,0x13,0xEE,0xF6,0xF9,0x2E,0x96,0x1F,0xA3,0x07,0x9C,0xD8,0x43,0x5B,0x72,0xC9, + .seckey={0xF2,0x13,0xEE,0xF6,0xF9,0x2E,0x96,0x1F,0xA3,0x07,0x9C,0xD8,0x43,0x5B,0x72,0xC9, 0xA1,0xF9,0xDE,0xF5,0xA6,0x60,0x65,0x43,0x8E,0x43,0xE2,0x04,0xF9,0x51,0x32,0x9F}, - "rQUcKBg3eHzTWRUJD4PbNcmPBNwvhbvF3o"}, - {{0x1E,0x52,0x4A,0x10,0x70,0x6B,0x4C,0x92,0x71,0xAA,0x5A,0x43,0x18,0x7C,0x2B,0x63}, - {0xED,0x57,0x58,0x44,0xBA,0x0B,0xCA,0xAE,0x24,0xB1,0xFF,0xFE,0xD9,0xA8,0x7C,0xB6, + .addr="rQUcKBg3eHzTWRUJD4PbNcmPBNwvhbvF3o"}, + {.seed={0x1E,0x52,0x4A,0x10,0x70,0x6B,0x4C,0x92,0x71,0xAA,0x5A,0x43,0x18,0x7C,0x2B,0x63}, + .pubkey={0xED,0x57,0x58,0x44,0xBA,0x0B,0xCA,0xAE,0x24,0xB1,0xFF,0xFE,0xD9,0xA8,0x7C,0xB6, 0xE4,0xB3,0x8F,0x64,0x6C,0x91,0xBD,0x78,0x2A,0x8A,0xFA,0x82,0x99,0x2B,0x31,0x2A,0xBE}, - {0xE0,0x10,0x7E,0x8C,0x5F,0x0A,0xFE,0xAC,0xC4,0xEC,0x23,0xDD,0x19,0x2B,0x6F,0x19, + .seckey={0xE0,0x10,0x7E,0x8C,0x5F,0x0A,0xFE,0xAC,0xC4,0xEC,0x23,0xDD,0x19,0x2B,0x6F,0x19, 0x56,0xD9,0xF0,0x11,0xAE,0x78,0xE3,0x09,0xF8,0x5A,0x40,0xFF,0x55,0x28,0x70,0xDB}, - "rJmrBAQs7Rw6pZiKRchGS9zySz3H9S9jRE"}, - {{0x6E,0xA9,0x92,0xD3,0x42,0x3A,0x80,0x53,0x9C,0xC3,0x0C,0xFC,0x3A,0x37,0x30,0x61}, - {0xED,0xB2,0x46,0xA6,0x54,0x0A,0xE4,0xDE,0x4E,0xB1,0xFA,0x44,0x25,0xB9,0x8E,0x8D, + .addr="rJmrBAQs7Rw6pZiKRchGS9zySz3H9S9jRE"}, + {.seed={0x6E,0xA9,0x92,0xD3,0x42,0x3A,0x80,0x53,0x9C,0xC3,0x0C,0xFC,0x3A,0x37,0x30,0x61}, + .pubkey={0xED,0xB2,0x46,0xA6,0x54,0x0A,0xE4,0xDE,0x4E,0xB1,0xFA,0x44,0x25,0xB9,0x8E,0x8D, 0x14,0x0D,0xC5,0x4B,0x74,0xC5,0xEE,0x5F,0xFB,0x7C,0x92,0x1F,0xBE,0x65,0x2E,0xBC,0x44}, - {0xE4,0x3D,0xFE,0x62,0x4E,0x98,0x00,0x30,0x7E,0x79,0x70,0x6D,0x70,0x0E,0x6B,0xEC, + .seckey={0xE4,0x3D,0xFE,0x62,0x4E,0x98,0x00,0x30,0x7E,0x79,0x70,0x6D,0x70,0x0E,0x6B,0xEC, 0x32,0x93,0x6C,0xBB,0x99,0xC4,0x4C,0x49,0x94,0xF5,0x6C,0xC4,0x9E,0x5B,0x85,0x88}, - "rMasL6hDPMB25XMh3AoTXcNE1ggQpox4sX"}, - {{0xE0,0xB2,0x0C,0x61,0x5E,0x22,0x0F,0xA8,0xB7,0xC9,0xAA,0x7C,0x06,0x39,0x38,0x0E}, - {0xED,0x1A,0x10,0xE1,0xE5,0xF6,0xBC,0x51,0x92,0xFC,0x8B,0x3B,0xBD,0x76,0x2A,0xEC, + .addr="rMasL6hDPMB25XMh3AoTXcNE1ggQpox4sX"}, + {.seed={0xE0,0xB2,0x0C,0x61,0x5E,0x22,0x0F,0xA8,0xB7,0xC9,0xAA,0x7C,0x06,0x39,0x38,0x0E}, + .pubkey={0xED,0x1A,0x10,0xE1,0xE5,0xF6,0xBC,0x51,0x92,0xFC,0x8B,0x3B,0xBD,0x76,0x2A,0xEC, 0x16,0x09,0xE5,0x08,0xDE,0x1E,0xAE,0x33,0x37,0x47,0x0E,0xD3,0xC1,0x7C,0xA9,0x48,0x84}, - {0x59,0x94,0x21,0x92,0xEF,0x9C,0xA7,0xF8,0xD3,0x76,0xA9,0x82,0xFC,0x76,0x4B,0xF7, + .seckey={0x59,0x94,0x21,0x92,0xEF,0x9C,0xA7,0xF8,0xD3,0x76,0xA9,0x82,0xFC,0x76,0x4B,0xF7, 0x87,0x1F,0x15,0x7C,0x35,0xF0,0xB2,0xB5,0x79,0xD3,0xCE,0x5B,0xFE,0x5F,0x8B,0x9C}, - "rKdzTk4JtuS6iad4WvA7vCVgNAYLd3L6R1"}, - {{0x4E,0x7E,0x66,0xFF,0x98,0x41,0x44,0x82,0xC1,0x96,0xAA,0xF9,0x30,0xA9,0xC2,0x6D}, - {0xED,0x87,0x05,0x76,0xA3,0x27,0x67,0x78,0x32,0x2D,0x46,0xF4,0x10,0x1F,0x64,0x3A, + .addr="rKdzTk4JtuS6iad4WvA7vCVgNAYLd3L6R1"}, + {.seed={0x4E,0x7E,0x66,0xFF,0x98,0x41,0x44,0x82,0xC1,0x96,0xAA,0xF9,0x30,0xA9,0xC2,0x6D}, + .pubkey={0xED,0x87,0x05,0x76,0xA3,0x27,0x67,0x78,0x32,0x2D,0x46,0xF4,0x10,0x1F,0x64,0x3A, 0xDC,0x81,0xBC,0xE0,0xE2,0x5A,0xB3,0xB3,0x23,0x31,0x78,0x87,0x82,0xFA,0xA1,0x83,0xB0}, - {0x83,0x2D,0x28,0x6A,0xA6,0x7B,0xD6,0x31,0xDB,0x54,0x83,0x40,0x43,0xC4,0x4D,0x09, + .seckey={0x83,0x2D,0x28,0x6A,0xA6,0x7B,0xD6,0x31,0xDB,0x54,0x83,0x40,0x43,0xC4,0x4D,0x09, 0x6F,0xBD,0xFD,0x0B,0x6C,0x00,0x9E,0x27,0x28,0xC9,0x92,0xCF,0x27,0xD4,0x7B,0x9A}, - "rP9f847oBmousWhxkf3FsYFmvmmDXr4U8F"}, - {{0xE6,0x8D,0x1F,0xF8,0x07,0x3B,0xA3,0xFB,0x3D,0xA7,0xD0,0x21,0x09,0x0F,0x00,0xAE}, - {0xED,0x63,0x58,0xA0,0x9A,0x6B,0x4A,0xF9,0xD8,0x8D,0xCF,0x59,0x3E,0x6C,0xB7,0x7B, + .addr="rP9f847oBmousWhxkf3FsYFmvmmDXr4U8F"}, + {.seed={0xE6,0x8D,0x1F,0xF8,0x07,0x3B,0xA3,0xFB,0x3D,0xA7,0xD0,0x21,0x09,0x0F,0x00,0xAE}, + .pubkey={0xED,0x63,0x58,0xA0,0x9A,0x6B,0x4A,0xF9,0xD8,0x8D,0xCF,0x59,0x3E,0x6C,0xB7,0x7B, 0x6A,0x49,0x82,0x98,0x35,0x0D,0x38,0x60,0x49,0xE0,0xD2,0xDB,0xEF,0xE2,0x49,0xE7,0xF4}, - {0xB8,0x97,0xC6,0x04,0xCF,0x24,0xED,0x9D,0x2D,0x24,0x9D,0x8D,0x7A,0xD1,0xED,0x31, + .seckey={0xB8,0x97,0xC6,0x04,0xCF,0x24,0xED,0x9D,0x2D,0x24,0x9D,0x8D,0x7A,0xD1,0xED,0x31, 0x20,0x4D,0x77,0xD9,0x03,0x47,0x69,0x85,0x08,0xFA,0x88,0xFC,0xB1,0x25,0x85,0x92}, - "rUU3a724prcKc7ZhPFjD2jbqi2ASTWLwb5"}, - {{0x8B,0x69,0x73,0xBE,0xBE,0x79,0x14,0x81,0x0E,0x0C,0x83,0x13,0x47,0x8E,0xCF,0x3F}, - {0xED,0x84,0x49,0xF9,0xB5,0xC9,0x0E,0xEE,0x3B,0x13,0x3B,0xBF,0x60,0x17,0x11,0x14, + .addr="rUU3a724prcKc7ZhPFjD2jbqi2ASTWLwb5"}, + {.seed={0x8B,0x69,0x73,0xBE,0xBE,0x79,0x14,0x81,0x0E,0x0C,0x83,0x13,0x47,0x8E,0xCF,0x3F}, + .pubkey={0xED,0x84,0x49,0xF9,0xB5,0xC9,0x0E,0xEE,0x3B,0x13,0x3B,0xBF,0x60,0x17,0x11,0x14, 0xB1,0xD8,0xC4,0x9E,0x25,0xB8,0x04,0xD3,0xDC,0x3F,0xB5,0x97,0x9D,0xDE,0xB6,0x71,0xF8}, - {0xBD,0xEF,0xBD,0x40,0xC4,0x11,0x3F,0xDD,0x5C,0x7E,0xBE,0xA1,0x11,0xC5,0x23,0x59, + .seckey={0xBD,0xEF,0xBD,0x40,0xC4,0x11,0x3F,0xDD,0x5C,0x7E,0xBE,0xA1,0x11,0xC5,0x23,0x59, 0x36,0xA8,0x73,0x14,0x64,0xE5,0x8B,0x16,0x2E,0xF7,0xF8,0x46,0x83,0x28,0x84,0xF1}, - "rNrAyuhowX4Lvy1qdb19CZhDe7jWjAuQQh"}, - {{0x3B,0xF3,0x6E,0x7E,0xE4,0xB1,0x7E,0x2B,0xD3,0x86,0xC0,0xE6,0x81,0xED,0x07,0x07}, - {0xED,0x99,0xBD,0x79,0xAA,0xE3,0x57,0x89,0xF0,0x1D,0xDC,0x29,0x12,0x47,0x1A,0xF7, + .addr="rNrAyuhowX4Lvy1qdb19CZhDe7jWjAuQQh"}, + {.seed={0x3B,0xF3,0x6E,0x7E,0xE4,0xB1,0x7E,0x2B,0xD3,0x86,0xC0,0xE6,0x81,0xED,0x07,0x07}, + .pubkey={0xED,0x99,0xBD,0x79,0xAA,0xE3,0x57,0x89,0xF0,0x1D,0xDC,0x29,0x12,0x47,0x1A,0xF7, 0xC0,0x05,0xB1,0xD9,0xD5,0xAC,0x3A,0xA7,0x76,0x57,0x7C,0x49,0xEC,0xF3,0xCC,0xFB,0xD2}, - {0x1D,0x87,0x3A,0x2F,0xCE,0x48,0xFF,0xD4,0xEF,0x13,0xCE,0x83,0x94,0x88,0x75,0xF5, + .seckey={0x1D,0x87,0x3A,0x2F,0xCE,0x48,0xFF,0xD4,0xEF,0x13,0xCE,0x83,0x94,0x88,0x75,0xF5, 0x58,0x39,0x82,0x50,0x7D,0x46,0xBF,0x6C,0x25,0xAB,0x1F,0xDB,0x42,0xB3,0x54,0x5C}, - "rDMWBAzDeam8BvJEpjntHBczHPQeppR9nx"}, - {{0x68,0x52,0x0F,0x9F,0xB9,0x6E,0xB5,0x01,0x10,0xC3,0x6C,0x13,0x83,0x78,0xE9,0x14}, - {0xED,0x17,0xA9,0x94,0x74,0x77,0x89,0x18,0x02,0xE0,0xE9,0x48,0xAE,0xC4,0x31,0x7E, + .addr="rDMWBAzDeam8BvJEpjntHBczHPQeppR9nx"}, + {.seed={0x68,0x52,0x0F,0x9F,0xB9,0x6E,0xB5,0x01,0x10,0xC3,0x6C,0x13,0x83,0x78,0xE9,0x14}, + .pubkey={0xED,0x17,0xA9,0x94,0x74,0x77,0x89,0x18,0x02,0xE0,0xE9,0x48,0xAE,0xC4,0x31,0x7E, 0x1E,0xE0,0xEC,0x45,0xBC,0xC5,0x69,0x6E,0x94,0x07,0x00,0xEB,0x0B,0x26,0x6B,0xF5,0x0D}, - {0x02,0xE9,0xBC,0x25,0xB7,0x1F,0xA4,0x8A,0x3D,0x35,0xA2,0xDB,0x89,0xF2,0xAE,0xE0, + .seckey={0x02,0xE9,0xBC,0x25,0xB7,0x1F,0xA4,0x8A,0x3D,0x35,0xA2,0xDB,0x89,0xF2,0xAE,0xE0, 0x5C,0x15,0xA1,0xA3,0x31,0x28,0x53,0xFF,0x43,0xD1,0xC8,0x66,0x74,0x14,0x3B,0xE6}, - "rBAzfmZZqjPFK7TzjHfCMhV8aHLDgr6wBC"}, - {{0x8A,0x6D,0x4F,0xF7,0x60,0xD3,0xDB,0xD1,0xE5,0xF7,0x3E,0xA5,0x4A,0xC3,0x8B,0xA5}, - {0xED,0x66,0x4B,0x49,0x86,0xBD,0x84,0x6F,0x8E,0x6F,0x79,0x43,0x5C,0x45,0x38,0xF7, + .addr="rBAzfmZZqjPFK7TzjHfCMhV8aHLDgr6wBC"}, + {.seed={0x8A,0x6D,0x4F,0xF7,0x60,0xD3,0xDB,0xD1,0xE5,0xF7,0x3E,0xA5,0x4A,0xC3,0x8B,0xA5}, + .pubkey={0xED,0x66,0x4B,0x49,0x86,0xBD,0x84,0x6F,0x8E,0x6F,0x79,0x43,0x5C,0x45,0x38,0xF7, 0x12,0xC8,0x7F,0xCE,0xF4,0xD0,0x29,0xD8,0x23,0x03,0xCE,0x69,0x22,0x41,0xFB,0x93,0x1F}, - {0x07,0x20,0xDB,0x0A,0xBC,0x3D,0x1F,0xB5,0x83,0x80,0x97,0x13,0xE0,0x64,0xAD,0x6B, + .seckey={0x07,0x20,0xDB,0x0A,0xBC,0x3D,0x1F,0xB5,0x83,0x80,0x97,0x13,0xE0,0x64,0xAD,0x6B, 0xAD,0x9A,0x88,0xD1,0x3A,0x94,0xC2,0x63,0xE9,0x54,0x9D,0x1E,0x61,0xB6,0x20,0xF5}, - "rGvs6gtwzf6JM1emzYDftUHngJ4CjTmnjz"}, - {{0xEA,0xD6,0xF2,0x74,0x7C,0x69,0x18,0xB3,0x24,0x18,0xF6,0xAE,0x68,0x32,0xC2,0x3B}, - {0xED,0xC9,0x61,0xB8,0xFE,0xB0,0x67,0x63,0xC6,0xCD,0x26,0x44,0x12,0xBD,0xEC,0xEE, + .addr="rGvs6gtwzf6JM1emzYDftUHngJ4CjTmnjz"}, + {.seed={0xEA,0xD6,0xF2,0x74,0x7C,0x69,0x18,0xB3,0x24,0x18,0xF6,0xAE,0x68,0x32,0xC2,0x3B}, + .pubkey={0xED,0xC9,0x61,0xB8,0xFE,0xB0,0x67,0x63,0xC6,0xCD,0x26,0x44,0x12,0xBD,0xEC,0xEE, 0x8E,0xD4,0x6F,0x9E,0x75,0x13,0xF5,0xDB,0x0D,0x7D,0x1D,0x8C,0xD4,0x2C,0xAE,0xD0,0x0C}, - {0x80,0x46,0x0F,0x71,0xF0,0x51,0x2C,0xF7,0xFB,0x33,0x1A,0xF2,0x7D,0x18,0xD4,0x33, + .seckey={0x80,0x46,0x0F,0x71,0xF0,0x51,0x2C,0xF7,0xFB,0x33,0x1A,0xF2,0x7D,0x18,0xD4,0x33, 0x2E,0xC6,0x1E,0xD8,0x54,0x2E,0x6C,0x04,0x40,0xB4,0xE1,0xCC,0xC4,0x0E,0x18,0x93}, - "rsQcFiFTAHgY8JEssbG9daaz7YV8XeFMK4"}, - {{0x00,0xF7,0xAD,0xB8,0x65,0xE9,0x3A,0x29,0xD0,0x16,0xEC,0x90,0x5B,0x26,0xA4,0x36}, - {0xED,0xF9,0x3C,0x87,0xD0,0x9D,0x31,0xA7,0x19,0x18,0xC3,0x5E,0xDC,0xD3,0x1E,0x87, + .addr="rsQcFiFTAHgY8JEssbG9daaz7YV8XeFMK4"}, + {.seed={0x00,0xF7,0xAD,0xB8,0x65,0xE9,0x3A,0x29,0xD0,0x16,0xEC,0x90,0x5B,0x26,0xA4,0x36}, + .pubkey={0xED,0xF9,0x3C,0x87,0xD0,0x9D,0x31,0xA7,0x19,0x18,0xC3,0x5E,0xDC,0xD3,0x1E,0x87, 0x44,0x1A,0xA8,0x11,0xA8,0x07,0x6B,0xCB,0x0E,0xED,0xBA,0x44,0x28,0x33,0xE0,0x9E,0x65}, - {0x64,0xAB,0xE9,0xFE,0x6D,0x4F,0x82,0x70,0x7D,0xEF,0x9A,0xF4,0x81,0x88,0x16,0x95, + .seckey={0x64,0xAB,0xE9,0xFE,0x6D,0x4F,0x82,0x70,0x7D,0xEF,0x9A,0xF4,0x81,0x88,0x16,0x95, 0x49,0x42,0x8D,0x8A,0xD9,0x7E,0x62,0x81,0xF4,0x4A,0x35,0x01,0xD3,0x4B,0xFA,0xF0}, - "r58iT3yfxxeLZvLevRcWcDgNFrSUyBieP"}, - {{0x83,0x6D,0xFD,0xE4,0x9A,0xCA,0xAA,0xDA,0x08,0xA4,0xBD,0xB0,0x65,0xE6,0x84,0x10}, - {0xED,0xE1,0x2C,0x6C,0x9B,0x70,0x0B,0x1D,0xBA,0x49,0x49,0x1F,0xEF,0x72,0x4D,0x46, + .addr="r58iT3yfxxeLZvLevRcWcDgNFrSUyBieP"}, + {.seed={0x83,0x6D,0xFD,0xE4,0x9A,0xCA,0xAA,0xDA,0x08,0xA4,0xBD,0xB0,0x65,0xE6,0x84,0x10}, + .pubkey={0xED,0xE1,0x2C,0x6C,0x9B,0x70,0x0B,0x1D,0xBA,0x49,0x49,0x1F,0xEF,0x72,0x4D,0x46, 0xE8,0x72,0xB5,0x2B,0x16,0xDC,0xC6,0xC1,0xB6,0x7D,0xC4,0x5B,0xA1,0xAA,0x99,0x43,0x9E}, - {0x8F,0xD8,0x72,0x25,0x43,0x5E,0xD6,0x6B,0xD0,0x6A,0x21,0x2D,0x11,0x81,0xCD,0xE9, + .seckey={0x8F,0xD8,0x72,0x25,0x43,0x5E,0xD6,0x6B,0xD0,0x6A,0x21,0x2D,0x11,0x81,0xCD,0xE9, 0x3C,0x58,0xA7,0x91,0xDC,0x29,0x79,0x3F,0x29,0xB1,0x23,0x80,0xBE,0x6C,0xAB,0x3D}, - "rhUqESrPkP75maWRrpGqAAVda6HsR9wQbR"}, - {{0xD1,0xB7,0x57,0x48,0xD2,0x27,0x31,0x3B,0x43,0x15,0xA2,0x6D,0x30,0x8A,0xB4,0x2A}, - {0xED,0x02,0xBB,0x15,0x41,0x52,0x62,0xE0,0xA6,0xDA,0xCD,0x5E,0xA7,0xF1,0x64,0xBA, + .addr="rhUqESrPkP75maWRrpGqAAVda6HsR9wQbR"}, + {.seed={0xD1,0xB7,0x57,0x48,0xD2,0x27,0x31,0x3B,0x43,0x15,0xA2,0x6D,0x30,0x8A,0xB4,0x2A}, + .pubkey={0xED,0x02,0xBB,0x15,0x41,0x52,0x62,0xE0,0xA6,0xDA,0xCD,0x5E,0xA7,0xF1,0x64,0xBA, 0x5E,0x45,0xB9,0x6A,0xFA,0x62,0xE0,0xF1,0x82,0x6B,0x94,0x10,0x8A,0xD9,0xDB,0xD6,0xDC}, - {0x18,0xFE,0xAD,0x09,0x91,0xFB,0x01,0xDF,0xFB,0x98,0x3B,0xB3,0x52,0xB8,0xB8,0xA4, + .seckey={0x18,0xFE,0xAD,0x09,0x91,0xFB,0x01,0xDF,0xFB,0x98,0x3B,0xB3,0x52,0xB8,0xB8,0xA4, 0x0E,0x81,0x84,0xBC,0x04,0xD8,0x69,0xC0,0x0C,0x2C,0xD4,0x0F,0x28,0x49,0xFC,0x11}, - "r9iuLmgHRCbUaA9AMybjBuBjNYTN34viiK"}, - {{0xBE,0x60,0x4D,0x3F,0x85,0x07,0x3B,0x0E,0x0C,0xD7,0xD5,0xDB,0x69,0x9E,0x2A,0xAC}, - {0xED,0xD8,0xB2,0x19,0x60,0xC3,0xA0,0x27,0x24,0x3C,0x01,0x4E,0x07,0x39,0x17,0xF3, + .addr="r9iuLmgHRCbUaA9AMybjBuBjNYTN34viiK"}, + {.seed={0xBE,0x60,0x4D,0x3F,0x85,0x07,0x3B,0x0E,0x0C,0xD7,0xD5,0xDB,0x69,0x9E,0x2A,0xAC}, + .pubkey={0xED,0xD8,0xB2,0x19,0x60,0xC3,0xA0,0x27,0x24,0x3C,0x01,0x4E,0x07,0x39,0x17,0xF3, 0xC9,0x93,0x7B,0xB5,0x5E,0xF4,0x55,0xEB,0xD0,0xD0,0xB7,0x62,0x82,0xC7,0xD7,0xA9,0xAE}, - {0x07,0x3C,0x18,0x34,0x37,0xCA,0xE4,0xCE,0x3B,0xD6,0xBD,0xB0,0x5D,0xB0,0x2A,0xE1, + .seckey={0x07,0x3C,0x18,0x34,0x37,0xCA,0xE4,0xCE,0x3B,0xD6,0xBD,0xB0,0x5D,0xB0,0x2A,0xE1, 0x31,0xBD,0x95,0x9A,0x9D,0xC7,0x3E,0x4C,0xEA,0x18,0x44,0x05,0xF4,0xE9,0x31,0xB2}, - "rnrYBExFRbfamRgyrTo7uFhG2r1XzjgL8Y"}, - {{0x3A,0xAC,0x26,0x07,0xC1,0xAD,0x65,0x58,0xDE,0x12,0x6B,0x94,0xB9,0x4F,0x5F,0x68}, - {0xED,0x26,0x42,0xE5,0xF8,0x41,0x5B,0x28,0x2C,0x7B,0x32,0x19,0x73,0x31,0xFB,0x44, + .addr="rnrYBExFRbfamRgyrTo7uFhG2r1XzjgL8Y"}, + {.seed={0x3A,0xAC,0x26,0x07,0xC1,0xAD,0x65,0x58,0xDE,0x12,0x6B,0x94,0xB9,0x4F,0x5F,0x68}, + .pubkey={0xED,0x26,0x42,0xE5,0xF8,0x41,0x5B,0x28,0x2C,0x7B,0x32,0x19,0x73,0x31,0xFB,0x44, 0x89,0xBD,0x3E,0xA9,0xCC,0x82,0x5D,0xC9,0x18,0x7D,0x0A,0xF8,0x4D,0x2E,0xA2,0xA4,0x20}, - {0x1E,0x8C,0x09,0x43,0x9A,0x3E,0x23,0x7B,0x54,0x73,0x75,0x67,0xCE,0x6C,0x56,0xCD, + .seckey={0x1E,0x8C,0x09,0x43,0x9A,0x3E,0x23,0x7B,0x54,0x73,0x75,0x67,0xCE,0x6C,0x56,0xCD, 0x6E,0x1B,0x26,0xCC,0xE6,0x7D,0x69,0x9F,0x00,0xE5,0x10,0x2F,0x36,0xFC,0xC5,0xF7}, - "r3YdsPCvfJ5AVbaWyd2oK7fy7zFnSiyA8a"}, - {{0xF0,0x42,0x36,0x84,0xA4,0xC3,0xF7,0xED,0x27,0x0F,0x8E,0x99,0x8C,0x62,0x6A,0x01}, - {0xED,0xEA,0xCE,0xD9,0x7E,0xF9,0x59,0x6D,0x7D,0x3A,0x82,0x24,0x42,0x2A,0x1C,0xF5, + .addr="r3YdsPCvfJ5AVbaWyd2oK7fy7zFnSiyA8a"}, + {.seed={0xF0,0x42,0x36,0x84,0xA4,0xC3,0xF7,0xED,0x27,0x0F,0x8E,0x99,0x8C,0x62,0x6A,0x01}, + .pubkey={0xED,0xEA,0xCE,0xD9,0x7E,0xF9,0x59,0x6D,0x7D,0x3A,0x82,0x24,0x42,0x2A,0x1C,0xF5, 0xF8,0x1A,0xBF,0xD0,0x62,0x23,0x0D,0xDF,0x18,0x4F,0x5A,0xD7,0x1E,0x1E,0x2B,0x05,0xED}, - {0x39,0xBC,0xA3,0x9D,0x64,0xCB,0x30,0x5B,0x7A,0x9F,0xFC,0x0B,0xD0,0x01,0x4C,0xEB, + .seckey={0x39,0xBC,0xA3,0x9D,0x64,0xCB,0x30,0x5B,0x7A,0x9F,0xFC,0x0B,0xD0,0x01,0x4C,0xEB, 0xF8,0x26,0x5F,0x03,0x04,0x7D,0xF2,0x29,0x6E,0x21,0xF3,0x70,0xE3,0xCD,0x92,0x08}, - "rNMgmiC2hzF6Qe5NRb4Nfd2r14hx3sc2v5"}, - {{0x32,0x68,0x6A,0x27,0x24,0xDC,0xFA,0x84,0xFE,0xB8,0x70,0xC0,0xCD,0xB3,0x4C,0x91}, - {0xED,0xB2,0xF1,0xFB,0xDC,0x26,0x17,0x49,0x0D,0x9D,0x6B,0x4B,0xEC,0xFA,0xC7,0xCE, + .addr="rNMgmiC2hzF6Qe5NRb4Nfd2r14hx3sc2v5"}, + {.seed={0x32,0x68,0x6A,0x27,0x24,0xDC,0xFA,0x84,0xFE,0xB8,0x70,0xC0,0xCD,0xB3,0x4C,0x91}, + .pubkey={0xED,0xB2,0xF1,0xFB,0xDC,0x26,0x17,0x49,0x0D,0x9D,0x6B,0x4B,0xEC,0xFA,0xC7,0xCE, 0x37,0x8F,0x90,0x98,0x87,0x88,0x34,0xE3,0x85,0x12,0xD4,0x82,0xC8,0x61,0xCD,0xA7,0x25}, - {0xFF,0x49,0x97,0x28,0x69,0xD9,0x20,0x49,0x9A,0x5D,0x67,0x1D,0xB7,0x25,0x68,0x23, + .seckey={0xFF,0x49,0x97,0x28,0x69,0xD9,0x20,0x49,0x9A,0x5D,0x67,0x1D,0xB7,0x25,0x68,0x23, 0x5C,0x4A,0x53,0xAB,0xFB,0xED,0xDB,0x50,0x30,0xDC,0x4B,0xED,0xF8,0x81,0xBD,0x9C}, - "rMCRWBFcdcC36Nvams6VfztDbVe7TNYh1j"}, - {{0x88,0x8B,0x76,0x7B,0x59,0x28,0x21,0x47,0xAA,0xF3,0xB4,0x88,0x99,0x4B,0x55,0xC1}, - {0xED,0x08,0x56,0x1B,0x8F,0x67,0x6F,0xC1,0xE1,0x7F,0xF2,0xF1,0x18,0xA6,0x1A,0x94, + .addr="rMCRWBFcdcC36Nvams6VfztDbVe7TNYh1j"}, + {.seed={0x88,0x8B,0x76,0x7B,0x59,0x28,0x21,0x47,0xAA,0xF3,0xB4,0x88,0x99,0x4B,0x55,0xC1}, + .pubkey={0xED,0x08,0x56,0x1B,0x8F,0x67,0x6F,0xC1,0xE1,0x7F,0xF2,0xF1,0x18,0xA6,0x1A,0x94, 0x60,0xAB,0x6E,0xE2,0x2B,0xEB,0x15,0xBB,0xBA,0x51,0x2D,0x99,0x1B,0xDE,0x30,0xDC,0x41}, - {0x73,0xA8,0xE8,0xDC,0xCD,0x83,0xB6,0x7C,0xA7,0x3A,0x4B,0x3C,0xF1,0x11,0x0A,0x01, + .seckey={0x73,0xA8,0xE8,0xDC,0xCD,0x83,0xB6,0x7C,0xA7,0x3A,0x4B,0x3C,0xF1,0x11,0x0A,0x01, 0x13,0x69,0x6E,0x07,0x6C,0x6C,0xFF,0x23,0xE2,0x7B,0x16,0xAC,0x50,0xED,0x2A,0x9F}, - "rM6iPDQ7RkieWJdU9vUxM4ynhFNScHWszZ"}, - {{0xA5,0x94,0x33,0x40,0xE0,0x33,0xC9,0xF8,0x37,0x11,0x7A,0xB7,0xA5,0xD1,0xD2,0x90}, - {0xED,0x9E,0x74,0x80,0x3B,0xFF,0x2A,0xD4,0x02,0xE4,0x81,0xD0,0x1A,0x98,0xAA,0x51, + .addr="rM6iPDQ7RkieWJdU9vUxM4ynhFNScHWszZ"}, + {.seed={0xA5,0x94,0x33,0x40,0xE0,0x33,0xC9,0xF8,0x37,0x11,0x7A,0xB7,0xA5,0xD1,0xD2,0x90}, + .pubkey={0xED,0x9E,0x74,0x80,0x3B,0xFF,0x2A,0xD4,0x02,0xE4,0x81,0xD0,0x1A,0x98,0xAA,0x51, 0x84,0xC0,0x7F,0x5D,0xC4,0x69,0xC1,0x76,0xAE,0x81,0x2B,0xC9,0x5E,0xA0,0xE7,0x12,0x53}, - {0x46,0x8F,0x5A,0x8B,0x56,0x92,0xE8,0x12,0xC9,0x48,0x60,0xAF,0x8F,0xDF,0xDA,0x15, + .seckey={0x46,0x8F,0x5A,0x8B,0x56,0x92,0xE8,0x12,0xC9,0x48,0x60,0xAF,0x8F,0xDF,0xDA,0x15, 0xEC,0x4C,0xF4,0xA1,0x0C,0x56,0x2B,0x8A,0x6B,0xFA,0xF9,0x9D,0xF1,0x1A,0xEC,0x4B}, - "rEfpJHQrcCyps27bjHL4kvvousu1UDHWVA"}, - {{0xF2,0x5D,0x4B,0x04,0xDD,0xD0,0xF6,0x59,0x89,0xC7,0x02,0xF6,0x17,0x24,0x6D,0x0D}, - {0xED,0xE6,0x37,0x43,0x60,0xF5,0xDF,0x14,0xCE,0x95,0xC9,0x80,0xDD,0xF5,0x14,0x31, + .addr="rEfpJHQrcCyps27bjHL4kvvousu1UDHWVA"}, + {.seed={0xF2,0x5D,0x4B,0x04,0xDD,0xD0,0xF6,0x59,0x89,0xC7,0x02,0xF6,0x17,0x24,0x6D,0x0D}, + .pubkey={0xED,0xE6,0x37,0x43,0x60,0xF5,0xDF,0x14,0xCE,0x95,0xC9,0x80,0xDD,0xF5,0x14,0x31, 0xD6,0xE2,0x4F,0xFD,0x75,0x17,0x4E,0xDE,0xC6,0x70,0x63,0x7F,0xB2,0x88,0x22,0xD7,0xD6}, - {0xA4,0x46,0xD7,0xBA,0x7C,0x56,0x3C,0x72,0xE9,0xD8,0x4C,0x0D,0x5A,0x06,0xBE,0xBB, + .seckey={0xA4,0x46,0xD7,0xBA,0x7C,0x56,0x3C,0x72,0xE9,0xD8,0x4C,0x0D,0x5A,0x06,0xBE,0xBB, 0xF2,0xD2,0x5C,0x27,0x7E,0x44,0x97,0x8A,0x5B,0x57,0x0C,0xC9,0x45,0x53,0xD8,0x09}, - "rDzNPeQPwy67Q64PHi759dLdrJZGZ6Fam6"}, - {{0x1B,0x3B,0xA6,0xA3,0x34,0xAC,0xF1,0x2F,0x1F,0x56,0xA3,0xC4,0xAF,0x43,0xE4,0x69}, - {0xED,0x99,0xC0,0x65,0x5D,0xBA,0x42,0x4E,0x53,0x0F,0xF8,0x92,0x4F,0x6B,0x41,0xEC, + .addr="rDzNPeQPwy67Q64PHi759dLdrJZGZ6Fam6"}, + {.seed={0x1B,0x3B,0xA6,0xA3,0x34,0xAC,0xF1,0x2F,0x1F,0x56,0xA3,0xC4,0xAF,0x43,0xE4,0x69}, + .pubkey={0xED,0x99,0xC0,0x65,0x5D,0xBA,0x42,0x4E,0x53,0x0F,0xF8,0x92,0x4F,0x6B,0x41,0xEC, 0xDD,0x94,0xB6,0xF9,0x27,0xF8,0xCA,0xE7,0x79,0xAD,0x0A,0xA4,0x02,0x98,0x8D,0xA6,0x6B}, - {0x81,0x8D,0xD1,0x46,0xE8,0xEE,0x60,0x6E,0x18,0x7E,0xDF,0x41,0xC4,0xFE,0x64,0x9B, + .seckey={0x81,0x8D,0xD1,0x46,0xE8,0xEE,0x60,0x6E,0x18,0x7E,0xDF,0x41,0xC4,0xFE,0x64,0x9B, 0x8D,0x96,0xF8,0x1A,0xB4,0x1D,0x67,0xE3,0x03,0xB2,0x7E,0x63,0xAC,0x31,0x98,0x17}, - "r99hrhMgWrzUssGoLUttkmVFoERgf9fB56"}, - {{0x21,0x06,0xF7,0xF1,0xEB,0xF6,0xA6,0xFE,0x11,0x1E,0x58,0x3D,0x01,0x1E,0xD9,0x6D}, - {0xED,0x36,0xD8,0x7E,0x9F,0x16,0xC4,0xA5,0x36,0x8F,0xBF,0x20,0x8C,0x4C,0x19,0x19, + .addr="r99hrhMgWrzUssGoLUttkmVFoERgf9fB56"}, + {.seed={0x21,0x06,0xF7,0xF1,0xEB,0xF6,0xA6,0xFE,0x11,0x1E,0x58,0x3D,0x01,0x1E,0xD9,0x6D}, + .pubkey={0xED,0x36,0xD8,0x7E,0x9F,0x16,0xC4,0xA5,0x36,0x8F,0xBF,0x20,0x8C,0x4C,0x19,0x19, 0x55,0x33,0x28,0xEC,0x16,0xA3,0xAB,0xAE,0xD4,0x75,0x4D,0xCC,0x53,0x5C,0xB2,0x4A,0x53}, - {0x9F,0xCE,0x33,0x4E,0x5D,0x8A,0x5F,0xAE,0x98,0x99,0x8A,0x2B,0x31,0x22,0x49,0x53, + .seckey={0x9F,0xCE,0x33,0x4E,0x5D,0x8A,0x5F,0xAE,0x98,0x99,0x8A,0x2B,0x31,0x22,0x49,0x53, 0x5A,0xA3,0x00,0x89,0x53,0x4C,0xFE,0x35,0xBE,0x15,0xD1,0xD3,0xE7,0x5E,0xBB,0x90}, - "rHkZ4ddVoyrkEcANucjXDXouZ8GYVmG9R2"}, - {{0x76,0xE4,0x37,0x07,0x61,0x85,0x64,0x5E,0x78,0x0F,0xAA,0xC3,0x4F,0x22,0x52,0x12}, - {0xED,0x0E,0xFD,0x87,0xB2,0x99,0xE2,0xD2,0x68,0x11,0xFE,0xE6,0x16,0x46,0xF9,0x2D, + .addr="rHkZ4ddVoyrkEcANucjXDXouZ8GYVmG9R2"}, + {.seed={0x76,0xE4,0x37,0x07,0x61,0x85,0x64,0x5E,0x78,0x0F,0xAA,0xC3,0x4F,0x22,0x52,0x12}, + .pubkey={0xED,0x0E,0xFD,0x87,0xB2,0x99,0xE2,0xD2,0x68,0x11,0xFE,0xE6,0x16,0x46,0xF9,0x2D, 0xEF,0x64,0x2E,0x77,0x83,0x3A,0x0D,0xC7,0xFF,0x70,0xDD,0x21,0xEA,0x51,0x1A,0xCB,0xB8}, - {0x8F,0x3C,0xD2,0x22,0x84,0xAE,0xE0,0x91,0x3D,0x11,0x0B,0x29,0xE1,0xAE,0x43,0x12, + .seckey={0x8F,0x3C,0xD2,0x22,0x84,0xAE,0xE0,0x91,0x3D,0x11,0x0B,0x29,0xE1,0xAE,0x43,0x12, 0x8D,0xF6,0xD1,0x2C,0x5F,0x2F,0x1E,0xCD,0xB8,0x93,0xE5,0x69,0x4F,0xA9,0x90,0x40}, - "rB4z3FJgPhFGBKsCvAY6bpN6dbychpAzZm"}, - {{0x7D,0x9A,0x2F,0x52,0xF8,0x5F,0x65,0x6A,0xFC,0x30,0x68,0xFE,0x3A,0xB2,0xDA,0x88}, - {0xED,0x21,0xDC,0x2B,0x58,0x3E,0xE9,0x24,0x89,0x53,0xA6,0xB2,0x37,0xC5,0x97,0xB6, + .addr="rB4z3FJgPhFGBKsCvAY6bpN6dbychpAzZm"}, + {.seed={0x7D,0x9A,0x2F,0x52,0xF8,0x5F,0x65,0x6A,0xFC,0x30,0x68,0xFE,0x3A,0xB2,0xDA,0x88}, + .pubkey={0xED,0x21,0xDC,0x2B,0x58,0x3E,0xE9,0x24,0x89,0x53,0xA6,0xB2,0x37,0xC5,0x97,0xB6, 0x46,0xBC,0xAB,0xD7,0xB0,0xCE,0x73,0xCD,0xE1,0x68,0xA7,0xAC,0x20,0x9A,0x94,0xDF,0xC4}, - {0x2E,0x55,0x98,0xA9,0xA3,0xDD,0x00,0xAF,0xDB,0x2A,0xB0,0x04,0xFA,0x20,0x1E,0xEA, + .seckey={0x2E,0x55,0x98,0xA9,0xA3,0xDD,0x00,0xAF,0xDB,0x2A,0xB0,0x04,0xFA,0x20,0x1E,0xEA, 0x9D,0xB9,0x9F,0xD8,0xB4,0xCC,0xA9,0x30,0x52,0x6A,0x4D,0x97,0x43,0xD2,0x31,0xE1}, - "rjFtnLNUWENruoRZd7WTZxvh2qrNrQEir"}, - {{0xB7,0xFC,0x52,0xEC,0x34,0x1F,0x62,0x2F,0xCF,0xBF,0x90,0x38,0x6F,0x12,0x4D,0x1C}, - {0xED,0xF4,0x8C,0xBC,0xC5,0xEA,0x1A,0xA7,0x1F,0x79,0xC7,0xFB,0x44,0x97,0x3D,0x9A, + .addr="rjFtnLNUWENruoRZd7WTZxvh2qrNrQEir"}, + {.seed={0xB7,0xFC,0x52,0xEC,0x34,0x1F,0x62,0x2F,0xCF,0xBF,0x90,0x38,0x6F,0x12,0x4D,0x1C}, + .pubkey={0xED,0xF4,0x8C,0xBC,0xC5,0xEA,0x1A,0xA7,0x1F,0x79,0xC7,0xFB,0x44,0x97,0x3D,0x9A, 0x60,0xDD,0xA3,0xD4,0x83,0x68,0x31,0xE8,0xF8,0xA3,0x77,0xC8,0x98,0x2C,0x5F,0x64,0x26}, - {0x81,0xD7,0x7D,0x1F,0xE3,0xC0,0xAE,0xD6,0x2C,0x13,0x3A,0xBF,0x7E,0x63,0x20,0x9D, + .seckey={0x81,0xD7,0x7D,0x1F,0xE3,0xC0,0xAE,0xD6,0x2C,0x13,0x3A,0xBF,0x7E,0x63,0x20,0x9D, 0xF6,0x04,0x50,0xD6,0xCC,0x6F,0x6D,0xED,0xC3,0x35,0x10,0x32,0x23,0x36,0x1D,0x74}, - "r4iFodQDmVS27jsvHoa1c58d5MQjHCFCzr"}, - {{0x6B,0xD9,0x01,0xBA,0x68,0xCF,0xAA,0xB3,0x2E,0x58,0x72,0xCC,0x4A,0xD3,0xAC,0xFA}, - {0xED,0x6A,0xF4,0xE2,0x9D,0xFD,0x47,0x5B,0x62,0x2C,0x50,0x17,0x3E,0x70,0x08,0x27, + .addr="r4iFodQDmVS27jsvHoa1c58d5MQjHCFCzr"}, + {.seed={0x6B,0xD9,0x01,0xBA,0x68,0xCF,0xAA,0xB3,0x2E,0x58,0x72,0xCC,0x4A,0xD3,0xAC,0xFA}, + .pubkey={0xED,0x6A,0xF4,0xE2,0x9D,0xFD,0x47,0x5B,0x62,0x2C,0x50,0x17,0x3E,0x70,0x08,0x27, 0x0D,0x78,0x72,0x91,0x3B,0x9D,0xD2,0xA5,0x0F,0xFD,0x92,0x18,0xC5,0x21,0xAA,0xB5,0xDB}, - {0x6A,0x4D,0x06,0xBE,0xB6,0xA6,0x24,0x63,0x93,0x94,0x86,0x5D,0xF3,0xCD,0x21,0x79, + .seckey={0x6A,0x4D,0x06,0xBE,0xB6,0xA6,0x24,0x63,0x93,0x94,0x86,0x5D,0xF3,0xCD,0x21,0x79, 0x36,0xF1,0x60,0x42,0x36,0x8F,0xD4,0xE7,0xE3,0x4E,0x6F,0x48,0xC7,0x5F,0xF5,0x49}, - "raXmHhhDutvNXtZijEds9YkiuRrGSGBu32"}, - {{0x06,0x6E,0xCB,0xEA,0x65,0xA8,0x14,0x8F,0xBB,0x06,0x4B,0x57,0xB3,0x6D,0x53,0x5C}, - {0xED,0x71,0x36,0xFF,0xA4,0xF9,0x41,0xB4,0x99,0x94,0xD4,0x28,0xD6,0xAF,0xE8,0xEF, + .addr="raXmHhhDutvNXtZijEds9YkiuRrGSGBu32"}, + {.seed={0x06,0x6E,0xCB,0xEA,0x65,0xA8,0x14,0x8F,0xBB,0x06,0x4B,0x57,0xB3,0x6D,0x53,0x5C}, + .pubkey={0xED,0x71,0x36,0xFF,0xA4,0xF9,0x41,0xB4,0x99,0x94,0xD4,0x28,0xD6,0xAF,0xE8,0xEF, 0xE4,0xD4,0x18,0x8D,0xC9,0xFB,0xF4,0x9D,0x8A,0x00,0x10,0x3A,0x62,0xEA,0x5A,0xF6,0x20}, - {0xEA,0x33,0xE3,0xD1,0x8B,0x96,0x82,0x5D,0x88,0xC0,0x43,0x78,0xC3,0x54,0x32,0x09, + .seckey={0xEA,0x33,0xE3,0xD1,0x8B,0x96,0x82,0x5D,0x88,0xC0,0x43,0x78,0xC3,0x54,0x32,0x09, 0xAA,0x6F,0xBB,0xDC,0xFB,0x5A,0x8B,0xFE,0xCF,0x8C,0xF6,0x2D,0x9D,0xA9,0xA1,0xE1}, - "rPxBkKtFFZHJT71r3AFdAN4pU89PLQJ1QG"}, - {{0xDC,0x30,0xE4,0xB2,0x30,0xBA,0x1A,0x0C,0xF1,0xA4,0x92,0x7B,0x16,0x58,0xB9,0xA1}, - {0xED,0x82,0x91,0xCA,0xBF,0x4A,0x95,0x59,0x0F,0x32,0x92,0xE5,0x0C,0x3B,0x26,0x2D, + .addr="rPxBkKtFFZHJT71r3AFdAN4pU89PLQJ1QG"}, + {.seed={0xDC,0x30,0xE4,0xB2,0x30,0xBA,0x1A,0x0C,0xF1,0xA4,0x92,0x7B,0x16,0x58,0xB9,0xA1}, + .pubkey={0xED,0x82,0x91,0xCA,0xBF,0x4A,0x95,0x59,0x0F,0x32,0x92,0xE5,0x0C,0x3B,0x26,0x2D, 0x9F,0xF8,0xBE,0xC3,0x61,0x91,0x0E,0xE5,0xAD,0x67,0x0D,0x22,0x56,0xF6,0xB3,0x98,0xB7}, - {0x1D,0x7A,0x60,0x86,0xB7,0xB4,0x96,0x1B,0xFC,0x9D,0x49,0x5C,0x40,0x5D,0x05,0x4C, + .seckey={0x1D,0x7A,0x60,0x86,0xB7,0xB4,0x96,0x1B,0xFC,0x9D,0x49,0x5C,0x40,0x5D,0x05,0x4C, 0x51,0x26,0x55,0x01,0xCC,0xAC,0x6D,0x24,0x55,0xAE,0x87,0x74,0x6C,0xE2,0x45,0xDB}, - "rKFEmeByntzm5pti2qAVvpbTpK8S7sEsV4"}, - {{0xE7,0x17,0xCA,0x1B,0xFC,0x0D,0x50,0xFD,0x7D,0xD7,0x56,0x3C,0x8A,0xDE,0x1B,0xCB}, - {0xED,0x76,0x1C,0xE5,0x81,0xD1,0xB0,0x8F,0xE5,0x3C,0x79,0x18,0xC0,0xB6,0xE6,0x8B, + .addr="rKFEmeByntzm5pti2qAVvpbTpK8S7sEsV4"}, + {.seed={0xE7,0x17,0xCA,0x1B,0xFC,0x0D,0x50,0xFD,0x7D,0xD7,0x56,0x3C,0x8A,0xDE,0x1B,0xCB}, + .pubkey={0xED,0x76,0x1C,0xE5,0x81,0xD1,0xB0,0x8F,0xE5,0x3C,0x79,0x18,0xC0,0xB6,0xE6,0x8B, 0x95,0xA1,0x37,0x32,0xD4,0x2B,0x36,0xBB,0x63,0x4E,0xE6,0x32,0xF8,0xCE,0x4B,0xF1,0x1E}, - {0x9A,0xCF,0x55,0xF4,0xAD,0x1C,0xDE,0xB7,0x6A,0xE8,0x44,0xD5,0x3E,0x15,0x2A,0x20, + .seckey={0x9A,0xCF,0x55,0xF4,0xAD,0x1C,0xDE,0xB7,0x6A,0xE8,0x44,0xD5,0x3E,0x15,0x2A,0x20, 0xF6,0x38,0x59,0xBF,0xB4,0x98,0x2F,0xC7,0x69,0xF2,0x70,0x51,0x2C,0x40,0xBC,0x43}, - "rM7P6ouMaCkvHpCPANcXrhnXcQZUuwHLhT"}, - {{0x6A,0x2E,0xBE,0xE7,0xD7,0x89,0x85,0xB2,0xF6,0x09,0xEE,0x5C,0x23,0x0C,0xE0,0xCB}, - {0xED,0x6A,0xE8,0x90,0x42,0x56,0xFF,0x41,0x90,0xAB,0x1E,0xBE,0x6B,0x7D,0xC7,0x53, + .addr="rM7P6ouMaCkvHpCPANcXrhnXcQZUuwHLhT"}, + {.seed={0x6A,0x2E,0xBE,0xE7,0xD7,0x89,0x85,0xB2,0xF6,0x09,0xEE,0x5C,0x23,0x0C,0xE0,0xCB}, + .pubkey={0xED,0x6A,0xE8,0x90,0x42,0x56,0xFF,0x41,0x90,0xAB,0x1E,0xBE,0x6B,0x7D,0xC7,0x53, 0x7E,0x36,0xB3,0x6A,0x41,0xD0,0x42,0x46,0x22,0x51,0x9D,0x73,0x76,0x0B,0x74,0xE6,0x6A}, - {0x01,0xDD,0x0D,0x7C,0xB3,0xF1,0xF7,0x58,0x0B,0xD9,0x08,0x39,0xE7,0x5F,0x15,0x85, + .seckey={0x01,0xDD,0x0D,0x7C,0xB3,0xF1,0xF7,0x58,0x0B,0xD9,0x08,0x39,0xE7,0x5F,0x15,0x85, 0xE5,0xE4,0x68,0xCC,0x11,0xB3,0x96,0x6A,0x78,0x0F,0xB8,0xBE,0x8A,0xDC,0xF9,0x89}, - "rLGH2vSxgeeM5QynNK8qmcdFtTP1rfg4Tg"}, - {{0x00,0xCC,0xB8,0xC5,0x68,0x56,0x59,0xAD,0x75,0xEF,0x34,0xAF,0x9D,0xEA,0xCF,0x77}, - {0xED,0xF8,0x15,0x47,0x9F,0xFC,0x3F,0x8F,0x60,0xF8,0xE2,0x97,0xD4,0x90,0x5F,0x0D, + .addr="rLGH2vSxgeeM5QynNK8qmcdFtTP1rfg4Tg"}, + {.seed={0x00,0xCC,0xB8,0xC5,0x68,0x56,0x59,0xAD,0x75,0xEF,0x34,0xAF,0x9D,0xEA,0xCF,0x77}, + .pubkey={0xED,0xF8,0x15,0x47,0x9F,0xFC,0x3F,0x8F,0x60,0xF8,0xE2,0x97,0xD4,0x90,0x5F,0x0D, 0x7A,0x7D,0x34,0x5A,0x1E,0x49,0x1B,0x27,0x7F,0x49,0x9E,0x80,0xB0,0xDE,0x3A,0x9D,0xDD}, - {0x27,0x2D,0x1E,0xF0,0xD6,0xE0,0xE1,0x03,0x1E,0xEC,0xE9,0x71,0x4E,0x74,0x5E,0xEF, + .seckey={0x27,0x2D,0x1E,0xF0,0xD6,0xE0,0xE1,0x03,0x1E,0xEC,0xE9,0x71,0x4E,0x74,0x5E,0xEF, 0xCC,0x97,0xA4,0xF0,0x98,0xC7,0x5D,0x1D,0x2B,0xDB,0xDA,0x02,0xAC,0x92,0xE9,0x17}, - "r3sq3TsjtadXRzt7N5bUCkJCBCrR26zNZJ"}, - {{0xB4,0xBC,0x80,0x7F,0xDA,0x31,0xB0,0xD1,0x69,0x7B,0xEB,0x0F,0xE9,0x9A,0x32,0x4B}, - {0xED,0xD6,0x6A,0x27,0x23,0x52,0xAB,0x9B,0xD4,0x72,0xC0,0xD6,0x88,0xA2,0x75,0x68, + .addr="r3sq3TsjtadXRzt7N5bUCkJCBCrR26zNZJ"}, + {.seed={0xB4,0xBC,0x80,0x7F,0xDA,0x31,0xB0,0xD1,0x69,0x7B,0xEB,0x0F,0xE9,0x9A,0x32,0x4B}, + .pubkey={0xED,0xD6,0x6A,0x27,0x23,0x52,0xAB,0x9B,0xD4,0x72,0xC0,0xD6,0x88,0xA2,0x75,0x68, 0x0A,0xAC,0x21,0x8B,0xAB,0x3C,0x99,0xDA,0xAE,0x89,0xCF,0x27,0xDD,0x7D,0x04,0x80,0xA3}, - {0x10,0xA2,0xBA,0xF1,0xBA,0xDB,0x75,0x0C,0x71,0x79,0xAC,0x82,0x95,0x81,0x2E,0xFA, + .seckey={0x10,0xA2,0xBA,0xF1,0xBA,0xDB,0x75,0x0C,0x71,0x79,0xAC,0x82,0x95,0x81,0x2E,0xFA, 0x83,0x7C,0x63,0x7C,0x9C,0x45,0x67,0x4C,0x59,0x49,0x7B,0x17,0x0C,0x2A,0xF3,0x91}, - "rPbwRy2SXuYjHBpamBttr73degia9aLTJV"}, - {{0x1F,0x79,0x56,0x35,0x2E,0x46,0x34,0xFD,0x32,0xDA,0xF2,0xE1,0xE7,0xA5,0xF8,0x6D}, - {0xED,0x6A,0xB7,0x3A,0x06,0xC0,0x29,0x6D,0x38,0x4F,0xC1,0xFE,0x79,0xF1,0xCA,0xBB, + .addr="rPbwRy2SXuYjHBpamBttr73degia9aLTJV"}, + {.seed={0x1F,0x79,0x56,0x35,0x2E,0x46,0x34,0xFD,0x32,0xDA,0xF2,0xE1,0xE7,0xA5,0xF8,0x6D}, + .pubkey={0xED,0x6A,0xB7,0x3A,0x06,0xC0,0x29,0x6D,0x38,0x4F,0xC1,0xFE,0x79,0xF1,0xCA,0xBB, 0x1A,0xBD,0xAE,0xCF,0xA4,0x49,0xE5,0x52,0x68,0xB6,0x16,0xF5,0x05,0xF7,0xE0,0x1D,0xE0}, - {0x67,0x22,0xC5,0xC3,0x26,0xEF,0x52,0x22,0xE5,0x03,0xFA,0x61,0x01,0x64,0x49,0x63, + .seckey={0x67,0x22,0xC5,0xC3,0x26,0xEF,0x52,0x22,0xE5,0x03,0xFA,0x61,0x01,0x64,0x49,0x63, 0xF0,0x54,0x84,0x01,0x34,0x43,0xF5,0xF0,0xCA,0x72,0x55,0xE5,0xDB,0xA7,0xCE,0xD6}, - "rfS18n1hbRaEaJw79nbV2ZTHSmMuRUsDdN"}, - {{0xD1,0xF7,0x94,0xBE,0xFD,0x48,0x18,0x3F,0xA8,0x00,0x0C,0xCE,0x91,0x93,0x65,0xD5}, - {0xED,0xEA,0x05,0x86,0x7C,0x18,0x83,0x59,0x07,0x2C,0xA7,0x82,0x09,0xB1,0xF5,0x63, + .addr="rfS18n1hbRaEaJw79nbV2ZTHSmMuRUsDdN"}, + {.seed={0xD1,0xF7,0x94,0xBE,0xFD,0x48,0x18,0x3F,0xA8,0x00,0x0C,0xCE,0x91,0x93,0x65,0xD5}, + .pubkey={0xED,0xEA,0x05,0x86,0x7C,0x18,0x83,0x59,0x07,0x2C,0xA7,0x82,0x09,0xB1,0xF5,0x63, 0x3B,0x52,0x1D,0xF3,0x2A,0x6C,0x95,0x44,0xE1,0xD8,0xD8,0x07,0x06,0xA0,0x7B,0x24,0xCD}, - {0x5E,0x8E,0xCA,0xB0,0xC2,0xA3,0x33,0x8C,0x21,0xDF,0xEC,0xC3,0x34,0xF6,0x48,0x3A, + .seckey={0x5E,0x8E,0xCA,0xB0,0xC2,0xA3,0x33,0x8C,0x21,0xDF,0xEC,0xC3,0x34,0xF6,0x48,0x3A, 0x87,0x83,0xEB,0xD9,0x9F,0xF3,0x45,0xBC,0x3F,0xFE,0x13,0x54,0x35,0x5F,0xF8,0x92}, - "rKj6PKqZAtChGkjspvRCP9SR5JkqUvzrnY"}, - {{0x3D,0x77,0x10,0x8C,0x0D,0x8D,0xE3,0xB6,0x78,0xC2,0x44,0x42,0x39,0xB8,0xD2,0xD6}, - {0xED,0x90,0x0C,0xCE,0x77,0xC7,0x19,0xAF,0x5A,0xF2,0xEF,0xBE,0x4B,0xC1,0xA4,0xF6, + .addr="rKj6PKqZAtChGkjspvRCP9SR5JkqUvzrnY"}, + {.seed={0x3D,0x77,0x10,0x8C,0x0D,0x8D,0xE3,0xB6,0x78,0xC2,0x44,0x42,0x39,0xB8,0xD2,0xD6}, + .pubkey={0xED,0x90,0x0C,0xCE,0x77,0xC7,0x19,0xAF,0x5A,0xF2,0xEF,0xBE,0x4B,0xC1,0xA4,0xF6, 0xA7,0x66,0x11,0xBF,0x6D,0x57,0xA5,0xAE,0xAC,0x18,0x12,0x3E,0x76,0x5A,0xCC,0x5B,0x10}, - {0x6E,0x32,0x83,0xAB,0x90,0xCB,0xA6,0x69,0xF1,0xD8,0xF9,0xED,0xCF,0x0A,0xF4,0x11, + .seckey={0x6E,0x32,0x83,0xAB,0x90,0xCB,0xA6,0x69,0xF1,0xD8,0xF9,0xED,0xCF,0x0A,0xF4,0x11, 0xC3,0x67,0x15,0xF5,0xA3,0x0E,0x29,0x26,0x2E,0xC9,0xB2,0x9F,0xCB,0x08,0x2B,0xAF}, - "rn7ddvAPRroTMaF3fGh4DUw3H5h1u4CdCP"}, - {{0xB4,0x7E,0x80,0x90,0xFD,0xCC,0xD9,0x90,0xC2,0x66,0x7A,0x92,0xDF,0x29,0x36,0xAE}, - {0xED,0x83,0xDD,0xE0,0x7B,0xFE,0xC4,0x4F,0x53,0xB9,0x78,0x79,0xFD,0xC3,0xFF,0x47, + .addr="rn7ddvAPRroTMaF3fGh4DUw3H5h1u4CdCP"}, + {.seed={0xB4,0x7E,0x80,0x90,0xFD,0xCC,0xD9,0x90,0xC2,0x66,0x7A,0x92,0xDF,0x29,0x36,0xAE}, + .pubkey={0xED,0x83,0xDD,0xE0,0x7B,0xFE,0xC4,0x4F,0x53,0xB9,0x78,0x79,0xFD,0xC3,0xFF,0x47, 0xDD,0xB5,0x09,0xCF,0x3B,0xFC,0xB4,0x49,0x7E,0x8E,0x8A,0x83,0x1D,0xD8,0x80,0x36,0x83}, - {0x03,0x54,0x27,0x82,0x38,0x85,0x9B,0xBD,0x07,0xB7,0xE7,0xBE,0xF4,0xC7,0x20,0xE4, + .seckey={0x03,0x54,0x27,0x82,0x38,0x85,0x9B,0xBD,0x07,0xB7,0xE7,0xBE,0xF4,0xC7,0x20,0xE4, 0xB8,0x74,0xAD,0x77,0xC9,0xA5,0x8A,0x8A,0x62,0xD4,0xA4,0x5F,0xB0,0x62,0xE7,0x7F}, - "rfTHpX7jyQgVL4T5ErYvTVMfYEiQmrhpdu"}, - {{0xDF,0x89,0xC9,0xA7,0xB6,0xFB,0xB5,0x03,0xFF,0xD3,0x16,0xA0,0xBF,0x57,0xED,0xD1}, - {0xED,0x03,0x48,0x03,0x06,0x47,0x50,0xC9,0xB6,0xE9,0x7B,0x9F,0xD0,0x53,0x50,0xAE, + .addr="rfTHpX7jyQgVL4T5ErYvTVMfYEiQmrhpdu"}, + {.seed={0xDF,0x89,0xC9,0xA7,0xB6,0xFB,0xB5,0x03,0xFF,0xD3,0x16,0xA0,0xBF,0x57,0xED,0xD1}, + .pubkey={0xED,0x03,0x48,0x03,0x06,0x47,0x50,0xC9,0xB6,0xE9,0x7B,0x9F,0xD0,0x53,0x50,0xAE, 0x5F,0x92,0xEF,0xDA,0x63,0xBB,0xF7,0xD7,0x81,0x69,0x96,0x43,0x71,0xCF,0x97,0xD4,0xCD}, - {0xBA,0xA9,0x3D,0x91,0xEE,0xEE,0x96,0xBD,0x0C,0x53,0xEF,0x0F,0xF2,0x8C,0xD6,0xA2, + .seckey={0xBA,0xA9,0x3D,0x91,0xEE,0xEE,0x96,0xBD,0x0C,0x53,0xEF,0x0F,0xF2,0x8C,0xD6,0xA2, 0x48,0xDD,0xF8,0x9F,0xC1,0x22,0x45,0x70,0x0C,0xD5,0x3C,0xA2,0x20,0x65,0x8F,0x7B}, - "rM84gaT9yh6TXS51xsTawH2CDrEZeuffgZ"}, - {{0x88,0x2D,0xB9,0x2E,0x15,0xCC,0x70,0xB0,0xE0,0xD7,0x82,0x06,0x4E,0x7F,0x06,0xA4}, - {0xED,0x30,0xC8,0x1F,0x58,0x63,0x63,0xD4,0x61,0xFF,0x8C,0x21,0x18,0xF9,0x2F,0x19, + .addr="rM84gaT9yh6TXS51xsTawH2CDrEZeuffgZ"}, + {.seed={0x88,0x2D,0xB9,0x2E,0x15,0xCC,0x70,0xB0,0xE0,0xD7,0x82,0x06,0x4E,0x7F,0x06,0xA4}, + .pubkey={0xED,0x30,0xC8,0x1F,0x58,0x63,0x63,0xD4,0x61,0xFF,0x8C,0x21,0x18,0xF9,0x2F,0x19, 0x9A,0xDA,0x24,0x94,0xA7,0xD1,0x9C,0xC5,0x19,0xAD,0xC6,0x5D,0xA5,0x95,0xD9,0x56,0xEA}, - {0x69,0x2D,0xDE,0xE4,0xD0,0x31,0xF3,0x30,0x1D,0xDC,0x17,0x1F,0x40,0x1F,0xB5,0xDF, + .seckey={0x69,0x2D,0xDE,0xE4,0xD0,0x31,0xF3,0x30,0x1D,0xDC,0x17,0x1F,0x40,0x1F,0xB5,0xDF, 0x41,0xEA,0xD3,0x8B,0x45,0x94,0x8D,0x79,0x81,0xCD,0x6B,0x84,0xE8,0x25,0x43,0xCF}, - "rH2q2kVDnmazJUGuEJrskgPdMZehdLzeUA"}, - {{0x84,0xB7,0xB5,0x7E,0x48,0x52,0x17,0xDA,0xDD,0xF9,0x33,0xBA,0x5A,0x04,0x38,0xF4}, - {0xED,0x16,0x8A,0x23,0xDB,0x39,0x5C,0x84,0x6D,0xC1,0x5A,0x68,0x44,0xE3,0x51,0xAC, + .addr="rH2q2kVDnmazJUGuEJrskgPdMZehdLzeUA"}, + {.seed={0x84,0xB7,0xB5,0x7E,0x48,0x52,0x17,0xDA,0xDD,0xF9,0x33,0xBA,0x5A,0x04,0x38,0xF4}, + .pubkey={0xED,0x16,0x8A,0x23,0xDB,0x39,0x5C,0x84,0x6D,0xC1,0x5A,0x68,0x44,0xE3,0x51,0xAC, 0x9A,0xD8,0x18,0x02,0x34,0xC5,0xAC,0xAF,0x02,0xB6,0xEB,0x3A,0x7E,0x9D,0x51,0x7B,0x82}, - {0x5E,0xEB,0x85,0xCE,0xD3,0x5D,0x95,0x77,0x66,0x4A,0x8D,0x6B,0x2B,0xE0,0x71,0x61, + .seckey={0x5E,0xEB,0x85,0xCE,0xD3,0x5D,0x95,0x77,0x66,0x4A,0x8D,0x6B,0x2B,0xE0,0x71,0x61, 0xF3,0x46,0x2C,0x43,0x20,0x09,0xEB,0x8E,0x1A,0x45,0x4D,0x27,0x28,0x5C,0x7A,0x4C}, - "rsHuiJJnnhyGf4vtT3wVt4ZnsxdA8P7sZm"}, - {{0xBC,0x7C,0x5D,0x12,0x55,0x64,0xD2,0x5C,0xD0,0x70,0xA9,0xDE,0x04,0x61,0xAA,0x9E}, - {0xED,0x86,0xD3,0xD8,0x44,0x91,0xA7,0x8F,0x78,0xA8,0x16,0x8E,0x92,0x6C,0x0A,0x72, + .addr="rsHuiJJnnhyGf4vtT3wVt4ZnsxdA8P7sZm"}, + {.seed={0xBC,0x7C,0x5D,0x12,0x55,0x64,0xD2,0x5C,0xD0,0x70,0xA9,0xDE,0x04,0x61,0xAA,0x9E}, + .pubkey={0xED,0x86,0xD3,0xD8,0x44,0x91,0xA7,0x8F,0x78,0xA8,0x16,0x8E,0x92,0x6C,0x0A,0x72, 0x84,0x4B,0xD4,0xEB,0x15,0x9C,0xF7,0xB8,0x3F,0xF1,0x4E,0xC6,0x54,0x3D,0xB1,0xE3,0x2A}, - {0x16,0x22,0xF0,0x6D,0xB9,0x22,0xF8,0xA1,0x27,0x46,0x0E,0xF9,0x9C,0x31,0x3E,0xA9, + .seckey={0x16,0x22,0xF0,0x6D,0xB9,0x22,0xF8,0xA1,0x27,0x46,0x0E,0xF9,0x9C,0x31,0x3E,0xA9, 0x34,0xE9,0xC7,0x7D,0xC3,0x5F,0x02,0x6D,0x1C,0xEF,0x71,0x64,0x75,0x97,0x46,0x83}, - "rnesu4gx539Q7CwFkZQtG1AuGsjHNZro46"}, - {{0x4B,0x58,0x3A,0xF8,0xAF,0x5C,0xFF,0xC3,0xFD,0x39,0x74,0xBE,0x05,0x62,0x23,0x5F}, - {0xED,0x5B,0x64,0x25,0xC7,0x8D,0xEE,0xF6,0x4A,0x97,0x9C,0xF9,0xAF,0xFF,0xD3,0x8C, + .addr="rnesu4gx539Q7CwFkZQtG1AuGsjHNZro46"}, + {.seed={0x4B,0x58,0x3A,0xF8,0xAF,0x5C,0xFF,0xC3,0xFD,0x39,0x74,0xBE,0x05,0x62,0x23,0x5F}, + .pubkey={0xED,0x5B,0x64,0x25,0xC7,0x8D,0xEE,0xF6,0x4A,0x97,0x9C,0xF9,0xAF,0xFF,0xD3,0x8C, 0x57,0x15,0x6B,0x73,0xD9,0xB4,0xB0,0xDB,0x6C,0xAC,0x5F,0xA1,0x25,0x79,0xDA,0xA8,0x53}, - {0xF5,0x40,0x53,0x15,0xA2,0x34,0x9E,0xCE,0x4E,0x1E,0xE5,0x19,0x78,0x99,0xB3,0xE4, + .seckey={0xF5,0x40,0x53,0x15,0xA2,0x34,0x9E,0xCE,0x4E,0x1E,0xE5,0x19,0x78,0x99,0xB3,0xE4, 0x0D,0xB7,0x84,0x05,0xCF,0x60,0x78,0x3E,0x82,0x23,0x22,0x2A,0x0D,0xE2,0x34,0xAB}, - "rHYvTtFVVm7fed5no7JjXQnVJz3vMV2dRV"}, - {{0x13,0xB4,0x06,0x1F,0x0E,0xB1,0xE6,0x94,0xC3,0x1A,0x4A,0x73,0x2E,0x6B,0x26,0xA7}, - {0xED,0x61,0x7A,0x04,0xF7,0xC3,0xBA,0x23,0xF0,0x1B,0x93,0x57,0x25,0x1B,0x6E,0x42, + .addr="rHYvTtFVVm7fed5no7JjXQnVJz3vMV2dRV"}, + {.seed={0x13,0xB4,0x06,0x1F,0x0E,0xB1,0xE6,0x94,0xC3,0x1A,0x4A,0x73,0x2E,0x6B,0x26,0xA7}, + .pubkey={0xED,0x61,0x7A,0x04,0xF7,0xC3,0xBA,0x23,0xF0,0x1B,0x93,0x57,0x25,0x1B,0x6E,0x42, 0x63,0x18,0x72,0x1B,0x55,0x32,0xEC,0x81,0x03,0x17,0x6A,0x65,0xB9,0xCE,0x49,0xEA,0x09}, - {0xC5,0xF4,0xEB,0x19,0x28,0xD6,0x80,0xFA,0x85,0x59,0xC5,0xC1,0xB1,0x15,0x68,0x03, + .seckey={0xC5,0xF4,0xEB,0x19,0x28,0xD6,0x80,0xFA,0x85,0x59,0xC5,0xC1,0xB1,0x15,0x68,0x03, 0x9C,0x8C,0xF4,0x38,0x9E,0x5B,0x62,0x98,0x3A,0x05,0x2E,0x69,0x17,0x0B,0x5C,0x52}, - "rKggDDftQLRV2sSrYexWZXhA5nMwLzguZq"}, - {{0xE2,0xCE,0x8C,0xE1,0x86,0xDF,0x83,0x43,0x40,0x1F,0x78,0x6E,0xA0,0x17,0x9D,0x2D}, - {0xED,0x49,0xEA,0x8C,0x43,0x5F,0xB1,0xBC,0xC0,0xC9,0x59,0xD8,0xAF,0x24,0x24,0xFC, + .addr="rKggDDftQLRV2sSrYexWZXhA5nMwLzguZq"}, + {.seed={0xE2,0xCE,0x8C,0xE1,0x86,0xDF,0x83,0x43,0x40,0x1F,0x78,0x6E,0xA0,0x17,0x9D,0x2D}, + .pubkey={0xED,0x49,0xEA,0x8C,0x43,0x5F,0xB1,0xBC,0xC0,0xC9,0x59,0xD8,0xAF,0x24,0x24,0xFC, 0xDB,0xA4,0x96,0x92,0xD6,0xA2,0x58,0xB3,0xA3,0xFD,0xEB,0x86,0xBE,0x3E,0x71,0x3F,0x29}, - {0x1D,0x75,0xE3,0xFB,0x07,0x54,0xEA,0x72,0x69,0xAD,0xBA,0x37,0x20,0x7B,0xFB,0xEF, + .seckey={0x1D,0x75,0xE3,0xFB,0x07,0x54,0xEA,0x72,0x69,0xAD,0xBA,0x37,0x20,0x7B,0xFB,0xEF, 0x81,0x22,0x88,0x94,0xBB,0x8B,0xDA,0x0F,0x1E,0x37,0xC6,0xF8,0x0D,0x46,0xA5,0x5B}, - "rwgf6e2bg4a8vPadtsgZ6HJuNsorufBwzZ"}, - {{0xDE,0x5E,0xDD,0x25,0x80,0x44,0x31,0x37,0xF8,0x38,0x72,0xC4,0x39,0x69,0x9C,0x51}, - {0xED,0x39,0x3B,0x1C,0x26,0x8C,0x24,0x11,0x4B,0xD5,0xD4,0xB5,0xAB,0xA7,0xAE,0x48, + .addr="rwgf6e2bg4a8vPadtsgZ6HJuNsorufBwzZ"}, + {.seed={0xDE,0x5E,0xDD,0x25,0x80,0x44,0x31,0x37,0xF8,0x38,0x72,0xC4,0x39,0x69,0x9C,0x51}, + .pubkey={0xED,0x39,0x3B,0x1C,0x26,0x8C,0x24,0x11,0x4B,0xD5,0xD4,0xB5,0xAB,0xA7,0xAE,0x48, 0xED,0x5E,0xF0,0x0B,0x2F,0x53,0x1C,0x49,0x64,0xF8,0xEA,0x16,0x76,0xDA,0xDF,0xE0,0x51}, - {0xBC,0xFD,0x2C,0x3D,0x65,0x97,0x83,0x64,0x04,0x42,0x2E,0x5C,0x72,0x5C,0xC4,0xCF, + .seckey={0xBC,0xFD,0x2C,0x3D,0x65,0x97,0x83,0x64,0x04,0x42,0x2E,0x5C,0x72,0x5C,0xC4,0xCF, 0x28,0x92,0x81,0xE3,0xAB,0xF2,0x22,0xA4,0x2A,0xCF,0xE1,0xB5,0xDE,0x5F,0x70,0x10}, - "rD7xAXQhKidGjkVtzo7ixZr3c3PCEiiDRS"}, - {{0xC7,0x41,0xF5,0x5E,0x62,0x2D,0x4F,0x10,0xAE,0xCA,0xA5,0x0D,0x91,0xA7,0xD3,0x66}, - {0xED,0x36,0x81,0xFA,0xD1,0xF5,0xCF,0xBB,0x60,0x28,0x88,0x6D,0x51,0xB1,0xC7,0x75, + .addr="rD7xAXQhKidGjkVtzo7ixZr3c3PCEiiDRS"}, + {.seed={0xC7,0x41,0xF5,0x5E,0x62,0x2D,0x4F,0x10,0xAE,0xCA,0xA5,0x0D,0x91,0xA7,0xD3,0x66}, + .pubkey={0xED,0x36,0x81,0xFA,0xD1,0xF5,0xCF,0xBB,0x60,0x28,0x88,0x6D,0x51,0xB1,0xC7,0x75, 0xD1,0xCA,0xB7,0x10,0xED,0x86,0x75,0xA1,0x71,0x9C,0x41,0x81,0xC8,0x9D,0xB9,0x04,0xC7}, - {0xA3,0x5A,0xBA,0xF9,0xB2,0xE5,0x61,0x92,0xAC,0x22,0x67,0x8F,0x5A,0x5E,0x61,0x35, + .seckey={0xA3,0x5A,0xBA,0xF9,0xB2,0xE5,0x61,0x92,0xAC,0x22,0x67,0x8F,0x5A,0x5E,0x61,0x35, 0xAE,0x67,0x96,0xDD,0x75,0xFB,0x00,0xB1,0xF8,0x4F,0xC4,0x48,0x4A,0xEA,0xFA,0xFC}, - "rwdo3TEgC2uS173RasWvhBouuWfTSFEPhD"}, - {{0xF5,0x73,0xD8,0xDE,0xA2,0x07,0xDB,0x93,0x96,0x9A,0x92,0x2E,0xE6,0xE7,0x3C,0xBA}, - {0xED,0x61,0x55,0xF1,0xD3,0xDA,0xD3,0x19,0xCF,0xB3,0xDE,0xB1,0xCA,0xCB,0x65,0xDC, + .addr="rwdo3TEgC2uS173RasWvhBouuWfTSFEPhD"}, + {.seed={0xF5,0x73,0xD8,0xDE,0xA2,0x07,0xDB,0x93,0x96,0x9A,0x92,0x2E,0xE6,0xE7,0x3C,0xBA}, + .pubkey={0xED,0x61,0x55,0xF1,0xD3,0xDA,0xD3,0x19,0xCF,0xB3,0xDE,0xB1,0xCA,0xCB,0x65,0xDC, 0x63,0xAD,0x61,0x67,0xB6,0x1C,0xFA,0x52,0xCF,0x2B,0x07,0x7C,0x15,0xF0,0xCD,0x41,0x6A}, - {0x0C,0x87,0x0A,0x05,0x07,0x25,0x95,0x4D,0x66,0x4E,0xE0,0x01,0x0C,0x58,0x0A,0xD6, + .seckey={0x0C,0x87,0x0A,0x05,0x07,0x25,0x95,0x4D,0x66,0x4E,0xE0,0x01,0x0C,0x58,0x0A,0xD6, 0x28,0x52,0x03,0x05,0x6A,0xAF,0x6F,0x59,0x43,0x02,0xCB,0x98,0xE0,0x3E,0x56,0xE3}, - "rNXHq25tNB23Ce6fbPw2wakxnmdzE3Fq6Q"} + .addr="rNXHq25tNB23Ce6fbPw2wakxnmdzE3Fq6Q"} }; // clang-format on diff --git a/src/test/protocol/Seed_test.cpp b/src/test/protocol/Seed_test.cpp index 75c7e402a1..ee4709a780 100644 --- a/src/test/protocol/Seed_test.cpp +++ b/src/test/protocol/Seed_test.cpp @@ -1,11 +1,18 @@ +#include +#include #include -#include +#include #include +#include +#include #include #include #include +#include #include +#include +#include namespace xrpl { diff --git a/src/test/protocol/SeqProxy_test.cpp b/src/test/protocol/SeqProxy_test.cpp index 7e7a21ab6e..d0764d7399 100644 --- a/src/test/protocol/SeqProxy_test.cpp +++ b/src/test/protocol/SeqProxy_test.cpp @@ -1,8 +1,10 @@ -#include +#include #include +#include #include #include +#include namespace xrpl { @@ -52,7 +54,7 @@ struct SeqProxy_test : public beast::unit_test::suite ss << seqProx; std::string str{ss.str()}; - return str.find(type) == 0 && str[type.size()] == ' ' && + return str.starts_with(type) && str[type.size()] == ' ' && str.find(value) == (type.size() + 1); } diff --git a/src/test/protocol/Serializer_test.cpp b/src/test/protocol/Serializer_test.cpp index e4eaac8a58..7cf27b4348 100644 --- a/src/test/protocol/Serializer_test.cpp +++ b/src/test/protocol/Serializer_test.cpp @@ -1,6 +1,8 @@ -#include +#include #include +#include +#include #include namespace xrpl { diff --git a/src/test/protocol/TER_test.cpp b/src/test/protocol/TER_test.cpp index 2ad4b634aa..5b83a7905b 100644 --- a/src/test/protocol/TER_test.cpp +++ b/src/test/protocol/TER_test.cpp @@ -1,6 +1,8 @@ -#include +#include #include +#include +#include #include #include @@ -49,20 +51,18 @@ struct TER_test : public beast::unit_test::suite using To_t = std::decay_t(tup))>; using From_t = std::decay_t(tup))>; static_assert( - std::is_same::value == std::is_convertible::value, - "Convert err"); + std::is_same_v == std::is_convertible_v, "Convert err"); static_assert( - std::is_same::value == std::is_constructible::value, + std::is_same_v == std::is_constructible_v, "Construct err"); static_assert( - std::is_same::value == - std::is_assignable::value, + std::is_same_v == std::is_assignable_v, "Assign err"); // Assignment or conversion from integer to type should never work. - static_assert(!std::is_convertible::value, "Convert err"); - static_assert(!std::is_constructible::value, "Construct err"); - static_assert(!std::is_assignable::value, "Assign err"); + static_assert(!std::is_convertible_v, "Convert err"); + static_assert(!std::is_constructible_v, "Construct err"); + static_assert(!std::is_assignable_v, "Assign err"); } }; @@ -91,7 +91,7 @@ struct TER_test : public beast::unit_test::suite { Func const func; func(tup, s); - testIterate::value - 1, I2 - 1, Func>(tup, s); + testIterate - 1, I2 - 1, Func>(tup, s); } // Finish iteration over the tuple. @@ -116,7 +116,7 @@ struct TER_test : public beast::unit_test::suite // Examples of each kind of enum. static auto const terEnums = std::make_tuple( telLOCAL_ERROR, temMALFORMED, tefFAILURE, terRETRY, tesSUCCESS, tecCLAIM); - static int const hiIndex{std::tuple_size::value - 1}; + static int const hiIndex{std::tuple_size_v - 1}; // Verify that enums cannot be converted to other enum types. testIterate(terEnums, *this); @@ -125,9 +125,9 @@ struct TER_test : public beast::unit_test::suite auto isConvertible = [](auto from, auto to) { using From_t = std::decay_t; using To_t = std::decay_t; - static_assert(std::is_convertible::value, "Convert err"); - static_assert(std::is_constructible::value, "Construct err"); - static_assert(std::is_assignable::value, "Assign err"); + static_assert(std::is_convertible_v, "Convert err"); + static_assert(std::is_constructible_v, "Construct err"); + static_assert(std::is_assignable_v, "Assign err"); }; // Verify the right types convert to NotTEC. @@ -143,9 +143,9 @@ struct TER_test : public beast::unit_test::suite auto notConvertible = [](auto from, auto to) { using To_t = std::decay_t; using From_t = std::decay_t; - static_assert(!std::is_convertible::value, "Convert err"); - static_assert(!std::is_constructible::value, "Construct err"); - static_assert(!std::is_assignable::value, "Assign err"); + static_assert(!std::is_convertible_v, "Convert err"); + static_assert(!std::is_constructible_v, "Construct err"); + static_assert(!std::is_assignable_v, "Assign err"); }; // Verify types that shouldn't convert to NotTEC. @@ -187,17 +187,17 @@ struct TER_test : public beast::unit_test::suite auto const lhs = std::get(tup); auto const rhs = std::get(tup); - static_assert(std::is_same::value, "== err"); + static_assert(std::is_same_v, "== err"); - static_assert(std::is_same::value, "!= err"); + static_assert(std::is_same_v, "!= err"); - static_assert(std::is_same::value, "< err"); + static_assert(std::is_same_v, "< err"); - static_assert(std::is_same::value, "<= err"); + static_assert(std::is_same_v, "<= err"); - static_assert(std::is_same(lhs, rhs)), bool>::value, "> err"); + static_assert(std::is_same_v(lhs, rhs)), bool>, "> err"); - static_assert(std::is_same=(lhs, rhs)), bool>::value, ">= err"); + static_assert(std::is_same_v=(lhs, rhs)), bool>, ">= err"); // Make sure a sampling of TER types exhibit the expected behavior // for all comparison operators. @@ -225,7 +225,7 @@ struct TER_test : public beast::unit_test::suite tecCLAIM, NotTEC{telLOCAL_ERROR}, TER{tecCLAIM}); - static int const hiIndex{std::tuple_size::value - 1}; + static int const hiIndex{std::tuple_size_v - 1}; // Verify that all types in the ters tuple can be compared with all // the other types in ters. diff --git a/src/test/resource/Logic_test.cpp b/src/test/resource/Logic_test.cpp index 12c1e631e2..f6da313b22 100644 --- a/src/test/resource/Logic_test.cpp +++ b/src/test/resource/Logic_test.cpp @@ -1,18 +1,27 @@ #include +#include #include #include -#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include +#include #include +#include +#include #include +#include -namespace xrpl { -namespace Resource { +namespace xrpl::Resource { class ResourceManager_test : public beast::unit_test::suite { @@ -282,5 +291,4 @@ public: BEAST_DEFINE_TESTSUITE(ResourceManager, resource, xrpl); -} // namespace Resource -} // namespace xrpl +} // namespace xrpl::Resource diff --git a/src/test/rpc/AMMInfo_test.cpp b/src/test/rpc/AMMInfo_test.cpp index ccad7032e4..876c9b66f1 100644 --- a/src/test/rpc/AMMInfo_test.cpp +++ b/src/test/rpc/AMMInfo_test.cpp @@ -1,13 +1,30 @@ -#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class AMMInfo_test : public jtx::AMMTestBase { @@ -359,5 +376,4 @@ public: BEAST_DEFINE_TESTSUITE(AMMInfo, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/AccountCurrencies_test.cpp b/src/test/rpc/AccountCurrencies_test.cpp index 009af9d454..c3b9135f07 100644 --- a/src/test/rpc/AccountCurrencies_test.cpp +++ b/src/test/rpc/AccountCurrencies_test.cpp @@ -1,8 +1,21 @@ -#include -#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include + namespace xrpl { class AccountCurrencies_test : public beast::unit_test::suite @@ -114,7 +127,7 @@ class AccountCurrencies_test : public beast::unit_test::suite env.fund(XRP(10000), alice, gw); char currencySuffix{'A'}; std::vector> gwCurrencies(26); // A - Z - std::generate(gwCurrencies.begin(), gwCurrencies.end(), [&]() { + std::ranges::generate(gwCurrencies, [&]() { auto gwc = gw[std::string("US") + currencySuffix++]; env(trust(alice, gwc(100))); return gwc; diff --git a/src/test/rpc/AccountInfo_test.cpp b/src/test/rpc/AccountInfo_test.cpp index 518398f9ea..a8f849b6d2 100644 --- a/src/test/rpc/AccountInfo_test.cpp +++ b/src/test/rpc/AccountInfo_test.cpp @@ -1,12 +1,26 @@ -#include -#include -#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include + +namespace xrpl::test { class AccountInfo_test : public beast::unit_test::suite { @@ -627,5 +641,4 @@ public: BEAST_DEFINE_TESTSUITE(AccountInfo, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/AccountLines_test.cpp b/src/test/rpc/AccountLines_test.cpp index f91b2aed1c..6f50c93bd8 100644 --- a/src/test/rpc/AccountLines_test.cpp +++ b/src/test/rpc/AccountLines_test.cpp @@ -1,12 +1,40 @@ -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include -namespace xrpl { -namespace RPC { +#include +#include +#include +#include + +namespace xrpl::RPC { class AccountLines_test : public beast::unit_test::suite { @@ -1258,5 +1286,4 @@ public: BEAST_DEFINE_TESTSUITE(AccountLines, rpc, xrpl); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/test/rpc/AccountObjects_test.cpp b/src/test/rpc/AccountObjects_test.cpp index b6e8f6fa76..6f3ae2e2b3 100644 --- a/src/test/rpc/AccountObjects_test.cpp +++ b/src/test/rpc/AccountObjects_test.cpp @@ -1,20 +1,40 @@ -#include #include +#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include +#include +#include +#include #include #include #include -#include - #include +#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { static char const* bob_account_objects[] = { R"json({ @@ -921,7 +941,7 @@ public: jss::RippleState.c_str(), jss::PayChannel.c_str(), jss::PermissionedDomain.c_str()}; - std::sort(v.begin(), v.end()); + std::ranges::sort(v); return v; }(); @@ -937,7 +957,7 @@ public: { gotLedgerTypes.push_back(aobjs[i]["LedgerEntryType"].asString()); } - std::sort(gotLedgerTypes.begin(), gotLedgerTypes.end()); + std::ranges::sort(gotLedgerTypes); BEAST_EXPECT(gotLedgerTypes == expectedLedgerTypes); } } @@ -962,7 +982,7 @@ public: auto const objs = resp[jss::result][jss::account_objects]; for (auto const& obj : resp[jss::result][jss::account_objects]) typesOut.push_back(obj[sfLedgerEntryType.fieldName].asString()); - std::sort(typesOut.begin(), typesOut.end()); + std::ranges::sort(typesOut); }; // Make a lambda we can use to check the number of fetched // account objects and their ledger type @@ -1346,5 +1366,4 @@ public: BEAST_DEFINE_TESTSUITE(AccountObjects, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/AccountOffers_test.cpp b/src/test/rpc/AccountOffers_test.cpp index 6b93e0570f..8c93b15c4a 100644 --- a/src/test/rpc/AccountOffers_test.cpp +++ b/src/test/rpc/AccountOffers_test.cpp @@ -1,9 +1,20 @@ -#include +#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include + +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class AccountOffers_test : public beast::unit_test::suite { @@ -288,5 +299,4 @@ public: BEAST_DEFINE_TESTSUITE(AccountOffers, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/AccountTx_test.cpp b/src/test/rpc/AccountTx_test.cpp index 2470ec3c4c..60ad83934a 100644 --- a/src/test/rpc/AccountTx_test.cpp +++ b/src/test/rpc/AccountTx_test.cpp @@ -1,17 +1,54 @@ -#include +#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include +#include + +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include +#include #include #include #include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace test { +namespace xrpl::test { class AccountTx_test : public beast::unit_test::suite { @@ -863,5 +900,4 @@ public: }; BEAST_DEFINE_TESTSUITE(AccountTx, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/AmendmentBlocked_test.cpp b/src/test/rpc/AmendmentBlocked_test.cpp index e61f22fa0e..0476b7406a 100644 --- a/src/test/rpc/AmendmentBlocked_test.cpp +++ b/src/test/rpc/AmendmentBlocked_test.cpp @@ -1,11 +1,26 @@ -#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include + namespace xrpl { class AmendmentBlocked_test : public beast::unit_test::suite diff --git a/src/test/rpc/BookChanges_test.cpp b/src/test/rpc/BookChanges_test.cpp index 0618f4e7d0..d6881217b5 100644 --- a/src/test/rpc/BookChanges_test.cpp +++ b/src/test/rpc/BookChanges_test.cpp @@ -1,11 +1,21 @@ -#include +#include #include +#include +#include +#include +#include +#include +#include +#include -#include "xrpl/beast/unit_test/suite.h" -#include "xrpl/protocol/jss.h" +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class BookChanges_test : public beast::unit_test::suite { @@ -118,5 +128,4 @@ public: BEAST_DEFINE_TESTSUITE(BookChanges, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Book_test.cpp b/src/test/rpc/Book_test.cpp index ed5ecce388..90a621c693 100644 --- a/src/test/rpc/Book_test.cpp +++ b/src/test/rpc/Book_test.cpp @@ -1,17 +1,39 @@ -#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include #include +#include +#include #include +#include #include +#include #include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include + +namespace xrpl::test { class Book_test : public beast::unit_test::suite { @@ -1825,5 +1847,4 @@ public: BEAST_DEFINE_TESTSUITE_PRIO(Book, rpc, xrpl, 1); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Connect_test.cpp b/src/test/rpc/Connect_test.cpp index c029356bf6..a37c36d907 100644 --- a/src/test/rpc/Connect_test.cpp +++ b/src/test/rpc/Connect_test.cpp @@ -1,5 +1,7 @@ -#include +#include + +#include #include namespace xrpl { diff --git a/src/test/rpc/DeliveredAmount_test.cpp b/src/test/rpc/DeliveredAmount_test.cpp index 167027006a..133c5771b7 100644 --- a/src/test/rpc/DeliveredAmount_test.cpp +++ b/src/test/rpc/DeliveredAmount_test.cpp @@ -1,12 +1,30 @@ -#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include -#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { // Helper class to track the expected number `delivered_amount` results. class CheckDeliveredAmount @@ -403,5 +421,4 @@ public: BEAST_DEFINE_TESTSUITE(DeliveredAmount, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/DepositAuthorized_test.cpp b/src/test/rpc/DepositAuthorized_test.cpp index 7921d063c9..900adb5c7e 100644 --- a/src/test/rpc/DepositAuthorized_test.cpp +++ b/src/test/rpc/DepositAuthorized_test.cpp @@ -1,9 +1,24 @@ -#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include +#include +#include +#include + +namespace xrpl::test { class DepositAuthorized_test : public beast::unit_test::suite { @@ -530,5 +545,4 @@ public: BEAST_DEFINE_TESTSUITE(DepositAuthorized, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Feature_test.cpp b/src/test/rpc/Feature_test.cpp index db9b25cfd4..cdeff57131 100644 --- a/src/test/rpc/Feature_test.cpp +++ b/src/test/rpc/Feature_test.cpp @@ -1,10 +1,25 @@ -#include +#include +#include + +#include + +#include +#include +#include +#include #include +#include #include #include #include +#include +#include +#include +#include +#include + namespace xrpl { class Feature_test : public beast::unit_test::suite @@ -506,10 +521,9 @@ class Feature_test : public beast::unit_test::suite Env env{*this}; auto const& supportedAmendments = xrpl::detail::supportedAmendments(); - auto obsoleteFeature = std::find_if( - std::begin(supportedAmendments), std::end(supportedAmendments), [](auto const& pair) { - return pair.second == VoteBehavior::Obsolete; - }); + auto obsoleteFeature = std::ranges::find_if(supportedAmendments, [](auto const& pair) { + return pair.second == VoteBehavior::Obsolete; + }); if (obsoleteFeature == std::end(supportedAmendments)) { diff --git a/src/test/rpc/GatewayBalances_test.cpp b/src/test/rpc/GatewayBalances_test.cpp index 35514ec093..be51f60f02 100644 --- a/src/test/rpc/GatewayBalances_test.cpp +++ b/src/test/rpc/GatewayBalances_test.cpp @@ -1,12 +1,21 @@ -#include +#include +#include #include +#include +#include +#include +#include +#include -#include +#include +#include +#include #include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class GatewayBalances_test : public beast::unit_test::suite { @@ -279,5 +288,4 @@ public: BEAST_DEFINE_TESTSUITE(GatewayBalances, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/GetAggregatePrice_test.cpp b/src/test/rpc/GetAggregatePrice_test.cpp index 1d14678f76..f4473c0aa3 100644 --- a/src/test/rpc/GetAggregatePrice_test.cpp +++ b/src/test/rpc/GetAggregatePrice_test.cpp @@ -1,14 +1,19 @@ -#include +#include +#include #include +#include -#include - +#include +#include +#include #include -namespace xrpl { -namespace test { -namespace jtx { -namespace oracle { +#include +#include +#include +#include + +namespace xrpl::test::jtx::oracle { class GetAggregatePrice_test : public beast::unit_test::suite { @@ -317,7 +322,4 @@ public: BEAST_DEFINE_TESTSUITE(GetAggregatePrice, rpc, xrpl); -} // namespace oracle -} // namespace jtx -} // namespace test -} // namespace xrpl +} // namespace xrpl::test::jtx::oracle diff --git a/src/test/rpc/GetCounts_test.cpp b/src/test/rpc/GetCounts_test.cpp index d0729b3f56..62e2aadfe6 100644 --- a/src/test/rpc/GetCounts_test.cpp +++ b/src/test/rpc/GetCounts_test.cpp @@ -1,10 +1,16 @@ -#include + +#include +#include +#include +#include #include -#include -#include +#include +#include #include +#include + namespace xrpl { class GetCounts_test : public beast::unit_test::suite diff --git a/src/test/rpc/Handler_test.cpp b/src/test/rpc/Handler_test.cpp index 30ea8831ff..bb9b72c63f 100644 --- a/src/test/rpc/Handler_test.cpp +++ b/src/test/rpc/Handler_test.cpp @@ -1,13 +1,20 @@ -#include + +#include #include -#include +#include +#include +#include +#include #include +#include +#include #include -#include #include +#include +#include // cspell: words stdev namespace xrpl::test { @@ -57,7 +64,7 @@ class Handler_test : public beast::unit_test::suite samples[k] = (std::chrono::steady_clock::now() - start).count(); } - std::sort(samples.begin(), samples.end()); + std::ranges::sort(samples); for (std::size_t k = 35; k < 65; ++k) { j += 1; diff --git a/src/test/rpc/JSONRPC_test.cpp b/src/test/rpc/JSONRPC_test.cpp index b9d4ee4a98..40c2389617 100644 --- a/src/test/rpc/JSONRPC_test.cpp +++ b/src/test/rpc/JSONRPC_test.cpp @@ -1,19 +1,42 @@ -#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include +#include #include #include -#include +#include #include +#include +#include #include +#include +#include +#include #include +#include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include -namespace RPC { +namespace xrpl::RPC { struct TxnTestData { @@ -2824,5 +2847,4 @@ public: BEAST_DEFINE_TESTSUITE(JSONRPC, rpc, xrpl); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/test/rpc/KeyGeneration_test.cpp b/src/test/rpc/KeyGeneration_test.cpp index 6a6d71ca10..a496664ef0 100644 --- a/src/test/rpc/KeyGeneration_test.cpp +++ b/src/test/rpc/KeyGeneration_test.cpp @@ -3,14 +3,19 @@ #include #include +#include #include #include +#include #include +#include #include +#include -namespace xrpl { +#include +#include -namespace RPC { +namespace xrpl::RPC { struct key_strings { @@ -33,45 +38,48 @@ static char const* master_seed_hex = "BE6A670A19B209E112146D0A7ED2AAD7"; } // namespace common static key_strings const secp256k1_strings = { - "r4Vtj2jrfmTVZGfSP3gH9hQPMqFPQFin8f", - common::master_key, - common::master_seed, - common::master_seed_hex, - "aBQxK2YFNqzmAaXNczYcjqDjfiKkLsJUizsr1UBf44RCF8FHdrmX", - "038AAE247B2344B1837FBED8F57389C8C11774510A3F7D784F2A09F0CB6843236C", - "1949ECD889EA71324BC7A30C8E81F4E93CB73EE19D59E9082111E78CC3DDABC2", - common::passphrase, - "This wallet was generated using a user-supplied " - "passphrase that has low entropy and is vulnerable " - "to brute-force attacks.", + .account_id = "r4Vtj2jrfmTVZGfSP3gH9hQPMqFPQFin8f", + .master_key = common::master_key, + .master_seed = common::master_seed, + .master_seed_hex = common::master_seed_hex, + .public_key = "aBQxK2YFNqzmAaXNczYcjqDjfiKkLsJUizsr1UBf44RCF8FHdrmX", + .public_key_hex = "038AAE247B2344B1837FBED8F57389C8C11774510A3F7D784F2A09F0CB6843236C", + .secret_key_hex = "1949ECD889EA71324BC7A30C8E81F4E93CB73EE19D59E9082111E78CC3DDABC2", + .passphrase = common::passphrase, + .passphrase_warning = + "This wallet was generated using a user-supplied " + "passphrase that has low entropy and is vulnerable " + "to brute-force attacks.", }; static key_strings const ed25519_strings = { - "r4qV6xTXerqaZav3MJfSY79ynmc1BSBev1", - common::master_key, - common::master_seed, - common::master_seed_hex, - "aKEQmgLMyZPMruJFejUuedp169LgW6DbJt1rej1DJ5hWUMH4pHJ7", - "ED54C3F5BEDA8BD588B203D23A27398FAD9D20F88A974007D6994659CD7273FE1D", - "77AAED2698D56D6676323629160F4EEF21CFD9EE3D0745CC78FA291461F98278", - common::passphrase, - "This wallet was generated using a user-supplied " - "passphrase that has low entropy and is vulnerable " - "to brute-force attacks.", + .account_id = "r4qV6xTXerqaZav3MJfSY79ynmc1BSBev1", + .master_key = common::master_key, + .master_seed = common::master_seed, + .master_seed_hex = common::master_seed_hex, + .public_key = "aKEQmgLMyZPMruJFejUuedp169LgW6DbJt1rej1DJ5hWUMH4pHJ7", + .public_key_hex = "ED54C3F5BEDA8BD588B203D23A27398FAD9D20F88A974007D6994659CD7273FE1D", + .secret_key_hex = "77AAED2698D56D6676323629160F4EEF21CFD9EE3D0745CC78FA291461F98278", + .passphrase = common::passphrase, + .passphrase_warning = + "This wallet was generated using a user-supplied " + "passphrase that has low entropy and is vulnerable " + "to brute-force attacks.", }; static key_strings const strong_brain_strings = { - "rBcvXmNb7KPkNdMkpckdWPpbvkWgcV3nir", - "TED AVON CAVE HOUR BRAG JEFF RIFT NEAL TOLD FAT SEW SAN", - "shKdhWka8hS7Es3bpctCZXBiAwfUN", - "74BA8389B44F98CF41E795CD91F9C93F", - "aBRL2sqVuzrsM6zikPB4v8UBHGn1aKkrsxhYEffhcQxB2LKyywE5", - "03BD334FB9E06C58D69603E9922686528B18A754BC2F2E1ADA095FFE67DE952C64", - "84262FB16AA25BE407174C7EDAB531220C30FA4D8A28AA9D564673FB3D34502C", - "A4yKIRGdzrw0YQ$2%TFKYG9HP*&ok^!sy7E@RwICs", - "This wallet was generated using a user-supplied " - "passphrase. It may be vulnerable to brute-force " - "attacks.", + .account_id = "rBcvXmNb7KPkNdMkpckdWPpbvkWgcV3nir", + .master_key = "TED AVON CAVE HOUR BRAG JEFF RIFT NEAL TOLD FAT SEW SAN", + .master_seed = "shKdhWka8hS7Es3bpctCZXBiAwfUN", + .master_seed_hex = "74BA8389B44F98CF41E795CD91F9C93F", + .public_key = "aBRL2sqVuzrsM6zikPB4v8UBHGn1aKkrsxhYEffhcQxB2LKyywE5", + .public_key_hex = "03BD334FB9E06C58D69603E9922686528B18A754BC2F2E1ADA095FFE67DE952C64", + .secret_key_hex = "84262FB16AA25BE407174C7EDAB531220C30FA4D8A28AA9D564673FB3D34502C", + .passphrase = "A4yKIRGdzrw0YQ$2%TFKYG9HP*&ok^!sy7E@RwICs", + .passphrase_warning = + "This wallet was generated using a user-supplied " + "passphrase. It may be vulnerable to brute-force " + "attacks.", }; class WalletPropose_test : public xrpl::TestSuite @@ -792,5 +800,4 @@ public: BEAST_DEFINE_TESTSUITE(WalletPropose, rpc, xrpl); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/test/rpc/LedgerClosed_test.cpp b/src/test/rpc/LedgerClosed_test.cpp index 2bc5c2b0c9..efe7c2a815 100644 --- a/src/test/rpc/LedgerClosed_test.cpp +++ b/src/test/rpc/LedgerClosed_test.cpp @@ -1,8 +1,16 @@ -#include +#include +#include +#include +#include + +#include #include +#include #include +#include + namespace xrpl { class LedgerClosed_test : public beast::unit_test::suite diff --git a/src/test/rpc/LedgerData_test.cpp b/src/test/rpc/LedgerData_test.cpp index 472f5b2aa2..612899e47d 100644 --- a/src/test/rpc/LedgerData_test.cpp +++ b/src/test/rpc/LedgerData_test.cpp @@ -1,8 +1,31 @@ -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include + namespace xrpl { class LedgerData_test : public beast::unit_test::suite diff --git a/src/test/rpc/LedgerEntry_test.cpp b/src/test/rpc/LedgerEntry_test.cpp index 7688c09fa7..d208d718f4 100644 --- a/src/test/rpc/LedgerEntry_test.cpp +++ b/src/test/rpc/LedgerEntry_test.cpp @@ -1,22 +1,68 @@ -#include +#include +#include +#include #include +#include +#include #include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include -namespace xrpl { - -namespace test { +namespace xrpl::test { enum class FieldType { AccountField, @@ -2880,12 +2926,12 @@ class LedgerEntry_XChain_test : public beast::unit_test::suite, a[i].isMember(jss::Destination) && a[i][jss::Destination] == scCarol.human()); BEAST_EXPECT( a[i].isMember(sfAttestationSignerAccount.jsonName) && - std::any_of(signers.begin(), signers.end(), [&](signer const& s) { + std::ranges::any_of(signers, [&](signer const& s) { return a[i][sfAttestationSignerAccount.jsonName] == s.account.human(); })); BEAST_EXPECT( a[i].isMember(sfAttestationRewardAccount.jsonName) && - std::any_of(payee.begin(), payee.end(), [&](Account const& account) { + std::ranges::any_of(payee, [&](Account const& account) { return a[i][sfAttestationRewardAccount.jsonName] == account.human(); })); BEAST_EXPECT( @@ -2929,5 +2975,4 @@ public: BEAST_DEFINE_TESTSUITE(LedgerEntry, rpc, xrpl); BEAST_DEFINE_TESTSUITE(LedgerEntry_XChain, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/LedgerHeader_test.cpp b/src/test/rpc/LedgerHeader_test.cpp index 8b460fe6a4..bb1ce8b51f 100644 --- a/src/test/rpc/LedgerHeader_test.cpp +++ b/src/test/rpc/LedgerHeader_test.cpp @@ -1,6 +1,8 @@ #include #include +#include +#include #include namespace xrpl { diff --git a/src/test/rpc/LedgerRPC_test.cpp b/src/test/rpc/LedgerRPC_test.cpp index 8f965aa2cf..c8c40ce0cc 100644 --- a/src/test/rpc/LedgerRPC_test.cpp +++ b/src/test/rpc/LedgerRPC_test.cpp @@ -1,20 +1,31 @@ -#include -#include -#include -#include -#include -#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include +#include #include +#include #include -namespace xrpl { +#include +#include +#include -namespace test { +namespace xrpl::test { class LedgerRPC_test : public beast::unit_test::suite { @@ -696,5 +707,4 @@ public: BEAST_DEFINE_TESTSUITE(LedgerRPC, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/LedgerRequest_test.cpp b/src/test/rpc/LedgerRequest_test.cpp index 4462c1f039..496cd9478a 100644 --- a/src/test/rpc/LedgerRequest_test.cpp +++ b/src/test/rpc/LedgerRequest_test.cpp @@ -1,16 +1,22 @@ -#include -#include -#include +#include +#include +#include +#include + +#include +#include +#include #include #include #include +#include +#include +#include -namespace xrpl { - -namespace RPC { +namespace xrpl::RPC { class LedgerRequest_test : public beast::unit_test::suite { @@ -352,5 +358,4 @@ public: BEAST_DEFINE_TESTSUITE(LedgerRequest, rpc, xrpl); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/test/rpc/ManifestRPC_test.cpp b/src/test/rpc/ManifestRPC_test.cpp index f42fdd7164..aa27c67ca9 100644 --- a/src/test/rpc/ManifestRPC_test.cpp +++ b/src/test/rpc/ManifestRPC_test.cpp @@ -1,16 +1,18 @@ // Copyright (c) 2020 Dev Null Productions -#include +#include +#include +#include #include -#include +#include #include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class ManifestRPC_test : public beast::unit_test::suite { @@ -70,5 +72,4 @@ public: }; BEAST_DEFINE_TESTSUITE(ManifestRPC, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/NoRippleCheck_test.cpp b/src/test/rpc/NoRippleCheck_test.cpp index 54a2931ba5..ac283a54b1 100644 --- a/src/test/rpc/NoRippleCheck_test.cpp +++ b/src/test/rpc/NoRippleCheck_test.cpp @@ -1,17 +1,37 @@ -#include +#include +#include +#include // IWYU pragma: keep #include +#include +#include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include #include #include +#include +#include + namespace xrpl { class NoRippleCheck_test : public beast::unit_test::suite diff --git a/src/test/rpc/NoRipple_test.cpp b/src/test/rpc/NoRipple_test.cpp index fcf412bbd4..75d26ca208 100644 --- a/src/test/rpc/NoRipple_test.cpp +++ b/src/test/rpc/NoRipple_test.cpp @@ -1,11 +1,27 @@ -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include +#include +#include #include -namespace xrpl { +#include -namespace test { +namespace xrpl::test { class NoRipple_test : public beast::unit_test::suite { @@ -265,5 +281,4 @@ public: BEAST_DEFINE_TESTSUITE(NoRipple, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/OwnerInfo_test.cpp b/src/test/rpc/OwnerInfo_test.cpp index 8a09fed467..fb0cc47995 100644 --- a/src/test/rpc/OwnerInfo_test.cpp +++ b/src/test/rpc/OwnerInfo_test.cpp @@ -1,8 +1,18 @@ -#include -#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include + +#include +#include +#include #include +#include #include +#include #include namespace xrpl { diff --git a/src/test/rpc/Peers_test.cpp b/src/test/rpc/Peers_test.cpp index 984e767516..3e36ddb5d7 100644 --- a/src/test/rpc/Peers_test.cpp +++ b/src/test/rpc/Peers_test.cpp @@ -1,12 +1,18 @@ -#include #include #include -#include +#include +#include +#include +#include +#include #include +#include +#include #include +#include namespace xrpl { diff --git a/src/test/rpc/RPCCall_test.cpp b/src/test/rpc/RPCCall_test.cpp index ae876dded4..3ece97344c 100644 --- a/src/test/rpc/RPCCall_test.cpp +++ b/src/test/rpc/RPCCall_test.cpp @@ -1,21 +1,27 @@ -#include +#include +#include #include -#include +#include -#include +#include #include +#include #include -#include +#include -#include +#include +#include +#include #include #include +#include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { struct RPCCallTestData { @@ -5927,5 +5933,4 @@ public: BEAST_DEFINE_TESTSUITE(RPCCall, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/RPCHelpers_test.cpp b/src/test/rpc/RPCHelpers_test.cpp index f180bd5c1a..e87ac50bcf 100644 --- a/src/test/rpc/RPCHelpers_test.cpp +++ b/src/test/rpc/RPCHelpers_test.cpp @@ -1,10 +1,13 @@ +#include #include -#include +#include +#include +#include +#include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class RPCHelpers_test : public beast::unit_test::suite { @@ -72,5 +75,4 @@ public: BEAST_DEFINE_TESTSUITE(RPCHelpers, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/RPCOverload_test.cpp b/src/test/rpc/RPCOverload_test.cpp index e5558af82c..a49b52578a 100644 --- a/src/test/rpc/RPCOverload_test.cpp +++ b/src/test/rpc/RPCOverload_test.cpp @@ -1,14 +1,24 @@ -#include +#include +#include +#include #include #include +#include +#include +#include +#include #include -#include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include +#include + +namespace xrpl::test { class RPCOverload_test : public beast::unit_test::suite { @@ -72,5 +82,4 @@ public: BEAST_DEFINE_TESTSUITE(RPCOverload, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/RobustTransaction_test.cpp b/src/test/rpc/RobustTransaction_test.cpp index 0d47a39573..96a8c5f869 100644 --- a/src/test/rpc/RobustTransaction_test.cpp +++ b/src/test/rpc/RobustTransaction_test.cpp @@ -1,12 +1,20 @@ -#include +#include #include +#include +#include // IWYU pragma: keep +#include +#include -#include +#include #include +#include +#include +#include #include -namespace xrpl { -namespace test { +#include + +namespace xrpl::test { class RobustTransaction_test : public beast::unit_test::suite { @@ -433,5 +441,4 @@ public: BEAST_DEFINE_TESTSUITE(RobustTransaction, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Roles_test.cpp b/src/test/rpc/Roles_test.cpp index 314d0972d2..eaf6143f5d 100644 --- a/src/test/rpc/Roles_test.cpp +++ b/src/test/rpc/Roles_test.cpp @@ -1,14 +1,16 @@ -#include +#include #include +#include -#include +#include + +#include +#include #include #include -namespace xrpl { - -namespace test { +namespace xrpl::test { class Roles_test : public beast::unit_test::suite { @@ -345,6 +347,4 @@ public: BEAST_DEFINE_TESTSUITE(Roles, rpc, xrpl); -} // namespace test - -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/ServerDefinitions_test.cpp b/src/test/rpc/ServerDefinitions_test.cpp index a2c45cfa65..60312d470d 100644 --- a/src/test/rpc/ServerDefinitions_test.cpp +++ b/src/test/rpc/ServerDefinitions_test.cpp @@ -1,14 +1,13 @@ -#include -#include +#include + +#include #include #include #include #include -namespace xrpl { - -namespace test { +namespace xrpl::test { class ServerDefinitions_test : public beast::unit_test::suite { @@ -461,5 +460,4 @@ public: BEAST_DEFINE_TESTSUITE(ServerDefinitions, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/ServerInfo_test.cpp b/src/test/rpc/ServerInfo_test.cpp index 495bb8ba1b..f94fe51d5d 100644 --- a/src/test/rpc/ServerInfo_test.cpp +++ b/src/test/rpc/ServerInfo_test.cpp @@ -1,16 +1,19 @@ -#include +#include +#include + +#include #include -#include +#include #include #include -#include +#include -namespace xrpl { +#include -namespace test { +namespace xrpl::test { namespace validator_data { static auto const public_key = "nHBt9fsb4849WmZiCds4r5TXyBeQjqnH5kzPtqgMAQMgi39YZRPa"; @@ -157,5 +160,4 @@ admin = 127.0.0.1 BEAST_DEFINE_TESTSUITE(ServerInfo, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Simulate_test.cpp b/src/test/rpc/Simulate_test.cpp index 0581313e7a..0ef66d67d9 100644 --- a/src/test/rpc/Simulate_test.cpp +++ b/src/test/rpc/Simulate_test.cpp @@ -1,22 +1,46 @@ -#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include +#include +#include +#include #include -#include +#include +#include +#include +#include #include -#include +#include -namespace xrpl { - -namespace test { +namespace xrpl::test { class Simulate_test : public beast::unit_test::suite { @@ -1167,6 +1191,4 @@ public: BEAST_DEFINE_TESTSUITE(Simulate, rpc, xrpl); -} // namespace test - -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Status_test.cpp b/src/test/rpc/Status_test.cpp index a4a7b8c961..d1a5684262 100644 --- a/src/test/rpc/Status_test.cpp +++ b/src/test/rpc/Status_test.cpp @@ -1,10 +1,18 @@ #include #include -#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace RPC { +#include +#include +#include +#include + +namespace xrpl::RPC { class codeString_test : public beast::unit_test::suite { @@ -196,5 +204,4 @@ public: BEAST_DEFINE_TESTSUITE(fillJson, rpc, RPC); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/test/rpc/Subscribe_test.cpp b/src/test/rpc/Subscribe_test.cpp index 080c9232de..02c4fd8c8d 100644 --- a/src/test/rpc/Subscribe_test.cpp +++ b/src/test/rpc/Subscribe_test.cpp @@ -1,22 +1,60 @@ -#include +#include #include +#include +#include #include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include -#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class Subscribe_test : public beast::unit_test::suite { @@ -1331,8 +1369,8 @@ public: return nftID; }); // Sort both array to prepare for comparison - std::sort(metaIDs.begin(), metaIDs.end()); - std::sort(actualNftIDs.begin(), actualNftIDs.end()); + std::ranges::sort(metaIDs); + std::ranges::sort(actualNftIDs); // Make sure the expect number of NFTs is correct BEAST_EXPECT(metaIDs.size() == actualNftIDs.size()); @@ -1493,5 +1531,4 @@ public: BEAST_DEFINE_TESTSUITE(Subscribe, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/TransactionEntry_test.cpp b/src/test/rpc/TransactionEntry_test.cpp index 6421587478..1940194937 100644 --- a/src/test/rpc/TransactionEntry_test.cpp +++ b/src/test/rpc/TransactionEntry_test.cpp @@ -1,11 +1,26 @@ -#include +#include #include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include +#include +#include +#include #include #include +#include +#include +#include namespace xrpl { diff --git a/src/test/rpc/TransactionHistory_test.cpp b/src/test/rpc/TransactionHistory_test.cpp index 1d555ecd8c..bc6d2910d9 100644 --- a/src/test/rpc/TransactionHistory_test.cpp +++ b/src/test/rpc/TransactionHistory_test.cpp @@ -1,12 +1,20 @@ -#include +#include #include +#include #include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include namespace xrpl { diff --git a/src/test/rpc/Transaction_test.cpp b/src/test/rpc/Transaction_test.cpp index 9f06607729..fdb0ed1c8f 100644 --- a/src/test/rpc/Transaction_test.cpp +++ b/src/test/rpc/Transaction_test.cpp @@ -1,19 +1,42 @@ -#include +#include #include +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include #include +#include #include +#include namespace xrpl { @@ -637,7 +660,7 @@ class Transaction_test : public beast::unit_test::suite // Change the first upper case letter to lower case. std::string mixedCase = ctid; { - auto const iter = std::find_if(mixedCase.begin(), mixedCase.end(), isUpper); + auto const iter = std::ranges::find_if(mixedCase, isUpper); *iter = std::tolower(*iter); } BEAST_EXPECT(ctid != mixedCase); diff --git a/src/test/rpc/ValidatorInfo_test.cpp b/src/test/rpc/ValidatorInfo_test.cpp index d4769f40fb..71760b601b 100644 --- a/src/test/rpc/ValidatorInfo_test.cpp +++ b/src/test/rpc/ValidatorInfo_test.cpp @@ -1,17 +1,19 @@ // Copyright (c) 2020 Dev Null Productions -#include +#include +#include +#include #include -#include +#include #include +#include #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { class ValidatorInfo_test : public beast::unit_test::suite { @@ -89,5 +91,4 @@ public: }; BEAST_DEFINE_TESTSUITE(ValidatorInfo, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/ValidatorRPC_test.cpp b/src/test/rpc/ValidatorRPC_test.cpp index 6c6a75dd01..2d8a73e31d 100644 --- a/src/test/rpc/ValidatorRPC_test.cpp +++ b/src/test/rpc/ValidatorRPC_test.cpp @@ -1,19 +1,34 @@ -#include +#include #include +#include #include #include +#include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include -namespace xrpl { - -namespace test { +namespace xrpl::test { class ValidatorRPC_test : public beast::unit_test::suite { @@ -530,5 +545,4 @@ public: BEAST_DEFINE_TESTSUITE(ValidatorRPC, rpc, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/rpc/Version_test.cpp b/src/test/rpc/Version_test.cpp index c12e397459..39983ac09e 100644 --- a/src/test/rpc/Version_test.cpp +++ b/src/test/rpc/Version_test.cpp @@ -1,8 +1,16 @@ -#include +#include +#include + +#include +#include #include #include +#include +#include +#include + namespace xrpl { class Version_test : public beast::unit_test::suite @@ -45,7 +53,8 @@ class Version_test : public beast::unit_test::suite { if (re["error_what"].isString()) { - return re["error_what"].asString().find(jss::invalid_API_version.c_str()) == 0; + return re["error_what"].asString().starts_with( + jss::invalid_API_version.c_str()); } } return false; diff --git a/src/test/server/ServerStatus_test.cpp b/src/test/server/ServerStatus_test.cpp index b7c9825a55..09282c9d14 100644 --- a/src/test/server/ServerStatus_test.cpp +++ b/src/test/server/ServerStatus_test.cpp @@ -1,31 +1,50 @@ -#include +#include #include #include #include #include -#include #include #include +#include #include +#include +#include +#include +#include #include #include #include -#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include -#include #include +#include +#include #include #include +#include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { class ServerStatus_test : public beast::unit_test::suite, public beast::test::enable_yield_to { @@ -575,8 +594,7 @@ class ServerStatus_test : public beast::unit_test::suite, public beast::test::en int const testTo = (limit == 0) ? 50 : limit + 1; while (connectionCount < testTo) { - clients.emplace_back( - std::make_pair(ip::tcp::socket{ios}, boost::beast::multi_buffer{})); + clients.emplace_back(ip::tcp::socket{ios}, boost::beast::multi_buffer{}); async_connect(clients.back().first, it, yield[ec]); BEAST_EXPECT(!ec); auto req = makeHTTPRequest(ip, port, to_string(jr), {}); @@ -1152,5 +1170,4 @@ public: BEAST_DEFINE_TESTSUITE(ServerStatus, server, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/server/Server_test.cpp b/src/test/server/Server_test.cpp index 97a822fd76..462df0d707 100644 --- a/src/test/server/Server_test.cpp +++ b/src/test/server/Server_test.cpp @@ -1,29 +1,43 @@ -#include #include +#include #include #include +#include #include -#include #include -#include +#include +#include +#include +#include #include #include +#include +#include -#include +#include #include +#include +#include +#include +#include #include #include -#include +#include #include +#include +#include #include +#include #include +#include #include +#include +#include -namespace xrpl { -namespace test { +namespace xrpl::test { using socket_type = boost::beast::tcp_stream; using stream_type = boost::beast::ssl_stream; @@ -501,5 +515,4 @@ public: BEAST_DEFINE_TESTSUITE(Server, server, xrpl); -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/shamap/FetchPack_test.cpp b/src/test/shamap/FetchPack_test.cpp index 1cf7d97b33..fd44423ba8 100644 --- a/src/test/shamap/FetchPack_test.cpp +++ b/src/test/shamap/FetchPack_test.cpp @@ -1,20 +1,34 @@ #include #include +#include +#include +#include +#include #include #include #include -#include +#include +#include #include +#include #include #include +#include +#include #include +#include -#include +#include + +#include +#include +#include +#include +#include #include -namespace xrpl { -namespace tests { +namespace xrpl::tests { class FetchPack_test : public beast::unit_test::suite { @@ -151,5 +165,4 @@ public: BEAST_DEFINE_TESTSUITE(FetchPack, shamap, xrpl); -} // namespace tests -} // namespace xrpl +} // namespace xrpl::tests diff --git a/src/test/shamap/SHAMapSync_test.cpp b/src/test/shamap/SHAMapSync_test.cpp index 6374e49e71..a1db1875d3 100644 --- a/src/test/shamap/SHAMapSync_test.cpp +++ b/src/test/shamap/SHAMapSync_test.cpp @@ -1,14 +1,30 @@ #include #include +#include +#include +#include +#include #include -#include +#include #include +#include #include #include +#include +#include -namespace xrpl { -namespace tests { +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::tests { class SHAMapSync_test : public beast::unit_test::suite { @@ -158,5 +174,4 @@ public: BEAST_DEFINE_TESTSUITE(SHAMapSync, shamap, xrpl); -} // namespace tests -} // namespace xrpl +} // namespace xrpl::tests diff --git a/src/test/shamap/SHAMap_test.cpp b/src/test/shamap/SHAMap_test.cpp index 1c6d62be97..8bbc4ae084 100644 --- a/src/test/shamap/SHAMap_test.cpp +++ b/src/test/shamap/SHAMap_test.cpp @@ -3,12 +3,27 @@ #include #include -#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include -namespace xrpl { -namespace tests { +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::tests { #ifndef __INTELLISENSE__ static_assert(std::is_nothrow_destructible{}, ""); @@ -409,5 +424,4 @@ class SHAMapPathProof_test : public beast::unit_test::suite BEAST_DEFINE_TESTSUITE(SHAMap, shamap, xrpl); BEAST_DEFINE_TESTSUITE(SHAMapPathProof, shamap, xrpl); -} // namespace tests -} // namespace xrpl +} // namespace xrpl::tests diff --git a/src/test/shamap/common.h b/src/test/shamap/common.h index 8284051d44..cd942076b8 100644 --- a/src/test/shamap/common.h +++ b/src/test/shamap/common.h @@ -5,8 +5,7 @@ #include #include -namespace xrpl { -namespace tests { +namespace xrpl::tests { class TestNodeFamily : public Family { @@ -103,5 +102,4 @@ public: } }; -} // namespace tests -} // namespace xrpl +} // namespace xrpl::tests diff --git a/src/test/unit_test/FileDirGuard.h b/src/test/unit_test/FileDirGuard.h index b551b9389d..9d4b94d8c5 100644 --- a/src/test/unit_test/FileDirGuard.h +++ b/src/test/unit_test/FileDirGuard.h @@ -8,8 +8,7 @@ #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { /** Create a directory and remove it when it's done @@ -30,10 +29,14 @@ protected: rmDir(path const& toRm) { if (is_directory(toRm) && is_empty(toRm)) + { remove(toRm); + } else + { test_.log << "Expected " << toRm.string() << " to be an empty existing directory." << std::endl; + } } public: @@ -51,7 +54,9 @@ public: rmSubDir_ = true; } else if (is_directory(subDir_)) + { rmSubDir_ = false; + } else { // Cannot run the test. Someone created a file where we want to @@ -129,8 +134,10 @@ public: else { if (created_) + { test_.log << "Expected " << file_.string() << " to be an existing file." << std::endl; + } } } catch (std::exception& e) @@ -153,5 +160,4 @@ public: } }; -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/test/unit_test/SuiteJournal.h b/src/test/unit_test/SuiteJournal.h index 93005401e6..c3820b8709 100644 --- a/src/test/unit_test/SuiteJournal.h +++ b/src/test/unit_test/SuiteJournal.h @@ -3,8 +3,7 @@ #include #include -namespace xrpl { -namespace test { +namespace xrpl::test { // A Journal::Sink intended for use with the beast unit test framework. class SuiteJournalSink : public beast::Journal::Sink @@ -22,7 +21,7 @@ public: } // For unit testing, always generate logging text. - inline bool + bool active(beast::severities::Severity level) const override { return true; @@ -114,7 +113,7 @@ public: writeAlways(level, text); } - inline void + void writeAlways(beast::severities::Severity level, std::string const& text) override { strm_ << text << std::endl; @@ -127,5 +126,4 @@ public: } }; -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/test/unit_test/multi_runner.cpp b/src/test/unit_test/multi_runner.cpp index e4fb1c4f45..a09110ca43 100644 --- a/src/test/unit_test/multi_runner.cpp +++ b/src/test/unit_test/multi_runner.cpp @@ -1,13 +1,29 @@ #include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include +#include +#include +#include #include namespace xrpl { @@ -48,6 +64,7 @@ results::add(suite_results const& r) auto const elapsed = clock_type::now() - r.start; if (elapsed >= std::chrono::seconds{1}) { + // NOLINTNEXTLINE(modernize-use-ranges) auto const iter = std::lower_bound( top.begin(), top.end(), @@ -88,13 +105,9 @@ results::merge(results const& r) // combine the two top collections boost::container::static_vector top_result; top_result.resize(top.size() + r.top.size()); - std::merge( - top.begin(), - top.end(), - r.top.begin(), - r.top.end(), - top_result.begin(), - [](run_time const& t1, run_time const& t2) { return t1.second > t2.second; }); + std::ranges::merge(top, r.top, top_result.begin(), [](run_time const& t1, run_time const& t2) { + return t1.second > t2.second; + }); if (top_result.size() > max_top) top_result.resize(max_top); diff --git a/src/test/unit_test/multi_runner.h b/src/test/unit_test/multi_runner.h index 2eda4e66a0..86d4699017 100644 --- a/src/test/unit_test/multi_runner.h +++ b/src/test/unit_test/multi_runner.h @@ -252,7 +252,7 @@ public: operator=(multi_runner_child const&) = delete; multi_runner_child(std::size_t num_jobs, bool quiet, bool print_log); - ~multi_runner_child(); + ~multi_runner_child() override; std::size_t tests() const; @@ -268,25 +268,25 @@ public: run_multi(Pred pred); private: - virtual void + void on_suite_begin(beast::unit_test::suite_info const& info) override; - virtual void + void on_suite_end() override; - virtual void + void on_case_begin(std::string const& name) override; - virtual void + void on_case_end() override; - virtual void + void on_pass() override; - virtual void + void on_fail(std::string const& reason) override; - virtual void + void on_log(std::string const& s) override; }; diff --git a/src/test/unit_test/utils.h b/src/test/unit_test/utils.h index 1f6ee58436..d386818e10 100644 --- a/src/test/unit_test/utils.h +++ b/src/test/unit_test/utils.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace test { +namespace xrpl::test { /// Compare two SecretKey objects for equality. /// SecretKey::operator== is deleted, so a named function is used @@ -15,5 +14,4 @@ equal(SecretKey const& lhs, SecretKey const& rhs) std::memcmp(lhs.data(), rhs.data(), SecretKey::size_) == 0; } -} // namespace test -} // namespace xrpl +} // namespace xrpl::test diff --git a/src/tests/libxrpl/CMakeLists.txt b/src/tests/libxrpl/CMakeLists.txt index a82ed1472f..0b666441d1 100644 --- a/src/tests/libxrpl/CMakeLists.txt +++ b/src/tests/libxrpl/CMakeLists.txt @@ -32,20 +32,9 @@ xrpl_add_test(json) target_link_libraries(xrpl.test.json PRIVATE xrpl.imports.test) add_dependencies(xrpl.tests xrpl.test.json) -# protocol_autogen tests use explicit source list (not GLOB) because sources are generated -# Mark generated sources so CMake knows they'll be created at build time -set_source_files_properties( - ${PROTOCOL_AUTOGEN_TEST_SOURCES} - PROPERTIES GENERATED TRUE -) -add_executable(xrpl.test.protocol_autogen ${PROTOCOL_AUTOGEN_TEST_SOURCES}) +xrpl_add_test(protocol_autogen) target_link_libraries(xrpl.test.protocol_autogen PRIVATE xrpl.imports.test) add_dependencies(xrpl.tests xrpl.test.protocol_autogen) -add_test(NAME xrpl.test.protocol_autogen COMMAND xrpl.test.protocol_autogen) -# Ensure code generation runs before compiling tests -if(TARGET protocol_autogen_generate) - add_dependencies(xrpl.test.protocol_autogen protocol_autogen_generate) -endif() # Network unit tests are currently not supported on Windows if(NOT WIN32) diff --git a/src/tests/libxrpl/basics/MallocTrim.cpp b/src/tests/libxrpl/basics/MallocTrim.cpp index 93ed48b885..7c72cd6781 100644 --- a/src/tests/libxrpl/basics/MallocTrim.cpp +++ b/src/tests/libxrpl/basics/MallocTrim.cpp @@ -1,9 +1,13 @@ #include +#include + #include #include +#include + using namespace xrpl; // cSpell:ignore statm diff --git a/src/tests/libxrpl/basics/Mutex.cpp b/src/tests/libxrpl/basics/Mutex.cpp index 9f58799fe7..e91781c463 100644 --- a/src/tests/libxrpl/basics/Mutex.cpp +++ b/src/tests/libxrpl/basics/Mutex.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include using namespace xrpl; diff --git a/src/tests/libxrpl/basics/RangeSet.cpp b/src/tests/libxrpl/basics/RangeSet.cpp index 41a33133f2..1d5d2391f8 100644 --- a/src/tests/libxrpl/basics/RangeSet.cpp +++ b/src/tests/libxrpl/basics/RangeSet.cpp @@ -1,5 +1,8 @@ #include +#include +#include + #include #include diff --git a/src/tests/libxrpl/basics/Slice.cpp b/src/tests/libxrpl/basics/Slice.cpp index 72f2d081c7..b7ef9f6a33 100644 --- a/src/tests/libxrpl/basics/Slice.cpp +++ b/src/tests/libxrpl/basics/Slice.cpp @@ -3,6 +3,7 @@ #include #include +#include #include using namespace xrpl; diff --git a/src/tests/libxrpl/basics/contract.cpp b/src/tests/libxrpl/basics/contract.cpp index d9b729e85d..721aa19fd3 100644 --- a/src/tests/libxrpl/basics/contract.cpp +++ b/src/tests/libxrpl/basics/contract.cpp @@ -3,7 +3,6 @@ #include #include -#include using namespace xrpl; diff --git a/src/tests/libxrpl/basics/scope.cpp b/src/tests/libxrpl/basics/scope.cpp index 067698bce4..a13bab30df 100644 --- a/src/tests/libxrpl/basics/scope.cpp +++ b/src/tests/libxrpl/basics/scope.cpp @@ -2,6 +2,8 @@ #include +#include + using namespace xrpl; TEST(scope, scope_exit) diff --git a/src/tests/libxrpl/basics/tagged_integer.cpp b/src/tests/libxrpl/basics/tagged_integer.cpp index 85a246428b..53e0ddc1d9 100644 --- a/src/tests/libxrpl/basics/tagged_integer.cpp +++ b/src/tests/libxrpl/basics/tagged_integer.cpp @@ -2,6 +2,7 @@ #include +#include #include using namespace xrpl; @@ -21,85 +22,85 @@ using TagUInt3 = tagged_integer; // Check construction of tagged_integers static_assert( - std::is_constructible::value, + std::is_constructible_v, "TagUInt1 should be constructible using a std::uint32_t"); static_assert( - !std::is_constructible::value, + !std::is_constructible_v, "TagUInt1 should not be constructible using a std::uint64_t"); static_assert( - std::is_constructible::value, + std::is_constructible_v, "TagUInt3 should be constructible using a std::uint32_t"); static_assert( - std::is_constructible::value, + std::is_constructible_v, "TagUInt3 should be constructible using a std::uint64_t"); // Check assignment of tagged_integers static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt1 should not be assignable with a std::uint32_t"); static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt1 should not be assignable with a std::uint64_t"); static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt3 should not be assignable with a std::uint32_t"); static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt3 should not be assignable with a std::uint64_t"); static_assert( - std::is_assignable::value, + std::is_assignable_v, "TagUInt1 should be assignable with a TagUInt1"); static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt1 should not be assignable with a TagUInt2"); static_assert( - std::is_assignable::value, + std::is_assignable_v, "TagUInt3 should be assignable with a TagUInt1"); static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt1 should not be assignable with a TagUInt3"); static_assert( - !std::is_assignable::value, + !std::is_assignable_v, "TagUInt3 should not be assignable with a TagUInt1"); // Check convertibility of tagged_integers static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "std::uint32_t should not be convertible to a TagUInt1"); static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "std::uint32_t should not be convertible to a TagUInt3"); static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "std::uint64_t should not be convertible to a TagUInt3"); static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "std::uint64_t should not be convertible to a TagUInt2"); static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "TagUInt1 should not be convertible to TagUInt2"); static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "TagUInt1 should not be convertible to TagUInt3"); static_assert( - !std::is_convertible::value, + !std::is_convertible_v, "TagUInt2 should not be convertible to a TagUInt3"); using TagInt = tagged_integer; diff --git a/src/tests/libxrpl/crypto/csprng.cpp b/src/tests/libxrpl/crypto/csprng.cpp index 41dcfd57a9..4a383cae62 100644 --- a/src/tests/libxrpl/crypto/csprng.cpp +++ b/src/tests/libxrpl/crypto/csprng.cpp @@ -2,6 +2,8 @@ #include +#include + using namespace xrpl; TEST(csprng, get_values) diff --git a/src/tests/libxrpl/helpers/TestSink.cpp b/src/tests/libxrpl/helpers/TestSink.cpp index 17cc110429..3b138edfd8 100644 --- a/src/tests/libxrpl/helpers/TestSink.cpp +++ b/src/tests/libxrpl/helpers/TestSink.cpp @@ -1,8 +1,11 @@ -#include - #include +#include + +#include + #include // for getenv +#include #if BOOST_OS_WINDOWS #include // for _isatty, _fileno diff --git a/src/tests/libxrpl/json/Output.cpp b/src/tests/libxrpl/json/Output.cpp index 96d7369d51..bc26c068ca 100644 --- a/src/tests/libxrpl/json/Output.cpp +++ b/src/tests/libxrpl/json/Output.cpp @@ -1,4 +1,5 @@ #include + #include #include diff --git a/src/tests/libxrpl/json/Value.cpp b/src/tests/libxrpl/json/Value.cpp index 194c677024..a53d81b5e1 100644 --- a/src/tests/libxrpl/json/Value.cpp +++ b/src/tests/libxrpl/json/Value.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -7,10 +8,15 @@ #include #include -#include +#include +#include +#include +#include +#include #include #include #include +#include namespace xrpl { @@ -1099,7 +1105,7 @@ TEST(json_value, access_members) EXPECT_FALSE(val.isValidIndex(0)); EXPECT_FALSE(val.isMember("key")); - val = 3.14159; + val = std::numbers::pi; EXPECT_EQ(val.type(), Json::realValue); EXPECT_EQ(val.size(), 0); EXPECT_FALSE(val.isValidIndex(0)); diff --git a/src/tests/libxrpl/json/Writer.cpp b/src/tests/libxrpl/json/Writer.cpp index 7016b4322d..a21f27199f 100644 --- a/src/tests/libxrpl/json/Writer.cpp +++ b/src/tests/libxrpl/json/Writer.cpp @@ -1,6 +1,8 @@ #include -#include +#include +#include + #include #include diff --git a/src/tests/libxrpl/net/HTTPClient.cpp b/src/tests/libxrpl/net/HTTPClient.cpp index de567a93ab..d3dfd32361 100644 --- a/src/tests/libxrpl/net/HTTPClient.cpp +++ b/src/tests/libxrpl/net/HTTPClient.cpp @@ -1,24 +1,29 @@ -#include #include -#include -#include +#include +#include +#include + +#include +#include // IWYU pragma: keep #include +#include #include +#include #include -#include -#include -#include -#include +#include // IWYU pragma: keep +#include // IWYU pragma: keep +#include // IWYU pragma: keep #include #include -#include +#include +#include #include -#include -#include -#include +#include +#include +#include using namespace xrpl; diff --git a/src/xrpld/app/consensus/RCLConsensus.cpp b/src/xrpld/app/consensus/RCLConsensus.cpp index b7b0919aad..6d99c2ee15 100644 --- a/src/xrpld/app/consensus/RCLConsensus.cpp +++ b/src/xrpld/app/consensus/RCLConsensus.cpp @@ -1,34 +1,88 @@ #include + +#include +#include +#include +#include #include #include +#include #include #include #include #include #include +#include #include #include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include #include #include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include + +#include + +#include #include +#include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/consensus/RCLCxPeerPos.cpp b/src/xrpld/app/consensus/RCLCxPeerPos.cpp index 8f99dceea8..7cc2ab8b90 100644 --- a/src/xrpld/app/consensus/RCLCxPeerPos.cpp +++ b/src/xrpld/app/consensus/RCLCxPeerPos.cpp @@ -1,7 +1,16 @@ #include +#include +#include +#include +#include +#include +#include #include #include +#include + +#include namespace xrpl { diff --git a/src/xrpld/app/consensus/RCLCxPeerPos.h b/src/xrpld/app/consensus/RCLCxPeerPos.h index e334320826..f5d3f0e8f0 100644 --- a/src/xrpld/app/consensus/RCLCxPeerPos.h +++ b/src/xrpld/app/consensus/RCLCxPeerPos.h @@ -95,7 +95,7 @@ private: { using beast::hash_append; hash_append(h, HashPrefix::proposal); - hash_append(h, std::uint32_t(proposal().proposeSeq())); + hash_append(h, proposal().proposeSeq()); hash_append(h, proposal().closeTime()); hash_append(h, proposal().prevLedger()); hash_append(h, proposal().position()); diff --git a/src/xrpld/app/consensus/RCLValidations.cpp b/src/xrpld/app/consensus/RCLValidations.cpp index 7bc16f194e..b969774954 100644 --- a/src/xrpld/app/consensus/RCLValidations.cpp +++ b/src/xrpld/app/consensus/RCLValidations.cpp @@ -1,16 +1,28 @@ #include + #include #include #include #include #include +#include #include +#include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/AcceptedLedger.cpp b/src/xrpld/app/ledger/AcceptedLedger.cpp index 1da70702bf..f866a5f3bc 100644 --- a/src/xrpld/app/ledger/AcceptedLedger.cpp +++ b/src/xrpld/app/ledger/AcceptedLedger.cpp @@ -1,6 +1,10 @@ #include +#include +#include + #include +#include namespace xrpl { @@ -19,7 +23,7 @@ AcceptedLedger::AcceptedLedger(std::shared_ptr const& ledger) : transactions_.reserve(256); insertAll(ledger->txs); - std::sort(transactions_.begin(), transactions_.end(), [](auto const& a, auto const& b) { + std::ranges::sort(transactions_, [](auto const& a, auto const& b) { return a->getTxnSeq() < b->getTxnSeq(); }); } diff --git a/src/xrpld/app/ledger/AccountStateSF.cpp b/src/xrpld/app/ledger/AccountStateSF.cpp index 79c1f0eaf6..d5fa5d83ff 100644 --- a/src/xrpld/app/ledger/AccountStateSF.cpp +++ b/src/xrpld/app/ledger/AccountStateSF.cpp @@ -1,5 +1,14 @@ #include +#include +#include +#include +#include + +#include +#include +#include + namespace xrpl { void diff --git a/src/xrpld/app/ledger/ConsensusTransSetSF.cpp b/src/xrpld/app/ledger/ConsensusTransSetSF.cpp index 5fd614a1d9..d42ff0a9e0 100644 --- a/src/xrpld/app/ledger/ConsensusTransSetSF.cpp +++ b/src/xrpld/app/ledger/ConsensusTransSetSF.cpp @@ -1,12 +1,25 @@ #include + #include #include +#include +#include +#include +#include +#include #include -#include #include -#include +#include +#include // IWYU pragma: keep #include +#include + +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/InboundLedger.h b/src/xrpld/app/ledger/InboundLedger.h index b17b59b27f..4176aa0b09 100644 --- a/src/xrpld/app/ledger/InboundLedger.h +++ b/src/xrpld/app/ledger/InboundLedger.h @@ -36,7 +36,7 @@ public: clock_type&, std::unique_ptr peerSet); - ~InboundLedger(); + ~InboundLedger() override; // Called when another attempt is made to fetch this same ledger void diff --git a/src/xrpld/app/ledger/LedgerCleaner.h b/src/xrpld/app/ledger/LedgerCleaner.h index aa8d042c24..a5ad4f981b 100644 --- a/src/xrpld/app/ledger/LedgerCleaner.h +++ b/src/xrpld/app/ledger/LedgerCleaner.h @@ -17,7 +17,7 @@ protected: } public: - virtual ~LedgerCleaner() = default; + ~LedgerCleaner() override = default; virtual void start() = 0; diff --git a/src/xrpld/app/ledger/LedgerHistory.cpp b/src/xrpld/app/ledger/LedgerHistory.cpp index 969511db4c..8fd2e075c6 100644 --- a/src/xrpld/app/ledger/LedgerHistory.cpp +++ b/src/xrpld/app/ledger/LedgerHistory.cpp @@ -1,11 +1,33 @@ #include + #include #include #include +#include +#include +#include #include #include -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -283,9 +305,8 @@ leaves(SHAMap const& sm) std::vector v; for (auto const& item : sm) v.push_back(&item); - std::sort(v.begin(), v.end(), [](SHAMapItem const* lhs, SHAMapItem const* rhs) { - return lhs->key() < rhs->key(); - }); + std::ranges::sort( + v, [](SHAMapItem const* lhs, SHAMapItem const* rhs) { return lhs->key() < rhs->key(); }); return v; } diff --git a/src/xrpld/app/ledger/LedgerMaster.h b/src/xrpld/app/ledger/LedgerMaster.h index e598787047..1bd4530d6d 100644 --- a/src/xrpld/app/ledger/LedgerMaster.h +++ b/src/xrpld/app/ledger/LedgerMaster.h @@ -38,7 +38,7 @@ public: beast::insight::Collector::ptr const& collector, beast::Journal journal); - virtual ~LedgerMaster() = default; + ~LedgerMaster() override = default; LedgerIndex getCurrentLedgerIndex(); @@ -363,7 +363,7 @@ private: LedgerIndex const max_ledger_difference_{1000000}; // Time that the previous upgrade warning was issued. - TimeKeeper::time_point upgradeWarningPrevTime_{}; + TimeKeeper::time_point upgradeWarningPrevTime_; private: struct Stats diff --git a/src/xrpld/app/ledger/LedgerReplayTask.h b/src/xrpld/app/ledger/LedgerReplayTask.h index 030121b240..65c43edb2d 100644 --- a/src/xrpld/app/ledger/LedgerReplayTask.h +++ b/src/xrpld/app/ledger/LedgerReplayTask.h @@ -31,8 +31,8 @@ public: // to be updated std::uint32_t finishSeq_ = 0; - std::vector skipList_ = {}; // including the finishHash - uint256 startHash_ = {}; + std::vector skipList_; // including the finishHash + uint256 startHash_; std::uint32_t startSeq_ = 0; bool full_ = false; @@ -80,7 +80,7 @@ public: std::shared_ptr& skipListAcquirer, TaskParameter const& parameter); - ~LedgerReplayTask(); + ~LedgerReplayTask() override; /** Start the task */ void @@ -146,7 +146,7 @@ private: TaskParameter parameter_; uint32_t maxTimeouts_; std::shared_ptr skipListAcquirer_; - std::shared_ptr parent_ = {}; + std::shared_ptr parent_; uint32_t deltaToBuild_ = 0; // should not build until have parent std::vector> deltas_; diff --git a/src/xrpld/app/ledger/LedgerToJson.h b/src/xrpld/app/ledger/LedgerToJson.h index 3686311656..53985f343b 100644 --- a/src/xrpld/app/ledger/LedgerToJson.h +++ b/src/xrpld/app/ledger/LedgerToJson.h @@ -19,7 +19,7 @@ struct LedgerFill std::vector q = {}) : ledger(l), options(o), txQueue(std::move(q)), context(ctx) { - if (context) + if (context != nullptr) closeTime = context->ledgerMaster.getCloseTimeBySeq(ledger.seq()); } diff --git a/src/xrpld/app/ledger/OrderBookDBImpl.cpp b/src/xrpld/app/ledger/OrderBookDBImpl.cpp index 1a764d952f..1c64c5e6fa 100644 --- a/src/xrpld/app/ledger/OrderBookDBImpl.cpp +++ b/src/xrpld/app/ledger/OrderBookDBImpl.cpp @@ -1,10 +1,34 @@ -#include #include +#include + +#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/TransactionStateSF.cpp b/src/xrpld/app/ledger/TransactionStateSF.cpp index 11d3c83058..e2ec3ca7b6 100644 --- a/src/xrpld/app/ledger/TransactionStateSF.cpp +++ b/src/xrpld/app/ledger/TransactionStateSF.cpp @@ -1,5 +1,15 @@ #include +#include +#include +#include +#include +#include + +#include +#include +#include + namespace xrpl { void diff --git a/src/xrpld/app/ledger/detail/BuildLedger.cpp b/src/xrpld/app/ledger/detail/BuildLedger.cpp index 3b48ab13c5..8f5184336a 100644 --- a/src/xrpld/app/ledger/detail/BuildLedger.cpp +++ b/src/xrpld/app/ledger/detail/BuildLedger.cpp @@ -1,13 +1,27 @@ #include + #include #include #include +#include +#include +#include +#include +#include #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include + namespace xrpl { /* Generic buildLedgerImpl that dispatches to ApplyTxs invocable with signature diff --git a/src/xrpld/app/ledger/detail/InboundLedger.cpp b/src/xrpld/app/ledger/detail/InboundLedger.cpp index 2402b5b561..a65fae2ff3 100644 --- a/src/xrpld/app/ledger/detail/InboundLedger.cpp +++ b/src/xrpld/app/ledger/detail/InboundLedger.cpp @@ -1,21 +1,53 @@ -#include #include + +#include #include #include #include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include #include +#include + #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -64,7 +96,7 @@ InboundLedger::InboundLedger( app, hash, ledgerAcquireTimeout, - {jtLEDGER_DATA, "InboundLedger", 5}, + {.jobType = jtLEDGER_DATA, .jobName = "InboundLedger", .jobLimit = 5}, app.getJournal("InboundLedger")) , m_clock(clock) , mSeq(seq) @@ -522,7 +554,7 @@ InboundLedger::trigger(std::shared_ptr const& peer, TriggerReason reason) auto packet = std::make_shared(tmBH, protocol::mtGET_OBJECTS); auto const& peerIds = mPeerSet->getPeerIds(); - std::for_each(peerIds.begin(), peerIds.end(), [this, &packet](auto id) { + std::ranges::for_each(peerIds, [this, &packet](auto id) { if (auto p = app_.getOverlay().findPeerByShortID(id)) { mByHash = false; @@ -724,14 +756,13 @@ InboundLedger::filterNodes( { // Sort nodes so that the ones we haven't recently // requested come before the ones we have. - auto dup = std::stable_partition(nodes.begin(), nodes.end(), [this](auto const& item) { - return mRecentNodes.count(item.second) == 0; - }); + auto dup = std::ranges::stable_partition( + nodes, [this](auto const& item) { return mRecentNodes.count(item.second) == 0; }); // If everything is a duplicate we don't want to send // any query at all except on a timeout where we need // to query everyone: - if (dup == nodes.begin()) + if (dup.begin() == nodes.begin()) { JLOG(journal_.trace()) << "filterNodes: all duplicates"; @@ -745,7 +776,7 @@ InboundLedger::filterNodes( { JLOG(journal_.trace()) << "filterNodes: pruning duplicates"; - nodes.erase(dup, nodes.end()); + nodes.erase(dup.begin(), dup.end()); } std::size_t const limit = (reason == TriggerReason::reply) ? reqNodesReply : reqNodes; @@ -957,7 +988,7 @@ InboundLedger::getNeededHashes() if (!mHaveHeader) { - ret.push_back(std::make_pair(protocol::TMGetObjectByHash::otLEDGER, hash_)); + ret.emplace_back(protocol::TMGetObjectByHash::otLEDGER, hash_); return ret; } @@ -966,7 +997,7 @@ InboundLedger::getNeededHashes() AccountStateSF filter(mLedger->stateMap().family().db(), app_.getLedgerMaster()); for (auto const& h : neededStateHashes(4, &filter)) { - ret.push_back(std::make_pair(protocol::TMGetObjectByHash::otSTATE_NODE, h)); + ret.emplace_back(protocol::TMGetObjectByHash::otSTATE_NODE, h); } } @@ -975,7 +1006,7 @@ InboundLedger::getNeededHashes() TransactionStateSF filter(mLedger->txMap().family().db(), app_.getLedgerMaster()); for (auto const& h : neededTxHashes(4, &filter)) { - ret.push_back(std::make_pair(protocol::TMGetObjectByHash::otTRANSACTION_NODE, h)); + ret.emplace_back(protocol::TMGetObjectByHash::otTRANSACTION_NODE, h); } } diff --git a/src/xrpld/app/ledger/detail/InboundLedgers.cpp b/src/xrpld/app/ledger/detail/InboundLedgers.cpp index f147a35ca4..2207308737 100644 --- a/src/xrpld/app/ledger/detail/InboundLedgers.cpp +++ b/src/xrpld/app/ledger/detail/InboundLedgers.cpp @@ -1,18 +1,43 @@ #include + +#include #include #include +#include +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include +#include #include #include +#include +#include +#include #include #include +#include +#include + +#include +#include +#include #include +#include #include #include +#include +#include +#include #include namespace xrpl { @@ -286,7 +311,7 @@ public: for (auto const& it : mLedgers) { XRPL_ASSERT(it.second, "xrpl::InboundLedgersImp::getInfo : non-null ledger"); - acqs.push_back(it); + acqs.emplace_back(it); } for (auto const& it : mRecentFailures) { diff --git a/src/xrpld/app/ledger/detail/InboundTransactions.cpp b/src/xrpld/app/ledger/detail/InboundTransactions.cpp index cc3585a3fb..56c9c633f4 100644 --- a/src/xrpld/app/ledger/detail/InboundTransactions.cpp +++ b/src/xrpld/app/ledger/detail/InboundTransactions.cpp @@ -1,16 +1,29 @@ -#include #include + #include #include +#include -#include +#include +#include +#include +#include #include #include #include +#include +#include +#include + +#include #include +#include +#include #include #include +#include +#include namespace xrpl { @@ -150,7 +163,7 @@ public: return; } - data.emplace_back(std::make_pair(*id, makeSlice(node.nodedata()))); + data.emplace_back(*id, makeSlice(node.nodedata())); } if (!ta->takeNodes(data, peer).isUseful()) diff --git a/src/xrpld/app/ledger/detail/LedgerCleaner.cpp b/src/xrpld/app/ledger/detail/LedgerCleaner.cpp index a0d168f299..850b60f4ed 100644 --- a/src/xrpld/app/ledger/detail/LedgerCleaner.cpp +++ b/src/xrpld/app/ledger/detail/LedgerCleaner.cpp @@ -1,12 +1,34 @@ -#include #include + +#include +#include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp index f829e58830..0ff9a0ed98 100644 --- a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp +++ b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.cpp @@ -1,12 +1,34 @@ +#include + #include #include #include #include -#include +#include #include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -20,7 +42,9 @@ LedgerDeltaAcquire::LedgerDeltaAcquire( app, ledgerHash, LedgerReplayParameters::SUB_TASK_TIMEOUT, - {jtREPLAY_TASK, "LedReplDelta", LedgerReplayParameters::MAX_QUEUED_TASKS}, + {.jobType = jtREPLAY_TASK, + .jobName = "LedReplDelta", + .jobLimit = LedgerReplayParameters::MAX_QUEUED_TASKS}, app.getJournal("LedgerReplayDelta")) , inboundLedgers_(inboundLedgers) , ledgerSeq_(ledgerSeq) diff --git a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h index 9ac58c2e7c..6839c44386 100644 --- a/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h +++ b/src/xrpld/app/ledger/detail/LedgerDeltaAcquire.h @@ -125,8 +125,8 @@ private: InboundLedgers& inboundLedgers_; std::uint32_t const ledgerSeq_; std::unique_ptr peerSet_; - std::shared_ptr replayTemp_ = {}; - std::shared_ptr fullLedger_ = {}; + std::shared_ptr replayTemp_; + std::shared_ptr fullLedger_; std::map> orderedTxns_; std::vector dataReadyCallbacks_; std::set reasons_; diff --git a/src/xrpld/app/ledger/detail/LedgerMaster.cpp b/src/xrpld/app/ledger/detail/LedgerMaster.cpp index b9305b743f..880e8e9e38 100644 --- a/src/xrpld/app/ledger/detail/LedgerMaster.cpp +++ b/src/xrpld/app/ledger/detail/LedgerMaster.cpp @@ -1,6 +1,9 @@ -#include #include + +#include +#include #include +#include #include #include #include @@ -8,33 +11,71 @@ #include #include #include +#include #include #include #include #include +#include #include +#include +#include +#include #include +#include +#include #include #include #include +#include +#include +#include #include +#include +#include #include #include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include #include #include #include #include #include +#include +#include +#include + +#include + +#include #include +#include #include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include namespace xrpl { @@ -231,7 +272,7 @@ LedgerMaster::setValidLedger(std::shared_ptr const& l) if (!times.empty() && times.size() >= app_.getValidators().quorum()) { // Calculate the sample median - std::sort(times.begin(), times.end()); + std::ranges::sort(times); auto const t0 = times[(times.size() - 1) / 2]; auto const t1 = times[times.size() / 2]; signTime = t0 + (t1 - t0) / 2; @@ -942,12 +983,12 @@ LedgerMaster::checkAccept(std::shared_ptr const& ledger) { auto fees2 = app_.getValidations().fees(ledger->header().parentHash, base); fees.reserve(fees.size() + fees2.size()); - std::copy(fees2.begin(), fees2.end(), std::back_inserter(fees)); + std::ranges::copy(fees2, std::back_inserter(fees)); } std::uint32_t fee = 0; if (!fees.empty()) { - std::sort(fees.begin(), fees.end()); + std::ranges::sort(fees); if (auto stream = m_journal.debug()) { std::stringstream s; diff --git a/src/xrpld/app/ledger/detail/LedgerPersistence.cpp b/src/xrpld/app/ledger/detail/LedgerPersistence.cpp index 91de010f1d..0edf425f13 100644 --- a/src/xrpld/app/ledger/detail/LedgerPersistence.cpp +++ b/src/xrpld/app/ledger/detail/LedgerPersistence.cpp @@ -1,14 +1,22 @@ #include +#include +#include #include #include +#include #include #include -#include #include -#include +#include #include +#include +#include +#include +#include +#include + namespace xrpl { static bool diff --git a/src/xrpld/app/ledger/detail/LedgerReplay.cpp b/src/xrpld/app/ledger/detail/LedgerReplay.cpp index a02267e4a1..925ede6d27 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplay.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplay.cpp @@ -1,6 +1,12 @@ #include #include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp b/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp index 93d7ac0d2f..9facb24c9d 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplayMsgHandler.cpp @@ -1,12 +1,35 @@ +#include + #include #include -#include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include #include +#include +#include +#include namespace xrpl { LedgerReplayMsgHandler::LedgerReplayMsgHandler(Application& app, LedgerReplayer& replayer) diff --git a/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp b/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp index f393c7fca8..1afe94bbc8 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplayTask.cpp @@ -1,8 +1,23 @@ -#include #include + +#include +#include #include #include #include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include namespace xrpl { @@ -52,7 +67,7 @@ LedgerReplayTask::TaskParameter::canMergeInto(TaskParameter const& existingTask) if (existingTask.full_) { auto const& exList = existingTask.skipList_; - if (auto i = std::find(exList.begin(), exList.end(), finishHash_); i != exList.end()) + if (auto i = std::ranges::find(exList, finishHash_); i != exList.end()) { return existingTask.totalLedgers_ >= totalLedgers_ + (exList.end() - i) - 1; } @@ -72,7 +87,9 @@ LedgerReplayTask::LedgerReplayTask( app, parameter.finishHash_, LedgerReplayParameters::TASK_TIMEOUT, - {jtREPLAY_TASK, "LedReplTask", LedgerReplayParameters::MAX_QUEUED_TASKS}, + {.jobType = jtREPLAY_TASK, + .jobName = "LedReplTask", + .jobLimit = LedgerReplayParameters::MAX_QUEUED_TASKS}, app.getJournal("LedgerReplayTask")) , inboundLedgers_(inboundLedgers) , replayer_(replayer) diff --git a/src/xrpld/app/ledger/detail/LedgerReplayer.cpp b/src/xrpld/app/ledger/detail/LedgerReplayer.cpp index ae3552f258..7779132b39 100644 --- a/src/xrpld/app/ledger/detail/LedgerReplayer.cpp +++ b/src/xrpld/app/ledger/detail/LedgerReplayer.cpp @@ -1,6 +1,28 @@ #include + +#include +#include #include #include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -97,8 +119,7 @@ LedgerReplayer::createDeltas(std::shared_ptr task) JLOG(j_.trace()) << "Creating " << parameter.totalLedgers_ - 1 << " deltas"; if (parameter.totalLedgers_ > 1) { - auto skipListItem = - std::find(parameter.skipList_.begin(), parameter.skipList_.end(), parameter.startHash_); + auto skipListItem = std::ranges::find(parameter.skipList_, parameter.startHash_); auto const wasLast = skipListItem == parameter.skipList_.end(); if (not wasLast) ++skipListItem; @@ -197,9 +218,9 @@ LedgerReplayer::sweep() << skipLists_.size() << " skipLists, and " << deltas_.size() << " deltas."; tasks_.erase( - std::remove_if( - tasks_.begin(), - tasks_.end(), + std::ranges::remove_if( + tasks_, + [this](auto const& t) -> bool { if (t->finished()) { @@ -207,7 +228,8 @@ LedgerReplayer::sweep() return true; } return false; - }), + }) + .begin(), tasks_.end()); auto removeCannotLocked = [](auto& subTasks) { @@ -239,7 +261,7 @@ LedgerReplayer::stop() JLOG(j_.info()) << "Stopping..."; { std::lock_guard const lock(mtx_); - std::for_each(tasks_.begin(), tasks_.end(), [](auto& i) { i->cancel(); }); + std::ranges::for_each(tasks_, [](auto& i) { i->cancel(); }); tasks_.clear(); auto lockAndCancel = [](auto& i) { if (auto sptr = i.second.lock(); sptr) @@ -247,9 +269,9 @@ LedgerReplayer::stop() sptr->cancel(); } }; - std::for_each(skipLists_.begin(), skipLists_.end(), lockAndCancel); + std::ranges::for_each(skipLists_, lockAndCancel); skipLists_.clear(); - std::for_each(deltas_.begin(), deltas_.end(), lockAndCancel); + std::ranges::for_each(deltas_, lockAndCancel); deltas_.clear(); } diff --git a/src/xrpld/app/ledger/detail/LedgerToJson.cpp b/src/xrpld/app/ledger/detail/LedgerToJson.cpp index a48756f9b6..8ba45fb515 100644 --- a/src/xrpld/app/ledger/detail/LedgerToJson.cpp +++ b/src/xrpld/app/ledger/detail/LedgerToJson.cpp @@ -1,15 +1,35 @@ -#include #include + +#include #include #include #include #include #include +#include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/ledger/detail/LocalTxs.cpp b/src/xrpld/app/ledger/detail/LocalTxs.cpp index 38969a092c..5326568e35 100644 --- a/src/xrpld/app/ledger/detail/LocalTxs.cpp +++ b/src/xrpld/app/ledger/detail/LocalTxs.cpp @@ -1,7 +1,19 @@ #include -#include +#include +#include +#include +#include #include +#include +#include +#include + +#include +#include +#include +#include +#include /* This code prevents scenarios like the following: diff --git a/src/xrpld/app/ledger/detail/OpenLedger.cpp b/src/xrpld/app/ledger/detail/OpenLedger.cpp index dfce2278a5..5db4e23e1e 100644 --- a/src/xrpld/app/ledger/detail/OpenLedger.cpp +++ b/src/xrpld/app/ledger/detail/OpenLedger.cpp @@ -1,17 +1,39 @@ #include + #include #include #include -#include #include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include + +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { OpenLedger::OpenLedger( diff --git a/src/xrpld/app/ledger/detail/SkipListAcquire.cpp b/src/xrpld/app/ledger/detail/SkipListAcquire.cpp index 20d63bcb64..c77c0f1b03 100644 --- a/src/xrpld/app/ledger/detail/SkipListAcquire.cpp +++ b/src/xrpld/app/ledger/detail/SkipListAcquire.cpp @@ -1,9 +1,30 @@ +#include + #include #include -#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + namespace xrpl { SkipListAcquire::SkipListAcquire( @@ -15,7 +36,9 @@ SkipListAcquire::SkipListAcquire( app, ledgerHash, LedgerReplayParameters::SUB_TASK_TIMEOUT, - {jtREPLAY_TASK, "SkipListAcq", LedgerReplayParameters::MAX_QUEUED_TASKS}, + {.jobType = jtREPLAY_TASK, + .jobName = "SkipListAcq", + .jobLimit = LedgerReplayParameters::MAX_QUEUED_TASKS}, app.getJournal("LedgerReplaySkipList")) , inboundLedgers_(inboundLedgers) , peerSet_(std::move(peerSet)) diff --git a/src/xrpld/app/ledger/detail/TimeoutCounter.cpp b/src/xrpld/app/ledger/detail/TimeoutCounter.cpp index 216771e60d..9cf58bee47 100644 --- a/src/xrpld/app/ledger/detail/TimeoutCounter.cpp +++ b/src/xrpld/app/ledger/detail/TimeoutCounter.cpp @@ -1,7 +1,19 @@ #include +#include + +#include +#include +#include +#include #include +#include +#include + +#include +#include + namespace xrpl { using namespace std::chrono_literals; diff --git a/src/xrpld/app/ledger/detail/TransactionAcquire.cpp b/src/xrpld/app/ledger/detail/TransactionAcquire.cpp index d2561718a3..b38c413344 100644 --- a/src/xrpld/app/ledger/detail/TransactionAcquire.cpp +++ b/src/xrpld/app/ledger/detail/TransactionAcquire.cpp @@ -1,13 +1,28 @@ -#include -#include -#include #include -#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include +#include +#include +#include + +#include #include +#include +#include #include +#include +#include namespace xrpl { @@ -29,11 +44,11 @@ TransactionAcquire::TransactionAcquire( app, hash, TX_ACQUIRE_TIMEOUT, - {jtTXN_DATA, "TxAcq", {}}, + {.jobType = jtTXN_DATA, .jobName = "TxAcq", .jobLimit = {}}, app.getJournal("TransactionAcquire")) , mPeerSet(std::move(peerSet)) { - mMap = std::make_shared(SHAMapType::TRANSACTION, hash, app_.getNodeFamily()); + mMap = std::make_shared(SHAMapType::TRANSACTION, hash, app.getNodeFamily()); mMap->setUnbacked(); } diff --git a/src/xrpld/app/ledger/detail/TransactionAcquire.h b/src/xrpld/app/ledger/detail/TransactionAcquire.h index f29a01fca4..d0887f8418 100644 --- a/src/xrpld/app/ledger/detail/TransactionAcquire.h +++ b/src/xrpld/app/ledger/detail/TransactionAcquire.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -16,7 +17,7 @@ public: using pointer = std::shared_ptr; TransactionAcquire(Application& app, uint256 const& hash, std::unique_ptr peerSet); - ~TransactionAcquire() = default; + ~TransactionAcquire() override = default; SHAMapAddNode takeNodes( diff --git a/src/xrpld/app/ledger/detail/TransactionMaster.cpp b/src/xrpld/app/ledger/detail/TransactionMaster.cpp index 4be3c95993..798c29dc05 100644 --- a/src/xrpld/app/ledger/detail/TransactionMaster.cpp +++ b/src/xrpld/app/ledger/detail/TransactionMaster.cpp @@ -1,10 +1,29 @@ #include + #include #include -#include +#include +#include // IWYU pragma: keep +#include #include +#include +#include #include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index 129bab8e20..c83b45f247 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -1,16 +1,20 @@ +#include + #include +#include #include #include #include #include #include +#include #include #include #include #include #include -#include #include +#include #include #include #include @@ -22,53 +26,109 @@ #include #include #include +#include #include #include #include #include #include +#include +#include +#include +#include #include +#include #include +#include #include +#include #include #include +#include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include +#include #include #include +#include #include +#include #include +#include #include +#include +#include #include +#include #include +#include +#include #include #include #include #include #include +#include +#include #include +#include +#include #include +#include #include +#include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include #include +#include +#include #include -#include +#include +#include #include +#include #include +#include +#include +#include #include -#include +#include #include +#include +#include +#include #include +#include namespace xrpl { @@ -93,7 +153,7 @@ private: beast::Journal journal, std::chrono::milliseconds interval, boost::asio::io_context& ios) - : m_event(ev), m_journal(journal), m_probe(interval, ios) + : m_event(std::move(ev)), m_journal(journal), m_probe(interval, ios) { } @@ -329,7 +389,9 @@ public: , nodeFamily_(*this, *m_collectorManager) - , m_orderBookDB(make_OrderBookDB(*this, {config_->PATH_SEARCH_MAX, config_->standalone()})) + , m_orderBookDB(make_OrderBookDB( + *this, + {.pathSearchMax = config_->PATH_SEARCH_MAX, .standalone = config_->standalone()})) , m_pathRequestManager( std::make_unique( @@ -548,7 +610,7 @@ public: return *m_networkOPs; } - virtual ServerHandler& + ServerHandler& getServerHandler() override { XRPL_ASSERT( @@ -1072,7 +1134,7 @@ public: return maxDisallowedLedger_; } - virtual std::optional const& + std::optional const& getTrapTxID() const override { return trapTxID_; @@ -1430,16 +1492,16 @@ ApplicationImp::setup(boost::program_options::variables_map const& cmdline) Resource::Charge loadType = Resource::feeReferenceRPC; Resource::Consumer c; RPC::JsonContext context{ - {getJournal("RPCHandler"), - *this, - loadType, - getOPs(), - getLedgerMaster(), - c, - Role::ADMIN, - {}, - {}, - RPC::apiMaximumSupportedVersion}, + {.j = getJournal("RPCHandler"), + .app = *this, + .loadType = loadType, + .netOps = getOPs(), + .ledgerMaster = getLedgerMaster(), + .consumer = c, + .role = Role::ADMIN, + .coro = {}, + .infoSub = {}, + .apiVersion = RPC::apiMaximumSupportedVersion}, jvCommand}; Json::Value jvResult; diff --git a/src/xrpld/app/main/Application.h b/src/xrpld/app/main/Application.h index 45bd94adce..d0437be9a6 100644 --- a/src/xrpld/app/main/Application.h +++ b/src/xrpld/app/main/Application.h @@ -16,15 +16,6 @@ namespace xrpl { -namespace unl { -class Manager; -} // namespace unl -namespace Resource { -class Manager; -} // namespace Resource -namespace NodeStore { -class Database; -} // namespace NodeStore namespace perf { class PerfLog; } // namespace perf diff --git a/src/xrpld/app/main/BasicApp.cpp b/src/xrpld/app/main/BasicApp.cpp index 2c5a2b0364..9de7dc53d3 100644 --- a/src/xrpld/app/main/BasicApp.cpp +++ b/src/xrpld/app/main/BasicApp.cpp @@ -4,6 +4,9 @@ #include +#include +#include + BasicApp::BasicApp(std::size_t numberOfThreads) { work_.emplace(boost::asio::make_work_guard(io_context_)); diff --git a/src/xrpld/app/main/CollectorManager.cpp b/src/xrpld/app/main/CollectorManager.cpp index 353a49de91..a722e1447d 100644 --- a/src/xrpld/app/main/CollectorManager.cpp +++ b/src/xrpld/app/main/CollectorManager.cpp @@ -1,6 +1,16 @@ #include +#include +#include +#include +#include +#include +#include +#include +#include + #include +#include namespace xrpl { @@ -31,7 +41,7 @@ public: m_groups = beast::insight::make_Groups(m_collector); } - ~CollectorManagerImp() = default; + ~CollectorManagerImp() override = default; beast::insight::Collector::ptr const& collector() override diff --git a/src/xrpld/app/main/GRPCServer.cpp b/src/xrpld/app/main/GRPCServer.cpp index c8017d9ac0..3c64606516 100644 --- a/src/xrpld/app/main/GRPCServer.cpp +++ b/src/xrpld/app/main/GRPCServer.cpp @@ -1,9 +1,55 @@ #include -#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -343,6 +389,48 @@ GRPCServerImpl::GRPCServerImpl(Application& app) Throw("Error parsing secure_gateway section"); } } + + // Read TLS certificate configuration (optional) + sslCertPath_ = section.get("ssl_cert"); + sslKeyPath_ = section.get("ssl_key"); + sslCertChainPath_ = section.get("ssl_cert_chain"); + sslClientCAPath_ = section.get("ssl_client_ca"); + + // If cert or key is specified, both must be specified + if (sslCertPath_.has_value() || sslKeyPath_.has_value()) + { + if (!sslCertPath_.has_value() || !sslKeyPath_.has_value()) + { + JLOG(journal_.error()) + << "Both ssl_cert and ssl_key must be specified for gRPC TLS"; + Throw("Incomplete TLS configuration for gRPC"); + } + JLOG(journal_.info()) << "gRPC TLS enabled with certificate: " << *sslCertPath_; + } + + // Validate TLS configuration consistency: ssl_cert_chain only makes sense when TLS is + // enabled + if (sslCertChainPath_.has_value() && + (!sslCertPath_.has_value() || !sslKeyPath_.has_value())) + { + JLOG(journal_.error()) + << "ssl_cert_chain specified for gRPC without both ssl_cert and ssl_key; " + << "this is an invalid TLS configuration"; + Throw( + "Invalid gRPC TLS configuration: ssl_cert_chain requires both ssl_cert and " + "ssl_key"); + } + + // Validate TLS configuration consistency: ssl_client_ca only makes sense when TLS is + // enabled + if (sslClientCAPath_.has_value() && (!sslCertPath_.has_value() || !sslKeyPath_.has_value())) + { + JLOG(journal_.error()) + << "ssl_client_ca specified for gRPC without both ssl_cert and ssl_key; " + << "this is an invalid TLS configuration"; + Throw( + "Invalid gRPC TLS configuration: ssl_client_ca requires both ssl_cert and ssl_key"); + } } } @@ -377,10 +465,8 @@ GRPCServerImpl::handleRpcs() std::vector> requests = setupListeners(); auto erase = [&requests](Processor* ptr) { - auto it = - std::find_if(requests.begin(), requests.end(), [ptr](std::shared_ptr& sPtr) { - return sPtr.get() == ptr; - }); + auto it = std::ranges::find_if( + requests, [ptr](std::shared_ptr& sPtr) { return sPtr.get() == ptr; }); BOOST_ASSERT(it != requests.end()); it->swap(requests.back()); requests.pop_back(); @@ -514,6 +600,104 @@ GRPCServerImpl::setupListeners() return requests; } +std::shared_ptr +GRPCServerImpl::createServerCredentials() +{ + if (not sslCertPath_.has_value() or not sslKeyPath_.has_value()) + { + JLOG(journal_.info()) << "Configuring gRPC server without TLS"; + return grpc::InsecureServerCredentials(); + } + + JLOG(journal_.info()) << "Configuring gRPC server with TLS"; + + try + { + boost::system::error_code ec; + grpc::SslServerCredentialsOptions sslOpts; + grpc::SslServerCredentialsOptions::PemKeyCertPair keyCertPair; + + std::string const certContents = getFileContents(ec, *sslCertPath_); + if (ec) + { + JLOG(journal_.error()) << "Failed to read gRPC SSL certificate file: " << *sslCertPath_ + << " - " << ec.message(); // LCOV_EXCL_LINE + return nullptr; + } + + std::string const keyContents = getFileContents(ec, *sslKeyPath_); + if (ec) + { + JLOG(journal_.error()) << "Failed to read gRPC SSL key file: " << *sslKeyPath_ << " - " + << ec.message(); // LCOV_EXCL_LINE + return nullptr; + } + + keyCertPair.private_key = keyContents; + + // Read intermediate CA certificates for server certificate chain (optional) + std::string certChainContents; + if (sslCertChainPath_.has_value()) + { + certChainContents = getFileContents(ec, *sslCertChainPath_); + if (ec) + { + JLOG(journal_.error()) + << "Failed to read gRPC SSL cert chain file: " << *sslCertChainPath_ << " - " + << ec.message(); // LCOV_EXCL_LINE + return nullptr; + } + } + + // Read CA certificate for client verification (mTLS, optional) + if (sslClientCAPath_.has_value()) + { + auto const clientCAContents = getFileContents(ec, *sslClientCAPath_); + if (ec) + { + JLOG(journal_.error()) + << "Failed to read gRPC SSL client CA file: " << *sslClientCAPath_ << " - " + << ec.message(); // LCOV_EXCL_LINE + return nullptr; + } + + if (clientCAContents.empty()) + { + JLOG(journal_.error()) + << "Empty/truncated gRPC SSL client CA file: " << *sslClientCAPath_ + << " - failed to configure mutual TLS"; // LCOV_EXCL_LINE + return nullptr; + } + + sslOpts.pem_root_certs = clientCAContents; + sslOpts.client_certificate_request = + GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY; + JLOG(journal_.info()) << "gRPC mutual TLS enabled - client certificates will be " + "required and verified"; + } + + // Combine server cert with intermediate CA certs for complete chain + keyCertPair.cert_chain = certContents; + if (!certChainContents.empty()) + { + keyCertPair.cert_chain += '\n' + certChainContents; + JLOG(journal_.info()) << "gRPC server certificate chain configured with " + "intermediate CA certificates"; // LCOV_EXCL_LINE + } + + sslOpts.pem_key_cert_pairs.push_back(keyCertPair); + + JLOG(journal_.info()) << "gRPC TLS credentials configured successfully"; // LCOV_EXCL_LINE + return grpc::SslServerCredentials(sslOpts); + } + catch (std::exception const& e) + { + JLOG(journal_.error()) << "Exception while configuring gRPC TLS: " + << e.what(); // LCOV_EXCL_LINE + return nullptr; + } +} + bool GRPCServerImpl::start() { @@ -521,24 +705,63 @@ GRPCServerImpl::start() if (serverAddress_.empty()) return false; - JLOG(journal_.info()) << "Starting gRPC server at " << serverAddress_; + // Determine TLS mode for logging + bool const tlsEnabled = sslCertPath_.has_value() && sslKeyPath_.has_value(); + bool const mtlsEnabled = tlsEnabled && sslClientCAPath_.has_value(); + + std::string tlsMode = "without TLS"; + if (mtlsEnabled) + { + tlsMode = "with mutual TLS (mTLS)"; + } + else if (tlsEnabled) + { + tlsMode = "with TLS"; + } + + JLOG(journal_.info()) << "Starting gRPC server at " << serverAddress_ << " " + << tlsMode; // LCOV_EXCL_LINE grpc::ServerBuilder builder; - - // Listen on the given address without any authentication mechanism. - // Actually binded port will be returned into "port" variable. int port = 0; - builder.AddListeningPort(serverAddress_, grpc::InsecureServerCredentials(), &port); + + // Create credentials (TLS or insecure) based on configuration + auto credentials = createServerCredentials(); + if (!credentials) + { + JLOG(journal_.error()) << "Failed to create gRPC server credentials for " << serverAddress_ + << " (TLS mode: " << tlsMode + << ") - server will not start"; // LCOV_EXCL_LINE + return false; + } + + // Add listening port with appropriate credentials + builder.AddListeningPort(serverAddress_, credentials, &port); + // Register "service_" as the instance through which we'll communicate with // clients. In this case it corresponds to an *asynchronous* service. builder.RegisterService(&service_); + // Get hold of the completion queue used for the asynchronous communication // with the gRPC runtime. cq_ = builder.AddCompletionQueue(); + // Finally assemble the server. server_ = builder.BuildAndStart(); serverPort_ = static_cast(port); + if (serverPort_ != 0u) + { + JLOG(journal_.info()) << "gRPC server started successfully on port " << serverPort_; + } + else + { + JLOG(journal_.error()) + << "Failed to start gRPC server at " << serverAddress_ << " (TLS mode: " << tlsMode + << "); Possible causes: address already in use, invalid address format, or permission " + "denied"; // LCOV_EXCL_LINE + } + return static_cast(serverPort_); } diff --git a/src/xrpld/app/main/GRPCServer.h b/src/xrpld/app/main/GRPCServer.h index 7fa9364174..215c1e037d 100644 --- a/src/xrpld/app/main/GRPCServer.h +++ b/src/xrpld/app/main/GRPCServer.h @@ -66,6 +66,13 @@ private: std::vector secureGatewayIPs_; + // TLS certificate paths + std::optional sslCertPath_; + std::optional sslKeyPath_; + std::optional sslCertChainPath_; // Intermediate CA certs for server cert chain + std::optional + sslClientCAPath_; // CA cert for client certificate verification (mTLS) + beast::Journal journal_; // typedef for function to bind a listener @@ -124,6 +131,10 @@ public: getEndpoint() const; private: + // Create server credentials (TLS or insecure) based on configuration + std::shared_ptr + createServerCredentials(); + // Class encompassing the state and logic needed to serve a request. template class CallData : public Processor, @@ -175,7 +186,7 @@ private: std::vector const& secureGatewayIPs_; public: - virtual ~CallData() = default; + ~CallData() override = default; // Take in the "service" instance (in this case representing an // asynchronous server) and the completion queue "cq" used for @@ -196,10 +207,10 @@ private: CallData& operator=(CallData const&) = delete; - virtual void + void process() override; - virtual bool + bool isFinished() override; std::shared_ptr diff --git a/src/xrpld/app/main/LoadManager.cpp b/src/xrpld/app/main/LoadManager.cpp index 47948a4031..84c57ad360 100644 --- a/src/xrpld/app/main/LoadManager.cpp +++ b/src/xrpld/app/main/LoadManager.cpp @@ -1,11 +1,18 @@ -#include #include +#include + +#include +#include #include -#include +#include +#include +#include // IWYU pragma: keep #include #include +#include +#include #include #include #include diff --git a/src/xrpld/app/main/LoadManager.h b/src/xrpld/app/main/LoadManager.h index c36afb1804..3ae1f45e3b 100644 --- a/src/xrpld/app/main/LoadManager.h +++ b/src/xrpld/app/main/LoadManager.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include diff --git a/src/xrpld/app/main/Main.cpp b/src/xrpld/app/main/Main.cpp index ebd5920492..076faff845 100644 --- a/src/xrpld/app/main/Main.cpp +++ b/src/xrpld/app/main/Main.cpp @@ -5,28 +5,48 @@ #include #include +#include +#include #include +#include +#include +#include +#include #include #include +#include #include -#include +#include +#include +#include #include -#include +#include // IWYU pragma: keep #include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #ifdef ENABLE_TESTS #include #include #endif // ENABLE_TESTS -#include -#include #include #include -#include #include #include @@ -49,7 +69,7 @@ #endif #ifdef ENABLE_VOIDSTAR -#include "antithesis_instrumentation.h" +#include #endif namespace po = boost::program_options; @@ -188,7 +208,7 @@ public: std::vector v; boost::split(v, patterns, boost::algorithm::is_any_of(",")); selectors_.reserve(v.size()); - std::for_each(v.begin(), v.end(), [this](std::string s) { + std::ranges::for_each(v, [this](std::string s) { boost::trim(s); if (selectors_.empty() || !s.empty()) selectors_.emplace_back(beast::unit_test::selector::automatch, s); diff --git a/src/xrpld/app/main/NodeIdentity.cpp b/src/xrpld/app/main/NodeIdentity.cpp index bc2c943b10..f52e7e372e 100644 --- a/src/xrpld/app/main/NodeIdentity.cpp +++ b/src/xrpld/app/main/NodeIdentity.cpp @@ -1,10 +1,22 @@ -#include #include + +#include #include #include +#include +#include +#include +#include #include +#include + +#include +#include +#include +#include + namespace xrpl { std::pair diff --git a/src/xrpld/app/main/NodeStoreScheduler.cpp b/src/xrpld/app/main/NodeStoreScheduler.cpp index 1ca8e80523..2aebe40252 100644 --- a/src/xrpld/app/main/NodeStoreScheduler.cpp +++ b/src/xrpld/app/main/NodeStoreScheduler.cpp @@ -1,5 +1,10 @@ #include +#include +#include +#include +#include + namespace xrpl { NodeStoreScheduler::NodeStoreScheduler(JobQueue& jobQueue) : jobQueue_(jobQueue) diff --git a/src/xrpld/app/misc/DeliverMax.h b/src/xrpld/app/misc/DeliverMax.h index 7fec517d28..8610a6a529 100644 --- a/src/xrpld/app/misc/DeliverMax.h +++ b/src/xrpld/app/misc/DeliverMax.h @@ -6,9 +6,7 @@ namespace Json { class Value; } // namespace Json -namespace xrpl { - -namespace RPC { +namespace xrpl::RPC { /** Copy `Amount` field to `DeliverMax` field in transaction output JSON. @@ -24,5 +22,4 @@ insertDeliverMax(Json::Value& tx_json, TxType txnType, unsigned int apiVersion); /** @} */ -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/app/misc/FeeVoteImpl.cpp b/src/xrpld/app/misc/FeeVoteImpl.cpp index 414d8d7421..53e56286b8 100644 --- a/src/xrpld/app/misc/FeeVoteImpl.cpp +++ b/src/xrpld/app/misc/FeeVoteImpl.cpp @@ -1,10 +1,31 @@ #include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/misc/NegativeUNLVote.cpp b/src/xrpld/app/misc/NegativeUNLVote.cpp index 212cfaa2e9..8db726ff48 100644 --- a/src/xrpld/app/misc/NegativeUNLVote.cpp +++ b/src/xrpld/app/misc/NegativeUNLVote.cpp @@ -1,8 +1,31 @@ -#include #include +#include + +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/misc/NetworkOPs.cpp b/src/xrpld/app/misc/NetworkOPs.cpp index e39230efdb..cedc888825 100644 --- a/src/xrpld/app/misc/NetworkOPs.cpp +++ b/src/xrpld/app/misc/NetworkOPs.cpp @@ -1,7 +1,10 @@ +#include + #include #include #include #include +#include #include #include #include @@ -11,17 +14,19 @@ #include #include #include +#include #include #include #include #include -#include #include #include -#include #include +#include +#include #include #include +#include #include #include #include @@ -30,47 +35,122 @@ #include #include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include #include #include +#include #include #include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include #include #include #include +#include +#include +#include #include +#include #include +#include +#include +#include +#include #include #include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include +#include #include +#include #include +#include #include +#include +#include #include +#include +#include #include #include +#include +#include +#include + +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include #include #include +#include #include -#include +#include +#include #include +#include +#include namespace xrpl { @@ -91,7 +171,7 @@ class NetworkOPsImp final : public NetworkOPs TER result; TransactionStatus(std::shared_ptr t, bool a, bool l, FailHard f) - : transaction(t), admin(a), local(l), failType(f) + : transaction(std::move(t)), admin(a), local(l), failType(f) { XRPL_ASSERT( local || failType == FailHard::no, @@ -178,7 +258,11 @@ class NetworkOPsImp final : public NetworkOPs getCounterData() const { std::lock_guard const lock(mutex_); - return {counters_, mode_, start_, initialSyncUs_}; + return { + .counters = counters_, + .mode = mode_, + .start = start_, + .initialSyncUs = initialSyncUs_}; } }; @@ -1254,7 +1338,7 @@ NetworkOPsImp::doTransactionAsync( if (transaction->getApplying()) return; - mTransactions.push_back(TransactionStatus(transaction, bUnlimited, false, failType)); + mTransactions.emplace_back(transaction, bUnlimited, false, failType); transaction->setApplying(); if (mDispatchState == DispatchState::none) @@ -1276,7 +1360,7 @@ NetworkOPsImp::doTransactionSync( if (!transaction->getApplying()) { - mTransactions.push_back(TransactionStatus(transaction, bUnlimited, true, failType)); + mTransactions.emplace_back(transaction, bUnlimited, true, failType); transaction->setApplying(); } @@ -1373,9 +1457,8 @@ NetworkOPsImp::processTransactionSet(CanonicalTXSet const& set) doTransactionSyncBatch(lock, [&](std::unique_lock const&) { XRPL_ASSERT(lock.owns_lock(), "xrpl::NetworkOPsImp::processTransactionSet has lock"); - return std::any_of(mTransactions.begin(), mTransactions.end(), [](auto const& t) { - return t.transaction->getApplying(); - }); + return std::ranges::any_of( + mTransactions, [](auto const& t) { return t.transaction->getApplying(); }); }); } @@ -2860,7 +2943,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) // This array must be sorted in increasing order. static constexpr std::array protocols{ "http", "https", "peer", "ws", "ws2", "wss", "wss2"}; - static_assert(std::is_sorted(std::begin(protocols), std::end(protocols))); + static_assert(std::ranges::is_sorted(protocols)); { Json::Value ports{Json::arrayValue}; for (auto const& port : registry_.get().getServerHandler().setup().ports) @@ -2871,6 +2954,7 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters) port.admin_user.empty() && port.admin_password.empty())) continue; std::vector proto; + // NOLINTNEXTLINE(modernize-use-ranges) std::set_intersection( std::begin(port.protocol), std::end(port.protocol), @@ -3349,7 +3433,7 @@ NetworkOPsImp::pubAccountTransaction( if (auto isSptr = info.sinkWptr_.lock(); isSptr) { accountHistoryNotify.emplace_back( - SubAccountHistoryInfo{isSptr, info.index_}); + SubAccountHistoryInfo{.sink_ = isSptr, .index_ = info.index_}); ++it; } else @@ -3678,7 +3762,11 @@ NetworkOPsImp::addAccountHistoryJob(SubAccountHistoryInfoWeak subInfo) case Sqlite: { auto& db = registry_.get().getRelationalDatabase(); RelationalDatabase::AccountTxPageOptions const options{ - accountId, {minLedger, maxLedger}, marker, 0, true}; + .account = accountId, + .ledgerRange = {.min = minLedger, .max = maxLedger}, + .marker = marker, + .limit = 0, + .bAdmin = true}; return db.newestAccountTxPage(options); } // LCOV_EXCL_START @@ -3902,7 +3990,8 @@ NetworkOPsImp::subAccountHistory(InfoSub::ref isrListener, AccountID const& acco } std::lock_guard const sl(mSubLock); - SubAccountHistoryInfoWeak ahi{isrListener, std::make_shared(accountId)}; + SubAccountHistoryInfoWeak ahi{ + .sinkWptr_ = isrListener, .index_ = std::make_shared(accountId)}; auto simIterator = mSubAccountHistory.find(accountId); if (simIterator == mSubAccountHistory.end()) { diff --git a/src/xrpld/app/misc/SHAMapStore.h b/src/xrpld/app/misc/SHAMapStore.h index b377538f62..6788d15392 100644 --- a/src/xrpld/app/misc/SHAMapStore.h +++ b/src/xrpld/app/misc/SHAMapStore.h @@ -1,5 +1,7 @@ #pragma once +#include + #include #include diff --git a/src/xrpld/app/misc/SHAMapStoreImp.cpp b/src/xrpld/app/misc/SHAMapStoreImp.cpp index 140f260d56..518d9f6b14 100644 --- a/src/xrpld/app/misc/SHAMapStoreImp.cpp +++ b/src/xrpld/app/misc/SHAMapStoreImp.cpp @@ -1,16 +1,45 @@ -#include #include + +#include +#include #include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include #include +#include #include #include #include +#include #include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { void diff --git a/src/xrpld/app/misc/SHAMapStoreImp.h b/src/xrpld/app/misc/SHAMapStoreImp.h index c361fa426c..08e3dd70eb 100644 --- a/src/xrpld/app/misc/SHAMapStoreImp.h +++ b/src/xrpld/app/misc/SHAMapStoreImp.h @@ -61,7 +61,7 @@ private: // minimum # of ledgers required for standalone mode. static std::uint32_t const minimumDeletionIntervalSA_ = 8; // minimum ledger to maintain online. - std::atomic minimumOnline_{}; + std::atomic minimumOnline_; NodeStore::Scheduler& scheduler_; beast::Journal const journal_; @@ -102,7 +102,7 @@ public: std::uint32_t clampFetchDepth(std::uint32_t fetch_depth) const override { - return deleteInterval_ ? std::min(fetch_depth, deleteInterval_) : fetch_depth; + return (deleteInterval_ != 0u) ? std::min(fetch_depth, deleteInterval_) : fetch_depth; } std::unique_ptr @@ -209,7 +209,7 @@ public: void start() override { - if (deleteInterval_) + if (deleteInterval_ != 0u) thread_ = std::thread(&SHAMapStoreImp::run, this); } diff --git a/src/xrpld/app/misc/Transaction.h b/src/xrpld/app/misc/Transaction.h index fa126e6bb5..31d899d99b 100644 --- a/src/xrpld/app/misc/Transaction.h +++ b/src/xrpld/app/misc/Transaction.h @@ -21,7 +21,6 @@ namespace xrpl { // class Application; -class Database; class Rules; enum TransStatus { @@ -139,7 +138,7 @@ public: * @return Whether transaction is being applied within a batch. */ bool - getApplying() + getApplying() const { // Note that all access to mApplying are made by NetworkOPsImp, and must // be done under that class's lock. @@ -308,7 +307,7 @@ public: // Calling the wrong getter function will throw an exception. // See documentation for the getter functions for more details bool - isFound() + isFound() const { return std::holds_alternative>(locator); } diff --git a/src/xrpld/app/misc/TxQ.h b/src/xrpld/app/misc/TxQ.h index b9ea7cc8f6..fa7e573071 100644 --- a/src/xrpld/app/misc/TxQ.h +++ b/src/xrpld/app/misc/TxQ.h @@ -382,11 +382,12 @@ private: , targetTxnCount_( setup.targetTxnInLedger < minimumTxnCount_ ? minimumTxnCount_ : setup.targetTxnInLedger) - , maximumTxnCount_( - setup.maximumTxnInLedger ? *setup.maximumTxnInLedger < targetTxnCount_ - ? targetTxnCount_ - : *setup.maximumTxnInLedger - : std::optional(std::nullopt)) + , maximumTxnCount_([&]() -> std::optional { + if (!setup.maximumTxnInLedger) + return std::nullopt; + return *setup.maximumTxnInLedger < targetTxnCount_ ? targetTxnCount_ + : *setup.maximumTxnInLedger; + }()) , txnsExpected_(minimumTxnCount_) , recentTxnCounts_(setup.ledgersInQueue) , escalationMultiplier_(setup.minimumEscalationMultiplier) @@ -424,7 +425,7 @@ private: Snapshot getSnapshot() const { - return {txnsExpected_, escalationMultiplier_}; + return {.txnsExpected = txnsExpected_, .escalationMultiplier = escalationMultiplier_}; } /** Use the number of transactions in the current open ledger @@ -672,7 +673,7 @@ private: bool empty() const { - return !getTxnCount(); + return getTxnCount() == 0u; } /// Find the entry in transactions that precedes seqProx, if one does. diff --git a/src/xrpld/app/misc/detail/AccountTxPaging.cpp b/src/xrpld/app/misc/detail/AccountTxPaging.cpp index bb0a09426a..d29bedc19d 100644 --- a/src/xrpld/app/misc/detail/AccountTxPaging.cpp +++ b/src/xrpld/app/misc/detail/AccountTxPaging.cpp @@ -1,11 +1,22 @@ +#include + #include #include #include #include -#include +#include +#include #include +#include +#include #include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/misc/detail/AmendmentTable.cpp b/src/xrpld/app/misc/detail/AmendmentTable.cpp index afecb08b24..0698230eb2 100644 --- a/src/xrpld/app/misc/detail/AmendmentTable.cpp +++ b/src/xrpld/app/misc/detail/AmendmentTable.cpp @@ -1,18 +1,48 @@ -#include #include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include #include #include +#include #include -#include -#include +#include +#include #include -#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -45,7 +75,7 @@ parseSection(Section const& section) "Invalid amendment ID '" + match[1] + "' in [" + section.name() + "]"); } - names.push_back(std::make_pair(id, match[2])); + names.emplace_back(id, match[2]); } return names; @@ -191,9 +221,8 @@ public: } // Now remove any expired records from recordedVotes_. - std::for_each( - recordedVotes_.begin(), - recordedVotes_.end(), + std::ranges::for_each( + recordedVotes_, [&closeTime, newTimeout, &j](decltype(recordedVotes_)::value_type& votes) { auto const pkHuman = toBase58(TokenType::NodePublic, votes.first); if (!votes.second.timeout) @@ -754,7 +783,7 @@ AmendmentTableImpl::doValidation(std::set const& enabled) const } if (!amendments.empty()) - std::sort(amendments.begin(), amendments.end()); + std::ranges::sort(amendments); return amendments; } diff --git a/src/xrpld/app/misc/detail/DeliverMax.cpp b/src/xrpld/app/misc/detail/DeliverMax.cpp index 44500eec7e..4e3d6563f9 100644 --- a/src/xrpld/app/misc/detail/DeliverMax.cpp +++ b/src/xrpld/app/misc/detail/DeliverMax.cpp @@ -1,9 +1,9 @@ #include +#include #include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { void insertDeliverMax(Json::Value& tx_json, TxType txnType, unsigned int apiVersion) @@ -19,5 +19,4 @@ insertDeliverMax(Json::Value& tx_json, TxType txnType, unsigned int apiVersion) } } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/app/misc/detail/Transaction.cpp b/src/xrpld/app/misc/detail/Transaction.cpp index f0cabf0fa6..758f560835 100644 --- a/src/xrpld/app/misc/detail/Transaction.cpp +++ b/src/xrpld/app/misc/detail/Transaction.cpp @@ -1,14 +1,34 @@ +#include + #include #include -#include #include +#include +#include +#include #include -#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include -#include + +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/misc/detail/TxQ.cpp b/src/xrpld/app/misc/detail/TxQ.cpp index 3494a4b7bd..eb3b7a54be 100644 --- a/src/xrpld/app/misc/detail/TxQ.cpp +++ b/src/xrpld/app/misc/detail/TxQ.cpp @@ -1,16 +1,53 @@ -#include -#include #include +#include +#include + +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include #include +#include + +#include #include +#include +#include +#include #include +#include +#include #include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -76,7 +113,7 @@ TxQ::FeeMetrics::update( std::for_each(txBegin, txEnd, [&](auto const& tx) { feeLevels.push_back(getFeeLevelPaid(view, *tx.first)); }); - std::sort(feeLevels.begin(), feeLevels.end()); + std::ranges::sort(feeLevels); XRPL_ASSERT(size == feeLevels.size(), "xrpl::TxQ::FeeMetrics::update : fee levels size"); JLOG((timeLeap ? j_.warn() : j_.debug())) @@ -102,7 +139,7 @@ TxQ::FeeMetrics::update( { recentTxnCounts_.push_back(mulDiv(size, 100 + setup.normalConsensusIncreasePercent, 100) .value_or(xrpl::muldiv_max)); - auto const iter = std::max_element(recentTxnCounts_.begin(), recentTxnCounts_.end()); + auto const iter = std::ranges::max_element(recentTxnCounts_); BOOST_ASSERT(iter != recentTxnCounts_.end()); auto const next = [&] { // Grow quickly: If the max_element is >= the @@ -1725,10 +1762,10 @@ TxQ::getTxRequiredFeeAndSeq(OpenView const& view, std::shared_ptr co std::uint32_t const accountSeq = sle ? (*sle)[sfSequence] : 0; std::uint32_t const availableSeq = nextQueuableSeqImpl(sle, lock).value(); return { - mulDiv(fee, baseFee, baseLevel) - .value_or(XRPAmount(std::numeric_limits::max())), - accountSeq, - availableSeq}; + .fee = mulDiv(fee, baseFee, baseLevel) + .value_or(XRPAmount(std::numeric_limits::max())), + .accountSeq = accountSeq, + .availableSeq = availableSeq}; } std::vector diff --git a/src/xrpld/app/misc/detail/ValidatorKeys.cpp b/src/xrpld/app/misc/detail/ValidatorKeys.cpp index 59ddc6d702..bd9c723acb 100644 --- a/src/xrpld/app/misc/detail/ValidatorKeys.cpp +++ b/src/xrpld/app/misc/detail/ValidatorKeys.cpp @@ -1,11 +1,19 @@ #include + #include #include #include #include +#include +#include +#include +#include +#include #include +#include + namespace xrpl { ValidatorKeys::ValidatorKeys(Config const& config, beast::Journal j) { diff --git a/src/xrpld/app/misc/detail/ValidatorList.cpp b/src/xrpld/app/misc/detail/ValidatorList.cpp index 1951c657b0..c8b249cd74 100644 --- a/src/xrpld/app/misc/detail/ValidatorList.cpp +++ b/src/xrpld/app/misc/detail/ValidatorList.cpp @@ -1,24 +1,60 @@ #include -#include +#include +#include +#include + +#include #include +#include #include #include #include +#include +#include +#include +#include +#include #include +#include #include +#include #include #include +#include #include #include -#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include namespace xrpl { @@ -786,10 +822,14 @@ ValidatorList::buildBlobInfos( { auto const& current = lists.current; auto const& remaining = lists.remaining; - blobInfos[current.sequence] = {current.rawBlob, current.rawSignature, current.rawManifest}; + blobInfos[current.sequence] = { + .blob = current.rawBlob, + .signature = current.rawSignature, + .manifest = current.rawManifest}; for (auto const& [sequence, vl] : remaining) { - blobInfos[sequence] = {vl.rawBlob, vl.rawSignature, vl.rawManifest}; + blobInfos[sequence] = { + .blob = vl.rawBlob, .signature = vl.rawSignature, .manifest = vl.rawManifest}; } } @@ -1199,7 +1239,7 @@ ValidatorList::applyList( } else { - publisherList.push_back(PublicKey(Slice{ret->data(), ret->size()})); + publisherList.emplace_back(Slice{ret->data(), ret->size()}); } if (val.isMember(jss::manifest) && val[jss::manifest].isString()) @@ -1208,7 +1248,7 @@ ValidatorList::applyList( } // Standardize the list order by sorting - std::sort(publisherList.begin(), publisherList.end()); + std::sort(publisherList.begin(), publisherList.end()); // NOLINT(modernize-use-ranges) } // If this publisher has ever sent a more updated version than the one // in this file, keep it. This scenario is unlikely, but legal. @@ -2058,9 +2098,8 @@ ValidatorList::negativeUNLFilter(std::vector>&& va if (!negativeUNL_.empty()) { ret.erase( - std::remove_if( - ret.begin(), - ret.end(), + std::ranges::remove_if( + ret, [&](auto const& v) -> bool { if (auto const masterKey = getTrustedKey(read_lock, v->getSignerPublic()); masterKey) @@ -2069,7 +2108,8 @@ ValidatorList::negativeUNLFilter(std::vector>&& va } return false; - }), + }) + .begin(), ret.end()); } diff --git a/src/xrpld/app/misc/detail/ValidatorSite.cpp b/src/xrpld/app/misc/detail/ValidatorSite.cpp index a4623e7acc..ca96e0fa37 100644 --- a/src/xrpld/app/misc/detail/ValidatorSite.cpp +++ b/src/xrpld/app/misc/detail/ValidatorSite.cpp @@ -1,14 +1,46 @@ -#include #include + +#include +#include +#include #include #include #include +#include +#include +#include +#include +#include +#include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include + #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -190,9 +222,8 @@ ValidatorSite::setTimer( std::lock_guard const& site_lock, std::lock_guard const& state_lock) { - auto next = std::min_element(sites_.begin(), sites_.end(), [](Site const& a, Site const& b) { - return a.nextRefresh < b.nextRefresh; - }); + auto next = std::ranges::min_element( + sites_, [](Site const& a, Site const& b) { return a.nextRefresh < b.nextRefresh; }); if (next != sites_.end()) { @@ -405,7 +436,10 @@ ValidatorSite::parseJsonResponse( app_.getOPs()); sites_[siteIdx].lastRefreshStatus.emplace( - Site::Status{clock_type::now(), applyResult.bestDisposition(), ""}); + Site::Status{ + .refreshed = clock_type::now(), + .disposition = applyResult.bestDisposition(), + .message = ""}); for (auto const& [disp, count] : applyResult.dispositions) { @@ -517,7 +551,10 @@ ValidatorSite::onSiteFetch( << endpoint; auto onError = [&](std::string const& errMsg, bool retry) { sites_[siteIdx].lastRefreshStatus.emplace( - Site::Status{clock_type::now(), ListDisposition::invalid, errMsg}); + Site::Status{ + .refreshed = clock_type::now(), + .disposition = ListDisposition::invalid, + .message = errMsg}); if (retry) sites_[siteIdx].nextRefresh = clock_type::now() + error_retry_interval; @@ -610,7 +647,10 @@ ValidatorSite::onTextFetch( { JLOG(j_.error()) << "Exception in " << __func__ << ": " << ex.what(); sites_[siteIdx].lastRefreshStatus.emplace( - Site::Status{clock_type::now(), ListDisposition::invalid, ex.what()}); + Site::Status{ + .refreshed = clock_type::now(), + .disposition = ListDisposition::invalid, + .message = ex.what()}); } sites_[siteIdx].activeResource.reset(); } diff --git a/src/xrpld/app/misc/detail/Work.h b/src/xrpld/app/misc/detail/Work.h index 5261cf3bd7..27f4e7f6eb 100644 --- a/src/xrpld/app/misc/detail/Work.h +++ b/src/xrpld/app/misc/detail/Work.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { - -namespace detail { +namespace xrpl::detail { using response_type = boost::beast::http::response; @@ -21,6 +19,4 @@ public: cancel() = 0; }; -} // namespace detail - -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/misc/detail/WorkBase.h b/src/xrpld/app/misc/detail/WorkBase.h index 35f04efe00..56b227613f 100644 --- a/src/xrpld/app/misc/detail/WorkBase.h +++ b/src/xrpld/app/misc/detail/WorkBase.h @@ -12,9 +12,9 @@ #include #include -namespace xrpl { +#include -namespace detail { +namespace xrpl::detail { template class WorkBase : public Work @@ -47,16 +47,18 @@ protected: endpoint_type lastEndpoint_; bool lastStatus_; -public: +private: WorkBase( - std::string const& host, - std::string const& path, - std::string const& port, + std::string host, + std::string path, + std::string port, boost::asio::io_context& ios, - endpoint_type const& lastEndpoint, + endpoint_type lastEndpoint, bool lastStatus, callback_type cb); - ~WorkBase(); + +public: + ~WorkBase() override; Impl& impl() @@ -91,28 +93,30 @@ public: private: void close(); + + friend Impl; }; //------------------------------------------------------------------------------ template WorkBase::WorkBase( - std::string const& host, - std::string const& path, - std::string const& port, + std::string host, + std::string path, + std::string port, boost::asio::io_context& ios, - endpoint_type const& lastEndpoint, + endpoint_type lastEndpoint, bool lastStatus, callback_type cb) - : host_(host) - , path_(path) - , port_(port) + : host_(std::move(host)) + , path_(std::move(path)) + , port_(std::move(port)) , cb_(std::move(cb)) , ios_(ios) , strand_(boost::asio::make_strand(ios)) , resolver_(ios) , socket_(ios) - , lastEndpoint_{lastEndpoint} + , lastEndpoint_{std::move(lastEndpoint)} , lastStatus_(lastStatus) { } @@ -130,10 +134,12 @@ void WorkBase::run() { if (!strand_.running_in_this_thread()) + { return boost::asio::post( ios_, boost::asio::bind_executor( strand_, std::bind(&WorkBase::run, impl().shared_from_this()))); + } resolver_.async_resolve( host_, @@ -268,6 +274,4 @@ WorkBase::close() } } -} // namespace detail - -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/misc/detail/WorkFile.h b/src/xrpld/app/misc/detail/WorkFile.h index 5113ec5f3a..067dc4c38b 100644 --- a/src/xrpld/app/misc/detail/WorkFile.h +++ b/src/xrpld/app/misc/detail/WorkFile.h @@ -10,9 +10,9 @@ #include #include -namespace xrpl { +#include -namespace detail { +namespace xrpl::detail { // Work with files class WorkFile : public Work, public std::enable_shared_from_this @@ -26,8 +26,8 @@ public: using callback_type = std::function; public: - WorkFile(std::string const& path, boost::asio::io_context& ios, callback_type cb); - ~WorkFile(); + WorkFile(std::string path, boost::asio::io_context& ios, callback_type cb); + ~WorkFile() override; void run() override; @@ -44,8 +44,8 @@ private: //------------------------------------------------------------------------------ -inline WorkFile::WorkFile(std::string const& path, boost::asio::io_context& ios, callback_type cb) - : path_(path), cb_(std::move(cb)), ios_(ios), strand_(boost::asio::make_strand(ios)) +inline WorkFile::WorkFile(std::string path, boost::asio::io_context& ios, callback_type cb) + : path_(std::move(path)), cb_(std::move(cb)), ios_(ios), strand_(boost::asio::make_strand(ios)) { } @@ -59,9 +59,12 @@ inline void WorkFile::run() { if (!strand_.running_in_this_thread()) - return boost::asio::post( + { + boost::asio::post( ios_, boost::asio::bind_executor(strand_, std::bind(&WorkFile::run, shared_from_this()))); + return; + } error_code ec; auto const fileContents = getFileContents(ec, path_, megabytes(1)); @@ -77,6 +80,4 @@ WorkFile::cancel() // Nothing to do. Either it finished in run, or it didn't start. } -} // namespace detail - -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/misc/detail/WorkPlain.h b/src/xrpld/app/misc/detail/WorkPlain.h index 361a7b4513..d3c0309e77 100644 --- a/src/xrpld/app/misc/detail/WorkPlain.h +++ b/src/xrpld/app/misc/detail/WorkPlain.h @@ -2,9 +2,7 @@ #include -namespace xrpl { - -namespace detail { +namespace xrpl::detail { // Work over TCP/IP class WorkPlain : public WorkBase, public std::enable_shared_from_this @@ -20,7 +18,7 @@ public: endpoint_type const& lastEndpoint, bool lastStatus, callback_type cb); - ~WorkPlain() = default; + ~WorkPlain() override = default; private: void @@ -51,11 +49,12 @@ inline void WorkPlain::onConnect(error_code const& ec) { if (ec) - return fail(ec); + { + fail(ec); + return; + } onStart(); } -} // namespace detail - -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/misc/detail/WorkSSL.cpp b/src/xrpld/app/misc/detail/WorkSSL.cpp index 3ae0db1a96..0a8d53b1a2 100644 --- a/src/xrpld/app/misc/detail/WorkSSL.cpp +++ b/src/xrpld/app/misc/detail/WorkSSL.cpp @@ -1,7 +1,22 @@ #include -namespace xrpl { -namespace detail { +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace xrpl::detail { WorkSSL::WorkSSL( std::string const& host, @@ -55,6 +70,4 @@ WorkSSL::onHandshake(error_code const& ec) onStart(); } -} // namespace detail - -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/misc/detail/WorkSSL.h b/src/xrpld/app/misc/detail/WorkSSL.h index b12c774f6e..74676bb7c1 100644 --- a/src/xrpld/app/misc/detail/WorkSSL.h +++ b/src/xrpld/app/misc/detail/WorkSSL.h @@ -11,9 +11,7 @@ #include -namespace xrpl { - -namespace detail { +namespace xrpl::detail { // Work over SSL class WorkSSL : public WorkBase, public std::enable_shared_from_this @@ -37,7 +35,7 @@ public: endpoint_type const& lastEndpoint, bool lastStatus, callback_type cb); - ~WorkSSL() = default; + ~WorkSSL() override = default; private: stream_type& @@ -53,6 +51,4 @@ private: onHandshake(error_code const& ec); }; -} // namespace detail - -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/misc/detail/setup_HashRouter.cpp b/src/xrpld/app/misc/detail/setup_HashRouter.cpp index 0cc61f0730..57e2b9b282 100644 --- a/src/xrpld/app/misc/detail/setup_HashRouter.cpp +++ b/src/xrpld/app/misc/detail/setup_HashRouter.cpp @@ -1,7 +1,14 @@ #include + #include #include +#include +#include + +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/app/rdb/backend/detail/Node.cpp b/src/xrpld/app/rdb/backend/detail/Node.cpp index bc19a25b40..f1b5f4edc3 100644 --- a/src/xrpld/app/rdb/backend/detail/Node.cpp +++ b/src/xrpld/app/rdb/backend/detail/Node.cpp @@ -1,25 +1,71 @@ +#include + #include #include #include #include #include -#include +#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include // IWYU pragma: keep #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include -#include +#include +#include +#include +#include -#include +#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace detail { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::detail { /** * @brief to_string Returns the name of a table according to its TableType. @@ -91,15 +137,16 @@ makeLedgerDBs( { if (pk == 1) { - return {std::move(lgr), std::move(tx), false}; + return { + .ledgerDb = std::move(lgr), .transactionDb = std::move(tx), .valid = false}; } } } - return {std::move(lgr), std::move(tx), true}; + return {.ledgerDb = std::move(lgr), .transactionDb = std::move(tx), .valid = true}; } - return {std::move(lgr), {}, true}; + return {.ledgerDb = std::move(lgr), .transactionDb = {}, .valid = true}; } std::optional @@ -1092,7 +1139,8 @@ accountTxPage( else if (numberOfResults == 0) { newmarker = { - rangeCheckedCast(ledgerSeq.value_or(0)), txnSeq.value_or(0)}; + .ledgerSeq = rangeCheckedCast(ledgerSeq.value_or(0)), + .txnSeq = txnSeq.value_or(0)}; break; } @@ -1299,5 +1347,4 @@ dbHasSpace(soci::session& session, Config const& config, beast::Journal j) return true; } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/rdb/backend/detail/Node.h b/src/xrpld/app/rdb/backend/detail/Node.h index 5fbabeca47..7ea2992447 100644 --- a/src/xrpld/app/rdb/backend/detail/Node.h +++ b/src/xrpld/app/rdb/backend/detail/Node.h @@ -5,8 +5,7 @@ #include #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { /* Need to change TableTypeCount if TableType is modified. */ enum class TableType { Ledgers, Transactions, AccountTransactions }; @@ -402,5 +401,4 @@ getTransaction( bool dbHasSpace(soci::session& session, Config const& config, beast::Journal j); -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail diff --git a/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp b/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp index 90d3b5a8e4..59f77142f8 100644 --- a/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp +++ b/src/xrpld/app/rdb/backend/detail/SQLiteDatabase.cpp @@ -1,13 +1,37 @@ -#include -#include -#include #include -#include -#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { bool @@ -170,7 +194,7 @@ SQLiteDatabase::getLedgerCountMinMax() return detail::getRowsMinMax(*db, detail::TableType::Ledgers); } - return {0, 0, 0}; + return {.numberOfRows = 0, .minLedgerSequence = 0, .maxLedgerSequence = 0}; } bool @@ -612,7 +636,10 @@ SQLiteDatabase::SQLiteDatabase(ServiceRegistry& registry, Config const& config, , j_(registry.getJournal("SQLiteDatabase")) { DatabaseCon::Setup const setup = setup_DatabaseCon(config, j_); - if (!makeLedgerDBs(config, setup, DatabaseCon::CheckpointerSetup{&jobQueue, registry_})) + if (!makeLedgerDBs( + config, + setup, + DatabaseCon::CheckpointerSetup{.jobQueue = &jobQueue, .registry = registry_})) { std::string_view constexpr error = "Failed to create ledger databases"; diff --git a/src/xrpld/app/rdb/detail/PeerFinder.cpp b/src/xrpld/app/rdb/detail/PeerFinder.cpp index a568461fb7..2f8d0355af 100644 --- a/src/xrpld/app/rdb/detail/PeerFinder.cpp +++ b/src/xrpld/app/rdb/detail/PeerFinder.cpp @@ -1,5 +1,27 @@ #include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + namespace xrpl { void diff --git a/src/xrpld/app/tx/detail/Taker.h b/src/xrpld/app/tx/detail/Taker.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/xrpld/consensus/Consensus.cpp b/src/xrpld/consensus/Consensus.cpp index 9ad7e677ad..309813cf7e 100644 --- a/src/xrpld/consensus/Consensus.cpp +++ b/src/xrpld/consensus/Consensus.cpp @@ -1,6 +1,16 @@ #include +#include +#include + #include +#include + +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/consensus/Consensus.h b/src/xrpld/consensus/Consensus.h index 142b1a01f0..4337e8da01 100644 --- a/src/xrpld/consensus/Consensus.h +++ b/src/xrpld/consensus/Consensus.h @@ -779,9 +779,13 @@ Consensus::peerProposalInternal( } if (peerPosIt != currPeerPositions_.end()) + { peerPosIt->second = newPeerPos; + } else + { currPeerPositions_.emplace(peerID, newPeerPos); + } } if (newPeerProp.isInitial()) @@ -803,7 +807,9 @@ Consensus::peerProposalInternal( // spawn a request for it and return nullopt/nullptr. It will call // gotTxSet once it arrives if (auto set = adaptor_.acquireTxSet(newPeerProp.position())) + { gotTxSet(now_, *set); + } else JLOG(j_.debug()) << "Don't have tx set for peer"; } @@ -843,9 +849,13 @@ Consensus::timerEntry( } if (phase_ == ConsensusPhase::open) + { phaseOpen(clog); + } else if (phase_ == ConsensusPhase::establish) + { phaseEstablish(clog); + } CLOG(clog) << "timerEntry finishing in phase " << to_string(phase_) << ". "; } @@ -932,7 +942,9 @@ Consensus::getJson(bool full) const ret["close_granularity"] = static_cast(closeResolution_.count()); } else + { ret["synched"] = false; + } ret["phase"] = to_string(phase_); @@ -1137,9 +1149,13 @@ Consensus::phaseOpen(std::unique_ptr const& clog) : prevCloseTime_; // use the time we saw internally if (now_ >= lastCloseTime) + { sinceClose = duration_cast(now_ - lastCloseTime); + } else + { sinceClose = -duration_cast(lastCloseTime - now_); + } CLOG(clog) << "calculating how long since last ledger's close time " "based on mode : " << to_string(mode) << ", previous closeAgree: " << closeAgree @@ -1201,7 +1217,7 @@ Consensus::shouldPause(std::unique_ptr const& clog) << "offline: " << offline << ", " << "quorum: " << quorum << ")"; - if (!ahead || !laggards || !totalValidators || !adaptor_.validator() || + if ((ahead == 0u) || (laggards == 0u) || (totalValidators == 0u) || !adaptor_.validator() || !adaptor_.haveValidated() || result_->roundTime.read() > parms.ledgerMAX_CONSENSUS) { j_.debug() << "not pausing (early)" << vars.str(); diff --git a/src/xrpld/consensus/ConsensusParms.h b/src/xrpld/consensus/ConsensusParms.h index 97fbb2c4a0..c8b79c4de9 100644 --- a/src/xrpld/consensus/ConsensusParms.h +++ b/src/xrpld/consensus/ConsensusParms.h @@ -121,14 +121,14 @@ struct ConsensusParms std::map const avalancheCutoffs{ // {state, {time, percent, nextState}}, // Initial state: 50% of nodes must vote yes - {init, {0, 50, mid}}, + {init, {.consensusTime = 0, .consensusPct = 50, .next = mid}}, // mid-consensus starts after 50% of the previous round time, and // requires 65% yes - {mid, {50, 65, late}}, + {mid, {.consensusTime = 50, .consensusPct = 65, .next = late}}, // late consensus starts after 85% time, and requires 70% yes - {late, {85, 70, stuck}}, + {late, {.consensusTime = 85, .consensusPct = 70, .next = stuck}}, // we're stuck after 2x time, requires 95% yes votes - {stuck, {200, 95, stuck}}, + {stuck, {.consensusTime = 200, .consensusPct = 95, .next = stuck}}, }; //! Percentage of nodes required to reach agreement on ledger close time diff --git a/src/xrpld/consensus/DisputedTx.h b/src/xrpld/consensus/DisputedTx.h index e8304f4242..2172fd5d47 100644 --- a/src/xrpld/consensus/DisputedTx.h +++ b/src/xrpld/consensus/DisputedTx.h @@ -8,6 +8,8 @@ #include +#include + namespace xrpl { /** A transaction discovered to be in dispute during consensus. @@ -38,8 +40,8 @@ public: @param numPeers Anticipated number of peer votes @param j Journal for debugging */ - DisputedTx(Tx_t const& tx, bool ourVote, std::size_t numPeers, beast::Journal j) - : ourVote_(ourVote), tx_(tx), j_(j) + DisputedTx(Tx_t tx, bool ourVote, std::size_t numPeers, beast::Journal j) + : ourVote_(ourVote), tx_(std::move(tx)), j_(j) { votes_.reserve(numPeers); } @@ -98,9 +100,11 @@ public: // Compute the percentage of nodes voting 'yes' (possibly including us) int const support = (yays_ + (proposing && ourVote_ ? 1 : 0)) * 100; int const total = nays_ + yays_ + (proposing ? 1 : 0); - if (!total) + if (total == 0) + { // There are no votes, so we know nothing return false; + } int const weight = support / total; // Returns true if the tx has more than minCONSENSUS_PCT (80) percent // agreement. Either voting for _or_ voting against the tx. @@ -210,7 +214,7 @@ DisputedTx::setVote(NodeID_t const& peer, bool votesYes) return true; } // changes vote to yes - else if (votesYes && !it->second) + if (votesYes && !it->second) { JLOG(j_.debug()) << "Peer " << peer << " now votes YES on " << tx_.id(); --nays_; @@ -219,7 +223,7 @@ DisputedTx::setVote(NodeID_t const& peer, bool votesYes) return true; } // changes vote to no - else if (!votesYes && it->second) + if (!votesYes && it->second) { JLOG(j_.debug()) << "Peer " << peer << " now votes NO on " << tx_.id(); ++nays_; @@ -240,9 +244,13 @@ DisputedTx::unVote(NodeID_t const& peer) if (it != votes_.end()) { if (it->second) + { --yays_; + } else + { --nays_; + } votes_.erase(it); } diff --git a/src/xrpld/consensus/LedgerTrie.h b/src/xrpld/consensus/LedgerTrie.h index aecd105c07..38ad0afbf9 100644 --- a/src/xrpld/consensus/LedgerTrie.h +++ b/src/xrpld/consensus/LedgerTrie.h @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace xrpl { @@ -133,7 +134,7 @@ public: } private: - Span(Seq start, Seq end, Ledger const& l) : start_{start}, end_{end}, ledger_{l} + Span(Seq start, Seq end, Ledger l) : start_{start}, end_{end}, ledger_{std::move(l)} { // Spans cannot be empty XRPL_ASSERT(start < end, "xrpl::Span::Span : non-empty span input"); @@ -383,7 +384,7 @@ class LedgerTrie Node* findByLedgerID(Ledger const& ledger, Node* parent = nullptr) const { - if (!parent) + if (parent == nullptr) parent = root.get(); if (ledger.id() == parent->span.tip().id) return parent; @@ -513,7 +514,7 @@ public: { Node* loc = findByLedgerID(ledger); // Must be exact match with tip support - if (!loc || loc->tipSupport == 0) + if ((loc == nullptr) || loc->tipSupport == 0) return false; // found our node, remove it @@ -553,7 +554,9 @@ public: parent->erase(loc); } else + { break; + } loc = parent; } return true; @@ -582,7 +585,7 @@ public: branchSupport(Ledger const& ledger) const { Node const* loc = findByLedgerID(ledger); - if (!loc) + if (loc == nullptr) { Seq diffSeq; std::tie(loc, diffSeq) = find(ledger); @@ -692,8 +695,10 @@ public: uncommitted += uncommittedIt->second; uncommittedIt++; } - else // otherwise we jump to the end of the span + else + { // otherwise we jump to the end of the span nextSeq = curr->span.end(); + } } // We did not consume the entire span, so we have found the // preferred ledger @@ -736,9 +741,13 @@ public: // If the best child has margin exceeding the uncommitted support, // continue from that child, otherwise we are done if (best && ((margin > uncommitted) || (uncommitted == 0))) + { curr = best; - else // current is the best + } + else + { // current is the best done = true; + } } return curr->span.tip(); } @@ -785,7 +794,7 @@ public: { Node const* curr = nodes.top(); nodes.pop(); - if (!curr) + if (curr == nullptr) continue; // Node with 0 tip support must have multiple children diff --git a/src/xrpld/consensus/Validations.h b/src/xrpld/consensus/Validations.h index 4d0b64a350..00f10f89cf 100644 --- a/src/xrpld/consensus/Validations.h +++ b/src/xrpld/consensus/Validations.h @@ -369,7 +369,9 @@ private: it = acquiring_.erase(it); } else + { ++it; + } } } @@ -431,9 +433,13 @@ private: else { if (std::optional ledger = adaptor_.acquire(val.ledgerID())) + { updateTrie(lock, nodeID, *ledger); + } else + { acquiring_[valPair].insert(nodeID); + } } } @@ -654,7 +660,9 @@ public: updateTrie(lock, nodeID, val, old); } else + { return ValStatus::stale; + } } else if (val.trusted()) { @@ -917,9 +925,11 @@ public: // Use trie if ledger is the right one if (ledger.id() == ledgerID) + { return withTrie(lock, [&ledger](LedgerTrie& trie) { return trie.branchSupport(ledger) - trie.tipSupport(ledger); }); + } // Count parent ledgers as fallback return std::count_if(lastLedger_.begin(), lastLedger_.end(), [&ledgerID](auto const& it) { @@ -1028,9 +1038,13 @@ public: { std::optional loadFee = v.loadFee(); if (loadFee) + { res.push_back(*loadFee); + } else + { res.push_back(baseFee); + } } }); return res; diff --git a/src/xrpld/core/TimeKeeper.h b/src/xrpld/core/TimeKeeper.h index 0d809d076d..8f2bbbcd53 100644 --- a/src/xrpld/core/TimeKeeper.h +++ b/src/xrpld/core/TimeKeeper.h @@ -11,7 +11,7 @@ namespace xrpl { class TimeKeeper : public beast::abstract_clock { private: - std::atomic closeOffset_{}; + std::atomic closeOffset_; // Adjust system_clock::time_point for NetClock epoch static constexpr time_point @@ -22,7 +22,7 @@ private: } public: - virtual ~TimeKeeper() = default; + ~TimeKeeper() override = default; /** Returns the current time, using the server's clock. diff --git a/src/xrpld/core/detail/Config.cpp b/src/xrpld/core/detail/Config.cpp index 204b29ad30..b7063287bb 100644 --- a/src/xrpld/core/detail/Config.cpp +++ b/src/xrpld/core/detail/Config.cpp @@ -1,33 +1,60 @@ #include + #include +#include #include #include #include +#include #include #include -#include +#include +#include #include #include #include +#include +#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include // IWYU pragma: keep +#include +#include +#include #include +#include +#include +#include #include #include #include +#include +#include +#include #include +#include +#include +#include #include +#include +#include +#include #if BOOST_OS_WINDOWS #include -namespace xrpl { -namespace detail { +namespace xrpl::detail { [[nodiscard]] std::uint64_t getMemorySize() @@ -38,15 +65,14 @@ getMemorySize() return 0; } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail + #endif #if BOOST_OS_LINUX -#include +#include // IWYU pragma: keep -namespace xrpl { -namespace detail { +namespace xrpl::detail { [[nodiscard]] std::uint64_t getMemorySize() @@ -57,17 +83,14 @@ getMemorySize() return 0; } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail #endif #if BOOST_OS_MACOS #include -#include -namespace xrpl { -namespace detail { +namespace xrpl::detail { [[nodiscard]] std::uint64_t getMemorySize() @@ -82,8 +105,8 @@ getMemorySize() return 0; } -} // namespace detail -} // namespace xrpl +} // namespace xrpl::detail + #endif namespace xrpl { @@ -262,10 +285,9 @@ Config::setupControl(bool bQuiet, bool bSilent, bool bStandalone) // First, check against 'minimum' RAM requirements per node size: auto const& threshold = sizedItems[std::underlying_type_t(SizedItem::ramSizeGB)]; - auto ns = std::find_if( - threshold.second.begin(), threshold.second.end(), [this](std::size_t limit) { - return (limit == 0) || (ramSize_ < limit); - }); + auto ns = std::ranges::find_if(threshold.second, [this](std::size_t limit) { + return (limit == 0) || (ramSize_ < limit); + }); XRPL_ASSERT(ns != threshold.second.end(), "xrpl::Config::setupControl : valid node size"); diff --git a/src/xrpld/core/detail/NetworkIDServiceImpl.cpp b/src/xrpld/core/detail/NetworkIDServiceImpl.cpp index 839eb0c464..38e72a4db6 100644 --- a/src/xrpld/core/detail/NetworkIDServiceImpl.cpp +++ b/src/xrpld/core/detail/NetworkIDServiceImpl.cpp @@ -1,6 +1,7 @@ -#include #include +#include + namespace xrpl { NetworkIDServiceImpl::NetworkIDServiceImpl(std::uint32_t networkID) : networkID_(networkID) diff --git a/src/xrpld/overlay/ClusterNode.h b/src/xrpld/overlay/ClusterNode.h index c6ab208383..3e319ef8be 100644 --- a/src/xrpld/overlay/ClusterNode.h +++ b/src/xrpld/overlay/ClusterNode.h @@ -5,6 +5,7 @@ #include #include +#include namespace xrpl { @@ -15,10 +16,10 @@ public: ClusterNode( PublicKey const& identity, - std::string const& name, + std::string name, std::uint32_t fee = 0, NetClock::time_point rtime = NetClock::time_point{}) - : identity_(identity), name_(name), mLoadFee(fee), mReportTime(rtime) + : identity_(identity), name_(std::move(name)), mLoadFee(fee), mReportTime(rtime) { } @@ -50,7 +51,7 @@ private: PublicKey const identity_; std::string name_; std::uint32_t mLoadFee = 0; - NetClock::time_point mReportTime = {}; + NetClock::time_point mReportTime; }; } // namespace xrpl diff --git a/src/xrpld/overlay/Compression.h b/src/xrpld/overlay/Compression.h index e9f530035a..cb60b4bb48 100644 --- a/src/xrpld/overlay/Compression.h +++ b/src/xrpld/overlay/Compression.h @@ -3,9 +3,7 @@ #include #include -namespace xrpl { - -namespace compression { +namespace xrpl::compression { std::size_t constexpr headerBytes = 6; std::size_t constexpr headerBytesCompressed = 10; @@ -36,20 +34,20 @@ decompress( try { if (algorithm == Algorithm::LZ4) + { return xrpl::compression_algorithms::lz4Decompress( in, inSize, decompressed, decompressedSize); - else - { - // LCOV_EXCL_START - JLOG(debugLog().warn()) - << "decompress: invalid compression algorithm " << static_cast(algorithm); - UNREACHABLE( - "xrpl::compression::decompress : invalid compression " - "algorithm"); - // LCOV_EXCL_STOP } + + // LCOV_EXCL_START + JLOG(debugLog().warn()) << "decompress: invalid compression algorithm " + << static_cast(algorithm); + UNREACHABLE( + "xrpl::compression::decompress : invalid compression " + "algorithm"); + // LCOV_EXCL_STOP } - catch (...) + catch (...) // NOLINT(bugprone-empty-catch) { } return 0; @@ -75,24 +73,22 @@ compress( try { if (algorithm == Algorithm::LZ4) + { return xrpl::compression_algorithms::lz4Compress( in, inSize, std::forward(bf)); - else - { - // LCOV_EXCL_START - JLOG(debugLog().warn()) - << "compress: invalid compression algorithm" << static_cast(algorithm); - UNREACHABLE( - "xrpl::compression::compress : invalid compression " - "algorithm"); - // LCOV_EXCL_STOP } + + // LCOV_EXCL_START + JLOG(debugLog().warn()) << "compress: invalid compression algorithm" + << static_cast(algorithm); + UNREACHABLE( + "xrpl::compression::compress : invalid compression " + "algorithm"); + // LCOV_EXCL_STOP } - catch (...) + catch (...) // NOLINT(bugprone-empty-catch) { } return 0; } -} // namespace compression - -} // namespace xrpl +} // namespace xrpl::compression diff --git a/src/xrpld/overlay/Overlay.h b/src/xrpld/overlay/Overlay.h index 7d2508a584..2c2371a1d1 100644 --- a/src/xrpld/overlay/Overlay.h +++ b/src/xrpld/overlay/Overlay.h @@ -14,13 +14,9 @@ #include #include -namespace boost { -namespace asio { -namespace ssl { +namespace boost::asio::ssl { class context; -} // namespace ssl -} // namespace asio -} // namespace boost +} // namespace boost::asio::ssl namespace xrpl { @@ -55,7 +51,7 @@ public: using PeerSequence = std::vector>; - virtual ~Overlay() = default; + ~Overlay() override = default; virtual void start() diff --git a/src/xrpld/overlay/ReduceRelayCommon.h b/src/xrpld/overlay/ReduceRelayCommon.h index 9ddde335e6..84e9cf9994 100644 --- a/src/xrpld/overlay/ReduceRelayCommon.h +++ b/src/xrpld/overlay/ReduceRelayCommon.h @@ -2,13 +2,11 @@ #include -namespace xrpl { - // Blog post explaining the rationale behind reduction of flooding gossip // protocol: // https://xrpl.org/blog/2021/message-routing-optimizations-pt-1-proposal-validation-relaying.html -namespace reduce_relay { +namespace xrpl::reduce_relay { // Peer's squelch is limited in time to // rand{MIN_UNSQUELCH_EXPIRE, max_squelch}, @@ -38,6 +36,4 @@ static constexpr auto WAIT_ON_BOOTUP = std::chrono::minutes{10}; // size limit of 64MB. static constexpr std::size_t MAX_TX_QUEUE_SIZE = 10000; -} // namespace reduce_relay - -} // namespace xrpl +} // namespace xrpl::reduce_relay diff --git a/src/xrpld/overlay/Slot.h b/src/xrpld/overlay/Slot.h index 22e908ee99..d7f3e9b4d3 100644 --- a/src/xrpld/overlay/Slot.h +++ b/src/xrpld/overlay/Slot.h @@ -19,9 +19,7 @@ #include #include -namespace xrpl { - -namespace reduce_relay { +namespace xrpl::reduce_relay { template class Slots; @@ -52,9 +50,7 @@ epoch(TP const& t) class SquelchHandler { public: - virtual ~SquelchHandler() - { - } + virtual ~SquelchHandler() = default; /** Squelch handler * @param validator Public key of the source validator * @param id Peer's id to squelch @@ -324,7 +320,7 @@ Slot::update( // idled peers. std::unordered_set selected; auto const consideredPoolSize = considered_.size(); - while (selected.size() != maxSelectedPeers_ && considered_.size() != 0) + while (selected.size() != maxSelectedPeers_ && !considered_.empty()) { auto i = considered_.size() == 1 ? 0 : rand_int(considered_.size() - 1); auto it = std::next(considered_.begin(), i); @@ -366,7 +362,9 @@ Slot::update( v.count = 0; if (selected.find(k) != selected.end()) + { v.state = PeerState::Selected; + } else if (v.state != PeerState::Squelched) { if (journal_.trace()) @@ -411,7 +409,7 @@ Slot::deletePeer(PublicKey const& validator, id_t id, bool erase) JLOG(journal_.trace()) << "deletePeer: " << Slice(validator) << " " << id << " selected " << (it->second.state == PeerState::Selected) << " considered " - << (considered_.find(id) != considered_.end()) << " erase " << erase; + << (considered_.contains(id)) << " erase " << erase; auto now = clock_type::now(); if (it->second.state == PeerState::Selected) { @@ -428,7 +426,7 @@ Slot::deletePeer(PublicKey const& validator, id_t id, bool erase) reachedThreshold_ = 0; state_ = SlotState::Counting; } - else if (considered_.find(id) != considered_.end()) + else if (considered_.contains(id)) { if (it->second.count > MAX_MESSAGE_THRESHOLD) --reachedThreshold_; @@ -490,8 +488,10 @@ Slot::getSelected() const { std::set r; for (auto const& [id, info] : peers_) + { if (info.state == PeerState::Selected) r.insert(id); + } return r; } @@ -504,6 +504,7 @@ Slot::getPeers() const unordered_map>(); for (auto const& [id, info] : peers_) + { r.emplace( std::make_pair( id, @@ -513,6 +514,7 @@ Slot::getPeers() const info.count, epoch(info.expire).count(), epoch(info.lastMessage).count())))); + } return r; } @@ -560,8 +562,10 @@ public: reduceRelayReady() { if (!reduceRelayReady_) + { reduceRelayReady_ = reduce_relay::epoch(clock_type::now()) > reduce_relay::WAIT_ON_BOOTUP; + } return reduceRelayReady_; } @@ -756,7 +760,9 @@ Slots::updateSlotAndSquelch( it->second.update(validator, id, type, callback); } else + { it->second.update(validator, id, type, callback); + } } template @@ -782,10 +788,10 @@ Slots::deleteIdlePeers() it = slots_.erase(it); } else + { ++it; + } } } -} // namespace reduce_relay - -} // namespace xrpl +} // namespace xrpl::reduce_relay diff --git a/src/xrpld/overlay/Squelch.h b/src/xrpld/overlay/Squelch.h index 1d92cfed3a..3f1d1b3192 100644 --- a/src/xrpld/overlay/Squelch.h +++ b/src/xrpld/overlay/Squelch.h @@ -2,16 +2,13 @@ #include +#include #include #include -#include #include -#include -namespace xrpl { - -namespace reduce_relay { +namespace xrpl::reduce_relay { /** Maintains squelching of relaying messages from validators */ template @@ -89,7 +86,7 @@ Squelch::expireSquelch(PublicKey const& validator) auto const& it = squelched_.find(validator); if (it == squelched_.end()) return true; - else if (it->second > now) + if (it->second > now) return false; // squelch expired @@ -98,6 +95,4 @@ Squelch::expireSquelch(PublicKey const& validator) return true; } -} // namespace reduce_relay - -} // namespace xrpl +} // namespace xrpl::reduce_relay diff --git a/src/xrpld/overlay/detail/Cluster.cpp b/src/xrpld/overlay/detail/Cluster.cpp index 72b7ef5147..c74a9aa5bd 100644 --- a/src/xrpld/overlay/detail/Cluster.cpp +++ b/src/xrpld/overlay/detail/Cluster.cpp @@ -1,13 +1,24 @@ -#include -#include #include + #include +#include #include #include +#include +#include +#include #include -#include +#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/overlay/detail/ConnectAttempt.cpp b/src/xrpld/overlay/detail/ConnectAttempt.cpp index 40466f19b9..a90400dd2d 100644 --- a/src/xrpld/overlay/detail/ConnectAttempt.cpp +++ b/src/xrpld/overlay/detail/ConnectAttempt.cpp @@ -1,18 +1,55 @@ -#include #include + +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include #include +#include +#include namespace xrpl { ConnectAttempt::ConnectAttempt( Application& app, boost::asio::io_context& io_context, - endpoint_type const& remote_endpoint, + endpoint_type remote_endpoint, Resource::Consumer usage, shared_context const& context, std::uint32_t id, @@ -24,7 +61,7 @@ ConnectAttempt::ConnectAttempt( , id_(id) , sink_(journal, OverlayImpl::makePrefix(id)) , journal_(sink_) - , remote_endpoint_(remote_endpoint) + , remote_endpoint_(std::move(remote_endpoint)) , usage_(usage) , strand_(boost::asio::make_strand(io_context)) , timer_(io_context) diff --git a/src/xrpld/overlay/detail/ConnectAttempt.h b/src/xrpld/overlay/detail/ConnectAttempt.h index 520ebe277e..0626efd9c7 100644 --- a/src/xrpld/overlay/detail/ConnectAttempt.h +++ b/src/xrpld/overlay/detail/ConnectAttempt.h @@ -137,7 +137,7 @@ public: ConnectAttempt( Application& app, boost::asio::io_context& io_context, - endpoint_type const& remote_endpoint, + endpoint_type remote_endpoint, Resource::Consumer usage, shared_context const& context, Peer::id_t id, @@ -145,7 +145,7 @@ public: beast::Journal journal, OverlayImpl& overlay); - virtual ~ConnectAttempt(); + ~ConnectAttempt() override; /** * @brief Stop the connection attempt diff --git a/src/xrpld/overlay/detail/Handshake.cpp b/src/xrpld/overlay/detail/Handshake.cpp index 9d86724b82..22e971dd6e 100644 --- a/src/xrpld/overlay/detail/Handshake.cpp +++ b/src/xrpld/overlay/detail/Handshake.cpp @@ -1,15 +1,46 @@ -#include -#include #include +#include +#include +#include + +#include +#include +#include #include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include #include +#include -#include +#include +#include +#include +#include +#include +#include -#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include // VFALCO Shouldn't we have to include the OpenSSL // headers or something for SSL_get_finished? diff --git a/src/xrpld/overlay/detail/Message.cpp b/src/xrpld/overlay/detail/Message.cpp index 1f0c6f608d..f8d3fbc8ff 100644 --- a/src/xrpld/overlay/detail/Message.cpp +++ b/src/xrpld/overlay/detail/Message.cpp @@ -1,7 +1,20 @@ #include + +#include #include +#include +#include + +#include + +#include + +#include #include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/overlay/detail/OverlayImpl.cpp b/src/xrpld/overlay/detail/OverlayImpl.cpp index 10ebae6b0f..30fa2587e7 100644 --- a/src/xrpld/overlay/detail/OverlayImpl.cpp +++ b/src/xrpld/overlay/detail/OverlayImpl.cpp @@ -1,30 +1,93 @@ +#include + #include #include #include #include +#include #include +#include #include #include -#include +#include +#include #include +#include #include #include +#include +#include +#include +#include #include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include #include #include #include +#include #include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -102,7 +165,7 @@ OverlayImpl::Timer::on_timer(error_code ec) OverlayImpl::OverlayImpl( Application& app, - Setup const& setup, + Setup setup, ServerHandler& serverHandler, Resource::Manager& resourceManager, Resolver& resolver, @@ -113,7 +176,7 @@ OverlayImpl::OverlayImpl( , io_context_(io_context) , work_(std::in_place, boost::asio::make_work_guard(io_context_)) , strand_(boost::asio::make_strand(io_context_)) - , setup_(setup) + , setup_(std::move(setup)) , journal_(app_.getJournal("Overlay")) , serverHandler_(serverHandler) , m_resourceManager(resourceManager) @@ -192,7 +255,7 @@ OverlayImpl::onHandoff( { auto const types = beast::rfc2616::split_commas(request["Connect-As"]); - if (std::find_if(types.begin(), types.end(), [](std::string const& s) { + if (std::ranges::find_if(types, [](std::string const& s) { return boost::iequals(s, "peer"); }) == types.end()) { @@ -461,16 +524,16 @@ OverlayImpl::start() if (bootstrapIps.empty()) { // Pool of servers operated by Ripple Labs Inc. - https://ripple.com - bootstrapIps.push_back("r.ripple.com 51235"); + bootstrapIps.emplace_back("r.ripple.com 51235"); // Pool of servers operated by ISRDC - https://isrdc.in - bootstrapIps.push_back("sahyadri.isrdc.in 51235"); + bootstrapIps.emplace_back("sahyadri.isrdc.in 51235"); // Pool of servers operated by @Xrpkuwait - https://xrpkuwait.com - bootstrapIps.push_back("hubs.xrpkuwait.com 51235"); + bootstrapIps.emplace_back("hubs.xrpkuwait.com 51235"); // Pool of servers operated by XRPL Commons - https://xrpl-commons.org - bootstrapIps.push_back("hub.xrpl-commons.org 51235"); + bootstrapIps.emplace_back("hub.xrpl-commons.org 51235"); } m_resolver.resolve( diff --git a/src/xrpld/overlay/detail/OverlayImpl.h b/src/xrpld/overlay/detail/OverlayImpl.h index 167d574188..0c4990a6f4 100644 --- a/src/xrpld/overlay/detail/OverlayImpl.h +++ b/src/xrpld/overlay/detail/OverlayImpl.h @@ -119,7 +119,7 @@ private: public: OverlayImpl( Application& app, - Setup const& setup, + Setup setup, ServerHandler& serverHandler, Resource::Manager& resourceManager, Resolver& resolver, diff --git a/src/xrpld/overlay/detail/PeerImp.cpp b/src/xrpld/overlay/detail/PeerImp.cpp index 13fe0c571c..c0f21e3a5d 100644 --- a/src/xrpld/overlay/detail/PeerImp.cpp +++ b/src/xrpld/overlay/detail/PeerImp.cpp @@ -1,3 +1,6 @@ +#include + +#include #include #include #include @@ -5,31 +8,96 @@ #include #include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include #include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + +#include + +#include #include #include +#include +#include +#include +#include +#include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include using namespace std::chrono_literals; @@ -77,7 +145,7 @@ PeerImp::PeerImp( , remote_address_(slot->remote_endpoint()) , overlay_(overlay) , inbound_(true) - , protocol_(protocol) + , protocol_(std::move(protocol)) , tracking_(Tracking::unknown) , trackingTime_(clock_type::now()) , publicKey_(publicKey) @@ -85,7 +153,7 @@ PeerImp::PeerImp( , creationTime_(clock_type::now()) , squelch_(app_.getJournal("Squelch")) , usage_(consumer) - , fee_{Resource::feeTrivialPeer, ""} + , fee_{.fee = Resource::feeTrivialPeer, .context = ""} , slot_(slot) , request_(std::move(request)) , headers_(request_) @@ -297,9 +365,8 @@ PeerImp::sendTxQueue() if (!txQueue_.empty()) { protocol::TMHaveTransactions ht; - std::for_each(txQueue_.begin(), txQueue_.end(), [&](auto const& hash) { - ht.add_hashes(hash.data(), hash.size()); - }); + std::ranges::for_each( + txQueue_, [&](auto const& hash) { ht.add_hashes(hash.data(), hash.size()); }); JLOG(p_journal_.trace()) << "sendTxQueue " << txQueue_.size(); txQueue_.clear(); send(std::make_shared(ht, protocol::mtHAVE_TRANSACTIONS)); @@ -514,7 +581,7 @@ PeerImp::hasLedger(uint256 const& hash, std::uint32_t seq) const if ((seq != 0) && (seq >= minLedger_) && (seq <= maxLedger_) && (tracking_.load() == Tracking::converged)) return true; - if (std::find(recentLedgers_.begin(), recentLedgers_.end(), hash) != recentLedgers_.end()) + if (std::ranges::find(recentLedgers_, hash) != recentLedgers_.end()) return true; } return false; @@ -533,7 +600,7 @@ bool PeerImp::hasTxSet(uint256 const& hash) const { std::lock_guard const sl(recentLock_); - return std::find(recentTxSets_.begin(), recentTxSets_.end(), hash) != recentTxSets_.end(); + return std::ranges::find(recentTxSets_, hash) != recentTxSets_.end(); } void @@ -1119,7 +1186,7 @@ PeerImp::onMessageBegin( { auto const name = protocolMessageName(type); load_event_ = app_.getJobQueue().makeLoadEvent(jtPEER, name); - fee_ = {Resource::feeTrivialPeer, name}; + fee_ = {.fee = Resource::feeTrivialPeer, .context = name}; auto const category = TrafficCount::categorize(*m, static_cast(type), true); @@ -2116,7 +2183,7 @@ PeerImp::onMessage(std::shared_ptr const& m) { std::lock_guard const sl(recentLock_); - if (std::find(recentTxSets_.begin(), recentTxSets_.end(), hash) != recentTxSets_.end()) + if (std::ranges::find(recentTxSets_, hash) != recentTxSets_.end()) { fee_.update(Resource::feeUselessData, "duplicate (tsHAVE)"); return; @@ -2781,7 +2848,7 @@ PeerImp::addLedger(uint256 const& hash, std::lock_guard const& locke // locked by the caller. (void)lockedRecentLock; - if (std::find(recentLedgers_.begin(), recentLedgers_.end(), hash) != recentLedgers_.end()) + if (std::ranges::find(recentLedgers_, hash) != recentLedgers_.end()) return; recentLedgers_.push_back(hash); diff --git a/src/xrpld/overlay/detail/PeerImp.h b/src/xrpld/overlay/detail/PeerImp.h index 7f7d8c9324..f2cca1407a 100644 --- a/src/xrpld/overlay/detail/PeerImp.h +++ b/src/xrpld/overlay/detail/PeerImp.h @@ -23,6 +23,7 @@ #include #include #include +#include namespace xrpl { @@ -190,7 +191,7 @@ private: struct ChargeWithContext { Resource::Charge fee = Resource::feeTrivialPeer; - std::string context = {}; + std::string context{}; // NOLINT(readability-redundant-member-init) void update(Resource::Charge f, std::string const& add) @@ -313,7 +314,7 @@ public: id_t id, OverlayImpl& overlay); - virtual ~PeerImp(); + ~PeerImp() override; beast::Journal const& pJournal() const @@ -361,9 +362,8 @@ public: /** Send a set of PeerFinder endpoints as a protocol message. */ template < class FwdIt, - class = typename std::enable_if_t::value_type, - PeerFinder::Endpoint>::value>> + class = typename std::enable_if_t< + std::is_same_v::value_type, PeerFinder::Endpoint>>> void sendEndpoints(FwdIt first, FwdIt last); @@ -826,7 +826,7 @@ PeerImp::PeerImp( , remote_address_(slot->remote_endpoint()) , overlay_(overlay) , inbound_(false) - , protocol_(protocol) + , protocol_(std::move(protocol)) , tracking_(Tracking::unknown) , trackingTime_(clock_type::now()) , publicKey_(publicKey) @@ -834,7 +834,7 @@ PeerImp::PeerImp( , creationTime_(clock_type::now()) , squelch_(app_.getJournal("Squelch")) , usage_(usage) - , fee_{Resource::feeTrivialPeer} + , fee_{.fee = Resource::feeTrivialPeer} , slot_(std::move(slot)) , response_(std::move(response)) , headers_(response_) diff --git a/src/xrpld/overlay/detail/PeerReservationTable.cpp b/src/xrpld/overlay/detail/PeerReservationTable.cpp index 6ea2253df9..f0e5f55a00 100644 --- a/src/xrpld/overlay/detail/PeerReservationTable.cpp +++ b/src/xrpld/overlay/detail/PeerReservationTable.cpp @@ -1,13 +1,15 @@ #include + #include #include #include -#include +#include #include #include #include #include +#include #include #include @@ -32,9 +34,9 @@ PeerReservationTable::list() const -> std::vector { std::lock_guard const lock(mutex_); list.reserve(table_.size()); - std::copy(table_.begin(), table_.end(), std::back_inserter(list)); + std::ranges::copy(table_, std::back_inserter(list)); } - std::sort(list.begin(), list.end()); + std::sort(list.begin(), list.end()); // NOLINT(modernize-use-ranges) return list; } @@ -98,7 +100,7 @@ PeerReservationTable::erase(PublicKey const& nodeId) std::lock_guard const lock(mutex_); - auto const it = table_.find({nodeId}); + auto const it = table_.find({.nodeId = nodeId}); if (it != table_.end()) { previous = *it; diff --git a/src/xrpld/overlay/detail/PeerSet.cpp b/src/xrpld/overlay/detail/PeerSet.cpp index 391fb6d3ca..8d3d79d358 100644 --- a/src/xrpld/overlay/detail/PeerSet.cpp +++ b/src/xrpld/overlay/detail/PeerSet.cpp @@ -1,8 +1,24 @@ -#include -#include #include -#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -59,9 +75,8 @@ PeerSetImpl::addPeers( pairs.emplace_back(score, std::move(peer)); }); - std::sort(pairs.begin(), pairs.end(), [](ScoredPeer const& lhs, ScoredPeer const& rhs) { - return lhs.first > rhs.first; - }); + std::ranges::sort( + pairs, [](ScoredPeer const& lhs, ScoredPeer const& rhs) { return lhs.first > rhs.first; }); std::size_t accepted = 0; for (auto const& pair : pairs) @@ -108,7 +123,7 @@ public: { } - virtual std::unique_ptr + std::unique_ptr build() override { return std::make_unique(app_); diff --git a/src/xrpld/overlay/detail/ProtocolMessage.h b/src/xrpld/overlay/detail/ProtocolMessage.h index 41d42674ba..6b5b746ffd 100644 --- a/src/xrpld/overlay/detail/ProtocolMessage.h +++ b/src/xrpld/overlay/detail/ProtocolMessage.h @@ -233,7 +233,7 @@ parseMessageHeader(boost::system::error_code& ec, BufferSequence const& bufs, st template < class T, class Buffers, - class = std::enable_if_t::value>> + class = std::enable_if_t>> std::shared_ptr parseMessageContent(MessageHeader const& header, Buffers const& buffers) { @@ -258,7 +258,9 @@ parseMessageContent(MessageHeader const& header, Buffers const& buffers) return {}; } else if (!m->ParseFromZeroCopyStream(&stream)) + { return {}; + } return m; } @@ -267,7 +269,7 @@ template < class T, class Buffers, class Handler, - class = std::enable_if_t::value>> + class = std::enable_if_t>> bool invoke(MessageHeader const& header, Buffers const& buffers, Handler& handler) { diff --git a/src/xrpld/overlay/detail/ProtocolVersion.cpp b/src/xrpld/overlay/detail/ProtocolVersion.cpp index 1a55030cd4..c7416973ba 100644 --- a/src/xrpld/overlay/detail/ProtocolVersion.cpp +++ b/src/xrpld/overlay/detail/ProtocolVersion.cpp @@ -3,11 +3,19 @@ #include #include +#include #include -#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include namespace xrpl { @@ -96,8 +104,9 @@ parseProtocolVersions(boost::beast::string_view const& value) } // We guarantee that the returned list is sorted and contains no duplicates: - std::sort(result.begin(), result.end()); - result.erase(std::unique(result.begin(), result.end()), result.end()); + std::ranges::sort(result); + auto const uniq = std::ranges::unique(result); + result.erase(uniq.begin(), uniq.end()); return result; } @@ -115,12 +124,8 @@ negotiateProtocolVersion(std::vector const& versions) std::function const pickVersion = [&result](ProtocolVersion const& v) { result = v; }; - std::set_intersection( - std::begin(versions), - std::end(versions), - std::begin(supportedProtocolList), - std::end(supportedProtocolList), - boost::make_function_output_iterator(pickVersion)); + std::ranges::set_intersection( + versions, supportedProtocolList, boost::make_function_output_iterator(pickVersion)); return result; } @@ -154,8 +159,7 @@ supportedProtocolVersions() bool isProtocolSupported(ProtocolVersion const& v) { - return std::end(supportedProtocolList) != - std::find(std::begin(supportedProtocolList), std::end(supportedProtocolList), v); + return std::end(supportedProtocolList) != std::ranges::find(supportedProtocolList, v); } } // namespace xrpl diff --git a/src/xrpld/overlay/detail/ProtocolVersion.h b/src/xrpld/overlay/detail/ProtocolVersion.h index 5b3a1b3302..c4fa7ced0b 100644 --- a/src/xrpld/overlay/detail/ProtocolVersion.h +++ b/src/xrpld/overlay/detail/ProtocolVersion.h @@ -17,7 +17,7 @@ namespace xrpl { * */ using ProtocolVersion = std::pair; -inline constexpr ProtocolVersion +constexpr ProtocolVersion make_protocol(std::uint16_t major, std::uint16_t minor) { return {major, minor}; diff --git a/src/xrpld/overlay/detail/TrafficCount.cpp b/src/xrpld/overlay/detail/TrafficCount.cpp index 2ce32b4468..3841be28b0 100644 --- a/src/xrpld/overlay/detail/TrafficCount.cpp +++ b/src/xrpld/overlay/detail/TrafficCount.cpp @@ -1,5 +1,11 @@ #include +#include + +#include + +#include + namespace xrpl { std::unordered_map const type_lookup = { diff --git a/src/xrpld/overlay/detail/TrafficCount.h b/src/xrpld/overlay/detail/TrafficCount.h index 930e92129d..bdc0729a51 100644 --- a/src/xrpld/overlay/detail/TrafficCount.h +++ b/src/xrpld/overlay/detail/TrafficCount.h @@ -56,7 +56,7 @@ public: operator bool() const { - return messagesIn || messagesOut; + return (messagesIn != 0u) || (messagesOut != 0u); } }; diff --git a/src/xrpld/overlay/detail/Tuning.h b/src/xrpld/overlay/detail/Tuning.h index bd62cd2a03..0471587fec 100644 --- a/src/xrpld/overlay/detail/Tuning.h +++ b/src/xrpld/overlay/detail/Tuning.h @@ -2,9 +2,7 @@ #include -namespace xrpl { - -namespace Tuning { +namespace xrpl::Tuning { enum { /** How many ledgers off a server can be and we will @@ -44,6 +42,4 @@ enum { /** Size of buffer used to read from the socket. */ std::size_t constexpr readBufferBytes = 16384; -} // namespace Tuning - -} // namespace xrpl +} // namespace xrpl::Tuning diff --git a/src/xrpld/overlay/detail/TxMetrics.cpp b/src/xrpld/overlay/detail/TxMetrics.cpp index ee0e42e5d6..0a44c719f4 100644 --- a/src/xrpld/overlay/detail/TxMetrics.cpp +++ b/src/xrpld/overlay/detail/TxMetrics.cpp @@ -1,12 +1,17 @@ #include +#include #include +#include + +#include +#include +#include #include +#include -namespace xrpl { - -namespace metrics { +namespace xrpl::metrics { void TxMetrics::addMetrics(protocol::MessageType type, std::uint32_t val) @@ -124,6 +129,4 @@ TxMetrics::json() const return ret; } -} // namespace metrics - -} // namespace xrpl +} // namespace xrpl::metrics diff --git a/src/xrpld/overlay/detail/TxMetrics.h b/src/xrpld/overlay/detail/TxMetrics.h index 37194c34e3..a5aea854cc 100644 --- a/src/xrpld/overlay/detail/TxMetrics.h +++ b/src/xrpld/overlay/detail/TxMetrics.h @@ -8,9 +8,7 @@ #include #include -namespace xrpl { - -namespace metrics { +namespace xrpl::metrics { /** Run single metrics rolling average. Can be either average of a value per second or average of a value's sample per second. For instance, @@ -111,6 +109,4 @@ struct TxMetrics json() const; }; -} // namespace metrics - -} // namespace xrpl +} // namespace xrpl::metrics diff --git a/src/xrpld/overlay/detail/ZeroCopyStream.h b/src/xrpld/overlay/detail/ZeroCopyStream.h index 6ce81edc54..034f69a8da 100644 --- a/src/xrpld/overlay/detail/ZeroCopyStream.h +++ b/src/xrpld/overlay/detail/ZeroCopyStream.h @@ -124,7 +124,7 @@ private: public: explicit ZeroCopyOutputStream(Streambuf& streambuf, std::size_t blockSize); - ~ZeroCopyOutputStream(); + ~ZeroCopyOutputStream() override; bool Next(void** data, int* size) override; diff --git a/src/xrpld/overlay/predicates.h b/src/xrpld/overlay/predicates.h index 3adecf7c6a..e0b4a626ec 100644 --- a/src/xrpld/overlay/predicates.h +++ b/src/xrpld/overlay/predicates.h @@ -101,10 +101,7 @@ struct match_peer bool operator()(std::shared_ptr const& peer) const { - if (matchPeer && (peer.get() == matchPeer)) - return true; - - return false; + return (matchPeer != nullptr) && (peer.get() == matchPeer); } }; @@ -146,10 +143,7 @@ struct peer_in_set bool operator()(std::shared_ptr const& peer) const { - if (peerSet.count(peer->id()) == 0) - return false; - - return true; + return peerSet.contains(peer->id()); } }; diff --git a/src/xrpld/peerfinder/PeerfinderManager.h b/src/xrpld/peerfinder/PeerfinderManager.h index 57fde8a569..1ceaebe04d 100644 --- a/src/xrpld/peerfinder/PeerfinderManager.h +++ b/src/xrpld/peerfinder/PeerfinderManager.h @@ -2,18 +2,16 @@ #include #include +#include #include #include #include -#include "xrpld/peerfinder/detail/Tuning.h" - #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { using clock_type = beast::abstract_clock; @@ -103,7 +101,7 @@ struct Endpoint { Endpoint() = default; - Endpoint(beast::IP::Endpoint const& ep, std::uint32_t hops_); + Endpoint(beast::IP::Endpoint ep, std::uint32_t hops_); std::uint32_t hops = 0; beast::IP::Endpoint address; @@ -169,7 +167,7 @@ public: There may be some listener calls made before the destructor returns. */ - virtual ~Manager() = default; + ~Manager() override = default; /** Set the configuration for the manager. The new settings will be applied asynchronously. @@ -286,5 +284,4 @@ public: once_per_second() = 0; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/Slot.h b/src/xrpld/peerfinder/Slot.h index d0fce0626d..81249f54df 100644 --- a/src/xrpld/peerfinder/Slot.h +++ b/src/xrpld/peerfinder/Slot.h @@ -5,8 +5,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Properties and state associated with a peer to peer overlay connection. */ class Slot @@ -58,5 +57,4 @@ public: public_key() const = 0; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Bootcache.cpp b/src/xrpld/peerfinder/detail/Bootcache.cpp index dac55d50d6..7b26bc8d9a 100644 --- a/src/xrpld/peerfinder/detail/Bootcache.cpp +++ b/src/xrpld/peerfinder/detail/Bootcache.cpp @@ -1,13 +1,22 @@ #include + +#include +#include #include #include #include +#include +#include +#include +#include #include +#include +#include +#include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { Bootcache::Bootcache(Store& store, clock_type& clock, beast::Journal journal) : m_store(store), m_clock(clock), m_journal(journal), m_whenUpdate(m_clock.now()) @@ -252,5 +261,4 @@ Bootcache::flagForUpdate() checkUpdate(); } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Bootcache.h b/src/xrpld/peerfinder/detail/Bootcache.h index 9ab0a878e8..5405dd3432 100644 --- a/src/xrpld/peerfinder/detail/Bootcache.h +++ b/src/xrpld/peerfinder/detail/Bootcache.h @@ -12,8 +12,7 @@ #include #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Stores IP addresses useful for gaining initial connections. @@ -55,9 +54,7 @@ private: friend bool operator<(Entry const& lhs, Entry const& rhs) { - if (lhs.valence() > rhs.valence()) - return true; - return false; + return lhs.valence() > rhs.valence(); } private: @@ -171,5 +168,4 @@ private: flagForUpdate(); }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Checker.h b/src/xrpld/peerfinder/detail/Checker.h index 21cc0f160e..3bd23f85db 100644 --- a/src/xrpld/peerfinder/detail/Checker.h +++ b/src/xrpld/peerfinder/detail/Checker.h @@ -10,8 +10,7 @@ #include #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Tests remote listening sockets to make sure they are connectable. */ template @@ -44,7 +43,10 @@ private: async_op(Checker& owner, boost::asio::io_context& io_context, Handler&& handler); - virtual ~async_op(); + ~async_op() override + { + checker_.remove(*this); + } void stop() override; @@ -113,13 +115,6 @@ Checker::async_op::async_op( { } -template -template -Checker::async_op::~async_op() -{ - checker_.remove(*this); -} - template template void @@ -198,5 +193,4 @@ Checker::remove(basic_async_op& op) cond_.notify_all(); } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Counts.h b/src/xrpld/peerfinder/detail/Counts.h index 8d40b44300..e3d120b414 100644 --- a/src/xrpld/peerfinder/detail/Counts.h +++ b/src/xrpld/peerfinder/detail/Counts.h @@ -6,8 +6,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Manages the count of available connections for the various slots. */ class Counts @@ -179,15 +178,12 @@ public: // // Fixed peers do not count towards the active outgoing total. - if (m_out_max > 0) - return false; - - return true; + return m_out_max <= 0; } /** Output statistics. */ void - onWrite(beast::PropertyStream::Map& map) + onWrite(beast::PropertyStream::Map& map) const { map["accept"] = acceptCount(); map["connect"] = connectCount(); @@ -243,9 +239,13 @@ private: if (!s.fixed() && !s.reserved()) { if (s.inbound()) + { m_in_active += n; + } else + { m_out_active += n; + } } m_active += n; break; @@ -298,5 +298,4 @@ private: int m_closingCount{0}; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Endpoint.cpp b/src/xrpld/peerfinder/detail/Endpoint.cpp index 46f4f28b88..5d58e6c9bb 100644 --- a/src/xrpld/peerfinder/detail/Endpoint.cpp +++ b/src/xrpld/peerfinder/detail/Endpoint.cpp @@ -1,13 +1,17 @@ #include #include -namespace xrpl { -namespace PeerFinder { +#include -Endpoint::Endpoint(beast::IP::Endpoint const& ep, std::uint32_t hops_) - : hops(std::min(hops_, Tuning::maxHops + 1)), address(ep) +#include +#include +#include + +namespace xrpl::PeerFinder { + +Endpoint::Endpoint(beast::IP::Endpoint ep, std::uint32_t hops_) + : hops(std::min(hops_, Tuning::maxHops + 1)), address(std::move(ep)) { } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Fixed.h b/src/xrpld/peerfinder/detail/Fixed.h index 8b67347e6a..b898c6ce3f 100644 --- a/src/xrpld/peerfinder/detail/Fixed.h +++ b/src/xrpld/peerfinder/detail/Fixed.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Metadata for a Fixed slot. */ class Fixed @@ -43,5 +42,4 @@ private: std::size_t m_failures{0}; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Handouts.h b/src/xrpld/peerfinder/detail/Handouts.h index 77e2e31ed9..0d5eae7ef7 100644 --- a/src/xrpld/peerfinder/detail/Handouts.h +++ b/src/xrpld/peerfinder/detail/Handouts.h @@ -6,8 +6,9 @@ #include #include -namespace xrpl { -namespace PeerFinder { +#include + +namespace xrpl::PeerFinder { namespace detail { @@ -78,7 +79,7 @@ class RedirectHandouts { public: template - explicit RedirectHandouts(SlotImp::ptr const& slot); + explicit RedirectHandouts(SlotImp::ptr slot); template bool @@ -114,7 +115,7 @@ private: }; template -RedirectHandouts::RedirectHandouts(SlotImp::ptr const& slot) : slot_(slot) +RedirectHandouts::RedirectHandouts(SlotImp::ptr slot) : slot_(std::move(slot)) { list_.reserve(Tuning::redirectEndpointCount); } @@ -162,7 +163,7 @@ class SlotHandouts { public: template - explicit SlotHandouts(SlotImp::ptr const& slot); + explicit SlotHandouts(SlotImp::ptr slot); template bool @@ -198,7 +199,7 @@ private: }; template -SlotHandouts::SlotHandouts(SlotImp::ptr const& slot) : slot_(slot) +SlotHandouts::SlotHandouts(SlotImp::ptr slot) : slot_(std::move(slot)) { list_.reserve(Tuning::numberOfEndpoints); } @@ -329,5 +330,4 @@ ConnectHandouts::try_insert(beast::IP::Endpoint const& endpoint) return true; } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Livecache.h b/src/xrpld/peerfinder/detail/Livecache.h index ac435e1e24..5c5ed577af 100644 --- a/src/xrpld/peerfinder/detail/Livecache.h +++ b/src/xrpld/peerfinder/detail/Livecache.h @@ -13,9 +13,9 @@ #include #include +#include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { template class Livecache; @@ -30,7 +30,7 @@ public: protected: struct Element : boost::intrusive::list_base_hook<> { - Element(Endpoint const& endpoint_) : endpoint(endpoint_) + Element(Endpoint endpoint_) : endpoint(std::move(endpoint_)) { } @@ -409,7 +409,7 @@ Livecache::insert(Endpoint const& ep) << " at hops " << ep.hops; return; } - else if (!result.second && (ep.hops > e.endpoint.hops)) + if (!result.second && (ep.hops > e.endpoint.hops)) { // Drop duplicates at higher hops std::size_t const excess(ep.hops - e.endpoint.hops); @@ -465,7 +465,7 @@ Livecache::hops_t::shuffle() { std::vector> v; v.reserve(list.size()); - std::copy(list.begin(), list.end(), std::back_inserter(v)); + std::ranges::copy(list, std::back_inserter(v)); std::shuffle(v.begin(), v.end(), default_prng()); list.clear(); for (auto& e : v) @@ -490,7 +490,7 @@ Livecache::hops_t::histogram() const template Livecache::hops_t::hops_t(Allocator const& alloc) { - std::fill(m_hist.begin(), m_hist.end(), 0); + std::ranges::fill(m_hist, 0); } template @@ -532,5 +532,4 @@ Livecache::hops_t::remove(Element& e) list.erase(list.iterator_to(e)); } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Logic.h b/src/xrpld/peerfinder/detail/Logic.h index ad0a2f8b96..9e2cbedc64 100644 --- a/src/xrpld/peerfinder/detail/Logic.h +++ b/src/xrpld/peerfinder/detail/Logic.h @@ -23,8 +23,7 @@ #include #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** The Logic for maintaining the list of Slot addresses. We keep this in a separate class so it can be instantiated @@ -254,7 +253,7 @@ public: } // Check for duplicate connection - if (slots_.find(remote_endpoint) != slots_.end()) + if (slots_.contains(remote_endpoint)) { JLOG(m_journal.debug()) << beast::leftw(18) << "Logic dropping " << remote_endpoint << " as duplicate incoming"; @@ -290,7 +289,7 @@ public: std::lock_guard const _(lock_); // Check for duplicate connection - if (slots_.find(remote_endpoint) != slots_.end()) + if (slots_.contains(remote_endpoint)) { JLOG(m_journal.debug()) << beast::leftw(18) << "Logic dropping " << remote_endpoint << " as duplicate connect"; @@ -377,7 +376,7 @@ public: "xrpl::PeerFinder::Logic::activate : valid slot state"); // Check for duplicate connection by key - if (keys_.find(key) != keys_.end()) + if (keys_.contains(key)) return Result::duplicatePeer; // If the peer belongs to a cluster or is reserved, @@ -418,9 +417,11 @@ public: { auto iter(fixed_.find(slot->remote_endpoint())); if (iter == fixed_.end()) + { LogicError( "PeerFinder::Logic::activate(): remote_endpoint " "missing from fixed_"); + } iter->second.success(m_clock.now()); JLOG(journal.trace()) << "Logic fixed success"; @@ -516,7 +517,7 @@ public: << ((h.list().size() > 1) ? "endpoints" : "endpoint"); return h.list(); } - else if (counts_.attempts() > 0) + if (counts_.attempts() > 0) { JLOG(m_journal.debug()) << beast::leftw(18) << "Logic waiting on " << counts_.attempts() << " attempts"; @@ -627,7 +628,7 @@ public: beast::Journal const journal{sink}; JLOG(journal.trace()) << "Logic sending " << list.size() << ((list.size() == 1) ? " endpoint" : " endpoints"); - result.push_back(std::make_pair(slot, list)); + result.emplace_back(slot, list); } m_whenBroadcast = now + Tuning::secondsPerMessage; @@ -825,9 +826,11 @@ public: auto const iter = slots_.find(slot->remote_endpoint()); // The slot must exist in the table if (iter == slots_.end()) + { LogicError( "PeerFinder::Logic::remove(): remote_endpoint " "missing from slots_"); + } // Remove from slot by IP table slots_.erase(iter); @@ -838,9 +841,11 @@ public: auto const iter = keys_.find(*slot->public_key()); // Key must exist if (iter == keys_.end()) + { LogicError( "PeerFinder::Logic::remove(): public_key missing " "from keys_"); + } keys_.erase(iter); } @@ -849,9 +854,11 @@ public: auto const iter(connectedAddresses_.find(slot->remote_endpoint().address())); // Address must exist if (iter == connectedAddresses_.end()) + { LogicError( "PeerFinder::Logic::remove(): remote_endpoint " "address missing from connectedAddresses_"); + } connectedAddresses_.erase(iter); } @@ -875,9 +882,11 @@ public: { auto iter(fixed_.find(slot->remote_endpoint())); if (iter == fixed_.end()) + { LogicError( "PeerFinder::Logic::on_closed(): remote_endpoint " "missing from fixed_"); + } iter->second.failure(m_clock.now()); JLOG(journal.debug()) << "Logic fixed failed"; @@ -939,8 +948,10 @@ public: fixed(beast::IP::Endpoint const& endpoint) const { for (auto const& entry : fixed_) + { if (entry.first == endpoint) return true; + } return false; } @@ -951,8 +962,10 @@ public: fixed(beast::IP::Address const& address) const { for (auto const& entry : fixed_) + { if (entry.first.address() == address) return true; + } return false; } @@ -1199,5 +1212,4 @@ Logic::onRedirects( } } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp b/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp index 6a158fbbab..1c57f5187e 100644 --- a/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp +++ b/src/xrpld/peerfinder/detail/PeerfinderConfig.cpp @@ -1,10 +1,14 @@ +#include #include #include -#include +#include -namespace xrpl { -namespace PeerFinder { +#include +#include +#include + +namespace xrpl::PeerFinder { Config::Config() : outPeers(calcOutPeers()) @@ -123,5 +127,4 @@ Config::makeConfig( return config; } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/PeerfinderManager.cpp b/src/xrpld/peerfinder/detail/PeerfinderManager.cpp index e9c42b7eb5..2858586120 100644 --- a/src/xrpld/peerfinder/detail/PeerfinderManager.cpp +++ b/src/xrpld/peerfinder/detail/PeerfinderManager.cpp @@ -1,17 +1,34 @@ #include + +#include #include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include +#include +#include #include +#include #include +#include +#include +#include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { class ManagerImp : public Manager { @@ -249,5 +266,4 @@ make_Manager( return std::make_unique(io_context, clock, journal, config, collector); } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/SlotImp.cpp b/src/xrpld/peerfinder/detail/SlotImp.cpp index 07156c6a87..f763a154aa 100644 --- a/src/xrpld/peerfinder/detail/SlotImp.cpp +++ b/src/xrpld/peerfinder/detail/SlotImp.cpp @@ -1,13 +1,21 @@ -#include #include + +#include +#include #include -namespace xrpl { -namespace PeerFinder { +#include +#include +#include + +#include +#include + +namespace xrpl::PeerFinder { SlotImp::SlotImp( beast::IP::Endpoint const& local_endpoint, - beast::IP::Endpoint const& remote_endpoint, + beast::IP::Endpoint remote_endpoint, bool fixed, clock_type& clock) : recent(clock) @@ -15,7 +23,7 @@ SlotImp::SlotImp( , m_fixed(fixed) , m_reserved(false) , m_state(accept) - , m_remote_endpoint(remote_endpoint) + , m_remote_endpoint(std::move(remote_endpoint)) , m_local_endpoint(local_endpoint) , m_listening_port(unknownPort) , checked(false) @@ -24,13 +32,13 @@ SlotImp::SlotImp( { } -SlotImp::SlotImp(beast::IP::Endpoint const& remote_endpoint, bool fixed, clock_type& clock) +SlotImp::SlotImp(beast::IP::Endpoint remote_endpoint, bool fixed, clock_type& clock) : recent(clock) , m_inbound(false) , m_fixed(fixed) , m_reserved(false) , m_state(connect) - , m_remote_endpoint(remote_endpoint) + , m_remote_endpoint(std::move(remote_endpoint)) , m_listening_port(unknownPort) , checked(true) , canAccept(true) @@ -125,5 +133,4 @@ SlotImp::recent_t::expire() beast::expire(cache, Tuning::liveCacheSecondsToLive); } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/SlotImp.h b/src/xrpld/peerfinder/detail/SlotImp.h index f18410d214..a94473be87 100644 --- a/src/xrpld/peerfinder/detail/SlotImp.h +++ b/src/xrpld/peerfinder/detail/SlotImp.h @@ -8,8 +8,7 @@ #include #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { class SlotImp : public Slot { @@ -19,12 +18,12 @@ public: // inbound SlotImp( beast::IP::Endpoint const& local_endpoint, - beast::IP::Endpoint const& remote_endpoint, + beast::IP::Endpoint remote_endpoint, bool fixed, clock_type& clock); // outbound - SlotImp(beast::IP::Endpoint const& remote_endpoint, bool fixed, clock_type& clock); + SlotImp(beast::IP::Endpoint remote_endpoint, bool fixed, clock_type& clock); bool inbound() const override @@ -190,5 +189,4 @@ public: clock_type::time_point whenAcceptEndpoints; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Source.h b/src/xrpld/peerfinder/detail/Source.h index 8fc97b639f..c86176911e 100644 --- a/src/xrpld/peerfinder/detail/Source.h +++ b/src/xrpld/peerfinder/detail/Source.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** A static or dynamic source of peer addresses. These are used as fallbacks when we are bootstrapping and don't have @@ -30,9 +29,7 @@ public: IPAddresses addresses; }; - virtual ~Source() - { - } + virtual ~Source() = default; virtual std::string const& name() = 0; virtual void @@ -43,5 +40,4 @@ public: fetch(Results& results, beast::Journal journal) = 0; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/SourceStrings.cpp b/src/xrpld/peerfinder/detail/SourceStrings.cpp index eb2e62fc09..4f6d58450c 100644 --- a/src/xrpld/peerfinder/detail/SourceStrings.cpp +++ b/src/xrpld/peerfinder/detail/SourceStrings.cpp @@ -1,17 +1,25 @@ #include -namespace xrpl { -namespace PeerFinder { +#include + +#include +#include + +#include +#include +#include + +namespace xrpl::PeerFinder { class SourceStringsImp : public SourceStrings { public: - SourceStringsImp(std::string const& name, Strings const& strings) - : m_name(name), m_strings(strings) + SourceStringsImp(std::string name, Strings strings) + : m_name(std::move(name)), m_strings(std::move(strings)) { } - ~SourceStringsImp() = default; + ~SourceStringsImp() override = default; std::string const& name() override @@ -47,5 +55,4 @@ SourceStrings::New(std::string const& name, Strings const& strings) return std::make_shared(name, strings); } -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/SourceStrings.h b/src/xrpld/peerfinder/detail/SourceStrings.h index 1cf6d81040..11b2b927ee 100644 --- a/src/xrpld/peerfinder/detail/SourceStrings.h +++ b/src/xrpld/peerfinder/detail/SourceStrings.h @@ -4,8 +4,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Provides addresses from a static set of strings. */ class SourceStrings : public Source @@ -19,5 +18,4 @@ public: New(std::string const& name, Strings const& strings); }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Store.h b/src/xrpld/peerfinder/detail/Store.h index 390f80800a..347fc09b15 100644 --- a/src/xrpld/peerfinder/detail/Store.h +++ b/src/xrpld/peerfinder/detail/Store.h @@ -1,15 +1,12 @@ #pragma once -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Abstract persistence for PeerFinder data. */ class Store { public: - virtual ~Store() - { - } + virtual ~Store() = default; // load the bootstrap cache using load_callback = std::function; @@ -28,5 +25,4 @@ public: save(std::vector const& v) = 0; }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/StoreSqdb.h b/src/xrpld/peerfinder/detail/StoreSqdb.h index 47b8a6825c..626a82c932 100644 --- a/src/xrpld/peerfinder/detail/StoreSqdb.h +++ b/src/xrpld/peerfinder/detail/StoreSqdb.h @@ -5,8 +5,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Database persistence for PeerFinder using SQLite */ class StoreSqdb : public Store @@ -26,9 +25,7 @@ public: { } - ~StoreSqdb() - { - } + ~StoreSqdb() override = default; void open(BasicConfig const& config) @@ -85,5 +82,4 @@ private: } }; -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/peerfinder/detail/Tuning.h b/src/xrpld/peerfinder/detail/Tuning.h index d572c7b5e3..23a96a7374 100644 --- a/src/xrpld/peerfinder/detail/Tuning.h +++ b/src/xrpld/peerfinder/detail/Tuning.h @@ -2,12 +2,9 @@ #include -namespace xrpl { -namespace PeerFinder { - /** Heuristically tuned constants. */ /** @{ */ -namespace Tuning { +namespace xrpl::PeerFinder::Tuning { enum { //--------------------------------------------------------- @@ -110,8 +107,5 @@ std::chrono::seconds constexpr liveCacheSecondsToLive(30); // Note that we ignore the port for purposes of comparison. std::chrono::seconds constexpr recentAttemptDuration(60); -} // namespace Tuning +} // namespace xrpl::PeerFinder::Tuning /** @} */ - -} // namespace PeerFinder -} // namespace xrpl diff --git a/src/xrpld/peerfinder/make_Manager.h b/src/xrpld/peerfinder/make_Manager.h index 846907e08c..8350255ae2 100644 --- a/src/xrpld/peerfinder/make_Manager.h +++ b/src/xrpld/peerfinder/make_Manager.h @@ -6,8 +6,7 @@ #include -namespace xrpl { -namespace PeerFinder { +namespace xrpl::PeerFinder { /** Create a new Manager. */ std::unique_ptr @@ -18,5 +17,4 @@ make_Manager( BasicConfig const& config, beast::insight::Collector::ptr const& collector); -} // namespace PeerFinder -} // namespace xrpl +} // namespace xrpl::PeerFinder diff --git a/src/xrpld/perflog/detail/PerfLogImp.cpp b/src/xrpld/perflog/detail/PerfLogImp.cpp index 266c99a147..57e7be5156 100644 --- a/src/xrpld/perflog/detail/PerfLogImp.cpp +++ b/src/xrpld/perflog/detail/PerfLogImp.cpp @@ -1,25 +1,36 @@ #include #include +#include +#include #include #include +#include +#include #include +#include +#include #include +#include -#include +#include +#include + +#include #include #include -#include +#include +#include +#include #include -#include -#include -#include +#include +#include #include #include #include +#include -namespace xrpl { -namespace perf { +namespace xrpl::perf { PerfLogImp::Counters::Counters(std::set const& labels, JobTypes const& jobTypes) { @@ -284,11 +295,11 @@ PerfLogImp::report() } PerfLogImp::PerfLogImp( - Setup const& setup, + Setup setup, Application& app, beast::Journal journal, std::function&& signalStop) - : setup_(setup), app_(app), j_(journal), signalStop_(std::move(signalStop)) + : setup_(std::move(setup)), app_(app), j_(journal), signalStop_(std::move(signalStop)) { openLog(); } @@ -494,5 +505,4 @@ make_PerfLog( return std::make_unique(setup, app, journal, std::move(signalStop)); } -} // namespace perf -} // namespace xrpl +} // namespace xrpl::perf diff --git a/src/xrpld/perflog/detail/PerfLogImp.h b/src/xrpld/perflog/detail/PerfLogImp.h index 61329fb198..2898158ea5 100644 --- a/src/xrpld/perflog/detail/PerfLogImp.h +++ b/src/xrpld/perflog/detail/PerfLogImp.h @@ -16,8 +16,7 @@ #include #include -namespace xrpl { -namespace perf { +namespace xrpl::perf { /** A box coupling data with a mutex for locking access to it. */ template @@ -123,7 +122,7 @@ class PerfLogImp : public PerfLog public: PerfLogImp( - Setup const& setup, + Setup setup, Application& app, beast::Journal journal, std::function&& signalStop); @@ -177,5 +176,4 @@ public: stop() override; }; -} // namespace perf -} // namespace xrpl +} // namespace xrpl::perf diff --git a/src/xrpld/rpc/BookChanges.h b/src/xrpld/rpc/BookChanges.h index 41853ee890..89b99cabe3 100644 --- a/src/xrpld/rpc/BookChanges.h +++ b/src/xrpld/rpc/BookChanges.h @@ -102,7 +102,7 @@ computeBookChanges(std::shared_ptr const& lpAccepted) std::string const g{to_string(deltaGets.asset())}; std::string const p{to_string(deltaPays.asset())}; - bool const noswap = isXRP(deltaGets) ? true : (isXRP(deltaPays) ? false : (g < p)); + bool const noswap = isXRP(deltaGets) || (!isXRP(deltaPays) && (g < p)); STAmount first = noswap ? deltaGets : deltaPays; STAmount second = noswap ? deltaPays : deltaGets; @@ -121,15 +121,20 @@ computeBookChanges(std::shared_ptr const& lpAccepted) std::stringstream ss; if (noswap) + { ss << g << "|" << p; + } else + { ss << p << "|" << g; + } std::optional const domain = finalFields[~sfDomainID]; std::string const key{ss.str()}; - if (tally.find(key) == tally.end()) + if (!tally.contains(key)) + { tally[key] = { first, // side A vol second, // side B vol @@ -138,6 +143,7 @@ computeBookChanges(std::shared_ptr const& lpAccepted) rate, // open rate, // close domain}; + } else { // increment volume diff --git a/src/xrpld/rpc/CTID.h b/src/xrpld/rpc/CTID.h index 42efb4c157..9b36cf167d 100644 --- a/src/xrpld/rpc/CTID.h +++ b/src/xrpld/rpc/CTID.h @@ -6,9 +6,7 @@ #include #include -namespace xrpl { - -namespace RPC { +namespace xrpl::RPC { // CTID stands for Concise Transaction ID. // @@ -108,5 +106,4 @@ decodeCTID(T const ctid) noexcept return std::make_tuple(ledgerSeq, txnIndex, networkID); } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/Context.h b/src/xrpld/rpc/Context.h index e77d9adeb3..58768d028a 100644 --- a/src/xrpld/rpc/Context.h +++ b/src/xrpld/rpc/Context.h @@ -24,8 +24,8 @@ struct Context LedgerMaster& ledgerMaster; Resource::Consumer& consumer; Role role; - std::shared_ptr coro{}; - InfoSub::pointer infoSub{}; + std::shared_ptr coro; + InfoSub::pointer infoSub; unsigned int apiVersion; }; diff --git a/src/xrpld/rpc/MPTokenIssuanceID.h b/src/xrpld/rpc/MPTokenIssuanceID.h index 9e60c44ee0..b48f785f87 100644 --- a/src/xrpld/rpc/MPTokenIssuanceID.h +++ b/src/xrpld/rpc/MPTokenIssuanceID.h @@ -8,9 +8,7 @@ #include #include -namespace xrpl { - -namespace RPC { +namespace xrpl::RPC { /** Add a `mpt_issuance_id` field to the `meta` input/output parameter. @@ -35,5 +33,4 @@ insertMPTokenIssuanceID( TxMeta const& transactionMeta); /** @} */ -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/RPCHandler.h b/src/xrpld/rpc/RPCHandler.h index 519740b75d..c8133f3fe6 100644 --- a/src/xrpld/rpc/RPCHandler.h +++ b/src/xrpld/rpc/RPCHandler.h @@ -3,8 +3,7 @@ #include #include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { struct JsonContext; @@ -15,5 +14,4 @@ doCommand(RPC::JsonContext&, Json::Value&); Role roleRequired(unsigned int version, bool betaEnabled, std::string const& method); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/Status.h b/src/xrpld/rpc/Status.h index 418ad9ccae..f0c6d932e7 100644 --- a/src/xrpld/rpc/Status.h +++ b/src/xrpld/rpc/Status.h @@ -4,8 +4,7 @@ #include #include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { /** Status represents the results of an operation that might fail. @@ -28,7 +27,7 @@ public: Status() = default; // The enable_if allows only integers (not enums). Prevents enum narrowing. - template ::value>> + template >> Status(T code, Strings d = {}) : code_(code), messages_(std::move(d)) { } @@ -93,9 +92,13 @@ public: if (auto ec = toErrorCode()) { if (messages_.empty()) + { inject_error(ec, object); + } else + { inject_error(ec, message(), object); + } } } @@ -130,5 +133,4 @@ private: Strings messages_; }; -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/AccountAssets.cpp b/src/xrpld/rpc/detail/AccountAssets.cpp index fbe3169bf7..b990939bd6 100644 --- a/src/xrpld/rpc/detail/AccountAssets.cpp +++ b/src/xrpld/rpc/detail/AccountAssets.cpp @@ -1,5 +1,16 @@ #include +#include +#include + +#include +#include +#include +#include +#include + +#include + namespace xrpl { hash_set diff --git a/src/xrpld/rpc/detail/AssetCache.cpp b/src/xrpld/rpc/detail/AssetCache.cpp index 0eb9434e91..bbe8fefc98 100644 --- a/src/xrpld/rpc/detail/AssetCache.cpp +++ b/src/xrpld/rpc/detail/AssetCache.cpp @@ -1,8 +1,24 @@ #include + +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/detail/DeliveredAmount.cpp b/src/xrpld/rpc/detail/DeliveredAmount.cpp index e2f5bd8cd9..6b9ef15db5 100644 --- a/src/xrpld/rpc/detail/DeliveredAmount.cpp +++ b/src/xrpld/rpc/detail/DeliveredAmount.cpp @@ -1,14 +1,22 @@ -#include -#include -#include -#include #include -#include -#include +#include +#include +#include -namespace xrpl { -namespace RPC { +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace xrpl::RPC { /* GetLedgerIndex and GetCloseTime are lambdas that allow the close time and @@ -170,5 +178,4 @@ insertDeliveredAmount( } } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/Handler.cpp b/src/xrpld/rpc/detail/Handler.cpp index 05fc1cb0b4..b8489e0b34 100644 --- a/src/xrpld/rpc/detail/Handler.cpp +++ b/src/xrpld/rpc/detail/Handler.cpp @@ -1,14 +1,24 @@ #include + +#include +#include #include +#include #include #include +#include +#include #include +#include +#include #include +#include +#include +#include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { namespace { /** Adjust an old-style handler to be call-by-reference. */ @@ -68,79 +78,293 @@ handlerFrom() Handler const handlerArray[]{ // Some handlers not specified here are added to the table via addHandler() // Request-response methods - {"account_info", byRef(&doAccountInfo), Role::USER, NO_CONDITION}, - {"account_currencies", byRef(&doAccountCurrencies), Role::USER, NO_CONDITION}, - {"account_lines", byRef(&doAccountLines), Role::USER, NO_CONDITION}, - {"account_channels", byRef(&doAccountChannels), Role::USER, NO_CONDITION}, - {"account_nfts", byRef(&doAccountNFTs), Role::USER, NO_CONDITION}, - {"account_objects", byRef(&doAccountObjects), Role::USER, NO_CONDITION}, - {"account_offers", byRef(&doAccountOffers), Role::USER, NO_CONDITION}, - {"account_tx", byRef(&doAccountTx), Role::USER, NO_CONDITION}, - {"amm_info", byRef(&doAMMInfo), Role::USER, NO_CONDITION}, - {"blacklist", byRef(&doBlackList), Role::ADMIN, NO_CONDITION}, - {"book_changes", byRef(&doBookChanges), Role::USER, NO_CONDITION}, - {"book_offers", byRef(&doBookOffers), Role::USER, NO_CONDITION}, - {"can_delete", byRef(&doCanDelete), Role::ADMIN, NO_CONDITION}, - {"channel_authorize", byRef(&doChannelAuthorize), Role::USER, NO_CONDITION}, - {"channel_verify", byRef(&doChannelVerify), Role::USER, NO_CONDITION}, - {"connect", byRef(&doConnect), Role::ADMIN, NO_CONDITION}, - {"consensus_info", byRef(&doConsensusInfo), Role::ADMIN, NO_CONDITION}, - {"deposit_authorized", byRef(&doDepositAuthorized), Role::USER, NO_CONDITION}, - {"feature", byRef(&doFeature), Role::USER, NO_CONDITION}, - {"fee", byRef(&doFee), Role::USER, NEEDS_CURRENT_LEDGER}, - {"fetch_info", byRef(&doFetchInfo), Role::ADMIN, NO_CONDITION}, - {"gateway_balances", byRef(&doGatewayBalances), Role::USER, NO_CONDITION}, - {"get_counts", byRef(&doGetCounts), Role::ADMIN, NO_CONDITION}, - {"get_aggregate_price", byRef(&doGetAggregatePrice), Role::USER, NO_CONDITION}, - {"ledger_accept", byRef(&doLedgerAccept), Role::ADMIN, NEEDS_CURRENT_LEDGER}, - {"ledger_cleaner", byRef(&doLedgerCleaner), Role::ADMIN, NEEDS_NETWORK_CONNECTION}, - {"ledger_closed", byRef(&doLedgerClosed), Role::USER, NEEDS_CLOSED_LEDGER}, - {"ledger_current", byRef(&doLedgerCurrent), Role::USER, NEEDS_CURRENT_LEDGER}, - {"ledger_data", byRef(&doLedgerData), Role::USER, NO_CONDITION}, - {"ledger_entry", byRef(&doLedgerEntry), Role::USER, NO_CONDITION}, - {"ledger_header", byRef(&doLedgerHeader), Role::USER, NO_CONDITION, 1, 1}, - {"ledger_request", byRef(&doLedgerRequest), Role::ADMIN, NO_CONDITION}, - {"log_level", byRef(&doLogLevel), Role::ADMIN, NO_CONDITION}, - {"logrotate", byRef(&doLogRotate), Role::ADMIN, NO_CONDITION}, - {"manifest", byRef(&doManifest), Role::USER, NO_CONDITION}, - {"nft_buy_offers", byRef(&doNFTBuyOffers), Role::USER, NO_CONDITION}, - {"nft_sell_offers", byRef(&doNFTSellOffers), Role::USER, NO_CONDITION}, - {"noripple_check", byRef(&doNoRippleCheck), Role::USER, NO_CONDITION}, - {"owner_info", byRef(&doOwnerInfo), Role::USER, NEEDS_CURRENT_LEDGER}, - {"peers", byRef(&doPeers), Role::ADMIN, NO_CONDITION}, - {"path_find", byRef(&doPathFind), Role::USER, NEEDS_CURRENT_LEDGER}, - {"ping", byRef(&doPing), Role::USER, NO_CONDITION}, - {"print", byRef(&doPrint), Role::ADMIN, NO_CONDITION}, + {.name_ = "account_info", + .valueMethod_ = byRef(&doAccountInfo), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_currencies", + .valueMethod_ = byRef(&doAccountCurrencies), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_lines", + .valueMethod_ = byRef(&doAccountLines), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_channels", + .valueMethod_ = byRef(&doAccountChannels), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_nfts", + .valueMethod_ = byRef(&doAccountNFTs), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_objects", + .valueMethod_ = byRef(&doAccountObjects), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_offers", + .valueMethod_ = byRef(&doAccountOffers), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "account_tx", + .valueMethod_ = byRef(&doAccountTx), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "amm_info", + .valueMethod_ = byRef(&doAMMInfo), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "blacklist", + .valueMethod_ = byRef(&doBlackList), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "book_changes", + .valueMethod_ = byRef(&doBookChanges), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "book_offers", + .valueMethod_ = byRef(&doBookOffers), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "can_delete", + .valueMethod_ = byRef(&doCanDelete), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "channel_authorize", + .valueMethod_ = byRef(&doChannelAuthorize), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "channel_verify", + .valueMethod_ = byRef(&doChannelVerify), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "connect", + .valueMethod_ = byRef(&doConnect), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "consensus_info", + .valueMethod_ = byRef(&doConsensusInfo), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "deposit_authorized", + .valueMethod_ = byRef(&doDepositAuthorized), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "feature", + .valueMethod_ = byRef(&doFeature), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "fee", + .valueMethod_ = byRef(&doFee), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "fetch_info", + .valueMethod_ = byRef(&doFetchInfo), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "gateway_balances", + .valueMethod_ = byRef(&doGatewayBalances), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "get_counts", + .valueMethod_ = byRef(&doGetCounts), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "get_aggregate_price", + .valueMethod_ = byRef(&doGetAggregatePrice), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "ledger_accept", + .valueMethod_ = byRef(&doLedgerAccept), + .role_ = Role::ADMIN, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "ledger_cleaner", + .valueMethod_ = byRef(&doLedgerCleaner), + .role_ = Role::ADMIN, + .condition_ = NEEDS_NETWORK_CONNECTION}, + {.name_ = "ledger_closed", + .valueMethod_ = byRef(&doLedgerClosed), + .role_ = Role::USER, + .condition_ = NEEDS_CLOSED_LEDGER}, + {.name_ = "ledger_current", + .valueMethod_ = byRef(&doLedgerCurrent), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "ledger_data", + .valueMethod_ = byRef(&doLedgerData), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "ledger_entry", + .valueMethod_ = byRef(&doLedgerEntry), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "ledger_header", + .valueMethod_ = byRef(&doLedgerHeader), + .role_ = Role::USER, + .condition_ = NO_CONDITION, + .minApiVer_ = 1, + .maxApiVer_ = 1}, + {.name_ = "ledger_request", + .valueMethod_ = byRef(&doLedgerRequest), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "log_level", + .valueMethod_ = byRef(&doLogLevel), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "logrotate", + .valueMethod_ = byRef(&doLogRotate), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "manifest", + .valueMethod_ = byRef(&doManifest), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "nft_buy_offers", + .valueMethod_ = byRef(&doNFTBuyOffers), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "nft_sell_offers", + .valueMethod_ = byRef(&doNFTSellOffers), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "noripple_check", + .valueMethod_ = byRef(&doNoRippleCheck), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "owner_info", + .valueMethod_ = byRef(&doOwnerInfo), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "peers", + .valueMethod_ = byRef(&doPeers), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "path_find", + .valueMethod_ = byRef(&doPathFind), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "ping", + .valueMethod_ = byRef(&doPing), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "print", + .valueMethod_ = byRef(&doPrint), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, // { "profile", byRef (&doProfile), Role::USER, // NEEDS_CURRENT_LEDGER }, - {"random", byRef(&doRandom), Role::USER, NO_CONDITION}, - {"peer_reservations_add", byRef(&doPeerReservationsAdd), Role::ADMIN, NO_CONDITION}, - {"peer_reservations_del", byRef(&doPeerReservationsDel), Role::ADMIN, NO_CONDITION}, - {"peer_reservations_list", byRef(&doPeerReservationsList), Role::ADMIN, NO_CONDITION}, - {"ripple_path_find", byRef(&doRipplePathFind), Role::USER, NO_CONDITION}, - {"server_definitions", byRef(&doServerDefinitions), Role::USER, NO_CONDITION}, - {"server_info", byRef(&doServerInfo), Role::USER, NO_CONDITION}, - {"server_state", byRef(&doServerState), Role::USER, NO_CONDITION}, - {"sign", byRef(&doSign), Role::USER, NO_CONDITION}, - {"sign_for", byRef(&doSignFor), Role::USER, NO_CONDITION}, - {"simulate", byRef(&doSimulate), Role::USER, NEEDS_CURRENT_LEDGER}, - {"stop", byRef(&doStop), Role::ADMIN, NO_CONDITION}, - {"submit", byRef(&doSubmit), Role::USER, NEEDS_CURRENT_LEDGER}, - {"submit_multisigned", byRef(&doSubmitMultiSigned), Role::USER, NEEDS_CURRENT_LEDGER}, - {"transaction_entry", byRef(&doTransactionEntry), Role::USER, NO_CONDITION}, - {"tx", byRef(&doTxJson), Role::USER, NEEDS_NETWORK_CONNECTION}, - {"tx_history", byRef(&doTxHistory), Role::USER, NO_CONDITION, 1, 1}, - {"tx_reduce_relay", byRef(&doTxReduceRelay), Role::USER, NO_CONDITION}, - {"unl_list", byRef(&doUnlList), Role::ADMIN, NO_CONDITION}, - {"validation_create", byRef(&doValidationCreate), Role::ADMIN, NO_CONDITION}, - {"validators", byRef(&doValidators), Role::ADMIN, NO_CONDITION}, - {"validator_list_sites", byRef(&doValidatorListSites), Role::ADMIN, NO_CONDITION}, - {"validator_info", byRef(&doValidatorInfo), Role::ADMIN, NO_CONDITION}, - {"vault_info", byRef(&doVaultInfo), Role::USER, NO_CONDITION}, - {"wallet_propose", byRef(&doWalletPropose), Role::ADMIN, NO_CONDITION}, + {.name_ = "random", + .valueMethod_ = byRef(&doRandom), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "peer_reservations_add", + .valueMethod_ = byRef(&doPeerReservationsAdd), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "peer_reservations_del", + .valueMethod_ = byRef(&doPeerReservationsDel), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "peer_reservations_list", + .valueMethod_ = byRef(&doPeerReservationsList), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "ripple_path_find", + .valueMethod_ = byRef(&doRipplePathFind), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "server_definitions", + .valueMethod_ = byRef(&doServerDefinitions), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "server_info", + .valueMethod_ = byRef(&doServerInfo), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "server_state", + .valueMethod_ = byRef(&doServerState), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "sign", + .valueMethod_ = byRef(&doSign), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "sign_for", + .valueMethod_ = byRef(&doSignFor), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "simulate", + .valueMethod_ = byRef(&doSimulate), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "stop", + .valueMethod_ = byRef(&doStop), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "submit", + .valueMethod_ = byRef(&doSubmit), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "submit_multisigned", + .valueMethod_ = byRef(&doSubmitMultiSigned), + .role_ = Role::USER, + .condition_ = NEEDS_CURRENT_LEDGER}, + {.name_ = "transaction_entry", + .valueMethod_ = byRef(&doTransactionEntry), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "tx", + .valueMethod_ = byRef(&doTxJson), + .role_ = Role::USER, + .condition_ = NEEDS_NETWORK_CONNECTION}, + {.name_ = "tx_history", + .valueMethod_ = byRef(&doTxHistory), + .role_ = Role::USER, + .condition_ = NO_CONDITION, + .minApiVer_ = 1, + .maxApiVer_ = 1}, + {.name_ = "tx_reduce_relay", + .valueMethod_ = byRef(&doTxReduceRelay), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "unl_list", + .valueMethod_ = byRef(&doUnlList), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "validation_create", + .valueMethod_ = byRef(&doValidationCreate), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "validators", + .valueMethod_ = byRef(&doValidators), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "validator_list_sites", + .valueMethod_ = byRef(&doValidatorListSites), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "validator_info", + .valueMethod_ = byRef(&doValidatorInfo), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, + {.name_ = "vault_info", + .valueMethod_ = byRef(&doVaultInfo), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "wallet_propose", + .valueMethod_ = byRef(&doWalletPropose), + .role_ = Role::ADMIN, + .condition_ = NO_CONDITION}, // Event methods - {"subscribe", byRef(&doSubscribe), Role::USER, NO_CONDITION}, - {"unsubscribe", byRef(&doUnsubscribe), Role::USER, NO_CONDITION}, + {.name_ = "subscribe", + .valueMethod_ = byRef(&doSubscribe), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, + {.name_ = "unsubscribe", + .valueMethod_ = byRef(&doUnsubscribe), + .role_ = Role::USER, + .condition_ = NO_CONDITION}, }; class HandlerTable @@ -262,5 +486,4 @@ getHandlerNames() return HandlerTable::instance().getHandlerNames(); } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/Handler.h b/src/xrpld/rpc/detail/Handler.h index 3628962a69..d249409ffe 100644 --- a/src/xrpld/rpc/detail/Handler.h +++ b/src/xrpld/rpc/detail/Handler.h @@ -12,8 +12,7 @@ namespace Json { class Object; } // namespace Json -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { // Under what condition can we call this RPC? enum Condition { @@ -111,5 +110,4 @@ conditionMet(Condition condition_required, T& context) return rpcSUCCESS; } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/LegacyPathFind.cpp b/src/xrpld/rpc/detail/LegacyPathFind.cpp index 5b5bcc540b..11debe00c1 100644 --- a/src/xrpld/rpc/detail/LegacyPathFind.cpp +++ b/src/xrpld/rpc/detail/LegacyPathFind.cpp @@ -1,13 +1,15 @@ -#include #include + +#include #include #include #include #include -namespace xrpl { -namespace RPC { +#include + +namespace xrpl::RPC { LegacyPathFind::LegacyPathFind(bool isAdmin, Application& app) { @@ -45,5 +47,4 @@ LegacyPathFind::~LegacyPathFind() std::atomic LegacyPathFind::inProgress(0); -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/MPTokenIssuanceID.cpp b/src/xrpld/rpc/detail/MPTokenIssuanceID.cpp index 48e5579581..8af745122a 100644 --- a/src/xrpld/rpc/detail/MPTokenIssuanceID.cpp +++ b/src/xrpld/rpc/detail/MPTokenIssuanceID.cpp @@ -1,8 +1,22 @@ #include -namespace xrpl { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -namespace RPC { +#include +#include + +namespace xrpl::RPC { bool canHaveMPTokenIssuanceID( @@ -53,5 +67,4 @@ insertMPTokenIssuanceID( response[jss::mpt_issuance_id] = to_string(result.value()); } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/PathRequest.cpp b/src/xrpld/rpc/detail/PathRequest.cpp index e732ef646f..b4ac252f10 100644 --- a/src/xrpld/rpc/detail/PathRequest.cpp +++ b/src/xrpld/rpc/detail/PathRequest.cpp @@ -1,21 +1,50 @@ +#include + #include #include #include -#include #include +#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include #include -#include #include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/detail/PathRequest.h b/src/xrpld/rpc/detail/PathRequest.h index f699ccb6f8..046c643a84 100644 --- a/src/xrpld/rpc/detail/PathRequest.h +++ b/src/xrpld/rpc/detail/PathRequest.h @@ -24,7 +24,7 @@ class AssetCache; class PathRequestManager; // Return values from parseJson <0 = invalid, >0 = valid -#define PFR_PJ_INVALID -1 +#define PFR_PJ_INVALID (-1) #define PFR_PJ_NOCHANGE 0 class PathRequest final : public InfoSubRequest, @@ -57,7 +57,7 @@ public: PathRequestManager&, beast::Journal journal); - ~PathRequest(); + ~PathRequest() override; bool isNew(); diff --git a/src/xrpld/rpc/detail/PathRequestManager.cpp b/src/xrpld/rpc/detail/PathRequestManager.cpp index 73d57a771c..7508884be1 100644 --- a/src/xrpld/rpc/detail/PathRequestManager.cpp +++ b/src/xrpld/rpc/detail/PathRequestManager.cpp @@ -1,13 +1,28 @@ -#include -#include #include +#include +#include +#include +#include + +#include +#include #include +#include +#include #include #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -134,17 +149,16 @@ PathRequestManager::updateAll(std::shared_ptr const& inLedger) // Remove any dangling weak pointers or weak // pointers that refer to this path request. - auto ret = std::remove_if( - requests_.begin(), requests_.end(), [&removed, &request](auto const& wl) { - auto r = wl.lock(); + auto ret = std::ranges::remove_if(requests_, [&removed, &request](auto const& wl) { + auto r = wl.lock(); - if (r && r != request) - return false; - ++removed; - return true; - }); + if (r && r != request) + return false; + ++removed; + return true; + }); - requests_.erase(ret, requests_.end()); + requests_.erase(ret.begin(), ret.end()); } mustBreak = !newRequests && app_.getLedgerMaster().isNewPathRequest(); @@ -203,7 +217,7 @@ PathRequestManager::insertPathRequest(PathRequest::pointer const& req) // Insert after any older unserviced requests but before // any serviced requests - auto ret = std::find_if(requests_.begin(), requests_.end(), [](auto const& wl) { + auto ret = std::ranges::find_if(requests_, [](auto const& wl) { auto r = wl.lock(); // We come before handled requests diff --git a/src/xrpld/rpc/detail/Pathfinder.cpp b/src/xrpld/rpc/detail/Pathfinder.cpp index 6bb085042b..a31d4522a7 100644 --- a/src/xrpld/rpc/detail/Pathfinder.cpp +++ b/src/xrpld/rpc/detail/Pathfinder.cpp @@ -1,17 +1,46 @@ -#include #include + +#include +#include #include #include +#include +#include +#include #include +#include +#include +#include #include -#include +#include // IWYU pragma: keep +#include #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* @@ -535,10 +564,8 @@ Pathfinder::rankPaths( // width of path // length of path // A better PathRank is lower, best are sorted to the beginning. - std::sort( - rankedPaths.begin(), - rankedPaths.end(), - [&](Pathfinder::PathRank const& a, Pathfinder::PathRank const& b) { + std::ranges::sort( + rankedPaths, [&](Pathfinder::PathRank const& a, Pathfinder::PathRank const& b) { // 1) Higher quality (lower cost) is better if (!convert_all_ && a.quality != b.quality) return a.quality < b.quality; @@ -1131,9 +1158,9 @@ Pathfinder::addLink( if (!candidates.empty()) { - std::sort( - candidates.begin(), - candidates.end(), + std::ranges::sort( + candidates, + std::bind( compareAccountCandidate, mLedger->seq(), diff --git a/src/xrpld/rpc/detail/Pathfinder.h b/src/xrpld/rpc/detail/Pathfinder.h index 48f02bb8f9..964ec8c1d1 100644 --- a/src/xrpld/rpc/detail/Pathfinder.h +++ b/src/xrpld/rpc/detail/Pathfinder.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include diff --git a/src/xrpld/rpc/detail/RPCCall.cpp b/src/xrpld/rpc/detail/RPCCall.cpp index 4396037f2e..749b66791e 100644 --- a/src/xrpld/rpc/detail/RPCCall.cpp +++ b/src/xrpld/rpc/detail/RPCCall.cpp @@ -1,32 +1,56 @@ #include + +#include #include #include #include +#include #include #include +#include #include #include +#include +#include +#include #include #include +#include #include #include +#include #include #include +#include #include #include #include -#include #include +#include #include +#include #include -#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include #include +#include +#include namespace xrpl { @@ -1249,74 +1273,212 @@ public: // Request-response methods // - Returns an error, or the request. // - To modify the method, provide a new method in the request. - {"account_currencies", &RPCParser::parseAccountCurrencies, 1, 3}, - {"account_info", &RPCParser::parseAccountItems, 1, 3}, - {"account_lines", &RPCParser::parseAccountLines, 1, 5}, - {"account_channels", &RPCParser::parseAccountChannels, 1, 3}, - {"account_nfts", &RPCParser::parseAccountItems, 1, 5}, - {"account_objects", &RPCParser::parseAccountItems, 1, 5}, - {"account_offers", &RPCParser::parseAccountItems, 1, 4}, - {"account_tx", &RPCParser::parseAccountTransactions, 1, 8}, - {"amm_info", &RPCParser::parseAsIs, 1, 2}, - {"vault_info", &RPCParser::parseVault, 1, 2}, - {"book_changes", &RPCParser::parseLedgerId, 1, 1}, - {"book_offers", &RPCParser::parseBookOffers, 2, 7}, - {"can_delete", &RPCParser::parseCanDelete, 0, 1}, - {"channel_authorize", &RPCParser::parseChannelAuthorize, 3, 4}, - {"channel_verify", &RPCParser::parseChannelVerify, 4, 4}, - {"connect", &RPCParser::parseConnect, 1, 2}, - {"consensus_info", &RPCParser::parseAsIs, 0, 0}, - {"deposit_authorized", &RPCParser::parseDepositAuthorized, 2, 11}, - {"feature", &RPCParser::parseFeature, 0, 2}, - {"fetch_info", &RPCParser::parseFetchInfo, 0, 1}, - {"gateway_balances", &RPCParser::parseGatewayBalances, 1, -1}, - {"get_counts", &RPCParser::parseGetCounts, 0, 1}, - {"json", &RPCParser::parseJson, 2, 2}, - {"json2", &RPCParser::parseJson2, 1, 1}, - {"ledger", &RPCParser::parseLedger, 0, 2}, - {"ledger_accept", &RPCParser::parseAsIs, 0, 0}, - {"ledger_closed", &RPCParser::parseAsIs, 0, 0}, - {"ledger_current", &RPCParser::parseAsIs, 0, 0}, - {"ledger_entry", &RPCParser::parseLedgerEntry, 1, 2}, - {"ledger_header", &RPCParser::parseLedgerId, 1, 1}, - {"ledger_request", &RPCParser::parseLedgerId, 1, 1}, - {"log_level", &RPCParser::parseLogLevel, 0, 2}, - {"logrotate", &RPCParser::parseAsIs, 0, 0}, - {"manifest", &RPCParser::parseManifest, 1, 1}, - {"owner_info", &RPCParser::parseAccountItems, 1, 3}, - {"peers", &RPCParser::parseAsIs, 0, 0}, - {"ping", &RPCParser::parseAsIs, 0, 0}, - {"print", &RPCParser::parseAsIs, 0, 1}, + {.name = "account_currencies", + .parse = &RPCParser::parseAccountCurrencies, + .minParams = 1, + .maxParams = 3}, + {.name = "account_info", + .parse = &RPCParser::parseAccountItems, + .minParams = 1, + .maxParams = 3}, + {.name = "account_lines", + .parse = &RPCParser::parseAccountLines, + .minParams = 1, + .maxParams = 5}, + {.name = "account_channels", + .parse = &RPCParser::parseAccountChannels, + .minParams = 1, + .maxParams = 3}, + {.name = "account_nfts", + .parse = &RPCParser::parseAccountItems, + .minParams = 1, + .maxParams = 5}, + {.name = "account_objects", + .parse = &RPCParser::parseAccountItems, + .minParams = 1, + .maxParams = 5}, + {.name = "account_offers", + .parse = &RPCParser::parseAccountItems, + .minParams = 1, + .maxParams = 4}, + {.name = "account_tx", + .parse = &RPCParser::parseAccountTransactions, + .minParams = 1, + .maxParams = 8}, + {.name = "amm_info", .parse = &RPCParser::parseAsIs, .minParams = 1, .maxParams = 2}, + {.name = "vault_info", .parse = &RPCParser::parseVault, .minParams = 1, .maxParams = 2}, + {.name = "book_changes", + .parse = &RPCParser::parseLedgerId, + .minParams = 1, + .maxParams = 1}, + {.name = "book_offers", + .parse = &RPCParser::parseBookOffers, + .minParams = 2, + .maxParams = 7}, + {.name = "can_delete", + .parse = &RPCParser::parseCanDelete, + .minParams = 0, + .maxParams = 1}, + {.name = "channel_authorize", + .parse = &RPCParser::parseChannelAuthorize, + .minParams = 3, + .maxParams = 4}, + {.name = "channel_verify", + .parse = &RPCParser::parseChannelVerify, + .minParams = 4, + .maxParams = 4}, + {.name = "connect", .parse = &RPCParser::parseConnect, .minParams = 1, .maxParams = 2}, + {.name = "consensus_info", + .parse = &RPCParser::parseAsIs, + .minParams = 0, + .maxParams = 0}, + {.name = "deposit_authorized", + .parse = &RPCParser::parseDepositAuthorized, + .minParams = 2, + .maxParams = 11}, + {.name = "feature", .parse = &RPCParser::parseFeature, .minParams = 0, .maxParams = 2}, + {.name = "fetch_info", + .parse = &RPCParser::parseFetchInfo, + .minParams = 0, + .maxParams = 1}, + {.name = "gateway_balances", + .parse = &RPCParser::parseGatewayBalances, + .minParams = 1, + .maxParams = -1}, + {.name = "get_counts", + .parse = &RPCParser::parseGetCounts, + .minParams = 0, + .maxParams = 1}, + {.name = "json", .parse = &RPCParser::parseJson, .minParams = 2, .maxParams = 2}, + {.name = "json2", .parse = &RPCParser::parseJson2, .minParams = 1, .maxParams = 1}, + {.name = "ledger", .parse = &RPCParser::parseLedger, .minParams = 0, .maxParams = 2}, + {.name = "ledger_accept", + .parse = &RPCParser::parseAsIs, + .minParams = 0, + .maxParams = 0}, + {.name = "ledger_closed", + .parse = &RPCParser::parseAsIs, + .minParams = 0, + .maxParams = 0}, + {.name = "ledger_current", + .parse = &RPCParser::parseAsIs, + .minParams = 0, + .maxParams = 0}, + {.name = "ledger_entry", + .parse = &RPCParser::parseLedgerEntry, + .minParams = 1, + .maxParams = 2}, + {.name = "ledger_header", + .parse = &RPCParser::parseLedgerId, + .minParams = 1, + .maxParams = 1}, + {.name = "ledger_request", + .parse = &RPCParser::parseLedgerId, + .minParams = 1, + .maxParams = 1}, + {.name = "log_level", + .parse = &RPCParser::parseLogLevel, + .minParams = 0, + .maxParams = 2}, + {.name = "logrotate", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "manifest", + .parse = &RPCParser::parseManifest, + .minParams = 1, + .maxParams = 1}, + {.name = "owner_info", + .parse = &RPCParser::parseAccountItems, + .minParams = 1, + .maxParams = 3}, + {.name = "peers", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "ping", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "print", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 1}, // { "profile", &RPCParser::parseProfile, 1, 9 // }, - {"random", &RPCParser::parseAsIs, 0, 0}, - {"peer_reservations_add", &RPCParser::parsePeerReservationsAdd, 1, 2}, - {"peer_reservations_del", &RPCParser::parsePeerReservationsDel, 1, 1}, - {"peer_reservations_list", &RPCParser::parseAsIs, 0, 0}, - {"ripple_path_find", &RPCParser::parseRipplePathFind, 1, 2}, - {"server_definitions", &RPCParser::parseServerDefinitions, 0, 1}, - {"server_info", &RPCParser::parseServerInfo, 0, 1}, - {"server_state", &RPCParser::parseServerInfo, 0, 1}, - {"sign", &RPCParser::parseSignSubmit, 2, 4}, - {"sign_for", &RPCParser::parseSignFor, 3, 4}, - {"stop", &RPCParser::parseAsIs, 0, 0}, - {"simulate", &RPCParser::parseSimulate, 1, 2}, - {"submit", &RPCParser::parseSignSubmit, 1, 4}, - {"submit_multisigned", &RPCParser::parseSubmitMultiSigned, 1, 1}, - {"transaction_entry", &RPCParser::parseTransactionEntry, 2, 2}, - {"tx", &RPCParser::parseTx, 1, 4}, - {"tx_history", &RPCParser::parseTxHistory, 1, 1}, - {"unl_list", &RPCParser::parseAsIs, 0, 0}, - {"validation_create", &RPCParser::parseValidationCreate, 0, 1}, - {"validator_info", &RPCParser::parseAsIs, 0, 0}, - {"version", &RPCParser::parseAsIs, 0, 0}, - {"wallet_propose", &RPCParser::parseWalletPropose, 0, 1}, - {"internal", &RPCParser::parseInternal, 1, -1}, + {.name = "random", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "peer_reservations_add", + .parse = &RPCParser::parsePeerReservationsAdd, + .minParams = 1, + .maxParams = 2}, + {.name = "peer_reservations_del", + .parse = &RPCParser::parsePeerReservationsDel, + .minParams = 1, + .maxParams = 1}, + {.name = "peer_reservations_list", + .parse = &RPCParser::parseAsIs, + .minParams = 0, + .maxParams = 0}, + {.name = "ripple_path_find", + .parse = &RPCParser::parseRipplePathFind, + .minParams = 1, + .maxParams = 2}, + {.name = "server_definitions", + .parse = &RPCParser::parseServerDefinitions, + .minParams = 0, + .maxParams = 1}, + {.name = "server_info", + .parse = &RPCParser::parseServerInfo, + .minParams = 0, + .maxParams = 1}, + {.name = "server_state", + .parse = &RPCParser::parseServerInfo, + .minParams = 0, + .maxParams = 1}, + {.name = "sign", .parse = &RPCParser::parseSignSubmit, .minParams = 2, .maxParams = 4}, + {.name = "sign_for", .parse = &RPCParser::parseSignFor, .minParams = 3, .maxParams = 4}, + {.name = "stop", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "simulate", + .parse = &RPCParser::parseSimulate, + .minParams = 1, + .maxParams = 2}, + {.name = "submit", + .parse = &RPCParser::parseSignSubmit, + .minParams = 1, + .maxParams = 4}, + {.name = "submit_multisigned", + .parse = &RPCParser::parseSubmitMultiSigned, + .minParams = 1, + .maxParams = 1}, + {.name = "transaction_entry", + .parse = &RPCParser::parseTransactionEntry, + .minParams = 2, + .maxParams = 2}, + {.name = "tx", .parse = &RPCParser::parseTx, .minParams = 1, .maxParams = 4}, + {.name = "tx_history", + .parse = &RPCParser::parseTxHistory, + .minParams = 1, + .maxParams = 1}, + {.name = "unl_list", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "validation_create", + .parse = &RPCParser::parseValidationCreate, + .minParams = 0, + .maxParams = 1}, + {.name = "validator_info", + .parse = &RPCParser::parseAsIs, + .minParams = 0, + .maxParams = 0}, + {.name = "version", .parse = &RPCParser::parseAsIs, .minParams = 0, .maxParams = 0}, + {.name = "wallet_propose", + .parse = &RPCParser::parseWalletPropose, + .minParams = 0, + .maxParams = 1}, + {.name = "internal", + .parse = &RPCParser::parseInternal, + .minParams = 1, + .maxParams = -1}, // Event methods - {"path_find", &RPCParser::parseEvented, -1, -1}, - {"subscribe", &RPCParser::parseEvented, -1, -1}, - {"unsubscribe", &RPCParser::parseEvented, -1, -1}, + {.name = "path_find", + .parse = &RPCParser::parseEvented, + .minParams = -1, + .maxParams = -1}, + {.name = "subscribe", + .parse = &RPCParser::parseEvented, + .minParams = -1, + .maxParams = -1}, + {.name = "unsubscribe", + .parse = &RPCParser::parseEvented, + .minParams = -1, + .maxParams = -1}, }; auto const count = jvParams.size(); @@ -1412,8 +1574,8 @@ struct RPCCallImp // Parse reply JLOG(j.debug()) << "RPC reply: " << strData << std::endl; - if (strData.find("Unable to parse request") == 0 || - strData.find(jss::invalid_API_version.c_str()) == 0) + if (strData.starts_with("Unable to parse request") || + strData.starts_with(jss::invalid_API_version.c_str())) Throw(strData); Json::Reader reader; Json::Value jvReply; @@ -1490,6 +1652,7 @@ rpcCmdToJson( } else if (jvRequest.isArray()) { + // NOLINTNEXTLINE(modernize-use-ranges) std::for_each(jvRequest.begin(), jvRequest.end(), insert_api_version); } @@ -1632,7 +1795,7 @@ rpcClient( // YYY We could have a command line flag for single line output for // scripts. YYY We would intercept output here and simplify it. } - catch (RequestNotParsable& e) + catch (RequestNotParsable const& e) { jvOutput = rpcError(rpcINVALID_PARAMS); jvOutput["error_what"] = e.what(); diff --git a/src/xrpld/rpc/detail/RPCHandler.cpp b/src/xrpld/rpc/detail/RPCHandler.cpp index 1d8e1168b4..cbd08a2677 100644 --- a/src/xrpld/rpc/detail/RPCHandler.cpp +++ b/src/xrpld/rpc/detail/RPCHandler.cpp @@ -1,29 +1,29 @@ -#include -#include -#include +#include + #include #include #include -#include #include +#include #include #include #include +#include #include #include -#include +#include // IWYU pragma: keep #include #include #include -#include -#include #include #include +#include +#include +#include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { namespace { @@ -234,5 +234,4 @@ roleRequired(unsigned int version, bool betaEnabled, std::string const& method) return handler->role_; } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/RPCHelpers.cpp b/src/xrpld/rpc/detail/RPCHelpers.cpp index e7b56feac4..1bf6d32bf9 100644 --- a/src/xrpld/rpc/detail/RPCHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCHelpers.cpp @@ -1,23 +1,49 @@ -#include +#include + #include #include -#include -#include +#include +#include +#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include -#include #include -#include -namespace xrpl { -namespace RPC { +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace xrpl::RPC { std::uint64_t getStartHint(std::shared_ptr const& sle, AccountID const& accountID) @@ -444,5 +470,4 @@ parseSubUnsubJson( return rpcSUCCESS; } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp b/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp index 955533c776..0934289226 100644 --- a/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp +++ b/src/xrpld/rpc/detail/RPCLedgerHelpers.cpp @@ -1,15 +1,32 @@ -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include -#include +#include -namespace xrpl { -namespace RPC { +#include +#include + +namespace xrpl::RPC { namespace { @@ -475,5 +492,4 @@ getOrAcquireLedger(RPC::JsonContext const& context) RPC::make_error(rpcNOT_READY, "findCreate failed to return an inbound ledger")); } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/RPCSub.cpp b/src/xrpld/rpc/detail/RPCSub.cpp index 3b5b56d937..f9cd860908 100644 --- a/src/xrpld/rpc/detail/RPCSub.cpp +++ b/src/xrpld/rpc/detail/RPCSub.cpp @@ -1,12 +1,28 @@ -#include #include +#include + #include #include #include -#include +#include +#include +#include +#include +#include // IWYU pragma: keep +#include +#include + +#include #include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -19,15 +35,15 @@ public: boost::asio::io_context& io_context, JobQueue& jobQueue, std::string const& strUrl, - std::string const& strUsername, - std::string const& strPassword, + std::string strUsername, + std::string strPassword, ServiceRegistry& registry) : RPCSub(source) , m_io_context(io_context) , m_jobQueue(jobQueue) , mUrl(strUrl) - , mUsername(strUsername) - , mPassword(strPassword) + , mUsername(std::move(strUsername)) + , mPassword(std::move(strPassword)) , j_(registry.getJournal("RPCSub")) , logs_(registry.getLogs()) { @@ -63,7 +79,7 @@ public: << " ssl= " << (mSSL ? "yes" : "no") << " path='" << mPath << "'"; } - ~RPCSubImp() = default; + ~RPCSubImp() override = default; void send(Json::Value const& jvObj, bool broadcast) override @@ -73,7 +89,7 @@ public: auto jm = broadcast ? j_.debug() : j_.info(); JLOG(jm) << "RPCCall::fromNetwork push: " << jvObj; - mDeque.push_back(std::make_pair(mSeq++, jvObj)); + mDeque.emplace_back(mSeq++, jvObj); if (!mSending) { diff --git a/src/xrpld/rpc/detail/Role.cpp b/src/xrpld/rpc/detail/Role.cpp index f832e43119..325b7eb3c6 100644 --- a/src/xrpld/rpc/detail/Role.cpp +++ b/src/xrpld/rpc/detail/Role.cpp @@ -1,9 +1,25 @@ #include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include #include -#include #include +#include +#include +#include +#include namespace xrpl { @@ -193,7 +209,7 @@ extractIpAddrFromField(std::string_view field) // We may have an IPv6 address in square brackets. Scan up to the // closing square bracket. - auto const closeBracket = std::find_if_not(ret.begin(), ret.end(), [](unsigned char c) { + auto const closeBracket = std::ranges::find_if_not(ret, [](unsigned char c) { return std::isxdigit(c) || c == ':' || c == '.' || c == ' '; }); @@ -213,8 +229,8 @@ extractIpAddrFromField(std::string_view field) // then there cannot be an appended port. In that case we're done. { // Skip any leading hex digits. - auto const colon = std::find_if_not( - ret.begin(), ret.end(), [](unsigned char c) { return std::isxdigit(c) || c == ' '; }); + auto const colon = std::ranges::find_if_not( + ret, [](unsigned char c) { return std::isxdigit(c) || c == ' '; }); // If the string starts with optional hex digits followed by a colon // it's an IVv6 address. We're done. diff --git a/src/xrpld/rpc/detail/ServerHandler.cpp b/src/xrpld/rpc/detail/ServerHandler.cpp index e5cc7a83bf..db6dad2f1c 100644 --- a/src/xrpld/rpc/detail/ServerHandler.cpp +++ b/src/xrpld/rpc/detail/ServerHandler.cpp @@ -1,38 +1,74 @@ +#include + #include #include #include #include #include -#include #include #include -#include +#include #include #include #include +#include #include #include +#include +#include #include +#include +#include #include +#include +#include #include #include +#include #include #include +#include +#include +#include +#include #include #include +#include +#include #include +#include #include +#include #include +#include #include -#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -74,7 +110,7 @@ authorized(Port const& port, std::map const& h) return true; auto const it = h.find("authorization"); - if ((it == h.end()) || (it->second.substr(0, 6) != "Basic ")) + if ((it == h.end()) || (!it->second.starts_with("Basic "))) return false; std::string strUserPass64 = it->second.substr(6); boost::trim(strUserPass64); @@ -241,9 +277,8 @@ build_map(boost::beast::http::fields const& h) // key cannot be a std::string_view because it needs to be used in // map and along with iterators std::string key(e.name_string()); - std::transform(key.begin(), key.end(), key.begin(), [](auto kc) { - return std::tolower(static_cast(kc)); - }); + std::ranges::transform( + key, key.begin(), [](auto kc) { return std::tolower(static_cast(kc)); }); c[key] = e.value(); } return c; @@ -439,18 +474,18 @@ ServerHandler::processSession( else { RPC::JsonContext context{ - {app_.getJournal("RPCHandler"), - app_, - loadType, - app_.getOPs(), - app_.getLedgerMaster(), - is->getConsumer(), - role, - coro, - is, - apiVersion}, + {.j = app_.getJournal("RPCHandler"), + .app = app_, + .loadType = loadType, + .netOps = app_.getOPs(), + .ledgerMaster = app_.getLedgerMaster(), + .consumer = is->getConsumer(), + .role = role, + .coro = coro, + .infoSub = is, + .apiVersion = apiVersion}, jv, - {is->user(), is->forwarded_for()}}; + {.user = is->user(), .forwardedFor = is->forwarded_for()}}; auto start = std::chrono::system_clock::now(); RPC::doCommand(context, jr[jss::result]); @@ -822,18 +857,18 @@ ServerHandler::processRequest( Resource::Charge loadType = Resource::feeReferenceRPC; RPC::JsonContext context{ - {m_journal, - app_, - loadType, - m_networkOPs, - app_.getLedgerMaster(), - usage, - role, - coro, - InfoSub::pointer(), - apiVersion}, + {.j = m_journal, + .app = app_, + .loadType = loadType, + .netOps = m_networkOPs, + .ledgerMaster = app_.getLedgerMaster(), + .consumer = usage, + .role = role, + .coro = coro, + .infoSub = InfoSub::pointer(), + .apiVersion = apiVersion}, params, - {user, forwardedFor}}; + {.user = user, .forwardedFor = forwardedFor}}; Json::Value result; auto start = std::chrono::system_clock::now(); @@ -1196,9 +1231,8 @@ setup_Client(ServerHandler::Setup& setup) static void setup_Overlay(ServerHandler::Setup& setup) { - auto const iter = std::find_if(setup.ports.cbegin(), setup.ports.cend(), [](Port const& port) { - return port.protocol.count("peer") != 0; - }); + auto const iter = std::ranges::find_if( + setup.ports, [](Port const& port) { return port.protocol.count("peer") != 0; }); if (iter == setup.ports.cend()) { setup.overlay = {}; diff --git a/src/xrpld/rpc/detail/Status.cpp b/src/xrpld/rpc/detail/Status.cpp index ce3082f0fa..c622b9a7e2 100644 --- a/src/xrpld/rpc/detail/Status.cpp +++ b/src/xrpld/rpc/detail/Status.cpp @@ -1,9 +1,15 @@ #include -#include +#include +#include +#include +#include +#include -namespace xrpl { -namespace RPC { +#include +#include + +namespace xrpl::RPC { std::string Status::codeString() const @@ -79,5 +85,4 @@ Status::toString() const return ""; } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/TransactionSign.cpp b/src/xrpld/rpc/detail/TransactionSign.cpp index d6909d555b..92b6d73050 100644 --- a/src/xrpld/rpc/detail/TransactionSign.cpp +++ b/src/xrpld/rpc/detail/TransactionSign.cpp @@ -1,31 +1,68 @@ +#include + #include #include #include #include #include +#include +#include #include #include #include -#include +#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include +#include #include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include +#include #include // Validity::Valid #include #include -#include +#include +#include +#include +#include #include +#include +#include +#include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { namespace detail { // Used to pass extra parameters used when returning a @@ -619,7 +656,7 @@ transactionPreProcessImpl( stTx = std::make_shared(std::move(parsed.object.value())); } - catch (STObject::FieldErr& err) + catch (STObject::FieldErr const& err) { return RPC::make_error(rpcINVALID_PARAMS, err.what()); } @@ -1068,15 +1105,14 @@ sortAndValidateSigners(STArray& signers, AccountID const& signingForID) return RPC::make_param_error("Signers array may not be empty."); // Signers must be sorted by Account. - std::sort(signers.begin(), signers.end(), [](STObject const& a, STObject const& b) { + std::ranges::sort(signers, [](STObject const& a, STObject const& b) { return (a[sfAccount] < b[sfAccount]); }); // Signers may not contain any duplicates. - auto const dupIter = std::adjacent_find( - signers.begin(), signers.end(), [](STObject const& a, STObject const& b) { - return (a[sfAccount] == b[sfAccount]); - }); + auto const dupIter = std::ranges::adjacent_find( + signers, + [](STObject const& a, STObject const& b) { return (a[sfAccount] == b[sfAccount]); }); if (dupIter != signers.end()) { @@ -1087,8 +1123,7 @@ sortAndValidateSigners(STArray& signers, AccountID const& signingForID) } // An account may not sign for itself. - if (signers.end() != - std::find_if(signers.begin(), signers.end(), [&signingForID](STObject const& elem) { + if (signers.end() != std::ranges::find_if(signers, [&signingForID](STObject const& elem) { return elem[sfAccount] == signingForID; })) { @@ -1291,7 +1326,7 @@ transactionSubmitMultiSigned( { stTx = std::make_shared(std::move(parsedTx_json.object.value())); } - catch (STObject::FieldErr& err) + catch (STObject::FieldErr const& err) { return RPC::make_error(rpcINVALID_PARAMS, err.what()); } @@ -1353,7 +1388,7 @@ transactionSubmitMultiSigned( return RPC::make_param_error("tx_json.Signers array may not be empty."); // The Signers array may only contain Signer objects. - if (std::find_if_not(signers.begin(), signers.end(), [](STObject const& obj) { + if (std::ranges::find_if_not(signers, [](STObject const& obj) { return ( // A Signer object always contains these fields and no // others. @@ -1390,5 +1425,4 @@ transactionSubmitMultiSigned( return transactionFormatResultImpl(txn.second, apiVersion); } -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/detail/TransactionSign.h b/src/xrpld/rpc/detail/TransactionSign.h index 62a34d931e..8ffcb44a84 100644 --- a/src/xrpld/rpc/detail/TransactionSign.h +++ b/src/xrpld/rpc/detail/TransactionSign.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include diff --git a/src/xrpld/rpc/detail/TrustLine.cpp b/src/xrpld/rpc/detail/TrustLine.cpp index c2bc152448..5b7b555eca 100644 --- a/src/xrpld/rpc/detail/TrustLine.cpp +++ b/src/xrpld/rpc/detail/TrustLine.cpp @@ -1,9 +1,17 @@ #include +#include +#include #include +#include +#include +#include #include +#include #include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/detail/TrustLine.h b/src/xrpld/rpc/detail/TrustLine.h index a0fce8847a..59fa2e73f3 100644 --- a/src/xrpld/rpc/detail/TrustLine.h +++ b/src/xrpld/rpc/detail/TrustLine.h @@ -32,6 +32,10 @@ enum class LineDirection : bool { incoming = false, outgoing = true }; */ class TrustLineBase { +public: + TrustLineBase& + operator=(TrustLineBase const&) = delete; + protected: // This class should not be instantiated directly. Use one of the derived // classes. @@ -39,8 +43,6 @@ protected: ~TrustLineBase() = default; TrustLineBase(TrustLineBase const&) = default; - TrustLineBase& - operator=(TrustLineBase const&) = delete; TrustLineBase(TrustLineBase&&) = default; public: @@ -69,25 +71,25 @@ public: bool getAuth() const { - return mFlags & (mViewLowest ? lsfLowAuth : lsfHighAuth); + return (mFlags & (mViewLowest ? lsfLowAuth : lsfHighAuth)) != 0u; } bool getAuthPeer() const { - return mFlags & (!mViewLowest ? lsfLowAuth : lsfHighAuth); + return (mFlags & (!mViewLowest ? lsfLowAuth : lsfHighAuth)) != 0u; } bool getNoRipple() const { - return mFlags & (mViewLowest ? lsfLowNoRipple : lsfHighNoRipple); + return (mFlags & (mViewLowest ? lsfLowNoRipple : lsfHighNoRipple)) != 0u; } bool getNoRipplePeer() const { - return mFlags & (!mViewLowest ? lsfLowNoRipple : lsfHighNoRipple); + return (mFlags & (!mViewLowest ? lsfLowNoRipple : lsfHighNoRipple)) != 0u; } LineDirection @@ -106,28 +108,28 @@ public: bool getFreeze() const { - return mFlags & (mViewLowest ? lsfLowFreeze : lsfHighFreeze); + return (mFlags & (mViewLowest ? lsfLowFreeze : lsfHighFreeze)) != 0u; } /** Have we set the deep freeze flag on our peer */ bool getDeepFreeze() const { - return mFlags & (mViewLowest ? lsfLowDeepFreeze : lsfHighDeepFreeze); + return (mFlags & (mViewLowest ? lsfLowDeepFreeze : lsfHighDeepFreeze)) != 0u; } /** Has the peer set the freeze flag on us */ bool getFreezePeer() const { - return mFlags & (!mViewLowest ? lsfLowFreeze : lsfHighFreeze); + return (mFlags & (!mViewLowest ? lsfLowFreeze : lsfHighFreeze)) != 0u; } /** Has the peer set the deep freeze flag on us */ bool getDeepFreezePeer() const { - return mFlags & (!mViewLowest ? lsfLowDeepFreeze : lsfHighDeepFreeze); + return (mFlags & (!mViewLowest ? lsfLowDeepFreeze : lsfHighDeepFreeze)) != 0u; } STAmount const& diff --git a/src/xrpld/rpc/detail/Tuning.h b/src/xrpld/rpc/detail/Tuning.h index e9dd2c37d7..eb3cfa0ebf 100644 --- a/src/xrpld/rpc/detail/Tuning.h +++ b/src/xrpld/rpc/detail/Tuning.h @@ -1,11 +1,8 @@ #pragma once -namespace xrpl { -namespace RPC { - /** Tuned constants. */ /** @{ */ -namespace Tuning { +namespace xrpl::RPC::Tuning { /** Represents RPC limit parameter values that have a min, default and max. */ struct LimitRange @@ -14,31 +11,31 @@ struct LimitRange }; /** Limits for the account_lines command. */ -static LimitRange constexpr accountLines = {10, 200, 400}; +static LimitRange constexpr accountLines = {.rmin = 10, .rDefault = 200, .rmax = 400}; /** Limits for the account_channels command. */ -static LimitRange constexpr accountChannels = {10, 200, 400}; +static LimitRange constexpr accountChannels = {.rmin = 10, .rDefault = 200, .rmax = 400}; /** Limits for the account_objects command. */ -static LimitRange constexpr accountObjects = {10, 200, 400}; +static LimitRange constexpr accountObjects = {.rmin = 10, .rDefault = 200, .rmax = 400}; /** Limits for the account_offers command. */ -static LimitRange constexpr accountOffers = {10, 200, 400}; +static LimitRange constexpr accountOffers = {.rmin = 10, .rDefault = 200, .rmax = 400}; /** Limits for the account_tx command. */ -static LimitRange constexpr accountTx = {10, 200, 400}; +static LimitRange constexpr accountTx = {.rmin = 10, .rDefault = 200, .rmax = 400}; /** Limits for the book_offers command. */ -static LimitRange constexpr bookOffers = {0, 60, 100}; +static LimitRange constexpr bookOffers = {.rmin = 1, .rDefault = 60, .rmax = 100}; /** Limits for the no_ripple_check command. */ -static LimitRange constexpr noRippleCheck = {10, 300, 400}; +static LimitRange constexpr noRippleCheck = {.rmin = 10, .rDefault = 300, .rmax = 400}; /** Limits for the account_nftokens command, in pages. */ -static LimitRange constexpr accountNFTokens = {20, 100, 400}; +static LimitRange constexpr accountNFTokens = {.rmin = 20, .rDefault = 100, .rmax = 400}; /** Limits for the nft_buy_offers & nft_sell_offers commands. */ -static LimitRange constexpr nftOffers = {50, 250, 500}; +static LimitRange constexpr nftOffers = {.rmin = 50, .rDefault = 250, .rmax = 500}; static int constexpr defaultAutoFillFeeMultiplier = 10; static int constexpr defaultAutoFillFeeDivisor = 1; @@ -55,7 +52,7 @@ static int constexpr binaryPageLength = 2048; static int constexpr jsonPageLength = 256; /** Maximum number of pages in a LedgerData response. */ -inline int constexpr pageLength(bool isBinary) +int constexpr pageLength(bool isBinary) { return isBinary ? binaryPageLength : jsonPageLength; } @@ -66,8 +63,5 @@ static int constexpr max_src_cur = 18; /** Maximum number of auto source currencies in a path find request. */ static int constexpr max_auto_src_cur = 88; -} // namespace Tuning +} // namespace xrpl::RPC::Tuning /** @} */ - -} // namespace RPC -} // namespace xrpl diff --git a/src/xrpld/rpc/handlers/ChannelVerify.cpp b/src/xrpld/rpc/handlers/ChannelVerify.cpp index 91b23db4e6..c1c7ab750b 100644 --- a/src/xrpld/rpc/handlers/ChannelVerify.cpp +++ b/src/xrpld/rpc/handlers/ChannelVerify.cpp @@ -1,13 +1,22 @@ #include #include +#include #include +#include +#include #include #include +#include #include +#include +#include #include +#include +#include #include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/VaultInfo.cpp b/src/xrpld/rpc/handlers/VaultInfo.cpp index 4a704e0b0b..711478658a 100644 --- a/src/xrpld/rpc/handlers/VaultInfo.cpp +++ b/src/xrpld/rpc/handlers/VaultInfo.cpp @@ -1,12 +1,17 @@ #include #include +#include #include #include +#include #include #include +#include #include -#include + +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/account/AccountChannels.cpp b/src/xrpld/rpc/handlers/account/AccountChannels.cpp index 7bf8a03f21..1fa492a3c0 100644 --- a/src/xrpld/rpc/handlers/account/AccountChannels.cpp +++ b/src/xrpld/rpc/handlers/account/AccountChannels.cpp @@ -3,15 +3,36 @@ #include #include +#include +#include +#include +#include +#include +#include #include -#include #include +#include #include +#include +#include #include #include +#include #include +#include #include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { void @@ -93,7 +114,7 @@ doAccountChannels(RPC::JsonContext& context) AccountID const& accountID; std::optional const& raDstAccount; }; - VisitData visitData = {{}, accountID, raDstAccount}; + VisitData visitData = {.items = {}, .accountID = accountID, .raDstAccount = raDstAccount}; visitData.items.reserve(limit); uint256 startAfter = beast::zero; std::uint64_t startHint = 0; diff --git a/src/xrpld/rpc/handlers/account/AccountCurrencies.cpp b/src/xrpld/rpc/handlers/account/AccountCurrencies.cpp index 3713823934..dfcfffbf27 100644 --- a/src/xrpld/rpc/handlers/account/AccountCurrencies.cpp +++ b/src/xrpld/rpc/handlers/account/AccountCurrencies.cpp @@ -2,11 +2,20 @@ #include #include +#include #include +#include #include +#include #include +#include +#include #include +#include +#include +#include + namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/account/AccountInfo.cpp b/src/xrpld/rpc/handlers/account/AccountInfo.cpp index becaea8a51..019ff83def 100644 --- a/src/xrpld/rpc/handlers/account/AccountInfo.cpp +++ b/src/xrpld/rpc/handlers/account/AccountInfo.cpp @@ -1,18 +1,36 @@ #include #include #include -#include #include +#include +#include +#include +#include +#include #include #include #include +#include #include +#include #include -#include +#include +#include +#include +#include #include #include +#include + +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/account/AccountLines.cpp b/src/xrpld/rpc/handlers/account/AccountLines.cpp index 7985417b50..5a879f0cbe 100644 --- a/src/xrpld/rpc/handlers/account/AccountLines.cpp +++ b/src/xrpld/rpc/handlers/account/AccountLines.cpp @@ -4,13 +4,34 @@ #include #include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include #include +#include +#include +#include #include #include +#include +#include + +#include +#include +#include +#include +#include +#include + namespace xrpl { void @@ -117,7 +138,12 @@ doAccountLines(RPC::JsonContext& context) bool ignoreDefault; uint32_t foundCount; }; - VisitData visitData = {{}, accountID, raPeerAccount, ignoreDefault, 0}; + VisitData visitData = { + .items = {}, + .accountID = accountID, + .raPeerAccount = raPeerAccount, + .ignoreDefault = ignoreDefault, + .foundCount = 0}; uint256 startAfter = beast::zero; std::uint64_t startHint = 0; diff --git a/src/xrpld/rpc/handlers/account/AccountNFTs.cpp b/src/xrpld/rpc/handlers/account/AccountNFTs.cpp index e1ead76e85..605dd3b07c 100644 --- a/src/xrpld/rpc/handlers/account/AccountNFTs.cpp +++ b/src/xrpld/rpc/handlers/account/AccountNFTs.cpp @@ -3,15 +3,23 @@ #include #include +#include +#include #include -#include +#include #include #include +#include #include +#include #include +#include #include #include +#include +#include + namespace xrpl { /** General RPC command that can retrieve objects in the account root. diff --git a/src/xrpld/rpc/handlers/account/AccountObjects.cpp b/src/xrpld/rpc/handlers/account/AccountObjects.cpp index 2e8462de2d..5b172cd4c3 100644 --- a/src/xrpld/rpc/handlers/account/AccountObjects.cpp +++ b/src/xrpld/rpc/handlers/account/AccountObjects.cpp @@ -3,17 +3,26 @@ #include #include +#include +#include +#include #include -#include +#include #include #include #include #include +#include #include #include #include +#include +#include +#include +#include #include +#include namespace xrpl { @@ -42,7 +51,7 @@ getAccountObjects( auto typeMatchesFilter = [](std::vector const& typeFilter, LedgerEntryType ledgerType) { - auto it = std::find(typeFilter.begin(), typeFilter.end(), ledgerType); + auto it = std::ranges::find(typeFilter, ledgerType); return it != typeFilter.end(); }; @@ -253,18 +262,19 @@ doAccountObjects(RPC::JsonContext& context) Json::StaticString name; LedgerEntryType type; } static constexpr deletionBlockers[] = { - {jss::check, ltCHECK}, - {jss::escrow, ltESCROW}, - {jss::nft_page, ltNFTOKEN_PAGE}, - {jss::payment_channel, ltPAYCHAN}, - {jss::state, ltRIPPLE_STATE}, - {jss::xchain_owned_claim_id, ltXCHAIN_OWNED_CLAIM_ID}, - {jss::xchain_owned_create_account_claim_id, ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID}, - {jss::bridge, ltBRIDGE}, - {jss::mpt_issuance, ltMPTOKEN_ISSUANCE}, - {jss::mptoken, ltMPTOKEN}, - {jss::permissioned_domain, ltPERMISSIONED_DOMAIN}, - {jss::vault, ltVAULT}, + {.name = jss::check, .type = ltCHECK}, + {.name = jss::escrow, .type = ltESCROW}, + {.name = jss::nft_page, .type = ltNFTOKEN_PAGE}, + {.name = jss::payment_channel, .type = ltPAYCHAN}, + {.name = jss::state, .type = ltRIPPLE_STATE}, + {.name = jss::xchain_owned_claim_id, .type = ltXCHAIN_OWNED_CLAIM_ID}, + {.name = jss::xchain_owned_create_account_claim_id, + .type = ltXCHAIN_OWNED_CREATE_ACCOUNT_CLAIM_ID}, + {.name = jss::bridge, .type = ltBRIDGE}, + {.name = jss::mpt_issuance, .type = ltMPTOKEN_ISSUANCE}, + {.name = jss::mptoken, .type = ltMPTOKEN}, + {.name = jss::permissioned_domain, .type = ltPERMISSIONED_DOMAIN}, + {.name = jss::vault, .type = ltVAULT}, }; typeFilter.emplace(); diff --git a/src/xrpld/rpc/handlers/account/AccountOffers.cpp b/src/xrpld/rpc/handlers/account/AccountOffers.cpp index 38cc7c1dc5..19b88e7499 100644 --- a/src/xrpld/rpc/handlers/account/AccountOffers.cpp +++ b/src/xrpld/rpc/handlers/account/AccountOffers.cpp @@ -3,15 +3,33 @@ #include #include +#include +#include +#include +#include #include #include -#include #include +#include #include +#include +#include #include +#include +#include #include #include +#include +#include + +#include +#include +#include +#include +#include +#include + namespace xrpl { void diff --git a/src/xrpld/rpc/handlers/account/AccountTx.cpp b/src/xrpld/rpc/handlers/account/AccountTx.cpp index acd5912ee0..c01fc044e7 100644 --- a/src/xrpld/rpc/handlers/account/AccountTx.cpp +++ b/src/xrpld/rpc/handlers/account/AccountTx.cpp @@ -7,19 +7,35 @@ #include #include #include +#include #include #include #include +#include +#include +#include +#include +#include #include #include +#include #include +#include #include #include -#include +#include #include +#include #include +#include +#include +#include +#include +#include +#include + namespace xrpl { using TxnsData = RelationalDatabase::AccountTxs; @@ -57,7 +73,7 @@ parseLedgerArgs(RPC::Context& context, Json::Value const& params) ? params[jss::ledger_index_max].asUInt() : UINT32_MAX; - return LedgerRange{min, max}; + return LedgerRange{.min = min, .max = max}; } if (params.isMember(jss::ledger_hash)) { @@ -189,7 +205,7 @@ getLedgerRange(RPC::Context& context, std::optional const& ledg if (status) return status; } - return LedgerRange{uLedgerMin, uLedgerMax}; + return LedgerRange{.min = uLedgerMin, .max = uLedgerMax}; } std::pair @@ -211,7 +227,11 @@ doAccountTxHelp(RPC::Context& context, AccountTxArgs const& args) result.marker = args.marker; RelationalDatabase::AccountTxPageOptions const options = { - args.account, result.ledgerRange, result.marker, args.limit, isUnlimited(context.role)}; + .account = args.account, + .ledgerRange = result.ledgerRange, + .marker = result.marker, + .limit = args.limit, + .bAdmin = isUnlimited(context.role)}; auto& db = context.app.getRelationalDatabase(); @@ -426,7 +446,8 @@ doAccountTx(RPC::JsonContext& context) status.inject(response); return response; } - args.marker = {token[jss::ledger].asUInt(), token[jss::seq].asUInt()}; + args.marker = { + .ledgerSeq = token[jss::ledger].asUInt(), .txnSeq = token[jss::seq].asUInt()}; } auto res = doAccountTxHelp(context, args); diff --git a/src/xrpld/rpc/handlers/account/GatewayBalances.cpp b/src/xrpld/rpc/handlers/account/GatewayBalances.cpp index 4dd169d5b5..81e464ba87 100644 --- a/src/xrpld/rpc/handlers/account/GatewayBalances.cpp +++ b/src/xrpld/rpc/handlers/account/GatewayBalances.cpp @@ -3,14 +3,30 @@ #include #include +#include +#include #include #include #include #include +#include +#include +#include #include +#include +#include +#include #include #include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { // Query: diff --git a/src/xrpld/rpc/handlers/account/NoRippleCheck.cpp b/src/xrpld/rpc/handlers/account/NoRippleCheck.cpp index 31662b63a5..54964be8da 100644 --- a/src/xrpld/rpc/handlers/account/NoRippleCheck.cpp +++ b/src/xrpld/rpc/handlers/account/NoRippleCheck.cpp @@ -2,17 +2,26 @@ #include #include #include -#include #include +#include +#include #include #include +#include #include +#include +#include #include +#include #include +#include #include #include +#include +#include + namespace xrpl { static void diff --git a/src/xrpld/rpc/handlers/account/OwnerInfo.cpp b/src/xrpld/rpc/handlers/account/OwnerInfo.cpp index 659a149e20..d287d2fd25 100644 --- a/src/xrpld/rpc/handlers/account/OwnerInfo.cpp +++ b/src/xrpld/rpc/handlers/account/OwnerInfo.cpp @@ -2,11 +2,15 @@ #include #include +#include #include #include #include #include +#include +#include + namespace xrpl { // { diff --git a/src/xrpld/rpc/handlers/admin/BlackList.cpp b/src/xrpld/rpc/handlers/admin/BlackList.cpp index 86abe53686..dfcb1aaa3a 100644 --- a/src/xrpld/rpc/handlers/admin/BlackList.cpp +++ b/src/xrpld/rpc/handlers/admin/BlackList.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include diff --git a/src/xrpld/rpc/handlers/admin/UnlList.cpp b/src/xrpld/rpc/handlers/admin/UnlList.cpp index 31f41b4a33..79eb2acf29 100644 --- a/src/xrpld/rpc/handlers/admin/UnlList.cpp +++ b/src/xrpld/rpc/handlers/admin/UnlList.cpp @@ -2,8 +2,12 @@ #include #include -#include +#include +#include #include +#include + +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/data/CanDelete.cpp b/src/xrpld/rpc/handlers/admin/data/CanDelete.cpp index 7d881e7d2e..59d4b3a75c 100644 --- a/src/xrpld/rpc/handlers/admin/data/CanDelete.cpp +++ b/src/xrpld/rpc/handlers/admin/data/CanDelete.cpp @@ -3,12 +3,18 @@ #include #include +#include #include +#include #include #include #include +#include +#include +#include + namespace xrpl { // can_delete [||now|always|never] diff --git a/src/xrpld/rpc/handlers/admin/data/LedgerCleaner.cpp b/src/xrpld/rpc/handlers/admin/data/LedgerCleaner.cpp index 408cd16023..71dcb6d62f 100644 --- a/src/xrpld/rpc/handlers/admin/data/LedgerCleaner.cpp +++ b/src/xrpld/rpc/handlers/admin/data/LedgerCleaner.cpp @@ -1,4 +1,5 @@ #include + #include #include #include diff --git a/src/xrpld/rpc/handlers/admin/data/LedgerRequest.cpp b/src/xrpld/rpc/handlers/admin/data/LedgerRequest.cpp index da29addd2d..ec31529226 100644 --- a/src/xrpld/rpc/handlers/admin/data/LedgerRequest.cpp +++ b/src/xrpld/rpc/handlers/admin/data/LedgerRequest.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include diff --git a/src/xrpld/rpc/handlers/admin/keygen/ValidationCreate.cpp b/src/xrpld/rpc/handlers/admin/keygen/ValidationCreate.cpp index c82ddffea5..27ae21d393 100644 --- a/src/xrpld/rpc/handlers/admin/keygen/ValidationCreate.cpp +++ b/src/xrpld/rpc/handlers/admin/keygen/ValidationCreate.cpp @@ -1,9 +1,16 @@ #include +#include #include +#include +#include #include +#include #include #include +#include + +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp b/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp index 428dfb5380..bbd8f622be 100644 --- a/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp +++ b/src/xrpld/rpc/handlers/admin/keygen/WalletPropose.cpp @@ -1,8 +1,11 @@ -#include -#include #include +#include +#include + #include +#include +#include #include #include #include @@ -10,9 +13,12 @@ #include #include #include +#include #include #include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/log/LogLevel.cpp b/src/xrpld/rpc/handlers/admin/log/LogLevel.cpp index e1e637435c..9cfa321654 100644 --- a/src/xrpld/rpc/handlers/admin/log/LogLevel.cpp +++ b/src/xrpld/rpc/handlers/admin/log/LogLevel.cpp @@ -9,6 +9,10 @@ #include +#include +#include +#include + namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/admin/log/LogRotate.cpp b/src/xrpld/rpc/handlers/admin/log/LogRotate.cpp index 3cc7f35381..c1fdd58c23 100644 --- a/src/xrpld/rpc/handlers/admin/log/LogRotate.cpp +++ b/src/xrpld/rpc/handlers/admin/log/LogRotate.cpp @@ -1,8 +1,10 @@ #include +#include #include #include #include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/peer/Connect.cpp b/src/xrpld/rpc/handlers/admin/peer/Connect.cpp index fe3183484e..4d9667e4a9 100644 --- a/src/xrpld/rpc/handlers/admin/peer/Connect.cpp +++ b/src/xrpld/rpc/handlers/admin/peer/Connect.cpp @@ -4,11 +4,15 @@ #include #include +#include +#include #include #include #include #include +#include + namespace xrpl { // { diff --git a/src/xrpld/rpc/handlers/admin/peer/PeerReservationsAdd.cpp b/src/xrpld/rpc/handlers/admin/peer/PeerReservationsAdd.cpp index dcd97bb2e4..6aaa5cc78a 100644 --- a/src/xrpld/rpc/handlers/admin/peer/PeerReservationsAdd.cpp +++ b/src/xrpld/rpc/handlers/admin/peer/PeerReservationsAdd.cpp @@ -1,11 +1,13 @@ #include #include +#include #include #include #include #include #include +#include #include #include @@ -54,8 +56,8 @@ doPeerReservationsAdd(RPC::JsonContext& context) return rpcError(rpcPUBLIC_MALFORMED); PublicKey const& nodeId = *optPk; - auto const previous = - context.app.getPeerReservations().insert_or_assign(PeerReservation{nodeId, desc}); + auto const previous = context.app.getPeerReservations().insert_or_assign( + PeerReservation{.nodeId = nodeId, .description = desc}); Json::Value result{Json::objectValue}; if (previous) diff --git a/src/xrpld/rpc/handlers/admin/peer/PeerReservationsDel.cpp b/src/xrpld/rpc/handlers/admin/peer/PeerReservationsDel.cpp index 14d017779d..d60979aab3 100644 --- a/src/xrpld/rpc/handlers/admin/peer/PeerReservationsDel.cpp +++ b/src/xrpld/rpc/handlers/admin/peer/PeerReservationsDel.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include diff --git a/src/xrpld/rpc/handlers/admin/peer/Peers.cpp b/src/xrpld/rpc/handlers/admin/peer/Peers.cpp index 646aae7bc8..9164089e83 100644 --- a/src/xrpld/rpc/handlers/admin/peer/Peers.cpp +++ b/src/xrpld/rpc/handlers/admin/peer/Peers.cpp @@ -1,13 +1,19 @@ #include #include #include +#include #include #include -#include +#include +#include +#include #include +#include #include +#include + namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/admin/server_control/LedgerAccept.cpp b/src/xrpld/rpc/handlers/admin/server_control/LedgerAccept.cpp index 91e88b707f..7119b5235e 100644 --- a/src/xrpld/rpc/handlers/admin/server_control/LedgerAccept.cpp +++ b/src/xrpld/rpc/handlers/admin/server_control/LedgerAccept.cpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include diff --git a/src/xrpld/rpc/handlers/admin/server_control/Stop.cpp b/src/xrpld/rpc/handlers/admin/server_control/Stop.cpp index b47c35e21d..e3e0f29fa2 100644 --- a/src/xrpld/rpc/handlers/admin/server_control/Stop.cpp +++ b/src/xrpld/rpc/handlers/admin/server_control/Stop.cpp @@ -2,6 +2,7 @@ #include #include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/signing/ChannelAuthorize.cpp b/src/xrpld/rpc/handlers/admin/signing/ChannelAuthorize.cpp index 73d185be44..d93e1efadc 100644 --- a/src/xrpld/rpc/handlers/admin/signing/ChannelAuthorize.cpp +++ b/src/xrpld/rpc/handlers/admin/signing/ChannelAuthorize.cpp @@ -1,14 +1,25 @@ #include #include +#include #include #include +#include +#include +#include +#include #include #include #include +#include +#include +#include #include +#include +#include #include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/signing/Sign.cpp b/src/xrpld/rpc/handlers/admin/signing/Sign.cpp index e7150c5e2f..d92506c672 100644 --- a/src/xrpld/rpc/handlers/admin/signing/Sign.cpp +++ b/src/xrpld/rpc/handlers/admin/signing/Sign.cpp @@ -1,8 +1,11 @@ #include #include +#include #include +#include #include +#include #include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/signing/SignFor.cpp b/src/xrpld/rpc/handlers/admin/signing/SignFor.cpp index 54f23c9d81..572093856f 100644 --- a/src/xrpld/rpc/handlers/admin/signing/SignFor.cpp +++ b/src/xrpld/rpc/handlers/admin/signing/SignFor.cpp @@ -1,8 +1,11 @@ #include #include +#include #include +#include #include +#include #include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/status/ConsensusInfo.cpp b/src/xrpld/rpc/handlers/admin/status/ConsensusInfo.cpp index f9c5a97785..5ccbda2a16 100644 --- a/src/xrpld/rpc/handlers/admin/status/ConsensusInfo.cpp +++ b/src/xrpld/rpc/handlers/admin/status/ConsensusInfo.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include diff --git a/src/xrpld/rpc/handlers/admin/status/FetchInfo.cpp b/src/xrpld/rpc/handlers/admin/status/FetchInfo.cpp index f25f18acf7..fd916ef53e 100644 --- a/src/xrpld/rpc/handlers/admin/status/FetchInfo.cpp +++ b/src/xrpld/rpc/handlers/admin/status/FetchInfo.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include diff --git a/src/xrpld/rpc/handlers/admin/status/GetCounts.cpp b/src/xrpld/rpc/handlers/admin/status/GetCounts.cpp index 648d29a5fd..8cc687fec2 100644 --- a/src/xrpld/rpc/handlers/admin/status/GetCounts.cpp +++ b/src/xrpld/rpc/handlers/admin/status/GetCounts.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -6,12 +5,16 @@ #include #include +#include #include #include -#include #include #include +#include +#include +#include + namespace xrpl { static void diff --git a/src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp b/src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp index aec9dba4b4..c8ec6a2c15 100644 --- a/src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp +++ b/src/xrpld/rpc/handlers/admin/status/ValidatorInfo.cpp @@ -1,13 +1,14 @@ // Copyright (c) 2019 Dev Null Productions #include -#include #include #include #include #include +#include #include +#include namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/admin/status/ValidatorListSites.cpp b/src/xrpld/rpc/handlers/admin/status/ValidatorListSites.cpp index 36e2064387..80823a8936 100644 --- a/src/xrpld/rpc/handlers/admin/status/ValidatorListSites.cpp +++ b/src/xrpld/rpc/handlers/admin/status/ValidatorListSites.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/admin/status/Validators.cpp b/src/xrpld/rpc/handlers/admin/status/Validators.cpp index 95e6de9e68..cf9cab6b84 100644 --- a/src/xrpld/rpc/handlers/admin/status/Validators.cpp +++ b/src/xrpld/rpc/handlers/admin/status/Validators.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/ledger/Ledger.cpp b/src/xrpld/rpc/handlers/ledger/Ledger.cpp index 6bf627d29c..dd2280b51c 100644 --- a/src/xrpld/rpc/handlers/ledger/Ledger.cpp +++ b/src/xrpld/rpc/handlers/ledger/Ledger.cpp @@ -1,14 +1,35 @@ -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include +#include + +#include +#include + +#include +#include +#include +#include +#include namespace xrpl { namespace RPC { diff --git a/src/xrpld/rpc/handlers/ledger/Ledger.h b/src/xrpld/rpc/handlers/ledger/Ledger.h index f024241546..db70f35904 100644 --- a/src/xrpld/rpc/handlers/ledger/Ledger.h +++ b/src/xrpld/rpc/handlers/ledger/Ledger.h @@ -16,8 +16,7 @@ namespace Json { class Object; } // namespace Json -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { struct JsonContext; @@ -56,5 +55,4 @@ private: int options_ = 0; }; -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/handlers/ledger/LedgerClosed.cpp b/src/xrpld/rpc/handlers/ledger/LedgerClosed.cpp index e26019cca6..43e6fa686e 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerClosed.cpp +++ b/src/xrpld/rpc/handlers/ledger/LedgerClosed.cpp @@ -1,6 +1,8 @@ #include #include +#include +#include #include #include #include diff --git a/src/xrpld/rpc/handlers/ledger/LedgerData.cpp b/src/xrpld/rpc/handlers/ledger/LedgerData.cpp index 059c844e6e..f0a361d951 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerData.cpp +++ b/src/xrpld/rpc/handlers/ledger/LedgerData.cpp @@ -6,10 +6,21 @@ #include #include +#include +#include #include #include +#include #include +#include #include +#include + +#include +#include + +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp b/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp index 97c4efcc7a..f1a9253de2 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp +++ b/src/xrpld/rpc/handlers/ledger/LedgerDiff.cpp @@ -1,6 +1,18 @@ +#include #include #include +#include +#include +#include + +#include +#include + +#include +#include +#include + namespace xrpl { std::pair doLedgerDiffGrpc(RPC::GRPCContext& context) diff --git a/src/xrpld/rpc/handlers/ledger/LedgerEntry.cpp b/src/xrpld/rpc/handlers/ledger/LedgerEntry.cpp index 1fa88ac34d..4de75da1b0 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerEntry.cpp +++ b/src/xrpld/rpc/handlers/ledger/LedgerEntry.cpp @@ -3,19 +3,35 @@ #include #include -#include +#include +#include #include -#include #include +#include #include #include +#include #include #include +#include #include -#include +#include +#include +#include #include +#include #include +#include +#include + +#include +#include +#include +#include +#include +#include + namespace xrpl { using FunctionType = std::function( @@ -827,10 +843,14 @@ doLedgerEntry(RPC::JsonContext& context) #undef LEDGER_ENTRY #pragma pop_macro("LEDGER_ENTRY") - {jss::index, parseIndex, ltANY}, + {.fieldName = jss::index, .parseFunction = parseIndex, .expectedType = ltANY}, // aliases - {jss::account_root, parseAccountRoot, ltACCOUNT_ROOT}, - {jss::ripple_state, parseRippleState, ltRIPPLE_STATE}, + {.fieldName = jss::account_root, + .parseFunction = parseAccountRoot, + .expectedType = ltACCOUNT_ROOT}, + {.fieldName = jss::ripple_state, + .parseFunction = parseRippleState, + .expectedType = ltRIPPLE_STATE}, }); auto const hasMoreThanOneMember = [&]() { @@ -897,7 +917,7 @@ doLedgerEntry(RPC::JsonContext& context) return RPC::make_param_error("No ledger_entry params provided."); } } - catch (Json::error& e) + catch (Json::error const& e) { if (context.apiVersion > 1u) { diff --git a/src/xrpld/rpc/handlers/ledger/LedgerEntryHelpers.h b/src/xrpld/rpc/handlers/ledger/LedgerEntryHelpers.h index 4a4366556d..d0d643661d 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerEntryHelpers.h +++ b/src/xrpld/rpc/handlers/ledger/LedgerEntryHelpers.h @@ -12,9 +12,7 @@ #include -namespace xrpl { - -namespace LedgerEntryHelpers { +namespace xrpl::LedgerEntryHelpers { inline Unexpected missingFieldError(Json::StaticString const field, std::optional err = std::nullopt) @@ -283,6 +281,4 @@ parseBridgeFields(Json::Value const& params) *lockingChainDoor, lockingChainIssue, *issuingChainDoor, issuingChainIssue); } -} // namespace LedgerEntryHelpers - -} // namespace xrpl +} // namespace xrpl::LedgerEntryHelpers diff --git a/src/xrpld/rpc/handlers/ledger/LedgerHeader.cpp b/src/xrpld/rpc/handlers/ledger/LedgerHeader.cpp index 6b93594020..6f01889b59 100644 --- a/src/xrpld/rpc/handlers/ledger/LedgerHeader.cpp +++ b/src/xrpld/rpc/handlers/ledger/LedgerHeader.cpp @@ -1,10 +1,16 @@ +#include + #include #include #include +#include #include +#include #include +#include + namespace xrpl { // { diff --git a/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp b/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp index 272e66018c..c093c5fcf5 100644 --- a/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp +++ b/src/xrpld/rpc/handlers/orderbook/AMMInfo.cpp @@ -2,14 +2,35 @@ #include #include +#include +#include +#include +#include #include +#include +#include +#include #include #include #include +#include #include -#include +#include +#include +#include +#include +#include +#include +#include -#include +#include + +#include +#include +#include +#include +#include +#include namespace xrpl { @@ -139,7 +160,8 @@ doAMMInfo(RPC::JsonContext& context) asset2 = (*amm)[sfAsset2]; } - return ValuesFromContextParams{accountID, *asset1, *asset2, amm}; + return ValuesFromContextParams{ + .accountID = accountID, .asset1 = *asset1, .asset2 = *asset2, .amm = amm}; }; auto const r = getValuesFromContextParams(); diff --git a/src/xrpld/rpc/handlers/orderbook/BookChanges.cpp b/src/xrpld/rpc/handlers/orderbook/BookChanges.cpp index 83b26729a1..502895e734 100644 --- a/src/xrpld/rpc/handlers/orderbook/BookChanges.cpp +++ b/src/xrpld/rpc/handlers/orderbook/BookChanges.cpp @@ -1,9 +1,12 @@ #include + #include #include #include +#include + namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/orderbook/BookOffers.cpp b/src/xrpld/rpc/handlers/orderbook/BookOffers.cpp index 3b4f76dc96..04fceac268 100644 --- a/src/xrpld/rpc/handlers/orderbook/BookOffers.cpp +++ b/src/xrpld/rpc/handlers/orderbook/BookOffers.cpp @@ -2,17 +2,28 @@ #include #include #include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include #include #include #include #include #include -#include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/orderbook/DepositAuthorized.cpp b/src/xrpld/rpc/handlers/orderbook/DepositAuthorized.cpp index fb1c0db884..95c7238d20 100644 --- a/src/xrpld/rpc/handlers/orderbook/DepositAuthorized.cpp +++ b/src/xrpld/rpc/handlers/orderbook/DepositAuthorized.cpp @@ -1,13 +1,26 @@ #include #include +#include +#include +#include +#include #include #include +#include #include #include +#include +#include #include +#include #include +#include +#include +#include +#include + namespace xrpl { // { diff --git a/src/xrpld/rpc/handlers/orderbook/GetAggregatePrice.cpp b/src/xrpld/rpc/handlers/orderbook/GetAggregatePrice.cpp index 281f2d63a7..10359c810e 100644 --- a/src/xrpld/rpc/handlers/orderbook/GetAggregatePrice.cpp +++ b/src/xrpld/rpc/handlers/orderbook/GetAggregatePrice.cpp @@ -3,15 +3,38 @@ #include #include +#include +#include #include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + namespace xrpl { using namespace boost::bimaps; @@ -248,9 +271,8 @@ doGetAggregatePrice(RPC::JsonContext& context) iteratePriceData(context, sle, [&](STObject const& node) { auto const& series = node.getFieldArray(sfPriceDataSeries); // find the token pair entry with the price - if (auto iter = std::find_if( - series.begin(), - series.end(), + if (auto iter = std::ranges::find_if( + series, [&](STObject const& o) -> bool { return o.getFieldCurrency(sfBaseAsset).getText() == std::get(baseAsset) && diff --git a/src/xrpld/rpc/handlers/orderbook/NFTBuyOffers.cpp b/src/xrpld/rpc/handlers/orderbook/NFTBuyOffers.cpp index 3ee8935f3a..98c4a73784 100644 --- a/src/xrpld/rpc/handlers/orderbook/NFTBuyOffers.cpp +++ b/src/xrpld/rpc/handlers/orderbook/NFTBuyOffers.cpp @@ -1,8 +1,10 @@ #include #include +#include +#include #include -#include +#include #include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/orderbook/NFTSellOffers.cpp b/src/xrpld/rpc/handlers/orderbook/NFTSellOffers.cpp index 9dbd9ef49f..8612fdf587 100644 --- a/src/xrpld/rpc/handlers/orderbook/NFTSellOffers.cpp +++ b/src/xrpld/rpc/handlers/orderbook/NFTSellOffers.cpp @@ -1,8 +1,10 @@ #include #include +#include +#include #include -#include +#include #include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/orderbook/PathFind.cpp b/src/xrpld/rpc/handlers/orderbook/PathFind.cpp index ced3625b4c..ffe00f54a8 100644 --- a/src/xrpld/rpc/handlers/orderbook/PathFind.cpp +++ b/src/xrpld/rpc/handlers/orderbook/PathFind.cpp @@ -3,10 +3,12 @@ #include #include +#include #include #include #include #include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp b/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp index 1b19061b9d..c0a2a17a49 100644 --- a/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp +++ b/src/xrpld/rpc/handlers/orderbook/RipplePathFind.cpp @@ -1,12 +1,22 @@ #include #include +#include #include +#include #include #include +#include +#include +#include +#include #include +#include #include +#include +#include + namespace xrpl { // This interface is deprecated. diff --git a/src/xrpld/rpc/handlers/server_info/Feature.cpp b/src/xrpld/rpc/handlers/server_info/Feature.cpp index 24ff0d62b8..f6f5316a55 100644 --- a/src/xrpld/rpc/handlers/server_info/Feature.cpp +++ b/src/xrpld/rpc/handlers/server_info/Feature.cpp @@ -1,8 +1,12 @@ #include #include #include +#include +#include +#include #include +#include #include #include #include diff --git a/src/xrpld/rpc/handlers/server_info/Fee.cpp b/src/xrpld/rpc/handlers/server_info/Fee.cpp index 49a36261f4..d943d02f77 100644 --- a/src/xrpld/rpc/handlers/server_info/Fee.cpp +++ b/src/xrpld/rpc/handlers/server_info/Fee.cpp @@ -1,9 +1,9 @@ -#include #include #include #include -#include +#include +#include #include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/server_info/Manifest.cpp b/src/xrpld/rpc/handlers/server_info/Manifest.cpp index ba3461033f..75533f0e78 100644 --- a/src/xrpld/rpc/handlers/server_info/Manifest.cpp +++ b/src/xrpld/rpc/handlers/server_info/Manifest.cpp @@ -6,7 +6,9 @@ #include #include #include +#include #include +#include namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/server_info/ServerDefinitions.cpp b/src/xrpld/rpc/handlers/server_info/ServerDefinitions.cpp index f99f427ca8..d3db8cf56d 100644 --- a/src/xrpld/rpc/handlers/server_info/ServerDefinitions.cpp +++ b/src/xrpld/rpc/handlers/server_info/ServerDefinitions.cpp @@ -1,8 +1,9 @@ #include -#include +#include #include #include +#include #include #include #include @@ -11,9 +12,14 @@ #include #include -#include +#include +#include +#include +#include +#include #include +#include #include #include diff --git a/src/xrpld/rpc/handlers/server_info/Version.h b/src/xrpld/rpc/handlers/server_info/Version.h index a03212e906..233ae3e4d8 100644 --- a/src/xrpld/rpc/handlers/server_info/Version.h +++ b/src/xrpld/rpc/handlers/server_info/Version.h @@ -2,8 +2,7 @@ #include -namespace xrpl { -namespace RPC { +namespace xrpl::RPC { class VersionHandler { @@ -13,14 +12,14 @@ public: { } - Status + static Status check() { return Status::OK; } void - writeResult(Json::Value& obj) + writeResult(Json::Value& obj) const { setVersion(obj, apiVersion_, betaEnabled_); } @@ -40,5 +39,4 @@ private: bool betaEnabled_; }; -} // namespace RPC -} // namespace xrpl +} // namespace xrpl::RPC diff --git a/src/xrpld/rpc/handlers/subscribe/Subscribe.cpp b/src/xrpld/rpc/handlers/subscribe/Subscribe.cpp index 8b3e5a5e1f..9be273587d 100644 --- a/src/xrpld/rpc/handlers/subscribe/Subscribe.cpp +++ b/src/xrpld/rpc/handlers/subscribe/Subscribe.cpp @@ -4,14 +4,26 @@ #include #include #include +#include +#include +#include +#include #include +#include +#include #include #include #include #include +#include #include +#include +#include +#include +#include + namespace xrpl { Json::Value @@ -65,7 +77,7 @@ doSubscribe(RPC::JsonContext& context) ispSub = context.netOps.addRpcSub(strUrl, std::dynamic_pointer_cast(rspSub)); } - catch (std::runtime_error& ex) + catch (std::runtime_error const& ex) { return RPC::make_param_error(ex.what()); } diff --git a/src/xrpld/rpc/handlers/subscribe/Unsubscribe.cpp b/src/xrpld/rpc/handlers/subscribe/Unsubscribe.cpp index 6846d9baf3..258774d12a 100644 --- a/src/xrpld/rpc/handlers/subscribe/Unsubscribe.cpp +++ b/src/xrpld/rpc/handlers/subscribe/Unsubscribe.cpp @@ -3,11 +3,18 @@ #include #include +#include +#include +#include +#include #include #include #include +#include #include +#include + namespace xrpl { Json::Value diff --git a/src/xrpld/rpc/handlers/transaction/Simulate.cpp b/src/xrpld/rpc/handlers/transaction/Simulate.cpp index 433603338d..f5004bab13 100644 --- a/src/xrpld/rpc/handlers/transaction/Simulate.cpp +++ b/src/xrpld/rpc/handlers/transaction/Simulate.cpp @@ -4,18 +4,41 @@ #include #include #include -#include #include #include -#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include #include +#include #include #include +#include #include +#include +#include +#include +#include #include -#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/transaction/Submit.cpp b/src/xrpld/rpc/handlers/transaction/Submit.cpp index cac7259a00..73260c0661 100644 --- a/src/xrpld/rpc/handlers/transaction/Submit.cpp +++ b/src/xrpld/rpc/handlers/transaction/Submit.cpp @@ -1,13 +1,27 @@ #include #include #include +#include #include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include #include +#include +#include +#include + namespace xrpl { static NetworkOPs::FailHard diff --git a/src/xrpld/rpc/handlers/transaction/SubmitMultiSigned.cpp b/src/xrpld/rpc/handlers/transaction/SubmitMultiSigned.cpp index 52213e174a..d121e9a850 100644 --- a/src/xrpld/rpc/handlers/transaction/SubmitMultiSigned.cpp +++ b/src/xrpld/rpc/handlers/transaction/SubmitMultiSigned.cpp @@ -2,7 +2,8 @@ #include #include -#include +#include +#include #include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/transaction/TransactionEntry.cpp b/src/xrpld/rpc/handlers/transaction/TransactionEntry.cpp index 36f53130fa..67fd2504fe 100644 --- a/src/xrpld/rpc/handlers/transaction/TransactionEntry.cpp +++ b/src/xrpld/rpc/handlers/transaction/TransactionEntry.cpp @@ -3,9 +3,14 @@ #include #include +#include +#include +#include #include #include +#include + namespace xrpl { // { diff --git a/src/xrpld/rpc/handlers/transaction/Tx.cpp b/src/xrpld/rpc/handlers/transaction/Tx.cpp index a3ed788060..530b45e225 100644 --- a/src/xrpld/rpc/handlers/transaction/Tx.cpp +++ b/src/xrpld/rpc/handlers/transaction/Tx.cpp @@ -5,20 +5,35 @@ #include #include #include -#include #include #include -#include +#include +#include +#include +#include +#include +#include +#include #include +#include #include #include #include +#include +#include +#include #include #include #include -#include +#include +#include +#include +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/rpc/handlers/transaction/TxHistory.cpp b/src/xrpld/rpc/handlers/transaction/TxHistory.cpp index 3467b1c990..1669d289b4 100644 --- a/src/xrpld/rpc/handlers/transaction/TxHistory.cpp +++ b/src/xrpld/rpc/handlers/transaction/TxHistory.cpp @@ -1,4 +1,3 @@ -#include #include #include #include diff --git a/src/xrpld/rpc/handlers/utility/Random.cpp b/src/xrpld/rpc/handlers/utility/Random.cpp index 5ed4426940..e17a8928bb 100644 --- a/src/xrpld/rpc/handlers/utility/Random.cpp +++ b/src/xrpld/rpc/handlers/utility/Random.cpp @@ -6,6 +6,8 @@ #include #include +#include + namespace xrpl { namespace RPC { diff --git a/src/xrpld/rpc/json_body.h b/src/xrpld/rpc/json_body.h index d70fafb2d4..2e9e774992 100644 --- a/src/xrpld/rpc/json_body.h +++ b/src/xrpld/rpc/json_body.h @@ -69,7 +69,7 @@ struct json_body { } - void + static void init(boost::beast::error_code& ec) { ec.assign(0, ec.category()); diff --git a/src/xrpld/shamap/NodeFamily.cpp b/src/xrpld/shamap/NodeFamily.cpp index 3460c68608..2c47515498 100644 --- a/src/xrpld/shamap/NodeFamily.cpp +++ b/src/xrpld/shamap/NodeFamily.cpp @@ -1,8 +1,22 @@ +#include + +#include #include #include #include #include -#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include namespace xrpl { diff --git a/src/xrpld/shamap/NodeFamily.h b/src/xrpld/shamap/NodeFamily.h index ab555919ac..3985a8bdf8 100644 --- a/src/xrpld/shamap/NodeFamily.h +++ b/src/xrpld/shamap/NodeFamily.h @@ -1,5 +1,8 @@ #pragma once +#include + +#include #include namespace xrpl {