Facet's UCP adapter settled live on-chain at two merchants
A single buying agent arrived cold at facet.llc, took on a Facet identity, searched the open directory, and bought from two independent merchants in one session: LaRuce Beauty, then Ascend. Each purchase ran a full Universal Commerce Protocol checkout through Facet's @facet-llc/ucp adapter, every message signed with RFC 9421 ES256, each merchant offer signed by its own on-chain seller key, each commit signed by the buyer's own wallet. Both settled live on Base Sepolia through Boson escrow, non-custodially, and the proceeds withdrew to each merchant's own treasury. Every figure below traces to code that ran.
This is Facet's UCP adapter (@facet-llc/ucp) running against Ascend's live Facet Terminal. It is not Shopify's separate UCP stack at ascendusa.co/.well-known/ucp. Every artifact here was produced by the packages/ucp functions that ran, never fetched from Shopify's endpoint.
This run went live on-chain. Each leg drove the full protocol to the seller-signed offer and the buyer-signed commit, broadcast the commit into Boson escrow, redeemed on a merchant fulfillment signal, and withdrew the proceeds to the merchant's own treasury. Real USDC moved on Base Sepolia. The clip and the on-chain ledger below are the proof.
Settled on-chain, both merchants
One agent, two independent merchants, each paid to its own treasury. Every leg is a public transaction on Base Sepolia. The amount withdrawn nets the Boson protocol fee.
| Merchant | Item | Exchange | Landed | Paid to treasury |
|---|---|---|---|---|
| LaRuce Beauty | Angle Contour LR332 | 201 | 40.71 USDC | 40.51 USDC to 0x8CDb…905A |
| Ascend | Mango Blast Creatine | 202 | 42.77 USDC | 42.56 USDC to 0xe287…0336 |
The two live on-chain settlements above are the proof. Here is the session that produced them, step by step, and then the adapter surface up close.
The session: LaRuce first, then Ascend
One agent, one session, two independent merchants it had no prior relationship with. This is the path it actually took. Every figure traces to the live settlements above.
Arrive and take a Facet identity
The agent arrived cold at facet.llc, took on a Facet know-your-agent identity, and began browsing the open directory. From here on every UCP request it sent was signed RFC 9421 ES256, and every commit ahead was signed by the agent's own wallet. Facet never held a signing key.
First stop: searched "makeup brushes", found LaRuce
The agent searched the open directory for makeup brushes. It got back 10 directory matches plus one featured merchant that accepts agent payment, LaRuce Beauty, and ran a full UCP checkout through the adapter: profile, catalog, a Boson escrow offer signed by LaRuce's own on-chain seller key, and a commit signed by its own wallet. It settled live on Base Sepolia, and the proceeds withdrew to LaRuce's own treasury.
Second stop: searched "fitness supplements", found Ascend
Back at the directory, the agent searched for fitness supplements. Again 10 directory matches plus one featured agent-payment merchant, Ascend (mounted at ascendusa.facet.llc), then the same full UCP checkout: profile, catalog, a Boson escrow offer signed by Ascend's own seller key, a wallet-signed commit. It settled live on Base Sepolia, to Ascend's own treasury.
What we set out to prove
UCP, the Universal Commerce Protocol, is a fresh agent-commerce standard. The interesting question for an operator like Facet is not whether the standard exists, it is whether Facet can actually speak it: return a UCP profile where a normal store returns Shop Pay, hand an agent a UCP catalog, sign every message with the RFC 9421 ES256 scheme UCP requires, and carry a real settlement instrument all the way to a signed commit. To show that surface up close, we ran one leg through the adapter end to end against Ascend and captured every artifact below.
For this close-up the merchant is Ascend (storefront ascendusa.co), mounted on Facet at ascendusa.facet.llc. The product in the cart was a real Ascend SKU, Creatine Monohydrate Gummies (5000 MG) LYCHEE. The live session above bought a different Ascend item over the same code path.
The adapter surface, one leg up close
Profile: Facet speaks UCP
The adapter built the UCP business profile from real handler declarations, advertising Facet's two payment handlers. This is the answer Facet returns where a normal store returns Shop Pay.
Catalog: Ascend's live store, in UCP shape
The adapter pulled Ascend's live catalog from the Terminal and mapped it into UCP products. The UCP search_catalog request was then signed and verified in process with the adapter's own RFC 9421 ES256 implementation.
Offer: the merchant's own key signs the escrow
The Terminal computed Ascend's real landed cost (goods plus shipping plus Shopify tax) and returned a seller-signed Boson escrow offer. The offer was signed by Ascend's own on-chain seller key, not a Facet key.
Checkout: the buyer authorizes its own commit
The adapter built the UCP checkout carrying a boson_escrow_commitment instrument. The buyer signed the commit with its own wallet. Facet never touched the buyer's signing key, and the adapter asserted the non-custodial invariant at construction.
The RFC 9421 ES256 signature, verified
UCP requires net-new HTTP message signing. The adapter signed each UCP request and verified it in process. Below is the search_catalog request, lifted straight from the artifact bundle.
The signing key here is a harness key, not the Terminal's. The Terminal-signed path lands when the adapter deploys as a live route. The signing and verification are the real adapter implementation either way. The checkout create and complete requests were signed and verified the same way, both ok.
Adapter surface, in detail
| Adapter | @facet-llc/ucp 2026-06-22 (96 tests, merged) |
|---|---|
| Merchant Terminal | https://ascendusa.facet.llc |
| UCP version | 2026-06-22 |
| UCP handlers | llc.facet.x402, llc.facet.boson_escrow |
| Catalog mapping | 50 live Ascend products to 50 UCP products via toUcpCatalog |
| Line item | Creatine Monohydrate Gummies (5000 MG) LYCHEE (ascend-creatine-gummies) |
| ES256 signatures | search, checkout create, checkout complete, all verified ok (harness key) |
| Landed cost | 69.75 USD (59.99 goods, 5.00 shipping, 4.76 Shopify tax) |
| Escrow asset | USDC 0x036CbD53842c5426634e7929541eC2318f3dCF7e, amount 69750000 (6 decimals) |
| Boson escrow Diamond | 0x7de418a7ce94debd057c34ebac232e7027634ade (Base Sepolia) |
| Seller | id 28, offer creator 0x55c3908a93d80719CB88ec447Cc872F87C7Fd813 |
| Buyer | 0xC0D344C8D10F5f9C64Cb96148FcF176BA170D21E (own wallet, own signature) |
| Variant | protocol-surface capture; the live two-merchant settlement is summarized above |
Funds flow buyer to the Boson escrow Diamond to the merchant's own wallet. Facet never holds funds and never holds a funds-moving key. The merchant offer is signed by the merchant's own on-chain seller key. The buyer commit is signed by the buyer's own wallet. The adapter's assertNonCustodialBoson guard ran at checkout construction.
Status, stated plainly
Proven here
The UCP adapter ran end to end against two live Shopify merchants and settled both on chain: profile, catalog, ES256-signed UCP messages, a merchant-signed escrow offer, a buyer-signed commit, then commit, redeem, and withdraw to each merchant's own treasury. Real code, real signatures, real on-chain settlement.
Stated plainly
The UCP messages here are signed with a harness key, not the Terminal's own, until the adapter deploys as a live Terminal route. The settlement is real: the Boson commit, redeem, and withdraw transactions are on Base Sepolia and linked above.
Look at it yourself
We built this to be inspected, not just announced. The UCP interop layer ships as @facet-llc/ucp: the RFC 9421 ES256 signer and verifier, the catalog mapper, and the Boson escrow handler are all there to read. The runner reuses Facet's proven Boson plumbing on the back and wraps it in the real UCP adapter on the front, zero-spend by default.
The remaining step is to deploy the adapter as a live Terminal route so the UCP messages are Terminal-signed rather than harness-signed. Everything else closed the loop here: discovery, identity, the full UCP surface, and two real Boson settlements, end to end.