Common Errors
Revert selectors and the role table for the errors most likely to block a Fusion vault deployment.
Revert selectors and setup errors an agent or developer is likely to hit while deploying or operating a Fusion vault (see Deploy your first Fusion vault), with the cause and the fix for each. Same table as fusion://invariants on the MCP server and the SDK README, kept in sync with both.
Revert table
0x8745fbfd
DaoFeePackagesArrayEmpty()
clone() was sent to IporFusionFactoryImpl
Send it to IporFusionFactoryProxy for that chain — see Addresses
0x9996b315
AddressEmptyCode(address)
execute() touched a market with no balance fuse
add_balance_fuse(market_id, balance_fuse) before the first execute on that market
0x068ca9d8
AccessManagedUnauthorized(address)
The caller lacks the role the function requires: FUSE_MANAGER for add_fuses, grant_market_substrates, add_balance_fuse; ALPHA for execute; WHITELIST for deposit and mint on a private vault
AccessManager.grant_role(role, account, 0) from the role's admin (OWNER grants ATOMIST, ATOMIST grants the rest); for a reverting deposit, whitelist the depositor or convert the vault to public
ValueError: Private key required for sending transactions
SDK, before any transaction
.send() on a Web3Context without a key
Web3Context(w3, chain_id, signer=..., private_key=...) or Web3Context.from_url(url, private_key=...)
Role table
OWNER_ROLE
1
Everything below, via the access manager
Set at vault creation (the clone() caller)
ATOMIST_ROLE
100
Vault configuration authority; administers FUSE_MANAGER, ALPHA and WHITELIST
OWNER
ALPHA_ROLE
200
Can call execute
ATOMIST
FUSE_MANAGER_ROLE
300
Can call add_fuses, grant_market_substrates, add_balance_fuse
ATOMIST
WHITELIST_ROLE
800
Can deposit / mint into a private vault
ATOMIST
A fresh clone grants the owner only OWNER_ROLE — every configuration and execute call from that account reverts AccessManagedUnauthorized until ATOMIST_ROLE is granted first (it administers the rest), matching step 2 of Deploy your first Fusion vault.
Related invariants
Clone from
IporFusionFactoryProxy, never fromIporFusionFactoryImpl— only the proxy carries the fee configuration.Register all three of
add_fuses,grant_market_substratesandadd_balance_fusebefore the firstexecuteon a market. Any order between them works; what is not optional is that all three precedeexecute.A fresh clone is private:
depositandmintrevert until either the depositor holdsWHITELIST_ROLE(keeps the vault private) or an Atomist callsconvert_to_public_vault()(opens deposits to every address, and cannot be reverted).Fuses are immutable and addresses are per chain — resolve
(chain, name)inipor-abi; never reuse an address across chains.
Last updated
Was this helpful?