Skip to main content

Local Mock Receiver (016, child of 014)

The default settlement receiver for the generated 016 runtime: a dependency-free, static FDC3 participant that makes the request-to-outcome demonstration and tests reproducible without any external service. The BankerX settlement terminal (synaptic-fx-terminal) remains the opt-in reference adapter β€” both variants ship with the pack.

Files​

FilePurpose
index.htmlSelf-contained receiver UI: renders the fdc3.payment context, shows the lifecycle outcome, broadcasts synaptic.settlementStatus on the user channel
payment-lifecycle.mjsProvider-neutral lifecycle module: payload validation, duplicate-dispatch prevention, status transitions (Pndg β†’ Acsc / Rjct), shared by the page AND the smoke tests
appd/mock-receiver.appd.jsonApp-directory record declaring StartPayment support β€” the receiver-registration reference

Why a mock receiver is the default​

  • Generated 016 state and its smoke tests must be reproducible offline (no external service, no testnet dependency in the learning path).
  • The 014 β†’ 016 generated diff must show exactly one new lesson (post-trade settlement), not a new dependency.
  • BankerX stays a reference adapter: swap the receiving app in the workspace and the same intent resolves there β€” that is the provider-neutral point of FDC3.

Receiver registration β€” the intent-declaration contract​

A workspace participant is only reachable by intent if it registers like this:

  1. App record declares the intent (interop.intents.listensFor.StartPayment with fdc3.payment in its contexts) β€” an app record without the intent declaration is invisible to findIntent, and a raised StartPayment never routes to it. This is the failure mode of a guest app "not declaring a name".
  2. The app name/title is set in its app-directory record β€” intent routing surfaces this name in the resolution UI.
  3. The runtime registers an intent listener (fdc3.addIntentListener('StartPayment', ...)) β€” the appd record advertises capability; the listener implements it.

The TraderX blotter's SETTLE (BANKERX) action column appears only when fdc3.findIntent('StartPayment') resolves to at least one app β€” so base TraderX (no post-trade participant in the workspace) shows no action button, and the button appears the moment the mock receiver or BankerX joins the workspace.

Using BankerX instead (reference adapter)​

Point the workspace's post-trade participant at the BankerX settlement terminal instead of the mock receiver (the FDC3 app-directory URL swap β€” no TraderX change). The intent, context, and status correlation contract is identical; BankerX adds the real multi-rail settlement engine behind the FDC3 boundary, labeled testnet (XRPL TESTNET (altnet) / Solana DEVNET).