{"templateId":"../../@theme/templates/blogpost","sharedDataIds":{"sidebar":"sidebar-blog/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"redocly_category":"Blog","type":"markdown"},"seo":{"title":"Introducing XRP Ledger version 3.1.3","siteUrl":"https://xrpl.org/","llmstxt":{"hide":false,"title":"XRPL Developer Portal & Documentation","description":"Explore XRP Ledger documentation, blogs, and other blockchain developer resources needed to start building and integrating with the ledger.","details":{"content":"XRP Ledger concepts, use cases, tutorials, references, and other blockchain developer resources. Also, stay up to date with release announcements and more through the XRPL Blog."},"sections":[{"title":"Introduction","description":"A high-level introduction to the XRP Ledger.","includeFiles":["docs/introduction/**/*.*","about/faq.md"],"excludeFiles":["docs/introduction/index.md"]},{"title":"Use Cases","description":"Real-world applications and business scenarios for the XRP Ledger.","includeFiles":["docs/use-cases/**/*.*"],"excludeFiles":["docs/use-cases/index.md","docs/use-cases/defi/index.md"]},{"title":"Agentic Transactions","description":"XRPL AI Starter Kit to help autonomous agents discover, set up, and execute agentic transactions on the XRP Ledger.","includeFiles":["docs/agents/**/*.*"],"excludeFiles":[]},{"title":"Concepts","description":"Core concepts including accounts, tokens, transactions, consensus, and more.","includeFiles":["docs/concepts/**/*.*"],"excludeFiles":["docs/concepts/index.md","docs/concepts/decentralized-storage/index.md","docs/concepts/payment-types/index.md"]},{"title":"Tutorials","description":"Step-by-step guides for building on the XRP Ledger in JavaScript, Python, Go, and more.","includeFiles":["docs/tutorials/**/*.*"],"excludeFiles":[]},{"title":"References","description":"Protocol specification, transaction types, ledger entries, and API methods.","includeFiles":["docs/references/**/*.*"],"excludeFiles":["docs/references/xrp-api.md","docs/references/data-api.md","docs/references/protocol/index.md","docs/references/protocol/ledger-data/ledger-entry-types/index.md","docs/references/protocol/transactions/index.md","docs/references/protocol/transactions/types/index.md","docs/references/http-websocket-apis/api-conventions/index.md","docs/references/http-websocket-apis/public-api-methods/*/index.md","docs/references/http-websocket-apis/admin-api-methods/*/index.md"]},{"title":"Infrastructure","description":"Install, configure, and troubleshoot xrpld and Clio servers.","includeFiles":["docs/infrastructure/**/*.*"],"excludeFiles":["docs/infrastructure/index.md","docs/infrastructure/*/index.md","docs/infrastructure/installation/build-run-xrpld-in-reporting-mode.md","docs/infrastructure/configuration/data-retention/index.md","docs/infrastructure/configuration/server-modes/index.md"]},{"title":"Blog (2023+)","description":"Recent XRPL Blog posts (showing 2023 and newer).","includeFiles":["blog/2023/**/*.*","blog/2024/**/*.*","blog/2025/**/*.*","blog/2026/**/*.*"],"excludeFiles":[]},{"title":"Resources","description":"Developer resources and contribution guidelines.","includeFiles":["resources/**/*.*"],"excludeFiles":["resources/index.md"]}],"excludeFiles":[]},"description":"rippled version 3.1.3 introduces a new amendment and various bug fixes."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"introducing-xrp-ledger-version-313","__idx":0},"children":["Introducing XRP Ledger version 3.1.3"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Version 3.1.3 of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]},", the reference server implementation of the XRP Ledger protocol, is now available. This release introduced the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fixCleanup3_1_3"]}," amendment, which contained a collection of fixes for NFTs, Permissioned Domains, Vaults, the Lending Protocol, and MPTs."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Due to the severity of the bugs, development took place in both the public ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]}," repo and a private repo to keep the details of the issues confidential and prevent malicious actors from exploiting them before fixes shipped. To address all of the issues quickly, they were bundled under a single ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fixCleanup3_1_3"]}," amendment, and UNL validators were contacted to update immediately. The amendment shipped with a default vote of ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Yes"]},", so validators upgrading their software automatically cast a yes vote to speed up applying the fixes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In addition to the fix amendment, this release also added a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verify_endpoints"]}," parameter to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]}," configuration file for local peer network development, less-severe bug fixes, and refactors."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"action-required","__idx":1},"children":["Action Required"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you run an XRP Ledger server, upgrade to version 3.1.3 as soon as possible to ensure service continuity."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"install--upgrade","__idx":2},"children":["Install / Upgrade"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On supported platforms, see the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/infrastructure/installation"},"children":["instructions on installing or updating ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]}]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Package"},"children":["Package"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"SHA-256"},"children":["SHA-256"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://repos.ripple.com/repos/rippled-rpm/stable/rippled-3.1.3-1.el9.x86_64.rpm"},"children":["RPM for Red Hat / CentOS (x86-64)"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["85549e28750a29bb817bc271996f721fcc80d85ae15fc6a97beeb094260bc4e2"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://repos.ripple.com/repos/rippled-deb/pool/stable/rippled_3.1.3-1_amd64.deb"},"children":["DEB for Ubuntu / Debian (x86-64)"]}]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2d7bcca6c8148c395d827681870a5e033521719c2d2c34b64d2cf923af3aa07c"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For other platforms, please ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/blob/master/BUILD.md"},"children":["build from source"]},". The most recent commit in the git log should be the change setting the version:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"text","header":{"controls":{"copy":{}}},"source":"commit 46b241ace8b30d9c9775d60ffba7d24b21903896\nAuthor: Ed Hennis <ed@ripple.com>\nDate:   Wed May 6 15:37:35 2026 -0400\n\n    Set version to 3.1.3\n","lang":"text"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"full-changelog","__idx":3},"children":["Full Changelog"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"amendments","__idx":4},"children":["Amendments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["fixCleanup3_1_3"]},": This amendment introduced a collection of fixes for NFTs, Permissioned Domains, Vaults, the Lending Protocol, MPTs, and miscellaneous issues:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["NFTs"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed an issue with expired ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NFTokenOffer"]}," entries remaining on the ledger. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NFTokenAcceptOffer"]}," transaction now deletes expired offers as part of transaction processing. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/5707"},"children":["#5707"]},")"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Permissioned Domains"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a keylet collision crash when using permissioned domains with ticketed transactions. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7129"},"children":["#7129"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added an invariant check to ensure Permissioned Domains aren't modified by failed transactions. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6134"},"children":["#6134"]},")"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Single Asset Vaults"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Clamped ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VaultClawback"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["assetsAvailable"]}," for zero-amount (\"all\") clawbacks, fixing a bug that allowed clawing back more assets than were available on outstanding loans. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6646"},"children":["#6646"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a trust line token limit check that was skipped when withdrawing vault assets. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VaultWithdraw"]}," transactions that specify either vault shares or vault assets now respect the trust line token limit of the destination address. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6645"},"children":["#6645"]},")"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Lending Protocol"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a fee calculation issue by capping the base fee for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LoanPay"]},". (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6969"},"children":["#6969"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed an inaccurate assertion in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LoanPay"]}," transactions by improving IOU rounding accuracy. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6231"},"children":["#6231"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added several Lending Protocol fixes. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6678"},"children":["#6678"]},")",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed loan accounting information not updating in its associated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Loan"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LoanBroker"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Vault"]}," entries when the loan was defaulted, impaired, or unimpaired."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LoanPay"]}," error to return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tecNO_PERMISSION"]}," instead of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["temINVALID_FLAG"]}," when attempting to overpay on a loan that doesn't permit overpayments."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added an additional check for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LoanBroker"]}," invariants to ensure the listed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CoverAvailable"]}," exactly matches the assets held in the associated pseudo-account."]}]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["MPTs"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Prevented the deletion of MPTs with an active escrow. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6635"},"children":["#6635"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enforced aggregate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MaximumAmount"]}," checks in multi-send MPT transactions. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6644"},"children":["#6644"]},")"]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Miscellaneous Issues"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed a bug where boolean results could be overwritten by multiple calls to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["visitEntry"]},". (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6609"},"children":["#6609"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added a check for empty ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sfAdditionalBooks"]}," arrays in hybrid offer invariants. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6716"},"children":["#6716"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Stopped transaction processing and returned an error code when deleting expired credentials failed. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6715"},"children":["#6715"]},")"]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"features","__idx":5},"children":["Features"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["verify_endpoints"]}," parameter to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]}," config file. The default value is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1"]},", which configures the server to validate endpoint addresses received from peers. If set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]},", the server skips validation, allowing addresses that are not publicly routable or have a port of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]},". This is useful for local peer network development, but should never be disabled when on Mainnet. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/commit/f511eeb2"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["f511eeb"]}]},")"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"breaking-changes","__idx":6},"children":["Breaking Changes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updated the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["port"]}," field in the Peer Crawler API to consistently return an integer for both inbound and outbound peers. Previously, outbound peers returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["port"]}," as a string while inbound peers returned it as an integer. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6318"},"children":["#6318"]},")"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"bug-fixes","__idx":7},"children":["Bug Fixes"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved loan invariant message. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6668"},"children":["#6668"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["account_tx"]}," limit parameter validation for malformed values. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/5891"},"children":["#5891"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed array size check. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6030"},"children":["#6030"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Corrected index for limit in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["book_offers"]}," CLI. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6043"},"children":["#6043"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed nullptr resolving when there is no DB config. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6029"},"children":["#6029"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Truncated thread name on Linux. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/5758"},"children":["#5758"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Limited reply size on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TMGetObjectByHash"]}," queries. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6110"},"children":["#6110"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed tautological assert. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6393"},"children":["#6393"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fixed gateway balance with MPT. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6143"},"children":["#6143"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made assorted NFT fixes. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6566"},"children":["#6566"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made assorted Oracle fixes. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6570"},"children":["#6570"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made assorted Vault fixes. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6607"},"children":["#6607"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made assorted Permissioned Domain fixes. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6587"},"children":["#6587"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed fatal assertion on Linux thread name truncation. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6690"},"children":["#6690"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Changed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Tuning::bookOffers"]}," minimum limit to 1. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6812"},"children":["#6812"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Added rounding to Vault invariants. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6217"},"children":["#6217"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Capped the base fee for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LoanPay"]},". (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6969"},"children":["#6969"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Checked network ID in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["transactionSignFor"]},". (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/commit/2ddef8c8"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2ddef8c"]}]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved JSON parsing of currency issuers. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7110"},"children":["#7110"]},")"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"refactors","__idx":8},"children":["Refactors"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Updated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PermissionedDomainDelete"]}," to use keylet for SLE access. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6063"},"children":["#6063"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Enforced 15-char limit and simplified thread naming labels. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6212"},"children":["#6212"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved RPC variable naming and handling. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/commit/56a9d69b"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["56a9d69"]}]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Removed erroneous ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["base_uint"]}," constructor from container. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/commit/5aa3d5e2"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["5aa3d5e"]}]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Limited JSON array size. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7112"},"children":["#7112"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Filled ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["txJson"]}," based on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["apiVersion"]},". (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7109"},"children":["#7109"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Used named constant for leaf item size. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7130"},"children":["#7130"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Improved ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Forwarded"]}," header field parsing. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7126"},"children":["#7126"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Moved unhex lookup table out of function. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7104"},"children":["#7104"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Prevented dry-run transactions from being queued. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/7131"},"children":["#7131"]},")"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"cibuild","__idx":9},"children":["CI/Build"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Only uploaded artifacts in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["XRPLF/rippled"]}," repository. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6523"},"children":["#6523"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Used latest version of publish-docs workflow. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6824"},"children":["#6824"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Made pre-commit line ending conversions work on Windows. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6832"},"children":["#6832"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Shortened job names to stay within Linux 15-char thread limit. (",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/pull/6669"},"children":["#6669"]},")"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"credits","__idx":10},"children":["Credits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following RippleX teams and GitHub users contributed to this release:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RippleX Engineering"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RippleX Docs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RippleX Product"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["@Kassaking7"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["@janibakin"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["@tequdev"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"bug-bounties-and-responsible-disclosures","__idx":11},"children":["Bug Bounties and Responsible Disclosures"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["We welcome reviews of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]}," code and urge researchers to responsibly disclose any issues they may find."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more information, see:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ripple.com/legal/bug-bounty/"},"children":["Ripple's Bug Bounty Program"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/XRPLF/rippled/blob/develop/SECURITY.md"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rippled"]}," Security Policy"]}]}]}]},"headings":[{"value":"Introducing XRP Ledger version 3.1.3","id":"introducing-xrp-ledger-version-313","depth":1},{"value":"Action Required","id":"action-required","depth":2},{"value":"Install / Upgrade","id":"install--upgrade","depth":2},{"value":"Full Changelog","id":"full-changelog","depth":2},{"value":"Amendments","id":"amendments","depth":3},{"value":"Features","id":"features","depth":3},{"value":"Breaking Changes","id":"breaking-changes","depth":3},{"value":"Bug Fixes","id":"bug-fixes","depth":3},{"value":"Refactors","id":"refactors","depth":3},{"value":"CI/Build","id":"cibuild","depth":3},{"value":"Credits","id":"credits","depth":2},{"value":"Bug Bounties and Responsible Disclosures","id":"bug-bounties-and-responsible-disclosures","depth":2}],"frontmatter":{"category":2026,"date":"2026-05-14","template":"../../@theme/templates/blogpost","seo":{"title":"Introducing XRP Ledger version 3.1.3","description":"rippled version 3.1.3 introduces a new amendment and various bug fixes."},"labels":["rippled Release Notes"],"markdown":{"editPage":{"hide":true}}},"lastModified":"2026-05-28T21:35:20.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/blog/2026/rippled-3.1.3","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}