Search for projects by name or address
Fluent is an Ethereum L2 that blends Wasm and EVM smart contracts into a unified execution environment (with SVM planned). Batches are preconfirmed by an AWS Nitro Enclave and finalize after a delay; challenges are resolved by SP1 ZK proofs.
Fluent is an Ethereum L2 that blends Wasm and EVM smart contracts into a unified execution environment (with SVM planned). Batches are preconfirmed by an AWS Nitro Enclave and finalize after a delay; challenges are resolved by SP1 ZK proofs.
Consequence: projects without a proper proof system fully rely on single entities to safely update the state. A malicious proposer can finalize an invalid state, which can cause loss of funds.
Learn more about the recategorisation here.
2026 Mar 17 — May 31
The section shows the operating costs that L2s pay to Ethereum.
2026 Apr 19 — May 31
This section shows how "live" the project's operators are by displaying how frequently they submit transactions of the selected type. It also highlights anomalies - significant deviations from their typical schedule.
Fluent mainnet launch
2026 Apr 24th
Fluent activates its Ethereum L2 mainnet alongside the BLEND token launch.
There is no mechanism to have transactions be included if the sequencer is down or censoring.
State roots are accepted on the basis of an AWS Nitro Enclave preconfirmation and a 2d time delay; the SP1 ZK proof system exists in the contracts but is currently unreachable because CHALLENGER_ROLE has no holders. Effective security reduces to trust the TEE and wait the delay. See the State Validation section below for details.
All of the data needed for proof construction is published on Ethereum L1.
There is no window for users to exit in case of an unwanted upgrade since contracts are instantly upgradable.
Only the whitelisted proposers can publish state roots on L1, so in the event of failure the withdrawals are frozen.
All the data that is used to construct the system state is published on chain in the form of cheap blobs or calldata. This ensures that it will be available for enough time. Fluent posts transaction data to Ethereum L1 as EIP-4844 blobs. Blob hashes are pinned on the Rollup contract via submitBlobs and SP1 proofs verify that block data matches both the pinned hashes and the EIP-4844 commitments.
Fluent runs an optimistic batch lifecycle backed by SP1 ZK proofs for dispute resolution. (1) the sequencer commits a batch root via commitBatch; (2) EIP-4844 blob hashes are pinned via submitBlobs; (3) an AWS Nitro Enclave preconfirms the batch with an ECDSA signature whose key was admitted onchain only after an SP1 proof verified AWS’s attestation document for that key and that the document’s PCR0 (a fingerprint of the enclave image) matches the expected (audited) value; (4) within 1d 12h of acceptance, addresses with the CHALLENGER_ROLE can dispute via challengeBatchRoot or challengeBlock and the prover must resolve each challenge with an SP1 proof before the same window closes; (5) batches finalize either after a 2d L1 delay (finalizeBatches, no proof needed in the happy path) or immediately once all challenged blocks are proven (finalizeWithProofs).
Currently CHALLENGER_ROLE has no holders, so challengeBatchRoot and challengeBlock cannot be invoked. Because _provenBlocks is only populated inside resolveBlockChallenge (which itself requires an active challenge), no SP1 proof can be submitted onchain in this state and finalizeWithProofs reverts. Every batch therefore finalizes purely through the time-based path, and effective security reduces to trust the TEE plus the 2d delay until the admin grants the role.
The PROVER, EMERGENCY, and CHALLENGER roles on the Rollup are gated by access control; see the Permissions section for the current holders.
Funds can be stolen if an invalid batch is preconfirmed by a compromised AWS Nitro Enclave and no permissioned challenger disputes it before the challenge window closes.
Name | Hash | Repository | Verification | Used in | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00e3...7334 | Code unknown | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x0085...311b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The metrics include upgrades on the currently used proxy contracts. Historical proxy contracts and changes of such are not included.
L1FluentBridge implementation swapped by FluentMultisig on 2026-05-20: 0x047A…C227 → 0xF67255…F849 (diff). Key changes: - receiveMessageWithProof is now permissionless — the onlyRole(RELAYER ROLE) gate was removed, so anyone can relay an L2→L1 message from a preconfirmed or finalized batch. RELAYER ROLE no longer gates the live L1 receive path. - Message execution gas is now bounded by executeGasLimit instead of gasleft() ( receiveMessage(getExecuteGasLimit(), …) ); the configured limit changed 5000 → 550000, and a ReceivedMessage(hash, success, data) event is emitted. - Bare ETH transfers to the bridge are rejected — the receive() external payable {} fallback was deleted, so ETH must go through NativeGateway . - beforeReceiveMessage hook gains a bytes32 messageHash parameter (propagated through receiveMessageWithProof and receiveFailedMessage ). - registerGateway now requires the target to be a contract and rejects double-registration; unregisterGateway rejects unknown addresses. - rollbackMessageWithProof still reverts NOT IMPLEMENTED .
L1FluentBridge implementation swapped by FluentMultisig on 2026-05-20: 0x047A…C227 → 0xF67255…F849 (diff). Key changes:
receiveMessageWithProof is now permissionless — the onlyRole(RELAYER_ROLE) gate was removed, so anyone can relay an L2→L1 message from a preconfirmed or finalized batch. RELAYER_ROLE no longer gates the live L1 receive path.executeGasLimit instead of gasleft() (_receiveMessage(getExecuteGasLimit(), …)); the configured limit changed 5000 → 550000, and a ReceivedMessage(hash, success, data) event is emitted.receive() external payable {} fallback was deleted, so ETH must go through NativeGateway._beforeReceiveMessage hook gains a bytes32 messageHash parameter (propagated through receiveMessageWithProof and receiveFailedMessage).registerGateway now requires the target to be a contract and rejects double-registration; unregisterGateway rejects unknown addresses.rollbackMessageWithProof still reverts NOT_IMPLEMENTED.| contract FluentRollup (eth:0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f) [fluent/FluentRollup] { | |
| +++ description: Core Fluent rollup contract. Sequencers commit batch roots and EIP-4844 blob hashes; an AWS Nitro Enclave preconfirms each batch via a signature whose key is bound to a PCR0 measurement verified by SP1; participants holding CHALLENGER_ROLE can dispute and the prover resolves disputes with SP1 ZK proofs; batches finalize after a block-count delay or immediately once all blocks are proven. | |
| values.lastFinalizedBatchIndex: | |
| - | 2039 |
| + | 3228 |
| values.nextBatchIndex: | |
| - | 2210 |
| + | 3408 |
| } |
| contract L1FluentBridge (eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc) [fluent/L1FluentBridge] { | |
| +++ description: Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets anyone process L2->L1 messages with two Merkle proofs against a preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE. | |
| sourceHashes.1: | |
| - | "0x7bda96bf482f46806c7ec01435c28a85aa1cac36fddebecc38ed1b28e23ebc12" |
| + | "0x73f59c197fe2e902ffd1c1e9ee49d52d05e0df7bf001e7e56cc3d82339a457ea" |
| values.$implementation: | |
| - | "eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227" |
| + | "eth:0xF67255be817061139C9DeeA757f7276916cBF849" |
| values.$pastUpgrades.6: | |
| + | ["2026-05-20T15:00:23.000Z","0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",["eth:0xF67255be817061139C9DeeA757f7276916cBF849"]] |
| values.$upgradeCount: | |
| - | 6 |
| + | 7 |
| values.getExecuteGasLimit: | |
| - | 5000 |
| + | 550000 |
| values.getNonce: | |
| - | 1023 |
| + | 1298 |
| values.getReceivedNonce: | |
| - | 485 |
| + | 545 |
| values.getSentMessageCursor: | |
| - | 1023 |
| + | 1298 |
| implementationNames.eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227: | |
| - | "L1FluentBridge" |
| implementationNames.eth:0xF67255be817061139C9DeeA757f7276916cBF849: | |
| + | "L1FluentBridge" |
| } |
initial discovery
initial discovery
| + | Status: CREATED |
| contract ERC20PeggedToken (eth:0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090) [N/A] | |
| +++ description: None |
| + | Status: CREATED |
| contract Blacklist (eth:0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484) [N/A] | |
| +++ description: None |
| + | Status: CREATED |
| contract FluentRollup (eth:0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f) [fluent/FluentRollup] | |
| +++ description: Core Fluent rollup contract. Sequencers commit batch roots and EIP-4844 blob hashes; an AWS Nitro Enclave preconfirms each batch via a signature whose key is bound to a PCR0 measurement verified by SP1; participants holding CHALLENGER_ROLE can dispute and the prover resolves disputes with SP1 ZK proofs; batches finalize after a block-count delay or immediately once all blocks are proven. |
| + | Status: CREATED |
| contract NitroVerifier (eth:0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B) [fluent/NitroVerifier] | |
| +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code. |
| + | Status: CREATED |
| contract FluentMultisig (eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11) [GnosisSafe] | |
| +++ description: None |
| + | Status: CREATED |
| contract SP1VerifierGateway (eth:0x397A5f7f3dBd538f23DE225B51f532c34448dA9B) [succinct/SP1VerifierGateway] | |
| +++ description: This contract is the router for zk proof verification. It stores the mapping between identifiers and the address of onchain verifier contracts, routing each identifier to the corresponding verifier contract. |
| + | Status: CREATED |
| contract FastWithdrawalList (eth:0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E) [fluent/FastWithdrawalList] | |
| +++ description: Per-token rate-limit registry for the optimistic (preconfirmed) fast-withdrawal path. Enforces hourly and daily caps using rolling windows keyed by block timestamp; related tokens (e.g. ETH and WETH) can be aliased to a shared bucket to prevent cap evasion. |
| + | Status: CREATED |
| contract SP1Verifier (eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5) [succinct/SP1Verifier] | |
| +++ description: Verifier contract for SP1 proofs (v5.0.0). |
| + | Status: CREATED |
| contract FluentTimeLock (eth:0x7846C001835d889A29ba659f67A5B7ac98E73bF4) [fluent/FluentTimeLock] | |
| +++ description: OpenZeppelin TimelockController used to delay privileged operations. PROPOSER_ROLE schedules calls; the configured minimum delay must elapse before EXECUTOR_ROLE can execute them; CANCELLER_ROLE can drop scheduled calls. |
| + | Status: CREATED |
| contract NativeGateway (eth:0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd) [fluent/NativeGateway] | |
| +++ description: L1 entry point for ETH deposits into Fluent. Forwards ETH to L1FluentBridge for actual escrow custody and emits the corresponding bridge message. UUPS-upgradeable; upgrades are gated by the contract owner. |
| + | Status: CREATED |
| contract SP1Verifier (eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508) [N/A] | |
| +++ description: None |
| + | Status: CREATED |
| contract L1FluentBridge (eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc) [fluent/L1FluentBridge] | |
| +++ description: Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets relayers process L2->L1 messages with two Merkle proofs against the latest preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE. |
| + | Status: CREATED |
| contract SP1Verifier (eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2) [N/A] | |
| +++ description: None |
| + | Status: CREATED |
| contract SP1VerifierGatewayMultisig (eth:0xCafEf00d348Adbd57c37d1B77e0619C6244C6878) [GnosisSafe] | |
| +++ description: None |
| + | Status: CREATED |
| contract UpgradeableBeacon (eth:0xdD283a04cc711aB9c08d79e665835821BEef710B) [N/A] | |
| +++ description: None |
| + | Status: CREATED |
| contract ERC20TokenFactory (eth:0xF6d49E874Cb64b8ee56D6F99BD340134B30AB225) [N/A] | |
| +++ description: None |
| + | Status: CREATED |
| contract ERC20Gateway (eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61) [fluent/ERC20Gateway] | |
| +++ description: L1 entry point for ERC-20 deposits into Fluent. Custodies ERC-20 tokens directly on L1 and emits the corresponding bridge message; on the L2 side the canonical pegged token is minted via the ERC20TokenFactory. UUPS-upgradeable; upgrades are gated by the contract owner. |
| + | Status: CREATED |
| contract NitroVerifier (eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F) [fluent/NitroVerifier] | |
| +++ description: Verifies AWS Nitro Enclave attestations onchain. The enclave's signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code. |
The operator is the only entity that can propose blocks. A live and trustworthy operator is vital to the health of the system. Sequencing and proof submission are also permissioned at launch: only allowlisted addresses can submit batches and SP1 proofs to the Rollup. See the Permissions section for current role holders.
MEV can be extracted if the operator exploits their centralized position and frontruns user transactions.
There is no general mechanism to force the sequencer to include the transaction.
Users can be censored if the operator refuses to include their transactions.
The user initiates the withdrawal by submitting a regular transaction on this chain. When the block containing that transaction is settled the funds become available for withdrawal on L1. ZK proofs are required to settle blocks. Finally the user submits an L1 transaction to claim the funds. On Fluent, the message hash enters the block’s withdrawal root which becomes part of the next batch root; once the batch is finalized, anyone can deliver the message on L1 via receiveMessageWithProof with two Merkle proofs (block-against-batch and message-against-block).
After a batch is preconfirmed by the AWS Nitro Enclave, withdrawals can be released without waiting for finalization, subject to per-token hourly and daily caps enforced by the FastWithdrawalList registry. ETH and WETH share a bucket to prevent cap evasion.
Funds can be stolen if the AWS Nitro Enclave attestation key is compromised and the operator preconfirms an invalid batch within the rate-limited window.

schedule operations on the timelock; the configured min-delay must elapse before they can be executed.
submit SP1 ZK proofs that resolve challenged batches and accelerate finalization via finalizeWithProofs.
AWS Nitro Enclave attestation key admitted to preconfirm batches; binds the optimistic fast-withdrawal path.
A Multisig with 4/5 threshold.
Member of FluentMultisig.

Per-token rate-limit registry for the optimistic (preconfirmed) fast-withdrawal path. Enforces hourly and daily caps using rolling windows keyed by block timestamp; related tokens (e.g. ETH and WETH) can be aliased to a shared bucket to prevent cap evasion.
Bridge core for Fluent. Routes deposits from L1 gateways into a FIFO queue consumed by the sequencer, and lets anyone process L2->L1 messages with two Merkle proofs against a preconfirmed or finalized batch root. Custodies bridged ETH on L1 (gateways forward ETH here on deposit). UUPS-upgradeable; upgrades and gateway-whitelist / oracle / pause changes are gated by DEFAULT_ADMIN_ROLE.

All supported tokens in this escrow are included in the value secured calculation.
OpenZeppelin TimelockController used to delay privileged operations. PROPOSER_ROLE schedules calls; the configured minimum delay must elapse before EXECUTOR_ROLE can execute them; CANCELLER_ROLE can drop scheduled calls.
Core Fluent rollup contract. Sequencers commit batch roots and EIP-4844 blob hashes; an AWS Nitro Enclave preconfirms each batch via a signature whose key is bound to a PCR0 measurement verified by SP1; participants holding CHALLENGER_ROLE can dispute and the prover resolves disputes with SP1 ZK proofs; batches finalize after a block-count delay or immediately once all blocks are proven.
Verifies AWS Nitro Enclave attestations onchain. The enclave’s signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.
Verifies AWS Nitro Enclave attestations onchain. The enclave’s signing key is admitted only after an SP1 proof confirms its attestation matches the expected PCR0 measurement, binding preconfirmation authority to audited enclave code.
The current deployment carries some associated risks:
Funds can be stolen if a contract receives a malicious code upgrade. There is no delay on code upgrades (CRITICAL).
Name | Hash | Repository | Verification | Used in | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00e3...7334 | Code unknown | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x0085...311b | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||