<?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.39 (Ruby 4.0.5) -->


<!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">
]>


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

    <author initials="J." surname="Moxey" fullname="Jake Moxey">
      <organization>Tempo Labs</organization>
      <address>
        <email>jake@tempo.xyz</email>
      </address>
    </author>
    <author initials="B." surname="Ryan" fullname="Brendan Ryan">
      <organization>Tempo Labs</organization>
      <address>
        <email>brendan@tempo.xyz</email>
      </address>
    </author>
    <author initials="T." surname="Meagher" fullname="Tom Meagher">
      <organization>Tempo Labs</organization>
      <address>
        <email>tom@tempo.xyz</email>
      </address>
    </author>

    <date year="2026" month="July" day="03"/>

    
    
    

    <abstract>


<?line 59?>

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



    </abstract>



  </front>

  <middle>


<?line 66?>

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

<t>The <spanx style="verb">charge</spanx> intent represents a one-time payment of a specified amount.
The server may submit the signed transaction any time before the
challenge <spanx style="verb">expires</spanx> auth-param timestamp.</t>

<t>This specification defines the request schema, credential formats, and
settlement procedures for charge transactions on Tempo.</t>

<t>For non-zero charges, Tempo supports two submission modes:</t>

<t><list style="symbols">
  <t><spanx style="verb">pull</spanx>: The client signs a transaction and returns a
<spanx style="verb">type="transaction"</spanx> credential for the server to broadcast.</t>
  <t><spanx style="verb">push</spanx>: The client broadcasts the transaction and returns a
<spanx style="verb">type="hash"</spanx> credential for the server to verify onchain.</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> support <spanx style="verb">pull</spanx> mode. Servers <bcp14>MAY</bcp14> additionally support
<spanx style="verb">push</spanx> mode. Servers that do not support both non-zero modes for a
challenge <bcp14>MUST</bcp14> advertise the supported subset via
<spanx style="verb">methodDetails.supportedModes</spanx>.</t>

<section anchor="pull-mode-default"><name>Pull Mode (Default)</name>

<t>The default Tempo charge flow uses <spanx style="verb">pull</spanx> mode:</t>

<figure><artwork><![CDATA[
   Client                        Server                     Tempo Network
      |                             |                             |
      |  (1) GET /api/resource      |                             |
      |-------------------------->  |                             |
      |                             |                             |
      |  (2) 402 Payment Required   |                             |
      |      intent="charge"        |                             |
      |<--------------------------  |                             |
      |                             |                             |
      |  (3) Sign transfer tx       |                             |
      |                             |                             |
      |  (4) Authorization: Payment |                             |
      |-------------------------->  |                             |
      |                             |  (5) Broadcast tx           |
      |                             |-------------------------->  |
      |                             |  (6) Transfer complete      |
      |                             |<--------------------------  |
      |  (7) 200 OK + Receipt       |                             |
      |<--------------------------  |                             |
      |                             |                             |
]]></artwork></figure>

</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>TIP-20</dt>
  <dd>
    <t>Tempo's enshrined token standard, implemented as precompiles rather
than smart contracts. TIP-20 tokens use 6 decimal places and provide
<spanx style="verb">transfer</spanx>, <spanx style="verb">transferWithMemo</spanx>, <spanx style="verb">transferFrom</spanx>, and <spanx style="verb">approve</spanx> operations.</t>
  </dd>
  <dt>Tempo Transaction</dt>
  <dd>
    <t>An EIP-2718 transaction with type prefix <spanx style="verb">0x76</spanx>, supporting batched
calls, multiple signature types (secp256k1, P256, WebAuthn), 2D nonces,
and validity windows.</t>
  </dd>
  <dt>2D Nonce</dt>
  <dd>
    <t>Tempo's nonce system where each account has multiple independent nonce
lanes (<spanx style="verb">nonce_key</spanx>), enabling parallel transaction submission.</t>
  </dd>
  <dt>Fee Payer</dt>
  <dd>
    <t>An account that pays transaction fees on behalf of another account.
Tempo Transactions support fee payment via a separate signature
domain (<spanx style="verb">0x78</spanx>), allowing the server to pay for fees while the client
only signs the payment authorization.</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 number)</c>
      <c><spanx style="verb">currency</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>TIP-20 token address (e.g., <spanx style="verb">"0x20c0..."</spanx>)</c>
      <c><spanx style="verb">recipient</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Recipient address</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>

</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">methodDetails.chainId</spanx></c>
      <c>number</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Tempo chain ID (default: 42431)</c>
      <c><spanx style="verb">methodDetails.feePayer</spanx></c>
      <c>boolean</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>If <spanx style="verb">true</spanx>, server pays transaction fees (default: <spanx style="verb">false</spanx>)</c>
      <c><spanx style="verb">methodDetails.memo</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>A <spanx style="verb">bytes32</spanx> hex value. When present, the client <bcp14>MUST</bcp14> use <spanx style="verb">transferWithMemo</spanx> instead of <spanx style="verb">transfer</spanx>.</c>
      <c><spanx style="verb">methodDetails.splits</spanx></c>
      <c>array</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Additional recipients that receive a portion of <spanx style="verb">amount</spanx>. See <xref target="split-payments"/>.</c>
      <c><spanx style="verb">methodDetails.supportedModes</spanx></c>
      <c>array</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Supported non-zero submission modes. Values are <spanx style="verb">"pull"</spanx> and/or <spanx style="verb">"push"</spanx>.</c>
</texttable>

</section>
<section anchor="submission-modes"><name>Submission Modes</name>

<t>The <spanx style="verb">supportedModes</spanx> field allows a server to advertise which non-zero
charge submission modes it supports for a specific challenge.</t>

<t><list style="symbols">
  <t><spanx style="verb">pull</spanx> indicates that the client creates a <spanx style="verb">type="transaction"</spanx>
credential containing a signed Tempo Transaction for the server to
broadcast.</t>
  <t><spanx style="verb">push</spanx> indicates that the client creates a <spanx style="verb">type="hash"</spanx> credential
after broadcasting the transaction itself.</t>
</list></t>

<t>If <spanx style="verb">supportedModes</spanx> is present, it <bcp14>MUST</bcp14> contain at least one of <spanx style="verb">pull</spanx>
or <spanx style="verb">push</spanx>, and clients <bcp14>MUST</bcp14> choose one of the advertised modes.</t>

<t>If <spanx style="verb">supportedModes</spanx> is omitted, clients <bcp14>MAY</bcp14> assume both <spanx style="verb">pull</spanx> and
<spanx style="verb">push</spanx> are supported for that challenge for backwards compatibility with
version 00 implementations. Servers <bcp14>MUST</bcp14> omit <spanx style="verb">supportedModes</spanx> only when
they support both non-zero modes for the challenge. A server that
supports only <spanx style="verb">pull</spanx> or only <spanx style="verb">push</spanx> for a challenge <bcp14>MUST</bcp14> include
<spanx style="verb">supportedModes</spanx> explicitly and omit the unsupported mode.</t>

<t>For zero-amount charges, mode negotiation does not apply. Clients use a
<spanx style="verb">type="proof"</spanx> credential regardless of <spanx style="verb">supportedModes</spanx>.</t>

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

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000000",
  "currency": "0x20c0000000000000000000000000000000000000",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "methodDetails": {
    "chainId": 4217,
    "feePayer": true,
    "supportedModes": ["pull"]
  }
}
]]></sourcecode></figure>

<t>The client fulfills this by signing a Tempo Transaction with
<spanx style="verb">transfer(recipient, amount)</spanx> or <spanx style="verb">transferWithMemo(recipient, amount, memo)</spanx>
on the specified <spanx style="verb">currency</spanx> (token address),
with <spanx style="verb">validBefore</spanx> no later than the challenge <spanx style="verb">expires</spanx> auth-param. The client <bcp14>MAY</bcp14> use a dedicated
<spanx style="verb">nonceKey</spanx> (2D nonce lane) for payment transactions to avoid blocking
other account activity if the transaction is not immediately settled.</t>

<t>If <spanx style="verb">methodDetails.feePayer</spanx> is <spanx style="verb">true</spanx>, the client signs with
<spanx style="verb">fee_payer_signature</spanx> set to <spanx style="verb">0x00</spanx> and <spanx style="verb">fee_token</spanx> empty, allowing the
server to sponsor fees. If <spanx style="verb">feePayer</spanx> is <spanx style="verb">false</spanx> or omitted, the client
<bcp14>MUST</bcp14> set <spanx style="verb">fee_token</spanx> and pay fees themselves.</t>

</section>
<section anchor="split-payments"><name>Split Payments</name>

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

<section anchor="semantics"><name>Semantics</name>

<t>The top-level <spanx style="verb">amount</spanx> represents the total amount the client pays. Each
entry in <spanx style="verb">splits</spanx> specifies a recipient and the amount they receive. The
primary recipient (the top-level <spanx style="verb">recipient</spanx>) receives the remainder:
<spanx style="verb">amount</spanx> minus the sum of all split amounts.</t>

</section>
<section anchor="split-entry-schema"><name>Split Entry Schema</name>

<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">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>A <spanx style="verb">bytes32</spanx> hex value for <spanx style="verb">transferWithMemo</spanx></c>
      <c><spanx style="verb">recipient</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Recipient address</c>
</texttable>

<t>The <spanx style="verb">amount</spanx> field in each split entry <bcp14>MUST</bcp14> be a base-10 integer string
with no sign, decimal point, exponent, or surrounding whitespace. Each
<spanx style="verb">splits[i].amount</spanx> <bcp14>MUST</bcp14> be greater than zero. The syntax and encoding
requirements for <spanx style="verb">splits[i].memo</spanx> are identical to those for
<spanx style="verb">methodDetails.memo</spanx>, but apply only to that split transfer. Address
fields are compared by decoded 20-byte value, not by string form.</t>

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

<t>Servers <bcp14>MUST NOT</bcp14> generate a request where the sum of <spanx style="verb">splits[].amount</spanx>
values is greater than or equal to <spanx style="verb">amount</spanx>. Clients <bcp14>MUST</bcp14> reject any
request that violates this constraint. This ensures the primary
recipient always receives a non-zero remainder, avoiding the need to
define zero-value transfer semantics.</t>

<t>Additional constraints:</t>

<t><list style="symbols">
  <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 to keep gas usage within a
single block's budget (~29,000 gas per additional TIP-20
transfer). Servers <bcp14>MAY</bcp14> reject requests exceeding their supported
split count.</t>
  <t>All transfers <bcp14>MUST</bcp14> target the same <spanx style="verb">currency</spanx> token address.</t>
</list></t>

</section>
<section anchor="ordering"><name>Ordering</name>

<t>The order of entries in <spanx style="verb">splits</spanx> is not significant for verification.
Clients <bcp14>SHOULD</bcp14> emit calls in array order. Servers <bcp14>MUST</bcp14> verify that the
required payment effects are present regardless of call ordering.</t>

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

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000000",
  "currency": "0x20c0000000000000000000000000000000000000",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "methodDetails": {
    "chainId": 4217,
    "feePayer": true,
    "splits": [
      {
        "amount": "50000",
        "recipient": "0xA1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2"
      },
      {
        "amount": "10000",
        "memo": "0x00000000000000000000000000000000000000000000000000000000deadbeef",
        "recipient": "0xC4D5E6F7A8B9C4D5E6F7A8B9C4D5E6F7A8B9C4D5"
      }
    ]
  }
}
]]></sourcecode></figure>

<t>This requests a total payment of 1.00 pathUSD (1,000,000 base units).
The platform receives 0.05 pathUSD, the affiliate receives 0.01 pathUSD
(with a memo), and the primary recipient receives the remaining
0.94 pathUSD (940,000 base units).</t>

</section>
<section anchor="client-behavior"><name>Client Behavior</name>

<t>When <spanx style="verb">splits</spanx> is present, the client <bcp14>MUST</bcp14> produce a transaction whose
on-chain effects include the following <spanx style="verb">Transfer</spanx> or <spanx style="verb">TransferWithMemo</spanx>
events on the <spanx style="verb">currency</spanx> token address:</t>

<t><list style="numbers" type="1">
  <t>The primary <spanx style="verb">recipient</spanx> receives <spanx style="verb">amount - sum(splits[].amount)</spanx>.</t>
  <t>Each <spanx style="verb">splits[i].recipient</spanx> receives <spanx style="verb">splits[i].amount</spanx>. If
<spanx style="verb">splits[i].memo</spanx> is present, the corresponding transfer <bcp14>MUST</bcp14> use
<spanx style="verb">transferWithMemo</spanx>.</t>
</list></t>

<t>The top-level <spanx style="verb">methodDetails.memo</spanx>, if present, applies to the primary
transfer.</t>

<t>Clients <bcp14>MAY</bcp14> achieve these effects using any valid transaction structure,
including batched calls, smart contract wallet invocations, or
intermediary operations such as token swaps — provided all required
transfer events are emitted atomically.</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>Tempo-specific payload object</c>
      <c><spanx style="verb">source</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14></c>
      <c>Payer identifier as a DID (e.g., <spanx style="verb">did:pkh:eip155:4217:0x...</spanx>)</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 applicable to the challenge and the payer's Ethereum address.</t>

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

<t>When <spanx style="verb">type</spanx> is <spanx style="verb">"transaction"</spanx>, <spanx style="verb">signature</spanx> contains the complete signed
Tempo Transaction (type 0x76) serialized as RLP and hex-encoded with
<spanx style="verb">0x</spanx> prefix. The transaction <bcp14>MUST</bcp14> authorize payment in the requested
TIP-20 token sufficient to satisfy the challenge parameters, using one
or more <spanx style="verb">transfer</spanx> and/or <spanx style="verb">transferWithMemo</spanx> calls. When <spanx style="verb">splits</spanx> are
present, the transaction <bcp14>MUST</bcp14> include transfers for each split entry
(see <xref target="split-payments"/>). This payload type corresponds to <spanx style="verb">pull</spanx> mode.</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">signature</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Hex-encoded RLP-serialized signed transaction</c>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"transaction"</spanx></c>
</texttable>

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

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

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

<t>When <spanx style="verb">type</spanx> is <spanx style="verb">"hash"</spanx>, the client has already broadcast the transaction
to the Tempo network. The <spanx style="verb">hash</spanx> field contains the transaction hash for
the server to verify onchain. This payload type corresponds to <spanx style="verb">push</spanx>
mode.</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">hash</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>Transaction hash with <spanx style="verb">0x</spanx> prefix</c>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"hash"</spanx></c>
</texttable>

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

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

</section>
<section anchor="proof-payload"><name>Proof Payload (type="proof")</name>

<t>When <spanx style="verb">amount</spanx> is <spanx style="verb">"0"</spanx>, no on-chain transfer is required. Instead of
broadcasting a transaction, the client signs an EIP-712 typed-data
message binding the proof to the challenge identifier. This payload
type is used exclusively for zero-amount charges: clients <bcp14>MUST</bcp14> use
<spanx style="verb">type="proof"</spanx> when <spanx style="verb">amount</spanx> is <spanx style="verb">"0"</spanx>, and <bcp14>MUST NOT</bcp14> use <spanx style="verb">type="proof"</spanx>
when <spanx style="verb">amount</spanx> is non-zero. The <spanx style="verb">supportedModes</spanx> field does not apply
to zero-amount charges.</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">signature</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c>EIP-712 signature with <spanx style="verb">0x</spanx> prefix</c>
      <c><spanx style="verb">type</spanx></c>
      <c>string</c>
      <c><bcp14>REQUIRED</bcp14></c>
      <c><spanx style="verb">"proof"</spanx></c>
</texttable>

<t>The <spanx style="verb">source</spanx> field <bcp14>MUST</bcp14> be present on proof credentials and <bcp14>MUST</bcp14> be a
<spanx style="verb">did:pkh:eip155:&lt;chainId&gt;:&lt;address&gt;</spanx> DID identifying the signer.</t>

<section anchor="eip-712-domain-and-types"><name>EIP-712 Domain and Types</name>

<t>The typed-data domain and types are:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "domain": {
    "name": "MPP",
    "version": "1",
    "chainId": <challenge methodDetails.chainId>
  },
  "types": {
    "Proof": [
      { "name": "challengeId", "type": "string" }
    ]
  },
  "primaryType": "Proof",
  "message": {
    "challengeId": "<challenge.id>"
  }
}
]]></sourcecode></figure>

<t>The <spanx style="verb">challengeId</spanx> in the message <bcp14>MUST</bcp14> be the <spanx style="verb">id</spanx> from the challenge
that was issued to the client. This binds the signature to exactly one
challenge, preventing cross-challenge replay.</t>

</section>
<section anchor="proof-verification"><name>Proof Verification</name>

<t>Servers <bcp14>MUST</bcp14> verify proof credentials as follows:</t>

<t><list style="numbers" type="1">
  <t>Verify <spanx style="verb">credential.source</spanx> is present and parses as
<spanx style="verb">did:pkh:eip155:&lt;chainId&gt;:&lt;address&gt;</spanx></t>
  <t>Verify the chain ID from <spanx style="verb">source</spanx> matches
<spanx style="verb">methodDetails.chainId</spanx> from the challenge</t>
  <t>Recover the signer from <spanx style="verb">payload.signature</spanx> using the EIP-712
domain, types, and message described above</t>
  <t>Verify the recovered signer matches the address in <spanx style="verb">source</spanx></t>
</list></t>

</section>
<section anchor="proof-receipt"><name>Proof Receipt</name>

<t>Upon successful verification, servers return a receipt per
<xref target="I-D.httpauth-payment"/> with <spanx style="verb">reference</spanx> set to the challenge <spanx style="verb">id</spanx>
(since no on-chain transaction exists).</t>

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

<figure><sourcecode type="json"><![CDATA[
{
  "challenge": {
    "id": "kM9xPqWvT2nJrHsY4aDfEb",
    "realm": "api.example.com",
    "method": "tempo",
    "intent": "charge",
    "request": "eyJ...",
    "expires": "2025-02-05T12:05:00Z"
  },
  "payload": {
    "signature": "0xabcdef1234567890...",
    "type": "proof"
  },
  "source": "did:pkh:eip155:4217:0x1234567890abcdef1234567890abcdef12345678"
}
]]></sourcecode></figure>

</section>
</section>
</section>
<section anchor="fee-payment"><name>Fee Payment</name>

<t>When a request includes <spanx style="verb">feePayer: true</spanx>, the server commits to paying
transaction fees on behalf of the client.</t>

<section anchor="server-paid-fees"><name>Server-Paid Fees</name>

<t>When <spanx style="verb">feePayer: true</spanx>:</t>

<t><list style="numbers" type="1">
  <t><strong>Client signs with placeholder</strong>: The client signs the Tempo Transaction
with <spanx style="verb">fee_payer_signature</spanx> set to a placeholder value (<spanx style="verb">0x00</spanx>) and
<spanx style="verb">fee_token</spanx> left empty. The client uses signature domain <spanx style="verb">0x76</spanx>.</t>
  <t><strong>Server receives credential</strong>: The server extracts the client-signed
transaction from the credential payload.</t>
  <t><strong>Server adds fee payment signature</strong>: The server selects a <spanx style="verb">fee_token</spanx> (any
USD-denominated TIP-20 stablecoin) and signs the transaction using
signature domain <spanx style="verb">0x78</spanx>. This signature commits to the transaction
including the <spanx style="verb">fee_token</spanx> and client's address.</t>
  <t><strong>Server broadcasts</strong>: The final transaction contains both signatures:  <list style="symbols">
      <t>Client's signature (authorizing the payment)</t>
      <t>Server's <spanx style="verb">fee_payer_signature</spanx> (committing to pay fees)</t>
    </list></t>
</list></t>

</section>
<section anchor="client-paid-fees"><name>Client-Paid Fees</name>

<t>When <spanx style="verb">feePayer: false</spanx> or omitted, the client <bcp14>MUST</bcp14> set <spanx style="verb">fee_token</spanx> to a
valid USD TIP-20 token address and pay fees themselves. The server
broadcasts the transaction as-is without adding a fee payer signature.</t>

</section>
<section anchor="server-requirements"><name>Server Requirements</name>

<t>When acting as fee payer, servers:</t>

<t><list style="symbols">
  <t><bcp14>MUST</bcp14> maintain sufficient balance of a USD TIP-20 token to pay
transaction fees</t>
  <t><bcp14>MAY</bcp14> use any USD-denominated TIP-20 token with sufficient AMM
liquidity as the fee token</t>
  <t><bcp14>MAY</bcp14> recover fee costs through pricing or other business logic</t>
</list></t>

</section>
<section anchor="client-requirements"><name>Client Requirements</name>

<t><list style="symbols">
  <t>When <spanx style="verb">feePayer: true</spanx>: Clients <bcp14>MUST</bcp14> sign with <spanx style="verb">fee_payer_signature</spanx> set
to <spanx style="verb">0x00</spanx> and <spanx style="verb">fee_token</spanx> empty or <spanx style="verb">0x80</spanx> (RLP null)</t>
  <t>When <spanx style="verb">feePayer: false</spanx> or omitted: Clients <bcp14>MUST</bcp14> set <spanx style="verb">fee_token</spanx> to a
valid USD TIP-20 token and have sufficient balance to pay fees</t>
</list></t>

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

<t>For <spanx style="verb">intent="charge"</spanx> fulfilled via transaction, the client signs a
transaction containing one or more <spanx style="verb">transfer</spanx> or <spanx style="verb">transferWithMemo</spanx> calls.
When <spanx style="verb">splits</spanx> are present, the transaction contains multiple calls (see
<xref target="split-payments"/>). If <spanx style="verb">feePayer: true</spanx>, the server adds its fee payer
signature before broadcasting:</t>

<figure><artwork><![CDATA[
   Client                           Server                        Tempo Network
      |                                |                                |
      |  (1) Authorization:            |                                |
      |      Payment <credential>      |                                |
      |------------------------------->|                                |
      |                                |                                |
      |                                |  (2) If feePayer: true,        |
      |                                |      add fee payment signature |
      |                                |                                |
      |                                |  (3) eth_sendRawTxSync         |
      |                                |------------------------------->|
      |                                |                                |
      |                                |  (4) Transfer executed         |
      |                                |      (~500ms finality)         |
      |                                |<-------------------------------|
      |                                |                                |
      |  (5) 200 OK                    |                                |
      |      Payment-Receipt: <base64url-receipt> |                    |
      |<-------------------------------|                                |
      |                                |                                |
]]></artwork></figure>

<t><list style="numbers" type="1">
  <t>Client submits credential containing signed <spanx style="verb">transfer</spanx> or <spanx style="verb">transferWithMemo</spanx> transaction</t>
  <t>If <spanx style="verb">feePayer: true</spanx>, server adds fee sponsorship (signs with <spanx style="verb">0x78</spanx> domain)</t>
  <t>Server broadcasts transaction to Tempo</t>
  <t>Transaction included in block with immediate finality (~500ms)</t>
  <t>Server returns a receipt whose <spanx style="verb">reference</spanx> field is the transaction digest</t>
</list></t>

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

<t>For credentials with <spanx style="verb">type="hash"</spanx>, the client has already broadcast
the transaction. The server verifies the transaction onchain:</t>

<figure><artwork><![CDATA[
   Client                        Server                     Tempo Network
      |                             |                             |
      |  (1) Broadcast tx           |                             |
      |------------------------------------------------------>    |
      |                             |                             |
      |  (2) Transaction confirmed  |                             |
      |<------------------------------------------------------    |
      |                             |                             |
      |  (3) Authorization:         |                             |
      |      Payment <credential>   |                             |
      |      (with txHash)          |                             |
      |-------------------------->  |                             |
      |                             |                             |
      |                             |  (4) eth_getTransactionReceipt
      |                             |-------------------------->  |
      |                             |                             |
      |                             |  (5) Receipt returned       |
      |                             |<--------------------------  |
      |                             |                             |
      |                             |  (6) Verify receipt         |
      |                             |                             |
      |  (7) 200 OK                 |                             |
      |      Payment-Receipt:       |                             |
      |      <base64url-receipt>    |                             |
      |<--------------------------  |                             |
      |                             |                             |
]]></artwork></figure>

<t><strong>Limitations:</strong></t>

<t><list style="symbols">
  <t>Clients <bcp14>MUST NOT</bcp14> use <spanx style="verb">type="hash"</spanx> when <spanx style="verb">methodDetails.feePayer</spanx> is
<spanx style="verb">true</spanx>. Servers <bcp14>MUST</bcp14> reject such credentials.</t>
  <t>If <spanx style="verb">methodDetails.supportedModes</spanx> is present and does not include
<spanx style="verb">push</spanx>, clients <bcp14>MUST NOT</bcp14> use <spanx style="verb">type="hash"</spanx> credentials. Servers <bcp14>MUST</bcp14>
reject such credentials.</t>
  <t>Server cannot modify or enhance the transaction.</t>
</list></t>

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

<t>Before broadcasting a transaction credential, 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 contains <spanx style="verb">transfer</spanx> or <spanx style="verb">transferWithMemo</spanx>
calls on the <spanx style="verb">currency</spanx> token address</t>
  <t>Verify the <spanx style="verb">amount</spanx> matches the challenge request amount</t>
  <t>Verify the <spanx style="verb">recipient</spanx> matches the challenge request recipient</t>
  <t>If <spanx style="verb">methodDetails.memo</spanx> is present, verify the transaction uses
<spanx style="verb">transferWithMemo</spanx> with the matching memo value</t>
  <t>If <spanx style="verb">methodDetails.splits</spanx> is present, verify the transaction
includes transfers satisfying each split entry: the primary
recipient receives <spanx style="verb">amount - sum(splits[].amount)</spanx>, each split
recipient receives its specified amount, and any required memo
values are present</t>
  <t>If <spanx style="verb">methodDetails.supportedModes</spanx> is present, verify it includes
<spanx style="verb">pull</spanx></t>
</list></t>

<t>Servers <bcp14>MAY</bcp14> impose additional structural requirements (such as
exact call count or ordering) as local policy before broadcasting.</t>

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

<t>For hash credentials, servers <bcp14>MUST</bcp14> fetch the transaction receipt and
verify that it indicates successful execution. Servers <bcp14>MUST</bcp14> verify
that the receipt contains <spanx style="verb">Transfer</spanx> and/or <spanx style="verb">TransferWithMemo</spanx> event
logs emitted by the <spanx style="verb">currency</spanx> token address whose payment effects
satisfy the challenge parameters, including the primary recipient
amount, any split amounts, and any required memo values.</t>

<t>If <spanx style="verb">methodDetails.supportedModes</spanx> is present, servers <bcp14>MUST</bcp14> verify it
includes <spanx style="verb">push</spanx> before accepting a hash credential.</t>

<t>Servers <bcp14>MAY</bcp14> additionally inspect the transaction call data as a
local-policy check, but call-data decoding is not required for
conformance.</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.</t>

<t>The receipt payload for Tempo charge:</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">"tempo"</spanx></c>
      <c><spanx style="verb">reference</spanx></c>
      <c>string</c>
      <c>Transaction hash of the settlement transaction</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">externalId</spanx></c>
      <c>string</c>
      <c><bcp14>OPTIONAL</bcp14>. Echoed from the challenge request</c>
</texttable>

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

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

<t>Tempo Transactions include chain ID, nonce, and optional <spanx style="verb">validBefore</spanx>/
<spanx style="verb">validAfter</spanx> timestamps that prevent replay attacks:</t>

<t><list style="symbols">
  <t>Chain ID binding prevents cross-chain replay</t>
  <t>Nonce consumption prevents same-chain replay</t>
  <t>Validity windows limit temporal replay windows</t>
</list></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>If <spanx style="verb">splits</spanx> is present, verify the sum of split amounts is strictly
less than <spanx style="verb">amount</spanx> and that all split recipients are expected</t>
</list></t>

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

<t>When <spanx style="verb">splits</spanx> are present, additional risks apply:</t>

<t><strong>Recipient Transparency</strong>: Where a human approval step exists, 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>Gas Overhead</strong>: Each additional split adds approximately 29,000 gas
for the TIP-20 precompile transfer execution. A charge with 10 splits
adds approximately 290,000 gas beyond a single-transfer charge. Servers
sponsoring fees via <spanx style="verb">feePayer: true</spanx> <bcp14>MUST</bcp14> budget for the increased gas
limit.</t>

<t><strong>Split Count Bound</strong>: Servers <bcp14>SHOULD</bcp14> limit <spanx style="verb">splits</spanx> to 10 entries.
See <xref target="split-payments"/> for rationale.</t>

</section>
<section anchor="server-paid-fees-1"><name>Server-Paid Fees</name>

<t>Servers acting as fee payers accept financial risk in exchange for
providing a seamless payment experience.</t>

<t><strong>Denial of Service</strong>: Malicious clients could submit valid-looking
credentials that fail onchain, causing the server to pay fees without
receiving payment. Servers <bcp14>SHOULD</bcp14> implement rate limiting and <bcp14>MAY</bcp14> require
client authentication before accepting payment credentials.</t>

<t><strong>Fee Token Exhaustion</strong>: Servers <bcp14>MUST</bcp14> monitor their fee token balance
and reject new payment requests when balance is insufficient.</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">tempo</spanx></c>
      <c>Tempo blockchain TIP-20 token transfer</c>
      <c>This document</c>
</texttable>

<t>Contact: Tempo Labs (<eref target="mailto:contact@tempo.xyz">contact@tempo.xyz</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">tempo</spanx></c>
      <c>One-time TIP-20 transfer</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;
<reference anchor="I-D.httpauth-payment" target="https://datatracker.ietf.org/doc/draft-ryan-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-2718" target="https://eips.ethereum.org/EIPS/eip-2718">
  <front>
    <title>Typed Transaction Envelope</title>
    <author initials="M." surname="Zoltu" fullname="Micah Zoltu">
      <organization></organization>
    </author>
    <date year="2020" month="October"/>
  </front>
</reference>
<reference anchor="EIP-55" target="https://eips.ethereum.org/EIPS/eip-55">
  <front>
    <title>Mixed-case checksum address encoding</title>
    <author initials="V." surname="Buterin" fullname="Vitalik Buterin">
      <organization></organization>
    </author>
    <date year="2016" month="January"/>
  </front>
</reference>
<reference anchor="TEMPO-TX-SPEC" target="https://docs.tempo.xyz/protocol/transactions/spec-tempo-transaction">
  <front>
    <title>Tempo Transaction Specification</title>
    <author >
      <organization>Tempo Labs</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

</references>


<?line 766?>

<section anchor="abnf-collected"><name>ABNF Collected</name>

<figure><sourcecode type="abnf"><![CDATA[
tempo-charge-challenge = "Payment" 1*SP
  "id=" quoted-string ","
  "realm=" quoted-string ","
  "method=" DQUOTE "tempo" DQUOTE ","
  "intent=" DQUOTE "charge" DQUOTE ","
  "request=" base64url-nopad

tempo-charge-credential = "Payment" 1*SP base64url-nopad

; Base64url encoding without padding per RFC 4648 Section 5
base64url-nopad = 1*( ALPHA / DIGIT / "-" / "_" )
]]></sourcecode></figure>

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

<t><strong>Challenge:</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="kM9xPqWvT2nJrHsY4aDfEb",
  realm="api.example.com",
  method="tempo",
  intent="charge",
  request="eyJhbW91bnQiOiIxMDAwMDAwIiwiY3VycmVuY3kiOiIweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCJyZWNpcGllbnQiOiIweDc0MmQzNUNjNjYzNEMwNTMyOTI1YTNiODQ0QmM5ZTc1OTVmOGZFMDAiLCJtZXRob2REZXRhaWxzIjp7ImNoYWluSWQiOjQyMTcsInN1cHBvcnRlZE1vZGVzIjpbInB1bGwiXX19",
  expires="2025-01-06T12:00:00Z"
Cache-Control: no-store
]]></sourcecode></figure>

<t>The <spanx style="verb">request</spanx> decodes to:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000000",
  "currency": "0x20c0000000000000000000000000000000000000",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "methodDetails": {
    "chainId": 4217,
    "supportedModes": ["pull"]
  }
}
]]></sourcecode></figure>

<t>This requests a transfer of 1.00 pathUSD (1000000 base units).</t>

<t><strong>Credential:</strong></t>

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

</section>
<section anchor="split-payment-example"><name>Split Payment Example</name>

<t><strong>Challenge with splits:</strong></t>

<figure><sourcecode type="http"><![CDATA[
HTTP/1.1 402 Payment Required
WWW-Authenticate: Payment id="sP1itPaym3ntEx4mple",
  realm="marketplace.example.com",
  method="tempo",
  intent="charge",
  request="eyJhbW91bnQiOiIxMDAwMDAwIiwiY3VycmVuY3kiOiIweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCJtZXRob2REZXRhaWxzIjp7ImNoYWluSWQiOjQyMTcsImZlZVBheWVyIjp0cnVlLCJzcGxpdHMiOlt7ImFtb3VudCI6IjUwMDAwIiwicmVjaXBpZW50IjoiMHhBMUIyQzNENEU1RjZBMUIyQzNENEU1RjZBMUIyQzNENEU1RjZBMUIyIn1dfSwicmVjaXBpZW50IjoiMHg3NDJkMzVDYzY2MzRDMDUzMjkyNWEzYjg0NEJjOWU3NTk1ZjhmRTAwIn0",
  expires="2025-06-01T12:00:00Z"
Cache-Control: no-store
]]></sourcecode></figure>

<t>The <spanx style="verb">request</spanx> decodes to:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "amount": "1000000",
  "currency": "0x20c0000000000000000000000000000000000000",
  "recipient": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE00",
  "methodDetails": {
    "chainId": 4217,
    "feePayer": true,
    "splits": [
      {
        "amount": "50000",
        "recipient": "0xA1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2"
      }
    ]
  }
}
]]></sourcecode></figure>

<t>This requests a total payment of 1.00 pathUSD. The platform receives
0.05 pathUSD and the merchant receives 0.95 pathUSD. The resulting
transaction must emit the following transfer events:</t>

<t><list style="numbers" type="1">
  <t>950,000 to <spanx style="verb">0x742d...fE00</spanx> — merchant receives remainder</t>
  <t>50,000 to <spanx style="verb">0xA1B2...A1B2</spanx> — platform fee</t>
</list></t>

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

<t>The authors thank the Tempo community for their feedback on this
specification.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+0923bbuHbv/ApU8zBWaimSfEnszqT1LYnTyHZs2Y591lkj
ioQs2hSpQ1K25ZnM6kf0A/ot/ZR+SfcFAEGKsp105pw5bbVWYokEN4CNjX3H
ZqPRcLIgC+Wm6MnxJBbeyE2upNiPMhllYhgn4n2vdySO3NkYL2xNsxH8DTw3
C+LIcQeDRN7qZ3foWcePvcgdA0Q/cYdZI8N7DYbbaLWcW5mk8OymgO8ARl7F
yWxTBNEwdoJJsimiuBv7wVB10UumadZptTZaHSedDsZBig9nswnA39/rvXW8
OEpllE7TTZElU+k4LgwxTjYdIRqCx/HBvZGiG9/LGVwU0BW0/dC0rsixG4Sb
4hra/QsNt3k/e6A7cXKlZ/fRHaQW0O1ERr4bieOZG+Vgt5v5BQV1wA2fDbgX
j0VXulcjmeRwe83CNQU6i8dPgHWiOBkDIm8lIuT47U6n3d5QX1dWVvTX1fXV
1+rr6/arVf21s6YbvH71eg2/7jd2m6MsmyCSGxMmik3qWVFRrTeS4ntFLt8z
8RSJRpx4IzmWNX4KqSLbFAgz3Xz50nczN0tc70YmzUBmwyZM6CUQ1EumpQRw
2yj3/5Ig5cuOnwVLD+DhYqfVWW+02o6DRGehZ2//qNF51X5dmhDQmi96iRul
rkcT2ItuZRhPFkxBBpO0KWHGiZyOafwA9wQvE/BHBtsFDI3EZRxm0+JoW412
S41vba04um5wL/2G56YStq70btLpWLi+n8g0FTLyYCdFV189zrW1R0Z5FmRu
GNyI7WkmkyAqjLRNeBWit9c9Omz0PjdOjvZ2Sugk4rTReTKRntnvC8gi9tKm
ofSXkyTOYi8OX2Y5mPRlCnAUt7GuV86kvE0awAbxPwE/kPwyx+mNglRAv1Pi
e74cBpFMBaBL1JiX1WBnGiZJ16nvmlBkKcaA3NgHIqO7moMu3hHi55+rtteX
L02xnzkpYwnGMIrvhBcGcCsVbuSLVCbIU4W8h4FFwLzjSDayAAD2kKBbwCZu
JAwCcTKEhk7MI+L5D8LYu4EHg6jJKBgHvh8CH/0OhUAS+1NGo4Mbu89T7+up
J3IClMYjybvVCIiHcFWP2xfuOJ5GWZMA8ZjF2J0J4uoZjSgNriJoaK0eTHAm
COhAAp4lNnNgEGEocaZ9eT8JYAR9oTCWuGNqnmbueNJUq5jaBFZYykT+ZQpt
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

-->

</rfc>

