Quickstart
Clone, install, test, and run the paper-copy engine — the fastest path to seeing SEAT work.
This gets you from zero to a running paper-copy engine and a local blotter. No private key is required for anything on this page.
Requirements
| Tool | Version | Notes |
|---|---|---|
| Node.js | >= 18 | Enforced by the root package.json engines field |
| pnpm | 9.0.0 | Pinned via packageManager in the root manifest |
| Foundry | latest | forge, cast — installed to ~/.foundry/bin by foundryup |
Install and test
git clone git@github.com:seat-hq/seat.git
cd seat
make install # forge-std + OpenZeppelin submodules, then pnpm install
make test # forge test -vvv (90 tests across 13 suites)Run the paper-copy engine
Phase 0 is a deterministic simulation: five hypothetical leader fills go through the real keeper pipeline (normalize → session → risk → paper execute → NAV) and print an explainable report. No network, no key, no funds.
make paperYou will see each fill's session, action (accept / resize / skip), intended vs executed size, and a plain-language reason — for example, an oversized fill capped by maxFillUsdg, or a weekend fill skipped because the session is closed. The run also writes the fill tape to keeper/data/fills.json (gitignored) with source=fixture.
Run the app
make app-devThe blotter defaults to testnet 46630. With no wallet connected it renders the paper desk (clearly labelled test data). Connect a wallet on 46630 — where a real cash vault is deployed — and deposit/redeem become live writes. See Application.
Run the keeper against testnet config
make keeper-testnetThis runs the keeper entrypoint with EXECUTION_MODE=PAPER (default) on chain 46630: it resolves the desk binding, processes the fixture tape, and appends outcomes to keeper/data/fills.json. Live execution stays fail-closed on testnet because no SwapAdapter router is configured there.
Where to go next
- Concepts — the protocol vocabulary
- Environment variables — every variable, documented
- Deployment — guarded testnet/mainnet deploys
- Keeper — how the off-chain side works