← Devlog
24 June 2026

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.

Adapter @facet-llc/ucp 2026-06-22 Merchants LaRuce + Ascend Terminals laruce.facet.llc, ascendusa.facet.llc Chain Base Sepolia (eip155:84532) Variant live on-chain settlement Captured 2026-06-24
Read this boundary carefully

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.

The full session, captured live: one agent, the open directory, two merchants, settled on Base Sepolia.

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.

MerchantItemExchangeLandedPaid to treasury
LaRuce BeautyAngle Contour LR33220140.71 USDC40.51 USDC to 0x8CDb…905A
AscendMango Blast Creatine20242.77 USDC42.56 USDC to 0xe287…0336
LaRuce   commit 0x0663…0942 · redeem 0xc818…08e7 · complete 0x7c5f…f2ae · withdraw 0xd284…ad3d Ascend   commit 0x004a…afe1 · redeem 0xe2bb…82cf · complete 0x9df7…b805 · withdraw 0x2952…fc69

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.

1

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.

2

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.

search makeup brushes   returned 10 matches + 1 featured (accepts agent pay): LaRuce Beauty
item Angle Contour LR332   exchange 201   seller_id 25
landed 40.71 USDC   paid 40.51 USDC to 0x8CDb…905A (net of the Boson fee)
on-chain commit 0x0663…0942, withdraw 0xd284…ad3d
3

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.

search fitness supplements   returned 10 matches + 1 featured (accepts agent pay): Ascend
item Mango Blast Creatine   exchange 202   seller_id 28
landed 42.77 USDC   paid 42.56 USDC to 0xe287…0336 (net of the Boson fee)
on-chain commit 0x004a…afe1, withdraw 0x2952…fc69

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

A

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.

built by buildBusinessProfile + buildPlatformProfile
rest ascendusa.facet.llc/ucp/v1   mcp ascendusa.facet.llc/ucp/mcp
handlers llc.facet.x402, llc.facet.boson_escrow   seller_id 28
B

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.

mapped by toUcpCatalog / buildSearchResponse   count 50 Facet products to 50 UCP products
signed by signRestRequest   verified by verifyRestRequest (adapter, in process, ok)
C

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.

landed 59.99 goods + 5.00 shipping + 4.76 tax = 69.75 USD (Shopify computed)
seller_id 28   offer creator 0x55c3908a93d80719CB88ec447Cc872F87C7Fd813 (Ascend's seller key)
sellerSig 0x16168ba4e76a1bd91969f02849b70960e74ea6dc9594f545f44cbb8a30940f7978a3a99da4bce25178e8f52779253a135d995670641316de99dc1bc6a9b4c21b1c
D

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.

built by buildBosonResponseConfig + buildBosonCommitCredential + buildBosonInstrument
instrument boson_escrow_commitment   credential boson_commit_authorization (buyer-signed, redacted)
buyer wallet 0xC0D344C8D10F5f9C64Cb96148FcF176BA170D21E   guard assertNonCustodialBoson

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.

covered @method @authority @path ucp-agent idempotency-key content-digest content-type created 1782241141 keyid facet-ucp-platform-harness-2026 Signature sig1=:32qP/FZqzh3YSlKqZoQJGtay6qlsxxg22WBP3dX6V8TXPquZuZIaiQkIPFswhRDcdEOIGMWMBPfQnuzIfSd+RA==: Content-Digest sha-256=:ZJZNyYXPZIQunSe9QzC9lytM+kvJ1e0206dPwm/YOVk=: verify ok keyid=facet-ucp-platform-harness-2026
adapter-signed, harness key

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 Terminalhttps://ascendusa.facet.llc
UCP version2026-06-22
UCP handlersllc.facet.x402, llc.facet.boson_escrow
Catalog mapping50 live Ascend products to 50 UCP products via toUcpCatalog
Line itemCreatine Monohydrate Gummies (5000 MG) LYCHEE (ascend-creatine-gummies)
ES256 signaturessearch, checkout create, checkout complete, all verified ok (harness key)
Landed cost69.75 USD (59.99 goods, 5.00 shipping, 4.76 Shopify tax)
Escrow assetUSDC 0x036CbD53842c5426634e7929541eC2318f3dCF7e, amount 69750000 (6 decimals)
Boson escrow Diamond0x7de418a7ce94debd057c34ebac232e7027634ade (Base Sepolia)
Sellerid 28, offer creator 0x55c3908a93d80719CB88ec447Cc872F87C7Fd813
Buyer0xC0D344C8D10F5f9C64Cb96148FcF176BA170D21E (own wallet, own signature)
Variantprotocol-surface capture; the live two-merchant settlement is summarized above
Non-custodial, by construction

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.

profile: real buildBusinessProfile catalog: real toUcpCatalog checkout: real boson_escrow instrument ES256: adapter verify ok offers: sellers 25 + 28 buyer: own wallet settled on-chain

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.

cd scripts/boson-demo doppler run -c dev -- deno run -A facet-ubi-terminal-demo.ts # zero-spend rehearsal doppler run -c dev -- bash -c 'SETTLE=1 deno run -A facet-ubi-terminal-demo.ts' # live on-chain

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.