<?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>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>
