Skip to main content

Threat Model

ThreatControl
Unbacked private creditCredit requires a real uncredited reserve deposit and solvency checks
Duplicate/replayUnique request IDs, nonces, processed mappings, consumed actions and nullifiers
Forged TEE resultSelected TEE + signer epoch + signature verification + registry binding
Malicious relayerRelayer can submit but cannot change a signed authoritative result
Client alters withdrawalSensitive fields are rejected; amount/destination come from authoritative state
Concurrent withdrawalsPrivate balance moves to a pending lock before settlement
Stale rootTEE and gateway both verify the expected old root
Failed token transferEVM revert restores root/outstanding/nullifier changes
Balance disclosureNo public Solidity balance getter for private employee balances; account-scoped reads
Backend compromiseDatabase is not authoritative for private-credit balances
Cross-domain replayChain, extension, contracts, request, nonce, expiry and roots are bound
Admin abusePause/role controls; no arbitrary credit mint path in the stated design

Required invariant

Allocation preserves aggregate outstanding credit. Successful redemption decreases reserve backing and outstanding credit by the same amount.

Residual risks

The source explicitly calls out:

  • FCC maturity,
  • TEE image rollout risk,
  • need for independent contract review,
  • deterministic-build verification,
  • registry/proxy monitoring,
  • token-behavior validation,
  • key custody review,
  • global-root write contention.

These are part of the design story, not footnotes to hide.