Skip to main content
Functor’s architecture is built around a single principle: policy enforcement belongs onchain. No server evaluates policies. No database stores rules. The EVM is the policy engine.

The three contracts

ContractTypeRole
KeyStoreStandalone contractOnchain registry of public keys per account. Stores key material, tracks sign counts, manages activation and revocation.
WebAuthnValidatorERC-7579 ValidatorInstalled on the smart account. Verifies passkey/hardware signatures (P-256) against the KeyStore. Returns the keyId of the signer.
FunctorPolicyHookERC-7579 HookInstalled on the smart account. Runs before and after every transaction. Enforces policies, collects fees, updates state, emits audit events.

How they connect

The validator answers who is signing. The hook answers what are they allowed to do.

Two repos

RepoContains
functor-keystoreSolidity contracts: KeyStore, validators, FunctorPolicyHook. Foundry project. Deployed onchain.
functor-engineDashboard (Next.js), SDK (TypeScript). Reads and writes to the onchain contracts. No server-side policy logic.
The dashboard and SDK are convenience layers. All state lives onchain. A developer could interact with the contracts directly via Etherscan or cast and get the same behavior.

ERC-7579 compatibility

All modules implement the ERC-7579 standard. This means they work on any compliant smart account:
  • ZeroDev Kernel - native ERC-7579
  • Biconomy Nexus - native ERC-7579
  • Safe - via the Safe7579 adapter
One deployment per chain. Works across the smart account ecosystem.

Security properties

  • No contract holds user funds. Fees are direct transfers. Policy state is logic, not money.
  • Non-custodial. Private keys never touch Functor infrastructure. Keys are in hardware (Secure Enclave, FIDO2) or held by the agent locally.
  • Fail-safe default. If the hook can’t evaluate a policy (missing data, unknown rule type), the transaction is denied. Policy failures never bypass enforcement.
  • Zero vendor lock-in. Functor’s tech stack is credibly neutral. Built on ERC-7579, an open standard supported by ZeroDev, Biconomy, Safe, and Rhinestone. The developer can uninstall Functor modules at any time and switch to any other ERC-7579 module. Their smart account, keys, and funds are theirs regardless.