The Attestor contract currently uses:
- Ownable2StepUpgradeable for owner-only functions
- A whitelist system for attestors
- Restricted access to all main functionality via
onlyWhitelistedAttestormodifier - Acts as an intermediary where the Attestor's address is used for deposits/redemptions, not the caller's address
- Remove Ownable2StepUpgradeable inheritance
- Remove whitelistedAttestors mapping
- Remove onlyWhitelistedAttestor modifier
- Remove WhitelistedAttestorSet event
- Remove setEthMultiVault function (make it immutable after initialization)
- Remove whitelistAttestor function
- Remove batchWhitelistAttestors function
- Simplify init function to only set ethMultiVault
- Remove admin parameter from init
- Remove whitelist setting in init
- Modify all functions to use msg.sender instead of the Attestor contract as the effective caller
- For deposit functions: use msg.sender as the receiver instead of passing a receiver parameter
- For redeem functions: ensure msg.sender is the one receiving the assets
- Update maxRedeem checks to verify msg.sender's balance instead of Attestor's balance
- Update contract description to reflect permissionless nature and proxy behavior
- Remove whitelist-related comments
- Update function documentation to remove attestor references
- Add documentation about proxy behavior and direct user interaction
- Ensure ethMultiVault address cannot be changed after initialization
- Verify all value checks remain in place for ETH transfers
- Maintain array length validation checks
- Keep redeemability checks for share redemptions
- Ensure proper forwarding of msg.value in proxy calls
- Verify no funds can get stuck in the Attestor contract
- Verify any address can call all functions
- Ensure initialization can only happen once
- Test ETH value requirements still work
- Verify batch operations work with any caller
- Verify deposits are credited to actual callers
- Verify redemptions send assets to actual callers
- Test that maxRedeem checks work with actual user balances
If deploying to replace an existing Attestor:
- Users should be notified of the change
- Previous whitelisted attestors should be informed
- Consider a timelock or grace period before switching
- Ensure users understand they will now interact directly with vaults through the proxy
- Increased decentralization
- Reduced administrative overhead
- Wider accessibility for users
- Simplified codebase
- Direct user ownership of vault positions
- Transparent proxy behavior
- No intermediary custody of assets or positions
Before: