This page covers the smart contract implementation details. See Glossary.
Persona-based role sets
Platform owner setup
The platform retains strategic control while delegating operations.Asset manager setup
The AM receives operational roles scoped to the specific Multi-Vehicle they manage.Keeper/automation setup
Keepers automate routine operations like redemption queue processing.Fee collector setup
For an operator or bot that handles fee collection and distribution.Role reference matrix
Common workflows
Onboard a new asset manager
Offboard an asset manager
Make STEAM operations public
Allow anyone to deposit and redeem on a Vehicle or Multi-Vehicle. Deposits and redeems can be opened independently:Making the STEAM roles public is typical for vaults open to all users. These roles only control who can create STEAM queries — they do not affect operational roles. Splitting deposit and redeem lets operators pause one direction (e.g. redemptions during a wind-down, or deposits while under compliance review) without affecting the other.
Rotate DEFAULT_ADMIN_ROLE
Transfer admin control using the time-delayed mechanism:1
Initiate transfer
2
Wait for the configured delay
The delay (set during EAC deployment) must pass before the transfer can complete.
3
New admin accepts
Decision guidance
Scoped vs global roles
Default recommendation: Always use scoped roles unless you have a specific reason not to.
Public roles
Multisig for admin
Use a multisig wallet forDEFAULT_ADMIN_ROLE in production. A compromised admin key can grant itself any role and drain the vault.
Security checklist
- Verify scope addresses before granting — wrong scope means the role won’t work as intended
- Use multisig for
DEFAULT_ADMIN_ROLEin production - Set non-zero
initialDelayon the EAC to protect admin transfers - Regularly audit active roles via the subgraph or on-chain queries
- Plan for offboarding — document which roles each operator holds
- Never grant
DEFAULT_ADMIN_ROLEto an asset manager - Keep vehicle authorization with the platform, not the AM
Troubleshooting
I granted a role but the transaction reverts
I granted a role but the transaction reverts
The most common cause is an incorrect scope. Each role must be scoped to the correct contract:
- Most MV operational roles → scope to the Sector Accounting Engine (not the Multi-Vehicle itself)
- Queue roles → scope to the Queue Strategy Engine
- Fee roles → scope to the Fee Manager
- STEAM roles → scope to the Vehicle or Multi-Vehicle
hasRoleOrScopedRole to verify the grant:Can I scope to Vehicle or Sector Accounting Engine?
Can I scope to Vehicle or Sector Accounting Engine?
It depends on the operation:
VEHICLE_STEAM_DEPOSITandVEHICLE_STEAM_REDEEMare scoped to the Vehicle or Multi-Vehicle contractMULTI_VEHICLE_DISPATCH,MULTI_VEHICLE_MOVE_ASSETS, etc. are scoped to the Sector Accounting EngineMULTI_VEHICLE_SET_QUEUESis scoped to the Queue Strategy Engine
How do I check what roles an address has?
How do I check what roles an address has?
Query the EAC contract directly or use the Railnet subgraph: