Felix FaerberandClaude Opus 4.7 9503b19378 pricing: budget maxPayment generously to avoid PaymentTooHigh reverts
The previous formula computed maxPayment from the estimated input length
plus offering.maxContextTokens — but the on-chain offering for some
provider models has maxContextTokens=0, so output cost was 0 and the
posted maxPayment only covered the (under-estimated) input side. The
provider's claimJob then reverted with PaymentTooHigh, leaving the
gateway hung waiting for a PSS job_deliver that never came.

Match the t4t/container homelab gateway: assume both prompt and
completion can be (max_tokens + 1M-token headroom), budget at the full
split rate, let the JobEscrow contract refund the unused portion. The
provider's actual claim is always smaller, so PaymentTooHigh can't fire.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:29:50 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00
2026-05-20 15:08:45 +03:00

Hosted T4T Gateway

Multi-tenant frontend for the Token4Token inference network. Users sign up with Google / email, get 50 free virtual xBZZ, and call OpenAI-compatible endpoints without touching a wallet, Bee node, or Gnosis RPC.

Custody model: one operator wallet handles all on-chain transactions and Swarm operations. Tenants are off-chain ledger entries denominated in xBZZ. Providers see one on-chain client address (the operator's), not per-tenant addresses.

See docs in t4t/ for the wider design context.

Stack

  • Bun + Elysia (HTTP)
  • viem (Gnosis Chain bindings) — shared with t4t-container
  • bee-js (Swarm) — shared with t4t-container
  • Prisma + Postgres (multi-tenant ledger)
  • BullMQ + Redis (queues + distributed locks + operator-wallet nonce)

The gateway engine code (provider selection, chain I/O, PSS routing, ECIES envelope) is vendored from t4t/container/src/ into src/t4t/. See src/t4t/VENDORED.md for the drift policy.

Quick start

cp .env.example .env
# fill in OPERATOR_PRIVATE_KEY, REGISTRY/ESCROW/XBZZ addresses, JWT_SECRET_KEY

docker compose up -d postgres redis bee
bun install
bunx prisma migrate deploy
bun run dev:api
# in another shell:
bun run dev:worker

Layout

src/
  api.ts               # Elysia HTTP entry
  worker.ts            # BullMQ workers + claim watcher
  db.ts                # model.<entity> CUD wrappers (write + enqueue)
  env.ts               # zod-validated process.env
  auth/                # JWT, Google OAuth, email signup
  users/, accounts/, apiKeys/, pricing/, gateway/, chain/
  queue/               # connection, registry, lock, processor base, service
  t4t/                 # VENDORED from t4t-container
prisma/schema.prisma
test/                  # E2E specs
S
Description
No description provided
Readme
161 KiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 99.7%
Dockerfile 0.3%