prism.

Prism Network / Developer reference

Build against metered GPU infrastructure.

Prism matches digest-pinned container workloads with bonded NVIDIA capacity, holds the maximum cost in USDG, starts billing only after runtime admission, and resolves the lease through an onchain settlement record.

Execution
L40S cloud
Settlement
Robinhood Chain + USDG
Access
Temporary, key-only SSH
Billing unit
Confirmed runtime second
01

System model

Architecture#

The public web application is the identity boundary. It verifies Privy access tokens, establishes an HTTP-only same-origin session, rate-limits requests, and signs service-to-service identity assertions. Browsers never receive orchestration signing keys, settlement keys, device keys, or provider credentials.

BrowserPrivy + wallet
HTTPS
Web boundarySession + rate limit
Signed identity
Control planeQuote + lifecycle state
Asynchronous processing
WorkersProvider + chain

Data plane

Managed cloud leases receive a temporary direct SSH endpoint. Operator-owned infrastructure uses revocable gateway grants over outbound mTLS tunnels.

Control plane

PostgreSQL is the system of record for accounts, quotes, provider instances, lease transitions, settlement transactions, and proof publication.

Settlement plane

Robinhood Chain contracts enforce escrow limits, active-lease bounds, dispute timing, provider payment, platform fees, and refunds.

Governance plane

The contracts carrying leases today are owned directly by the Governance Safe, so a configuration change takes effect as soon as both signers agree. A second set is deployed that routes routine changes through a 48-hour timelock and leaves pausing, bond freezes and dispute resolution outside it. Migration details will be published before those contracts start carrying leases.

02

Renter integration

Quickstart#

  1. 01

    Prepare the workload

    Publish a Linux/amd64 OCI image to a public registry and address it by its complete immutable sha256 digest.

  2. 02

    Prepare access

    Create a disposable Ed25519 key. Submit only the single-line public key; the private key must never leave the renter machine.

  3. 03

    Authenticate

    Use the console to create a Privy-backed Prism session and connect the wallet that will fund escrow.

  4. 04

    Quote and fund

    Request a five-minute quote, approve the exact maximum USDG amount, and call createLease with the quote-derived reference.

  5. 05

    Confirm and connect

    Confirm the finalized funding transaction, poll the lease until active, retrieve access, and connect over SSH. The SDK pins the host key for the life of the lease and reports what that pin is worth: a key the node published under its own device key, or, for capacity brokered through a third-party cloud, no publishable key at all. Pass requireHostKey to refuse a lease that cannot be pinned.

03

Identity boundary

Authentication#

Interactive access uses Privy. The browser obtains an access token, posts it to/api/auth/session, and receives a secure, HTTP-only, same-site cookie with a one-hour maximum age. Mutation endpoints require both that session and a same-origin request.

Browser clients

  • Email, passkey, Google, Apple, or EVM wallet login.
  • Embedded wallet creation for accounts without an external wallet.
  • Explicit funding-wallet selection when multiple wallets are linked.
  • Session revocation on logout and server-side identity rejection.

Agent and service clients

Autonomous agents authenticate with a wallet signature instead of a browser session; see Agent access. Browser cookies and browser identity assertions are not accepted as service credentials.

04

Web application API

HTTP API#

Browser integrations use https://prismnetwork.tech/api/app. Responses are JSON, never cached, and include X-Request-Id. Mutation bodies must be application/json and no larger than 256 KiB.

GET/api/app/offersPublic

List currently schedulable, bonded offers.

POST/api/app/leases/matchSession

Create a five-minute quote for an image, runtime, VRAM floor, and optional node.

POST/api/app/leases/confirmSession

Bind a finalized funding event and Ed25519 public key to a quote.

GET/api/app/leasesSession

List leases owned by the authenticated account.

GET/api/app/leases/{lease_id}/accessSession

Return direct SSH or gateway access only after readiness and chain finality.

POST/api/app/leases/{lease_id}/releaseSession

End an active lease early. Access closes and the meter stops; settlement charges the seconds it was open and returns the rest of the deposit.

GET/api/proofPublic

Read the sanitized finalized/refunded public proof feed.

GET/api/activityPublic

Read the renter-anonymous recent network activity feed.

POST /api/app/leases/matchUTF-8 · JSON
{
  "request": {
    "image": "docker.io/nvidia/cuda@sha256:<64 lowercase hex chars>",
    "duration_seconds": 3600,
    "min_vram_mib": 45000,
    "preferred_node_id": null
  }
}
201 quote responseUTF-8 · JSON
{
  "quote_id": "9d417fc0-6f42-4d8b-a44f-9ab3cf1bc41f",
  "node_id": "0x<32-byte node id>",
  "image": "docker.io/nvidia/cuda@sha256:<digest>",
  "duration_seconds": 3600,
  "min_vram_mib": 45000,
  "rate_per_second": 222,
  "maximum_escrow": 799200,
  "expires_at": "2026-07-20T18:00:00Z"
}

Matching constraints#

  • image must be public, whitespace-free, at most 512 characters, and end in a complete @sha256: digest.
  • duration_seconds must be between 1 and 21,600 seconds.
  • min_vram_mib must be a positive integer compatible with an online offer.
  • preferred_node_id is optional; omit it for deterministic best-match selection.
  • The resulting maximum escrow cannot exceed 50 USDG.
05

Wallet transaction

Funding flow#

A quote does not reserve capacity or move funds. The renter wallet sends two sequential transactions: an exact USDG approval followed byLeaseEscrowV1.createLease. The client reference is the Keccak-256 hash of the UTF-8 quote UUID.

viem referenceUTF-8 · JSON
const maximum = BigInt(quote.rate_per_second)
  * BigInt(quote.duration_seconds);
const clientReference = keccak256(toBytes(quote.quote_id));

await wallet.writeContract({
  address: USDG,
  abi: erc20Abi,
  functionName: "approve",
  args: [LEASE_ESCROW, maximum],
});

await wallet.writeContract({
  address: LEASE_ESCROW,
  abi: escrowAbi,
  functionName: "createLease",
  args: [quote.node_id, quote.duration_seconds, clientReference],
});

Wait for both receipts and reject any reverted status. Then confirm the funding transaction through the application API. Confirmation independently verifies the finalized LeaseFunded event, node, duration, renter wallet, deposit, and quote-derived client reference.

POST /api/app/leases/confirmUTF-8 · JSON
{
  "quote_id": "9d417fc0-6f42-4d8b-a44f-9ab3cf1bc41f",
  "transaction_hash": "0x<funding transaction hash>",
  "ssh_authorized_key": "ssh-ed25519 AAAA... workstation"
}
06

State model

Lease lifecycle#

funded

Escrow event confirmed and associated with a five-minute quote.

provisioning

Capacity assignment and workspace provisioning are in progress.

ready

GPU and access admission checks passed; access start is pending finality.

active

Billable access is available to the authenticated renter.

closing

Credentials are revoked and the runtime is being destroyed.

settlement_pending

Usage evidence has produced an onchain settlement proposal.

disputed

Finalization is blocked pending Safe-controlled resolution.

finalized

Provider payment, platform fee, and renter refund are complete.

refunded

The lease ended without a provider charge.

failed

Provisioning failed before a final onchain transition was recorded.

Transitions are idempotent and persisted before external side effects. Provider instance IDs, chain transaction bytes, nonces, hashes, confirmation blocks, and final-state evidence survive worker restarts. A ten-minute provision timeout is the refund boundary for leases that never reach billable access.

07

Execution environments

Runtime modes#

PropertyManaged cloud capacityOperator-owned infrastructure
CapacityManaged NVIDIA capacity: RTX 6000 Ada, RTX 5880 Ada, RTX A6000, A40, L40S as stock allowsBonded operator-owned NVIDIA host
IsolationDisposable provider containerKata sandbox with VFIO GPU assignment
AccessTemporary direct root SSHRevocable SSH/Jupyter grant via mTLS gateway
ReadinessProvider state, GPU, VRAM, cost, SSH endpointSigned telemetry plus independent active gateway probes
EvidenceProvider instance and hourly costDevice-signed telemetry and gateway timing
AvailabilityLivePlanned; not available for production leases

Operators can also serve open-class leases from machines they already own, with the card left on the host driver and an optional workload filling the time between leases. Serving leases from a machine you already own covers the host requirements, the preflight, and the idle workload.

Container requirements#

  • Publicly pullable Linux/amd64 OCI image.
  • Immutable registry digest; tags alone are rejected.
  • Compatible with the host NVIDIA driver and requested CUDA major version.
  • No embedded credentials. Runtime access is injected separately.
  • Workspace storage is ephemeral and must be treated as disposable.
08

Robinhood Chain mainnet

Contracts#

USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168Compute settlement, 6 decimals
PRISM0x0A1e0Cc751f77C2C93760FC957CC8E4E779b2bC8Supplier bond asset, 18 decimals
NodeRegistryV10xa7Ca8e43c599b978095c391bd018A35BA6e7B71DSupplier bonds and offers
LeaseEscrowV10xfD4228eEEfC49e4b76A0CD40af9fdd546220B2FDLease funding and settlement
Governance Safe0xAF1113cE9E65D79daA87005A729Ab9Bc1A9fc60aAdministration, emergency and dispute authority
Chain ID
4663
RPC
rpc.mainnet.chain.robinhood.com
Maximum lease
6 hours
Maximum escrow
50 USDG
Provision timeout
10 minutes
Dispute window
5 minutes
Platform fee
10%
Network concurrency
25 active leases
09

Usage accounting

Settlement and proof#

Billing begins only after Prism confirms runtime and access readiness onchain. Closing revokes access first, destroys the execution environment, and then assembles bounded usage evidence.

  1. 01

    Observe

    Clamp confirmed runtime to the funded duration and preserve provider or physical-node execution evidence.

  2. 02

    Propose

    Submit an EIP-712 settlement carrying usage seconds, receipt hash, nonce, and deadline.

  3. 03

    Dispute

    Hold finalization for the escrow dispute window, currently 5 minutes. A renter can dispute; the governance Safe resolves disputed outcomes.

  4. 04

    Finalize

    Pay 90% of the charge to the provider, route the 10% platform fee, and refund unused escrow.

  5. 05

    Publish

    Verify the final chain event and expose a sanitized, canonical receipt in the public proof feed.

Public receipts omit renter/provider wallet addresses, precise geography, image digests, terminal output, files, and private telemetry. Proof establishes a platform-attested usage record paired with a final onchain event; it does not prove faithful workload execution or confidential computing.

10

Trust and abuse boundaries

Security model#

Enforced controls

  • Exact quote-bound funding event verification.
  • Digest-only public image admission.
  • One active lease per node and 25 network-wide.
  • 50 USDG and six-hour contract limits.
  • Device signature, freshness, and replay checks.
  • Encrypted stored access credentials.
  • Replay-safe chain submissions with reorg-aware confirmation.

Excluded protections

  • Host confidentiality or trusted execution on a GPU lease. Confidential inference is a separate tier, served from a relayed enclave with its own attestation endpoint, and does not run on leased Prism GPUs.
  • Protection from a malicious provider operator.
  • Durable workspace storage.
  • Uninterrupted infrastructure-provider availability.
  • Independent smart-contract assurance.
  • Faithful execution of arbitrary renter workloads.

Report a vulnerability#

Do not publish an exploitable vulnerability in a public issue. Use this repository's GitHub private vulnerability reporting or email security@prismnetwork.tech. Include the affected commit, component, reproduction, impact, and suggested containment. Never include live credentials or renter data.

11

Production behavior

Operations#

Idempotency and recovery

Provider launches reconcile by a unique lease label. Chain submissions persist signed bytes before broadcast. Workers retry from persisted state and reject conflicting final-state transitions.

Capacity admission

Prism publishes an L40S offer only when available capacity satisfies model, VRAM, reliability, and pricing requirements.

Failure containment

Provision failures close or refund rather than starting billing. Destruction is retried before final settlement. Emergency pause blocks new leases without blocking existing refunds.

Observability

Use the response request ID to correlate web, control-plane, provider, and chain records. Public proof publication remains decoupled from financial settlement.

Production availability#

Prism expands public capacity after end-to-end production validation covers quoting, funding, provisioning, readiness, teardown, settlement, refunds, provider payment, and proof publication. Failed validations preserve diagnostic evidence and pause new lease funding until the affected service is restored.

12

Response handling

Errors and retries#

HTTPCodeMeaning
400invalid_request

Malformed path, JSON, duration, image digest, GPU request, or wallet payload.

401identity_required

No valid Privy-backed Prism session is available.

403invalid_origin / risk_hold

The mutation is cross-origin or the account is restricted.

404no_match / quote_not_found

No compatible capacity exists or the quote is absent/expired.

409capacity_reserved

Compatible capacity exists but is held by another renter's open quote; retry.

409network_capacity / identity_replay

A concurrency bound or replay guard rejected the operation.

413request_too_large

The application API body exceeds 256 KiB.

415unsupported_media_type

A mutation was not submitted as application/json.

429rate_limited

The same-origin API budget was exceeded; honor Retry-After.

503service_unavailable

A required identity, rate-limit, orchestration, or provider service is unavailable.

  • Retry 429 only after Retry-After.
  • Retry transient 503 responses with exponential backoff and a maximum delay, without changing the request.
  • Before resubmitting a funding transaction, verify the wallet receipt and account lease history.
  • funding_not_final is expected before the required confirmation threshold and can be polled safely.
  • Treat other 4xx responses as non-retryable until the request or account state changes.
13

Autonomous integration

Agent access#

Autonomous agents integrate without a browser or Privy. An agent proves control of its funding wallet by signing a short-lived challenge, exchanges the signature for a bearer session, and drives the same renter surface — offer discovery and the lease lifecycle — over the /api/agent endpoints. Escrow, readiness, metering, and settlement are identical to the browser path.

GET/api/agent/challengePublic

Issue a single-use, five-minute challenge for a wallet address.

POST/api/agent/sessionSignature

Exchange a wallet-signed challenge for a one-hour bearer session.

ANY/api/agent/proxy/{path}Bearer

Authenticated passthrough to the renter API. Only offer and lease routes are reachable.

@prismnetwork/agent-sdkUTF-8 · JSON
import { PrismAgent, DEFAULT_IMAGE } from "@prismnetwork/agent-sdk";

const agent = new PrismAgent({
  privateKey: process.env.AGENT_KEY,
  escrow: "0xfD4228eEEfC49e4b76A0CD40af9fdd546220B2FD",
});

await agent.authenticate();
const lease = await agent.lease({ image: DEFAULT_IMAGE, durationSeconds: 900, minVramMib: 16000 });
const out = await agent.run(lease, "nvidia-smi");
console.log(out.stdout);
await agent.endLease(lease);

Agent SDK

Headless leasing for Node. Authenticate, lease a digest-pinned image, run commands over SSH, and release — funded in USDG with native gas on Robinhood Chain.

MCP server

The same leasing exposed as Model Context Protocol tools, so an MCP client can list GPUs, lease and run a command, and release the lease.

x402 one-shot compute

Pay-per-job GPU execution over HTTP 402. Submit a command, pay USDG, and poll for the output; the service leases, runs, and releases on your behalf, refunding a failed job.

Wallet as identity

The signing wallet is the subject of every request. The agent boundary reaches only renter routes; operator, node, and gateway surfaces are rejected.

Vault

Cards, identity documents and credentials sealed under a wallet-derived key that never leaves your machine. Each item names the weakest workspace class it may be released into, and a lease below that floor is refused.

Clients#

Four packages reach the same renter surface, so the choice is only which runtime you are already in. Every one of them reads offers without a wallet; a key is needed to lease, never to look.

Node
npm i @prismnetwork/agent-sdk · lease, run over SSH, release
Python
pip install prismnetwork · the same lifecycle from a script
Coinbase AgentKit
pip install prism-agentkit · an action provider, so a LangGraph agent rents its own GPU
MCP
claude mcp add prism -- npx -y @prismnetwork/mcp · eleven tools in any MCP client
14

Renter-held encryption

Vault#

A workspace is administered by someone else, so anything that must stay private belongs in the vault instead. Items are sealed under a key derived from a wallet signature on the renter's own machine and never transmitted, which leaves the control plane holding ciphertext and no means of reading it. The browser and the agent SDK run the same client, so one wallet opens one vault from either.

GET/v1/vault/itemsBearer

List sealed items with their version and trust floor. Values are never returned in a listing.

PUT/v1/vault/items/{item_id}Bearer

Create an item, or replace one by naming the version being replaced.

GET/v1/vault/items/{item_id}Bearer

Fetch one sealed item for the caller to decrypt locally.

DELETE/v1/vault/items/{item_id}Bearer

Delete an item and its ciphertext.

POST/v1/vault/items/{item_id}/releaseBearer

Authorize an item into a lease that meets its trust floor.

GET/v1/vault/releasesBearer

Read which items were released into which leases.

@prismnetwork/agent-sdkUTF-8 · JSON
await agent.vault.unlock();

const card = await agent.vault.put(
  { pan: "4111111111111111", exp: "09/29" },
  { label: "billing card" },
);

// Sealed at the default floor, so this is refused on open capacity
// rather than exposing the card to a host that can read it.
await agent.vault.releaseInto(lease, card.item_id, { json: true });

Properties and limits#

  • The account, item, version, and trust floor are authenticated into the ciphertext, so relocating an item, replaying an old version, or lowering its floor produces a failed decrypt rather than a wrong answer.
  • Writes are compare-and-set. Omitting previous_version creates and fails on an occupied item, so concurrent writers cannot silently drop one another.
  • Every item names the weakest workspace class it may be released into. New items default to confidential, above what the network can serve, so a release into current capacity is refused.
  • Signatures are deterministic, so the same wallet reproduces the same key on any machine. No recovery copy is held anywhere; losing the wallet loses the vault.
  • Ciphertext is capped at 160 KiB per item, with 512 items per account.