# Fluidkey Markdown version of https://ethbeat.org/privacy/projects/fluidkey ## Summary - Metrics: Not tracked. Data tracking is not available for this project. - Tracked on: Ethereum, Base Chain, Arbitrum One, OP Mainnet, Polygon PoS, Gnosis Chain - Runs on: Base Chain, Arbitrum One, OP Mainnet, Polygon PoS, Gnosis Chain - Attributes: Stealth addresses, Any amount, DeFi - Reference app: Fluidkey web app (closed source) ### Risks - Privacy: Recipient privacy. Public observer: Recipient private (sentiment: good); Chain analyst: Recipient private (sentiment: good); Network observer: Recipient at risk (sentiment: warning); Privileged insider: Recipient exposed (sentiment: bad); Future adversary: Recipient private (sentiment: good). - Trusted setup: No setup (sentiment: neutral). No setup: This project does not have a ZK system and thus no setup-related trust assumptions. - Exit window: Infinite (sentiment: good). The user's funds sit in Safes controlled only by their keys. The open recovery app finds them and Eternal Safe withdraws them, both without Fluidkey. Money in auto-earn vaults follows the vaults' withdrawal rules. This protocol fails the walkaway test: users cannot fully use it if every centralized participant disappears. Name lookups, new addresses in the app, finding the user's Safes and submitting sends all run on Fluidkey's servers. - Reproducibility: Partially reproducible (sentiment: warning). The web and mobile apps are closed source. The open stealth account kit and recovery app derive keys, verify addresses and recover funds without Fluidkey. The API, ENS gateway, indexer and relayer are closed. ### About A stealth-address wallet that receives every payment on a fresh Safe, with optional yield and bank transfers. ### Links - Website: https://app.fluidkey.com - Docs: https://docs.fluidkey.com, https://docs.fluidkey.com/technical-documentation/technical-walkthrough/, https://docs.fluidkey.com/readme/recovery/ - Repository: https://github.com/fluidkey/fluidkey-stealth-account-kit, https://github.com/fluidkey/sara, https://github.com/fluidkey/fluidkey-earn-module, https://github.com/fluidkey/fluidkey-hydrator - Social: https://x.com/fluidkey - Contracts explorer (Disco): https://disco.l2beat.com/ui/p/fluidkey ## Protocol description Fluidkey is a wallet that gives the user a fresh receiving address for every payment and shows them all as one account. Payers use the user's name, like l2beat.fkey.eth, and each lookup returns a new address. Outsiders see separate payments, while Fluidkey sees all of them. The user trusts Fluidkey, which holds a key that sees all their addresses, runs the closed-source app and submits every send. If the user signs in with Google, Apple, email or Farcaster on the web, Privy also takes part in creating their keys. The user's funds sit in Safes that only they control, and an open recovery app withdraws them without Fluidkey. ### Flow 1. **Request an address.** The app, the API or a lookup of your name asks Fluidkey for a new address. For name lookups, Fluidkey's server signs the answer, so a payer has to trust that the address is yours. 2. **Receive.** Each address is a new Safe controlled by a one-time key that only you can derive. It receives funds before it is deployed. 3. **Send.** Fluidkey picks Safes with enough balance, your app signs the transfers, and Fluidkey submits them. While open, the app also signs any transfer Fluidkey's server marks as approved, without asking. Spending from several Safes at once links them onchain. ### Keys The user's keys come from a wallet signature and a four-digit PIN. On the web, that wallet is a Privy wallet behind a Google, Apple, email or Farcaster login, unless the user connects their own. Privy's code creates the signature, and Privy holds part of the wallet's key. The mobile apps create keys on the device instead. Fluidkey gets a viewing key that shows all the user's addresses, while only the user can spend. ### App Fluidkey also offers a closed mobile app, whose code updates from Expo between store releases. The web app reads the chain through Fluidkey's proxy to Alchemy. Over Tor, its 20 MB of code can take minutes to load. Outside services see a Google, Apple, email or Farcaster login (Privy), the username (Plausible, and Intercom for support) and app errors (Sentry). Banking and identity checks use Noah, Bridge, Persona and Sumsub. For recovery, two open tools work without the app: the [stealth account kit](https://github.com/fluidkey/fluidkey-stealth-account-kit) creates addresses, and the [recovery app](https://github.com/fluidkey/sara) finds and deploys the user's Safes. Eternal Safe (eternalsafe.eth) then withdraws the funds. The recovery app sends each deployment from the wallet that created the user's keys, which links the two onchain. ### Auto-earn With auto-earn on, Fluidkey deposits incoming tokens into yield vaults without repeated user approval. Fluidkey's multisig decides which vaults are offered, and the user's Safe switches to a new set only when they choose. The user can turn auto-earn off, while money already deposited keeps the vaults' risks and withdrawal limits. ### Score Fluidkey computes a score for each account, partly from its balance. When the user claims it in the app, a token on Base that cannot be transferred goes to a separate stealth address of their account. That address holds nothing else, but it shows publicly that someone uses Fluidkey. ### Compliance Bank transfers through Noah need identity verification. Hide Trail, an optional route for more privacy, sends funds through Houdini and two exchanges, which see the route and can hold the funds. ### Fees Sends are free for 20 transactions a day on every chain but Ethereum, where gas is paid in ETH or a supported token. Auto-earn is free, except for USDC on Base in the Yield profile, where a Morpho fee wrapper takes 1% APY. Bank transfers pay no volume fee up to 3,000 USD a month, or 20,000 USD from a score of 10,000. Beyond that the volume fee is 0.10% to 0.30%, depending on the average balance. SWIFT and Fedwire transfers also cost 25 USD each, with one or more free a month from a 50,000 USD average balance, per the [docs](https://docs.fluidkey.com/readme/bank). ## Privacy **What the protocol promises:** Hides which account a receiving Safe belongs to. The payer knows the address it was given; sender, asset, amount and where the funds go next are public. **Apps** - **[Fluidkey web app](https://app.fluidkey.com)** (Reference): The ratings assume this app, since 2026-10-13 ยท Closed source, build entrypoint-908cd83cc41461117345e525485f5d71, checked 2026-10-30 [How we pick the reference](https://ethbeat.org/publications/privacy-methodology#reference-app) Ethereum is public by default. Each protocol is rated on its main privacy promise, like hiding who paid, who received, how much, or which deposit became which withdrawal. Against each adversary, the colour says whether it holds for a careful user with the app's own settings: green yes, yellow only with significant extra work, red no. Fields marked at risk stay private only under the condition in their note. ### Public observer Recipient private (sentiment: good) **Who:** Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links. Examples: A curious counterparty, an employer, a journalist. Each payment reaches a fresh Safe, and nothing onchain names the account behind it. A send that draws from several of the user's Safes shows onchain that they belong together. **Advice:** Generate a fresh address for each receive, label payments by payer and send from one label at a time, and send to destinations with no public link to the user. **Sources** - [Counterfactual receiving Safe and one-time stealth signer](https://docs.fluidkey.com/technical-documentation/technical-walkthrough/#3-stealth-accounts) - [Safe owner and initialization data determine the address](https://github.com/fluidkey/fluidkey-stealth-account-kit/blob/2a4ccfafef127165c11ba16fc16235c919698ec2/src/predictStealthSafeAddress.ts#L32-L104) - [Labels limit which Safes fund a send](https://docs.fluidkey.com/readme/labels/) ### Chain analyst Recipient private (sentiment: good) **Who:** Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters. Examples: Chain analytics firms, ZachXBT, data brokers. At least 2,204 accounts have claimed Fluidkey's 'score' token, giving a lower bound of the anonymity set. A Safe looks like any new address until Fluidkey's relayer spends from it or deposits its funds for auto-earn. A claimed score sits on its own stealth address that holds nothing else, and its amount grows partly with the account's balance. **Advice:** Ask for a new address for each payment, also when it arrives on another chain. **Sources** - [Score holders, one address per claiming account](https://ethbeat.org/privacy/projects/fluidkey#FluidkeyScore) - [Score claimed in the app, based partly on total balance](https://docs.fluidkey.com/readme/score/) - [The score accrues on a stealth address that holds nothing else](https://www.fluidkey.com/blog/fluidkey-score) - [Fluidkey's relayer contract submits every send and auto-earn deposit](https://ethbeat.org/privacy/projects/fluidkey#SmartAccountRelayer) - [Auto-earn setup records the Safe that installs it](https://github.com/fluidkey/fluidkey-earn-module/blob/122cde19940d06b94c0027f4cd2e22e7fa19129a/src/FluidkeyEarnModule.sol#L243-L260) - [Shared derivation path permits the same address on several chains](https://docs.fluidkey.com/technical-documentation/technical-walkthrough/#3a-stealth-signer-derivation) ### Network observer Recipient at risk (sentiment: warning) **Who:** Sits between the user and the services and sees traffic only: ISPs, VPNs, Tor exits, public RPCs and relayers. Ties requests to a user by content, session or timing: what they name, a shared IP or login, and when they arrive. Services the operator runs count as the insider. Examples: Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend. Alchemy, behind Fluidkey's proxy, receives the Safes the app shows and can group those of one account. Without Tor, the proxy can also pass it the user's IP. A payer who looks up the user's name gives their RPC the name and the new Safe. A Google, Apple, email or Farcaster login hands the identity to Privy, whose code then creates the signature the user's keys come from. **Advice:** Run the app in Tor Browser. Share a fresh Safe address instead of the name, and connect a wallet rather than a Google, Apple, email or Farcaster login. **Sources** - [Served app, build entrypoint-908cd83c (checked 2026-10-30)](https://app.fluidkey.com) - [Web keys are generated through a Privy embedded wallet](https://docs.fluidkey.com/readme/account-set-up/) - [Name lookups return the signed answer through the payer's RPC](https://ethbeat.org/privacy/projects/fluidkey#OffchainResolver) ### Privileged insider Recipient exposed (sentiment: bad) **Who:** Holds an operator role, custodies funds, receives keys or plaintext by design, or delivers the app: upgrade admin, custodian, view key holder, enclave operator, association set provider, hosted prover, registry, frontend host. Examples: A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator, a custodial bridge. Fluidkey holds the viewing key, so it can regenerate every address and tie its activity to the user's account. Its closed-source app handles the user's keys. Bank transfers add the user's verified identity, and Hide Trail shows the user's route to Houdini and two exchanges. **Sources** - [Private viewing key shared with the service](https://github.com/fluidkey/fluidkey-stealth-account-kit/blob/2a4ccfafef127165c11ba16fc16235c919698ec2/src/extractViewingPrivateKeyNode.ts#L14-L30) - [Verification results and identity attributes](https://www.fluidkey.com/privacy) - [Hide Trail and its exchange intermediaries](https://docs.fluidkey.com/readme/advanced-privacy/) ### Future adversary Recipient private (sentiment: good) **Who:** Harvest now, decrypt later. Holds every byte ever published and runs the known quantum attacks: elliptic curves, pairings and RSA fall. Hashes, symmetric ciphers and post-quantum schemes stand until an attack on them is known. Examples: An intelligence agency archiving chain data today, then anyone once a break is public. No announcement is published, so address derivations cannot be replayed from the chain alone. Accounts created from a wallet signature reduce to that wallet's key plus a four-digit PIN. **Advice:** Connect a new wallet that has never sent a transaction instead of a Google, Apple, email or Farcaster login. **Sources** - [Stealth signer depends on a hashed shared secret](https://github.com/fluidkey/fluidkey-stealth-account-kit/blob/2a4ccfafef127165c11ba16fc16235c919698ec2/src/generateStealthPrivateKey.ts#L11-L21) - [Signature halves generate the viewing and spending keys](https://github.com/fluidkey/fluidkey-stealth-account-kit/blob/2a4ccfafef127165c11ba16fc16235c919698ec2/src/generateKeysFromSignature.ts#L11-L36) - [Wallet address and PIN determine the key-generation message](https://github.com/fluidkey/fluidkey-stealth-account-kit/blob/2a4ccfafef127165c11ba16fc16235c919698ec2/src/utils/generateFluidkeyMessage.ts#L10-L32) - [Recovery supports a four-digit PIN, defaulting to 0000](https://github.com/fluidkey/sara/blob/e6e4fcd9e718722948b82fa0e819e0c4fca46e0d/src/components/GenerateKeysJourneyStep.tsx#L28-L90) ## Risk summary ### Funds can be stolen if 1. the closed-source app is malicious or hacked and steals the user's spending keys. 2. Privy's code or key share is compromised, for accounts created with a Google, Apple, email or Farcaster login on the web. 3. a Fluidkey signer returns an attacker's address when a payer looks up a Fluidkey name. 4. Fluidkey's server marks a transfer as approved, and the open app signs it without showing the user. ### Funds can be lost if 1. a user loses the login, wallet, PIN or backup needed to recover the spending key. 2. Fluidkey's server gives out a wrong address, for example one built with a different Safe setup, and the user's keys cannot withdraw from it. 3. an auto-earn vault loses funds or blocks withdrawals, or a service used by Hide Trail keeps the funds. ### Privacy can be lost if 1. Fluidkey, or anyone who obtains its records, uses the viewing keys to link all Safes of every account (see privileged insider). 2. Fluidkey changes its closed-source app to send account data to outside services (see privileged insider). 3. Alchemy, behind Fluidkey's proxy, groups the Safes the app shows for each account (see network observer). 4. a payer looks up the user's name through a public RPC, which then sees the name and the new Safe (see network observer). 5. a user takes Hide Trail and Houdini or the exchanges link the route from their records (see privileged insider). 6. Fluidkey's relayer marks every spend as a Fluidkey account's (see chain analyst). ## Upgrades & Governance Fluidkey changes its app, API, name gateway, indexer and relayer at will, without notice onchain. The OffchainResolver is immutable. Its owner, the Fluidkey Resolver Multisig, can instantly change where lookups are answered and which keys sign the answers. A signer can return any address for a name. The same multisig owns [fkey.eth](https://app.ens.domains/fkey.eth) and fkey.id and can point every Fluidkey name to another resolver instantly. Both affect new lookups only, since existing Safes stay under their owners' keys. The Fluidkey Earn module is immutable on each chain. Its owner, the Fluidkey Earn Owner multisig, publishes vault sets and chooses relayers, which can add or remove other relayers. An existing Safe moves to a new vault set only by its own call. ## Updates Each date links the update on the HTML page, which also shows its contract diffs. ### [2026-10-09 12:33 UTC](https://ethbeat.org/privacy/projects/fluidkey?update=4b078ceb) (7 changes) Added the FluidkeyScore token on Base, whose holder count bounds the number of accounts. Added the SmartAccountRelayer on all six chains, through which Fluidkey submits sends and auto-earn deposits. Moved OffchainResolver and FluidkeyEarnModule from config overrides into templates, with no value changes. ### [2026-09-08 07:46 UTC](https://ethbeat.org/privacy/projects/fluidkey?update=838ab14e) (14 changes) Initial discovery of the Fluidkey ENS resolver, its owner and signers, and the auto-earn module and its permissions on Ethereum, Base, Arbitrum, Optimism, Polygon PoS, and Gnosis. ## Permissions Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/fluidkey ### Base Chain #### Actors ##### Fluidkey Earn Owner Addresses: [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://basescan.org/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD) A Multisig with 2/3 threshold. - Can upgrade **with no delay** - FluidkeyScore - Can interact with FluidkeyEarnModule - publish vault configurations, manage authorized relayers, and initiate deposits into the configurations selected by enabled Safes. Changing a Safe's selected configuration hash requires a call from that Safe - Can interact with FluidkeyScore - choose which addresses may transfer the score, such as the distributor Participants (3): [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://basescan.org/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://basescan.org/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1](https://basescan.org/address/0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1) ##### EOA 3 Addresses: [0x53d92eCe145696ff27A7d1F8746632C3deBB151D](https://basescan.org/address/0x53d92eCe145696ff27A7d1F8746632C3deBB151D) - Can interact with FluidkeyEarnModule - initiate deposits from enabled Safes into their selected vault configurations, and add or remove authorized relayers ##### EOA 4 Addresses: [0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a](https://basescan.org/address/0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a) - Can interact with SmartAccountRelayer - authorize every call this contract forwards ### Arbitrum One #### Actors ##### Fluidkey Earn Owner Addresses: [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://arbiscan.io/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD) A Multisig with 2/3 threshold. - Can interact with FluidkeyEarnModule - publish vault configurations, manage authorized relayers, and initiate deposits into the configurations selected by enabled Safes. Changing a Safe's selected configuration hash requires a call from that Safe Participants (3): [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://arbiscan.io/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://arbiscan.io/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1](https://arbiscan.io/address/0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1) ##### EOA 1 Addresses: [0x53d92eCe145696ff27A7d1F8746632C3deBB151D](https://arbiscan.io/address/0x53d92eCe145696ff27A7d1F8746632C3deBB151D) - Can interact with FluidkeyEarnModule - initiate deposits from enabled Safes into their selected vault configurations, and add or remove authorized relayers ##### EOA 2 Addresses: [0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a](https://arbiscan.io/address/0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a) - Can interact with SmartAccountRelayer - authorize every call this contract forwards ### Ethereum #### Actors ##### Fluidkey Earn Owner Addresses: [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://etherscan.io/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD) A Multisig with 2/3 threshold. - Can interact with FluidkeyEarnModule - publish vault configurations, manage authorized relayers, and initiate deposits into the configurations selected by enabled Safes. Changing a Safe's selected configuration hash requires a call from that Safe Participants (3): [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://etherscan.io/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://etherscan.io/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1](https://etherscan.io/address/0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1) ##### Fluidkey Resolver Multisig Addresses: [0xdcC34c0da55cEF7AeD38Bb749AD97DAC12A9936C](https://etherscan.io/address/0xdcC34c0da55cEF7AeD38Bb749AD97DAC12A9936C) A Multisig with 3/5 threshold. - Can interact with OffchainResolver - change the accepted signers and gateway URL immediately, or transfer resolver ownership Participants (5): [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://etherscan.io/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://etherscan.io/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0x5a655820821bf7af7B23566b34ce0CcBd9c9a37f](https://etherscan.io/address/0x5a655820821bf7af7B23566b34ce0CcBd9c9a37f), [0x74C19105f358BAb85f8E9FDA9202A1326A714d89](https://etherscan.io/address/0x74C19105f358BAb85f8E9FDA9202A1326A714d89), [0xFE972D3976F7cc5ba1C9b471D48362B82C6c5fDd](https://etherscan.io/address/0xFE972D3976F7cc5ba1C9b471D48362B82C6c5fDd) ##### EOA 6 Addresses: [0x53d92eCe145696ff27A7d1F8746632C3deBB151D](https://etherscan.io/address/0x53d92eCe145696ff27A7d1F8746632C3deBB151D) - Can interact with FluidkeyEarnModule - initiate deposits from enabled Safes into their selected vault configurations, and add or remove authorized relayers ##### EOA 7 Addresses: [0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a](https://etherscan.io/address/0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a) - Can interact with SmartAccountRelayer - authorize every call this contract forwards ##### EOA 5 Addresses: [0x269fDaBd799179189C98D960C58C3793CcedDB85](https://etherscan.io/address/0x269fDaBd799179189C98D960C58C3793CcedDB85) - Can interact with OffchainResolver - sign arbitrary offchain ENS answers, including payment addresses accepted by the resolver ### Gnosis Chain #### Actors ##### Fluidkey Earn Owner Addresses: [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://gnosis.blockscout.com/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD) A Multisig with 2/3 threshold. - Can interact with FluidkeyEarnModule - publish vault configurations, manage authorized relayers, and initiate deposits into the configurations selected by enabled Safes. Changing a Safe's selected configuration hash requires a call from that Safe Participants (3): [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://gnosis.blockscout.com/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://gnosis.blockscout.com/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1](https://gnosis.blockscout.com/address/0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1) ##### EOA 8 Addresses: [0x53d92eCe145696ff27A7d1F8746632C3deBB151D](https://gnosis.blockscout.com/address/0x53d92eCe145696ff27A7d1F8746632C3deBB151D) - Can interact with FluidkeyEarnModule - initiate deposits from enabled Safes into their selected vault configurations, and add or remove authorized relayers ##### EOA 9 Addresses: [0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a](https://gnosis.blockscout.com/address/0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a) - Can interact with SmartAccountRelayer - authorize every call this contract forwards ### Polygon PoS #### Actors ##### Fluidkey Earn Owner Addresses: [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://polygonscan.com/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD) A Multisig with 2/3 threshold. - Can interact with FluidkeyEarnModule - publish vault configurations, manage authorized relayers, and initiate deposits into the configurations selected by enabled Safes. Changing a Safe's selected configuration hash requires a call from that Safe Participants (3): [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://polygonscan.com/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://polygonscan.com/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1](https://polygonscan.com/address/0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1) ##### EOA 10 Addresses: [0x53d92eCe145696ff27A7d1F8746632C3deBB151D](https://polygonscan.com/address/0x53d92eCe145696ff27A7d1F8746632C3deBB151D) - Can interact with FluidkeyEarnModule - initiate deposits from enabled Safes into their selected vault configurations, and add or remove authorized relayers ##### EOA 11 Addresses: [0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a](https://polygonscan.com/address/0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a) - Can interact with SmartAccountRelayer - authorize every call this contract forwards ### OP Mainnet #### Actors ##### Fluidkey Earn Owner Addresses: [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://optimistic.etherscan.io/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD) A Multisig with 2/3 threshold. - Can interact with FluidkeyEarnModule - publish vault configurations, manage authorized relayers, and initiate deposits into the configurations selected by enabled Safes. Changing a Safe's selected configuration hash requires a call from that Safe Participants (3): [0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614](https://optimistic.etherscan.io/address/0xB9e7de28c2e6C8F3C29Fc0e061485A34C5864614), [0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10](https://optimistic.etherscan.io/address/0xa13EFDd0d500cB9DA8140842cf624f1D5e273E10), [0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1](https://optimistic.etherscan.io/address/0x3066e11cd9a68AbFd2C3798b4617aA44E9Dc08c1) ##### EOA 12 Addresses: [0x53d92eCe145696ff27A7d1F8746632C3deBB151D](https://optimistic.etherscan.io/address/0x53d92eCe145696ff27A7d1F8746632C3deBB151D) - Can interact with FluidkeyEarnModule - initiate deposits from enabled Safes into their selected vault configurations, and add or remove authorized relayers ##### EOA 13 Addresses: [0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a](https://optimistic.etherscan.io/address/0xe78288221aaE3A0D3ddf8Fa08D3602C3014eeD7a) - Can interact with SmartAccountRelayer - authorize every call this contract forwards ## Smart contracts ![A diagram of the smart contract architecture](https://ethbeat.org/static/images/architecture/fluidkey.885d59ee.png) Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/fluidkey ### Arbitrum One #### FluidkeyEarnModule Addresses: [0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9](https://arbiscan.io/address/0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9#code) Safe module used for Fluidkey auto-earn. Authorized relayers can deposit tokens into the vault selected by the Safe's configuration hash, with vault shares credited to that Safe. The module owner publishes configurations, but selecting a different hash requires a call from the Safe. - Roles: - **authorizedRelayers**: EOA 1 - **owner**: Fluidkey Earn Owner #### SmartAccountRelayer Addresses: [0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0](https://arbiscan.io/address/0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0#code) Immutable contract through which Fluidkey submits Safe deployments, sends, auto-earn deposits and score transfers. Anyone can submit an operation, but each needs a signature from the authorized caller. It holds no rights over Safes, so a send still needs the Safe owner's signature. - Roles: - **authorizedCaller**: EOA 2 ### Base Chain #### FluidkeyEarnModule Addresses: [0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9](https://basescan.org/address/0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9#code) Safe module used for Fluidkey auto-earn. Authorized relayers can deposit tokens into the vault selected by the Safe's configuration hash, with vault shares credited to that Safe. The module owner publishes configurations, but selecting a different hash requires a call from the Safe. - Roles: - **authorizedRelayers**: EOA 3 - **owner**: Fluidkey Earn Owner #### SmartAccountRelayer Addresses: [0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0](https://basescan.org/address/0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0#code) Immutable contract through which Fluidkey submits Safe deployments, sends, auto-earn deposits and score transfers. Anyone can submit an operation, but each needs a signature from the authorized caller. It holds no rights over Safes, so a send still needs the Safe owner's signature. - Roles: - **authorizedCaller**: EOA 4 #### FluidkeyScore Addresses: [0x894c663757f6953544548EFA1aebc0846AC08bEa](https://basescan.org/address/0x894c663757f6953544548EFA1aebc0846AC08bEa#code), [0xB5311Cf821AB519CCF08e8f80742efDDC7d6659F](https://basescan.org/address/0xB5311Cf821AB519CCF08e8f80742efDDC7d6659F#code) (Implementation (Upgradable)), [0x9E3eba321427941868cB4123De97DAB145C9e7CD](https://basescan.org/address/0x9E3eba321427941868cB4123De97DAB145C9e7CD#code) (Admin) **Past upgrades** (Count of upgrades: No upgrades, Last upgrade: N/A, Avg upgrade interval: N/A) - 2025-05-26 12:59 UTC, deployment of [FluidkeyScore](https://basescan.org/address/0x894c663757f6953544548EFA1aebc0846AC08bEa#code): transaction [0xb6021b7130d6faf2da89cf3e606c4e49b72e040e2a8a3f7251b6af3a1aa55f15](https://basescan.org/tx/0xb6021b7130d6faf2da89cf3e606c4e49b72e040e2a8a3f7251b6af3a1aa55f15), implementations: [0xB5311Cf821AB519CCF08e8f80742efDDC7d6659F](https://basescan.org/address/0xB5311Cf821AB519CCF08e8f80742efDDC7d6659F#code) Non-transferable ERC-20 score that Fluidkey's distributor allocates to its users, based partly on their total balance. Only the owner and whitelisted senders can transfer it. - Roles: - **admin**: Fluidkey Earn Owner - **owner**: Fluidkey Earn Owner Can be upgraded by: Fluidkey Earn Owner with no delay ### Ethereum #### FluidkeyEarnModule Addresses: [0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9](https://etherscan.io/address/0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9#code) Safe module used for Fluidkey auto-earn. Authorized relayers can deposit tokens into the vault selected by the Safe's configuration hash, with vault shares credited to that Safe. The module owner publishes configurations, but selecting a different hash requires a call from the Safe. - Roles: - **authorizedRelayers**: EOA 6 - **owner**: Fluidkey Earn Owner #### SmartAccountRelayer Addresses: [0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0](https://etherscan.io/address/0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0#code) Immutable contract through which Fluidkey submits Safe deployments, sends, auto-earn deposits and score transfers. Anyone can submit an operation, but each needs a signature from the authorized caller. It holds no rights over Safes, so a send still needs the Safe owner's signature. - Roles: - **authorizedCaller**: EOA 7 #### OffchainResolver Addresses: [0x9AcF316290AaA62edafdDDaC48B124032C36EB3c](https://etherscan.io/address/0x9AcF316290AaA62edafdDDaC48B124032C36EB3c#code) Immutable ENS CCIP-Read resolver used by Fluidkey. Every query redirects to a configurable gateway and accepts the returned ENS record if it is unexpired and signed by an accepted signer. It does not verify that a returned payment address was derived for the named recipient. - Roles: - **owner**: Fluidkey Resolver Multisig - **signers**: EOA 5 ### Gnosis Chain #### FluidkeyEarnModule Addresses: [0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9](https://gnosis.blockscout.com/address/0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9#code) Safe module used for Fluidkey auto-earn. Authorized relayers can deposit tokens into the vault selected by the Safe's configuration hash, with vault shares credited to that Safe. The module owner publishes configurations, but selecting a different hash requires a call from the Safe. - Roles: - **authorizedRelayers**: EOA 8 - **owner**: Fluidkey Earn Owner #### SmartAccountRelayer Addresses: [0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0](https://gnosis.blockscout.com/address/0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0#code) Immutable contract through which Fluidkey submits Safe deployments, sends, auto-earn deposits and score transfers. Anyone can submit an operation, but each needs a signature from the authorized caller. It holds no rights over Safes, so a send still needs the Safe owner's signature. - Roles: - **authorizedCaller**: EOA 9 ### Polygon PoS #### FluidkeyEarnModule Addresses: [0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9](https://polygonscan.com/address/0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9#code) Safe module used for Fluidkey auto-earn. Authorized relayers can deposit tokens into the vault selected by the Safe's configuration hash, with vault shares credited to that Safe. The module owner publishes configurations, but selecting a different hash requires a call from the Safe. - Roles: - **authorizedRelayers**: EOA 10 - **owner**: Fluidkey Earn Owner #### SmartAccountRelayer Addresses: [0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0](https://polygonscan.com/address/0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0#code) Immutable contract through which Fluidkey submits Safe deployments, sends, auto-earn deposits and score transfers. Anyone can submit an operation, but each needs a signature from the authorized caller. It holds no rights over Safes, so a send still needs the Safe owner's signature. - Roles: - **authorizedCaller**: EOA 11 ### OP Mainnet #### FluidkeyEarnModule Addresses: [0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9](https://optimistic.etherscan.io/address/0x3BDb857AFe9b51d8916D80240d2ADe40D4d3f2f9#code) Safe module used for Fluidkey auto-earn. Authorized relayers can deposit tokens into the vault selected by the Safe's configuration hash, with vault shares credited to that Safe. The module owner publishes configurations, but selecting a different hash requires a call from the Safe. - Roles: - **authorizedRelayers**: EOA 12 - **owner**: Fluidkey Earn Owner #### SmartAccountRelayer Addresses: [0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0](https://optimistic.etherscan.io/address/0x8090a9DB6Aca56fFA186C75Ca0787B18af1058a0#code) Immutable contract through which Fluidkey submits Safe deployments, sends, auto-earn deposits and score transfers. Anyone can submit an operation, but each needs a signature from the authorized caller. It holds no rights over Safes, so a send still needs the Safe owner's signature. - Roles: - **authorizedCaller**: EOA 13