feat(x402): attach BlockRun builder-code service code to payments#9
Conversation
Tag every x402 payment this SDK signs with the ERC-8021 Schema 2 service code s: ["blockrun"] so BlockRun-originated traffic is attributed on-chain. Merged into builder-code.info.s in both the EVM and Solana payload builders, preserving any app code (a) the server echoes back in its 402. Encoding into settlement calldata is handled by the CDP facilitator; the client only sets the JSON field, so no new dependency or CBOR is required. Docs: https://docs.cdp.coinbase.com/x402/core-concepts/builder-codes
|
Reviewed and verified with a live settle — merging. The signature is provably untouched. The one thing tests couldn't prove was CDP's acceptance of an unregistered The Two non-blocking notes for later:
Thanks — and same as #47, the diff was tight and easy to reason about. |
…lish #9: BlockRun's ERC-8021 service code s:["blockrun"] is now attached to every payment this SDK signs (EVM + Solana). The signed authorization is byte-identical — extensions sits on the outer envelope, not in the EIP-712 message/types/domain. Verified with a real settle on Base rather than unit tests alone: built the branch into @blockrun/mcp and drove one live x402 call (64.902027 -> 64.899027); CDP accepted the unregistered service code. #12: publish.yml now installs with pnpm, matching ci.yml and packageManager. package-lock.json is gone. This release is the first through that path — the old npm ci step would fail outright now, which is the point: one lockfile, one truth.
What
Tags every x402 payment this SDK signs with the ERC-8021 Schema 2 service code
s: ["blockrun"], so payments originated through BlockRun's client SDK are attributed to BlockRun on-chain.Reference: CDP Builder Codes
How
withBuilderCodeServiceCode()mergess: ["blockrun"]into the payload'sbuilder-code.info, preserving any app code (a) the server echoes back in its 402 response (so we never clobber seller attribution).createPaymentPayload) and Solana (createSolanaPaymentPayload).BLOCKRUN_SERVICE_CODEfor reuse.Why this is all the client needs
The CBOR / ERC-8021 calldata encoding is done by the CDP facilitator at settlement time (it reads
builder-code.info.sfrom the payment payload). The client only sets a JSON field — so this needs no new dependency, no@x402/extensions, no CBOR and works unconditionally on every payment.Scope / inheritance
This SDK (
@blockrun/llm) is the payment layer for@blockrun/mcp,@blockrun/clawrouter-codex, and other TS consumers — they inherit this attribution automatically once they bump to the released version.Buyer-side only. Seller-side app code (
a) on the gateway is tracked separately (needs a registered code from dashboard.base.org).Test
test/unit/x402.test.ts: service code is always attached; server-echoedais preserved whensis added.