FalconX Credit Vault
Senior tranche of the FalconX credit vault on Pareto. USDC is lent to one FalconX borrower wallet, which funds prime-brokerage credit lines. Collateral sits offchain. The junior tranche has no tokens outstanding, so there is no onchain first-loss buffer. This is the vault FalconX announced and that rwa.xyz lists as AA_FalconXUSDC, not Plume's NFALCON or Sygnum's Desygnate. A deprecated Pareto deployment on Optimism is not tracked.
Control
Who can freeze, mint, pause or upgrade, and what stops them?
A single key can create new tokens.
A single key can create new tokens.
A single key can destroy tokens in any wallet.
A single key can change the onchain price.
Multisig signers aren't named, so their independence can't be checked.
A Safe module can act without the signers' approval.
A 3-of-6 multisig can change the onchain price with no timelock.
A Safe module can act without the signers' approval.
A 3-of-6 multisig can move the assets backing the token with no timelock.
A 3-of-6 multisig can grant or revoke every other role with no timelock.
The issuer doesn't document its admin powers; they're only visible onchain.
Audited by Sherlock (2025-08).
- 5 privileged functions still need manual review.
- Bug bounty on Immunefi, up to $50,000.
- Transfers are limited to allowlisted wallets.
Audits and bug bounty
- Sherlock · Idle Pareto update (credit vaults)1 Aug 2025
Bug bounty on Immunefi, up to $50,000.
Chains and bridges
Holders on a bridged chain also depend on the bridge.
- ethereumIssued natively · Pareto
Who controls AA_FalconXUSDC on Ethereum
Token and service contracts on the left, the accounts holding their powers on the right. Edge color is the risk status of that power.
IdleCreditVault
Service · verified
0x17E9…eEf3
IdleCDOEpochVariant
Service · verified
0x433D…be4d
AA_FalconXUSDC token
IdleCDOTranche · Not a proxy
0xC26A…f99C
IdleCDOTranche
Service · verified
0xacbb…b3D6
ProxyAdmin
0x9438…f351
Upgrade timelock (1 day)
Timelock · 24h delay
0xDa86…5A44
Vault owner Safe (3 of 6)
Safe 3/6 · 1 module(s)
0xFb3b…3814
- ├ 0x56d1…8D41
- ├ 0x03a9…Bd8d
- ├ 0xD01C…d8F9
- └ +3 more signers
Epoch operator (single wallet)
EOA
0x1fb0…Df58
Borrower wallet (single wallet)
EOA
0xc08f…A2C6
Powers
Every privileged power we found, normalized to canonical power types.
- UpgradeCriticalGreenProxyAdmin0x9438…f351
→ Timelock 24h → Safe 3/6
1-day delay · via
Proxy upgrade · eip1967 admin - UpgradeCriticalGreenProxyAdmin0x9438…f351
→ Timelock 24h → Safe 3/6
1-day delay · via
Proxy upgrade · eip1967 admin - MintCriticalRedFalconX credit vault (IdleCDO)IdleCDO0x433D…be4d
→ EOA
None · via
IdleCDOTranche.mint · minter is the vault - MintCriticalRedFalconX credit vault (IdleCDO)IdleCDO0x433D…be4d
→ EOA
None · via
IdleCDOTranche.mint · minter is the vault - Burn from holderCriticalRedFalconX credit vault (IdleCDO)IdleCDO0x433D…be4d
→ EOA
None · via
IdleCDOTranche.burn · minter is the vault - Burn from holderCriticalRedFalconX credit vault (IdleCDO)IdleCDO0x433D…be4d
→ EOA
None · via
IdleCDOTranche.burn · minter is the vault - Set priceCriticalRedFalconX credit vault (IdleCDO)IdleCDO0x433D…be4d
→ EOA
None · via
IdleCreditVault.setApr, setAprs, setAprsWithBuffer · only the vault, which the operator drives at epoch stop - Set priceCriticalRedEpoch operator (single wallet)EOA0x1fb0…Df58
None · via
IdleCDOEpochVariant.startEpoch, stopEpoch, stopEpochWithDuration · owner or the strategy manager's operator. stopEpoch sets the interest and therefore priceAA - Set priceCriticalRedBorrower wallet (single wallet)EOA0xc08f…A2C6
None · via
IdleCDOEpochVariant.writeOffDeposit · borrower, and only while an epoch is running - Set priceCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCDOEpochVariant.startEpoch, stopEpoch, stopEpochWithDuration · owner or the strategy manager's operator. stopEpoch sets the interest and therefore priceAA - Set priceCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCDOEpochVariant.updateAccounting · _checkOnlyOwnerOrGuardian() (owner (guardian is an internal variable, initialized to the owner; no public getter)) - Allocate fundsCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCreditVault.setBorrower · owner. points the vault's only borrower - Allocate fundsCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCreditVault.transferToken · onlyOwner (owner) - Allocate fundsCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCDOEpochVariant.transferToken · owner, no timelock - Grant rolesCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCreditVault.renounceOwnership, setManager, transferOwnership · onlyOwner (owner) - Grant rolesCriticalYellowVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCDOEpochVariant.renounceOwnership, transferOwnership · onlyOwner (owner) - PauseHighGreenVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCDOEpochVariant.pause, unpause, emergencyShutdown · owner. startEpoch also pauses deposits itself - Set complianceHighGreenVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
No delay · via
IdleCDOEpochVariant._setLimit · _checkOnlyOwner() (owner) - UnclassifiedNeeds reviewVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
Needs review · via
IdleCreditVault.setMaxApr, setWhitelistedCDO · onlyOwner (owner) - UnclassifiedNeeds reviewEpoch operator (single wallet)EOA0x1fb0…Df58
Needs review · via
IdleCDOEpochVariant.setEpochParams, setInstantWithdrawParams, setIsDepositDuringEpochDisabled +1 more · _checkOnlyOwnerOrManager() (owner or the strategy manager's operator) - UnclassifiedNeeds reviewVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
Needs review · via
IdleCDOEpochVariant.setBBDepositEnabled, setFeeParams, setGuardian +4 more · _checkOnlyOwner() (owner) - UnclassifiedNeeds reviewVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
Needs review · via
IdleCDOEpochVariant.setEpochParams, setInstantWithdrawParams, setIsDepositDuringEpochDisabled +1 more · _checkOnlyOwnerOrManager() (owner or the strategy manager's operator) - UnclassifiedNeeds reviewVault owner Safe (3 of 6)Safe 3/60xFb3b…3814
Needs review · via
IdleCDOEpochVariant.setIsDepositDuringEpochDisabled · _checkOnlyOwnerOrGuardian() (owner (guardian is an internal variable, initialized to the owner; no public getter))
| Power | Criticality | Held by | Checks | Status | Found via |
|---|---|---|---|---|---|
| Upgrade | Critical | 1-day delay | Green | Proxy upgrade · eip1967 admin | |
| Upgrade | Critical | 1-day delay | Green | Proxy upgrade · eip1967 admin | |
| Mint | Critical | None | Red | IdleCDOTranche.mint · minter is the vault | |
| Mint | Critical | None | Red | IdleCDOTranche.mint · minter is the vault | |
| Burn from holder | Critical | None | Red | IdleCDOTranche.burn · minter is the vault | |
| Burn from holder | Critical | None | Red | IdleCDOTranche.burn · minter is the vault | |
| Set price | Critical | None | Red | IdleCreditVault.setApr, setAprs, setAprsWithBuffer · only the vault, which the operator drives at epoch stop | |
| Set price | Critical | None | Red | IdleCDOEpochVariant.startEpoch, stopEpoch, stopEpochWithDuration · owner or the strategy manager's operator. stopEpoch sets the interest and therefore priceAA | |
| Set price | Critical | None | Red | IdleCDOEpochVariant.writeOffDeposit · borrower, and only while an epoch is running | |
| Set price | Critical | No delay | Yellow | IdleCDOEpochVariant.startEpoch, stopEpoch, stopEpochWithDuration · owner or the strategy manager's operator. stopEpoch sets the interest and therefore priceAA | |
| Set price | Critical | No delay | Yellow | IdleCDOEpochVariant.updateAccounting · _checkOnlyOwnerOrGuardian() (owner (guardian is an internal variable, initialized to the owner; no public getter)) | |
| Allocate funds | Critical | No delay | Yellow | IdleCreditVault.setBorrower · owner. points the vault's only borrower | |
| Allocate funds | Critical | No delay | Yellow | IdleCreditVault.transferToken · onlyOwner (owner) | |
| Allocate funds | Critical | No delay | Yellow | IdleCDOEpochVariant.transferToken · owner, no timelock | |
| Grant roles | Critical | No delay | Yellow | IdleCreditVault.renounceOwnership, setManager, transferOwnership · onlyOwner (owner) | |
| Grant roles | Critical | No delay | Yellow | IdleCDOEpochVariant.renounceOwnership, transferOwnership · onlyOwner (owner) | |
| Pause | High | No delay | Green | IdleCDOEpochVariant.pause, unpause, emergencyShutdown · owner. startEpoch also pauses deposits itself | |
| Set compliance | High | No delay | Green | IdleCDOEpochVariant._setLimit · _checkOnlyOwner() (owner) | |
| Unclassified | — | Needs review | Needs review | IdleCreditVault.setMaxApr, setWhitelistedCDO · onlyOwner (owner) | |
| Unclassified | — | Needs review | Needs review | IdleCDOEpochVariant.setEpochParams, setInstantWithdrawParams, setIsDepositDuringEpochDisabled +1 more · _checkOnlyOwnerOrManager() (owner or the strategy manager's operator) | |
| Unclassified | — | Needs review | Needs review | IdleCDOEpochVariant.setBBDepositEnabled, setFeeParams, setGuardian +4 more · _checkOnlyOwner() (owner) | |
| Unclassified | — | Needs review | Needs review | IdleCDOEpochVariant.setEpochParams, setInstantWithdrawParams, setIsDepositDuringEpochDisabled +1 more · _checkOnlyOwnerOrManager() (owner or the strategy manager's operator) | |
| Unclassified | — | Needs review | Needs review | IdleCDOEpochVariant.setIsDepositDuringEpochDisabled · _checkOnlyOwnerOrGuardian() (owner (guardian is an internal variable, initialized to the owner; no public getter)) |
For regulated securities, freeze and force-transfer powers are often legally required. Control rates who holds them and what checks exist, not whether they exist. A single key holding a critical power or freeze is red; a multisig with no timelock is yellow.
Discovered at block 26,190,113 · 14 Oct 2026 · tool discovery-0.2.0 · View raw JSON on GitHub ↗