Wallet signer and provider architecture
Fased does not give skills, chats, tasks, plugins, or the Gateway a generic private-key or raw-signing API. Wallet work moves through a typed provider adapter and an independently enforced policy. The important rule is:Supported custody lanes
Privy is not a supported signing lane. Its adapter is an unavailable placeholder
and Fased refuses to save credentials as if creation or signing worked.
The legacy Node
embedded-keystore is not an execution option. Existing legacy
state must be migrated to the native signer; it is never silently reopened or
decrypted by the Gateway.
What Go owns
For the native lane,fased-signerd owns:
- wallet creation and import;
- encrypted private-key state and re-encryption;
- the signer master key;
- wallet role and versioned policy;
- signer-owned RPC configuration;
- WebAuthn credentials, challenges, and single-use approvals;
- durable request ids, transaction digests, signed bytes, cap reservations, daily totals, broadcast state, and reconciliation.
fased wallet operator lifecycle; Hosting routes it through the
peer-credential-checked operator socket that the Gateway account cannot open.
Protocol v2 and typed operations
The Gateway and signer negotiate protocol-v2 capabilities. Missing or incompatible capabilities fail closed. The native application socket accepts narrowly typed operations, including:- native SOL transfer;
- checked SPL transfer with exact mint, amount, source, and destination;
- generated SAT mining, claim, sweep, cleanup, bond, and federation actions;
- signer-validated Jupiter swap and Trigger order operations;
- exact review preparation, approval, execution, status, and reconciliation.
signTx, generic caller-selected serialized
transactions, raw instructions, generic messages, or a custody-control relay.
Typed Jupiter swap and Trigger operations may carry a provider-produced
transaction artifact, but Go decodes that artifact and semantically validates
the exact operation, amount, programs, mints, destinations, PDAs, signer flags,
and writable accounts before policy approval.
For a checked SPL transfer, Go derives both canonical token accounts and always
adds the Associated Token Program’s idempotent destination-account creation.
It validates the existing source and any existing destination, explicitly
requires the System/Associated Token/Token programs in policy, and includes
possible account rent in the signer-owned fixed SOL reservation.
Every potentially mutating request admitted to the native signer has a stable
request id and immutable intent digest. The caller must persist and reuse that
same id across transport failure or restart; the signer never invents a safe
replacement for a caller that loses it. The signer stores its state atomically
in bbolt:
reservedbroadcastconfirmedfailedunknown
broadcast and unknown consume the reserved cap. An ambiguous response is
never retried with a replacement signature. Fased first reconciles the exact
stored signature or signed transaction bytes.
Reviews and WebAuthn
Every manual native reviewed Agent, Mining, or Vault action uses signer-owned WebAuthn. Narrowly autonomous Agent and generated Mining operations are the explicit-policy exceptions. The challenge binds:- wallet id and role;
- exact operation and immutable transaction or federation digest;
- decoded destinations, mints, and amounts;
- policy version and hash;
- request id, nonce, and short expiry.
Wallet roles
- Agent: reviewed or narrowly autonomous typed SOL/SPL work. Autonomous use needs explicit positive per-transaction and daily caps plus exact programs, assets, mints, and destinations.
- Mining: typed SAT protocol actions and the SOL needed for fees/capital. Generic wallet sends remain reviewed; Mining is not a general token-trading wallet.
- Vault: manual-only reviewed reserve and bond authority. Do not enable generic direct signing to make Vault sends work.
Skills and providers
Installing a skill never grants wallet authority. A wallet-capable skill needs an explicit Agent-wallet grant with actions, wallet ids, chain, source registry (or explicitlocal source), mints, amount/slippage caps, and any
autonomous or scheduled permission. The signer policy remains the final
authority.
Provider credentials are secrets too. Keep Turnkey API credentials and RPC
URLs out of chats, prompts, skill files, command arguments, and shell history.
The Turnkey API credential is loaded by the Gateway, so a dedicated restrictive
Turnkey policy must remain safe even if that process is compromised. Use the
supported credential and signer-admin input paths.
RPC ownership
Protocol-v2 native execution reads encrypted, versioned, per-wallet execution RPC from signer-owned state, not Gateway wallet environment variables. Signer health exposes readiness and a keyed hash, not its URL/token. The Gateway separately needs a read/preparation RPC for dashboard token inventory, SAT watchers/readiness, federation/bond inspection, Jupiter/Trigger preparation, and provider/hardware lanes. The simple wizard initially stores the same endpoint in both planes, so it is visible to Gateway code. A stronger deployment uses a distinct read-only Gateway credential. The Gateway has no arbitrary RPC proxy through the signer.Choosing a lane
- Use Local native signing for development and low-value same-user operation.
- Use Local Docker when you want reproducible local containers, not VPS Hosting.
- Use VPS Hosting when you want an always-on self-hosted signer separated from the Gateway account.
- Use a hardware-backed Wallet Standard account for reserve/Vault funds that should require on-device review.
- Use Turnkey only with a dedicated API user and a provider policy you have verified independently.
- Keep long-term reserve outside unattended Agent and Mining wallets.