Skip to content
Integra Protocol

Binding

How the ATR hash rides in a payment, the binding patterns, and what each binding proves.

Binding is how H rides in a pairing's payment: the field its specification defines. The seller places H where the protocol or rail provides a place, and the buyer approves a payment that carries H, or carries a value from which anyone holding the ATR can confirm exactly that H.

Binding is the whole of what this package checks about a payment. It never compares amount, payee, asset, timing or payer with the ATR's content. A discrepancy between the payment and the record is between the parties, and the record is what they agreed to.

Where H rides

Each pairing places H in one field. Some examples, all from the package's own pairings:

PairingWhere H rides
x402/exact/eip155/eip3009The nonce of the EIP-3009 authorization the payer signs.
x402/exact/solanaThe option's extra.memo, written by the payer as the transaction's one Memo instruction.
x402/exact/xrplThe Payment's InvoiceID, which is SHA-256 of H's LCP string.
mpp/charge/evm/authorizationThe MPP challenge id, from which the signed nonce is derived.
x402/batch-settlement/eip155The channel configuration's salt, which every signature in the channel signs.
card/visa-tapAn lcp-hash field covered by the agent's agent-payer-auth message signature.

The pairings reference gives every pairing with the sentence its record states.

The patterns

Every pairing declares one binding pattern in its pattern.pattern. The six this package's pairings use:

PatternWhat it means in this package's pairings
native-fieldH itself, or its LCP string, sits in a field the protocol or rail defines: a nonce, memo, note, remark, salt, session id or invoice field.
id-reuseAn identifier the payment already carries is derived from H: MPP's challenge id through the signed nonce, an escrow's salt, the XRPL InvoiceID, or a card checkout's hash.
opaque-challengeH rides in the challenge or checkout the seller issues, and what the buyer presents echoes it or commits to it.
truncated-fieldA signed or landed field holds part of H: its first 8 bytes, or its low 250 bits. Anyone holding the ATR confirms H from it; nothing recovers H from it.
protocol-extensionH rides in a protocol extension: a field the agent's message signature covers, or an extension echoed on each request.
http-advisoryH and its link are advertised in the exchange, and nothing the buyer signs or the rail carries holds H.

The LcpPattern type also names overlay-contract and sidecar-attestation. No pairing in this package uses them.

What each binding proves

Each pairing's pattern record states what a payment through it shows, and never claims more:

FieldMeaning
patternThe binding pattern above.
buyerSignsThe buyer's signature covers H, or a value derived from H.
onChainH itself is on chain after settlement.
publicProofSettlement leaves a public record that commits to H.
zeroPartyRecoverableH can be read back from the settled transaction alone, without either party (the pairing's recover).
forwardIndexableA search by H finds the settlement.
profileThe LCP profile that defines the binding, where one does. The profiles ship in the package's profiles/.
instrument"landed" where the buyer presents standing authority that is redeemed once per payment, so a payment is the transfer that lands.
canonicalA flag the record declares. Nothing in this package reads it.
provesOne paragraph stating what the payment shows and what it does not.

Where the buyer's approval does not sign H, the record says so, and says what the payment does show. For example, x402/exact/eip155/permit2 states:

The payer signed a Permit2 witness transfer whose nonce is this ATR's hash, with the scheme's x402 proxy as spender and the payee in the witness. Permit2 verified the signature when the proxy executed the transfer, and the hash is in the settlement transaction's calldata as the Permit2 nonce; no event carries it. This does not show that amount, payee, asset or timing match the ATR's content.

This example prints the pattern record of every pairing whose buyer does not sign H:

import {  } from "@integraledger/lcp";

const  = .(() => !..).(() => `${.} (${..})`);
.(. > 0, .("mpp/charge/stripe (opaque-challenge)"));
true true

Binding the request too

On x402, the ATR's binding slot also records the request the challenge answers: its method, path, query and a SHA-256 of its body (requestCommitment), beside every option the challenge offers, exactly as issued (tie). On MPP, the binding slot records every challenge's bound parameters as issued. H therefore commits to the payment options and the request, as well as to the parties' content.

Next

  • Pairings: the members every pairing has.
  • Rails: where H rides on each chain and payment network.
Edit on GitHub

Last updated on

On this page