{
"dataAvailability": [
{
"name": "All data required for proofs is published on chain",
"description": "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.",
"risks": [],
"references": [
{
"title": "Fluent Rollup Architecture - Blob Publication",
"url": "https://docs.fluent.xyz/system-architecture/rollup-architecture"
}
]
}
],
"exitMechanisms": [
{
"name": "Regular exit",
"description": "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, an address with RELAYER_ROLE delivers the message on L1 via receiveMessageWithProof with two Merkle proofs (block-against-batch and message-against-block). First delivery is permissioned, so withdrawals progress only when the relayer acts; if a delivered message's L1-side execution reverts, anyone can retry via the permissionless receiveFailedMessage.",
"risks": [
{
"category": "Funds can be frozen if",
"text": "the RELAYER_ROLE holder stops delivering L2->L1 messages on L1, since first delivery is permissioned and there is no user-initiated bypass."
}
],
"description": "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).",
"risks": [],
"references": [
{
"title": "Fluent Bridge Architecture",
"url": "https://docs.fluent.xyz/system-architecture/bridge"
}
]
},
{
"name": "Optimistic (preconfirmed) fast withdrawals",
"description": "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.",
"references": [],
"risks": [
{
"category": "Funds can be stolen if",
"text": "the AWS Nitro Enclave attestation key is compromised and the operator preconfirms an invalid batch within the rate-limited window."
}
]
}
],
"forceTransactions": {
"name": "Users can't force any transaction",
"description": "There is no general mechanism to force the sequencer to include the transaction.",
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
],
"references": []
},
"operator": {
"name": "The system has a centralized operator",
"description": "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.",
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
],
"references": [
{
"title": "Fluent Security Invariants",
"url": "https://docs.fluent.xyz/system-architecture/security-invariants"
}
]
},
"stateValidation": {
"categories": [
{
"title": "Challenges",
"description": "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`).\n\nCurrently `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.\n\nThe `PROVER`, `EMERGENCY`, and `CHALLENGER` roles on the Rollup are gated by access control; see the Permissions section for the current holders.",
"references": [
{
"title": "Fluent Rollup Architecture",
"url": "https://docs.fluent.xyz/system-architecture/rollup-architecture"
},
{
"title": "Fluent Bridge Architecture",
"url": "https://docs.fluent.xyz/system-architecture/bridge"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "an invalid batch is preconfirmed by a compromised AWS Nitro Enclave and no permissioned challenger disputes it before the challenge window closes."
}
]
}
]
}
}
permissions+0-32
{
"ethereum": {
"roles": [
{
"id": "Proposer",
"name": "Proposer",
"description": "schedule operations on the timelock; the configured min-delay must elapse before they can be executed.",
"accounts": [
{
"address": "eth:0x9ec3f0d76A6d3847d86374c791C6E170CAd9518D",
"type": "EOA",
"isVerified": true,
"name": "FluentAdminEOA",
"url": "#FluentAdminEOA"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
},
{
"id": "Sequencer",
"name": "Sequencer",
"description": "commit batches and submit EIP-4844 blob hashes to the Rollup.",
"accounts": [
{
"address": "eth:0xFd58Bc438d910088C413b889Eaa0aded5C0d1c26",
"type": "EOA",
"isVerified": true,
"name": "FluentSequencerEOA",
"url": "#FluentSequencerEOA"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
},
{
"id": "Validator",
"name": "Validator",
"description": "submit SP1 ZK proofs that resolve challenged batches and accelerate finalization via finalizeWithProofs.",
"accounts": [
{
"address": "eth:0xB9E6f78a0F35F96b806D0359AbB251117aCe255C",
"type": "EOA",
"isVerified": true,
"name": "FluentProverEOA",
"url": "#FluentProverEOA"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
},
{
"id": "AnyTrust FastConfirmer",
"name": "AnyTrust FastConfirmer",
"description": "AWS Nitro Enclave attestation key admitted to preconfirm batches; binds the optimistic fast-withdrawal path.",
"accounts": [
{
"address": "eth:0xef9Dc1F87BAA090a35B985DAad9c8096440F2012",
"type": "EOA",
"isVerified": true,
"name": "FluentEnclaveAttesterEOA",
"url": "#FluentEnclaveAttesterEOA"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
},
{
"id": "Relayer",
"name": "Relayer",
"description": "deliver L2->L1 messages on L1 via receiveMessageWithProof; this is the only entry point for first-time delivery, so user withdrawals progress only when a holder of this role acts (failed-execution retries via receiveFailedMessage are permissionless once a message has been delivered at least once).",
"accounts": [
{
"address": "eth:0x4A0e88275dC08a15Bad0d12e7805574Ca0853A48",
"type": "EOA",
"isVerified": true,
"name": "EOA 1",
"url": "#EOA-1"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
}
],
"actors": [
{
"id": "FluentMultisig",
"name": "FluentMultisig",
"description": "A Multisig with 4/5 threshold. \n* Can upgrade **with no delay**\n * Blacklist \n * FluentRollup \n * NativeGateway \n * L1FluentBridge \n * ERC20TokenFactory \n * ERC20Gateway \n* Can interact with FluentRollup\n * grant / revoke all access control roles on the Rollup contract and configure its core parameters \n * revert non-finalized (committed or preconfirmed) batches via revertBatches; cannot revert finalized batches \n* Can interact with FluentTimeLock\n * execute scheduled timelock operations once the min-delay has elapsed \n* Can interact with L1FluentBridge\n * configure the rollup binding, oracles, gas parameters and gateway whitelist on the L1 bridge core, and grant / revoke its other roles \n * pause / unpause the L1 bridge core and clear expired L1->L2 deposits via skipExpiredDeposits (no user-initiated refund path exists; rollbackMessageWithProof reverts with NOT_IMPLEMENTED) ",
"accounts": [
{
"address": "eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11",
"type": "Contract",
"isVerified": true,
"name": "0x33C0…ff11",
"url": "https://etherscan.io/address/0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x1C07545A5EF140E2076D02a4a11cf0d7Bb172523",
"type": "EOA",
"isVerified": true,
"name": "0x1C07…2523",
"url": "https://etherscan.io/address/0x1C07545A5EF140E2076D02a4a11cf0d7Bb172523"
},
{
"address": "eth:0x9ec3f0d76A6d3847d86374c791C6E170CAd9518D",
"type": "EOA",
"isVerified": true,
"name": "FluentAdminEOA",
"url": "#FluentAdminEOA"
},
{
"address": "eth:0x6845b3A6B1b8071944D20a797D57F4c0b8E3f99b",
"type": "EOA",
"isVerified": true,
"name": "0x6845…f99b",
"url": "https://etherscan.io/address/0x6845b3A6B1b8071944D20a797D57F4c0b8E3f99b"
},
{
"address": "eth:0x624Cd730EE0f49c51a150b6e29Ae833DfE2B0C9B",
"type": "EOA",
"isVerified": true,
"name": "0x624C…0C9B",
"url": "https://etherscan.io/address/0x624Cd730EE0f49c51a150b6e29Ae833DfE2B0C9B"
},
{
"address": "eth:0x9CDFcAB50663169Dcd99597815472E2494f09Fa0",
"type": "EOA",
"isVerified": true,
"name": "0x9CDF…9Fa0",
"url": "https://etherscan.io/address/0x9CDFcAB50663169Dcd99597815472E2494f09Fa0"
}
],
"discoveryDrivenData": true
},
{
"id": "SP1VerifierGatewayMultisig",
"name": "SP1VerifierGatewayMultisig",
"description": "A Multisig with 2/3 threshold. \n* Can interact with SP1VerifierGateway\n * affect the liveness and safety of the gateway - can transfer ownership, add and freeze verifier routes ",
"accounts": [
{
"address": "eth:0xCafEf00d348Adbd57c37d1B77e0619C6244C6878",
"type": "Contract",
"isVerified": true,
"name": "0xCafE…6878",
"url": "https://etherscan.io/address/0xCafEf00d348Adbd57c37d1B77e0619C6244C6878"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0xBaB2c2aF5b91695e65955DA60d63aD1b2aE81126",
"type": "EOA",
"isVerified": true,
"name": "0xBaB2…1126",
"url": "https://etherscan.io/address/0xBaB2c2aF5b91695e65955DA60d63aD1b2aE81126"
},
{
"address": "eth:0x72Ff26D9517324eEFA89A48B75c5df41132c4f54",
"type": "EOA",
"isVerified": true,
"name": "0x72Ff…4f54",
"url": "https://etherscan.io/address/0x72Ff26D9517324eEFA89A48B75c5df41132c4f54"
},
{
"address": "eth:0x9395e83720bf2D8ac6435f9c520b48E289Cb8885",
"type": "EOA",
"isVerified": true,
"name": "0x9395…8885",
"url": "https://etherscan.io/address/0x9395e83720bf2D8ac6435f9c520b48E289Cb8885"
}
],
"discoveryDrivenData": true
},
{
"id": "FluentAdminEOA",
"name": "FluentAdminEOA",
"accounts": [
{
"address": "eth:0x9ec3f0d76A6d3847d86374c791C6E170CAd9518D",
"type": "EOA",
"isVerified": true,
"name": "0x9ec3…518D",
"url": "https://etherscan.io/address/0x9ec3f0d76A6d3847d86374c791C6E170CAd9518D"
}
],
"chain": "ethereum",
"description": "Member of FluentMultisig.\n* Can interact with FluentTimeLock\n * cancel scheduled timelock operations before they are executed \n* A Proposer - acting directly",
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x4A0e88275dC08a15Bad0d12e7805574Ca0853A48",
"type": "EOA",
"isVerified": true,
"name": "0x4A0e…3A48",
"url": "https://etherscan.io/address/0x4A0e88275dC08a15Bad0d12e7805574Ca0853A48"
}
],
"chain": "ethereum",
"description": "* A Relayer - acting directly",
"discoveryDrivenData": true
},
{
"id": "FluentProverEOA",
"name": "FluentProverEOA",
"accounts": [
{
"address": "eth:0xB9E6f78a0F35F96b806D0359AbB251117aCe255C",
"type": "EOA",
"isVerified": true,
"name": "0xB9E6…255C",
"url": "https://etherscan.io/address/0xB9E6f78a0F35F96b806D0359AbB251117aCe255C"
}
],
"chain": "ethereum",
"description": "* A Validator - acting directly",
"discoveryDrivenData": true
},
{
"id": "FluentEnclaveAttesterEOA",
"name": "FluentEnclaveAttesterEOA",
"accounts": [
{
"address": "eth:0xef9Dc1F87BAA090a35B985DAad9c8096440F2012",
"type": "EOA",
"isVerified": true,
"name": "0xef9D…2012",
"url": "https://etherscan.io/address/0xef9Dc1F87BAA090a35B985DAad9c8096440F2012"
}
],
"chain": "ethereum",
"description": "* A FastConfirmer - acting directly",
"discoveryDrivenData": true
},
{
"id": "FluentSequencerEOA",
"name": "FluentSequencerEOA",
"accounts": [
{
"address": "eth:0xFd58Bc438d910088C413b889Eaa0aded5C0d1c26",
"type": "EOA",
"isVerified": true,
"name": "0xFd58…1c26",
"url": "https://etherscan.io/address/0xFd58Bc438d910088C413b889Eaa0aded5C0d1c26"
}
],
"chain": "ethereum",
"description": "* A Sequencer - acting directly",
"discoveryDrivenData": true
}
]
}
}
contracts+17-3
{
"addresses": {
"ethereum": [
{
"name": "FastWithdrawalList",
"isVerified": true,
"address": "eth:0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x94F068ee9A23F3F883bdE060502a46E9C4EeAb25"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776720647,
"transactionHash": "0x78106cf05ac5ded33961c11e23dbb44bdb6f96fdec0283f55c479f57c88ebf0f",
"implementations": [
"eth:0x94F068ee9A23F3F883bdE060502a46E9C4EeAb25"
]
}
],
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x3eFc3c84ecf259Da36E33692f2a107A0AB88D30E#code"
},
{
"name": "NativeGateway",
"isVerified": true,
"address": "eth:0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x025f11FedA181E2Ba63bb86536DD987E0769f586"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x7e992147bddd61de0f8c13840203f14802196eb89605508418ad4f634394143e",
"implementations": [
"eth:0x482Df12fbc3BA7A7f02Aa928e620fd12aF5Fd30e"
]
},
{
"timestamp": 1776358595,
"transactionHash": "0xd965bd1614a8301bfb88f5bc4f6f1d3c3914df56a895ddd21c38796e03a4f790",
"implementations": [
"eth:0xbA3d3B60b6f462AA3fb2D63F8B610Fa8825c3019"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x0e1838d3baa70b38111493feb6d09029ff0f0b594ea9619c9c28b9442ff30ffb",
"implementations": [
"eth:0x025f11FedA181E2Ba63bb86536DD987E0769f586"
]
}
],
"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.\n* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x8976Ca4E0c8467097Da675399fB7DB454a1b56dd#code"
},
{
"name": "L1FluentBridge",
"isVerified": true,
"address": "eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739227,
"transactionHash": "0x41d58e18be407db8b25d9d8c198f42d88ef67104ae3286e1e318ec2d67b251c3",
"implementations": [
"eth:0xF10F4D565d050BEeb9e37A548853B9c88Fd65373"
]
},
{
"timestamp": 1776358511,
"transactionHash": "0xcf06c58c5a0a601390bb3835778a390bd0b2b25c675319feeef96a4a83940112",
"implementations": [
"eth:0x52f9e37FeDd9EF7d5eCB24D77cff40d5337A5770"
]
},
{
"timestamp": 1776457763,
"transactionHash": "0x9a92a1828c2b689acab26e5ab139ad6faa2bec120c7462d9d3b01bffb708489a",
"implementations": [
"eth:0xfF0Ef75C7a2942294A5a828b1c11F7aF618De4cA"
]
},
{
"timestamp": 1776591743,
"transactionHash": "0x75ee505dc6be60d16c93c7dd6cfc33b99439de51561aed0c9fbe65e278095437",
"implementations": [
"eth:0xA0374Fa5324f4A255693Eb6B35236a21C24392f8"
]
},
{
"timestamp": 1776719975,
"transactionHash": "0x0d5b3fa6d88af319cbae57d5dd3b53ce6749e90690ddaa2f8497d40ca19adf44",
"implementations": [
"eth:0x95c76524803B8EA61c910dc0cB02B76efD6D3791"
]
},
{
"timestamp": 1776720671,
"transactionHash": "0xc78efc4e911d121701277a5eb494c8e74aad26a4b18f358d655e955cc7747c02",
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
]
},
{
"timestamp": 1779289223,
"transactionHash": "0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
}
],
"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.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **pauser**: FluentMultisig\n * **relayer**: EOA 1",
"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.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **pauser**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x9CAcf613fC29015893728563f423fD26dCdB8Ddc#code"
},
{
"name": "ERC20Gateway",
"isVerified": true,
"address": "eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x407471f08b665a9e9c7a6a44548270a9613093d25728e1886883f5893c75f600",
"implementations": [
"eth:0x8c435855E8090eB526f33f94d0474d59fD7E32A2"
]
},
{
"timestamp": 1776358559,
"transactionHash": "0x39e5b62153053ecba10153dce9d95ca2ff53e2f69f6cf7564e0369537630c8f7",
"implementations": [
"eth:0x5398c8De96Ef049B5d8D0ce01e4C9D58c47B98C9"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x78942254165dc0ae59b763fd30c9f472e0aca5f39ee7fa7757bdff498487ca96",
"implementations": [
"eth:0xe1Cf59617A333eaCEAF36BE03cB0b94A250acf4b"
]
},
{
"timestamp": 1776908303,
"transactionHash": "0x2625ebb9ea1e887805cc22e6d221a6e13f79d0db0b5acac9815e3231d39b0ce6",
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
}
],
"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.\n* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFD4C62647A34FF6d6802092F5fbe176099223B61#code"
},
{
"name": "FluentTimeLock",
"isVerified": true,
"address": "eth:0x7846C001835d889A29ba659f67A5B7ac98E73bF4",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **canceller**: FluentAdminEOA\n * **executor**: FluentMultisig\n * **proposer**: FluentAdminEOA",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x7846C001835d889A29ba659f67A5B7ac98E73bF4#code"
},
{
"name": "ERC20PeggedToken",
"isVerified": true,
"address": "eth:0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x056fD0A3eD85c6ae1Ec1c398B33581951Ed4b090#code"
},
{
"name": "Blacklist",
"isVerified": true,
"address": "eth:0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0xB9E397C9506F71590be1f24da3f219bedE38b845"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776720923,
"transactionHash": "0x48b82ab6b95e56504680c0c5d8b75a9a389e4619bbd9ed6d4910decdacea713e",
"implementations": [
"eth:0xB9E397C9506F71590be1f24da3f219bedE38b845"
]
}
],
"description": "* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x05C5d46a5e6f92fB9CdA9A8b03E4440A175D1484#code"
},
{
"name": "FluentRollup",
"isVerified": true,
"address": "eth:0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0xF6ad498c8B9bfbD2F26EcD9665aC71d9032245c1"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1776356639,
"transactionHash": "0x9280e1cd08307a30efd83b424181e0c0a377dacb4216a206b290575bf4a5edf5",
"implementations": [
"eth:0x405eA6684CDD57e8f9c15395626F3c72c5255D50"
]
},
{
"timestamp": 1776457595,
"transactionHash": "0xae2d6f36ca6010e6405191447ffa78f5c39330e849945b4e12cb55ce112e8db1",
"implementations": [
"eth:0x76Ec5c71FF385b2E174f1191589a7368eE9d7C83"
]
},
{
"timestamp": 1776591899,
"transactionHash": "0x8faf3ed7a062e5732abf80beb9c9400705745d7bbc5924c2a1523d970c655fb5",
"implementations": [
"eth:0x7EafBd621Df027EbefFb7a971120b13A88710494"
]
},
{
"timestamp": 1776592211,
"transactionHash": "0x46e6634771e5902428987a7e423c9ca431fce3c7d7bf9346f213ba9c18cb247a",
"implementations": [
"eth:0x5E0D546dAdE979c9eEE458Cc8b6212E53921889f"
]
},
{
"timestamp": 1776592511,
"transactionHash": "0x915f648035250a9982c5a9902ddc37f3c72047fa8b8fd3241ee93455d93508fa",
"implementations": [
"eth:0x46a485181ab7E0D68508b8dE306e88a3B6718193"
]
},
{
"timestamp": 1776683927,
"transactionHash": "0x93a23ca29d9dbbbedbab902d37a83cad523c82d4b3ec930f5622ed508171a0e3",
"implementations": [
"eth:0xf7EEe2D42f70DCacE0a6E368099A9EBCcaB74Efd"
]
},
{
"timestamp": 1776875747,
"transactionHash": "0x656d50f10e86f6bbee1bd4c39258cc2ebf75341d74be55c3163b7ed990c931b6",
"implementations": [
"eth:0xF6ad498c8B9bfbD2F26EcD9665aC71d9032245c1"
]
}
],
"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.\n* Roles:\n * **defaultAdmin**: FluentMultisig\n * **emergency**: FluentMultisig\n * **preconfirmation**: FluentEnclaveAttesterEOA\n * **prover**: FluentProverEOA\n * **sequencer**: FluentSequencerEOA",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x1cF53Fd9CD0b713be29F2b41cA17A943f138727f#code"
},
{
"name": "NitroVerifier",
"isVerified": true,
"address": "eth:0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x207FBb4AC5227Ab598B8072BdC1E150dF687AC5B#code"
},
{
"name": "SP1VerifierGateway",
"isVerified": true,
"address": "eth:0x397A5f7f3dBd538f23DE225B51f532c34448dA9B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n* Roles:\n * **owner**: SP1VerifierGatewayMultisig",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x397A5f7f3dBd538f23DE225B51f532c34448dA9B#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "Verifier contract for SP1 proofs (v5.0.0).\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508#code"
},
{
"name": "SP1Verifier",
"isVerified": true,
"address": "eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2#code"
},
{
"name": "UpgradeableBeacon",
"isVerified": true,
"address": "eth:0xdD283a04cc711aB9c08d79e665835821BEef710B",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"description": "",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xdD283a04cc711aB9c08d79e665835821BEef710B#code"
},
{
"name": "ERC20TokenFactory",
"isVerified": true,
"address": "eth:0xF6d49E874Cb64b8ee56D6F99BD340134B30AB225",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0xeDB323c7406d534B301355913717EC0B2F7b350d"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739251,
"transactionHash": "0x7da59dc1e5141d921cec263ece830ff3920c8bb7e974e5a98bb0c685d4009f40",
"implementations": [
"eth:0xE2A964a92d1857B8058474BD51d195C934d8BFc5"
]
},
{
"timestamp": 1776358655,
"transactionHash": "0x34799b9a42a606eaab4ee86025cb9e3f1de8927113f80933eb4edbc2a4c183f5",
"implementations": [
"eth:0xeDB323c7406d534B301355913717EC0B2F7b350d"
]
}
],
"description": "* Roles:\n * **admin**: FluentMultisig",
"upgradableBy": [
{
"name": "FluentMultisig",
"delay": "no"
}
],
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xF6d49E874Cb64b8ee56D6F99BD340134B30AB225#code"
},
{
"name": "NitroVerifier",
"isVerified": true,
"address": "eth:0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F",
"upgradeability": {
"proxyType": "immutable",
"admins": [],
"implementations": [],
"immutable": true
},
"chain": "ethereum",
"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.\n",
"discoveryDrivenData": true,
"url": "https://etherscan.io/address/0xFdB04b67ecD8352bA3885F66fFfddf1f5f25292F#code"
}
]
},
"escrows": [
{
"address": "0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"sinceTimestamp": 1775739227,
"tokens": [
"ETH"
],
"contract": {
"isVerified": true,
"address": "eth:0x9CAcf613fC29015893728563f423fD26dCdB8Ddc",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x0000000000000000000000000000000000000000"
],
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739227,
"transactionHash": "0x41d58e18be407db8b25d9d8c198f42d88ef67104ae3286e1e318ec2d67b251c3",
"implementations": [
"eth:0xF10F4D565d050BEeb9e37A548853B9c88Fd65373"
]
},
{
"timestamp": 1776358511,
"transactionHash": "0xcf06c58c5a0a601390bb3835778a390bd0b2b25c675319feeef96a4a83940112",
"implementations": [
"eth:0x52f9e37FeDd9EF7d5eCB24D77cff40d5337A5770"
]
},
{
"timestamp": 1776457763,
"transactionHash": "0x9a92a1828c2b689acab26e5ab139ad6faa2bec120c7462d9d3b01bffb708489a",
"implementations": [
"eth:0xfF0Ef75C7a2942294A5a828b1c11F7aF618De4cA"
]
},
{
"timestamp": 1776591743,
"transactionHash": "0x75ee505dc6be60d16c93c7dd6cfc33b99439de51561aed0c9fbe65e278095437",
"implementations": [
"eth:0xA0374Fa5324f4A255693Eb6B35236a21C24392f8"
]
},
{
"timestamp": 1776719975,
"transactionHash": "0x0d5b3fa6d88af319cbae57d5dd3b53ce6749e90690ddaa2f8497d40ca19adf44",
"implementations": [
"eth:0x95c76524803B8EA61c910dc0cB02B76efD6D3791"
]
},
{
"timestamp": 1776720671,
"transactionHash": "0xc78efc4e911d121701277a5eb494c8e74aad26a4b18f358d655e955cc7747c02",
"implementations": [
"eth:0x047AaDf25df7D17bB5B6b1FF31cecD1E4973C227"
]
},
{
"timestamp": 1779289223,
"transactionHash": "0x5683f1be2880db1238db0cafc17623f895de685541543b5fd577efdfec53429c",
"implementations": [
"eth:0xF67255be817061139C9DeeA757f7276916cBF849"
]
}
],
"url": "https://etherscan.io/address/0x9CAcf613fC29015893728563f423fD26dCdB8Ddc#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
},
{
"address": "0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"sinceTimestamp": 1775739563,
"tokens": "*",
"contract": {
"isVerified": true,
"address": "eth:0xFD4C62647A34FF6d6802092F5fbe176099223B61",
"upgradeability": {
"proxyType": "EIP1967 proxy",
"admins": [
"eth:0x33C0B99F3210a9578d81d5B13dEC03160F58ff11"
],
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
},
"chain": "ethereum",
"pastUpgrades": [
{
"timestamp": 1775739563,
"transactionHash": "0x407471f08b665a9e9c7a6a44548270a9613093d25728e1886883f5893c75f600",
"implementations": [
"eth:0x8c435855E8090eB526f33f94d0474d59fD7E32A2"
]
},
{
"timestamp": 1776358559,
"transactionHash": "0x39e5b62153053ecba10153dce9d95ca2ff53e2f69f6cf7564e0369537630c8f7",
"implementations": [
"eth:0x5398c8De96Ef049B5d8D0ce01e4C9D58c47B98C9"
]
},
{
"timestamp": 1776720683,
"transactionHash": "0x78942254165dc0ae59b763fd30c9f472e0aca5f39ee7fa7757bdff498487ca96",
"implementations": [
"eth:0xe1Cf59617A333eaCEAF36BE03cB0b94A250acf4b"
]
},
{
"timestamp": 1776908303,
"transactionHash": "0x2625ebb9ea1e887805cc22e6d221a6e13f79d0db0b5acac9815e3231d39b0ce6",
"implementations": [
"eth:0x81e1158368bD28Cc6E8380852087a9512A9670fB"
]
}
],
"url": "https://etherscan.io/address/0xFD4C62647A34FF6d6802092F5fbe176099223B61#code"
},
"chain": "ethereum",
"includeInTotal": true,
"chainId": 1
}
],
"programHashes": [
{
"title": "Fluent STF guest program",
"proverSystemProject": "sp1hypercube",
"description": "Guest program implementing state transition function of the Fluent rollup",
"verificationStatus": "unsuccessful",
"verificationSteps": "According to the Fluent team, the sources for this program were not yet published. Thus it cannot be verified.",
"hash": "0x00e34107e4c5284bd4ecc4269c650671038c1e85d9dacb931b534e984f607334"
},
{
"title": "Fluent Nitro TEE verifier",
"proverSystemProject": "sp1hypercube",
"programUrl": "https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.0/bin/aws-nitro-validator",
"description": "Verifies correctness of a single TEE attestation for executing Fluent STF within a trusted enclave on AWS cloud.",
"verificationStatus": "successful",
"verificationSteps": "\nRegeneration steps are based on [this guide](https://github.com/fluentlabs-xyz/fluent-stf/blob/v1.0.0/README.md). The process is reproducible on a Linux machnie.\n\n1. Install prerequesits: docker, python3, git, jq.\n2. Checkout correct branch in https://github.com/fluentlabs-xyz/fluent-stf/tree/v1.0.0: `git checkout v1.0.0`. Commit hash should be `c8023c370a3fb859b591223bf81a9fe81df43778`.\n3. Build Nitro program for the mainnet within docker: `make build-nitro-validator-docker NETWORK=mainnet`. This command will create `nitro-validaotr-mainnet.vkey` file with the program hash string.\n ",
"hash": "0x0085924e73e2b0d0e2626c592825fe092d3cfb63b108757965b2a6c06c8c311b"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a contract receives a malicious code upgrade. There is no delay on code upgrades.",
"isCritical": true
}
],
"zkVerifiers": [
"eth:0x50ACFBEdecf4cbe350E1a86fC6f03a821772f1e5",
"eth:0x99A74A05a0FaBEB217C1A329b0dac59a1FA52508",
"eth:0xb69f2584CBcFf99a58C4e7002E8b89Af54a6f4e2"
]
}