EUR0 DaoCollateral
DaoCollateral Contract Documentation
High-Level Overview
The DaoCollateral contract is a fundamental component of the EUR0 ecosystem, designed to manage the collateralization, minting, and redemption of EUR0 tokens. It ensures that the circulating supply of EUR0 is always fully backed by Euro-denominated collateral, providing transparency and security for EUR0 holders. The contract facilitates the swapping of Euro collateral tokens for EUR0, redemption of EUR0 for Euro collateral tokens, and implements a Counter Bank Run (CBR) mechanism for emergency situations. Additionally, it provides advanced functionality for intent-based trading and integration with the SwapperEngine for EURC trading.
Contract Summary
Inherited Contracts
ReentrancyGuardUpgradeable (OZ): Prevents reentrant attacks on sensitive functions.
PausableUpgradeable (OZ): Enables pausing of contract functionality by authorized accounts.
EIP712Upgradeable (OZ): Implements EIP-712 for structured data hashing and signing.
NoncesUpgradeable: Manages nonce-based operations for intent matching and replay protection.
Functionality Breakdown
Key Functionalities
1. Basic Token Operations
Minting and redeeming EUR0: The contract manages the collateralization of EUR0 by handling Euro-denominated collateral tokens. When a user sends Euro collateral, the DaoCollateral contract mints the equivalent amount of EUR0 stablecoins, and vice versa, allowing users to exchange their EUR0 stablecoins for Euro collateral at the current exchange rate.
2. Swap Operations
swap: Facilitates the conversion of Euro collateral into EUR0. Upon initiating this function, users exchange their Euro collateral tokens for EUR0 stablecoins directly.
swapWithPermit: Similar to swap but uses ERC20Permit for gasless approval, allowing users to approve token transfers without a separate transaction.
3. Redemption Operations
redeem: Allows users to redeem their EUR0 stablecoins for Euro collateral against a fee. By invoking this function, users exchange their EUR0 stablecoins for Euro collateral at the current exchange rate.
redeemDao: Special redemption function for DAO operations that bypasses fees. Only callable by accounts with DAO_REDEMPTION_ROLE.
4. Advanced Trading Features
swapCollateralTokenToEurc: Enables users to swap collateral tokens directly for EURC through the SwapperEngine. This function mints EUR0 internally and uses it to fulfill EURC orders on the SwapperEngine.
swapCollateralTokenToEurcIntent: Advanced intent-based trading system that allows pre-signed orders to be executed by authorized parties. This enables gasless trading and more sophisticated trading strategies.
5. Intent Management System
Intent-based Trading: The contract implements a sophisticated intent system where users can pre-sign trading instructions that can be executed by authorized parties (INTENT_MATCHING_ROLE).
Nonce Management: Users can invalidate nonces to cancel pending intents or invalidate ranges of nonces for bulk cancellation.
Partial Matching: Intents support partial fulfillment, allowing large orders to be filled incrementally.
6. Counter Bank Run (CBR) Mechanism
The contract implements a Counter Bank Run mechanism that can be activated in emergency situations. When activated:
The CBR coefficient is applied to reduce the amount of collateral returned during redemptions
Swap functionality is automatically paused
The system helps maintain protocol stability during market stress
Role-Based Access Control
The contract implements a comprehensive role-based access control system for sensitive operations:
DEFAULT_ADMIN_ROLE: Has the highest level of access, including the ability to manage CBR parameters and perform critical administrative tasks.
DAO_REDEMPTION_ROLE: Required for special DAO redemption operations.
PAUSING_CONTRACTS_ROLE: Grants the ability to pause specific contract functionalities in case of emergencies.
UNPAUSING_CONTRACTS_ROLE: Grants the ability to unpause contract functionalities.
NONCE_THRESHOLD_SETTER_ROLE: Allows setting the nonce threshold for intent consumption.
INTENT_MATCHING_ROLE: Required for executing intent-based trades on behalf of users.
Functions Description
Public/External Functions
Initialization
initialize: Sets up the contract with initial parameters including registry information and redeem fee.
Basic Trading Functions
swap: Allows users to swap Euro collateral tokens for EUR0.
swapWithPermit: Similar to swap but uses permit for approval.
redeem: Enables users to redeem EUR0 for Euro collateral tokens.
redeemDao: Special redemption function for DAO operations. Only callable by DAO_REDEMPTION_ROLE.
Advanced Trading Functions
swapCollateralTokenToEurc: Swaps collateral tokens for EURC through the SwapperEngine with order matching.
swapCollateralTokenToEurcIntent: Executes intent-based trades for collateral token to EURC swaps.
Intent Management
invalidateNonce: Invalidates the current nonce for the message sender.
invalidateUpToNonce: Invalidates all nonces up to a specified value for the message sender.
Administrative Functions
activateCBR: Activates the Counter Bank Run mechanism. Only callable by DEFAULT_ADMIN_ROLE.
deactivateCBR: Deactivates the Counter Bank Run mechanism. Only callable by DEFAULT_ADMIN_ROLE.
setRedeemFee: Sets the fee for redemption operations. Only callable by DEFAULT_ADMIN_ROLE.
setNonceThreshold: Sets the threshold for intent consumption. Only callable by NONCE_THRESHOLD_SETTER_ROLE.
Pausing Functions
pauseRedeem, pause, pauseSwap: Pausing functions for specific operations. Only callable by PAUSING_CONTRACTS_ROLE.
unpause, unpauseRedeem, unpauseSwap: Global unpausing functions. Only callable by UNPAUSING_CONTRACTS_ROLE.
View Functions
redeemFee: Returns the current redemption fee.
isCBROn: Returns whether the Counter Bank Run mechanism is active.
cbrCoef: Returns the current CBR coefficient.
isRedeemPaused: Returns whether redeem functionality is paused.
isSwapPaused: Returns whether swap functionality is paused.
nonceThreshold: Returns the current nonce threshold for intent consumption.
orderAmountTakenCurrentNonce: Returns the amount of tokens taken for the current nonce of an address.
DOMAIN_SEPARATOR: Returns the EIP712 domain separator for signature verification.
Data Structures
Approval
struct Approval {
uint256 deadline;
uint8 v; // Changes at each new signature because of ERC20 Permit nonce
bytes32 r;
bytes32 s;
}
Intent
struct Intent {
address recipient;
address rwaToken;
uint256 amountInTokenDecimals;
uint256 deadline;
bytes signature;
}
Constants
Contract Addresses
CONTRACT_REGISTRY_ACCESS
: Address of the registry access contract.CONTRACT_TOKEN_MAPPING
: Address of the token mapping contract.CONTRACT_ORACLE
: Address of the oracle contract.CONTRACT_TREASURY
: Address of the treasury contract.CONTRACT_EUR0
: Address of the EUR0 token contract.CONTRACT_YIELD_TREASURY
: Address of the yield treasury contract.CONTRACT_SWAPPER_ENGINE
: Address of the swapper engine contract.
Role Identifiers
DEFAULT_ADMIN_ROLE
: Role identifier for the default admin.DAO_REDEMPTION_ROLE
: Role identifier for DAO redemption operations.PAUSING_CONTRACTS_ROLE
: Role identifier for pausing contract operations.UNPAUSING_CONTRACTS_ROLE
: Role identifier for unpausing contract operations.NONCE_THRESHOLD_SETTER_ROLE
: Role identifier for setting nonce thresholds.INTENT_MATCHING_ROLE
: Role identifier for executing intent-based trades.
Fee and Calculation Constants
MAX_REDEEM_FEE
: Maximum allowed redemption fee (25%).BASIS_POINT_BASE
: Base value for basis point calculations (10000).SCALAR_ONE
: Scalar value representing 1 in the contract's decimal system.
Intent System Constants
INTENT_TYPE_HASH
: EIP712 type hash for intent signatures.
Key Components
Oracle Integration
Uses an oracle to fetch real-time price data for Euro collateral tokens.
Token Mapping
Manages the mapping of supported Euro collateral tokens using isEur0Collateral()
function.
Access Control
Implements comprehensive role-based access control for administrative functions and intent execution.
Treasury Management
Handles the storage and distribution of Euro collateral tokens across multiple treasuries.
SwapperEngine Integration
Provides seamless integration with the SwapperEngine for advanced trading operations and EURC trading.
Intent System
Implements a sophisticated intent-based trading system with:
Pre-signed order execution
Partial order fulfillment
Nonce-based replay protection
Gasless trading capabilities
Safeguards Implementation
Pausability
Allows pausing of critical functions in emergencies with granular control over different functionalities.
Reentrancy Protection
Uses OpenZeppelin's ReentrancyGuard to prevent reentrancy attacks.
Access Control
Restricts sensitive operations to authorized roles with comprehensive role management.
CBR Mechanism
Implements a Counter Bank Run mechanism for emergency situations with configurable coefficients.
Fee Management
Implements a configurable redemption fee system with a maximum cap of 25%.
Intent Security
Signature verification using EIP712
Nonce-based replay protection
Deadline enforcement
Partial matching with threshold-based consumption
Events
The contract emits various events for tracking operations:
Swap: Emitted when tokens are swapped
Redeem: Emitted when tokens are redeemed
IntentMatched: Emitted when an intent is matched
IntentConsumed: Emitted when an intent is fully consumed
NonceInvalidated: Emitted when nonces are invalidated
CBRActivated/CBRDeactivated: Emitted when CBR mechanism is activated/deactivated
RedeemFeeUpdated: Emitted when redeem fee is updated
NonceThresholdSet: Emitted when nonce threshold is set
RedeemPaused/RedeemUnPaused: Emitted when redeem functionality is paused/unpaused
SwapPaused/SwapUnPaused: Emitted when swap functionality is paused/unpaused
Last updated
Was this helpful?