Skip to content

add the arc rail and make the workload pin refreshable - #199

Merged
winterstacks merged 3 commits into
mainfrom
feat/arc-rail
Sep 16, 2026
Merged

winterstacks merged 3 commits into
mainfrom
feat/arc-rail

Conversation

@winterstacks

Copy link
Copy Markdown
Contributor

Adds USDC on Circle's Arc L1 (chain 5042) as a third x402 rail, and stops an upstream enclave redeploy from breaking every installed client.

Arc

USDC is Arc's gas token, so a wallet that can pay needs no second asset to settle. The rail is offered only when X402_ARC_PAY_TO is set.

A startup probe reads the chain id and the token's EIP-712 domain before anything is quoted. Arc's USDC reports name() "USDC" where Base reports "USD Coin", and signing the wrong one produces a well-formed signature that recovers to nobody. A probe failure drops Arc alone; Base and Robinhood do not care that Circle's chain is unreachable.

Verified against mainnet: the domain reproduces the token's DOMAIN_SEPARATOR() exactly, and Base's domain does not.

Workload pin

The upstream enclave redeployed twice in four days. A commit pinned only in a published package refuses every call until each client upgrades, which is what happened. Accepted commits can now come from /v1/confidential/workload. The launcher image digest and the OS image hash stay compiled in, so a wrong or hostile list can refuse a good workload but never admit a different one.

Also

  • An unreachable chain answers 402 rather than taking the gateway down with every warm lease.
  • A test network marks itself in the quote. It sits beside mainnet rails priced identically, and the chain id was the only thing telling them apart.
  • Payment keys are namespaced by chain, so the same nonce is not refused as a replay on a second rail.
  • A spent nonce reports payment_already_redeemed instead of sharing invalid_transaction_state with every other revert.
  • The health check retries a slow reconciliation scrape before paging, and uses the User-Agent the CDN requires.

Verification

333 JS tests, 199 Python plus 18 subtests. Live on Arc mainnet: a paid generation settled in tx 0x733b640c73b60b55cf28430f39b213f0374d49ccbc66fdd749f3d4aa308039a4, block 21133498.

Arc is Circle's L1 and USDC is its gas token, so a wallet that can pay needs
no second asset to settle. The rail is offered only when X402_ARC_PAY_TO is
set, and a startup probe reads the chain id and the token's EIP-712 domain
before anything is quoted: Arc's USDC reports name() "USDC" where Base
reports "USD Coin", and signing the wrong one produces a signature that
recovers to nobody. A probe failure drops Arc alone rather than the process.

A test network now marks itself in the quote. It sits beside mainnet rails
priced identically, and the chain id was the only thing telling them apart.

The upstream enclave redeployed twice in four days, and a commit pinned only
in a published package refuses every call until each client upgrades. The
accepted commits can now come from /v1/confidential/workload; the launcher
image digest and the OS image hash stay compiled in, so a wrong list can
refuse a good workload but never admit a different one.

Also: an unreachable chain answers 402 instead of taking the gateway down,
payment keys are namespaced by chain so the same nonce is not refused on a
second rail, and a spent nonce is reported as payment_already_redeemed
rather than sharing invalid_transaction_state with every revert.

Signed-off-by: winterstacks <release@prismnetwork.tech>
@winterstacks
winterstacks requested a review from a team as a code owner September 16, 2026 10:45
winterstacks added 2 commits September 16, 2026 12:48
The measured compose carries an upstream path the secret scanner reads as a
leaked local one, which is why the fixture stored it encoded. The attestation
endpoint now returns it plain, so a verbatim recapture reintroduced the trip.
Re-encode on capture; the bytes round trip exactly and the hash still holds.

Signed-off-by: winterstacks <release@prismnetwork.tech>
Compute is quoted and paid in USDG or USDC, so a renter never has to hold
PRISM to rent a GPU. What staking buys is a lower rate on the machines
operators reserve for stakers: 177 base units per second against 222, about
twenty percent, on two of the six offers published today.

Signed-off-by: winterstacks <release@prismnetwork.tech>
@winterstacks
winterstacks merged commit 7214528 into main Sep 16, 2026
10 checks passed
@winterstacks
winterstacks deleted the feat/arc-rail branch September 16, 2026 10:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant