<?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.38 (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="May" day="18"/>

    
    
    

    <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 four 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>
  <t><strong><spanx style="verb">type="hash"</spanx></strong>: The client signs and broadcasts a standard
ERC-20 <spanx style="verb">transfer</spanx> transaction and presents the confirmed
transaction hash for server verification. This is the fallback
for some hardware wallets that cannot hand off a
signed-but-unbroadcast transaction.</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 1236?>

<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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
ZdEY76P7f72c2N/htQAA

-->

</rfc>

