<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Qi Zhao</title>
    <description>The latest articles on DEV Community by Qi Zhao (@thisisqizhao).</description>
    <link>https://dev.to/thisisqizhao</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2772575%2Fee4c220f-2e5a-4265-8a85-d352a4edaf4c.png</url>
      <title>DEV Community: Qi Zhao</title>
      <link>https://dev.to/thisisqizhao</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thisisqizhao"/>
    <language>en</language>
    <item>
      <title>MPT DEX Performance Test Report</title>
      <dc:creator>Qi Zhao</dc:creator>
      <pubDate>Thu, 21 May 2026 02:07:19 +0000</pubDate>
      <link>https://dev.to/ripplexdev/mpt-dex-performance-test-report-3n45</link>
      <guid>https://dev.to/ripplexdev/mpt-dex-performance-test-report-3n45</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;MPTVersion2&lt;/code&gt; amendment (XLS-82) extends Multi-Purpose Token (MPT) support to the XRP Ledger's Decentralized Exchange (DEX), enabling MPT assets to participate natively in Automated Market Maker (AMM) pools, order book offers, cross-currency payments, and check-based transfers. This builds directly on the XLS-33 MPT foundation and the existing XRPL DEX infrastructure (XLS-30).&lt;/p&gt;

&lt;p&gt;Rather than introducing new on-ledger objects or a separate trading engine, MPTVersion2 extends existing transaction types — &lt;code&gt;AMMCreate&lt;/code&gt;, &lt;code&gt;AMMDeposit&lt;/code&gt;, &lt;code&gt;AMMWithdraw&lt;/code&gt;, &lt;code&gt;AMMClawback&lt;/code&gt;, &lt;code&gt;AMMDelete&lt;/code&gt;, &lt;code&gt;CheckCreate&lt;/code&gt;, &lt;code&gt;CheckCash&lt;/code&gt;, &lt;code&gt;OfferCreate&lt;/code&gt;, and &lt;code&gt;Payment&lt;/code&gt; — to treat MPT as a first-class asset alongside XRP and IOUs. MPT amounts are identified by &lt;code&gt;mpt_issuance_id&lt;/code&gt; in transaction JSON in place of the &lt;code&gt;currency&lt;/code&gt;/&lt;code&gt;issuer&lt;/code&gt; fields used by IOUs.&lt;/p&gt;

&lt;p&gt;This report summarizes a comprehensive performance evaluation of the MPTVersion2 amendment under high-load conditions. Tests were executed in RippleX's private performance network to quantify throughput, consensus latency, CPU/memory utilization, and regression impact relative to the 3.1.2 release baseline.&lt;/p&gt;

&lt;p&gt;The results demonstrate that MPT DEX integration is performant and stable, with no material regression against baseline IOU-based DEX operations, and that the amendment can be safely activated without compromising the 5-second consensus target.&lt;/p&gt;




&lt;h2&gt;
  
  
  Executive Summary
&lt;/h2&gt;

&lt;p&gt;The MPTVersion2 amendment introduces no measurable performance regression against the 3.1.2 production release. Under identical conditions, the mpt_dex build matched baseline throughput within 0.4%. Pure MPT path payments outperformed the IOU baseline by 14.2%, while the most complex mixed MPT-IOU paths came within 1.7% of baseline. DEX transaction capacity with MPT token pairs exceeded IOU equivalents by over 36%. All scenarios maintained consensus latency below the 5-second target across both 1-hour and 5-hour endurance runs, with stable CPU and memory utilization throughout. The amendment is safe to activate without compromising MainNet SLOs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing Objectives
&lt;/h2&gt;

&lt;p&gt;The primary objective of this testing was to assess the performance impact of enabling MPT assets in DEX and payment flows, and to validate that no regressions are introduced relative to the 3.1.2 production release. Specifically, we aimed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Establish a clean performance baseline comparing the &lt;code&gt;mpt_dex&lt;/code&gt; build against the 3.1.2 release under identical load and database conditions.&lt;/li&gt;
&lt;li&gt;Validate that the &lt;code&gt;mpt_dex&lt;/code&gt; build performs equivalently when run against both the baseline performance database and the MPT DEX-enriched database, confirming that MPT ledger object population does not degrade existing transaction performance.&lt;/li&gt;
&lt;li&gt;Measure the throughput, consensus latency, and resource utilization of MPT-enabled path payments across multiple path complexity tiers.&lt;/li&gt;
&lt;li&gt;Compare MPT path payment performance across three middle path configurations — pure IOU-IOU (baseline), pure MPT-MPT, and alternating MPT-IOU — at increasing path complexity tiers.&lt;/li&gt;
&lt;li&gt;Stress test rippled's DEX transaction processing under a load distribution mirroring the most frequent MainNet operations (&lt;code&gt;AMMCreate&lt;/code&gt;, &lt;code&gt;AMMDeposit&lt;/code&gt;, &lt;code&gt;OfferCreate&lt;/code&gt;) with MPT/MPT token pairs, validating no regression against the IOU-only baseline.&lt;/li&gt;
&lt;li&gt;Ensure that the network consistently maintains a 5-second consensus latency threshold under all test scenarios.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Testing Methodology
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Capacity Planning
&lt;/h3&gt;

&lt;p&gt;The 5-second consensus latency limit serves as the benchmark for network capacity across all scenarios. This threshold ensures the network remains in optimal condition while processing a mix of MPT-enabled DEX, AMM, and payment transactions alongside standard payment flows. Instances where the network surpassed this limit are referred to as "overvalidation" in the results below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Environment
&lt;/h3&gt;

&lt;p&gt;Testing was conducted in a private XRPL environment with 9 nodes, mirroring Ripple's MainNet hardware specifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 nodes function as validator nodes&lt;/li&gt;
&lt;li&gt;4 nodes serve as client P2P nodes, interfacing with load generators&lt;/li&gt;
&lt;li&gt;All nodes are hosted on AWS EC2 &lt;code&gt;z1d.2xlarge&lt;/code&gt; instances: 8 CPU cores, 64 GB RAM, 300 GB NVMe SSD&lt;/li&gt;
&lt;li&gt;All nodes operate within the same AWS region, interconnected via a shared LAN&lt;/li&gt;
&lt;li&gt;Between 1 and 4 load servers transmit transactions to the 4 P2P nodes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Account Setup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A total of 250,000 synthetic accounts were established, built atop a public ledger synchronized from MainNet. 15 accounts were designated as MPT token issuers, distributing MPT balances to the remaining MPT participant accounts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rippled Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The rippled configuration was sourced from a Ripple MainNet validator, with modifications made only as required for the test environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Data Setup
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Multi-Purpose Token Initialization
&lt;/h4&gt;

&lt;p&gt;To support MPT-backed DEX testing, the environment was pre-initialized with MPT objects following the XLS-33 and XLS-82 specifications.&lt;/p&gt;

&lt;p&gt;Three token chains were constructed to support the full range of path payment scenarios:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IOU1 → IOU2 → IOU3 → IOU4 → IOU5 → IOU6 → IOU7 → IOU8

MPT1 → MPT2 → MPT3 → MPT4 → MPT5 → MPT6 → MPT7 → MPT8

MPT1 → IOU1 → MPT2 → IOU2 → MPT3 → IOU3 → MPT4 → IOU4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The pure IOU chain serves as the baseline control. The pure MPT chain exercises MPT-only pathfinding. The alternating MPT-IOU chain represents the most complex cross-type routing scenario, requiring the pathfinding engine to resolve offer crossings between &lt;code&gt;MPTokenIssuance&lt;/code&gt; and trust line objects at every hop.&lt;/p&gt;

&lt;p&gt;Database creation followed this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Issuer accounts created MPT issuances via &lt;code&gt;MPTokenIssuanceCreate&lt;/code&gt;, with &lt;code&gt;lsfMPTCanTrade&lt;/code&gt; and &lt;code&gt;lsfMPTCanTransfer&lt;/code&gt; flags set to enable DEX participation.&lt;/li&gt;
&lt;li&gt;All holder accounts were authorized via &lt;code&gt;MPTokenAuthorize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Token issuers funded root accounts via &lt;code&gt;Payment&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;All four load servers distributed MPT balances to the full holder population.&lt;/li&gt;
&lt;li&gt;AMM pools and order book offers were pre-created to seed liquidity across the full asset graph.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Load Modeling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scenario 1 — Baseline: Build Regression (mpt_dex vs. 3.1.2 Release)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Objective:&lt;/strong&gt; Confirm that the &lt;code&gt;mpt_dex&lt;/code&gt; build introduces no performance regression against the current 3.1.2 production release under identical baseline conditions.&lt;/p&gt;

&lt;p&gt;Two sub-comparisons were performed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1a. Baseline DB — 5-Hour Build Comparison&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both builds executed against the standard 250K account baseline performance database (no MPT objects). This isolates code-level regressions introduced by the MPTVersion2 amendment independent of ledger state changes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load: Standard IOU mixed payment load (XRP-XRP, IOU Direct, AMM/LOB 1path1step, 3path3step, 6path8step)&lt;/li&gt;
&lt;li&gt;No MPT transactions included&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Average Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3.1.2 Release&lt;/td&gt;
&lt;td&gt;160.84&lt;/td&gt;
&lt;td&gt;4.03&lt;/td&gt;
&lt;td&gt;4.72&lt;/td&gt;
&lt;td&gt;9.25&lt;/td&gt;
&lt;td&gt;30 out of 4476&lt;/td&gt;
&lt;td&gt;12.4&lt;/td&gt;
&lt;td&gt;17.6/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mpt_dex build&lt;/td&gt;
&lt;td&gt;160.29&lt;/td&gt;
&lt;td&gt;4.07&lt;/td&gt;
&lt;td&gt;4.80&lt;/td&gt;
&lt;td&gt;9.59&lt;/td&gt;
&lt;td&gt;32 out of 4438&lt;/td&gt;
&lt;td&gt;12.5&lt;/td&gt;
&lt;td&gt;17.9/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1b. mpt_dex Build — 5-Hour DB Comparison (Baseline DB vs. MPT DEX DB)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;mpt_dex&lt;/code&gt; build was tested against both the baseline database and the MPT DEX-enriched database (populated with MPT issuances, MPToken objects, new AMM pools, and offers) under the same standard mixed payment load. This validates that MPT ledger object population does not degrade performance for non-MPT transactions.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Baseline DB&lt;/td&gt;
&lt;td&gt;159.45&lt;/td&gt;
&lt;td&gt;4.06&lt;/td&gt;
&lt;td&gt;4.78&lt;/td&gt;
&lt;td&gt;9.75&lt;/td&gt;
&lt;td&gt;31 out of 4451&lt;/td&gt;
&lt;td&gt;11.7&lt;/td&gt;
&lt;td&gt;18.9/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MPT DEX DB&lt;/td&gt;
&lt;td&gt;159.20&lt;/td&gt;
&lt;td&gt;4.08&lt;/td&gt;
&lt;td&gt;4.83&lt;/td&gt;
&lt;td&gt;10.05&lt;/td&gt;
&lt;td&gt;44 out of 4423&lt;/td&gt;
&lt;td&gt;12.3&lt;/td&gt;
&lt;td&gt;19.8/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Scenario 2 — MPT DEX Path Payments
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Objective:&lt;/strong&gt; Measure throughput, latency, and resource impact of MPT-enabled cross-currency path payments at increasing path complexity, compared against an IOU-only baseline.&lt;/p&gt;

&lt;p&gt;All three configurations below were tested under a mixed load combining all three path complexity tiers simultaneously:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path Complexity&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 path / 1 step&lt;/td&gt;
&lt;td&gt;Direct single-hop payment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 paths / 3 steps&lt;/td&gt;
&lt;td&gt;Moderate path fan-out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 paths / 8 steps&lt;/td&gt;
&lt;td&gt;Worst-case routing complexity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  2a. IOU-IOU Middle Path — Baseline (Control)
&lt;/h4&gt;

&lt;p&gt;Pure IOU-to-IOU payments routed through IOU intermediate hops. No MPT involvement. Used as the regression control for all path payment comparisons.&lt;/p&gt;

&lt;p&gt;Path structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IOU1 → IOU2 → IOU3 → ... → IOU8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IOU-IOU Middle Path&lt;/td&gt;
&lt;td&gt;142.89&lt;/td&gt;
&lt;td&gt;3.92&lt;/td&gt;
&lt;td&gt;4.59&lt;/td&gt;
&lt;td&gt;9.42&lt;/td&gt;
&lt;td&gt;4 out of 932&lt;/td&gt;
&lt;td&gt;11.4&lt;/td&gt;
&lt;td&gt;16.8/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  2b. MPT-MPT Middle Path — Pure MPT
&lt;/h4&gt;

&lt;p&gt;MPT-to-MPT payments routed exclusively through MPT intermediate hops. This exercises &lt;code&gt;MPTokenIssuance&lt;/code&gt; and &lt;code&gt;MPToken&lt;/code&gt; state lookups at every step of the payment path, with no trust line traversal involved.&lt;/p&gt;

&lt;p&gt;Path structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MPT1 → MPT2 → MPT3 → ... → MPT8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MPT-MPT Middle Path&lt;/td&gt;
&lt;td&gt;163.24&lt;/td&gt;
&lt;td&gt;3.99&lt;/td&gt;
&lt;td&gt;4.59&lt;/td&gt;
&lt;td&gt;11.79&lt;/td&gt;
&lt;td&gt;3 out of 918&lt;/td&gt;
&lt;td&gt;11.7&lt;/td&gt;
&lt;td&gt;16.9/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  2c. MPT-IOU Alternating Middle Path
&lt;/h4&gt;

&lt;p&gt;MPT-to-MPT source/destination payments routed through an alternating sequence of MPT and IOU intermediate hops. This is the most complex path payment configuration, requiring the pathfinding engine to resolve cross-type offer crossings at every step, alternating between &lt;code&gt;MPTokenIssuance&lt;/code&gt; and trust line state lookups.&lt;/p&gt;

&lt;p&gt;Path structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MPT1 → IOU1 → MPT2 → IOU2 → MPT3 → ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MPT-IOU Middle Path&lt;/td&gt;
&lt;td&gt;140.46&lt;/td&gt;
&lt;td&gt;3.98&lt;/td&gt;
&lt;td&gt;4.73&lt;/td&gt;
&lt;td&gt;12.05&lt;/td&gt;
&lt;td&gt;3 out of 921&lt;/td&gt;
&lt;td&gt;11.8&lt;/td&gt;
&lt;td&gt;17.2/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  2d. Endurance Testing across three scenarios
&lt;/h4&gt;

&lt;p&gt;To validate stability under sustained load, all three path payment configurations were run continuously for 5 hours. The objective was to confirm consistent throughput, detect any anomalous degradation over time, and observe CPU and memory behavior beyond the initial ramp-up period.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IOU-IOU Middle Path&lt;/td&gt;
&lt;td&gt;142.56&lt;/td&gt;
&lt;td&gt;4.03&lt;/td&gt;
&lt;td&gt;4.75&lt;/td&gt;
&lt;td&gt;9.72&lt;/td&gt;
&lt;td&gt;34 out of 4476&lt;/td&gt;
&lt;td&gt;12.3&lt;/td&gt;
&lt;td&gt;17.6/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MPT-MPT Middle Path&lt;/td&gt;
&lt;td&gt;163.15&lt;/td&gt;
&lt;td&gt;4.04&lt;/td&gt;
&lt;td&gt;4.77&lt;/td&gt;
&lt;td&gt;11.67&lt;/td&gt;
&lt;td&gt;24 out of 4475&lt;/td&gt;
&lt;td&gt;12.2&lt;/td&gt;
&lt;td&gt;17.7/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MPT-IOU Middle Path&lt;/td&gt;
&lt;td&gt;140.35&lt;/td&gt;
&lt;td&gt;4.09&lt;/td&gt;
&lt;td&gt;4.84&lt;/td&gt;
&lt;td&gt;12.93&lt;/td&gt;
&lt;td&gt;24 out of 4416&lt;/td&gt;
&lt;td&gt;12.4&lt;/td&gt;
&lt;td&gt;18.9/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h5&gt;
  
  
  Endurance Testing System Utilization Graph
&lt;/h5&gt;

&lt;h6&gt;
  
  
  &lt;em&gt;Ledger Validation Time&lt;/em&gt;
&lt;/h6&gt;

&lt;p&gt;Ledger validation time increases with scenario complexity, progressing from IOU-IOU through MPT-MPT to MPT-IOU. All validation times remain below the 5-second target threshold.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiunyverean8ufpgnnfxt.png" alt=" "&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1k67if4q3g8agxo9sdq0.png" alt=" "&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h6&gt;
  
  
  &lt;em&gt;Memory Usage Analysis&lt;/em&gt;
&lt;/h6&gt;

&lt;p&gt;This chart displays normal memory behavior, with usage stabilizing after an initial ramp-up and then holding steady.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IOU-IOU Middle Path&lt;/th&gt;
&lt;th&gt;MPT-MPT Middle Path&lt;/th&gt;
&lt;th&gt;MPT-IOU Middle Path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowq3n7jdebvbpmckubq8.png" alt=" "&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y2fhh9xf5hpk2xbq8xn.png" alt=" "&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9wzmfzu0sut66m1zfw5i.png" alt=" "&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h6&gt;
  
  
  &lt;em&gt;CPU Usage Analysis&lt;/em&gt;
&lt;/h6&gt;

&lt;p&gt;This chart shows stable and low CPU utilization for validator nodes. The spikes are result from the online delete being triggered during the tests.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;IOU-IOU Middle Path&lt;/th&gt;
&lt;th&gt;MPT-MPT Middle Path&lt;/th&gt;
&lt;th&gt;MPT-IOU Middle Path&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhltfs530qxkp0ndpabt.png" alt=" "&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmi30kdqcmphlpklo31g.png" alt=" "&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fllozwqf6t2atrkhrnwlw.png" alt=" "&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Scenario 3 — OfferCreate &amp;amp; AMM Capacity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Objective:&lt;/strong&gt; Assess the performance impact of MPT DEX support on high-frequency DEX transaction types. The load distribution is modeled on observed MainNet DEX traffic, where &lt;code&gt;OfferCreate&lt;/code&gt;, &lt;code&gt;AMMDeposit&lt;/code&gt;, and &lt;code&gt;AMMCreate&lt;/code&gt; are among the most common operations. By comparing IOU-only against MPT/MPT token pair configurations under the same transaction mix, this scenario quantifies how MPT asset support affects DEX throughput and consensus stability.&lt;/p&gt;

&lt;p&gt;The load mix mostly reflects the observed MainNet DEX distribution: 80% &lt;code&gt;OfferCreate&lt;/code&gt;, 18% &lt;code&gt;AMMDeposit&lt;/code&gt;, and 2% &lt;code&gt;AMMCreate&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  3a. 1-Hour Capacity Run — IOU/IOU vs. MPT/MPT
&lt;/h4&gt;

&lt;p&gt;Both token pair configurations were tested under the same load mix. IOU/IOU serves as the regression control; MPT/MPT exercises all MPT-specific flag and authorization checks on both legs of every &lt;code&gt;OfferCreate&lt;/code&gt;, &lt;code&gt;AMMDeposit&lt;/code&gt;, and &lt;code&gt;AMMCreate&lt;/code&gt; transaction.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IOU-IOU&lt;/td&gt;
&lt;td&gt;207.43&lt;/td&gt;
&lt;td&gt;3.89&lt;/td&gt;
&lt;td&gt;4.18&lt;/td&gt;
&lt;td&gt;8.33&lt;/td&gt;
&lt;td&gt;0 out of 940&lt;/td&gt;
&lt;td&gt;12.1&lt;/td&gt;
&lt;td&gt;16.3/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MPT-MPT&lt;/td&gt;
&lt;td&gt;282.57&lt;/td&gt;
&lt;td&gt;3.86&lt;/td&gt;
&lt;td&gt;4.17&lt;/td&gt;
&lt;td&gt;7.58&lt;/td&gt;
&lt;td&gt;0 out of 948&lt;/td&gt;
&lt;td&gt;13.1&lt;/td&gt;
&lt;td&gt;16.9/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  3b. 5-Hour Endurance Testing
&lt;/h4&gt;

&lt;p&gt;Extended longevity runs were conducted to monitor system stability, CPU utilization, and memory growth trends under sustained DEX load with MPT token pairs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;P95 Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IOU-IOU&lt;/td&gt;
&lt;td&gt;206.85&lt;/td&gt;
&lt;td&gt;4.34&lt;/td&gt;
&lt;td&gt;4.18&lt;/td&gt;
&lt;td&gt;8.91&lt;/td&gt;
&lt;td&gt;12 out of 4589&lt;/td&gt;
&lt;td&gt;13.3&lt;/td&gt;
&lt;td&gt;17.1/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MPT-MPT&lt;/td&gt;
&lt;td&gt;281.11&lt;/td&gt;
&lt;td&gt;4.27&lt;/td&gt;
&lt;td&gt;4.17&lt;/td&gt;
&lt;td&gt;8.15&lt;/td&gt;
&lt;td&gt;16 out of 4634&lt;/td&gt;
&lt;td&gt;14.3&lt;/td&gt;
&lt;td&gt;18.2/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The performance evaluation of the MPTVersion2 amendment (XLS-82) demonstrates no material regression against the 3.1.2 production release baseline. The &lt;code&gt;mpt_dex&lt;/code&gt; build achieved 160.29 TPS against 160.84 TPS for the 3.1.2 release under identical load and database conditions — a difference of less than 0.4% — confirming that the amendment introduces no measurable code-level overhead. Similarly, running the &lt;code&gt;mpt_dex&lt;/code&gt; build against the MPT DEX-enriched database (populated with MPT issuances, &lt;code&gt;MPToken&lt;/code&gt; objects, AMM pools, and offers) produced 159.20 TPS compared to 159.45 TPS on the baseline database, confirming that the expanded ledger state from MPT object population does not degrade performance for non-MPT transactions.&lt;/p&gt;

&lt;p&gt;For MPT path payments, the pure MPT-MPT middle path outperformed the IOU-IOU baseline at 163.24 TPS vs. 142.89 TPS — a &lt;strong&gt;14.2%&lt;/strong&gt; improvement — reflecting the lighter per-hop state footprint of &lt;code&gt;MPToken&lt;/code&gt; lookups compared to trust line traversal. The alternating MPT-IOU middle path came in at 140.46 TPS, approximately 1.7% below the IOU-IOU baseline, consistent with the additional cross-type offer crossing overhead incurred at every hop. These results held stable across the 5-hour endurance runs, with throughput, latency, and memory utilization remaining consistent between the 1-hour and extended runs across all three configurations. CPU utilization remained low and stable throughout, and memory growth stabilized after an initial ramp-up with no runaway growth observed.&lt;/p&gt;

&lt;p&gt;For Offer/AMM transaction mixload capacity, MPT/MPT token pairs demonstrated notably higher throughput than IOU/IOU under the MainNet-modeled load mix, achieving 282.57 TPS vs. 207.43 TPS in the 1-hour run and 281.11 TPS vs. 206.85 TPS over the 5-hour endurance run. Overvalidation rates remained low and well within acceptable bounds across both configurations, and consensus latency stayed comfortably within the 5-second target throughout all test runs.&lt;/p&gt;

&lt;p&gt;From a deployment perspective, the MPTVersion2 amendment can be safely activated without compromising MainNet SLOs for throughput, consensus latency, or resource utilization. MPT assets are performant as first-class DEX participants, and the amendment introduces no regressions to existing IOU-based payment and DEX operations.&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Lending Protocol Performance Test Report</title>
      <dc:creator>Qi Zhao</dc:creator>
      <pubDate>Thu, 05 Feb 2026 18:22:38 +0000</pubDate>
      <link>https://dev.to/ripplexdev/lending-protocol-performance-test-report-3cjn</link>
      <guid>https://dev.to/ripplexdev/lending-protocol-performance-test-report-3cjn</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;The &lt;strong&gt;Single Asset Vault (SAV, XLS-65)&lt;/strong&gt; and &lt;strong&gt;Lending Protocol (XLS-66)&lt;/strong&gt; together introduce the foundational infrastructure for on-ledger liquidity aggregation and lending within the XRPL ecosystem.&lt;/p&gt;

&lt;p&gt;The SAV enables depositors to aggregate XRP, IOU, or MPT assets into a shared vault represented by Multi-Purpose Token (MPT) ownership shares.&lt;br&gt;&lt;br&gt;
The Lending Protocol, built atop these vaults, allows creation of loans, repayments, and deletions tied to vault liquidity through &lt;code&gt;LoanSet&lt;/code&gt;, &lt;code&gt;LoanPay&lt;/code&gt;, and &lt;code&gt;LoanDelete&lt;/code&gt; transactions.&lt;/p&gt;

&lt;p&gt;This report summarizes a comprehensive performance evaluation of both amendments under high-load scenarios. Tests were executed in RippleX’s private performance network to quantify throughput, consensus latency, CPU/memory utilization, and ledger growth impacts.&lt;/p&gt;

&lt;p&gt;The results demonstrate that the SAV and Lending amendments are performant and stable, with predictable memory growth linked to ledger object expansion, and that both features can be safely activated without compromising the 5-second consensus target.&lt;/p&gt;

&lt;h1&gt;
  
  
  Testing Objectives
&lt;/h1&gt;

&lt;p&gt;The primary objective of this testing was to assess the performance of lending protocol transactions and their impact on consensus processing, particularly under high-load conditions. Specifically, we aimed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluate the capacity limits of the XRPL when processing lending protocol transactions alongside existing payment transactions.
&lt;/li&gt;
&lt;li&gt;Validate SAV and Lending transaction throughput across XRP, IOU, and MPT asset types.
&lt;/li&gt;
&lt;li&gt;Measure CPU and memory overhead introduced by new ledger objects (&lt;code&gt;Vault&lt;/code&gt;, &lt;code&gt;Loan&lt;/code&gt;, &lt;code&gt;LoanBroker&lt;/code&gt;, &lt;code&gt;Vault pseudo-account&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Identify potential bottlenecks or performance degradation caused by lending protocol related operations.
&lt;/li&gt;
&lt;li&gt;Ensure that the network maintains a 5-second consensus latency threshold, even under the most demanding scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Testing Methodology
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Capacity Planning
&lt;/h2&gt;

&lt;p&gt;To measure the maximum performance impact of integrating lending protocol transactions, we used the 5-second consensus latency limit as the benchmark for network capacity. This threshold ensures that the network remains in optimal condition while processing a mix of lending protocol, single asset vault and standard payment transactions. During testing, we monitored both ledger and consensus performance to determine whether the network load exceeded this latency criterion. Instances where the network surpassed this limit are referred to as “overvalidation” in the results below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Environment
&lt;/h2&gt;

&lt;p&gt;Our testing infrastructure simulated a private XRPL environment with 9 nodes, matching Ripple's MainNet in terms of hardware specifications. The key features of this environment are the following.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network Setup&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;5 function as validator nodes
&lt;/li&gt;
&lt;li&gt;4 serve as client P2P nodes, interfacing with load generators
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Uniform System Specifications&lt;/strong&gt;: Each system mirrors the hardware specifications found in Ripple’s MainNet rippled infrastructure. Specifically, they are hosted on AWS's EC2 instance type, z1d.2xlarge, boasting 8 CPU cores, 64GB RAM, and 300GB NVMe SSD storage, dedicated to the rippled database.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Network Configuration&lt;/strong&gt;: All nodes operate within the same AWS region and are interconnected through a shared LAN.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Load Submission&lt;/strong&gt;: Between 1 and 4 load servers are actively engaged in transmitting transactions to the 4 P2P nodes.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Account Setup&lt;/strong&gt;: A total of 250K synthetic accounts were established, built atop a public ledger synchronized from the MainNet as of Mar 11th, 2025. Provisions were made in the simulation logic to ensure the uniqueness of source and destination accounts for every consensus cycle.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Configuration Continuity&lt;/strong&gt;: The rippled configuration file was sourced directly from a Ripple MainNet validator. While the core configurations remained unchanged, requisite modifications were made to align with the specific needs of our environment.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Test Data Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Permissioned Domain
&lt;/h3&gt;

&lt;p&gt;To simulate the most computationally intensive ledger path, all lending activities were executed within a &lt;strong&gt;permissioned domain&lt;/strong&gt; environment, ensuring every transaction incurred &lt;strong&gt;credential verification&lt;/strong&gt; and &lt;strong&gt;domain access checks&lt;/strong&gt; at runtime.&lt;/p&gt;

&lt;p&gt;A synthetic dataset was constructed to model large-scale permissioned lending behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Credential Issuers&lt;/strong&gt; – A pool of domain-authority accounts issued credentials through &lt;code&gt;CredentialCreate&lt;/code&gt; transactions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subjects (Participants)&lt;/strong&gt; – All participating accounts accepted credentials via &lt;code&gt;CredentialAccept&lt;/code&gt;, establishing verified identities under their respective domains.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissioned Domains&lt;/strong&gt; – Domain-owner accounts created &lt;code&gt;PermissionedDomainSet&lt;/code&gt; ledger entries, each configured to authorize &lt;strong&gt;up to 10 unique credentials&lt;/strong&gt; (the protocol’s maximum).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, &lt;strong&gt;every Vault, Broker, and Borrower&lt;/strong&gt; operated under enforced domain constraints. Each loan transaction therefore required on-ledger verification of &lt;code&gt;PermissionedDomain&lt;/code&gt; and &lt;code&gt;Credential&lt;/code&gt; objects, — amplifying computational and I/O load during consensus.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-Purpose Token
&lt;/h3&gt;

&lt;p&gt;To support MPT-backed vault testing, the environment was pre-initialized with Multi-Purpose Token (MPT) objects following the XLS-33 specification.&lt;/p&gt;

&lt;p&gt;A subset of accounts acted as MPT issuers, each creating several token issuances with authorization and transfer flags enabled to simulate real-world tokenization complexity. After creation, all remaining accounts were authorized as holders and received distributed token balances through MPT-based &lt;code&gt;Payment&lt;/code&gt; transactions. This process populated the ledger with a large number of active &lt;code&gt;MPTokenIssuance&lt;/code&gt; and &lt;code&gt;MPToken&lt;/code&gt; objects, ensuring realistic token distribution and directory-node activity across the network.&lt;/p&gt;

&lt;p&gt;In summary, MPT generation followed this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Select issuer accounts&lt;/strong&gt; to create new MPT issuances (&lt;code&gt;MPTokenIssuanceCreate&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable authorization&lt;/strong&gt; (&lt;code&gt;lsfMPTRequireAuth&lt;/code&gt;) to require holder registration.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorize holders&lt;/strong&gt; using &lt;code&gt;MPTokenAuthorize&lt;/code&gt; transactions.
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distribute tokens&lt;/strong&gt; via standard &lt;code&gt;Payment&lt;/code&gt; operations referencing &lt;code&gt;mpt_issuance_id&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Populate ledger&lt;/strong&gt; with MPT balances to be used by vault depositors and borrowers in lending operations.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Lending Protocol
&lt;/h3&gt;

&lt;p&gt;To comprehensively evaluate the Lending Protocol’s performance, a high-complexity, mixed-role dataset was created to emulate realistic cross-flows between depositors and borrowers.&lt;/p&gt;

&lt;p&gt;The database comprised &lt;strong&gt;250,000 total accounts&lt;/strong&gt;, distributed across four load servers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vault Owners (also LoanBrokers)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8,000&lt;/td&gt;
&lt;td&gt;Each account owns one or more Vaults and acts as the associated LoanBroker.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Depositors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;130,000&lt;/td&gt;
&lt;td&gt;Provide liquidity through VaultDeposit; some also serve as borrowers (dual-role).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Borrowers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;130,000&lt;/td&gt;
&lt;td&gt;Create loans via LoanSet and make repayments via LoanPay.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dual-role overlap (Depositor ∩ Borrower)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;18,000&lt;/td&gt;
&lt;td&gt;Participate in both sides of lending, creating circular fund flows that increase ledger contention.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each Vault services &lt;strong&gt;15–30 depositors&lt;/strong&gt; and &lt;strong&gt;10–15 borrowers&lt;/strong&gt;, deliberately maximizing DirectoryNode update and SHAMap node insertion.&lt;/p&gt;

&lt;h4&gt;
  
  
  Vault Setup
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Vault Types – Three asset configurations were deployed:
&lt;/li&gt;
&lt;li&gt;XRP-based, IOU-based, and MPT-based Vaults.
&lt;/li&gt;
&lt;li&gt;Privacy – All Vaults were flagged as Private, inheriting the domain’s permission rules.
&lt;/li&gt;
&lt;li&gt;Precision – Asset scales were configured to their spec defaults (&lt;code&gt;scale = 0&lt;/code&gt; for XRP/MPT, &lt;code&gt;scale = 6&lt;/code&gt; for IOU).
&lt;/li&gt;
&lt;li&gt;Liquidity Initialization – Vault owners funded liquidity pools via &lt;code&gt;VaultDeposit&lt;/code&gt;; depositors received MPT share tokens representing proportional ownership.
&lt;/li&gt;
&lt;li&gt;Cross-Vault Distribution – Depositors diversified across vaults to trigger higher inter-vault transaction frequency and hash-tree activity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Loan Setup
&lt;/h4&gt;

&lt;p&gt;To exercise all high-cost code paths in the protocol, loans were generated to reflect the most computation-heavy configuration supported by the spec:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multisign Loan Creation&lt;/strong&gt;
Each loan was established through LoanSet, signed by the &lt;strong&gt;LoanBroker (Vault Owner)&lt;/strong&gt; and &lt;strong&gt;Borrower&lt;/strong&gt;, validating both Credential and domain access permissions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample Complex Loan Terms with overpayment flags&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;InterestRate: 6 %
&lt;/li&gt;
&lt;li&gt;LateInterestRate: 8 %
&lt;/li&gt;
&lt;li&gt;OverpaymentInterestRate: 2 %
&lt;/li&gt;
&lt;li&gt;CloseInterestRate: 1 % (prepayment penalty)
&lt;/li&gt;
&lt;li&gt;OverpaymentFee: 0.1 %
&lt;/li&gt;
&lt;li&gt;ServiceFeeRate: 0.2 %
&lt;/li&gt;
&lt;li&gt;ManagementFeeRate: 15 %
&lt;/li&gt;
&lt;li&gt;PaymentInterval: 10000000
&lt;/li&gt;
&lt;li&gt;PaymentTotal: 1000
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Overpayment Coverage&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;All loans were configured with both &lt;code&gt;lsfLoanOverpayment&lt;/code&gt; (Loan flag) and &lt;code&gt;tfLoanOverpayment&lt;/code&gt; (LoanPay flag) set, forcing every payment to execute the overpayment branch of the protocol.
&lt;/li&gt;
&lt;li&gt;Each transaction recalculates the overpayment interest, deducts fees, applies the remaining amount to principal, and re-amortizes the remaining loan schedule—representing a computationally intensive path in the Lending Protocol.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Load Modeling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  #1 Payment Baseline
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A mixed load of standard payment transactions involving both the AMM-based and LOB-based decentralized exchanges (DEX).
&lt;/li&gt;
&lt;li&gt;This scenario establishes a baseline for network performance under typical MainNet conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We integrated a realistic payment distribution, encompassing various transaction types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XRP-XRP Transaction
&lt;/li&gt;
&lt;li&gt;IOU-Direct Transaction
&lt;/li&gt;
&lt;li&gt;LOB 1path1step transaction
&lt;/li&gt;
&lt;li&gt;LOB 3path3step transaction
&lt;/li&gt;
&lt;li&gt;LOB 6path8step transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Payment Mixload&lt;/td&gt;
&lt;td&gt;159.31&lt;/td&gt;
&lt;td&gt;3.96&lt;/td&gt;
&lt;td&gt;9.79&lt;/td&gt;
&lt;td&gt;9 out of 924&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;16/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  #2 Lending Protocol and Single Asset Vault Transactions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This test phase focused on evaluating the end-to-end performance of all core transaction types introduced by the Single Asset Vault (SAV, XLS-65) and Lending Protocol (XLS-66) amendments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  XRP
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transaction Type&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VaultDeposit&lt;/td&gt;
&lt;td&gt;328.35&lt;/td&gt;
&lt;td&gt;3.30&lt;/td&gt;
&lt;td&gt;4.07&lt;/td&gt;
&lt;td&gt;1 out of 925&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;23/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VaultWithdraw&lt;/td&gt;
&lt;td&gt;303.56&lt;/td&gt;
&lt;td&gt;3.96&lt;/td&gt;
&lt;td&gt;4.21&lt;/td&gt;
&lt;td&gt;1 out of 924&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;23/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VaultCreate&lt;/td&gt;
&lt;td&gt;255.52&lt;/td&gt;
&lt;td&gt;3.92&lt;/td&gt;
&lt;td&gt;4.56&lt;/td&gt;
&lt;td&gt;1 out of 935&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;24/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanPay&lt;/td&gt;
&lt;td&gt;242.53&lt;/td&gt;
&lt;td&gt;3.90&lt;/td&gt;
&lt;td&gt;3.67&lt;/td&gt;
&lt;td&gt;1 out of 940&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;25/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet&lt;/td&gt;
&lt;td&gt;210.36&lt;/td&gt;
&lt;td&gt;3.98&lt;/td&gt;
&lt;td&gt;5.34&lt;/td&gt;
&lt;td&gt;3 out of 920&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;26/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanDelete&lt;/td&gt;
&lt;td&gt;185.42&lt;/td&gt;
&lt;td&gt;4.02&lt;/td&gt;
&lt;td&gt;5.67&lt;/td&gt;
&lt;td&gt;3 out of 905&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;26/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  IOU
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transaction Type&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VaultDeposit&lt;/td&gt;
&lt;td&gt;268.33&lt;/td&gt;
&lt;td&gt;4.08&lt;/td&gt;
&lt;td&gt;5.36&lt;/td&gt;
&lt;td&gt;9 out of 897&lt;/td&gt;
&lt;td&gt;16.5&lt;/td&gt;
&lt;td&gt;26/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VaultWithdraw&lt;/td&gt;
&lt;td&gt;238.77&lt;/td&gt;
&lt;td&gt;3.95&lt;/td&gt;
&lt;td&gt;4.64&lt;/td&gt;
&lt;td&gt;4 out of 926&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;27/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VaultCreate&lt;/td&gt;
&lt;td&gt;230.06&lt;/td&gt;
&lt;td&gt;3.11&lt;/td&gt;
&lt;td&gt;6.51&lt;/td&gt;
&lt;td&gt;4 out of 1176&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;27/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanPay&lt;/td&gt;
&lt;td&gt;170.70&lt;/td&gt;
&lt;td&gt;3.82&lt;/td&gt;
&lt;td&gt;3.63&lt;/td&gt;
&lt;td&gt;1 out of 957&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;26/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet&lt;/td&gt;
&lt;td&gt;166.57&lt;/td&gt;
&lt;td&gt;3.97&lt;/td&gt;
&lt;td&gt;5.59&lt;/td&gt;
&lt;td&gt;9 out of 920&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;28/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanDelete&lt;/td&gt;
&lt;td&gt;150.64&lt;/td&gt;
&lt;td&gt;4.18&lt;/td&gt;
&lt;td&gt;5.88&lt;/td&gt;
&lt;td&gt;5 out of 900&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;27/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  MPT
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transaction Type&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VaultDeposit&lt;/td&gt;
&lt;td&gt;269.98&lt;/td&gt;
&lt;td&gt;4.00&lt;/td&gt;
&lt;td&gt;5.28&lt;/td&gt;
&lt;td&gt;2 out of 914&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;24/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VaultWithdraw&lt;/td&gt;
&lt;td&gt;205.96&lt;/td&gt;
&lt;td&gt;3.83&lt;/td&gt;
&lt;td&gt;3.94&lt;/td&gt;
&lt;td&gt;2 out of 957&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;25/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VaultCreate&lt;/td&gt;
&lt;td&gt;236.68&lt;/td&gt;
&lt;td&gt;3.94&lt;/td&gt;
&lt;td&gt;4.16&lt;/td&gt;
&lt;td&gt;1 out of 928&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;25/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanPay&lt;/td&gt;
&lt;td&gt;178.12&lt;/td&gt;
&lt;td&gt;3.70&lt;/td&gt;
&lt;td&gt;3.45&lt;/td&gt;
&lt;td&gt;1 out of 987&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;25/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet&lt;/td&gt;
&lt;td&gt;207.51&lt;/td&gt;
&lt;td&gt;3.94&lt;/td&gt;
&lt;td&gt;5.27&lt;/td&gt;
&lt;td&gt;4 out of 928&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;27/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanDelete&lt;/td&gt;
&lt;td&gt;165.21&lt;/td&gt;
&lt;td&gt;4.05&lt;/td&gt;
&lt;td&gt;5.45&lt;/td&gt;
&lt;td&gt;3 out of 910&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;26/64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  #3 Lending + Payment Mixload capacity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simulated a realistic maximum load scenario combining standard payment and lending protocol transactions.
&lt;/li&gt;
&lt;li&gt;Replaced 60% of baseline payment throughput with lending-heavy operations (LoanSet and LoanPay) across XRP, IOU, and MPT assets.
&lt;/li&gt;
&lt;li&gt;Mixed remaining 40% with payment, AMM, and DEX transactions to emulate mainnet traffic diversity.
&lt;/li&gt;
&lt;li&gt;Conducted 1-hour preliminary testing to benchmark throughput and latency under blended load.
&lt;/li&gt;
&lt;li&gt;Performed extended longevity testing to monitor system stability, CPU utilization, and memory growth trends.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Transaction Execution Realistic Percentage:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;9.72% XRP-XRP Payment
&lt;/li&gt;
&lt;li&gt;9.72% IOU Direct Payment
&lt;/li&gt;
&lt;li&gt;9.72% AMM/LOB 1path1step Payment
&lt;/li&gt;
&lt;li&gt;0.66% AMM/LOB 3path3step Payment
&lt;/li&gt;
&lt;li&gt;9.89% AMM/LOB 6path8step Payment
&lt;/li&gt;
&lt;li&gt;12.5% AMM/LOB IOU Direct Payment
&lt;/li&gt;
&lt;li&gt;10% XRP LoanSet Transaction
&lt;/li&gt;
&lt;li&gt;10% XRP LoanPay Transaction
&lt;/li&gt;
&lt;li&gt;10% IOU LoanSet Transaction
&lt;/li&gt;
&lt;li&gt;10% IOU LoanPay Transaction
&lt;/li&gt;
&lt;li&gt;10% MPT LoanSet Transaction
&lt;/li&gt;
&lt;li&gt;10% MPT LoanPay Transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lending Mixload  - 1h&lt;/td&gt;
&lt;td&gt;147.99&lt;/td&gt;
&lt;td&gt;3.97&lt;/td&gt;
&lt;td&gt;14.99&lt;/td&gt;
&lt;td&gt;4 out of 921&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;22/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lending Mixload  - 12h&lt;/td&gt;
&lt;td&gt;152.83&lt;/td&gt;
&lt;td&gt;3.92&lt;/td&gt;
&lt;td&gt;12.03&lt;/td&gt;
&lt;td&gt;19 out of 11023&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;26/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lending Mixload - 12h continued&lt;/td&gt;
&lt;td&gt;154.92&lt;/td&gt;
&lt;td&gt;3.87&lt;/td&gt;
&lt;td&gt;10.56&lt;/td&gt;
&lt;td&gt;12 out of 11154&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;32/64GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  #4 LoanSet Mixload capacity
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;th&gt;Average Node Memory Growth&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet 1h Target 45 TPS&lt;/td&gt;
&lt;td&gt;46.13&lt;/td&gt;
&lt;td&gt;3.56&lt;/td&gt;
&lt;td&gt;3.45&lt;/td&gt;
&lt;td&gt;0 out of 1027&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;19/64GB&lt;/td&gt;
&lt;td&gt;4.43GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet 1h Target 90 TPS&lt;/td&gt;
&lt;td&gt;90.95&lt;/td&gt;
&lt;td&gt;3.62&lt;/td&gt;
&lt;td&gt;3.62&lt;/td&gt;
&lt;td&gt;1 out of 1011&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;21/64GB&lt;/td&gt;
&lt;td&gt;4.95GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet 1h Target 135 TPS&lt;/td&gt;
&lt;td&gt;132.10&lt;/td&gt;
&lt;td&gt;3.67&lt;/td&gt;
&lt;td&gt;2.19&lt;/td&gt;
&lt;td&gt;0 out of 998&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;23/64GB&lt;/td&gt;
&lt;td&gt;5.53GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet 1h Target 180 TPS&lt;/td&gt;
&lt;td&gt;180.83&lt;/td&gt;
&lt;td&gt;3.78&lt;/td&gt;
&lt;td&gt;4.24&lt;/td&gt;
&lt;td&gt;1 out of 968&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;24/64GB&lt;/td&gt;
&lt;td&gt;5.61GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet 1h Target 200 TPS&lt;/td&gt;
&lt;td&gt;193.83&lt;/td&gt;
&lt;td&gt;3.90&lt;/td&gt;
&lt;td&gt;4.97&lt;/td&gt;
&lt;td&gt;1 out of 938&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;24/64GB&lt;/td&gt;
&lt;td&gt;5.77GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LoanSet 1h Target 225 TPS&lt;/td&gt;
&lt;td&gt;227.23&lt;/td&gt;
&lt;td&gt;4.16&lt;/td&gt;
&lt;td&gt;5.84&lt;/td&gt;
&lt;td&gt;21 out of 880&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;25/64GB&lt;/td&gt;
&lt;td&gt;6.74GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  LoanSet Memory Growth Graph
&lt;/h4&gt;

&lt;p&gt;The figure below illustrates the &lt;strong&gt;memory growth trend&lt;/strong&gt; observed during continuous &lt;em&gt;LoanSet&lt;/em&gt; transaction execution at increasing throughput targets.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12qn2djkkvuqnj6hiodt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12qn2djkkvuqnj6hiodt.png" alt="LoanSet Memory Growth Graph" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lending Mixload System Utilization Graph
&lt;/h2&gt;

&lt;h3&gt;
  
  
  CPU Usage
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g8lpdka4lyol4r3r1h1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g8lpdka4lyol4r3r1h1.png" alt="CPU Usage" width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  RAM Usage
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vl4se7exebxquuxxmf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2vl4se7exebxquuxxmf5.png" alt="RAM Usage" width="800" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The performance evaluation of the Lending Protocol (XLS-66) and Single Asset Vault (XLS-65) demonstrates that both amendments deliver high throughput across XRP, IOU, and MPT asset types while consistently maintaining consensus stability within the 5-second ledger target.&lt;/p&gt;

&lt;p&gt;However, memory growth remains the primary long-term risk factor under sustained lending workloads. During extended 24-hour Lending Mixload performance tests, RAM utilization exceeded 30 GB, driven by the cumulative expansion of SHAMap nodes from continuous LoanSet transactions. Although this remains below the 64 GB capacity of our test nodes, it raises potential concerns for validators operating with 32 GB RAM, where prolonged high-volume lending activity could approach system limits.&lt;/p&gt;

&lt;p&gt;To mitigate these risks, SHAMap node optimization and ledger object pruning should be prioritized in future rippled initiatives. These improvements will curb in-memory state growth and enhance long-term sustainability as new high-complexity features are introduced.&lt;/p&gt;

&lt;p&gt;From a deployment perspective, the current Lending Mixload throughput of ~152 TPS is sufficient to support near-term production needs and customer-scale adoption. Continued optimization efforts will further strengthen the ledger’s ability to sustain heavy workloads such as lending, AMM operations, and multi-asset payments.&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Batch Transaction Performance Testing Report</title>
      <dc:creator>Qi Zhao</dc:creator>
      <pubDate>Tue, 12 Aug 2025 20:44:19 +0000</pubDate>
      <link>https://dev.to/ripplexdev/batch-transaction-performance-testing-report-13j8</link>
      <guid>https://dev.to/ripplexdev/batch-transaction-performance-testing-report-13j8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Qi Zhao, Luc des Trois Maisons  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Atomic/Batch Transactions is a proposed amendment to the XRPL that enables the atomic execution of multiple transactions as a single unit. By ensuring that complex, multi-step operations either fully succeed or entirely revert, this feature introduces significant usability and flexibility improvements, enabling use-cases such as atomic swaps, conditional token minting, and integrated fee management.&lt;/p&gt;

&lt;p&gt;To evaluate the performance implications of Batch transactions, the RippleX performance team conducted targeted benchmarking tests. This report details our testing methodology, results, and observations, highlighting the impact of Batch transactions on ledger throughput, consensus latency, and resource utilization.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Testing Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The primary objectives for Batch transaction performance testing are to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assess ledger throughput and response times under varying Batch transaction scenarios, including “All or Nothing”, “Only One”, “Until Failure”, and “Independent” modes.&lt;/li&gt;
&lt;li&gt;Identify performance bottlenecks specifically related to Batch transaction processing.&lt;/li&gt;
&lt;li&gt;Ensure the network maintains a 5 seconds consensus latency under high load.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Testing Methodology&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Capacity Planning&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To measure the maximum performance impact of integrating Batch transactions, we establish a deadline for network ledger validation of 5 seconds. This threshold ensures that the network remains in optimal condition while processing transactions. During testing, we monitor both ledger and consensus performance to establish any occurrence of the network failing to meet this deadline. Each discrete occurrence where the network fails to do so is noted, and referred to as an “overvalidation” in the results below.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Test Environment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Our testing infrastructure simulates a private XRPL environment with 9 nodes, matching Ripple's MainNet in terms of hardware specifications. The key features of this environment are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Network Setup&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 nodes function as validators.
&lt;/li&gt;
&lt;li&gt;4 nodes operate in P2P mode, serving as non-validating client gateways, enabling our load generators to interface with the network.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Uniform System Specifications:&lt;/strong&gt; Each system mirrors the hardware specifications found in Ripple’s MainNet rippled infrastructure. Specifically, they are hosted on AWS EC2’s z1d.2xlarge instance type, which provides 8 CPU cores, 64GB RAM, and 300GB NVMe SSD storage, dedicated to the rippled database.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Configuration:&lt;/strong&gt; All nodes operate within the same AWS region and are interconnected through a shared VPC.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Load Submission:&lt;/strong&gt; During testing, 4 load servers actively and continuously submit transactions to the 4 P2P nodes.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Account Setup:&lt;/strong&gt;  A total of 250K synthetic accounts were established, built atop a snapshot of the MainNet ledger captured on Aug 22nd, 2024. Provisions were made in the simulation logic to ensure the uniqueness of source and destination accounts for every consensus cycle.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuration Consistency:&lt;/strong&gt;  The rippled configuration used for the test network was sourced from a UNL Ripple MainNet validator. For testing purposes, a minimal set of necessary changes are applied to segregate our network and align with the specific needs of our environment.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Test Data Setup&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Four primary Batch transaction scenarios are tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All or nothing:&lt;/strong&gt; For each Batch transaction submitted under this mode, either all internal transactions apply successfully, or they all are discarded with no effect on ledger state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only one:&lt;/strong&gt; In this mode, at most one inner transaction may be accepted, and update the ledger state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Until Failure:&lt;/strong&gt; Inner transactions are applied in the order submitted in the Batch, and may each be accepted in-turn and update the ledger state. However, should an inner transaction fail to be applied, all subsequent inner transactions must also be discarded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent:&lt;/strong&gt; All inner transactions are considered independently, and may be accepted or rejected notwithstanding the fate of the others submitted in the Batch.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Load Modeling&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Metrics of interest&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each scenario's performance metrics included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transaction throughput (TPS)&lt;/li&gt;
&lt;li&gt;Response times&lt;/li&gt;
&lt;li&gt;Consensus latency (overvalidation rate)&lt;/li&gt;
&lt;li&gt;CPU and memory utilization&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Transaction Distribution&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We integrated a realistic payment distribution into each Batch, encompassing various transaction types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XRP-XRP Transaction&lt;/li&gt;
&lt;li&gt;IOU-Direct Transaction&lt;/li&gt;
&lt;li&gt;AMM/LOB 1path1step transaction&lt;/li&gt;
&lt;li&gt;AMM/LOB 3path3step transaction&lt;/li&gt;
&lt;li&gt;AMM/LOB 6path8step transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each Batch consisted of the maximum allowed 8 inner transactions. Batches were then submitted to evaluate ledger performance metrics.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Error Case Simulation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To rigorously test the atomicity guarantees provided by Batch transactions, we deliberately introduced an error in the final inner transaction of each Batch. This transaction was crafted to pass preflight validation checks but to fail during the consensus phase, causing the entire Batch to revert and testing the system's ability to correctly handle such atomic failures.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Performance Results&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Payment Baseline&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transaction Type&lt;/th&gt;
&lt;th&gt;TPS (requests/s)&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publish Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation (count)&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (rippled RES in GB / % of Total Memory)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Payment Mixed load&lt;/td&gt;
&lt;td&gt;161.22&lt;/td&gt;
&lt;td&gt;161.22&lt;/td&gt;
&lt;td&gt;3.91&lt;/td&gt;
&lt;td&gt;7.56&lt;/td&gt;
&lt;td&gt;2 out of 936 ledgers&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;16 GB / 64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;System Statistics&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn73fi6dtzh1sq2cfna2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn73fi6dtzh1sq2cfna2i.png" alt=" " width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Novel Batch Scenarios&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Batch TPS (requests/s)&lt;/th&gt;
&lt;th&gt;Ledger throughput per second&lt;/th&gt;
&lt;th&gt;Mean Ledger Publishing Latency (s)&lt;/th&gt;
&lt;th&gt;Response Time (ms)&lt;/th&gt;
&lt;th&gt;Over Validation&lt;/th&gt;
&lt;th&gt;CPU Utilization (%)&lt;/th&gt;
&lt;th&gt;Memory Usage (GB / Total)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;All Or Nothing w/ no expected failures&lt;/td&gt;
&lt;td&gt;29.45&lt;/td&gt;
&lt;td&gt;266.61&lt;/td&gt;
&lt;td&gt;4.029&lt;/td&gt;
&lt;td&gt;5.81&lt;/td&gt;
&lt;td&gt;4 out of 908&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;21 / 64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All Or Nothing w/ trailing erroneous inner transaction&lt;/td&gt;
&lt;td&gt;75.63&lt;/td&gt;
&lt;td&gt;75.41&lt;/td&gt;
&lt;td&gt;3.959&lt;/td&gt;
&lt;td&gt;6.26&lt;/td&gt;
&lt;td&gt;4 out of 924&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;27.52 / 64GB 43%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Only One&lt;/td&gt;
&lt;td&gt;51.46&lt;/td&gt;
&lt;td&gt;102.58&lt;/td&gt;
&lt;td&gt;3.589&lt;/td&gt;
&lt;td&gt;5.57&lt;/td&gt;
&lt;td&gt;2 in 1020&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;20.6 / 64 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Until Failure w/ no expected failures @ 150 TPS target throughput&lt;/td&gt;
&lt;td&gt;51.42&lt;/td&gt;
&lt;td&gt;465.07&lt;/td&gt;
&lt;td&gt;5.518&lt;/td&gt;
&lt;td&gt;7.98&lt;/td&gt;
&lt;td&gt;503 out of 663&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;23.7 / 64 GB 37%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Until Failure w/ no expected failures @ 60 TPS target throughput&lt;/td&gt;
&lt;td&gt;21.65&lt;/td&gt;
&lt;td&gt;195.34&lt;/td&gt;
&lt;td&gt;3.741&lt;/td&gt;
&lt;td&gt;5.22&lt;/td&gt;
&lt;td&gt;3 out of 978&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;16.6 / 64 GB 26%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Until Failure w/ trailing erroneous inner transaction @ 60 TPS target throughput&lt;/td&gt;
&lt;td&gt;21.67&lt;/td&gt;
&lt;td&gt;174.09&lt;/td&gt;
&lt;td&gt;3.532&lt;/td&gt;
&lt;td&gt;5.38&lt;/td&gt;
&lt;td&gt;2 out of 1036&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;17.9 / 64 GB 28%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Independent @ 150 TPS target throughput&lt;/td&gt;
&lt;td&gt;51.42&lt;/td&gt;
&lt;td&gt;464.07&lt;/td&gt;
&lt;td&gt;5.244&lt;/td&gt;
&lt;td&gt;7.05&lt;/td&gt;
&lt;td&gt;400 out of 698&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;20.5 / 64 GB 32%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Independent @ 100 TPS target throughput&lt;/td&gt;
&lt;td&gt;35.60&lt;/td&gt;
&lt;td&gt;321.29&lt;/td&gt;
&lt;td&gt;4.522&lt;/td&gt;
&lt;td&gt;5.87&lt;/td&gt;
&lt;td&gt;60 out of 809&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;18.6 / 64 GB 29%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Independent @ 83 TPS target throughput&lt;/td&gt;
&lt;td&gt;29.75&lt;/td&gt;
&lt;td&gt;269.12&lt;/td&gt;
&lt;td&gt;4.315&lt;/td&gt;
&lt;td&gt;6.48&lt;/td&gt;
&lt;td&gt;34 out of 848&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;24.3 / 64 GB 38%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Independent @ 60 TPS target throughput&lt;/td&gt;
&lt;td&gt;21.65&lt;/td&gt;
&lt;td&gt;196.00&lt;/td&gt;
&lt;td&gt;3.782&lt;/td&gt;
&lt;td&gt;5.40&lt;/td&gt;
&lt;td&gt;3 out of 968&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;16.0 / 64 GB 25%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Observations&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;There appears to be a significant quantity of emergency throughput available at the expense of missing our desired ledger publishing deadlines.&lt;/li&gt;
&lt;li&gt;Each systemically successful inner transaction increases ledger throughput by the submission throughput.&lt;/li&gt;
&lt;li&gt;Failure scenarios and rejected inner transactions can cause the ledger to incur a significant throughput opportunity cost.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The total ledger throughput does not appear to be impaired or hindered when ledger processing includes Batch transactions. However, it should also be noted that Batch transactions containing the full set of 8 inner transactions apply significant leverage to the XRPL’s ledger throughput. We should be mindful of the potential for increased impact when making on-going performance decisions that involve and/or impact Batch transactions.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>xrpl</category>
    </item>
    <item>
      <title>Permissioned DEX Performance Test Report</title>
      <dc:creator>Qi Zhao</dc:creator>
      <pubDate>Wed, 09 Jul 2025 14:14:25 +0000</pubDate>
      <link>https://dev.to/ripplexdev/permissioned-dex-performance-test-report-ok0</link>
      <guid>https://dev.to/ripplexdev/permissioned-dex-performance-test-report-ok0</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Permissioned DEX (Decentralized Exchange) feature is a proposed enhancement to the XRP Ledger (XRPL) that integrates compliance-focused features directly into the core DEX functionality. It enables market participants to place offers and execute payments within domains that enforce KYC/AML requirements through credential verification. This solution supports regulated institutions by allowing them to interact with the XRPL DEX ecosystem without compromising compliance requirements.&lt;/p&gt;

&lt;p&gt;This report presents the performance impact of the Permissioned DEX feature based on dedicated benchmarks carried out by the RippleX performance team. We assessed how the introduction of permissioned offers and payments affects ledger throughput, consensus times, and overall system resource usage. Our findings confirm that the XRPL can support this feature at scale while maintaining performance stability.&lt;/p&gt;

&lt;p&gt;“Permissioned DEX does not fundamentally alter the core design of the order book. For cross-currency payments within a domain, the payment engine must verify whether the offer owner still possesses valid credentials within that domain. This check is expected to incur only minimal performance overhead,” Shawn Xie, RippleX Engineer, outlined. “This report tests the worst-case scenario, where all credentials in the domain must be evaluated for each offer. The observed performance impact aligns with expectations and remains well within acceptable limits.”&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Testing Objectives&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The primary objective of this testing was to assess the mass of transactions involving Permissioned DEX and their impact on consensus processing, particularly under high-load conditions. Specifically, we aimed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluate the XRPL's ability to process Permissioned DEX transactions under high-throughput conditions.&lt;/li&gt;
&lt;li&gt;Identify potential bottlenecks introduced by domain-based permission checks.&lt;/li&gt;
&lt;li&gt;Ensure the 5-second consensus latency threshold is met across varied transaction scenarios.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Testing Methodology&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Capacity Planning&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To measure the maximum performance impact of integrating permissioned dex, we used the 5-second consensus latency limit as the benchmark for network capacity. This threshold ensures that the network remains in optimal condition while processing permissioned-dex transactions. During testing, we monitored both ledger and consensus performance to determine whether the network load exceeded this latency criterion. Instances where the network surpassed this limit are referred to as “overvalidation” in the results below.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Test Environment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Our testing infrastructure simulated a private XRPL environment with 9 nodes, matching Ripple's MainNet in terms of hardware specifications. The key features of this environment are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network Setup&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;5 function as validator nodes&lt;/li&gt;
&lt;li&gt;4 serve as client P2P nodes, interfacing with load generators &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Uniform System Specifications:&lt;/strong&gt; Each system mirrors the hardware specifications found in Ripple’s MainNet rippled infrastructure. Specifically, they are hosted on AWS's EC2 instance type, &lt;code&gt;z1d.2xlarge&lt;/code&gt;, boasting 8 CPU cores, 64GB RAM, and 300GB NVMe SSD storage, dedicated to the rippled database.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Network Configuration:&lt;/strong&gt; All nodes operate within the same AWS region and are interconnected through a shared LAN.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Load Submission:&lt;/strong&gt; Between 1 and 4 load servers are actively engaged in transmitting transactions to the 4 P2P nodes.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Account Setup:&lt;/strong&gt; A total of 100K synthetic accounts were established, built atop a public ledger synchronized from the MainNet as of Aug 22nd, 2024. Provisions were made in the simulation logic to ensure the uniqueness of source and destination accounts for every consensus cycle.
&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Configuration Continuity:&lt;/strong&gt; The rippled configuration file was sourced directly from a Ripple MainNet validator. While the core configurations remained unchanged, requisite modifications were made to align with the specific needs of our environment.&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Test Data Setup&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To model realistic permissioned trading behavior at scale, we created a synthetic dataset consisting of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Credential Issuers:&lt;/strong&gt; A pool of accounts responsible for issuing credentials via &lt;code&gt;CredentialCreate&lt;/code&gt; transactions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subjects:&lt;/strong&gt; Each of the 100,000 test accounts received credentials from various issuers and responded with &lt;code&gt;CredentialAccept&lt;/code&gt; transactions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissioned Domains:&lt;/strong&gt; Dedicated domain-owner accounts created &lt;code&gt;PermissionedDomainSet&lt;/code&gt; ledger entries, each configured to accept up to 10 unique credentials (the maximum permitted by the spec).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example Domain Setup&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tx_json"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"TransactionType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PermissionedDomainSet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Account"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${domain_account}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"AcceptedCredentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Credential"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"Issuer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"r3cFEueRyVKstW1XwuvQJCaTGWHHU7g9mx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"CredentialType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4B5943"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Credential"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"Issuer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rwZAGV84nkkv1yxrdV3kNrpz8B1mXGFLmB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"CredentialType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4B5943"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"secret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${domain_account_seed}"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Offer Setup:&lt;/strong&gt; Offers were created with and without the &lt;code&gt;DomainID&lt;/code&gt;, representing both open and permissioned orderbooks. Offers were distributed across currency pairs and various path complexities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment Configuration:&lt;/strong&gt;  Payment transactions were configured to consume both open and permissioned offers.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Load Modeling&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Payment Routing Terminology&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before diving into the test scenarios, it’s important to understand the terminology used to describe different payment types on the XRPL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IOU-Direct Transaction:&lt;/strong&gt;  A simple transaction where both sender and receiver hold the same issued currency (IOU) from the same issuer — no intermediary is needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Path:&lt;/strong&gt;  A sequence of intermediaries (accounts or orderbooks) used to bridge the gap between sender and receiver when a direct transfer isn't possible. It’s used for cross-currency or cross-issuer payments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Step:&lt;/strong&gt;  A single segment within a payment path. For example, moving funds from XRP to USD through an orderbook is one step. Complex payments may require multiple steps across various currencies or issuers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LOB (Limit Order Book):&lt;/strong&gt;  A decentralized exchange mechanism on the XRPL that enables currency conversions by matching offers.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;#1 Payment Mixload Baseline&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A mixed load of standard payment transactions involving LOB-based decentralized exchanges (DEX).
&lt;/li&gt;
&lt;li&gt;This scenario establishes a baseline for network performance under typical MainNet conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We integrated a realistic payment distribution, encompassing various transaction types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;XRP-XRP Transaction&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IOU-Direct Transaction&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LOB 1path1step transaction&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LOB 3path3step transaction&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LOB 6path8step transaction&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cg46dwm4gcuz5hhoy0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cg46dwm4gcuz5hhoy0o.png" alt=" " width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fbx1k1k69nxaauo7qgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fbx1k1k69nxaauo7qgm.png" alt=" " width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;#2 Payment Mixload with Permissioned DEX&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Same distribution as above, with path-based payments routed through the Permissioned DEX for 1-path/1-step, 3-path/3-step, and 6-path/8-step transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qo7vpomgm5rkwzpoi3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qo7vpomgm5rkwzpoi3g.png" alt=" " width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpvug6llgxunv1ix4bf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpvug6llgxunv1ix4bf6.png" alt=" " width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;#3 Open DEX Orderbook Transactions&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A mix of payments that only interact with open orderbooks via LOB (Limit Order Book) transactions.
&lt;/li&gt;
&lt;li&gt;LOB 1path1step transaction, 3path3step transaction, 6path8step transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqovpram1x9xix2kxi1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqovpram1x9xix2kxi1t.png" alt=" " width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiohkbnns5kuc9eclg2gq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiohkbnns5kuc9eclg2gq.png" alt=" " width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;#4 Permissioned DEX Orderbook Transactions&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A mix of payments that exclusively route through permissioned orderbooks, testing credential and domain validation at scale.
&lt;/li&gt;
&lt;li&gt;LOB 1path1step transaction, 3path3step transaction, 6path8step transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiiqv91i4hsdjbwaxm02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiiqv91i4hsdjbwaxm02.png" alt=" " width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dj2cy8q6s081gq3yypr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dj2cy8q6s081gq3yypr.png" alt=" " width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Performance testing of the Permissioned DEX feature demonstrates that XRPL maintains its performance guarantees even under high-throughput scenarios involving domain-restricted offers and credential-validated paths. Across all modeled workloads, consensus times remained under the 5-second threshold, and throughput levels remained consistently above 140 TPS.&lt;/p&gt;

&lt;p&gt;Compared to baseline payment scenarios, Permissioned DEX scenarios showed a slight increase in memory usage — from &lt;strong&gt;20 GB to 21 GB&lt;/strong&gt; in mixed payment loads, and &lt;strong&gt;25 GB to 26 GB&lt;/strong&gt; in DEX-only workloads. CPU utilization remained steady at &lt;strong&gt;10–11%&lt;/strong&gt;, and response times increased by less than &lt;strong&gt;2 ms&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These results validate that Permissioned DEX functionality can be safely introduced into XRPL’s production infrastructure without compromising performance or stability.&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>XLS-0075d: Permission Delegation Performance Test Report</title>
      <dc:creator>Qi Zhao</dc:creator>
      <pubDate>Thu, 29 May 2025 15:20:14 +0000</pubDate>
      <link>https://dev.to/ripplexdev/xls-0075d-permission-delegation-performance-test-report-3jmm</link>
      <guid>https://dev.to/ripplexdev/xls-0075d-permission-delegation-performance-test-report-3jmm</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Permission Delegation&lt;/strong&gt; is a proposed amendment to the XRPL that enables accounts to selectively delegate transaction permissions to other accounts. This mechanism enhances account usability by allowing account holders to distribute specific responsibilities—such as issuing tokens or authorizing trustlines—without relinquishing full control over their accounts.&lt;/p&gt;

&lt;p&gt;By supporting fine-grained authorization, Permission Delegation unlocks new possibilities for multi-party workflows, external integrations, and advanced account management strategies, while maintaining a strong security posture.&lt;/p&gt;

&lt;p&gt;To evaluate the performance implications of this feature, the RippleX performance team carried out targeted benchmarking to assess the impact of delegated transactions on ledger throughput, validation times, and network stability. This report presents our testing setup, performance results, and key observations, demonstrating that &lt;strong&gt;enabling Permission Delegation does not degrade XRPL’s core performance or interfere with other transaction types.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing Objectives
&lt;/h2&gt;

&lt;p&gt;The primary objective of this testing was to assess the mass of transactions involving permission delegation and their impact on consensus processing, particularly under high-load conditions. Specifically, we aimed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assess the network’s capacity to process various transaction types submitted via delegated permissions, with a particular focus on Payment transactions.&lt;/li&gt;
&lt;li&gt;Identify potential bottlenecks or performance degradation caused by permission delegation-related operations.&lt;/li&gt;
&lt;li&gt;Ensure that the network maintains a 5-second consensus latency threshold, even under the most demanding scenarios.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Testing Methodology
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Capacity Planning
&lt;/h3&gt;

&lt;p&gt;To measure the maximum performance impact of integrating permission delegation transactions, we used the 5-second consensus latency limit as the benchmark for network capacity. This threshold ensures that the network remains in optimal condition while processing permission delegation transactions.&lt;/p&gt;

&lt;p&gt;During testing, we monitored both ledger and consensus performance to determine whether the network load exceeded this latency criterion. Instances where the network surpassed this limit are referred to as “overvalidation” in the results below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Environment
&lt;/h3&gt;

&lt;p&gt;Our testing infrastructure simulated a private XRPL environment with 9 nodes, matching Ripple's MainNet in terms of hardware specifications. The key features of this environment are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Network Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 function as validator nodes&lt;/li&gt;
&lt;li&gt;4 serve as client P2P nodes, interfacing with load generators&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Uniform System Specifications:&lt;/strong&gt; Each system mirrors the hardware specifications found in Ripple’s MainNet &lt;code&gt;rippled&lt;/code&gt; infrastructure. Specifically, they are hosted on AWS's EC2 instance type, &lt;code&gt;z1d.2xlarge&lt;/code&gt;, boasting 8 CPU cores, 64GB RAM, and 300GB NVMe SSD storage, dedicated to the &lt;code&gt;rippled&lt;/code&gt; database.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Configuration:&lt;/strong&gt; All nodes operate within the same AWS region and are interconnected through a shared LAN.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Load Submission:&lt;/strong&gt; Between 1 and 4 load servers are actively engaged in transmitting transactions to the 4 P2P nodes.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Account Setup:&lt;/strong&gt; A total of 100K synthetic accounts were established, built atop a public ledger synchronized from the MainNet as of August 22nd, 2024. Provisions were made in the simulation logic to ensure the uniqueness of source and destination accounts for every consensus cycle.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuration Continuity:&lt;/strong&gt; The &lt;code&gt;rippled&lt;/code&gt; configuration file was sourced directly from a Ripple MainNet validator. While the core configurations remained unchanged, requisite modifications were made to align with the specific needs of our environment.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Test Data Setup
&lt;/h2&gt;

&lt;p&gt;To comprehensively evaluate the performance of permission delegation transactions, we constructed a large-scale dataset that accurately simulates real-world usage patterns involving a diverse mix of delegating and delegated accounts.&lt;/p&gt;

&lt;p&gt;Each of the four load servers was allocated &lt;strong&gt;25,000 accounts&lt;/strong&gt;, resulting in a total of &lt;strong&gt;100,000 delegating accounts&lt;/strong&gt; across the entire performance testing environment. Additionally, another &lt;strong&gt;100,000 accounts&lt;/strong&gt; were generated to serve as delegated accounts, enabling realistic delegation scenarios.&lt;/p&gt;

&lt;p&gt;Consistent with the spec, each delegating account pre-created &lt;em&gt;Delegate&lt;/em&gt; ledger objects for the maximum allowable &lt;strong&gt;10 distinct permissions&lt;/strong&gt;. These permissions included both commonly utilized transaction types, such as &lt;code&gt;Payment&lt;/code&gt;, and more specialized transactions, such as &lt;code&gt;TrustlineFreeze&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The transaction payload used during testing is provided below:&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Payload
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tx_json"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"TransactionType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DelegateSet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Account"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${issuer}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Authorize"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${account}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Sequence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${seqNum}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Permissions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Payment"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OfferCreate"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NFTokenMint"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AMMDelete"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MPTokenIssuanceCreate"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MPTokenIssuanceLock"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Clawback"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TrustSet"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TrustlineAuthorize"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"Permission"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"PermissionValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TrustlineFreeze"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fail_hard"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"secret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${secret}"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Furthermore, each delegating account assigned these 10 permissions to 15 separate delegated accounts. This design effectively models a realistic and highly distributed delegation structure involving numerous actors. The diagram below provides a snapshot illustrating the delegation distribution on each load server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh30tuv7ensxiwv7e54tf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh30tuv7ensxiwv7e54tf.png" alt="Image description" width="566" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, to facilitate targeted testing for specific transaction types—particularly those with intricate workflows like multi-path payments—we preconfigured the necessary ledger state for all accounts. This preparation included issuing IOU tokens, establishing trustlines, and setting up requisite Offer and AMM objects in advance. These steps ensured the testing environment authentically represented the conditions required to comprehensively exercise all delegated permissions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Load Modeling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  #1 DelegateSet
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simulate network load by issuing &lt;code&gt;DelegateSet&lt;/code&gt; transactions, each assigning the maximum of 10 permissions per call.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff913est9gntn9i1imxm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff913est9gntn9i1imxm0.png" alt="Image description" width="800" height="162"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowcv5ffew6k3sjtr9kne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowcv5ffew6k3sjtr9kne.png" alt="Image description" width="800" height="152"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  #2 Payment Baseline
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A mixed load of standard payment transactions involving both the AMM-based and LOB-based decentralized exchanges (DEX).&lt;/li&gt;
&lt;li&gt;This scenario establishes a baseline for network performance under typical MainNet conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bfbqc7qljc06r4fnakk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5bfbqc7qljc06r4fnakk.png" alt="Image description" width="800" height="170"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cc4ehsljocwgpw6npoe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cc4ehsljocwgpw6npoe.png" alt="Image description" width="800" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  #3 Permission Delegation Payment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Permission Delegation Payment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A mixed load of payment transactions with delegation
&lt;/li&gt;
&lt;li&gt;XRP-XRP Transaction, IOU-Direct Transaction, AMM/LOB 1path1step transaction, AMM/LOB 3path3step transaction, and AMM/LOB 6path8step transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zhr7qpbwma7h82ft5x9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zhr7qpbwma7h82ft5x9.png" alt="Image description" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oysr9sh3i4pfean47zx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oysr9sh3i4pfean47zx.png" alt="Image description" width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  #4 Permission Delegation Mix Capacity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A load consisting exclusively of MPT transactions, including XRP-XRP Payment, AMM/LOB 6path8step Payment, AMM/LOB IOU Direct Payment, Trustset, Trustsetfreeze, OfferCreate, NFTokenMint, and MPTokenIssuanceCreate transactions.&lt;/li&gt;
&lt;li&gt;This scenario assesses the network's capacity to handle a high volume of transactions involving permission delegation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Transaction Execution Realistic Percentage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;12.5% XRP-XRP Payment
&lt;/li&gt;
&lt;li&gt;12.5% AMM/LOB 6path8step Payment
&lt;/li&gt;
&lt;li&gt;12.5% AMM/LOB IOU Direct Payment
&lt;/li&gt;
&lt;li&gt;12.5% Trustset
&lt;/li&gt;
&lt;li&gt;12.5% Trustsetfreeze
&lt;/li&gt;
&lt;li&gt;12.5% OfferCreate
&lt;/li&gt;
&lt;li&gt;12.5% NFTokenMint
&lt;/li&gt;
&lt;li&gt;12.5% MPTokenIssuanceCreate&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Without Permission Delegation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nbps1sos53gatv3sd22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0nbps1sos53gatv3sd22.png" alt="Image description" width="800" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27rusvyi7j20mj308w4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27rusvyi7j20mj308w4k.png" alt="Image description" width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  With Permission Delegation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55t9vghahkoegeh4d95o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F55t9vghahkoegeh4d95o.png" alt="Image description" width="800" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mt0u4rgjpxd40h8oh2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mt0u4rgjpxd40h8oh2w.png" alt="Image description" width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Based on our comprehensive testing and analysis, the introduction of &lt;strong&gt;Permission Delegation&lt;/strong&gt; does not introduce any significant performance overhead to the XRPL. Across all scenarios—including standard payments, delegated payments, and high-capacity mixed transaction loads—key performance metrics such as transaction throughput, response time, CPU usage, and memory consumption remained stable and within expected ranges.&lt;/p&gt;

&lt;p&gt;In the delegated payment scenario, throughput was stable around the baseline, with only minimal increases in response time and system resource usage. Even under the most demanding conditions involving a diverse mix of delegated transaction types, the XRPL consistently maintained throughput levels above &lt;strong&gt;158 TPS&lt;/strong&gt; and met the 5-second consensus latency target, with only a few instances of over-validation.&lt;/p&gt;

&lt;p&gt;While the overall TPS remained consistent across transactions involving permission delegation (applicable to both delegated payments and mixed transaction scenarios), we did observe a slight &lt;strong&gt;increase in memory usage&lt;/strong&gt;—averaging around an additional &lt;strong&gt;3 GB&lt;/strong&gt;. The &lt;code&gt;DelegateSet&lt;/code&gt; operations reached approximately &lt;strong&gt;543.21 transactions per second&lt;/strong&gt; while maintaining a healthy network status.&lt;/p&gt;

&lt;p&gt;These results validate that Permission Delegation can be safely integrated into the &lt;code&gt;rippled&lt;/code&gt; implementation without compromising network stability or performance. It enables more flexible account management and new use cases—such as &lt;strong&gt;role-based permissions&lt;/strong&gt; and &lt;strong&gt;third-party delegation&lt;/strong&gt;—while preserving the XRPL’s performance guarantees.&lt;/p&gt;

&lt;p&gt;We will continue monitoring and optimizing for real-world deployments to ensure XRPL remains robust and scalable for evolving applications.&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>MPT Performance Test Report</title>
      <dc:creator>Qi Zhao</dc:creator>
      <pubDate>Mon, 27 Jan 2025 20:21:21 +0000</pubDate>
      <link>https://dev.to/ripplexdev/mpt-performance-test-report-44ig</link>
      <guid>https://dev.to/ripplexdev/mpt-performance-test-report-44ig</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Multi-Purpose Tokens (MPTs) are a flexible token standard proposed for the XRPL that enable various use cases, including payments, securities, and NFTs, all through a single unified framework. MPTs support a range of operations such as token issuance, authorization, clawback, and destruction, allowing for enhanced functionality in managing and interacting with digital assets. This versatile token structure facilitates the creation, transfer, and control of assets on the XRPL, contributing to improved scalability and efficiency for decentralized financial applications.&lt;/p&gt;

&lt;p&gt;To ensure the seamless integration of MPTs into the XRPL, the RippleX performance team conducted extensive testing to evaluate the impact of MPT transactions on the network's consensus performance and overall health. This report outlines our testing methodology, findings, and conclusions, demonstrating that the activation of the MPT amendment will not adversely affect the network's performance or its ability to process other transactions.&lt;/p&gt;

&lt;p&gt;For more details, please refer to the &lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0033d-multi-purpose-tokens#multi-purpose-tokens-mpts" rel="noopener noreferrer"&gt;official documentation here&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Testing Objectives
&lt;/h2&gt;

&lt;p&gt;The primary objective of this testing was to assess the performance of MPT transactions and their impact on consensus processing, particularly under high-load conditions. Specifically, we aimed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluate the capacity limits of the XRPL when processing MPT transactions alongside existing payment transactions.&lt;/li&gt;
&lt;li&gt;Identify potential bottlenecks or performance degradation caused by MPT-related operations.&lt;/li&gt;
&lt;li&gt;Ensure that the network maintains a 5-second consensus latency threshold, even under the most demanding scenarios.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Testing Methodology
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Capacity Planning
&lt;/h3&gt;

&lt;p&gt;To measure the maximum performance impact of integrating MPT transactions, we used the 5-second consensus latency limit as the benchmark for network capacity. This threshold ensures that the network remains in optimal condition while processing a mix of MPT and standard payment transactions. During testing, we monitored both ledger and consensus performance to determine whether the network load exceeded this latency criterion. Instances where the network surpassed this limit are referred to as “overvalidation” in the results below.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Environment
&lt;/h3&gt;

&lt;p&gt;Our testing infrastructure simulated a private XRPL environment with 9 nodes, matching Ripple's MainNet in terms of hardware specifications. The key features of this environment are the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Network Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 function as validator nodes&lt;/li&gt;
&lt;li&gt;4 serve as client P2P nodes, interfacing with load generators&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Uniform System Specifications:&lt;/strong&gt; Each system mirrors the hardware specifications found in Ripple’s MainNet rippled infrastructure. Specifically, they are hosted on AWS's EC2 instance type, z1d.2xlarge, boasting 8 CPU cores, 64GB RAM, and 300GB NVMe SSD storage, dedicated to the rippled database.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Configuration:&lt;/strong&gt; All nodes operate within the same AWS region and are interconnected through a shared LAN.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Load Submission:&lt;/strong&gt; Between 1 and 4 load servers are actively engaged in transmitting transactions to the 4 P2P nodes.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Account Setup:&lt;/strong&gt; A total of 100K synthetic accounts were established, built atop a public ledger synchronized from the MainNet as of July 3rd, 2023. Provisions were made in the simulation logic to ensure the uniqueness of source and destination accounts for every consensus cycle.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configuration Continuity:&lt;/strong&gt; The rippled configuration file was sourced directly from a Ripple MainNet validator. While the core configurations remained unchanged, requisite modifications were made to align with the specific needs of our environment.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Test Data Setup
&lt;/h2&gt;

&lt;p&gt;To test Multi-Purpose Token (MPT) transactions, we prepared the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Accounts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added 50,000 new accounts to the existing 100,000 payment accounts.&lt;/li&gt;
&lt;li&gt;Designated 15 accounts as MPT Token issuers to create and distribute tokens.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Token Issuances:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created 100,000 token issuances for MPT destroy transactions.&lt;/li&gt;
&lt;li&gt;Added 280 issuances for MPT operations like authorization, clawback, and issuance updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Load Modeling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  #1 Payment Baseline
&lt;/h3&gt;

&lt;p&gt;A mixed load of standard payment transactions involving both the AMM-based and LOB-based decentralized exchanges (DEX). This scenario establishes a baseline for network performance under typical MainNet conditions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dt5beqib1c5jih2j57p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5dt5beqib1c5jih2j57p.png" alt="Image description" width="800" height="148"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  #2 Payment + MPT Transaction (3-7)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Payment + MPT Payments&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A mixed load of standard payment transactions and MPT payments.&lt;/li&gt;
&lt;li&gt;Replacing 20% of the payment transactions load that the current release can support with MPT p2p direct payments transactions.&lt;/li&gt;
&lt;li&gt;This scenario evaluates the performance impact of introducing MPT payments into the existing transaction mix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl4zkf126i6k28852pzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl4zkf126i6k28852pzj.png" alt="Image description" width="800" height="148"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  #3 MPT Only Capacity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A load consisting exclusively of MPT transactions, including MPTokenAuthorize, MPT payments, MPTokenIssuanceCreate, MPTokenIssuanceSet, Clawback, and MPTokenIssuanceDestroy.&lt;/li&gt;
&lt;li&gt;This scenario assesses the network's capacity to handle a high volume of MPT-related operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Transaction Execution Realistic Percentage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30% MPTokenAuthorize&lt;/li&gt;
&lt;li&gt;50% MPT Payment between testing accounts&lt;/li&gt;
&lt;li&gt;25% Payment from MPTokenIssuer to MPTokenHolder&lt;/li&gt;
&lt;li&gt;25% Payment from MPTokenHolder to MPTokenHolder&lt;/li&gt;
&lt;li&gt;10% MPTokenIssuanceCreate&lt;/li&gt;
&lt;li&gt;5% MPTokenIssuanceSet&lt;/li&gt;
&lt;li&gt;3% Clawback&lt;/li&gt;
&lt;li&gt;2% MPTokenIssuanceDestroy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhkbn4i3eon4r0hkznzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhkbn4i3eon4r0hkznzl.png" alt="Image description" width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Based on our comprehensive testing and evaluation, the introduction of Multi-Purpose Tokens (MPT) does not impose a significant load on the XRPL. Performance metrics—including ledger throughput, CPU usage, submission latency, and memory consumption—remained consistent across standard payments, mixed MPT and payment transactions, and fully MPT transactions. Moreover, we determined that MPT transactions can sustain throughput of up to 432 TPS under projected usage scenarios.&lt;/p&gt;

&lt;p&gt;These results provide confidence that integrating MPT into rippled will pose no immediate risks to the network. Our commitment to ongoing research and development ensures that we will continue to enhance the performance and resilience of the XRP Ledger, enabling it to support a wide range of innovative use cases.&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://dev.to/ripplexdev/security-audit-for-multi-purpose-tokens-mpt-on-the-xrp-ledger-completed-with-softstack-gmbh-1id8"&gt;security audit&lt;/a&gt; was also recently completed. Here is a link to the &lt;a href="https://github.com/softstack/Smart-Contract-Security-Audits/blob/master/Ripple/Softstack_Ripple_Multi_Purpose_Token%20(MPT)%20Security_Assessment_22102024.pdf" rel="noopener noreferrer"&gt;full report&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>xrpl</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
