<?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: Ramkumar SG</title>
    <description>The latest articles on DEV Community by Ramkumar SG (@sgramkumar).</description>
    <link>https://dev.to/sgramkumar</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3159438%2F3a552d2b-6cc9-4b8b-b62a-589cdb9dedf5.jpg</url>
      <title>DEV Community: Ramkumar SG</title>
      <link>https://dev.to/sgramkumar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sgramkumar"/>
    <language>en</language>
    <item>
      <title>Confidential Transfer - QA Test Report</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Tue, 22 Sep 2026 21:19:23 +0000</pubDate>
      <link>https://dev.to/ripplexdev/confidential-transfer-qa-test-report-1l18</link>
      <guid>https://dev.to/ripplexdev/confidential-transfer-qa-test-report-1l18</guid>
      <description>&lt;p&gt;&lt;strong&gt;Test Report Date&lt;/strong&gt;: 9/22/2026&lt;br&gt;
&lt;strong&gt;Prepared By&lt;/strong&gt;: &lt;a href="https://github.com/sgramkumar" rel="noopener noreferrer"&gt;sgramkumar&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: GitLab CI Runner (nix-debian)&lt;br&gt;
&lt;strong&gt;Network&lt;/strong&gt;: xrpld devnet + private CI network&lt;/p&gt;
&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;This report presents the results of QA testing performed on Confidential Transfer (XLS-0096) across xrpld servers. Coverage targets the Confidential MPT feature, which layers ElGamal-encrypted balances and zero-knowledge proofs on top of Multi-Purpose Tokens so that token amounts can be held and transferred confidentially while remaining verifiable on-ledger.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Feature
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Feature Name&lt;/strong&gt;: Confidential Transfer (Confidential MPT)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: Standard Multi-Purpose Tokens expose every balance and transfer amount in clear on the ledger, which is unacceptable for many payment and settlement use cases. Confidential MPT introduces a confidential balance model in which amounts are stored as ElGamal ciphertexts and every state transition is accompanied by a zero-knowledge proof that the transition is valid without revealing the underlying value. The feature adds five transactors — &lt;code&gt;ConfidentialMPTConvert&lt;/code&gt; (move a public MPT balance into the confidential spending balance), &lt;code&gt;ConfidentialMPTSend&lt;/code&gt; (transfer a confidential amount into a destination's inbox), &lt;code&gt;ConfidentialMPTMergeInbox&lt;/code&gt; (fold received inbox ciphertexts into the spending balance), &lt;code&gt;ConfidentialMPTConvertBack&lt;/code&gt; (move a confidential balance back to public), and &lt;code&gt;ConfidentialMPTClawback&lt;/code&gt; (issuer clawback of confidential balances). An optional Auditor may be configured on the issuance so a designated party can decrypt amounts for compliance, and the confidential surface composes with the existing issuance-control flags (lock, freeze, require-auth, clawback).&lt;/p&gt;

&lt;p&gt;Specification Reference: &lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0096-confidential-mpt" rel="noopener noreferrer"&gt;https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0096-confidential-mpt&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Test Scope
&lt;/h2&gt;

&lt;p&gt;This report covers the full Confidential Transfer surface as it stands under the Confidential MPT amendment. Testing focused on ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All five transactors (Convert, Send, MergeInbox, ConvertBack, Clawback) behave per the XLS-0096 specification, including correct balance conservation and commit/rollback semantics&lt;/li&gt;
&lt;li&gt;ElGamal ciphertext handling, zero-knowledge proof verification, per-send re-randomization, and the caller-specified discrete-log decrypt range behave correctly and reject malformed or stale material&lt;/li&gt;
&lt;li&gt;Issuance lifecycle and control flags (privacy flag, can-lock/lock, global lock, require-auth, clawback, auditor configuration) are enforced across every transactor&lt;/li&gt;
&lt;li&gt;The auditor mirror is maintained and re-randomized correctly so that a configured auditor can always decrypt while confidentiality is preserved against everyone else&lt;/li&gt;
&lt;li&gt;Balance and supply invariants hold — encrypted balance deltas match public balance deltas, inbox and spending balances reconcile, and no value is created or destroyed&lt;/li&gt;
&lt;li&gt;Security-critical properties hold under adversarial input, including bad proofs, mismatched ciphertexts, stale-proof replay, crafted randomness, and structural/serialization attacks&lt;/li&gt;
&lt;li&gt;Confidential MPT composes correctly with Batch, Permission Delegation, Sponsored Fees &amp;amp; Reserves, Deposit Authorization / Preauth, and Permissioned Domains&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  3. Types of Testing Conducted
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Functional&lt;/td&gt;
&lt;td&gt;Verifying each transactor, issuance lifecycle step, control flag, and RPC/metadata surface against the XLS-0096 specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cryptographic&lt;/td&gt;
&lt;td&gt;ElGamal ciphertext validation, zero-knowledge proof verification, per-send re-randomization, auditor-mirror correctness, and the discrete-log decrypt-range API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression&lt;/td&gt;
&lt;td&gt;Running the full xrpld test suite to confirm Confidential MPT changes did not break existing functionality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversarial / Security&lt;/td&gt;
&lt;td&gt;Attack-matrix scenarios probing bad proofs, mismatched/stale ciphertexts, crafted randomness, key rotation, and structural/serialization smuggling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Feature&lt;/td&gt;
&lt;td&gt;Interactions between Confidential MPT and Batch (XLS-56), Permission Delegation (XLS-75), Sponsored Fees &amp;amp; Reserves, Deposit Authorization / Preauth, and Permissioned Domains&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End-to-End&lt;/td&gt;
&lt;td&gt;Full flows spanning convert, confidential send, inbox merge, convert-back, and clawback, with downstream balance and metadata validation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  4. Test Results Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Total Tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Confidential Transfer — Core Functional (five transactors, issuance lifecycle, crypto, invariants)&lt;/td&gt;
&lt;td&gt;358&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidential Transfer — Adversarial / Security (adversarial, hardening, bug hunt)&lt;/td&gt;
&lt;td&gt;110&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidential Transfer — Cross-Feature (Batch/Composition, Delegation, Sponsor, Deposit Preauth, Permissioned Domain)&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidential Transfer — Total&lt;/td&gt;
&lt;td&gt;561&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression — xrpld (full suite)&lt;/td&gt;
&lt;td&gt;5,088&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Testcases: &lt;a href="https://dev.to/ripplexdev/confidential-transfer-testcases-1pee"&gt;https://dev.to/ripplexdev/confidential-transfer-testcases-1pee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature commit history&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Introduced as the ConfidentialTransfer amendment in PR #5860 (768d7603b1, merged 2026-06-27) 
&lt;span class="p"&gt;-&lt;/span&gt; Specification standardized as XLS-0096 (XRPL-Standards discussion #372, spec created 2026-01-15) and tracked through spec rc2 (#303)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Related xrpld changes covered in this round:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/7279" rel="noopener noreferrer"&gt;#7279&lt;/a&gt; — Add Batch + Delegation + Confidential tests&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/7535" rel="noopener noreferrer"&gt;#7535&lt;/a&gt; — per-send re-randomization of zero-knowledge proof scalars (independent re-randomization scalar per send)&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/7612" rel="noopener noreferrer"&gt;#7612&lt;/a&gt; — auditor-mirror re-randomization and the MergeInbox defense against crafted-randomness attacks&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/6988" rel="noopener noreferrer"&gt;#6988&lt;/a&gt; — DestinationTag handling on confidential sends&lt;/li&gt;
&lt;li&gt;mpt-crypto PR &lt;a href="https://github.com/XRPLF/mpt-crypto/pull/127" rel="noopener noreferrer"&gt;#127&lt;/a&gt; — caller-specified discrete-log decrypt range and the shared-secret zero-exclusion guard&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Bugs Reported
&lt;/h2&gt;

&lt;p&gt;All internal bugs are fixed and there are no Critical Open bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Conclusion
&lt;/h2&gt;

&lt;p&gt;Confidential Transfer (XLS-0096) has now been exercised across 561 dedicated tests spanning core functional coverage (the five transactors, issuance lifecycle, cryptographic verification, and ledger invariants), adversarial / security scenarios, and cross-feature interactions with Batch, Permission Delegation, Sponsored Fees &amp;amp; Reserves, Deposit Authorization / Preauth, and Permissioned Domains. In addition, the full xrpld regression suite has been executed to confirm no downstream breakage.&lt;/p&gt;

&lt;p&gt;All security-critical properties documented in XLS-0096 have been validated, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correct balance conservation across every transactor — encrypted balance deltas match the corresponding public balance deltas, and inbox/spending balances reconcile with no value created or destroyed&lt;/li&gt;
&lt;li&gt;Rejection of malformed, mismatched, and stale ciphertexts and zero-knowledge proofs, and of crafted-randomness attacks against the auditor mirror and MergeInbox (PR &lt;a href="https://github.com/XRPLF/rippled/pull/7612" rel="noopener noreferrer"&gt;#7612&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Correct per-send re-randomization of proof scalars so that confidentiality holds across repeated and chained sends (PR &lt;a href="https://github.com/XRPLF/rippled/pull/7535" rel="noopener noreferrer"&gt;#7535&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Correct enforcement of issuance control flags (privacy, lock/global-lock, require-auth, clawback) and auditor configuration across all five transactors&lt;/li&gt;
&lt;li&gt;Correct interaction with delegated authority, sponsorship, tickets, deposit authorization, permissioned domains, and Batch composition, including atomic rollback of stale-proof inner transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The feature is considered ready for production use at the tested commit level. Future updates to this report will follow any material additions to the Confidential Transfer surface.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>crypto</category>
      <category>security</category>
      <category>testing</category>
    </item>
    <item>
      <title>Confidential Transfer - Testcases</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Tue, 22 Sep 2026 21:17:39 +0000</pubDate>
      <link>https://dev.to/ripplexdev/confidential-transfer-testcases-1pee</link>
      <guid>https://dev.to/ripplexdev/confidential-transfer-testcases-1pee</guid>
      <description>&lt;p&gt;Automated test coverage for the Confidential Transfer feature (&lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0096-confidential-mpt" rel="noopener noreferrer"&gt;XLS-0096&lt;/a&gt;), grouped by the transactor, invariant, or cross-feature interaction each test exercises with 561 tests.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Test Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Transactor — Convert&lt;/td&gt;
&lt;td&gt;72&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactor — Send&lt;/td&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactor — MergeInbox&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactor — ConvertBack&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transactor — Clawback&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Issuance Lifecycle&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crypto&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardening&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversarial / Security&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invariants&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch / Composition&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delegation&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Feature&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug Hunt&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;561&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Transactor — Convert
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Confidential MPT convert basic&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert without tfMPTCanPrivacy flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert partial amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert multiple times with available balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert multiple times without ignoring holder elgamal public key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert multiple times with insufficient balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert account is individual account locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert account is globally locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor enabled and auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor same as issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor enabled separately after issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with different issuer elgamal public key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert holder and issuer encrypted amounts different&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor enabled but no auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor not enabled but with auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor enabled and using issuer for auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor enabled and using holder for auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with no issuer elgamal public key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert set privacy flag and issuer elgamal public key separately after MPT Issuance create&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert set privacy flag and issuer elgamal public key in same transaction after MPT Issuance create&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert existing account set privacy flag when oa greater than zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert new account after set privacy flag when oa greater than zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert set privacy flag when oa equals zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert set privacy flag by holder when oa greater than zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert set privacy flag by holder when oa equals zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with cannot mutate privacy flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with cannot mutate privacy flag and set privacy flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with cannot mutate privacy flag and set privacy flag again&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert holder without elgamal public key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert non existent account&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert account with no MPT balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert account with no MPT object&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with MPT lock flag set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with can lock flag but not locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert without tfMPTCanTransfer flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with clawback flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert from issuer account&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert from account who is another issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert zero amount account as issuer with balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert zero amount account as issuer with no balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert account as third party without MPT object&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert MPT amount more than holder balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert MPT amount in fraction&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert MPT amount zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert MPT amount negative&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert negative MPT amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert no holder encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert no issuer encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert no auditor encrypted amount when auditor set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with auditor encrypted amount but auditor not set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with receiver field&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with destination field&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with invalid MPT Issuance id&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert MPT amount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert maximum amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert auditor key mismatch&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert invalid ciphertext format&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert invalid zkp&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert multiple accounts&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert change auditor&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert and delete holder&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with multisign with disabling master key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert with multisign without disabling master key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert minimum amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert invalid elgamal key format&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert elgamal key wrong length&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert auditor encrypted amount encrypts wrong value&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert issuer key rotation impact when coa is non zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert issuer key rotation impact when coa is zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert identity point elgamal key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert blinding factor wrong length&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert zero amount on existing confidential balance&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Transactor — Send
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Confidential MPT send to destination account basic&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send partial amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send multiple times&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send source destination swap&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with one drop in inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send without source account merging inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send without bob having mptoken&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with bob having zero mpt&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with bob having nonzero MPT but no coa&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send to destination account having zero confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send zero amount to bob&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send source confidential balance is zero after convert&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send to self&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send source does not exist&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send source does not have mptoken&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send source is locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send destination is nonexistent account&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send destination is locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with globally locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send more than available coa&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send invalid MPT Issuance id&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send issuer sends to holder&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send holder sends to issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send sender encrypted amount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send sender encrypted amount invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send destination encrypted amount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send destination encrypted amount invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send issuer encrypted amount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with auditor basic success&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with auditor missing auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with auditor invalid auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send without auditor but with auditor encrypted amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send without auditor unexpected auditor amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with auditor verify decryption&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with auditor multiple sends&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send from multiple accounts&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with zkproof missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with invalid zkproof value&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with amount commitment missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with invalid amount commitment value&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with balance commitment missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with invalid balance commitment value&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send multiple times in sequence&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send version increment&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send incorrect version&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send stale proof rejection&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send mismatched ciphertexts&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send and MPT Issuance destroy source account having zero confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send and delete mptoken on destination account before merging inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send second account as sender&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send to different accounts with same version&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send first merge after convert merge convert&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with multisign without disabling master key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with multisign with disabling master key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with multisign insufficient signatures&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with regular key master enabled&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with regular key disabled master&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send fractional amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send negative amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send and public payment to same destination&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send and public payment to different destinations&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send without merge&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with require auth and destination unauthorized&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send to destination with deposit auth&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send to destination with deposit auth and preauth&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send to destination requiring credential without providing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with nonexistent credential&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send with expired credential&lt;/li&gt;
&lt;li&gt;Test Confidential MPT send without tfMPTCanTransfer flag&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Transactor — MergeInbox
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Confidential MPT merge inbox basic&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox after partial convert&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox account does not exist&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox account does not have mptoken&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox with no confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox with various token balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox account is issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox convert twice then merge&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox account is individual account locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox account is globally locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox invalid MPT Issuance id&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox missing MPT Issuance id&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox by third party&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox empty&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox conver and merge multiple times&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox enczero determinism&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox enczero validation&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox and destroy mptoken without merge inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox and destroy mptoken after merge inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox with maximum value&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox rapid state changes&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox with mixed public confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox at minimum xrp reserve&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox with require auth flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox idempotency empty inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox determinism across accounts&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox balance conservation&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox decrypt verification&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox with multisign with disabled master key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox version increments by one&lt;/li&gt;
&lt;li&gt;Test Confidential MPT merge inbox cb in amount field mismatch adversarial&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Transactor — ConvertBack
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Confidential MPT convert back entire confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back partial confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back without merging inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back with balance in inbox and spending&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back with balance only in inbox&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back with no balance in both inbox and spending&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back account does not exist&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back account does not have mptoken&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back account is issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back invalid mptokenissuanceid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back mptamount greater than spending balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back mptamount invalid values&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back zero amount&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back mptamount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back holder encrypted amount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back holder encrypted amount invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back issuer encrypted amount missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back issuer encrypted amount invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back blinding factor missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back blinding factor invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back zkproof missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back zkproof invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back balance commitment missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back balance commitment invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back with auditor encrypted amount no auditor set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back no auditor encrypted amount with auditor set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back with auditor encrypted amount and auditor set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back account locked&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back and destroy mptoken and delete accounts&lt;/li&gt;
&lt;li&gt;Test Confidential MPT convert back encrypted balance delta equals public balance delta&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Transactor — Clawback
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Confidential MPT clawback with tfMPTCanClawback set&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback after partial convert&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback public mpt&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback without tfMPTCanClawback flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback non issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback holder missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback holder nonexistent&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback third party holder&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback MPT amount zero&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback from holder with zero confidential balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback MPT amount exceeds balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback MPT amount less than balance&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback zkproof missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback zkproof invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback MPT Issuance id missing&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback MPT Issuance id invalid&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback without privacy flag&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback without issuer encryption key&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback multiple holders&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback holder equals issuer&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback with inbox and spending&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback from source after send&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback from destination after send&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback public balance with regular clawback while confidential setup exists&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback dual public and confidential workflow&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback and delete account&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback with auditor&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback holder account individually locked before clawback&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback tokens globally locked before clawback&lt;/li&gt;
&lt;li&gt;Test Confidential MPT clawback invariant coa decreases&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Issuance Lifecycle
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Issuance set set confidential when coa gt zero is tecNO PERMISSION&lt;/li&gt;
&lt;li&gt;Test Issuance set clear confidential bit is unrecognized returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Issuance set set confidential when cannot mutate is tecNO PERMISSION&lt;/li&gt;
&lt;li&gt;Test Issuance set replace issuer key is tecNO PERMISSION&lt;/li&gt;
&lt;li&gt;Test Issuance set replace auditor key surfaces as temMALFORMED&lt;/li&gt;
&lt;li&gt;Test Issuance set keys when confidential not enabled is tecNO PERMISSION&lt;/li&gt;
&lt;li&gt;Test Issuance set keys with enable in same tx succeeds&lt;/li&gt;
&lt;li&gt;Test Issuance set keys with unrecognized clear bit is temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Issuance set re register issuer key after coa gt zero is tecNO PERMISSION&lt;/li&gt;
&lt;li&gt;Test Issuance set set confidential via mutable flag sets lsf flag&lt;/li&gt;
&lt;li&gt;Test Issuance set confidential mutate with holder field is temMALFORMED&lt;/li&gt;
&lt;li&gt;Test Issuance set keys with holder field is temMALFORMED&lt;/li&gt;
&lt;li&gt;Test Issuance set confidential with nonzero transfer fee is tecNO PERMISSION&lt;/li&gt;
&lt;li&gt;Test Issuance set enable privacy and nonzero transfer fee same tx temBAD TRANSFER FEE&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create privacy flag without issuer key&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create issuer key without privacy flag&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create auditor key without privacy flag&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create invalid issuer elgamal key&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create invalid auditor elgamal key&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create coa initialized to zero&lt;/li&gt;
&lt;li&gt;Test MPT Issuance set remove auditor key with active supply&lt;/li&gt;
&lt;li&gt;Test MPT Issuance set non issuer privacy settings&lt;/li&gt;
&lt;li&gt;Test MPT Issuance create privacy flag with nonzero transfer fee&lt;/li&gt;
&lt;li&gt;Test MPT Issuance set auditor key without issuer key&lt;/li&gt;
&lt;li&gt;Test MPT Issuance destroy with nonzero confidential outstanding amount&lt;/li&gt;
&lt;li&gt;Test Privacy enabled at creation cannot be disabled by any clear bit&lt;/li&gt;
&lt;li&gt;Test Privacy enabled via mutable flag post creation then clear attempt returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Privacy frozen off via tfMPTCannotMutatePrivacy blocks all later enables&lt;/li&gt;
&lt;li&gt;Test Re enable privacy on already enabled Issuance is idempotent&lt;/li&gt;
&lt;li&gt;Test All six capability flags one way under confidential issuance&lt;/li&gt;
&lt;li&gt;Test Enabling privacy post creation via mutableflags enables all confidential transactors&lt;/li&gt;
&lt;li&gt;Test Authorize lifecycle failed unauthorize does not decrement coa&lt;/li&gt;
&lt;li&gt;Test Authorize lifecycle unauthorize after full round trip succeeds&lt;/li&gt;
&lt;li&gt;Test Authorize lifecycle unauthorize when other holder has cb succeeds&lt;/li&gt;
&lt;li&gt;Test Authorize lifecycle reauthorize after unauthorize yields fresh mptoken&lt;/li&gt;
&lt;li&gt;Test Authorize lifecycle issuer unauthorize blocks subsequent sends&lt;/li&gt;
&lt;li&gt;Test Authorize lifecycle authorize destroyed Issuance returns object not found&lt;/li&gt;
&lt;li&gt;Test Issuer can create confidential MPT with canclawback without account flag&lt;/li&gt;
&lt;li&gt;Test Issuer can confidential clawback without account flag&lt;/li&gt;
&lt;li&gt;Test Setting asfAllowTrustLineClawback after MPT Issuance returns tecOWNERS&lt;/li&gt;
&lt;li&gt;Test Issuance without tfMPTCanClawback rejects confidential clawback even with account flag&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Crypto
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Crypto wrapper generate keypair returns correctly sized hex&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper generate keypair is non deterministic&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper generate blinding factor is correctly sized and nondeterministic&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper encrypt decrypt round trip&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper decrypt with wrong privkey does not silently succeed&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper decrypt amount outside range returns rc minus 1&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper decrypt at exact range bounds inclusive&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper elgamal round trip is homomorphic consistent&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper same plaintext distinct blinding yields distinct ciphertexts&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper encrypt with explicit blinding factor is deterministic&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper pedersen commitment is deterministic in inputs&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper pedersen commitment differs on different amount&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper encrypt with wrong sized pubkey raises valueerror&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper decrypt with wrong sized privkey raises valueerror&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper encrypt with wrong sized blinding factor raises valueerror&lt;/li&gt;
&lt;li&gt;Test Crypto wrapper pedersen commitment with wrong sized bf raises valueerror&lt;/li&gt;
&lt;li&gt;Test Default range decrypts small amount&lt;/li&gt;
&lt;li&gt;Test Narrow range decrypts value within range&lt;/li&gt;
&lt;li&gt;Test Below range returns failure&lt;/li&gt;
&lt;li&gt;Test Above range returns failure&lt;/li&gt;
&lt;li&gt;Test Boundary low and high both decrypt&lt;/li&gt;
&lt;li&gt;Test Inverted range returns failure&lt;/li&gt;
&lt;li&gt;Test Zero excluded when range low gt zero&lt;/li&gt;
&lt;li&gt;Test Auditor decrypts real ciphertext with explicit range end to end&lt;/li&gt;
&lt;li&gt;Test Auditor decrypts initial convert balance to actual amount&lt;/li&gt;
&lt;li&gt;Test Auditor view decreases correctly after sender sends&lt;/li&gt;
&lt;li&gt;Test Auditor view increases correctly after receiver merges&lt;/li&gt;
&lt;li&gt;Test Auditor aggregate view equals Issuance confidential outstanding&lt;/li&gt;
&lt;li&gt;Test Auditor view unchanged across repeated rerandomization sends&lt;/li&gt;
&lt;li&gt;Test Auditor view zeros after full convert back&lt;/li&gt;
&lt;li&gt;Test Rerand destination inbox differs from tx ciphertext&lt;/li&gt;
&lt;li&gt;Test Rerand destination issuer mirror differs from tx ciphertext&lt;/li&gt;
&lt;li&gt;Test Rerand destination auditor mirror behavior&lt;/li&gt;
&lt;li&gt;Test Rerand sender spending balance is not rerandomized&lt;/li&gt;
&lt;li&gt;Test Rerand sender issuer mirror is not rerandomized&lt;/li&gt;
&lt;li&gt;Test Rerand multiple sends end to end decryption&lt;/li&gt;
&lt;li&gt;Test Rerand two consecutive sends produce different inbox deltas&lt;/li&gt;
&lt;li&gt;Test Rerand destination inbox changes under zero value send&lt;/li&gt;
&lt;li&gt;Test Rerand version counter increments once per send&lt;/li&gt;
&lt;li&gt;Test Rerand destination inbox and issuer mirror stay in lockstep per send&lt;/li&gt;
&lt;li&gt;Test Rerand send to self is rejected at preflight and does not mutate state&lt;/li&gt;
&lt;li&gt;Test Rerand two different senders to same destination compose correctly&lt;/li&gt;
&lt;li&gt;Test Rerand does not break issuer clawback path after send&lt;/li&gt;
&lt;li&gt;Test Rerand auditor mirror differs between two identical sends&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Hardening
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Send to destination requiring dest tag fails&lt;/li&gt;
&lt;li&gt;Test Send to destination requiring dest tag with tag succeeds&lt;/li&gt;
&lt;li&gt;Test Send with dest tag and auditor succeeds&lt;/li&gt;
&lt;li&gt;Test Send when destination authorized but never converted fails&lt;/li&gt;
&lt;li&gt;Test Send when sender authorized but never converted fails&lt;/li&gt;
&lt;li&gt;Test Send receiver confidential version unchanged&lt;/li&gt;
&lt;li&gt;Test Convert zero amount from individually frozen account fails&lt;/li&gt;
&lt;li&gt;Test Convert zero amount from globally frozen Issuance fails&lt;/li&gt;
&lt;li&gt;Test Convert zero amount from unauthorized account fails&lt;/li&gt;
&lt;li&gt;Test Holder unauthorize with nonzero confidential balance fails&lt;/li&gt;
&lt;li&gt;Test Issuance set rotate existing issuer encryption key fails&lt;/li&gt;
&lt;li&gt;Test Issuance set add auditor after holders have confidential balance fails&lt;/li&gt;
&lt;li&gt;Test Create with privacy locked off then enable attempt fails&lt;/li&gt;
&lt;li&gt;Test Create with invalid mutable flag bit fails&lt;/li&gt;
&lt;li&gt;Test Midflight auditor cannot be retrofitted after issuer key already set&lt;/li&gt;
&lt;li&gt;Test Midflight set require auth after holders have cb freezes unallowlisted&lt;/li&gt;
&lt;li&gt;Test Midflight change domain id strands holder not in new domain&lt;/li&gt;
&lt;li&gt;Test Midflight per holder lock blocks holder unauthorize&lt;/li&gt;
&lt;li&gt;Test Crash send all zero zkproof&lt;/li&gt;
&lt;li&gt;Test Crash send all ones zkproof&lt;/li&gt;
&lt;li&gt;Test Crash send random garbage zkproof&lt;/li&gt;
&lt;li&gt;Test Crash send bit flipped zkproof&lt;/li&gt;
&lt;li&gt;Test Crash send zero amount commitment&lt;/li&gt;
&lt;li&gt;Test Crash send zero balance commitment&lt;/li&gt;
&lt;li&gt;Test Crash send zero sender encrypted amount&lt;/li&gt;
&lt;li&gt;Test Crash send swapped sender dest ciphertexts&lt;/li&gt;
&lt;li&gt;Test Crash convert all zero zkproof&lt;/li&gt;
&lt;li&gt;Test Crash convert back all zero zkproof&lt;/li&gt;
&lt;li&gt;Test Crash clawback all zero zkproof&lt;/li&gt;
&lt;li&gt;Test Crash send rapid fire garbage proofs no corruption&lt;/li&gt;
&lt;li&gt;Test Acctdel holder with active cb s blocks account delete&lt;/li&gt;
&lt;li&gt;Test Acctdel holder with unmerged inbox blocks account delete&lt;/li&gt;
&lt;li&gt;Test Acctdel issuer with active confidential outstanding blocks&lt;/li&gt;
&lt;li&gt;Test Acctdel orphan mptoken after Issuance destroy full cleanup chain&lt;/li&gt;
&lt;li&gt;Test Acctdel issuer after destroy with outstanding orphan holders succeeds&lt;/li&gt;
&lt;li&gt;Test Acctdel stuck holder after issuer unauthorize with cb present&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Adversarial / Security
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Adversarial duplicate send txn&lt;/li&gt;
&lt;li&gt;Test Adversarial stale send proof after merge&lt;/li&gt;
&lt;li&gt;Test Adversarial reuse convert proof after state change&lt;/li&gt;
&lt;li&gt;Test Adversarial reuse convert back proof after state change&lt;/li&gt;
&lt;li&gt;Test Adversarial two sends exceed balance same ledger&lt;/li&gt;
&lt;li&gt;Test Adversarial send and convert back same balance same ledger&lt;/li&gt;
&lt;li&gt;Test Adversarial send vs clawback race same ledger&lt;/li&gt;
&lt;li&gt;Test Adversarial valid ec point wrong value&lt;/li&gt;
&lt;li&gt;Test Adversarial send amount commitment aliased to balance commitment&lt;/li&gt;
&lt;li&gt;Test Adversarial swap holder and issuer encrypted amounts&lt;/li&gt;
&lt;li&gt;Test Adversarial zero byte zkproof&lt;/li&gt;
&lt;li&gt;Test Adversarial proof for different statement&lt;/li&gt;
&lt;li&gt;Test Adversarial point on wrong curve&lt;/li&gt;
&lt;li&gt;Test Adversarial identity element as ciphertext&lt;/li&gt;
&lt;li&gt;Test Adversarial all zero blinding factor&lt;/li&gt;
&lt;li&gt;Test Adversarial range proof negative modular&lt;/li&gt;
&lt;li&gt;Test Adversarial nonce reuse across sends&lt;/li&gt;
&lt;li&gt;Test Adversarial wrong holder key in send&lt;/li&gt;
&lt;li&gt;Test Adversarial holder amount encrypted under issuer key&lt;/li&gt;
&lt;li&gt;Test Adversarial issuer amount encrypted under holder key&lt;/li&gt;
&lt;li&gt;Test Adversarial valid proof wrong account signature&lt;/li&gt;
&lt;li&gt;Test Adversarial key hijacking first convert&lt;/li&gt;
&lt;li&gt;Test Adversarial auditor amount wrong key&lt;/li&gt;
&lt;li&gt;Test Adversarial auditor amount different value&lt;/li&gt;
&lt;li&gt;Test Adversarial stale auditor key after rotation&lt;/li&gt;
&lt;li&gt;Test Adversarial range proof near uint64 overflow&lt;/li&gt;
&lt;li&gt;Test Adversarial cb in amount tampered&lt;/li&gt;
&lt;li&gt;Test Adversarial convert back tampered amount exceeds proof&lt;/li&gt;
&lt;li&gt;Test Adversarial send from inbox without merge&lt;/li&gt;
&lt;li&gt;Test Adversarial convert then immediate convert back same ledger&lt;/li&gt;
&lt;li&gt;Test Adversarial clawback from destroyed mptoken&lt;/li&gt;
&lt;li&gt;Test Adversarial clawback after holder converts back to zero&lt;/li&gt;
&lt;li&gt;Test Adversarial send with extra unknown fields&lt;/li&gt;
&lt;li&gt;Test Adversarial send all required fields missing&lt;/li&gt;
&lt;li&gt;Test Adversarial holder encrypted amount wrong byte length&lt;/li&gt;
&lt;li&gt;Test Adversarial issuer encrypted amount truncated&lt;/li&gt;
&lt;li&gt;Test Adversarial zkproof truncated&lt;/li&gt;
&lt;li&gt;Test Adversarial zkproof padded with extra bytes&lt;/li&gt;
&lt;li&gt;Test Adversarial confidential state persists across operations&lt;/li&gt;
&lt;li&gt;Test Adversarial two sends canonical order&lt;/li&gt;
&lt;li&gt;Test Adversarial replay with new sequence&lt;/li&gt;
&lt;li&gt;Test Adversarial cross type zkp replay&lt;/li&gt;
&lt;li&gt;Test Adversarial non issuer clawback valid zkp&lt;/li&gt;
&lt;li&gt;Test Adversarial third party merge inbox valid zkp&lt;/li&gt;
&lt;li&gt;Test Adversarial enable privacy on existing transfer fee Issuance reverse mutex&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Invariants
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Inv send increments version when spending changes&lt;/li&gt;
&lt;li&gt;Test Inv convert creates consistent encrypted fields&lt;/li&gt;
&lt;li&gt;Test Inv send preserves encrypted field coexistence&lt;/li&gt;
&lt;li&gt;Test Inv convert token conservation holder and issuer side&lt;/li&gt;
&lt;li&gt;Test Inv send does not modify public mptamount at either end&lt;/li&gt;
&lt;li&gt;Test Inv send does not modify Issuance outstandingamount&lt;/li&gt;
&lt;li&gt;Test Inv clawback decreases coa and oa by identical amount&lt;/li&gt;
&lt;li&gt;Test Clawback under global lock no invariant&lt;/li&gt;
&lt;li&gt;Test Convert back under global lock returns teclocked&lt;/li&gt;
&lt;li&gt;Test Inv coa never exceeds oa through chain&lt;/li&gt;
&lt;li&gt;Test Inv send with tampered amount commitment rejected leaves coa unchanged&lt;/li&gt;
&lt;li&gt;Test Inv full clawback zeros holder cb and removes their coa contribution&lt;/li&gt;
&lt;li&gt;Test Inv full convert back chain leaves no orphan confidential state&lt;/li&gt;
&lt;li&gt;Test Convert with zero amount asymmetric behavior probe&lt;/li&gt;
&lt;li&gt;Test Convert back with zero amount returns temBAD AMOUNT&lt;/li&gt;
&lt;li&gt;Test Clawback with zero amount returns temBAD AMOUNT&lt;/li&gt;
&lt;li&gt;Test Send to self returns temMALFORMED&lt;/li&gt;
&lt;li&gt;Test Convert with amount exceeding public balance returns tecINSUFFICIENT FUNDS&lt;/li&gt;
&lt;li&gt;Test Two issuances independent version counters&lt;/li&gt;
&lt;li&gt;Test Two issuances independent coa accounting&lt;/li&gt;
&lt;li&gt;Test Two issuances independent auditor decryption&lt;/li&gt;
&lt;li&gt;Test Account delete blocked when alice has cb on one of two issuances&lt;/li&gt;
&lt;li&gt;Test Convert back on Issuance a does not affect balance on b&lt;/li&gt;
&lt;li&gt;Test Clawback on Issuance a does not affect balance on b&lt;/li&gt;
&lt;li&gt;Test scenario A send with auditor all zero zkproof rejected&lt;/li&gt;
&lt;li&gt;Test scenario A send with auditor random garbage zkproof rejected&lt;/li&gt;
&lt;li&gt;Test scenario A send with auditor bit flipped zkproof rejected&lt;/li&gt;
&lt;li&gt;Test scenario A send with auditor truncated zkproof rejected&lt;/li&gt;
&lt;li&gt;Test scenario B convert MPT amount as string above 2 pow 32 succeeds&lt;/li&gt;
&lt;li&gt;Test scenario B convert MPT amount as int above 2 pow 32 is rejected&lt;/li&gt;
&lt;li&gt;Test scenario B convert two holders summing above 2 pow 32 keeps coa correct&lt;/li&gt;
&lt;li&gt;Test scenario B Issuance create with maximum amount at 2 pow 63 minus 1&lt;/li&gt;
&lt;li&gt;Test scenario B Issuance create with maximum amount above 2 pow 63 is rejected&lt;/li&gt;
&lt;li&gt;Test scenario C convert back from inbox only no spending is rejected&lt;/li&gt;
&lt;li&gt;Test scenario C send from inbox only no spending is rejected&lt;/li&gt;
&lt;li&gt;Test scenario C merge inbox after inbox only state promotes value to spending&lt;/li&gt;
&lt;li&gt;Test scenario D send after issuer unauthorizes sender fails&lt;/li&gt;
&lt;li&gt;Test scenario E clawback after issuer unauthorizes holder succeeds&lt;/li&gt;
&lt;li&gt;Test scenario F three holder full chain conserves total value&lt;/li&gt;
&lt;li&gt;Test scenario F two Issuance concurrent chains remain isolated&lt;/li&gt;
&lt;li&gt;Test scenario H zero amount convert registers holder key and enables inbound send&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Batch / Composition
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch confidential MPT two sends with stale proof allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential MPT independent send with one failing&lt;/li&gt;
&lt;li&gt;Test Batch confidential MPT convert then merge inbox allornothing&lt;/li&gt;
&lt;li&gt;Test Batch delegated send missing permission allornothing&lt;/li&gt;
&lt;li&gt;Test Batch delegated send with delegate as outer needs no batch signer&lt;/li&gt;
&lt;li&gt;Test Batch delegated send with delegate as outer with batch signer&lt;/li&gt;
&lt;li&gt;Test Batch confidential MPT two chained sends same sender allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential MPT send then convert back same sender allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential MPT three chained sends same sender allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential MPT chained send wrong predicted ciphertext fails&lt;/li&gt;
&lt;li&gt;Test Batch only one with two valid chained sends executes first only&lt;/li&gt;
&lt;li&gt;Test Batch only one first send to unconverted fails falls through to second&lt;/li&gt;
&lt;li&gt;Test Batch until failure first send commits then stale second fails&lt;/li&gt;
&lt;li&gt;Test Batch allornothing issuer lock then alice send rolls back both&lt;/li&gt;
&lt;li&gt;Test Batch independent three holders converts coa aggregate correct&lt;/li&gt;
&lt;li&gt;Test Batch allornothing inner revokes delegate then later inner uses it rolls back&lt;/li&gt;
&lt;li&gt;Test Batch two chained delegated sends from same delegator both commit&lt;/li&gt;
&lt;li&gt;Test Delegated send after delegator loses domain membership fails&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Delegation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Delegate confidential MPT send basic&lt;/li&gt;
&lt;li&gt;Test Delegate confidential MPT send missing permission&lt;/li&gt;
&lt;li&gt;Test Delegate confidential MPT convert&lt;/li&gt;
&lt;li&gt;Test Delegate confidential MPT merge inbox&lt;/li&gt;
&lt;li&gt;Test Delegate confidential MPT convert back&lt;/li&gt;
&lt;li&gt;Test Delegate confidential MPT clawback by issuer&lt;/li&gt;
&lt;li&gt;Test Delegate neg send perm only cannot convert back&lt;/li&gt;
&lt;li&gt;Test Delegate neg convert back perm only cannot send&lt;/li&gt;
&lt;li&gt;Test Delegate neg clawback with non issuer account rejected at preflight&lt;/li&gt;
&lt;li&gt;Test Delegate neg revoked permission blocks subsequent use&lt;/li&gt;
&lt;li&gt;Test Delegate neg self delegation rejected&lt;/li&gt;
&lt;li&gt;Test Delegate neg send with proof over delegate keys rejected&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cross-Feature
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Ticket based first convert succeeds when proof binds to ticket seq&lt;/li&gt;
&lt;li&gt;Test Ticket based send succeeds when proof binds to ticket seq&lt;/li&gt;
&lt;li&gt;Test Ticket based send with wrong seq in proof returns tecBAD PROOF&lt;/li&gt;
&lt;li&gt;Test Ticket based convert back succeeds when proof binds to ticket seq&lt;/li&gt;
&lt;li&gt;Test Ticket based send with nonzero sequence returns temSEQ AND TICKET&lt;/li&gt;
&lt;li&gt;Test Ticket based send with nonexistent ticket is rejected&lt;/li&gt;
&lt;li&gt;Test Ticket based send consumes ticket even on tecBAD PROOF&lt;/li&gt;
&lt;li&gt;Test Ticket based send with matching credential succeeds&lt;/li&gt;
&lt;li&gt;Test Escrow create with MPT locks only public balance&lt;/li&gt;
&lt;li&gt;Test Escrow finish credits destination public not CB&lt;/li&gt;
&lt;li&gt;Test Confidential send succeeds with active outgoing escrow&lt;/li&gt;
&lt;li&gt;Test Escrow create amount exceeding unlocked public returns tecINSUFFICIENT FUNDS&lt;/li&gt;
&lt;li&gt;Test Check create then cash on privacy MPT does not touch either side CB&lt;/li&gt;
&lt;li&gt;Test Convert amount capped by unlocked public not total owned&lt;/li&gt;
&lt;li&gt;Test Vault create with confidential enabled MPT succeeds&lt;/li&gt;
&lt;li&gt;Test Vault deposit preserves holder confidential state&lt;/li&gt;
&lt;li&gt;Test Vault deposit fails when holder has no public balance&lt;/li&gt;
&lt;li&gt;Test Vault withdraw preserves destination confidential state&lt;/li&gt;
&lt;li&gt;Test Vault pseudo mptoken has no confidential fields after deposit&lt;/li&gt;
&lt;li&gt;Test Vault confidential clawback independent of vault holdings&lt;/li&gt;
&lt;li&gt;Test Send at exactly 10x base fee succeeds&lt;/li&gt;
&lt;li&gt;Test Send at one drop below 10x base fee returns telINSUF FEE P&lt;/li&gt;
&lt;li&gt;Test First convert does not change holder owner count&lt;/li&gt;
&lt;li&gt;Test Issuance create then key register bumps issuer owner count by exactly 1&lt;/li&gt;
&lt;li&gt;Test Five confidential sends drain alice xrp by exactly 5x send fee&lt;/li&gt;
&lt;li&gt;Test Memo on confidential send does not affect proof&lt;/li&gt;
&lt;li&gt;Test Multi sig confidential send at exactly required fee succeeds&lt;/li&gt;
&lt;li&gt;Test Multi sig confidential send at one drop below required returns telINSUF FEE P&lt;/li&gt;
&lt;li&gt;Test Convert does not update sfOutstandingAmount&lt;/li&gt;
&lt;li&gt;Test Convert fee multiplier 10x bounds&lt;/li&gt;
&lt;li&gt;Test Merge inbox fee multiplier 10x bounds&lt;/li&gt;
&lt;li&gt;Test Convert back fee multiplier 10x bounds&lt;/li&gt;
&lt;li&gt;Test Clawback fee multiplier 10x bounds&lt;/li&gt;
&lt;li&gt;Test Send to deposit auth destination without preauth fails&lt;/li&gt;
&lt;li&gt;Test Send to deposit auth destination after direct preauth succeeds&lt;/li&gt;
&lt;li&gt;Test Send to deposit auth destination after unauth fails again&lt;/li&gt;
&lt;li&gt;Test Send to deposit auth destination with matching credential succeeds&lt;/li&gt;
&lt;li&gt;Test Send after credential deleted fails with nonexistent credential&lt;/li&gt;
&lt;li&gt;Test Send with third party credential id fails&lt;/li&gt;
&lt;li&gt;Test Send with unaccepted credential fails&lt;/li&gt;
&lt;li&gt;Test Send with duplicate credential ids fails&lt;/li&gt;
&lt;li&gt;Test Send with credential ids when destination has no deposit auth succeeds&lt;/li&gt;
&lt;li&gt;Test Credential based send with frozen destination fails with lock&lt;/li&gt;
&lt;li&gt;Test Failed credential based send does not credit destination inbox&lt;/li&gt;
&lt;li&gt;Test Credential based send credits all encrypted amounts when auditor present&lt;/li&gt;
&lt;li&gt;Test Issuance set domain id on Issuance without require auth fails&lt;/li&gt;
&lt;li&gt;Test Issuance set nonexistent domain id fails&lt;/li&gt;
&lt;li&gt;Test Confidential send in permissioned domain succeeds&lt;/li&gt;
&lt;li&gt;Test Pd payment to uncredentialed holder blocks funding&lt;/li&gt;
&lt;li&gt;Test Pd send when destination credential revoked blocks send&lt;/li&gt;
&lt;li&gt;Test Pd send when sender credential revoked blocks send&lt;/li&gt;
&lt;li&gt;Test Pd send after domain id added post convert succeeds for credentialed&lt;/li&gt;
&lt;li&gt;Test Pd clear domain id via zero sentinel revokes holder authorization&lt;/li&gt;
&lt;li&gt;Test Pd send with unaccepted destination credential blocks send&lt;/li&gt;
&lt;li&gt;Test Convert with reserve sponsor returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Merge inbox with reserve sponsor returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Send with reserve sponsor returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Convert back with reserve sponsor returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Clawback with reserve sponsor returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Send with fee plus reserve flags returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Send with zero sponsor flags returns temINVALID FLAG&lt;/li&gt;
&lt;li&gt;Test Send with sponsor equal account returns temMALFORMED&lt;/li&gt;
&lt;li&gt;Test Prefunded fee sponsorship for confidential send succeeds&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bug Hunt
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test sum IssuerEncryptedBalance equals coa after multi hop&lt;/li&gt;
&lt;li&gt;Test IssuerEncryptedBalance zero after full clawback&lt;/li&gt;
&lt;li&gt;Test IssuerEncryptedBalance decrypts to expected after partial send&lt;/li&gt;
&lt;li&gt;Test stale version send rejected after intervening send&lt;/li&gt;
&lt;li&gt;Test convertback tampered MPT amount field rejected&lt;/li&gt;
&lt;li&gt;Test send balance commitment all zero bytes rejected&lt;/li&gt;
&lt;li&gt;Test send amount commitment all zero bytes rejected&lt;/li&gt;
&lt;li&gt;Test holder key immutable second convert with new key rejected&lt;/li&gt;
&lt;li&gt;Test convert with holder key equal to issuer key rejected&lt;/li&gt;
&lt;li&gt;Test first convert initializes spending to enczero and version zero&lt;/li&gt;
&lt;li&gt;Test second convert does not mutate spending or version&lt;/li&gt;
&lt;li&gt;Test issuer can re encrypt holder balance under new auditor key off chain&lt;/li&gt;
&lt;li&gt;Test enable auditor after convert send should not tefinternal&lt;/li&gt;
&lt;li&gt;Test mergeinbox on encrypted zero inbox version semantics&lt;/li&gt;
&lt;li&gt;Test stale send proof after clawback rejected&lt;/li&gt;
&lt;li&gt;Test zero amount convert registers key and accepts inbound&lt;/li&gt;
&lt;li&gt;Test send ciphertext under wrong key reaches bad proof not internal&lt;/li&gt;
&lt;li&gt;Test send swap ciphertexts from different amount proof rejected&lt;/li&gt;
&lt;li&gt;Test send to authorized but unconverted holder clean reject&lt;/li&gt;
&lt;li&gt;Test batch ct sends allornothing rolls back version on final failure&lt;/li&gt;
&lt;li&gt;Test freeze and send same ledger ordering is clean&lt;/li&gt;
&lt;li&gt;Test iss enc key reset after full clawback blocked pre reset&lt;/li&gt;
&lt;li&gt;Test convert with holder key not owned by account silent loss&lt;/li&gt;
&lt;li&gt;Test convert at coa boundary rejects cleanly not internal&lt;/li&gt;
&lt;li&gt;Test Add auditor after zero amount convert does not crash next convert&lt;/li&gt;
&lt;li&gt;Test Add auditor after convert convertback roundtrip blocked by gates&lt;/li&gt;
&lt;li&gt;Test Convert back amount within cb s plus cb in but exceeding cb s rejected&lt;/li&gt;
&lt;li&gt;Test Recipient merge between two sender sends does not break sender&lt;/li&gt;
&lt;li&gt;Test Clawback when holder has only unmerged inbox state reset correctly&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>automation</category>
      <category>blockchain</category>
      <category>crypto</category>
      <category>testing</category>
    </item>
    <item>
      <title>Batch Transaction - QA Test Report</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Tue, 08 Sep 2026 22:39:39 +0000</pubDate>
      <link>https://dev.to/ripplexdev/batch-transaction-qa-test-report-5g5g</link>
      <guid>https://dev.to/ripplexdev/batch-transaction-qa-test-report-5g5g</guid>
      <description>&lt;p&gt;&lt;strong&gt;Test Report Date&lt;/strong&gt;: 9/8/2026&lt;br&gt;
&lt;strong&gt;Prepared By&lt;/strong&gt;: &lt;a href="https://github.com/sgramkumar" rel="noopener noreferrer"&gt;sgramkumar&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: GitLab CI Runner (nix-debian)&lt;br&gt;
&lt;strong&gt;Network&lt;/strong&gt;: xrpld devnet + private CI network&lt;/p&gt;
&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;This report presents the results of QA testing performed on Batch (XLS-56) Transactions across xrpld servers. Coverage targets the  BatchV1_1  amendment, which supersedes the original  Batch  amendment and tightened BatchSigner authorization and signing semantics.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Feature
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Feature Name:&lt;/strong&gt; Batch (Atomic) Transactions&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Prior to this feature, an account that needed several operations to succeed or fail together had no way to bind them atomically; each transaction settled independently, leaving the risk of partial completion. Batch allows an account to package up to 8 inner transactions into a single outer &lt;code&gt;Batch&lt;/code&gt; transaction that is processed as one atomic unit. Inner transactions execute under one of four modes — &lt;code&gt;AllOrNothing&lt;/code&gt;, &lt;code&gt;OnlyOne&lt;/code&gt;, &lt;code&gt;UntilFailure&lt;/code&gt;, or &lt;code&gt;Independent&lt;/code&gt; — and may be authorized across multiple accounts (BatchSigners), via delegated authority, via multi-signing, or sequenced by tickets. This unlocks reliable multi-step and multi-party workflows on the XRP Ledger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specification Reference:&lt;/strong&gt; &lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0056-batch" rel="noopener noreferrer"&gt;https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0056-batch&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Test Scope
&lt;/h2&gt;

&lt;p&gt;This report covers the full Batch surface as it stands under the &lt;code&gt;BatchV1_1&lt;/code&gt; amendment (xrpld PRs &lt;a href="https://github.com/XRPLF/rippled/pull/5060" rel="noopener noreferrer"&gt;#5060&lt;/a&gt;, &lt;a href="https://github.com/XRPLF/rippled/pull/6446" rel="noopener noreferrer"&gt;#6446&lt;/a&gt;). Testing focused on ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All four execution modes (&lt;code&gt;AllOrNothing&lt;/code&gt;, &lt;code&gt;OnlyOne&lt;/code&gt;, &lt;code&gt;UntilFailure&lt;/code&gt;, &lt;code&gt;Independent&lt;/code&gt;) behave per the XLS-56 specification, including correct commit/rollback semantics&lt;/li&gt;
&lt;li&gt;The 2–8 inner-transaction bounds, fee calculation, and &lt;code&gt;tfInnerBatchTxn&lt;/code&gt; rules are enforced&lt;/li&gt;
&lt;li&gt;Multi-account and multi-signed BatchSigner authorization is validated, including canonical signer ordering and the hardened &lt;code&gt;BatchV1_1&lt;/code&gt; signing preimage&lt;/li&gt;
&lt;li&gt;Batch composes correctly with the full range of inner transaction types (Payments, Offers, Checks, Escrow, MPT, Vault/Loan operations, and more), and with the features that have special interaction rules at the batch authorization/sequencing layer — Permission Delegation (inner  Delegate  field), Sponsored Fees &amp;amp; Reserves (outer/inner  Sponsor  rules), Confidential MPT (in-batch proof staleness), and Tickets (inner  TicketSequence)&lt;/li&gt;
&lt;li&gt;Security-critical properties hold under adversarial input, including malformed BatchSigners, stale-proof inner transactions, replay, and structural/serialization attacks&lt;/li&gt;
&lt;li&gt;Inner-transaction metadata (&lt;code&gt;sfParentBatchID&lt;/code&gt;) and same-ledger inclusion are correctly reported&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  3. Types of Testing Conducted
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Functional&lt;/td&gt;
&lt;td&gt;Verifying each execution mode, inner-transaction type, fee path, and RPC/metadata surface against the XLS-56 specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression&lt;/td&gt;
&lt;td&gt;Running the full xrpld test suite to confirm Batch changes did not break existing functionality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversarial / Security&lt;/td&gt;
&lt;td&gt;Attack-matrix scenarios probing malformed BatchSigners, signature-binding violations, stale-proof inner transactions, replay, over-size batches, and structural/serialization smuggling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Feature&lt;/td&gt;
&lt;td&gt;Interactions between Batch and Permission Delegation (XLS-75), Sponsored Fees &amp;amp; Reserves, Confidential MPT (XLS-96), and Tickets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End-to-End&lt;/td&gt;
&lt;td&gt;Full flows spanning batch assembly, multi-party signing, submission, atomic commit/rollback, and downstream metadata validation via xrpld&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  4. Test Results Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Total Tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Batch — Core Functional (execution modes, multi-account/multi-sign, tickets/replay/metadata, vault/loan/transaction types, signature &amp;amp; structural validation)&lt;/td&gt;
&lt;td&gt;106&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch — Adversarial / Security&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch — Cross-Feature (Delegation, Sponsorship, Confidential MPT)&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Batch — Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;189&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression — xrpld (full suite)&lt;/td&gt;
&lt;td&gt;5,088&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Testcases: &lt;a href="https://dev.to/ripplexdev/batch-transaction-testcases-1klf"&gt;https://dev.to/ripplexdev/batch-transaction-testcases-1klf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feature commit history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Introduced as  Batch  in PR #5060 (2a61aee562, merged 2025-05-23)
- Disabled in v3.1.1 due to a critical bug discovered in the original implementation
- Replaced by  BatchV1_1  (hardened BatchSigners + signing preimage) in PR #6446 (86d8b244d6, merged 2026-07-01)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Related xrpld changes covered in this round:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/5060" rel="noopener noreferrer"&gt;#5060&lt;/a&gt; — Initial Batch (XLS-56) feature — four execution modes, &lt;code&gt;parentBatchId&lt;/code&gt; propagation&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/6446" rel="noopener noreferrer"&gt;#6446&lt;/a&gt; — BatchV1_1 — supersedes &lt;code&gt;Batch&lt;/code&gt;/&lt;code&gt;fixBatchInnerSigs&lt;/code&gt;, tightens BatchSigner authorization and signing-message construction&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/7736" rel="noopener noreferrer"&gt;#7736&lt;/a&gt; — enforces &lt;code&gt;kMaxBatchTxCount&lt;/code&gt; (rejects &amp;gt;8 inner transactions at STTx construction)&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/7279" rel="noopener noreferrer"&gt;#7279&lt;/a&gt; — delegated Confidential MPT inner-transaction cases inside Batch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Related specification change:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XRPL-Standards updated XLS-0056 to align with the BatchV1_1 implementation (BatchSigners sorting/signing payload, &lt;code&gt;tfInnerBatchTxn&lt;/code&gt; common-field semantics)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Bugs Reported
&lt;/h2&gt;

&lt;p&gt;All internal bugs are fixed and there are no Critical Open bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Conclusion
&lt;/h2&gt;

&lt;p&gt;Batch (XLS-56) Transactions have now been exercised across 189 dedicated tests spanning core functional coverage (four execution modes, multi-account/multi-sign authorization, tickets/replay/metadata, and inner transaction-type coverage), adversarial / security scenarios, and cross-feature interactions with Permission Delegation, Sponsored Fees &amp;amp; Reserves, and Confidential MPT. In addition, the full xrpld (5,088) regression suite has been executed to confirm no downstream breakage.&lt;/p&gt;

&lt;p&gt;All security-critical properties documented in XLS-56 have been validated, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correct atomic commit/rollback semantics for every execution mode (&lt;code&gt;AllOrNothing&lt;/code&gt; rolls the whole batch back on any inner failure; &lt;code&gt;OnlyOne&lt;/code&gt;, &lt;code&gt;UntilFailure&lt;/code&gt;, and &lt;code&gt;Independent&lt;/code&gt; apply their defined subsets)&lt;/li&gt;
&lt;li&gt;Enforcement of the 2–8 inner-transaction bounds and rejection of over-size batches before preflight work (PR &lt;a href="https://github.com/XRPLF/rippled/pull/7736" rel="noopener noreferrer"&gt;#7736&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Correct BatchSigner authorization under the hardened &lt;code&gt;BatchV1_1&lt;/code&gt; signing preimage, including canonical ascending signer ordering and multi-signed BatchSigners&lt;/li&gt;
&lt;li&gt;Correct interaction with delegated authority, sponsorship, tickets, and Confidential MPT inner transactions, including stale-proof rollback under &lt;code&gt;AllOrNothing&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Accurate inner-transaction metadata (&lt;code&gt;sfParentBatchID&lt;/code&gt;) and same-ledger inclusion reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The feature is considered ready for production use at the tested commit level. Future updates to this report will follow any material additions to the Batch surface.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>softwaredevelopment</category>
      <category>testing</category>
    </item>
    <item>
      <title>Batch Transaction - Testcases</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Tue, 08 Sep 2026 21:40:47 +0000</pubDate>
      <link>https://dev.to/ripplexdev/batch-transaction-testcases-1klf</link>
      <guid>https://dev.to/ripplexdev/batch-transaction-testcases-1klf</guid>
      <description>&lt;p&gt;Automated test coverage for the &lt;strong&gt;Batch&lt;/strong&gt; transaction feature (XLS-56), grouped by the invariant or execution mode each test exercises with &lt;strong&gt;189 tests.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Test Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Execution Modes&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-Account &amp;amp; Multi-Sign&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tickets, Replay &amp;amp; Metadata&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vault, Loan &amp;amp; Transaction Types&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signature &amp;amp; Structural Validation&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security &amp;amp; Adversarial&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Feature Interactions&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;189&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  1. Execution Modes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AllOrNothing
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch allornothing all payments succeed&lt;/li&gt;
&lt;li&gt;Test Batch allornothing submit batch multiple times&lt;/li&gt;
&lt;li&gt;Test Batch allornothing one payment fails&lt;/li&gt;
&lt;li&gt;Test Batch allornothing all payments fail&lt;/li&gt;
&lt;li&gt;Test Batch allornothing mixed transaction types&lt;/li&gt;
&lt;li&gt;Test Batch allornothing fee calculation&lt;/li&gt;
&lt;li&gt;Test Batch allornothing max inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch allornothing more than max inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch allornothing cash same check multiple times&lt;/li&gt;
&lt;li&gt;Test Batch allornothing fail and then succeed&lt;/li&gt;
&lt;li&gt;Test Batch allornothing with tickets&lt;/li&gt;
&lt;li&gt;Test Batch allornothing deep rollback on late inner failure&lt;/li&gt;
&lt;li&gt;Test Batch allornothing value conservation&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  OnlyOne
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch onlyone first succeeds&lt;/li&gt;
&lt;li&gt;Test Batch onlyone first fails second succeeds&lt;/li&gt;
&lt;li&gt;Test Batch onlyone all fail&lt;/li&gt;
&lt;li&gt;Test Batch onlyone offer priority&lt;/li&gt;
&lt;li&gt;Test Batch onlyone max inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch onlyone more than max inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch onlyone cash same check multiple times&lt;/li&gt;
&lt;li&gt;Test Batch onlyone fail and then succeed&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  UntilFailure
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch untilfailure all succeed&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure stops at first&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure stops at second&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure stops at third&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure sequential setup&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure progressive payments&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure mixed success failure pattern&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure max inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure more than max inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure cash same check multiple times&lt;/li&gt;
&lt;li&gt;Test Batch untilfailure fail and then succeed&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Independent
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch independent all succeed&lt;/li&gt;
&lt;li&gt;Test Batch independent some fail&lt;/li&gt;
&lt;li&gt;Test Batch independent all fail&lt;/li&gt;
&lt;li&gt;Test Batch independent parallel operations&lt;/li&gt;
&lt;li&gt;Test Batch independent mixed transaction types&lt;/li&gt;
&lt;li&gt;Test Batch independent account setup operations&lt;/li&gt;
&lt;li&gt;Test Batch independent max transactions&lt;/li&gt;
&lt;li&gt;Test Batch independent more than max transactions&lt;/li&gt;
&lt;li&gt;Test Batch independent cash same check multiple times&lt;/li&gt;
&lt;li&gt;Test Batch independent fail and then succeed&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Multi-Account &amp;amp; Multi-Sign
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Multi-Account
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch multiaccount workflow all payments succeed&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount atomic swap xrp for xrp&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount atomic swap xrp for token&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount circular three way swap&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount with submitter not in inner txns&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount without signers&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount with max signers&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount with more than max signers&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount txn1 fails txn2 succeeds&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount create check succeeds cash check fails&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount delete accounts too soon with other account as signer&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount delete accounts after flag ledger with other account as signer&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount delete submitting account after flag ledger with no signer&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount delete submitting account after flag ledger with signer&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount alice creates offer bob creates offer&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount create nftokenmint nftokenoffercreate fails reverts nftokenmint&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount exploit steal funds&lt;/li&gt;
&lt;li&gt;Test Batch multiaccount ticket based outer succeeds&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Multi-Sign
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test multisigned outer batch succeeds&lt;/li&gt;
&lt;li&gt;Test multisigned outer with multisigned batch signer succeeds&lt;/li&gt;
&lt;li&gt;Test multisigned outer below quorum rejected tefBAD_QUORUM&lt;/li&gt;
&lt;li&gt;Test multisigned batch signer below quorum rejected tefBAD_QUORUM&lt;/li&gt;
&lt;li&gt;Test multisigned outer with unauthorized signer rejected tefBAD_SIGNATURE&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Tickets, Replay &amp;amp; Metadata
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tickets
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch inner txns consume tickets succeeds&lt;/li&gt;
&lt;li&gt;Test Batch inner tickets used out of order succeeds&lt;/li&gt;
&lt;li&gt;Test Batch inner with sequence and ticket rejected temSEQ_AND_TICKET&lt;/li&gt;
&lt;li&gt;Test Batch duplicate ticket same account rejected temREDUNDANT&lt;/li&gt;
&lt;li&gt;Test Batch nonexistent ticket rolls back allornothing&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Replay
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch resubmission is rejected and pays inner once&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Metadata
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch inner txns carry parent batch id and share ledger&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Vault, Loan &amp;amp; Transaction Types
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Single-Asset Vault (SAV)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch with vault create&lt;/li&gt;
&lt;li&gt;Test Batch with vault set&lt;/li&gt;
&lt;li&gt;Test Batch with vault deposit&lt;/li&gt;
&lt;li&gt;Test Batch with vault withdraw&lt;/li&gt;
&lt;li&gt;Test Batch with vault delete&lt;/li&gt;
&lt;li&gt;Test Batch with vault clawback&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  LoanBroker / Loan
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch with loan broker set&lt;/li&gt;
&lt;li&gt;Test Batch with loan broker delete&lt;/li&gt;
&lt;li&gt;Test Batch with loan broker cover deposit&lt;/li&gt;
&lt;li&gt;Test Batch with loan broker cover withdraw&lt;/li&gt;
&lt;li&gt;Test Batch with loan broker cover clawback&lt;/li&gt;
&lt;li&gt;Test Batch with loan set&lt;/li&gt;
&lt;li&gt;Test Batch with loan pay&lt;/li&gt;
&lt;li&gt;Test Batch with loan delete&lt;/li&gt;
&lt;li&gt;Test Batch with loan manage&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Supported Transaction Types
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch transaction type trustset&lt;/li&gt;
&lt;li&gt;Test Batch transaction type offercreate&lt;/li&gt;
&lt;li&gt;Test Batch transaction type account set&lt;/li&gt;
&lt;li&gt;Test Batch transaction type escrow create&lt;/li&gt;
&lt;li&gt;Test Batch transaction type check create&lt;/li&gt;
&lt;li&gt;Test Batch transaction type nftokenmint&lt;/li&gt;
&lt;li&gt;Test Batch with ticket create transaction&lt;/li&gt;
&lt;li&gt;Test Batch transaction type signerlistset&lt;/li&gt;
&lt;li&gt;Test Batch transaction type depositpreauth&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. Signature &amp;amp; Structural Validation (V1.1 Readiness)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Readiness / Preimage
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch v1.1 preimage matches pr1010 single&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 preimage matches pr1010 multi&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 preimage layout&lt;/li&gt;
&lt;li&gt;Test batchsigners signature binds outer account sequence and signer account&lt;/li&gt;
&lt;li&gt;Test Batch signers sorted by account id&lt;/li&gt;
&lt;li&gt;Test sdk encode for signing batch natively binds account and sequence&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Preflight Error Ordering
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch inner tx with negative fee rejected at preflight&lt;/li&gt;
&lt;li&gt;Test Batch inner tx with positive xrp fee rejected at preflight&lt;/li&gt;
&lt;li&gt;Test Batch inner tx with iou fee rejected at preflight&lt;/li&gt;
&lt;li&gt;Test Batch inner tx with zero fee passes fee preflight&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. Security &amp;amp; Adversarial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Structural / Flag Enforcement
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch empty raw transactions&lt;/li&gt;
&lt;li&gt;Test Batch with one raw transaction&lt;/li&gt;
&lt;li&gt;Test Batch with all inner transactions having no tfInnerBatchTxn flag&lt;/li&gt;
&lt;li&gt;Test Batch with some inner transactions having no tfInnerBatchTxn flag&lt;/li&gt;
&lt;li&gt;Test Batch with all inner transactions having incorrect tfInnerBatchTxn flag&lt;/li&gt;
&lt;li&gt;Test Batch with tfInnerBatchTxn flag set for outer transaction&lt;/li&gt;
&lt;li&gt;Test Batch with no mode set for outer transaction&lt;/li&gt;
&lt;li&gt;Test Batch with invalid mode set for outer transaction&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions having no fee field&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions having invalid fee values&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions having bad fee values&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions with SigningPubKey&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions with fee and SigningPubKey&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions with TxnSignature&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions with Signers&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions with SponsorSignature&lt;/li&gt;
&lt;li&gt;Test Batch with inner transactions with CounterpartySignature&lt;/li&gt;
&lt;li&gt;Test Batch with invalid inner transactions&lt;/li&gt;
&lt;li&gt;Test Batch inside non empty batch&lt;/li&gt;
&lt;li&gt;Test Batch inside empty batch&lt;/li&gt;
&lt;li&gt;Test Batch inner txns with same sequence leaves no state change&lt;/li&gt;
&lt;li&gt;Test Batch inner txns with same sequence&lt;/li&gt;
&lt;li&gt;Test Batch inner txns with past sequence&lt;/li&gt;
&lt;li&gt;Test Batch inner txns with future not incremental sequences&lt;/li&gt;
&lt;li&gt;Test Batch with account does not exist&lt;/li&gt;
&lt;li&gt;Test Batch with deposit auth on account&lt;/li&gt;
&lt;li&gt;Test Batch with master key disabled on account&lt;/li&gt;
&lt;li&gt;Test Batch all payments with destination account not funded&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Adversarial Attack Matrix
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch with single inner tx returns temARRAY_EMPTY&lt;/li&gt;
&lt;li&gt;Test inner tx with non zero fee returns temBAD_FEE&lt;/li&gt;
&lt;li&gt;Test inner tx with non empty signing pubkey returns temBAD_REGKEY&lt;/li&gt;
&lt;li&gt;Test inner tx missing inner batch flag returns temINVALID_FLAG&lt;/li&gt;
&lt;li&gt;Test standalone payment with tfInnerBatchTxn flag rejected&lt;/li&gt;
&lt;li&gt;Test Batch with outer account in BatchSigners rejected&lt;/li&gt;
&lt;li&gt;Test Batch with duplicate BatchSigners rejected&lt;/li&gt;
&lt;li&gt;Test Batch with BatchSigner for unrelated account rejected&lt;/li&gt;
&lt;li&gt;Test Batch BatchSigners signature for different batch rejected&lt;/li&gt;
&lt;li&gt;Test Batch with single inner transaction rejected temARRAY_EMPTY&lt;/li&gt;
&lt;li&gt;Test Batch with nested inner batch rejected&lt;/li&gt;
&lt;li&gt;Test Batch with duplicate inner sequences rejected temREDUNDANT&lt;/li&gt;
&lt;li&gt;Test Batch inner setregularkey succeeds when outer signed by master&lt;/li&gt;
&lt;li&gt;Test Batch innerbatch flag on standalone payment rejected&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 oversized inner array rejected as tem&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 far oversized inner array survives eager hashing&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 far oversized inner array at scale survives eager hashing&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 batchsigner sig bound to outer sequence&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 batchsigner sig bound to outer account&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 unsorted batchsigners rejected&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 standalone tx with inner batch flag rejected&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 standalone oversized path stays tel&lt;/li&gt;
&lt;li&gt;Test Batch v1.1 batchsigners over kmax rejected&lt;/li&gt;
&lt;li&gt;Test non batch tx with raw transactions rejected at construction&lt;/li&gt;
&lt;li&gt;Test non batch raw transactions rejection does not crash server&lt;/li&gt;
&lt;li&gt;Test Batch outer with sfDelegate rejected by notdelegable template&lt;/li&gt;
&lt;li&gt;Test Batch inner notdelegable type with sfDelegate inner rejected&lt;/li&gt;
&lt;li&gt;Test Batch inner delegated without permission grant returns terNO_DELEGATE_PERMISSION&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  7. Cross-Feature Interactions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Delegation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test delegate as outer account executes delegated inner succeeds&lt;/li&gt;
&lt;li&gt;Test delegate as batch signer authorizes delegated inner succeeds&lt;/li&gt;
&lt;li&gt;Test delegated inner without batch signer rejected temBAD_SIGNER&lt;/li&gt;
&lt;li&gt;Test delegated inner signed by account holder rejected temBAD_SIGNER&lt;/li&gt;
&lt;li&gt;Test delegate without permission inner fails and batch rolls back&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Sponsorship
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test outer batch with reserve sponsorship flag rejected temINVALID_FLAG&lt;/li&gt;
&lt;li&gt;Test inner batch txn with fee sponsorship rejected temINVALID_FLAG&lt;/li&gt;
&lt;li&gt;Test inner batch txn with sponsor signature material rejected temBAD_SIGNATURE&lt;/li&gt;
&lt;li&gt;Test prefunded fee sponsored outer batch succeeds&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Confidential MPT
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Test Batch confidential mpt two sends with stale proof allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential mpt independent send with one failing&lt;/li&gt;
&lt;li&gt;Test Batch confidential mpt convert then merge inbox allornothing&lt;/li&gt;
&lt;li&gt;Test Batch delegated send missing permission allornothing&lt;/li&gt;
&lt;li&gt;Test Batch delegated send with delegate as outer needs no batch signer&lt;/li&gt;
&lt;li&gt;Test Batch delegated send with delegate as outer with batch signer&lt;/li&gt;
&lt;li&gt;Test Batch confidential mpt two chained sends same sender allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential mpt send then convert back same sender allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential mpt three chained sends same sender allornothing&lt;/li&gt;
&lt;li&gt;Test Batch confidential mpt chained send wrong predicted ciphertext fails&lt;/li&gt;
&lt;li&gt;Test Batch only one with two valid chained sends executes first only&lt;/li&gt;
&lt;li&gt;Test Batch only one first send to unconverted fails falls through to second&lt;/li&gt;
&lt;li&gt;Test Batch until failure first send commits then stale second fails&lt;/li&gt;
&lt;li&gt;Test Batch allornothing issuer lock then alice send rolls back both&lt;/li&gt;
&lt;li&gt;Test Batch independent three holders converts coa aggregate correct&lt;/li&gt;
&lt;li&gt;Test Batch allornothing inner revokes delegate then later inner uses it rolls back&lt;/li&gt;
&lt;li&gt;Test Batch two chained delegated sends from same delegator both commit&lt;/li&gt;
&lt;li&gt;Test delegated send after delegator loses domain membership fails&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>automation</category>
      <category>security</category>
      <category>software</category>
      <category>testing</category>
    </item>
    <item>
      <title>Account Permission Delegation - QA Test Report</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Wed, 26 Aug 2026 19:18:57 +0000</pubDate>
      <link>https://dev.to/ripplexdev/account-permission-delegation-qa-test-report-4ia0</link>
      <guid>https://dev.to/ripplexdev/account-permission-delegation-qa-test-report-4ia0</guid>
      <description>&lt;p&gt;&lt;strong&gt;Test Report Date&lt;/strong&gt;: 8/26/2026&lt;br&gt;
&lt;strong&gt;Prepared By&lt;/strong&gt;: QA Team [&lt;a href="https://github.com/sgramkumar" rel="noopener noreferrer"&gt;sgramkumar&lt;/a&gt;, &lt;a href="https://github.com/mkunasani" rel="noopener noreferrer"&gt;mkunasani&lt;/a&gt;, &lt;a href="https://github.com/manasip-prog" rel="noopener noreferrer"&gt;manasip-prog&lt;/a&gt;]&lt;br&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: GitLab CI Runner (nix-debian)&lt;br&gt;
&lt;strong&gt;Network&lt;/strong&gt;: xrpld devnet + private CI network&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br&gt;
This report presents the updated results of QA testing performed on Account Permission Delegation across xrpld servers. It supersedes the initial report from May 2025, reflecting the substantial expansion of test coverage that has occurred as the feature evolved through follow-up xrpld changes.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Feature
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Feature Name&lt;/strong&gt;: Account Permission Delegation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: Prior to this feature, critical issuer actions — such as authorizing trustlines — required direct control by the account's own keys, hindering operational efficiency and complex use cases. Account Permission Delegation empowers account holders to selectively delegate specific permissions to other accounts, enhancing account usability without compromising security. This mechanism unlocks new possibilities for XRPL applications, including multi-party workflows and advanced account management strategies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specification Reference&lt;/strong&gt;: &lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0075-permission-delegation" rel="noopener noreferrer"&gt;https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0075-permission-delegation&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Test Scope
&lt;/h3&gt;

&lt;p&gt;This report covers the full delegation surface as it stands after the follow-up xrpld changes (PRs &lt;a href="https://github.com/XRPLF/rippled/pull/6126" rel="noopener noreferrer"&gt;#6126&lt;/a&gt;, &lt;a href="https://github.com/XRPLF/rippled/pull/7064" rel="noopener noreferrer"&gt;#7064&lt;/a&gt;, &lt;a href="https://github.com/XRPLF/rippled/pull/7584" rel="noopener noreferrer"&gt;#7584&lt;/a&gt;, &lt;a href="https://github.com/XRPLF/rippled/pull/7640" rel="noopener noreferrer"&gt;#7640&lt;/a&gt;). Testing focused on ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All specified functionalities behave per the XLS-0075 specification&lt;/li&gt;
&lt;li&gt;The API handles both valid and invalid input gracefully&lt;/li&gt;
&lt;li&gt;Delegated transactions interact correctly with adjacent features (Batch, Confidential MPT, transaction queue, multi-signing)&lt;/li&gt;
&lt;li&gt;Security-critical properties hold under adversarial input, including permission-escalation attempts via flag/field side-channels&lt;/li&gt;
&lt;li&gt;Behavior is consistent across both RPC and WebSocket interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Types of Testing Conducted
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Functional&lt;/td&gt;
&lt;td&gt;Verifying each transaction, permission grant, and RPC path against the feature specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression&lt;/td&gt;
&lt;td&gt;Running full xrpld test suites to confirm delegation changes did not break existing functionality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversarial / Security&lt;/td&gt;
&lt;td&gt;Attack-matrix scenarios probing self-delegation, permission-scope escalation, flag/field smuggling, granular-permission union semantics, and revocation edge cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Feature&lt;/td&gt;
&lt;td&gt;Interactions between Delegation and Batch (XLS-56), Confidential MPT, the transaction queue, and multi-signing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End-to-End&lt;/td&gt;
&lt;td&gt;Full flows spanning delegation setup, delegated submission, revocation, and downstream validation via xrpld&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  4. Test Results Summary
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Total Tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Permission Delegation — Core Functional&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission Delegation — Adversarial / Security&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission Delegation — Cross-Feature (Batch, Confidential MPT, TxQ)&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Permission Delegation — Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;179&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Regression — xrpld (full suite)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5,088&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Testcases&lt;/strong&gt;: &lt;a href="https://dev.to/ripplexdev/account-permission-delegation-testcases-3j0b"&gt;https://dev.to/ripplexdev/account-permission-delegation-testcases-3j0b&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature commit history:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Introduced as `PermissionDelegation` in PR #5354 (2db2791805, 2025-05-08)
- Marked unsupported (2ae65d2fdb, 2025-09-18) pending security fix
- Renamed to `PermissionDelegationV1_1` with security fix in PR #5825
  (fa69918124, 2025-10-31)
- Re-supported (`Supported::Yes`) in PR #6613 (772ea80a25, 2026-06-17)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Related xrpld changes covered in this round:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/5354" rel="noopener noreferrer"&gt;#5354&lt;/a&gt; — Initial &lt;code&gt;PermissionDelegation&lt;/code&gt; feature&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/5650" rel="noopener noreferrer"&gt;#5650&lt;/a&gt; — &lt;code&gt;fixDelegateV1_1&lt;/code&gt; — restrictions on Permission Delegation&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/5825" rel="noopener noreferrer"&gt;#5825&lt;/a&gt; — Security vulnerability fix + rename to &lt;code&gt;PermissionDelegationV1_1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/6126" rel="noopener noreferrer"&gt;#6126&lt;/a&gt; — &lt;code&gt;account_tx&lt;/code&gt; delegate filter parameter&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/6729" rel="noopener noreferrer"&gt;#6729&lt;/a&gt; — Delegation tests for Confidential Transfers&lt;/li&gt;
&lt;li&gt;PR &lt;a href="https://github.com/XRPLF/rippled/pull/6808" rel="noopener noreferrer"&gt;#6808&lt;/a&gt; — Confidential delegation tests with tickets&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Bugs Reported
&lt;/h3&gt;

&lt;p&gt;All Internal bugs are fixed and there are no Critical Open bugs&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Conclusion
&lt;/h3&gt;

&lt;p&gt;Account Permission Delegation has now been exercised across 179 dedicated tests spanning core functional coverage, adversarial / security scenarios, and cross-feature interactions — a substantial expansion from the 66 tests reported at initial feature landing. In addition, the full xrpld (5,088) regression suites have been executed to confirm no downstream breakage.&lt;/p&gt;

&lt;p&gt;All security-critical properties documented in XLS-0075 have been validated, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Correct rejection of self-delegation, unknown permissions, and NotDelegable transaction types&lt;/li&gt;
&lt;li&gt;Enforcement of granular-permission field/flag restrictions with no side-channel escalation via  SetFlag / ClearFlag  or restricted-field assignment&lt;/li&gt;
&lt;li&gt;Correct interaction with the transaction queue (delegated transactions cannot queue — PR &lt;a href="https://github.com/XRPLF/rippled/pull/7640" rel="noopener noreferrer"&gt;#7640&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Correct  account_tx  attribution semantics under regular-key and multi-sign paths (PR &lt;a href="https://github.com/XRPLF/rippled/pull/6126" rel="noopener noreferrer"&gt;#6126&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Independence of delegation from  asfDisableMaster  (delegated payments continue to work after the master key is disabled)&lt;/li&gt;
&lt;li&gt;The feature is considered ready for production use at the tested commit level. Future updates to this report will follow any material additions to the delegation surface.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>software</category>
      <category>testing</category>
    </item>
    <item>
      <title>Account Permission Delegation - Testcases</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Wed, 26 Aug 2026 19:15:41 +0000</pubDate>
      <link>https://dev.to/ripplexdev/account-permission-delegation-testcases-3j0b</link>
      <guid>https://dev.to/ripplexdev/account-permission-delegation-testcases-3j0b</guid>
      <description>&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Test Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core Functional&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adversarial / Security&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-Feature Interactions&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;179&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Core Functional
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test DelegateSet with permissions field&lt;/li&gt;
&lt;li&gt;Test DelegateSet skipped before payment&lt;/li&gt;
&lt;li&gt;Test DelegateSet without permissions field&lt;/li&gt;
&lt;li&gt;Test DelegateSet with empty list&lt;/li&gt;
&lt;li&gt;Test DelegateSet with permissions as non-JSON&lt;/li&gt;
&lt;li&gt;Test DelegateSet by non-existing account&lt;/li&gt;
&lt;li&gt;Test DelegateSet by non-existing authorize account&lt;/li&gt;
&lt;li&gt;Test DelegateSet by account with deposit auth enabled&lt;/li&gt;
&lt;li&gt;Test DelegateSet and submit different transaction&lt;/li&gt;
&lt;li&gt;Test DelegateSet and submit transaction as original account&lt;/li&gt;
&lt;li&gt;Test DelegateSet with same permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet to self&lt;/li&gt;
&lt;li&gt;Test DelegateSet with invalid permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet with restricted permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet with 10 permissions&lt;/li&gt;
&lt;li&gt;Test DelegateSet with more than 10 permissions&lt;/li&gt;
&lt;li&gt;Test DelegateSet with multiple permissions&lt;/li&gt;
&lt;li&gt;Test DelegateSet and delete delegated account&lt;/li&gt;
&lt;li&gt;Test DelegateSet and delete delegating account&lt;/li&gt;
&lt;li&gt;Test DelegateSet and make pay self&lt;/li&gt;
&lt;li&gt;Test DelegateSet and make pay delegated account without deposit auth&lt;/li&gt;
&lt;li&gt;Test DelegateSet and make pay delegated account with deposit auth&lt;/li&gt;
&lt;li&gt;Test DelegateSet authorize multiple users&lt;/li&gt;
&lt;li&gt;Test DelegateSet and submit AccountSet as original account&lt;/li&gt;
&lt;li&gt;Test DelegateSet and make payment&lt;/li&gt;
&lt;li&gt;Test DelegateSet and offer create&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create and cash check&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create and cancel check&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create and finish escrow&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create and cancel escrow&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create and claim paychan&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create and fund paychan&lt;/li&gt;
&lt;li&gt;Test DelegateSet and payment on ticket&lt;/li&gt;
&lt;li&gt;Test DelegateSet and create trustline&lt;/li&gt;
&lt;li&gt;Test DelegateSet and clawback&lt;/li&gt;
&lt;li&gt;Test DelegateSet and AMM create&lt;/li&gt;
&lt;li&gt;Test DelegateSet and AMM deposit&lt;/li&gt;
&lt;li&gt;Test DelegateSet multiple times with same permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet remove permission add same permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet change in permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet and update with invalid permission&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission TrustlineAuthorize&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission TrustlineFreeze and TrustlineUnfreeze individual freeze&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission TrustlineFreeze global freeze&lt;/li&gt;
&lt;li&gt;Test DelegateSet and payment with deep freeze&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission AccountDomainSet&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission AccountEmailHashSet&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission AccountMessageKeySet&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission AccountTransferRateSet&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission AccountTickSizeSet&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission PaymentMint&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission PaymentBurn&lt;/li&gt;
&lt;li&gt;Test DelegateSet granular permission MPTokenIssuanceLock and MPTokenIssuanceUnlock&lt;/li&gt;
&lt;li&gt;Test DelegateSet on account with master key disabled&lt;/li&gt;
&lt;li&gt;Test DelegateSet with empty Permissions revokes delegate authority&lt;/li&gt;
&lt;li&gt;Test DelegateSet with NotDelegable permission rejected&lt;/li&gt;
&lt;li&gt;Test DelegateSet with empty Permissions when no existing Delegate object is rejected&lt;/li&gt;
&lt;li&gt;Test Delegate object appears in authorized account's account_objects&lt;/li&gt;
&lt;li&gt;Test Delegated payment with basic permission succeeds&lt;/li&gt;
&lt;li&gt;Test Delegated unauthorized tx type returns terNO_DELEGATE_PERMISSION&lt;/li&gt;
&lt;li&gt;Test Delegated payment consumes delegate fee, not source fee&lt;/li&gt;
&lt;li&gt;Test AccountDelete on authorized account removes Delegate from both directories&lt;/li&gt;
&lt;li&gt;Test Token escrow — delegate create and finish escrow (IOU)&lt;/li&gt;
&lt;li&gt;Test Token escrow — delegate create and finish escrow (MPT)&lt;/li&gt;
&lt;li&gt;Test Circular delegation — positive scenario&lt;/li&gt;
&lt;li&gt;Test Circular delegation — negative scenario&lt;/li&gt;
&lt;li&gt;Test Chain delegation — positive scenario&lt;/li&gt;
&lt;li&gt;Test Chain delegation — negative scenario&lt;/li&gt;
&lt;li&gt;Test Delegated account with multiple signers and master key disabled&lt;/li&gt;
&lt;li&gt;Test Delegated account with multiple signers and master key not disabled&lt;/li&gt;
&lt;li&gt;Test Authorized account with multiple signers and master key disabled&lt;/li&gt;
&lt;li&gt;Test Authorized account with multiple signers and master key not disabled&lt;/li&gt;
&lt;li&gt;Test DelegateSet with base reserve on delegating account&lt;/li&gt;
&lt;li&gt;Test DelegateSet with base reserve on delegated account&lt;/li&gt;
&lt;li&gt;Test DelegateSet with no funds for fee on delegated account&lt;/li&gt;
&lt;li&gt;Test Delegation to Batch tfAllOrNothing — all payments (outer transaction)&lt;/li&gt;
&lt;li&gt;Test Delegation to Batch tfAllOrNothing — all payments (inner transaction)&lt;/li&gt;
&lt;li&gt;Test Delegate AccountSet WalletLocator granular permission&lt;/li&gt;
&lt;li&gt;Test Delegate AccountSet NFTokenMinter granular permission&lt;/li&gt;
&lt;li&gt;Test Delegate AccountSet combined field and flag&lt;/li&gt;
&lt;li&gt;Test Delegate AccountSet ClearFlag granular permission&lt;/li&gt;
&lt;li&gt;Test Delegate AccountSet SetFlag with granular permission&lt;/li&gt;
&lt;li&gt;Test Delegate granular permission exceeds scope&lt;/li&gt;
&lt;li&gt;Test Delegate multiple granular permissions with no full AccountSet&lt;/li&gt;
&lt;li&gt;Test Delegate AccountSet restricted field returns correct error code&lt;/li&gt;
&lt;li&gt;Test Delegate transaction with fee greater than account balance&lt;/li&gt;
&lt;li&gt;Test Delegate payment amount exceeds balance&lt;/li&gt;
&lt;li&gt;Test Delegate reserve manipulation via trustline creation&lt;/li&gt;
&lt;li&gt;Test Delegate using regular key instead of master&lt;/li&gt;
&lt;li&gt;Test Delegator regular key change during active delegation&lt;/li&gt;
&lt;li&gt;Test Batch tfAllOrNothing with payment and DelegateSet&lt;/li&gt;
&lt;li&gt;Test DelegateSet with Delegate field set&lt;/li&gt;
&lt;li&gt;Test Delegate trustline freeze without permission&lt;/li&gt;
&lt;li&gt;Test Delegate bypass RequireAuth flag&lt;/li&gt;
&lt;li&gt;Test Delegate permission change removes old permission&lt;/li&gt;
&lt;li&gt;Test Delegate payment with deposit auth bypass attempt&lt;/li&gt;
&lt;li&gt;Test Delegate offer crossing with unauthorized account&lt;/li&gt;
&lt;li&gt;Test Delegate conflicting granular permissions&lt;/li&gt;
&lt;li&gt;Test Delegate all granular AccountSet permissions — no flag access&lt;/li&gt;
&lt;li&gt;Test Delegate with zero-amount payment&lt;/li&gt;
&lt;li&gt;Test Delegate multi-signed transaction&lt;/li&gt;
&lt;li&gt;Test Delegate with multi-signers on delegated and authorized account&lt;/li&gt;
&lt;li&gt;Test Payment offline signing&lt;/li&gt;
&lt;li&gt;Test Delegate payment with offline signing&lt;/li&gt;
&lt;li&gt;Test Delegate payment by third party with offline signing&lt;/li&gt;
&lt;li&gt;Test account_tx  delegate_filter=actor  returns delegated txns&lt;/li&gt;
&lt;li&gt;Test account_tx  delegate_filter=authorizer  returns delegated txns&lt;/li&gt;
&lt;li&gt;Test account_tx  counter_party  narrows results&lt;/li&gt;
&lt;li&gt;Test account_tx  delegate_filter=actor  returns empty for authorizer&lt;/li&gt;
&lt;li&gt;Test account_tx  counter_party  no-match returns empty&lt;/li&gt;
&lt;li&gt;Test account_tx with malformed  delegate  returns invalidParams&lt;/li&gt;
&lt;li&gt;Test account_tx with malformed  counter_party  returns actMalformed&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Adversarial / Security
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test DelegateSet replaces existing permissions (silently revoking dropped)&lt;/li&gt;
&lt;li&gt;Test DelegateSet to self rejected with temMALFORMED&lt;/li&gt;
&lt;li&gt;Test DelegateSet with duplicate PermissionValues rejected&lt;/li&gt;
&lt;li&gt;Test DelegateSet with eleven permissions rejected&lt;/li&gt;
&lt;li&gt;Test 3.2.0 Vault and Batch tx types are not delegable&lt;/li&gt;
&lt;li&gt;Test 3.2.0 Loan tx types are not delegable&lt;/li&gt;
&lt;li&gt;Test Delegated Batch outer returns terNO_DELEGATE_PERMISSION&lt;/li&gt;
&lt;li&gt;Test Account SignerList cannot authorize delegated tx (returns tefNOT_MULTI_SIGNING)&lt;/li&gt;
&lt;li&gt;Test Delegate SignerList can authorize delegated tx&lt;/li&gt;
&lt;li&gt;Test Delegated tx signed by delegate's master key succeeds&lt;/li&gt;
&lt;li&gt;Test PR #7064 — delegate  sign_for  on own delegated tx returns invalidParams&lt;/li&gt;
&lt;li&gt;Test PR #7064 — delegator can be signer when in delegate's SignerList&lt;/li&gt;
&lt;li&gt;Test Delegate to self rejected with temMALFORMED&lt;/li&gt;
&lt;li&gt;Test DelegateSet with duplicate permission rejected&lt;/li&gt;
&lt;li&gt;Test DelegateSet with unknown PermissionValue rejected&lt;/li&gt;
&lt;li&gt;Test DelegateSet to non-existent account returns tecNO_TARGET&lt;/li&gt;
&lt;li&gt;Test Batch transaction type is not delegable&lt;/li&gt;
&lt;li&gt;Test Delegated tx after revocation returns terNO_DELEGATE_PERMISSION&lt;/li&gt;
&lt;li&gt;Test Delegated payment works after master key disabled&lt;/li&gt;
&lt;li&gt;Test  Delegate  field set to own account rejected with temBAD_SIGNER&lt;/li&gt;
&lt;li&gt;Test Delegated no-op AccountSet rejected&lt;/li&gt;
&lt;li&gt;Test Delegated no-op TrustSet rejected&lt;/li&gt;
&lt;li&gt;Test Delegated SignerListSet rejected at preflight&lt;/li&gt;
&lt;li&gt;Test Delegated SetRegularKey rejected at preflight&lt;/li&gt;
&lt;li&gt;Test AccountSet WalletSize field rejected under granular AccountDomainSet delegate&lt;/li&gt;
&lt;li&gt;Test TrustlineFreeze rejects disallowed flag tfSetNoRipple&lt;/li&gt;
&lt;li&gt;Test TrustlineFreeze rejects disallowed field QualityIn&lt;/li&gt;
&lt;li&gt;Test PaymentBurn rejects disallowed flag tfPartialPayment&lt;/li&gt;
&lt;li&gt;Test PaymentBurn rejects disallowed field Paths&lt;/li&gt;
&lt;li&gt;Test Union of two granular permissions still forbids fields ungranted by either&lt;/li&gt;
&lt;li&gt;Test Union of Freeze and Unfreeze widens allowed flags but not fields&lt;/li&gt;
&lt;li&gt;Test AccountDomainSet delegate cannot smuggle SetFlag asfRequireAuth&lt;/li&gt;
&lt;li&gt;Test AccountDomainSet delegate cannot smuggle SetFlag asfDisableMaster&lt;/li&gt;
&lt;li&gt;Test AccountDomainSet delegate cannot smuggle NFTokenMinter via WalletSize&lt;/li&gt;
&lt;li&gt;Test MPTokenIssuanceLock rejects disallowed field DomainID&lt;/li&gt;
&lt;li&gt;Test MPTokenIssuanceLock rejects unlock flag&lt;/li&gt;
&lt;li&gt;Test PaymentBurn delegate cannot flip issuer to mint&lt;/li&gt;
&lt;li&gt;Test PaymentMint delegate cannot flip issuer to burn&lt;/li&gt;
&lt;li&gt;Test PaymentBurn delegate rejected when holder balance is zero&lt;/li&gt;
&lt;li&gt;Test PaymentMint delegate rejected when destination lacks trustline&lt;/li&gt;
&lt;li&gt;Test Granular Mint/Burn do not authorize XRP payment&lt;/li&gt;
&lt;li&gt;Test DelegateSet rejects truncating PermissionValue&lt;/li&gt;
&lt;li&gt;Test PR #6126 — actor filter ignores regular-key-signed payment&lt;/li&gt;
&lt;li&gt;Test PR #6126 — actor filter ignores multi-sig-signed non-delegated payment&lt;/li&gt;
&lt;li&gt;Test PR #6126 — delegate marker without  delegate  param rejected&lt;/li&gt;
&lt;li&gt;Test PR #6126 — non-delegate marker with  delegate  param rejected&lt;/li&gt;
&lt;li&gt;Test PR #6126 — delegated tx with multi-signed delegatee matches both filters&lt;/li&gt;
&lt;li&gt;Test PR #6126 — delegate actor filter paginates all delegated txns&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Cross-Feature Interactions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Test Delegate as outer account executes delegated inner (succeeds)&lt;/li&gt;
&lt;li&gt;Test Delegate as BatchSigner authorizes delegated inner (succeeds)&lt;/li&gt;
&lt;li&gt;Test Delegated inner without BatchSigner rejected with temBAD_SIGNER&lt;/li&gt;
&lt;li&gt;Test Delegated inner signed by account holder rejected with temBAD_SIGNER&lt;/li&gt;
&lt;li&gt;Test Delegate without permission — inner fails and Batch rolls back&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTSend — basic&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTSend — missing permission&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTConvert&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTMergeInbox&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTConvertBack&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTClawback by issuer&lt;/li&gt;
&lt;li&gt;Test Delegate — send permission only cannot ConvertBack&lt;/li&gt;
&lt;li&gt;Test Delegate — ConvertBack permission only cannot send&lt;/li&gt;
&lt;li&gt;Test Delegate ConfidentialMPTClawback with non-issuer account rejected at preflight&lt;/li&gt;
&lt;li&gt;Test Delegate — revoked permission blocks subsequent use&lt;/li&gt;
&lt;li&gt;Test Delegate — self-delegation rejected&lt;/li&gt;
&lt;li&gt;Test Delegate — ConfidentialMPTSend with proof over delegate keys rejected&lt;/li&gt;
&lt;li&gt;Test PR #7640 — delegated payment rejected with telCAN_NOT_QUEUE when ledger full&lt;/li&gt;
&lt;li&gt;Test PR #7640 — delegated payment succeeds when paying open ledger fee&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>security</category>
      <category>softwareengineering</category>
      <category>testing</category>
    </item>
    <item>
      <title>Permissioned DEX - QA Test Report</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Wed, 16 Jul 2025 17:43:47 +0000</pubDate>
      <link>https://dev.to/ripplexdev/permissioned-dex-qa-test-report-ajp</link>
      <guid>https://dev.to/ripplexdev/permissioned-dex-qa-test-report-ajp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Test Report Date&lt;/strong&gt;: 7/7/2025&lt;br&gt;
&lt;strong&gt;Prepared By&lt;/strong&gt;: QA Team [&lt;a href="https://github.com/sgramkumar" rel="noopener noreferrer"&gt;sgramkumar&lt;/a&gt;, &lt;a href="https://github.com/mkunasani" rel="noopener noreferrer"&gt;mkunasani&lt;/a&gt;]&lt;br&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: GitLab CI Runner (Ubuntu 22.04)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br&gt;
This report presents the results of QA testing performed on &lt;code&gt;Permissioned DEX&lt;/code&gt; across rippled and Clio servers.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Feature
&lt;/h3&gt;

&lt;p&gt;This section provides a brief summary of the feature being tested. The feature under test is designed to deliver specific functionality as defined in the project specifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature Name&lt;/strong&gt;: Permissioned DEX&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: This proposal introduces a permissioned DEX system for the XRPL. By integrating permissioning features directly within the DEX protocol, regulated financial institutions gain the ability to participate in the XRPL's DEX while still adhering to their compliance requirements. This approach avoids the drawbacks of isolated, permissioned tokens or private blockchains, ensuring a vibrant and liquid marketplace that facilitates seamless arbitrage opportunities. Ultimately, this permissioned DEX system paves the way for wider institutional adoption of XRPL, fostering a more inclusive and efficient financial landscape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specification Reference&lt;/strong&gt;: &lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/5709728274e5a32cd6d4e06d508aeac63d18154f/XLS-0081d-permissioned-dex" rel="noopener noreferrer"&gt;https://github.com/XRPLF/XRPL-Standards/tree/5709728274e5a32cd6d4e06d508aeac63d18154f/XLS-0081d-permissioned-dex&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Test Scope
&lt;/h3&gt;

&lt;p&gt;This round of testing focuses solely on ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All specified functionalities are working as expected.&lt;/li&gt;
&lt;li&gt;The API handles valid and invalid input gracefully.&lt;/li&gt;
&lt;li&gt;Integration with other features is functioning correctly.&lt;/li&gt;
&lt;li&gt;Feature validation includes both RPC and WebSockets to ensure consistent behavior across different interfaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Types of Testing Conducted
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Functional Testing&lt;/td&gt;
&lt;td&gt;Verifying each endpoint against defined specifications to ensure it behaves as expected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression Testing&lt;/td&gt;
&lt;td&gt;Running relevant test cases to confirm that recent changes did not break existing functionalities.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End to end Testing&lt;/td&gt;
&lt;td&gt;Involves testing the complete flow of a feature confirming that different components of the application, potentially developed by different teams work together as expected.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  4. Test Environment
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Ubuntu 22.04 (LTS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Cores&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;128 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Framework&lt;/td&gt;
&lt;td&gt;Pytest/Shell script&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  5. Test Results Summary
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Total Tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feature Testing&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression Testing (rippled &amp;amp; Clio)&lt;/td&gt;
&lt;td&gt;3978&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Feature commit:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commit 0a34b5c691d3a205146a706b460473b3bfb84205
Author: Shawn Xie &amp;lt;35279399+shawnxie999@users.noreply.github.com&amp;gt;
Date:   Fri May 30 13:24:48 2025 -0400

    Add support for XLS-81 Permissioned DEX (#5404)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Testcases&lt;/strong&gt;: &lt;a href="https://dev.to/ripplexdev/permissioned-dex-testcases-4oj1"&gt;https://dev.to/ripplexdev/permissioned-dex-testcases-4oj1&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Bugs Reported
&lt;/h3&gt;

&lt;p&gt;No new bugs have been reported post-feature commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Conclusion
&lt;/h3&gt;

&lt;p&gt;This feature has undergone comprehensive functional, regression, and end to end testing. The majority of the test cases have been executed successfully, with positive outcomes confirming that the core functionalities are working as expected.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Token Escrow - QA Test Report</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Wed, 16 Jul 2025 17:43:18 +0000</pubDate>
      <link>https://dev.to/ripplexdev/token-escrow-qa-test-report-306i</link>
      <guid>https://dev.to/ripplexdev/token-escrow-qa-test-report-306i</guid>
      <description>&lt;p&gt;&lt;strong&gt;Test Report Date&lt;/strong&gt;: 7/7/2025&lt;br&gt;
&lt;strong&gt;Prepared By&lt;/strong&gt;: QA Team [&lt;a href="https://github.com/sgramkumar" rel="noopener noreferrer"&gt;sgramkumar&lt;/a&gt;, &lt;a href="https://github.com/mkunasani" rel="noopener noreferrer"&gt;mkunasani&lt;/a&gt;]&lt;br&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: GitLab CI Runner (Ubuntu 22.04)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;br&gt;
This report presents the results of QA testing performed on &lt;code&gt;Token Escrow&lt;/code&gt; across rippled and Clio servers.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Feature
&lt;/h3&gt;

&lt;p&gt;This section provides a brief summary of the feature being tested. The feature under test is designed to deliver specific functionality as defined in the project specifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Feature Name&lt;/strong&gt;: Token Escrow&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: The proposed TokenEscrow amendment to the XRP Ledger (XRPL) protocol enhances the existing Escrow functionality by enabling support for both Trustline-based tokens (IOUs) and Multi-Purpose Tokens (MPTs). This amendment introduces changes to ledger objects, transactions, and transaction processing logic to allow escrows to use IOU tokens and MPTs, while respecting issuer controls and maintaining ledger integrity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specification Reference&lt;/strong&gt;: &lt;a href="https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0085-token-escrow" rel="noopener noreferrer"&gt;https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0085-token-escrow&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Test Scope
&lt;/h3&gt;

&lt;p&gt;This round of testing focuses solely on ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All specified functionalities are working as expected.&lt;/li&gt;
&lt;li&gt;The API handles valid and invalid input gracefully.&lt;/li&gt;
&lt;li&gt;Integration with other features is functioning correctly.&lt;/li&gt;
&lt;li&gt;Feature validation includes both RPC and WebSockets to ensure consistent behavior across different interfaces.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  3. Types of Testing Conducted
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Functional Testing&lt;/td&gt;
&lt;td&gt;Verifying each endpoint against defined specifications to ensure it behaves as expected.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression Testing&lt;/td&gt;
&lt;td&gt;Running relevant test cases to confirm that recent changes did not break existing functionalities.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;End to end Testing&lt;/td&gt;
&lt;td&gt;Involves testing the complete flow of a feature confirming that different components of the application, potentially developed by different teams work together as expected.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  4. Test Environment
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Ubuntu 22.04 (LTS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Cores&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;128 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test Framework&lt;/td&gt;
&lt;td&gt;Pytest/Shell script&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  5. Test Results Summary
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Testing Type&lt;/th&gt;
&lt;th&gt;Total Tests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feature Testing&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regression Testing (rippled &amp;amp; Clio)&lt;/td&gt;
&lt;td&gt;3976&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Feature commit:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commit 053e1af7ff4886d84a278317cbdfcdab1ecd557f
Author: Denis Angell &amp;lt;dangell@transia.co&amp;gt;
Date:   Tue Jun 3 18:51:55 2025 +0200

    Add support for XLS-85 Token Escrow (#5185)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Testcases&lt;/strong&gt;: &lt;a href="https://dev.to/ripplexdev/token-escrow-testcases-2e1e"&gt;https://dev.to/ripplexdev/token-escrow-testcases-2e1e&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Bugs Reported
&lt;/h3&gt;

&lt;p&gt;No new bugs have been reported post-feature commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Conclusion
&lt;/h3&gt;

&lt;p&gt;This feature has undergone comprehensive functional, regression, and end to end testing. The majority of the test cases have been executed successfully, with positive outcomes confirming that the core functionalities are working as expected.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Permissioned DEX - Testcases</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Mon, 14 Jul 2025 22:27:48 +0000</pubDate>
      <link>https://dev.to/ripplexdev/permissioned-dex-testcases-4oj1</link>
      <guid>https://dev.to/ripplexdev/permissioned-dex-testcases-4oj1</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Test Permissioned Dex offer create both parties in same domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create parties from different domains&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create both parties in 2 different domains&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create parties in domain and non domain with no hybrid flag set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create parties in domain and non domain with hybrid flag set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create parties in different domains with hybrid flag set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create parties in same domain with hybrid flag set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create hybrid flag set and no domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with domain and offer cancel&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer cancel with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with invalid domain[invalid domain id2]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with different domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create not using domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create after credential expiration&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create before credential expiration&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer create with empty domain id field&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex multiple offer create with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex offer claim after expiration&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with both parties on domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with source not on domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with destination not on domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with no domain but both parties on pd&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with parties in domain and non domain with hybrid flag set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with deposit auth set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with preauth set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with one party on domain and preauth set&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment after credential expiration&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment before credential expiration&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex payment with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex payment with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex payment with invalid domain[invalid domain id2]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex payment with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment with empty domain id field&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex xrp payment not using domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex make payment on offer&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex deep freeze make payment on offer&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[invalid domain id3]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[invalid domain id3]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex path find with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex path find with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex path find with invalid domain[]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex path find with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex path find with invalid domain[invalid domain id3]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex path find with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[invalid domain id3]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex book offers with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with domain&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[-1]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[37FB1D6396D6FA]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[invalid domain id3]&lt;/li&gt;
&lt;li&gt;Test Permissioned Dex ripple path find with invalid domain[~!@#$%^&amp;amp;*() -=+[{&amp;lt;&amp;gt;]};&lt;/li&gt;
&lt;li&gt;Test subscribe to order books with domain and create offer&lt;/li&gt;
&lt;li&gt;Test subscribe to book changes with domain and trigger book change&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Token Escrow - Testcases</title>
      <dc:creator>Ramkumar SG</dc:creator>
      <pubDate>Mon, 14 Jul 2025 22:27:42 +0000</pubDate>
      <link>https://dev.to/ripplexdev/token-escrow-testcases-2e1e</link>
      <guid>https://dev.to/ripplexdev/token-escrow-testcases-2e1e</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Test Token Escrow create and finish iou with lsfAllowTokenEscrow flag&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with requires authorization and both parties authorized&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with requires authorization and destination unauthorized&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou after global freeze&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou after global freeze&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou after global freeze&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou after individual freeze source&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou after individual freeze source&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou after individual freeze source&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou after individual freeze destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou after individual freeze destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou after individual freeze destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou after deep freeze source&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou after deep freeze source&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou after deep freeze source&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou after deep freeze destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou after deep freeze destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou after deep freeze destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou without lsfAllowTokenEscrow flag&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou and cancel&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou finishafter in past&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou cancelafter in past&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with non existent destination account&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with invalid funds[None]&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with invalid funds[]&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with bad funds[0]&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with bad funds[-1]&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with more than available&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with both finishafter and cancelafter missing&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou by third party&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou by third party&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou with incorrect owner&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou with self as owner&lt;/li&gt;
&lt;li&gt;Test Token Escrow iou with regular key to create and finish&lt;/li&gt;
&lt;li&gt;Test Token Escrow iou with regular key to create and cancel&lt;/li&gt;
&lt;li&gt;Test Token Escrow create and finish iou with destination same as source&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou with destination same as source after global freeze&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou with destination same as source after deep freeze&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with same finish after and cancel after&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with no source address&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with no destination address&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with non existent source&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou cancel after before finish after&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with only cancel after&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with no trustline on source&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with no trustline on destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou with just base reserve&lt;/li&gt;
&lt;li&gt;Test Token Escrow create finish iou multiple escrows&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou and delete source&lt;/li&gt;
&lt;li&gt;Test Token Escrow create iou and delete destination&lt;/li&gt;
&lt;li&gt;Test Token Escrow cancel iou and delete source&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish iou with destination having preauth enabled&lt;/li&gt;
&lt;li&gt;Test Token Escrow finish with different iou than in escrow create&lt;/li&gt;
&lt;li&gt;Test Token Escrow iou with offer create&lt;/li&gt;
&lt;li&gt;Test Token Escrow iou with multi sign key escrow finish cash using regular key&lt;/li&gt;
&lt;li&gt;Test Token Escrow iou with regular key escrow finish cash using multi sign key&lt;/li&gt;
&lt;li&gt;Test Token Escrow create and finish iou on tickets&lt;/li&gt;
&lt;li&gt;Test Token Escrow delegate create and finish escrow iou&lt;/li&gt;
&lt;li&gt;Test Token Escrow clawback iou after escrow finish&lt;/li&gt;
&lt;li&gt;Test account objects of Token Escrow iou create and finish&lt;/li&gt;
&lt;li&gt;Test account objects of Token Escrow iou create and cancel&lt;/li&gt;
&lt;li&gt;Test account objects of Token Escrow mpt create and finish&lt;/li&gt;
&lt;li&gt;Test account objects of Token Escrow create mpt and cancel&lt;/li&gt;
&lt;li&gt;Test tx of Token Escrow iou create and finish&lt;/li&gt;
&lt;li&gt;Test tx of Token Escrow iou create and cancel&lt;/li&gt;
&lt;li&gt;Test tx of Token Escrow mpt create and finish&lt;/li&gt;
&lt;li&gt;Test tx of Token Escrow create mpt and cancel&lt;/li&gt;
&lt;li&gt;Test ledger entry of Token Escrow iou create and finish&lt;/li&gt;
&lt;li&gt;Test ledger entry of Token Escrow iou create and cancel&lt;/li&gt;
&lt;li&gt;Test ledger entry of Token Escrow mpt create and finish&lt;/li&gt;
&lt;li&gt;Test ledger entry of Token Escrow create mpt and cancel&lt;/li&gt;
&lt;li&gt;Test mpt holders of Token Escrow mpt create and finish&lt;/li&gt;
&lt;li&gt;Test mpt holders of Token Escrow mpt create and cancel&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
  </channel>
</rss>
