LOPWDocumentation

Docs / Protocol reference

Chain bindings

The portable core of LOPW is the warranty offer, the service receipt, the validator interface and the claim semantics. A chain binding supplies the parts that depend on a chain: the encoding, the signature scheme, the contract functions and the payment-rail binding.

BindingContractsStakePaymentsOracle (P6)Encoding and signatures
Stellar (reference binding)Soroban: Bond Registry, Claims, six validatorsUSDC Stellar Asset Contract, 7 decimals (one SEP-41 token per registry deployment)x402 exact, SEP-41 transferSEP-40 (Reflector)ScVal XDR; Ed25519 over a domain-separated SHA-256
EVM (Base first, then Ethereum, Arbitrum, Optimism, Polygon, Avalanche)Solidity: the same three kinds of contractNative USDC, 6 decimalsx402 exact, EIP-3009 transferWithAuthorizationChainlink getRoundData(roundId)ABI encoding; secp256k1 over EIP-712 typed data (keccak-256)
Solana (planned)Anchor programsUSDC SPL, 6 decimalsx402 exact, SPL transferPyth price update verified in-programBorsh; Ed25519 over a domain-separated SHA-256

One protocol, the same semantics on every chain. Each binding adds its own contracts and SDK adapter implementing the same ChainBinding shape without changing the offer, receipt, predicate or claim semantics. Per-network details (chain ids, CAIP-2 ids, token and oracle addresses, deployed contracts) are in the Networks section.

The Stellar binding

AspectStellar binding
AddressesStrkeys: G... accounts, C... contracts
Network IDSHA-256 of the network passphrase (Test SDF Network ; September 2015 on testnet; Public Global Stellar Network ; September 2015 on mainnet)
CAIP-2 id for x402stellar:testnet, stellar:pubnet
Read pathRead-only calls are simulated through Stellar RPC from a throwaway account that never signs
Write pathinvoke: simulate, assemble, sign, send, poll; contract errors are decoded to names
Ledger timeTrails wall-clock time by up to one ledger; the SDK waits before submitting a claim so it never lands in a ledger closed before served_at
StoragePersistent entries with TTL extended on access; instance storage for contract configuration
TypeScript
import { StellarBinding, STELLAR_TESTNET, STELLAR_MAINNET, getNetwork, withContracts } from "@lopw/protocol";

const binding = new StellarBinding(STELLAR_TESTNET);                 // contract addresses included
const main = withContracts(STELLAR_MAINNET, { rpcUrl, registry, claims });   // supply your own for a mainnet deployment
const net = getNetwork();                                             // LOPW_NETWORK + env overrides
StellarNetwork fieldMeaning
nametestnet or mainnet; used in API paths
caip2CAIP-2 id used by x402
passphraseNetwork passphrase hashed into every signature
rpcUrlStellar RPC endpoint
registry, claimsContract addresses
usdcThe USDC Stellar Asset Contract
oracleThe SEP-40 fiat-rates oracle used by the reference services

Contract addresses of the current deployment are listed on the proofs page and inside STELLAR_TESTNET.

What a new binding must provide