<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 3.2.11) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3339 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3339.xml">
<!ENTITY RFC4648 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
<!ENTITY RFC8785 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
<!ENTITY RFC9457 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9457.xml">
]>


<rfc ipr="noModificationTrust200902" docName="draft-evm-charge-00" category="info" consensus="true" submissionType="IETF">
  <front>
    <title abbrev="EVM Charge">EVM Charge Intent for HTTP Payment Authentication</title>

    <author initials="B." surname="DiNovi" fullname="Brett DiNovi">
      <organization>MegaETH Labs</organization>
      <address>
        <email>bread@megaeth.com</email>
      </address>
    </author>
    <author initials="C." surname="Swenberg" fullname="Conner Swenberg">
      <organization>Coinbase</organization>
      <address>
        <email>conner.swenberg@coinbase.com</email>
      </address>
    </author>
    <author initials="K." surname="Scott" fullname="Kyle Scott">
      <organization>Monad Foundation</organization>
      <address>
        <email>kscott@monad.foundation</email>
      </address>
    </author>

    <date year="2026" month="April" day="21"/>

    
    
    

    <abstract>


<?line 77?>

<t>This document defines the "charge" intent for the "evm" payment
method in the Payment HTTP Authentication Scheme
<xref target="I-D.httpauth-payment"/>. It specifies how clients and servers
exchange one-time ERC-20 token transfers on any EVM-compatible
blockchain.</t>

<t>Four credential types are supported: <spanx style="verb">type="permit2"</spanx>
(<bcp14>RECOMMENDED</bcp14>), where the client signs an off-chain Permit2
authorization and the server submits the transfer;
<spanx style="verb">type="authorization"</spanx> (opt-in for EIP-3009 tokens), where
the client signs an off-chain transfer authorization and
the server submits it directly to the token contract;
<spanx style="verb">type="transaction"</spanx>, where the client signs and the server
broadcasts a standard ERC-20 transfer transaction; and
<spanx style="verb">type="hash"</spanx> (optional fallback), where the client
broadcasts the transaction itself and presents the on-chain
transaction hash for server verification.</t>

<t>This specification covers ERC-20 token transfers only. Native
token transfers (ETH, etc.) are out of scope.</t>



    </abstract>



  </front>

  <middle>


<?line 100?>

<section anchor="introduction"><name>Introduction</name>

<t>HTTP Payment Authentication <xref target="I-D.httpauth-payment"/> defines a
challenge-response mechanism that gates access to resources behind
payments. This document registers the "charge" intent for the
"evm" payment method.</t>

<t>The Ethereum Virtual Machine (EVM) is the execution environment
shared by Ethereum and a growing number of compatible blockchains.
These chains share a common smart contract interface (ERC-20
<xref target="ERC-20"/>), transaction format (EIP-1559 <xref target="EIP-1559"/>), address
encoding (EIP-55 <xref target="EIP-55"/>), and JSON-RPC API — making it
possible to define a single payment method that works across all
of them.</t>

<t>This specification inherits the shared request semantics of the
"charge" intent from <xref target="I-D.payment-intent-charge"/>. It defines
only the EVM-specific <spanx style="verb">methodDetails</spanx>, <spanx style="verb">payload</spanx>, and verification
procedures.</t>

<section anchor="design-rationale"><name>Design Rationale</name>

<t>Prior drafts proposed separate payment methods for individual EVM
chains. However, the control flow, data structures, and
verification logic are identical across these chains — the only
differences are chain ID and optional RPC extensions. A unified
<spanx style="verb">evm</spanx> method avoids fragmenting the registry while still allowing
chain-specific optimizations at the implementation level.</t>

</section>
<section anchor="client-broadcast-fallback"><name>Client-Broadcast Fallback</name>

<t>Some clients (custodial wallets, hardware signers) cannot
hand off a signed-but-unbroadcast transaction. For these
cases, <spanx style="verb">type="hash"</spanx> allows the client to broadcast the
transaction itself and present the on-chain hash. This
mode provides weaker challenge binding and does not support
splits or server-paid fees. Servers <bcp14>SHOULD</bcp14> prefer
<spanx style="verb">type="permit2"</spanx> or <spanx style="verb">type="transaction"</spanx> when possible.</t>

</section>
<section anchor="credential-types"><name>Credential Types</name>

<t>This specification defines two credential types:</t>

<t><list style="symbols">
  <t><strong><spanx style="verb">type="permit2"</spanx> (<bcp14>RECOMMENDED</bcp14>)</strong>: The client signs an
off-chain EIP-712 Permit2 authorization. The server constructs
and submits the on-chain transaction. This is the preferred
flow because:  <list style="symbols">
      <t>The client never interacts with the chain directly</t>
      <t>The server naturally sponsors gas (fee payer)</t>
      <t>Split payments are atomic via batch transfers</t>
      <t>No nonce management burden on the client</t>
      <t><spanx style="verb">externalId</spanx> is cryptographically bound via witness data</t>
    </list></t>
  <t><strong><spanx style="verb">type="authorization"</spanx></strong>: The client signs an
off-chain EIP-3009 <xref target="EIP-3009"/> <spanx style="verb">transferWithAuthorization</spanx>
message. The server submits it to the token contract. This
credential is available for tokens that natively implement
EIP-3009 (e.g., USDC, EURC). Benefits:  <list style="symbols">
      <t>No Permit2 approval prerequisite — zero setup</t>
      <t>Server naturally sponsors gas</t>
      <t>Challenge binding via the on-chain nonce</t>
      <t>Simpler signature structure</t>
    </list></t>
  <t><strong><spanx style="verb">type="transaction"</spanx></strong>: The client signs a complete ERC-20
<spanx style="verb">transfer</spanx> transaction. The server broadcasts it. This is the
compatible fallback for chains where Permit2 is not deployed
or clients that prefer direct transaction signing.</t>
</list></t>

<t>Servers that support Permit2 <bcp14>SHOULD</bcp14> advertise it as the preferred
credential type. Clients <bcp14>SHOULD</bcp14> prefer <spanx style="verb">type="permit2"</spanx> when
available.</t>

</section>
<section anchor="charge-flow"><name>Charge Flow</name>

<t>The following diagram illustrates the recommended charge flow
using a Permit2 credential:</t>

<figure><artwork><![CDATA[
Client                  Server               EVM Chain
  |                        |                      |
  | (1) GET /resource      |                      |
  |----------------------->|                      |
  |                        |                      |
  | (2) 402 Payment Req    |                      |
  |     intent="charge"    |                      |
  |<-----------------------|                      |
  |                        |                      |
  | (3) Sign EIP-712       |                      |
  |     Permit2 authz      |                      |
  |                        |                      |
  | (4) Authorization:     |                      |
  |     Payment <cred>     |                      |
  |----------------------->|                      |
  |                        | (5) Submit permit-   |
  |                        |  [Batch]Witness-     |
  |                        |  TransferFrom()      |
  |                        |--------------------->|
  |                        | (6) Receipt          |
  |                        |<---------------------|
  | (7) 200 OK + Receipt   |                      |
  |<-----------------------|                      |
  |                        |                      |
]]></artwork></figure>

</section>
<section anchor="relationship-to-the-charge-intent"><name>Relationship to the Charge Intent</name>

<t>This document inherits the shared request semantics of the
"charge" intent from <xref target="I-D.payment-intent-charge"/>. It defines
only the EVM-specific <spanx style="verb">methodDetails</spanx>, <spanx style="verb">payload</spanx>, and
verification procedures for the "evm" payment method.</t>

</section>
</section>
<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>ERC-20</dt>
  <dd>
    <t>The standard token interface on EVM-compatible chains
<xref target="ERC-20"/>. Tokens expose <spanx style="verb">transfer(address,uint256)</spanx> and
emit <spanx style="verb">Transfer</spanx> events on successful transfers.</t>
  </dd>
  <dt>Permit2</dt>
  <dd>
    <t>Uniswap's universal token approval contract <xref target="PERMIT2"/>,
deployed at the canonical address
<spanx style="verb">0x000000000022D473030F116dDEE9F6B43aC78BA3</spanx> on all
supported chains. Enables off-chain signed approvals for
any ERC-20 token via <spanx style="verb">PermitWitnessTransferFrom</spanx> and
<spanx style="verb">PermitBatchWitnessTransferFrom</spanx>.</t>
  </dd>
  <dt>EIP-712</dt>
  <dd>
    <t>A standard for typed structured data hashing and signing
<xref target="EIP-712"/>, used by Permit2 to produce human-readable,
replay-protected authorization signatures.</t>
  </dd>
  <dt>Base Units</dt>
  <dd>
    <t>The smallest transferable unit of a token, determined by
the token's decimal precision. For example, USDC (6
decimals) uses 1,000,000 base units per 1 USDC; USDm
(18 decimals) uses 10^18 base units per 1 USDm.</t>
  </dd>
</dl>

</section>
<section anchor="request-schema"><name>Request Schema</name>

<t>The <spanx style="verb">request</spanx> parameter in the <spanx style="verb">WWW-Authenticate</spanx> challenge
contains a base64url-encoded JSON object. The JSON <bcp14>MUST</bcp14> be
serialized using JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/>
before base64url encoding, per <xref target="I-D.httpauth-payment"/>.</t>

<section anchor="shared-fields"><name>Shared Fields</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">amount</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Amount in base units (stringified integer)</c>
      <c><spanx style="verb">currency</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>ERC-20 token contract address</c>
      <c><spanx style="verb">recipient</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Recipient address, EIP-55 encoded <xref target="EIP-55"/></c>
      <c><spanx style="verb">description</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Human-readable payment description</c>
      <c><spanx style="verb">externalId</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Merchant's reference (order ID, invoice number, etc.)</c>
</texttable>

<t>Challenge expiry is conveyed by the <spanx style="verb">expires</spanx> auth-param in
<spanx style="verb">WWW-Authenticate</spanx> per <xref target="I-D.httpauth-payment"/>.</t>

<t>Addresses in <spanx style="verb">currency</spanx> and <spanx style="verb">recipient</spanx> <bcp14>MUST</bcp14> be 0x-prefixed,
20-byte hex strings. Implementations <bcp14>SHOULD</bcp14> use EIP-55
mixed-case encoding but <bcp14>MUST</bcp14> compare addresses by decoded
20-byte value, not string form.</t>

</section>
<section anchor="method-details"><name>Method Details</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">chainId</spanx></c>
      <c>number</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>EIP-155 chain ID</c>
      <c><spanx style="verb">permit2Address</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Permit2 contract address (default: canonical address)</c>
      <c><spanx style="verb">credentialTypes</spanx></c>
      <c>array</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Ordered list of accepted credential types</c>
      <c><spanx style="verb">decimals</spanx></c>
      <c>number</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Token decimal precision (e.g., 6 for USDC, 18 for USDm). Aids client-side display verification.</c>
      <c><spanx style="verb">splits</spanx></c>
      <c>array</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Additional payment splits (max 10)</c>
</texttable>

<section anchor="chain-identification"><name>Chain Identification</name>

<t>The <spanx style="verb">chainId</spanx> field is <bcp14>REQUIRED</bcp14> and identifies the target
blockchain using its EIP-155 chain ID. Clients <bcp14>MUST</bcp14> reject
challenges whose <spanx style="verb">chainId</spanx> does not match a chain they
support.</t>

<t>A registry of EVM chain IDs is maintained at
https://chainlist.org. This specification is not limited to
any particular set of chains.</t>

</section>
<section anchor="credential-type-negotiation"><name>Credential Type Negotiation</name>

<t>Servers <bcp14>MAY</bcp14> indicate accepted credential types via the
<spanx style="verb">credentialTypes</spanx> field in <spanx style="verb">methodDetails</spanx>:</t>

<t>Valid values: <spanx style="verb">"permit2"</spanx>, <spanx style="verb">"authorization"</spanx>, <spanx style="verb">"transaction"</spanx>,
<spanx style="verb">"hash"</spanx>.</t>

<t>If omitted, servers <bcp14>MUST</bcp14> accept <spanx style="verb">"transaction"</spanx> and <bcp14>SHOULD</bcp14>
accept <spanx style="verb">"hash"</spanx>. Servers that support Permit2 <bcp14>SHOULD</bcp14> include
<spanx style="verb">"permit2"</spanx> as the first entry to indicate preference.
Servers <bcp14>MUST</bcp14> only include <spanx style="verb">"authorization"</spanx> when the
<spanx style="verb">currency</spanx> token is known to implement EIP-3009.
Clients <bcp14>SHOULD</bcp14> use the first type in the list that they
support.</t>

</section>
<section anchor="split-payments"><name>Payment Splits</name>

<t>The <spanx style="verb">splits</spanx> field enables a single charge to distribute
payment across multiple recipients. This is useful for
platform fees, revenue sharing, and marketplace payouts.</t>

<t>Splits REQUIRE <spanx style="verb">type="permit2"</spanx> credentials. The Permit2
batch transfer mechanism ensures all transfers (primary +
splits) execute atomically in a single on-chain transaction.
Servers <bcp14>MUST</bcp14> reject split requests fulfilled with
<spanx style="verb">type="transaction"</spanx>, <spanx style="verb">type="authorization"</spanx>, or
<spanx style="verb">type="hash"</spanx> credentials.</t>

<t>Each entry in the <spanx style="verb">splits</spanx> array is a JSON object:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">recipient</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>EIP-55 address of split recipient</c>
      <c><spanx style="verb">amount</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Amount in base units for this recipient</c>
      <c><spanx style="verb">memo</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Human-readable label (max 256 chars)</c>
</texttable>

<t>The top-level <spanx style="verb">amount</spanx> represents the total the client pays.
The primary <spanx style="verb">recipient</spanx> receives the remainder: <spanx style="verb">amount</spanx> minus
the sum of all split amounts.</t>

<t>Constraints:</t>

<t><list style="symbols">
  <t>The sum of <spanx style="verb">splits[].amount</spanx> <bcp14>MUST</bcp14> be strictly less than
<spanx style="verb">amount</spanx>. Clients <bcp14>MUST</bcp14> reject any request that violates
this constraint.</t>
  <t>If present, <spanx style="verb">splits</spanx> <bcp14>MUST</bcp14> contain at least 1 entry.
Servers <bcp14>SHOULD</bcp14> limit splits to 10 entries.</t>
  <t>All transfers <bcp14>MUST</bcp14> target the same <spanx style="verb">currency</spanx> token.</t>
  <t>Address fields are compared by decoded 20-byte value, not
by string form.</t>
</list></t>

<t>The order of entries in <spanx style="verb">splits</spanx> is significant for
verification. Clients <bcp14>MUST</bcp14> emit transfers in array order.
Servers <bcp14>MUST</bcp14> verify <spanx style="verb">transferDetails[0]</spanx> as the primary
transfer and <spanx style="verb">transferDetails[i+1]</spanx> as <spanx style="verb">splits[i]</spanx>.</t>

<t><strong>Example:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1050000",
  "currency": "0xe15fc38f6d8c56af07bbcbe3baf5708a2bf42392",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "description": "Marketplace purchase",
  "methodDetails": {
    "chainId": 1329,
    "credentialTypes": ["permit2"],
    "splits": [
      {
        "recipient": "0x8Ba1f109551bD432803012645Ac136ddd64DBA72",
        "amount": "50000",
        "memo": "platform fee"
      }
    ]
  }
}
]]></sourcecode></figure>

<t>This requests a total payment of 1.05 USDC. The platform
receives 0.05 USDC and the primary recipient receives 1.00
USDC. Both transfers execute atomically via Permit2 batch.</t>

</section>
</section>
</section>
<section anchor="credential-schema"><name>Credential Schema</name>

<t>The credential in the <spanx style="verb">Authorization</spanx> header contains a
base64url-encoded JSON object per <xref target="I-D.httpauth-payment"/>.</t>

<section anchor="credential-structure"><name>Credential Structure</name>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">challenge</spanx></c>
      <c>object</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Echo of the challenge from the server</c>
      <c><spanx style="verb">payload</spanx></c>
      <c>object</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>EVM-specific payload</c>
      <c><spanx style="verb">source</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Payer identifier as a DID</c>
</texttable>

<t>The <spanx style="verb">source</spanx> field, if present, <bcp14>SHOULD</bcp14> use the <spanx style="verb">did:pkh</spanx> method
with the chain ID from the challenge and the payer's address
(e.g., <spanx style="verb">did:pkh:eip155:4326:0x1234...</spanx>).</t>

</section>
<section anchor="permit2-payload"><name>Permit2 Payload (type="permit2")</name>

<t>The <bcp14>RECOMMENDED</bcp14> credential type. The client signs an off-chain
EIP-712 Permit2 authorization message. The server constructs
and submits the on-chain transaction, paying gas from its own
balance. The client never interacts with the chain directly.</t>

<t>This type requires that the Permit2 contract is deployed on
the target chain and that the client has an active ERC-20
approval to the Permit2 contract (a one-time operation per
token per chain).</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"permit2"</spanx></c>
      <c><spanx style="verb">permit</spanx></c>
      <c>object</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Permit2 permit data</c>
      <c><spanx style="verb">transferDetails</spanx></c>
      <c>array</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Array of transfer details</c>
      <c><spanx style="verb">witness</spanx></c>
      <c>object</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Challenge binding witness data</c>
      <c><spanx style="verb">signature</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>EIP-712 signature (<spanx style="verb">0x</spanx>-prefixed)</c>
</texttable>

<section anchor="permit-object"><name>Permit Object</name>

<t>The <spanx style="verb">permit</spanx> object describes the token permissions:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">permitted</spanx></c>
      <c>array</c>
      <c>Array of <spanx style="verb">{ token, amount }</spanx> objects. One entry per transfer (primary + each split).</c>
      <c><spanx style="verb">nonce</spanx></c>
      <c>string</c>
      <c>Permit2 nonce (stringified integer)</c>
      <c><spanx style="verb">deadline</spanx></c>
      <c>string</c>
      <c>Unix timestamp (stringified integer)</c>
</texttable>

<t>The <spanx style="verb">permitted</spanx> array <bcp14>MUST</bcp14> always be an array, even for single
transfers (length 1). Each entry specifies:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">token</spanx></c>
      <c>string</c>
      <c>ERC-20 token address (<bcp14>MUST</bcp14> match <spanx style="verb">currency</spanx>)</c>
      <c><spanx style="verb">amount</spanx></c>
      <c>string</c>
      <c>Maximum transfer amount in base units</c>
</texttable>

</section>
<section anchor="transfer-details"><name>Transfer Details</name>

<t>The <spanx style="verb">transferDetails</spanx> array <bcp14>MUST</bcp14> have the same length as
<spanx style="verb">permitted</spanx>. Each entry specifies:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">to</spanx></c>
      <c>string</c>
      <c>Recipient address</c>
      <c><spanx style="verb">requestedAmount</spanx></c>
      <c>string</c>
      <c>Exact transfer amount in base units</c>
</texttable>

<t>The first entry corresponds to the primary recipient.
Subsequent entries (if any) correspond to split recipients
in array order.</t>

</section>
<section anchor="witness-data"><name>Witness Data (Challenge Binding)</name>

<t>The Permit2 witness mechanism provides cryptographic
binding between the payment authorization and the
challenge. When <spanx style="verb">externalId</spanx> is present in the challenge
request, the client <bcp14>MUST</bcp14> include it in the EIP-712
witness struct. The server <bcp14>MUST</bcp14> verify the witness
matches before submitting the transaction.</t>

<t>The witness type is defined as:</t>

<figure><sourcecode type="solidity"><![CDATA[
struct PaymentWitness {
    bytes32 challengeHash;
}
]]></sourcecode></figure>

<t>Where <spanx style="verb">challengeHash</spanx> is computed as:</t>

<figure><artwork><![CDATA[
challengeHash = keccak256(abi.encodePacked(
    challenge.id,
    challenge.realm
))
]]></artwork></figure>

<t>This binds the Permit2 signature to the specific
challenge instance. The signature cannot be reused
against a different challenge, even if the payment
parameters are identical.</t>

<t>The witness type string for EIP-712 is:
<spanx style="verb">"PaymentWitness witness)PaymentWitness(bytes32 challengeHash)TokenPermissions(address token,uint256 amount)"</spanx></t>

<t>This specification defines that witness schema directly for
challenge binding. Implementations <bcp14>MUST</bcp14> use the exact type
string above when constructing the EIP-712 typed data.</t>

<t>This binding applies to both single and batch
transfers — the same <spanx style="verb">witness</spanx> parameter is used by
<spanx style="verb">permitWitnessTransferFrom()</spanx> and
<spanx style="verb">permitBatchWitnessTransferFrom()</spanx>.</t>

</section>
<section anchor="server-behavior"><name>Server Behavior</name>

<t>For single transfers (no splits, <spanx style="verb">permitted</spanx> length 1), the
server calls <spanx style="verb">permitWitnessTransferFrom()</spanx>.</t>

<t>For batch transfers (with splits, <spanx style="verb">permitted</spanx> length &gt; 1),
the server calls <spanx style="verb">permitBatchWitnessTransferFrom()</spanx>. This
executes all transfers in a single on-chain transaction — if
any transfer fails, the entire batch reverts.</t>

<t>The server pays gas from its own balance in both cases. This
is the natural fee sponsorship model for Permit2: the client
signs only the off-chain authorization and the server handles
all chain interaction.</t>

</section>
<section anchor="example-single-transfer"><name>Example: Single Transfer</name>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "aB3cDeF4gHiJkLmN",
    "realm": "api.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "type": "permit2",
    "permit": {
      "permitted": [
        {
          "token": "0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7",
          "amount": "1000000000000000000"
        }
      ],
      "nonce": "1",
      "deadline": "1743523500"
    },
    "transferDetails": [
      {
        "to": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
        "requestedAmount": "1000000000000000000"
      }
    ],
    "witness": {
      "challengeHash": "0x8a3b...f1c2"
    },
    "signature": "0x1b2c3d4e5f..."
  },
  "source": "did:pkh:eip155:4326:0x1234...5678"
}
]]></sourcecode></figure>

</section>
<section anchor="example-batch-transfer-with-splits"><name>Example: Batch Transfer with Splits</name>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "sP1itBatchEx4mple",
    "realm": "marketplace.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "type": "permit2",
    "permit": {
      "permitted": [
        {
          "token": "0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7",
          "amount": "1000000000000000000"
        },
        {
          "token": "0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7",
          "amount": "50000000000000000"
        }
      ],
      "nonce": "1",
      "deadline": "1743523500"
    },
    "transferDetails": [
      {
        "to": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
        "requestedAmount": "1000000000000000000"
      },
      {
        "to": "0x8Ba1f109551bD432803012645Ac136ddd64DBA72",
        "requestedAmount": "50000000000000000"
      }
    ],
    "witness": {
      "challengeHash": "0x7d4e...a3b9"
    },
    "signature": "0x9a8b7c6d5e..."
  },
  "source": "did:pkh:eip155:4326:0x1234...5678"
}
]]></sourcecode></figure>

<t>This transfers 1.0 USDm to the primary recipient and 0.05 USDm
to the platform — atomically, in a single transaction. The
client signs one EIP-712 message covering both transfers.</t>

</section>
</section>
<section anchor="authorization-payload"><name>Authorization Payload (type="authorization")</name>

<t>Opt-in credential type for tokens that implement EIP-3009
<xref target="EIP-3009"/> (e.g., USDC, EURC). The client signs an off-chain
<spanx style="verb">transferWithAuthorization</spanx> message. The server submits it
directly to the token contract, paying gas from its own
balance. The client never interacts with the chain directly.</t>

<t>Unlike <spanx style="verb">type="permit2"</spanx>, this type requires no prior token
approval — EIP-3009 authorization is built into the token
contract itself.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"authorization"</spanx></c>
      <c><spanx style="verb">from</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Payer address</c>
      <c><spanx style="verb">to</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Recipient address (<bcp14>MUST</bcp14> match challenge <spanx style="verb">recipient</spanx>)</c>
      <c><spanx style="verb">value</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Transfer amount in base units (<bcp14>MUST</bcp14> match challenge <spanx style="verb">amount</spanx>)</c>
      <c><spanx style="verb">validAfter</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Unix timestamp — authorization not valid before this time (stringified integer, typically <spanx style="verb">"0"</spanx>)</c>
      <c><spanx style="verb">validBefore</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Unix timestamp — authorization not valid after this time (stringified integer)</c>
      <c><spanx style="verb">nonce</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">bytes32</spanx> nonce — <bcp14>MUST</bcp14> be set to <spanx style="verb">challengeHash</spanx> (see below)</c>
      <c><spanx style="verb">signature</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>EIP-712 signature (<spanx style="verb">0x</spanx>-prefixed)</c>
</texttable>

<section anchor="challenge-binding"><name>Challenge Binding</name>

<t>The EIP-3009 <spanx style="verb">nonce</spanx> field is a random <spanx style="verb">bytes32</spanx> value chosen
by the caller. This specification requires the nonce to be set
to the <spanx style="verb">challengeHash</spanx>:</t>

<figure><artwork><![CDATA[
nonce = keccak256(abi.encodePacked(
    challenge.id,
    challenge.realm
))
]]></artwork></figure>

<t>This provides cryptographic challenge binding equivalent to
the Permit2 witness mechanism. The token contract enforces
nonce uniqueness on-chain — a nonce that has been consumed
cannot be reused, providing replay protection at the contract
level.</t>

</section>
<section anchor="constraints"><name>Constraints</name>

<t><list style="symbols">
  <t>Splits are NOT supported. Servers <bcp14>MUST</bcp14> reject
<spanx style="verb">type="authorization"</spanx> credentials when the challenge
includes <spanx style="verb">splits</spanx>.</t>
  <t>Servers <bcp14>MUST NOT</bcp14> advertise <spanx style="verb">"authorization"</spanx> in
<spanx style="verb">credentialTypes</spanx> unless the <spanx style="verb">currency</spanx> token is known to
implement EIP-3009.</t>
  <t><spanx style="verb">validBefore</spanx> <bcp14>SHOULD</bcp14> correspond to the challenge <spanx style="verb">expires</spanx>
timestamp.</t>
  <t><spanx style="verb">to</spanx> <bcp14>MUST</bcp14> match the challenge <spanx style="verb">recipient</spanx>.</t>
  <t><spanx style="verb">value</spanx> <bcp14>MUST</bcp14> match the challenge <spanx style="verb">amount</spanx>.</t>
</list></t>

</section>
<section anchor="example"><name>Example</name>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "aB3cDeF4gHiJkLmN",
    "realm": "api.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "type": "authorization",
    "from": "0x1234567890abcdef1234567890abcdef12345678",
    "to": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
    "value": "1000000",
    "validAfter": "0",
    "validBefore": "1743523500",
    "nonce": "0x8a3b...f1c2",
    "signature": "0x..."
  },
  "source": "did:pkh:eip155:4326:0x1234567890abcdef1234567890abcdef12345678"
}
]]></sourcecode></figure>

</section>
</section>
<section anchor="transaction-payload"><name>Transaction Payload (type="transaction")</name>

<t>The compatible fallback. The client signs a complete ERC-20
<spanx style="verb">transfer</spanx> transaction targeting the <spanx style="verb">currency</spanx> contract. The
server broadcasts the transaction to the chain. The client
pays gas.</t>

<t>This type is intended for chains where Permit2 is not deployed
or clients that prefer direct transaction signing.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"transaction"</spanx></c>
      <c><spanx style="verb">signature</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Hex-encoded RLP-serialized signed transaction</c>
</texttable>

<t>The <spanx style="verb">signature</spanx> field contains an EIP-1559 (type 2) transaction,
RLP-encoded and hex-prefixed with <spanx style="verb">0x</spanx>. The transaction <bcp14>MUST</bcp14>
call <spanx style="verb">transfer(address,uint256)</spanx> on the ERC-20 token specified
in the challenge.</t>

<t>The client <bcp14>MUST</bcp14> sign a fully valid transaction including gas
parameters and pay gas from their own balance.</t>

<t>Splits are NOT supported with <spanx style="verb">type="transaction"</spanx>. Servers
<bcp14>MUST</bcp14> reject <spanx style="verb">type="transaction"</spanx> credentials when the challenge
includes <spanx style="verb">splits</spanx>.</t>

<t><strong>Example:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "kM9xPqWvT2nJrHsY4aDfEb",
    "realm": "api.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "signature": "0x02f8...signed transaction bytes...",
    "type": "transaction"
  },
  "source": "did:pkh:eip155:1329:0x1234567890abcdef1234567890abcdef12345678"
}
]]></sourcecode></figure>

</section>
<section anchor="hash-payload"><name>Hash Payload (type="hash")</name>

<t>Optional fallback for clients that broadcast transactions
themselves (e.g., custodial wallets, hardware signers). The
client broadcasts a standard ERC-20 <spanx style="verb">transfer</spanx> transaction
to the chain and presents the confirmed transaction hash.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Required</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"hash"</spanx></c>
      <c><spanx style="verb">hash</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Transaction hash (<spanx style="verb">0x</spanx>-prefixed, 32 bytes hex)</c>
</texttable>

<t>Constraints:</t>

<t><list style="symbols">
  <t>Splits are NOT supported. Servers <bcp14>MUST</bcp14> reject <spanx style="verb">type="hash"</spanx>
credentials when the challenge includes <spanx style="verb">splits</spanx>.</t>
  <t>The client pays gas.</t>
  <t>The server cannot modify or retry the transaction.</t>
  <t>Weaker challenge binding than other types (see
<xref target="hash-binding"/>).</t>
</list></t>

<t><strong>Example:</strong></t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "kM9xPqWvT2nJrHsY4aDfEb",
    "realm": "api.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "hash": "0x1a2b3c4d5e6f7890abcdef1234567890abcdef1234567890abcdef1234567890",
    "type": "hash"
  },
  "source": "did:pkh:eip155:4326:0x1234567890abcdef1234567890abcdef12345678"
}
]]></sourcecode></figure>

</section>
<section anchor="gas-sponsorship-model"><name>Gas Sponsorship Model</name>

<t>Gas sponsorship is structurally determined by the credential
type — no explicit field is needed:</t>

<texttable>
      <ttcol align='left'>Credential Type</ttcol>
      <ttcol align='left'>Who Pays Gas</ttcol>
      <ttcol align='left'>Mechanism</ttcol>
      <c><spanx style="verb">permit2</spanx></c>
      <c>Server</c>
      <c>Client signs off-chain; server constructs and submits tx</c>
      <c><spanx style="verb">authorization</spanx></c>
      <c>Server</c>
      <c>Client signs off-chain; server submits to token contract</c>
      <c><spanx style="verb">transaction</spanx></c>
      <c>Client</c>
      <c>Client signs a full transaction with gas parameters</c>
      <c><spanx style="verb">hash</spanx></c>
      <c>Client</c>
      <c>Client broadcasts the transaction themselves</c>
</texttable>

<t>For <spanx style="verb">type="permit2"</spanx> and <spanx style="verb">type="authorization"</spanx>, the client
signs only an off-chain message — they never submit a
transaction and therefore cannot pay gas. The server <bcp14>MUST</bcp14>
maintain sufficient native token balance to cover gas costs
for these credential types.</t>

<t>For <spanx style="verb">type="transaction"</spanx> and <spanx style="verb">type="hash"</spanx>, the client is
responsible for gas. The server broadcasts or verifies the
transaction but does not subsidize it.</t>

</section>
</section>
<section anchor="verification"><name>Verification Procedure</name>

<t>Upon receiving a request with a credential, the server <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Decode the base64url credential and parse the JSON.</t>
  <t>Verify that <spanx style="verb">payload.type</spanx> is present and is one of
<spanx style="verb">"permit2"</spanx>, <spanx style="verb">"authorization"</spanx>, <spanx style="verb">"transaction"</spanx>, or
<spanx style="verb">"hash"</spanx>.</t>
  <t>Look up the stored challenge using <spanx style="verb">credential.challenge.id</spanx>.
If no matching challenge is found, reject the request.</t>
  <t>Verify that all fields in <spanx style="verb">credential.challenge</spanx> exactly
match the stored challenge auth-params.</t>
  <t>If the challenge includes <spanx style="verb">splits</spanx> and <spanx style="verb">payload.type</spanx> is
not <spanx style="verb">"permit2"</spanx>, reject the request. (Only Permit2
supports atomic batch transfers for splits.)</t>
  <t>Proceed with type-specific verification:
  <list style="symbols">
      <t>For <spanx style="verb">type="permit2"</spanx>: see <xref target="permit2-verification"/>.</t>
      <t>For <spanx style="verb">type="authorization"</spanx>: see <xref target="authorization-verification"/>.</t>
      <t>For <spanx style="verb">type="transaction"</spanx>: see <xref target="transaction-verification"/>.</t>
      <t>For <spanx style="verb">type="hash"</spanx>: see <xref target="hash-verification"/>.</t>
    </list></t>
</list></t>

<section anchor="permit2-verification"><name>Permit2 Verification</name>

<t>Before submitting, servers <bcp14>MUST</bcp14> verify:</t>

<t><list style="numbers" type="1">
  <t>The EIP-712 signature is valid and recovers to the
<spanx style="verb">source</spanx> address</t>
  <t>The <spanx style="verb">deadline</spanx> has not passed</t>
  <t>The signer has sufficient token balance for the total
amount (primary + all splits)</t>
  <t>The signer has sufficient Permit2 allowance</t>
  <t>The <spanx style="verb">witness.challengeHash</spanx> matches the expected
value derived from the challenge <spanx style="verb">id</spanx> and <spanx style="verb">realm</spanx></t>
  <t><spanx style="verb">permitted</spanx> and <spanx style="verb">transferDetails</spanx> arrays have equal length</t>
  <t>Each <spanx style="verb">permitted[i].token</spanx> matches <spanx style="verb">currency</spanx></t>
  <t><spanx style="verb">transferDetails[0].to</spanx> matches <spanx style="verb">recipient</spanx></t>
  <t><spanx style="verb">transferDetails[0].requestedAmount</spanx> matches the primary
transfer amount (<spanx style="verb">amount</spanx> minus sum of splits, or <spanx style="verb">amount</spanx>
if no splits)</t>
  <t>For each split at index i (if present),
   <spanx style="verb">transferDetails[i+1].to</spanx> matches <spanx style="verb">splits[i].recipient</spanx>
   and <spanx style="verb">transferDetails[i+1].requestedAmount</spanx> matches
   <spanx style="verb">splits[i].amount</spanx></t>
</list></t>

<t>After verification:</t>

<t><list style="numbers" type="1">
  <t>For single transfers (<spanx style="verb">permitted</spanx> length 1): call
<spanx style="verb">Permit2.permitWitnessTransferFrom()</spanx></t>
  <t>For batch transfers (<spanx style="verb">permitted</spanx> length &gt; 1): call
<spanx style="verb">Permit2.permitBatchWitnessTransferFrom()</spanx></t>
  <t>Verify the transaction receipt indicates success</t>
  <t>Verify <spanx style="verb">Transfer</spanx> event logs match all expected transfers</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> simulate the transaction via <spanx style="verb">eth_call</spanx> before
submitting to detect failures without spending gas.</t>

</section>
<section anchor="authorization-verification"><name>Authorization Verification</name>

<t>Before submitting, servers <bcp14>MUST</bcp14> verify:</t>

<t><list style="numbers" type="1">
  <t>The <spanx style="verb">currency</spanx> token implements EIP-3009</t>
  <t>The EIP-712 signature is valid and recovers to the
<spanx style="verb">from</spanx> address</t>
  <t><spanx style="verb">to</spanx> matches the challenge <spanx style="verb">recipient</spanx></t>
  <t><spanx style="verb">value</spanx> matches the challenge <spanx style="verb">amount</spanx></t>
  <t><spanx style="verb">nonce</spanx> matches the expected <spanx style="verb">challengeHash</spanx> derived
from the challenge <spanx style="verb">id</spanx> and <spanx style="verb">realm</spanx></t>
  <t><spanx style="verb">validBefore</spanx> has not passed</t>
  <t>The signer has sufficient token balance</t>
  <t>Call <spanx style="verb">transferWithAuthorization(from, to, value,
validAfter, validBefore, nonce, v, r, s)</spanx> on the
<spanx style="verb">currency</spanx> token contract</t>
  <t>Verify the transaction receipt indicates success</t>
  <t>Verify the <spanx style="verb">Transfer</spanx> event log matches the expected
parameters</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> simulate the transaction via <spanx style="verb">eth_call</spanx> before
submitting to detect failures without spending gas.</t>

</section>
<section anchor="transaction-verification"><name>Transaction Verification</name>

<t>Before broadcasting, servers <bcp14>MUST</bcp14> verify:</t>

<t><list style="numbers" type="1">
  <t>Deserialize the RLP-encoded transaction from
<spanx style="verb">payload.signature</spanx></t>
  <t>Verify the transaction <spanx style="verb">chainId</spanx> matches
<spanx style="verb">methodDetails.chainId</spanx></t>
  <t>Verify the transaction <spanx style="verb">to</spanx> address matches the <spanx style="verb">currency</spanx>
token contract</t>
  <t>Verify the transaction calldata begins with the
<spanx style="verb">transfer(address,uint256)</spanx> function selector
(<spanx style="verb">0xa9059cbb</spanx>)</t>
  <t>Decode the calldata and verify <spanx style="verb">recipient</spanx> and <spanx style="verb">amount</spanx>
match the challenge request</t>
  <t>Broadcast the transaction via <spanx style="verb">eth_sendRawTransaction</spanx></t>
  <t>Wait for confirmation and fetch the transaction receipt</t>
  <t>Verify the receipt <spanx style="verb">status</spanx> is <spanx style="verb">0x1</spanx> (success)</t>
  <t>Verify the receipt contains a <spanx style="verb">Transfer</spanx> event log
matching the challenge parameters</t>
</list></t>

</section>
<section anchor="hash-verification"><name>Hash Verification</name>

<t>For hash credentials, servers <bcp14>MUST</bcp14>:</t>

<t><list style="numbers" type="1">
  <t>Verify <spanx style="verb">payload.hash</spanx> has not been previously consumed
(see <xref target="replay-protection"/>)</t>
  <t>Fetch the transaction receipt via
<spanx style="verb">eth_getTransactionReceipt</spanx></t>
  <t>Verify <spanx style="verb">status</spanx> is <spanx style="verb">0x1</spanx> (success)</t>
  <t>Verify the receipt contains a <spanx style="verb">Transfer</spanx> event log
(topic <spanx style="verb">0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef</spanx>):
  <list style="symbols">
      <t>Log <spanx style="verb">address</spanx> matches <spanx style="verb">currency</spanx></t>
      <t><spanx style="verb">to</spanx> parameter matches <spanx style="verb">recipient</spanx></t>
      <t><spanx style="verb">value</spanx> parameter matches <spanx style="verb">amount</spanx></t>
    </list></t>
  <t>Mark the hash as consumed</t>
</list></t>

</section>
</section>
<section anchor="settlement-procedure"><name>Settlement Procedure</name>

<section anchor="permit2-settlement"><name>Permit2 Settlement</name>

<figure><artwork><![CDATA[
Client                  Server               EVM Chain
  |                        |                      |
  | (1) Authorization:     |                      |
  |     Payment <cred>     |                      |
  |  (Permit2 signature)   |                      |
  |----------------------->|                      |
  |                        | (2) Verify sig       |
  |                        | (3) Submit permit-   |
  |                        |  [Batch]Witness-     |
  |                        |  TransferFrom()      |
  |                        |--------------------->|
  |                        | (4) Receipt          |
  |                        |  (all transfers      |
  |                        |   atomic in 1 tx)    |
  |                        |<---------------------|
  | (5) 200 OK + Receipt   |                      |
  |<-----------------------|                      |
]]></artwork></figure>

<t>For single transfers, the server calls
<spanx style="verb">permitWitnessTransferFrom()</spanx>. When splits are present, the
server calls <spanx style="verb">permitBatchWitnessTransferFrom()</spanx>, executing the
primary transfer and all splits atomically in a single
transaction.</t>

</section>
<section anchor="authorization-settlement"><name>Authorization Settlement</name>

<figure><artwork><![CDATA[
Client                  Server               EVM Chain
  |                        |                      |
  | (1) Authorization:     |                      |
  |     Payment <cred>     |                      |
  |  (EIP-3009 signature)  |                      |
  |----------------------->|                      |
  |                        | (2) Verify sig       |
  |                        | (3) Submit transfer- |
  |                        |  WithAuthorization() |
  |                        |--------------------->|
  |                        | (4) Receipt          |
  |                        |<---------------------|
  | (5) 200 OK + Receipt   |                      |
  |<-----------------------|                      |
]]></artwork></figure>

</section>
<section anchor="transaction-settlement"><name>Transaction Settlement</name>

<figure><artwork><![CDATA[
Client                  Server               EVM Chain
  |                        |                      |
  | (1) Authorization:     |                      |
  |     Payment <cred>     |                      |
  |  (signed transaction)  |                      |
  |----------------------->|                      |
  |                        | (2) Broadcast tx     |
  |                        |--------------------->|
  |                        | (3) Confirmation     |
  |                        |<---------------------|
  | (4) 200 OK + Receipt   |                      |
  |<-----------------------|                      |
]]></artwork></figure>

</section>
<section anchor="hash-settlement"><name>Hash Settlement</name>

<figure><artwork><![CDATA[
Client                  Server               EVM Chain
  |                        |                      |
  | (1) Broadcast tx       |                      |
  |---------------------------------------------->|
  | (2) Confirmed          |                      |
  |<----------------------------------------------|
  |                        |                      |
  | (3) Authorization:     |                      |
  |     Payment <cred>     |                      |
  |  (tx hash)             |                      |
  |----------------------->|                      |
  |                        | (4) getTransaction-  |
  |                        |     Receipt          |
  |                        |--------------------->|
  |                        | (5) Verify           |
  |                        |<---------------------|
  | (6) 200 OK + Receipt   |                      |
  |<-----------------------|                      |
]]></artwork></figure>

</section>
<section anchor="confirmation-requirements"><name>Confirmation Requirements</name>

<t>Servers <bcp14>MUST</bcp14> wait for a successful transaction receipt
(i.e., the transaction has been included in at least one
block) before returning a <spanx style="verb">Payment-Receipt</spanx> header.</t>

<t>The time between transaction submission and receipt
availability varies by chain and current network conditions.
Servers <bcp14>SHOULD NOT</bcp14> assume a fixed confirmation latency.
Servers <bcp14>MAY</bcp14> use chain-specific RPC optimizations (e.g.,
WebSocket subscriptions, synchronous send methods) to
minimize wait time.</t>

<t>This specification does not prescribe a required confirmation
depth beyond the initial receipt. Finality semantics vary
across chains — some offer single-slot finality, while others
(including L2 rollups) settle to a separate layer for
stronger guarantees. The appropriate confirmation depth for a
given transaction is a server policy decision outside the
scope of this specification.</t>

</section>
<section anchor="receipt-generation"><name>Receipt Generation</name>

<t>Upon successful settlement, servers <bcp14>MUST</bcp14> return a
<spanx style="verb">Payment-Receipt</spanx> header per <xref target="I-D.httpauth-payment"/>.
Servers <bcp14>MUST NOT</bcp14> include a <spanx style="verb">Payment-Receipt</spanx> header on error
responses; failures are communicated via HTTP status codes
and Problem Details <xref target="RFC9457"/>.</t>

<t>The receipt payload:</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c><spanx style="verb">method</spanx></c>
      <c>string</c>
      <c><spanx style="verb">"evm"</spanx></c>
      <c><spanx style="verb">challengeId</spanx></c>
      <c>string</c>
      <c>The <spanx style="verb">id</spanx> from the original challenge</c>
      <c><spanx style="verb">reference</spanx></c>
      <c>string</c>
      <c>Transaction hash (<spanx style="verb">0x</spanx>-prefixed)</c>
      <c><spanx style="verb">status</spanx></c>
      <c>string</c>
      <c><spanx style="verb">"success"</spanx></c>
      <c><spanx style="verb">timestamp</spanx></c>
      <c>string</c>
      <c><xref target="RFC3339"/> settlement time</c>
      <c><spanx style="verb">chainId</spanx></c>
      <c>number</c>
      <c>Chain ID where settlement occurred</c>
      <c><spanx style="verb">externalId</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14>. Echoed from the challenge request</c>
</texttable>

</section>
</section>
<section anchor="replay-protection"><name>Replay Protection</name>

<t>Servers <bcp14>MUST</bcp14> maintain a set of consumed credential identifiers.
The replay prevention token depends on the credential type:</t>

<t><list style="symbols">
  <t><strong><spanx style="verb">type="permit2"</spanx></strong>: The combination of signer address
and Permit2 nonce serves as the replay token. The nonce
is consumed on-chain by the Permit2 contract.</t>
  <t><strong><spanx style="verb">type="authorization"</spanx></strong>: The combination of signer
address and EIP-3009 nonce serves as the replay token.
The nonce is consumed on-chain by the token contract
itself — providing contract-level replay protection.</t>
  <t><strong><spanx style="verb">type="transaction"</spanx></strong>: The transaction hash (derived
after broadcast) serves as the replay token.</t>
  <t><strong><spanx style="verb">type="hash"</spanx></strong>: The transaction hash provided by the
client serves as the replay token.</t>
</list></t>

<t>Before accepting a credential, the server <bcp14>MUST</bcp14> check whether
its replay token has already been consumed. After successful
verification, the server <bcp14>MUST</bcp14> atomically mark it as consumed.</t>

</section>
<section anchor="error-responses"><name>Error Responses</name>

<t>When rejecting a credential, the server <bcp14>MUST</bcp14> return HTTP 402
(Payment Required) with a fresh <spanx style="verb">WWW-Authenticate: Payment</spanx>
challenge per <xref target="I-D.httpauth-payment"/>. The server <bcp14>SHOULD</bcp14>
include a response body conforming to Problem Details
<xref target="RFC9457"/> with <spanx style="verb">Content-Type: application/problem+json</spanx>.</t>

<t>Servers <bcp14>MUST</bcp14> use the standard problem types defined in
<xref target="I-D.httpauth-payment"/>: <spanx style="verb">malformed-credential</spanx>,
<spanx style="verb">invalid-challenge</spanx>, and <spanx style="verb">verification-failed</spanx>. The <spanx style="verb">detail</spanx>
field <bcp14>SHOULD</bcp14> contain a human-readable description of the
specific failure.</t>

<t>Example:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "type": "https://paymentauth.org/problems/verification-failed",
  "title": "Transfer Mismatch",
  "status": 402,
  "detail": "Transfer amount does not match challenge request"
}
]]></sourcecode></figure>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<section anchor="transport-security"><name>Transport Security</name>

<t>All communication <bcp14>MUST</bcp14> use TLS 1.2 or higher per
<xref target="I-D.httpauth-payment"/>. Credentials <bcp14>MUST</bcp14> only be transmitted
over HTTPS connections.</t>

</section>
<section anchor="transaction-replay"><name>Transaction Replay</name>

<t>EIP-1559 transactions include chain ID and nonce, preventing
cross-chain and same-chain replay. Permit2 signatures include
chain ID in the EIP-712 domain separator and consume nonces
on-chain. The <spanx style="verb">expires</spanx> auth-param limits the temporal window
for credential use.</t>

</section>
<section anchor="amount-verification"><name>Amount Verification</name>

<t>Clients <bcp14>MUST</bcp14> parse and verify the <spanx style="verb">request</spanx> payload before
signing:</t>

<t><list style="numbers" type="1">
  <t>Verify <spanx style="verb">amount</spanx> is reasonable for the service</t>
  <t>Verify <spanx style="verb">currency</spanx> is the expected token address</t>
  <t>Verify <spanx style="verb">recipient</spanx> is controlled by the expected party</t>
  <t>Verify <spanx style="verb">chainId</spanx> matches the expected network</t>
  <t>If <spanx style="verb">splits</spanx> are present, verify the sum of split amounts
is strictly less than <spanx style="verb">amount</spanx> and all split recipients
are expected</t>
</list></t>

</section>
<section anchor="hash-binding"><name>Hash Credential Binding</name>

<t>Hash credentials (<spanx style="verb">type="hash"</spanx>) and transaction credentials
(<spanx style="verb">type="transaction"</spanx>) provide weaker challenge binding
than Permit2 credentials. The server verifies that a payment
matching the challenge terms exists on-chain, but cannot
prove the payment was created for a specific challenge
instance.</t>

<t>By contrast, <spanx style="verb">type="permit2"</spanx> and <spanx style="verb">type="authorization"</spanx>
credentials include a <spanx style="verb">challengeHash</spanx> — in the EIP-712
witness data (Permit2) or as the on-chain nonce (EIP-3009)
— cryptographically binding the signature to the specific
challenge <spanx style="verb">id</spanx> and <spanx style="verb">realm</spanx>. This prevents signature reuse
across challenges, even if payment parameters are identical.
This is a key reason off-chain signature types are preferred.</t>

<t>Servers <bcp14>MAY</bcp14> mitigate this by:</t>

<t><list style="symbols">
  <t>Requiring unique <spanx style="verb">externalId</spanx> values per challenge</t>
  <t>Preferring <spanx style="verb">type="permit2"</spanx> or <spanx style="verb">type="transaction"</spanx> in
<spanx style="verb">credentialTypes</spanx></t>
  <t>Restricting <spanx style="verb">type="hash"</spanx> to low-value transactions</t>
</list></t>

</section>
<section anchor="permit2-specific-risks"><name>Permit2-Specific Risks</name>

<t><strong>Allowance Prerequisite</strong>: Permit2 requires a one-time
ERC-20 <spanx style="verb">approve()</spanx> to the Permit2 contract. Clients should
understand they are granting approval to a third-party
contract. The Permit2 contract is widely deployed and
audited, but clients <bcp14>SHOULD</bcp14> verify the contract address
matches the canonical deployment.</t>

<t><strong>Nonce Management</strong>: Permit2 nonces are consumed on-chain.
If a server fails to submit a Permit2 credential, the nonce
remains unconsumed and the client can reuse it. Servers <bcp14>MUST</bcp14>
handle nonce conflicts gracefully.</t>

</section>
<section anchor="fee-payer-risks"><name>Fee Payer Risks</name>

<t>With <spanx style="verb">type="permit2"</spanx>, the server pays gas on every
settlement. This creates financial risk:</t>

<t><strong>Denial of Service</strong>: Malicious clients could submit
credentials that fail on-chain, causing the server to pay
gas without receiving payment. Mitigations:</t>

<t><list style="symbols">
  <t>Simulate transactions via <spanx style="verb">eth_call</spanx> before broadcast</t>
  <t>Rate limit per client address and IP</t>
  <t>Verify client token balance before submitting</t>
  <t>Require client authentication before accepting credentials</t>
</list></t>

<t><strong>Balance Exhaustion</strong>: Servers <bcp14>MUST</bcp14> monitor their native
token balance and reject new requests when insufficient to
cover gas.</t>

<t>Gas costs vary significantly across EVM chains. On low-fee
chains, fee sponsorship is negligible (&lt;$0.001/tx). On
Ethereum L1, gas costs may be significant and servers <bcp14>SHOULD</bcp14>
factor this into pricing.</t>

</section>
<section anchor="split-payment-risks"><name>Split Payment Risks</name>

<t><strong>Recipient Transparency</strong>: Clients <bcp14>SHOULD</bcp14> present each
split recipient and amount so the user can verify the payment
distribution. Clients <bcp14>SHOULD</bcp14> highlight when the primary
recipient receives a small remainder relative to the total
<spanx style="verb">amount</spanx>.</t>

<t><strong>Batch Failure</strong>: With Permit2 batch transfers, splits are
atomic — all succeed or all revert. A failure in any split
causes the entire payment (including the primary transfer)
to revert. Servers <bcp14>SHOULD</bcp14> simulate the batch via <spanx style="verb">eth_call</spanx>
before submitting to detect failures early.</t>

</section>
<section anchor="rpc-trust"><name>RPC Trust</name>

<t>Servers rely on their RPC endpoint for transaction data. A
compromised RPC could return fabricated data. Servers <bcp14>SHOULD</bcp14>
use trusted RPC providers or run their own nodes.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="payment-method-registration"><name>Payment Method Registration</name>

<t>This document registers the following payment method in the
"HTTP Payment Methods" registry established by
<xref target="I-D.httpauth-payment"/>:</t>

<texttable>
      <ttcol align='left'>Method Identifier</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">evm</spanx></c>
      <c>EVM-compatible blockchain ERC-20 token transfer</c>
      <c>This document</c>
</texttable>

<t>Contact: Brett DiNovi (<eref target="mailto:bread@megaeth.com">bread@megaeth.com</eref>)</t>

</section>
<section anchor="payment-intent-registration"><name>Payment Intent Registration</name>

<t>This document registers the following payment intent in the
"HTTP Payment Intents" registry established by
<xref target="I-D.httpauth-payment"/>:</t>

<texttable>
      <ttcol align='left'>Intent</ttcol>
      <ttcol align='left'>Applicable Methods</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c><spanx style="verb">charge</spanx></c>
      <c><spanx style="verb">evm</spanx></c>
      <c>One-time ERC-20 token transfer on any EVM chain</c>
      <c>This document</c>
</texttable>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

&RFC2119;
&RFC3339;
&RFC4648;
&RFC8174;
&RFC8259;
&RFC8785;
&RFC9457;
<reference anchor="I-D.payment-intent-charge" target="https://datatracker.ietf.org/doc/draft-payment-intent-charge/">
  <front>
    <title>'charge' Intent for HTTP Payment Authentication</title>
    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization></organization>
    </author>
    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization></organization>
    </author>
    <author initials="T." surname="Meagher" fullname="Tom Meagher">
      <organization></organization>
    </author>
    <date year="2026"/>
  </front>
</reference>
<reference anchor="I-D.httpauth-payment" target="https://datatracker.ietf.org/doc/draft-ietf-httpauth-payment/">
  <front>
    <title>The 'Payment' HTTP Authentication Scheme</title>
    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization></organization>
    </author>
    <date year="2026" month="January"/>
  </front>
</reference>


    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="EIP-712" target="https://eips.ethereum.org/EIPS/eip-712">
  <front>
    <title>Typed structured data hashing and signing</title>
    <author initials="R." surname="Bloemen" fullname="Remco Bloemen">
      <organization></organization>
    </author>
    <date year="2017" month="September"/>
  </front>
</reference>
<reference anchor="EIP-1559" target="https://eips.ethereum.org/EIPS/eip-1559">
  <front>
    <title>Fee market change for ETH 1.0 chain</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="EIP-55" target="https://eips.ethereum.org/EIPS/eip-55">
  <front>
    <title>Mixed-case checksum address encoding</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="ERC-20" target="https://eips.ethereum.org/EIPS/eip-20">
  <front>
    <title>Token Standard</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="EIP-3009" target="https://eips.ethereum.org/EIPS/eip-3009">
  <front>
    <title>Transfer With Authorization</title>
    <author initials="P. J." surname="Kim" fullname="Peter Jihoon Kim">
      <organization></organization>
    </author>
    <date year="2019" month="September"/>
  </front>
</reference>
<reference anchor="PERMIT2" target="https://github.com/Uniswap/permit2">
  <front>
    <title>Permit2</title>
    <author >
      <organization>Uniswap Labs</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 1230?>

<section anchor="full-example-permit2-charge-on-megaeth"><name>Full Example: Permit2 Charge on MegaETH</name>

<t><strong>1. Challenge (402 response):</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="aB3cDeF4gHiJkLmN",
  realm="api.example.com",
  method="evm",
  intent="charge",
  request="eyJhbW91bnQiOiIxMDAwMDAwMDAwMDAwMDAwMDAwIiwiY3
    VycmVuY3kiOiIweEZBZkRkYmIzRkM3Njg4NDk0OTcxYTc5Y2M2NU
    RDYTNFRjgyMDc5RTciLCJtZXRob2REZXRhaWxzIjp7ImNoYWluSWQ
    iOjQzMjYsImNyZWRlbnRpYWxUeXBlcyI6WyJwZXJtaXQyIl19LCJ
    yZWNpcGllbnQiOiIweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiODQ0
    QmM5ZTc1OTVmOGZFMDAifQ",
  expires="2026-04-01T12:05:00Z"
Cache-Control: no-store
]]></sourcecode></figure>

<t>Decoded <spanx style="verb">request</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000000000000000000",
  "currency": "0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "methodDetails": {
    "chainId": 4326,
    "credentialTypes": ["permit2"]
  }
}
]]></sourcecode></figure>

<t>This requests 1.0 USDm (10^18 base units) on MegaETH
(chain 4326).</t>

<t><strong>2. Credential (Permit2 authorization):</strong></t>

<figure><sourcecode type="http"><![CDATA[
GET /api/resource HTTP/1.1
Host: api.example.com
Authorization: Payment <base64url-encoded credential>
]]></sourcecode></figure>

<t>Decoded credential:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "aB3cDeF4gHiJkLmN",
    "realm": "api.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "type": "permit2",
    "permit": {
      "permitted": [
        {
          "token": "0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7",
          "amount": "1000000000000000000"
        }
      ],
      "nonce": "1",
      "deadline": "1743523500"
    },
    "transferDetails": [
      {
        "to": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
        "requestedAmount": "1000000000000000000"
      }
    ],
    "witness": {
      "challengeHash": "0x8a3b...f1c2"
    },
    "signature": "0x1b2c3d4e5f..."
  },
  "source": "did:pkh:eip155:4326:0x1234...5678"
}
]]></sourcecode></figure>

<t><strong>3. Response (with receipt):</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Payment-Receipt: <base64url-encoded receipt>
Content-Type: application/json

{"response": "resource data"}
]]></sourcecode></figure>

<t>Decoded receipt:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "method": "evm",
  "challengeId": "aB3cDeF4gHiJkLmN",
  "reference": "0xabc123...",
  "status": "success",
  "timestamp": "2026-04-01T12:04:58Z",
  "chainId": 4326
}
]]></sourcecode></figure>

</section>
<section anchor="full-example-transaction-charge-on-sei"><name>Full Example: Transaction Charge on Sei</name>

<t><strong>Challenge</strong> requests 1.0 USDC on Sei (chain 1329):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000000",
  "currency": "0xe15fc38f6d8c56af07bbcbe3baf5708a2bf42392",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "description": "Premium API call",
  "methodDetails": {
    "chainId": 1329
  }
}
]]></sourcecode></figure>

<t><strong>Credential</strong> (signed EIP-1559 transaction):</t>

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "kM9xPqWvT2nJrHsY4aDfEb",
    "realm": "api.example.com",
    "method": "evm",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2026-04-01T12:05:00Z"
  },
  "payload": {
    "type": "transaction",
    "signature": "0x02f8...signed transaction bytes..."
  },
  "source": "did:pkh:eip155:1329:0x1234567890abcdef1234567890abcdef12345678"
}
]]></sourcecode></figure>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The authors thank Georgios Konstantopoulos for guidance on
consolidating chain-specific specs into a unified EVM method,
Brendan Ryan and Jake Moxey at Tempo Labs for the MPP framework,
and the Sei and MegaETH communities for their contributions to
earlier drafts.</t>

</section>


  </back>

<!-- ##markdown-source:
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
1D2oLM1Wmy39Mk1v9HzG2ynSjPsRiVTjcn7PTdXyHZN9rATEAkLgXuT0wYc9
IYylnvNktGGFOJdPEkBbaivcNRo8UuhHTThqZuxzHhl1z/WcTAuLLtuBAGb2
WrjAB7QDxtIq3HEaxKYAyjVb0euvkYRtabN2rZ1y2523mo9FGds0dauhtluM
kdY8wunLah8fQenCj6auYzn7Gh3s79/bOpgArz+2Fl6soIp9PYwYPjRIgFx2
CN+38tAAjIb2TVKQqq/49T8BFZc1PxUaflZNma10MOBsWyZXGygIAw2AuBIw
SUbUbZXbF6TSs7asmrLVTF0eyUv9R583c+IcU0o3y6RTygfLfQYccl7bzo8K
/3A2iWN55QquujhvIBktH9kVL2FLWRwdyYFWKt7+krg4TGPTjjlpc0Y9uHAN
HB8ZAeTeoUtpsc6rH49cvxxQQfuI1UEdQ009qyTl55yQD8QE/JHzEdWOJOCX
Q/w5/rEl9QZ2kaU7Te226sprW+jCdk+XHmu1V//4Qta9Dw5bogvQqOber4eF
4Laq2+ZbIr7LA/h2TPzSnl+nLS3GXAkKxjuwwPxOx5R7L9y/QQpvbU1wuE9X
G9zydqz18pLipftmXHfD2T0ochVXOJPqdHgji0mutZmt+xRfIx1e2tJ1W6sy
W1Wny+Mv5LYuSWddPsGKdFbV2fTEUqj3ZdLl1DYgyW3fQdUpZVm1PyHe5JDb
DjZAtpaovDbtqlJLn8fTOdbrLyyAmvyBAfc/cGN9CSwrvzQgJWsDxBPm0FIb
DZQoeIUMyJPEuvNqk0kqvHWFIPh0DrsYybKxq7xMLel+NjfmjATLizdbHLry
abc2boWs08atljxsMR64po0i13HIhWi3MEpc3WN5ZRC3q0iPnUdLD2SEh4Hv
eCHTZh1XBNpruiEdE4S/SwRoQ3sr2eAwLnwHig8csnM8E9yrp+oCtHufQ0Pt
4KU6OloqnTyr7h9CTZXgU4WUlipEjpCcibOalI6Mi1rQbvwIg78zPGA6IKvQ
lmGMwNYI4VE23vK5f9CHoWUfUcu5JNGeTejxD8yT1ihCQ4zZWjoeng5VtQ7M
FcWwJFcrEIY1AZLxPJFglZnAGbLhg07KaK/d2xsOBv0GkrVnr7mZ3LVBYRcY
olhPjteFuUWSIkU/82+Fqcc8EOuj8+jWw50+0vqbKOZLscQ9XNYUjI2dsoao
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
xvvo/h88tyPoyrQAAA==

-->

</rfc>

