
The Centrifuge Protocol is an open, decentralized protocol for onchain asset management. Built on immutable smart contracts, it enables permissionless deployment of customizable tokenization products. Build a wide range of use cases, from permissioned funds to onchain loans, while enabling fast, secure deployment. ERC-4626 and ERC-7540 vaults allow seamless integration into DeFi. Using protocol-level chain abstraction, tokenization issuers access liquidity across any network, all managed from one Hub chain of their choice. The contest focuses on the v3.1 release, which adds onchain accounting, an improved multi-chain messaging system, a refactored core module that increases modularity, and more.
Scope
On what chains are the smart contracts going to be deployed?
Ethereum, Base, Arbitrum, Avalanche, BNB Smart Chain, Plume
If you are integrating tokens, are you allowing only whitelisted tokens to work with the codebase or any complying with the standard? Are they assumed to have certain properties, e.g. be non-reentrant? Are there any types of weird tokens you want to integrate?
Protocol only supports standard tokens with 2-18 decimals (decimals are enforced in Spoke.sol contract), no weird tokens.
Are there any limitations on values set by admins (or other roles) in the codebase, including restrictions on array lengths?
Pool manager roles are fully trusted within the context of the pool. Pool manager roles include the hub manager, balance sheet manager, gateway manager, request manager, and hook manager.
Similarly, custom gateway adapters and transfer hooks should be able to do anything in their set pool (ie, trusted), but shouldn't be able to do anything outside of their pool, and can be considered untrusted (in the context of other pools).
Relayers on the on/off ramp manager are fully trusted to decide withdrawal destinations for assets in their pool.
Merkle proof manager strategists are fully trusted to execute calls allowed within the policy set for that pool.
Are there any limitations on values set by admins (or other roles) in protocols you integrate with, including restrictions on array lengths?
No.
Is the codebase expected to comply with any specific EIPs?
ERC-20: issued share tokens, as well as holdings on the balance sheet of a pool.
ERC-1404: standardized compliance checks for share tokens.
ERC-2612: permit functionality built in to share tokens.
ERC-4626: tokenized vault standard, used for synchronous deposit vaults.
ERC-6909: holdings of multi-tokens on the balance sheet of a pool.
ERC-7540: asynchronous vault standard, used for asynchronous vault logic.
ERC-7575: multi-asset vault standard, to allow multiple investment assets per share token.
Issues related to EIP non-compliance can be valid only if they lead to Medium or High impact, besides the EIP violation itself.
Are there any off-chain mechanisms involved in the protocol (e.g., keeper bots, arbitrage bots, etc.)? We assume these mechanisms will not misbehave, delay, or go offline unless otherwise specified.
There will be off-chain keepers for:
notifyDeposit/notifyRedeem for investor request claiming, based on the events from the BatchRequestManager.SimplePriceManager ), based on events from the Gateway.QueueManager.sync, based on events from the BalanceSheet.OnOfframpManager.deposit, based on transfers to the on/offramp manager contract.What properties/invariants do you want to hold even if breaking them has a low/unknown impact?
-
Please discuss any design choices you made.
See docs, e.g.
Please provide links to previous audits (if any) and all the known issues or acceptable risks.
Audits: https://v3-1.documentation-569.pages.dev/developer/protocol/security/
Known issues:
Please list any relevant protocol resources.
Additional audit information.
Severity clarifications:
A particular area of concern is pool managers being able to manipulate other pools. Several issues have been found in the past related to this, including:
AsyncRequestManager. Fixed by changing the rely flow.The main changes in v3.1 versus v3.0.1 include:
ShareClassManager to a modular BatchRequestManager, and ShareClassManager with only the share class logicSpoke contract, separate VaultRegistryQueueManager for automating balance sheet synchronization to the hubNAVManager for automating NAV calculationsSimplePriceManager for automating share price calculations based on the NAVOracleValuation contract for manual updates of asset pricesUpdateContract from spoke to hubBaseTransferHook with simplified implementations on topTotal Rewards
Contest Pool
Lead Senior Watson
Lead Judge
234,400 USDC
30,000 USDC
12,000 USDC
Status
Scope
Start Time
End Time
Judging Rules
Reserved Auditors