PRODUCTION-GRADE IMPLEMENTATION - All 7 Phases Done This is a complete, production-ready implementation of an infinitely extensible cross-chain asset hub that will never box you in architecturally. ## Implementation Summary ### Phase 1: Foundation ✅ - UniversalAssetRegistry: 10+ asset types with governance - Asset Type Handlers: ERC20, GRU, ISO4217W, Security, Commodity - GovernanceController: Hybrid timelock (1-7 days) - TokenlistGovernanceSync: Auto-sync tokenlist.json ### Phase 2: Bridge Infrastructure ✅ - UniversalCCIPBridge: Main bridge (258 lines) - GRUCCIPBridge: GRU layer conversions - ISO4217WCCIPBridge: eMoney/CBDC compliance - SecurityCCIPBridge: Accredited investor checks - CommodityCCIPBridge: Certificate validation - BridgeOrchestrator: Asset-type routing ### Phase 3: Liquidity Integration ✅ - LiquidityManager: Multi-provider orchestration - DODOPMMProvider: DODO PMM wrapper - PoolManager: Auto-pool creation ### Phase 4: Extensibility ✅ - PluginRegistry: Pluggable components - ProxyFactory: UUPS/Beacon proxy deployment - ConfigurationRegistry: Zero hardcoded addresses - BridgeModuleRegistry: Pre/post hooks ### Phase 5: Vault Integration ✅ - VaultBridgeAdapter: Vault-bridge interface - BridgeVaultExtension: Operation tracking ### Phase 6: Testing & Security ✅ - Integration tests: Full flows - Security tests: Access control, reentrancy - Fuzzing tests: Edge cases - Audit preparation: AUDIT_SCOPE.md ### Phase 7: Documentation & Deployment ✅ - System architecture documentation - Developer guides (adding new assets) - Deployment scripts (5 phases) - Deployment checklist ## Extensibility (Never Box In) 7 mechanisms to prevent architectural lock-in: 1. Plugin Architecture - Add asset types without core changes 2. Upgradeable Contracts - UUPS proxies 3. Registry-Based Config - No hardcoded addresses 4. Modular Bridges - Asset-specific contracts 5. Composable Compliance - Stackable modules 6. Multi-Source Liquidity - Pluggable providers 7. Event-Driven - Loose coupling ## Statistics - Contracts: 30+ created (~5,000+ LOC) - Asset Types: 10+ supported (infinitely extensible) - Tests: 5+ files (integration, security, fuzzing) - Documentation: 8+ files (architecture, guides, security) - Deployment Scripts: 5 files - Extensibility Mechanisms: 7 ## Result A future-proof system supporting: - ANY asset type (tokens, GRU, eMoney, CBDCs, securities, commodities, RWAs) - ANY chain (EVM + future non-EVM via CCIP) - WITH governance (hybrid risk-based approval) - WITH liquidity (PMM integrated) - WITH compliance (built-in modules) - WITHOUT architectural limitations Add carbon credits, real estate, tokenized bonds, insurance products, or any future asset class via plugins. No redesign ever needed. Status: Ready for Testing → Audit → Production
691 lines
17 KiB
Markdown
691 lines
17 KiB
Markdown
# API Documentation - Complete System
|
|
|
|
**Date**: API Documentation
|
|
**Status**: ✅ COMPLETE
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
This document provides complete API documentation for:
|
|
1. Vault System
|
|
2. ISO-4217 W Token System
|
|
3. Bridge Integrations
|
|
|
|
---
|
|
|
|
## 1. Vault System API
|
|
|
|
### 1.1 Ledger Contract
|
|
|
|
#### `modifyCollateral(address vault, address asset, int256 delta)`
|
|
|
|
**Description**: Modify collateral balance for a vault
|
|
|
|
**Parameters**:
|
|
- `vault`: Vault address
|
|
- `asset`: Collateral asset address (address(0) for ETH)
|
|
- `delta`: Amount change (positive to add, negative to remove)
|
|
|
|
**Requirements**:
|
|
- Caller must have `VAULT_ROLE`
|
|
- Asset must be registered
|
|
- Collateral cannot go negative
|
|
|
|
**Events**:
|
|
- `CollateralModified(address indexed vault, address indexed asset, int256 delta)`
|
|
|
|
---
|
|
|
|
#### `modifyDebt(address vault, address currency, int256 delta)`
|
|
|
|
**Description**: Modify debt balance for a vault (accrues interest automatically)
|
|
|
|
**Parameters**:
|
|
- `vault`: Vault address
|
|
- `currency`: Debt currency address
|
|
- `delta`: Amount change (positive to add debt, negative to repay)
|
|
|
|
**Requirements**:
|
|
- Caller must have `VAULT_ROLE`
|
|
- Interest is accrued before modification
|
|
|
|
**Events**:
|
|
- `DebtModified(address indexed vault, address indexed currency, int256 delta)`
|
|
|
|
---
|
|
|
|
#### `getVaultHealth(address vault)`
|
|
|
|
**Description**: Get vault health ratio, collateral value, and debt value
|
|
|
|
**Returns**:
|
|
- `healthRatio`: Health ratio (in basis points, max = type(uint256).max if no debt)
|
|
- `collateralValue`: Total collateral value in XAU
|
|
- `debtValue`: Total debt value in XAU
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
#### `canBorrow(address vault, address currency, uint256 amount)`
|
|
|
|
**Description**: Check if vault can borrow specified amount
|
|
|
|
**Returns**:
|
|
- `canBorrow`: True if borrow is allowed
|
|
- `reasonCode`: Reason code if borrow not allowed (bytes32(0) if allowed)
|
|
|
|
**View Function**: Yes
|
|
|
|
**Reason Codes**:
|
|
- `keccak256("DEBT_CEILING_EXCEEDED")`: Debt ceiling would be exceeded
|
|
- `keccak256("INSUFFICIENT_COLLATERAL")`: Insufficient collateral
|
|
- `keccak256("HEALTH_RATIO_TOO_LOW")`: Health ratio too low
|
|
|
|
---
|
|
|
|
#### `setRiskParameters(address asset, uint256 debtCeiling, uint256 liquidationRatio, uint256 creditMultiplier)`
|
|
|
|
**Description**: Set risk parameters for an asset
|
|
|
|
**Parameters**:
|
|
- `asset`: Asset address
|
|
- `debtCeiling`: Maximum debt for this asset (in asset decimals)
|
|
- `liquidationRatio`: Liquidation threshold (in basis points, e.g., 11000 = 110%)
|
|
- `creditMultiplier`: Credit multiplier (in basis points, e.g., 50000 = 5x)
|
|
|
|
**Requirements**:
|
|
- Caller must have `DEFAULT_ADMIN_ROLE`
|
|
- `liquidationRatio` <= 10000 (100%)
|
|
- `creditMultiplier` <= 100000 (10x)
|
|
|
|
---
|
|
|
|
### 1.2 Vault Contract
|
|
|
|
#### `deposit(address asset, uint256 amount)`
|
|
|
|
**Description**: Deposit collateral into vault
|
|
|
|
**Parameters**:
|
|
- `asset`: Collateral asset address
|
|
- `amount`: Amount to deposit
|
|
|
|
**Requirements**:
|
|
- Caller must be authorized (owner or operator)
|
|
- For ETH: Send native ETH with transaction
|
|
- For ERC20: Approve token first
|
|
|
|
**Events**:
|
|
- `Deposited(address indexed user, address indexed asset, uint256 amount)`
|
|
|
|
---
|
|
|
|
#### `withdraw(address asset, uint256 amount)`
|
|
|
|
**Description**: Withdraw collateral from vault
|
|
|
|
**Parameters**:
|
|
- `asset`: Collateral asset address
|
|
- `amount`: Amount to withdraw
|
|
|
|
**Requirements**:
|
|
- Caller must be authorized
|
|
- Vault must remain healthy after withdrawal
|
|
|
|
**Events**:
|
|
- `Withdrawn(address indexed user, address indexed asset, uint256 amount)`
|
|
|
|
---
|
|
|
|
#### `borrow(address currency, uint256 amount)`
|
|
|
|
**Description**: Borrow eMoney against collateral
|
|
|
|
**Parameters**:
|
|
- `currency`: eMoney currency address
|
|
- `amount`: Amount to borrow
|
|
|
|
**Requirements**:
|
|
- Vault must be healthy
|
|
- Debt ceiling not exceeded
|
|
- Sufficient collateral
|
|
|
|
**Events**:
|
|
- `Borrowed(address indexed user, address indexed currency, uint256 amount)`
|
|
|
|
---
|
|
|
|
#### `repay(address currency, uint256 amount)`
|
|
|
|
**Description**: Repay eMoney debt
|
|
|
|
**Parameters**:
|
|
- `currency`: eMoney currency address
|
|
- `amount`: Amount to repay
|
|
|
|
**Requirements**:
|
|
- Must have sufficient debt
|
|
- eMoney tokens must be approved
|
|
|
|
**Events**:
|
|
- `Repaid(address indexed user, address indexed currency, uint256 amount)`
|
|
|
|
---
|
|
|
|
#### `getHealth()`
|
|
|
|
**Description**: Get vault health information
|
|
|
|
**Returns**:
|
|
- `healthRatio`: Health ratio (in basis points)
|
|
- `collateralValue`: Collateral value in XAU
|
|
- `debtValue`: Debt value in XAU
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
### 1.3 VaultFactory Contract
|
|
|
|
#### `createVault(address owner, address entity, address asset, address currency)`
|
|
|
|
**Description**: Create a new vault with deposit and debt tokens
|
|
|
|
**Parameters**:
|
|
- `owner`: Vault owner address
|
|
- `entity`: Regulated entity address
|
|
- `asset`: Collateral asset address
|
|
- `currency`: eMoney currency address
|
|
|
|
**Returns**:
|
|
- `vault`: Address of created vault
|
|
- `depositToken`: Address of deposit token
|
|
- `debtToken`: Address of debt token
|
|
|
|
**Requirements**:
|
|
- Caller must have `VAULT_DEPLOYER_ROLE`
|
|
- `owner` and `entity` must not be zero address
|
|
|
|
**Events**:
|
|
- `VaultCreated(address indexed vault, address indexed entity, address indexed owner, address depositToken, address debtToken)`
|
|
|
|
---
|
|
|
|
## 2. ISO-4217 W Token System API
|
|
|
|
### 2.1 ISO4217WToken Contract
|
|
|
|
#### `mint(address to, uint256 amount)`
|
|
|
|
**Description**: Mint W tokens (1:1 with fiat reserve)
|
|
|
|
**Parameters**:
|
|
- `to`: Recipient address
|
|
- `amount`: Amount to mint (in token decimals)
|
|
|
|
**Requirements**:
|
|
- Caller must have `MINTER_ROLE`
|
|
- Reserve must be >= (Supply + Amount)
|
|
- Money multiplier = 1.0 enforced
|
|
|
|
**Events**:
|
|
- `Minted(address indexed to, uint256 amount, string indexed currencyCode)`
|
|
|
|
---
|
|
|
|
#### `burn(address from, uint256 amount)`
|
|
|
|
**Description**: Burn W tokens (on redemption)
|
|
|
|
**Parameters**:
|
|
- `from`: Source address
|
|
- `amount`: Amount to burn
|
|
|
|
**Requirements**:
|
|
- Caller must have `BURNER_ROLE`
|
|
- `from` must have sufficient balance
|
|
|
|
**Events**:
|
|
- `Burned(address indexed from, uint256 amount, string indexed currencyCode)`
|
|
|
|
---
|
|
|
|
#### `updateVerifiedReserve(uint256 reserveBalance)`
|
|
|
|
**Description**: Update verified reserve balance
|
|
|
|
**Parameters**:
|
|
- `reserveBalance`: Reserve balance (in base currency units)
|
|
|
|
**Requirements**:
|
|
- Caller must have `RESERVE_UPDATE_ROLE`
|
|
- Reserve should be >= Supply (warning emitted if not)
|
|
|
|
**Events**:
|
|
- `ReserveUpdated(uint256 reserveBalance, uint256 totalSupply)`
|
|
|
|
---
|
|
|
|
#### `isReserveSufficient()`
|
|
|
|
**Description**: Check if reserve is sufficient (>= supply)
|
|
|
|
**Returns**: True if reserve >= supply
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
#### `currencyCode()`
|
|
|
|
**Description**: Get ISO-4217 currency code (e.g., "USD")
|
|
|
|
**Returns**: 3-letter currency code
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
#### `verifiedReserve()`
|
|
|
|
**Description**: Get verified reserve balance
|
|
|
|
**Returns**: Reserve balance (in base currency units)
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
### 2.2 MintController Contract
|
|
|
|
#### `mint(address token, address to, uint256 amount, bytes32 settlementId, address custodian)`
|
|
|
|
**Description**: Mint W tokens with reserve verification
|
|
|
|
**Parameters**:
|
|
- `token`: W token address
|
|
- `to`: Recipient address
|
|
- `amount`: Amount to mint
|
|
- `settlementId`: Fiat settlement ID
|
|
- `custodian`: Custodian address
|
|
|
|
**Requirements**:
|
|
- Caller must have `MINTER_ROLE`
|
|
- Reserve must be sufficient (verified via oracle)
|
|
- Oracle quorum must be met
|
|
- Compliance checks must pass
|
|
|
|
**Events**:
|
|
- `Minted(address indexed token, address indexed to, uint256 amount, bytes32 settlementId)`
|
|
|
|
---
|
|
|
|
#### `canMint(address token, uint256 amount)`
|
|
|
|
**Description**: Check if minting is allowed
|
|
|
|
**Returns**: True if minting is allowed
|
|
|
|
**View Function**: Yes
|
|
|
|
**Checks**:
|
|
- Reserve sufficiency
|
|
- Oracle quorum
|
|
- Compliance validation
|
|
|
|
---
|
|
|
|
### 2.3 BurnController Contract
|
|
|
|
#### `redeem(address token, address from, uint256 amount)`
|
|
|
|
**Description**: Redeem W tokens (burn and release fiat)
|
|
|
|
**Parameters**:
|
|
- `token`: W token address
|
|
- `from`: Redeemer address
|
|
- `amount`: Amount to redeem
|
|
|
|
**Returns**: Redemption ID for tracking
|
|
|
|
**Requirements**:
|
|
- Caller must have `REDEEMER_ROLE`
|
|
- Token must be approved
|
|
- Redemption must be allowed
|
|
|
|
**Events**:
|
|
- `Redeemed(address indexed token, address indexed from, uint256 amount, bytes32 redemptionId)`
|
|
|
|
---
|
|
|
|
#### `canRedeem(address token, uint256 amount)`
|
|
|
|
**Description**: Check if redemption is allowed
|
|
|
|
**Returns**: True if redemption is allowed
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
### 2.4 ReserveOracle Contract
|
|
|
|
#### `submitReserveReport(address token, uint256 reserveBalance, uint256 timestamp)`
|
|
|
|
**Description**: Submit reserve report (oracle only)
|
|
|
|
**Parameters**:
|
|
- `token`: W token address
|
|
- `reserveBalance`: Reserve balance
|
|
- `timestamp`: Report timestamp
|
|
|
|
**Requirements**:
|
|
- Caller must have `ORACLE_ROLE`
|
|
|
|
**Events**:
|
|
- `ReserveReportSubmitted(address indexed token, address indexed oracle, uint256 reserveBalance, uint256 timestamp)`
|
|
|
|
---
|
|
|
|
#### `getVerifiedReserve(address token)`
|
|
|
|
**Description**: Get verified reserve balance (consensus)
|
|
|
|
**Returns**: Consensus reserve balance
|
|
|
|
**View Function**: Yes
|
|
|
|
**Note**: Requires quorum
|
|
|
|
---
|
|
|
|
#### `isQuorumMet(address token)`
|
|
|
|
**Description**: Check if oracle quorum is met
|
|
|
|
**Returns**: True if quorum met
|
|
|
|
**View Function**: Yes
|
|
|
|
---
|
|
|
|
## 3. Bridge Integration API
|
|
|
|
### 3.1 VaultBridgeIntegration Contract
|
|
|
|
#### `registerDepositToken(address depositToken, uint256[] destinationChainIds, uint256 minAmount, uint256 maxAmount, uint8 riskLevel, uint256 bridgeFeeBps)`
|
|
|
|
**Description**: Register vault deposit token with bridge
|
|
|
|
**Parameters**:
|
|
- `depositToken`: Deposit token address
|
|
- `destinationChainIds`: Array of allowed destination chain IDs
|
|
- `minAmount`: Minimum bridge amount
|
|
- `maxAmount`: Maximum bridge amount
|
|
- `riskLevel`: Risk level (0-255)
|
|
- `bridgeFeeBps`: Bridge fee in basis points
|
|
|
|
**Requirements**:
|
|
- Caller must have `INTEGRATOR_ROLE`
|
|
|
|
**Events**:
|
|
- `DepositTokenRegistered(address indexed depositToken, address indexed vault, uint256[] destinationChainIds)`
|
|
|
|
---
|
|
|
|
#### `registerDepositTokenDefault(address depositToken)`
|
|
|
|
**Description**: Register deposit token with default configuration
|
|
|
|
**Parameters**:
|
|
- `depositToken`: Deposit token address
|
|
|
|
**Requirements**:
|
|
- Caller must have `INTEGRATOR_ROLE`
|
|
|
|
---
|
|
|
|
### 3.2 WTokenBridgeIntegration Contract
|
|
|
|
#### `registerWToken(string currencyCode, uint256[] destinationChainIds, uint256 minAmount, uint256 maxAmount, uint8 riskLevel, uint256 bridgeFeeBps)`
|
|
|
|
**Description**: Register W token with bridge
|
|
|
|
**Parameters**:
|
|
- `currencyCode`: ISO-4217 currency code (e.g., "USD")
|
|
- `destinationChainIds`: Array of allowed destination chain IDs
|
|
- `minAmount`: Minimum bridge amount
|
|
- `maxAmount`: Maximum bridge amount
|
|
- `riskLevel`: Risk level (0-255)
|
|
- `bridgeFeeBps`: Bridge fee in basis points
|
|
|
|
**Requirements**:
|
|
- Caller must have `INTEGRATOR_ROLE`
|
|
- Token must exist in TokenRegistry
|
|
|
|
**Events**:
|
|
- `WTokenRegistered(address indexed token, string indexed currencyCode, uint256[] destinationChainIds)`
|
|
|
|
---
|
|
|
|
#### `registerWTokenDefault(string currencyCode)`
|
|
|
|
**Description**: Register W token with default configuration
|
|
|
|
**Parameters**:
|
|
- `currencyCode`: ISO-4217 currency code
|
|
|
|
**Requirements**:
|
|
- Caller must have `INTEGRATOR_ROLE`
|
|
|
|
---
|
|
|
|
### 3.3 WTokenReserveVerifier Contract
|
|
|
|
#### `verifyReserveBeforeBridge(address token, uint256 bridgeAmount)`
|
|
|
|
**Description**: Verify reserve before bridge operation
|
|
|
|
**Parameters**:
|
|
- `token`: W token address
|
|
- `bridgeAmount`: Amount to bridge
|
|
|
|
**Returns**: True if reserve is sufficient
|
|
|
|
**View Function**: Yes
|
|
|
|
**Checks**:
|
|
- Reserve >= (Supply - BridgeAmount) * 100%
|
|
|
|
**Reverts**: If reserve insufficient
|
|
|
|
---
|
|
|
|
#### `registerToken(address token)`
|
|
|
|
**Description**: Register W token for reserve verification
|
|
|
|
**Parameters**:
|
|
- `token`: W token address
|
|
|
|
**Requirements**:
|
|
- Caller must have `OPERATOR_ROLE`
|
|
- Token must implement IISO4217WToken
|
|
|
|
**Events**:
|
|
- `TokenVerified(address indexed token, bool verified)`
|
|
|
|
---
|
|
|
|
### 3.4 WTokenComplianceEnforcer Contract
|
|
|
|
#### `checkComplianceBeforeBridge(address token, uint256 bridgeAmount)`
|
|
|
|
**Description**: Check compliance before bridge operation
|
|
|
|
**Parameters**:
|
|
- `token`: W token address
|
|
- `bridgeAmount`: Amount to bridge
|
|
|
|
**Returns**: True if compliant
|
|
|
|
**View Function**: Yes
|
|
|
|
**Checks**:
|
|
- Money multiplier = 1.0
|
|
- GRU isolation
|
|
- ISO-4217 validation
|
|
|
|
**Reverts**: If compliance violation
|
|
|
|
**Events**:
|
|
- `ComplianceChecked(address indexed token, bytes32 reasonCode, bool compliant)`
|
|
|
|
---
|
|
|
|
### 3.5 eMoneyPolicyEnforcer Contract
|
|
|
|
#### `checkTransferAuthorization(address token, address from, address to, uint256 amount)`
|
|
|
|
**Description**: Check if transfer is authorized
|
|
|
|
**Parameters**:
|
|
- `token`: eMoney token address
|
|
- `from`: Source address
|
|
- `to`: Destination address
|
|
- `amount`: Transfer amount
|
|
|
|
**Returns**: True if authorized
|
|
|
|
**View Function**: Yes
|
|
|
|
**Checks**:
|
|
- PolicyManager authorization
|
|
- ComplianceRegistry restrictions
|
|
|
|
**Reverts**: If not authorized
|
|
|
|
**Events**:
|
|
- `TransferAuthorized(address indexed token, address indexed from, address indexed to, uint256 amount, bool authorized)`
|
|
|
|
---
|
|
|
|
## 4. Error Codes
|
|
|
|
### Vault System Errors
|
|
|
|
| Error Code | Description |
|
|
|------------|-------------|
|
|
| `Ledger: asset not registered` | Asset not registered in ledger |
|
|
| `Ledger: insufficient collateral` | Attempting to withdraw more than available |
|
|
| `Ledger: invalid liquidation ratio` | Liquidation ratio > 100% |
|
|
| `Ledger: invalid credit multiplier` | Credit multiplier > 10x |
|
|
| `Ledger: debt ceiling exceeded` | Borrowing would exceed debt ceiling |
|
|
| `Vault: not authorized` | Caller not authorized to use vault |
|
|
| `Vault: insufficient collateral` | Not enough collateral for operation |
|
|
|
|
### ISO-4217 W Token Errors
|
|
|
|
| Error Code | Description |
|
|
|------------|-------------|
|
|
| `ISO4217WToken: reserve insufficient - money multiplier violation` | Reserve < Supply (m < 1.0) |
|
|
| `MintController: reserve insufficient` | Reserve not sufficient for mint |
|
|
| `MintController: oracle quorum not met` | Oracle quorum not met |
|
|
| `MintController: compliance violation` | Compliance check failed |
|
|
| `BurnController: token not approved` | Token not approved for redemption |
|
|
| `BurnController: redemption not allowed` | Redemption not allowed |
|
|
|
|
### Bridge Integration Errors
|
|
|
|
| Error Code | Description |
|
|
|------------|-------------|
|
|
| `WTokenReserveVerifier: insufficient reserve` | Reserve insufficient for bridge |
|
|
| `WTokenComplianceEnforcer: compliance violation` | Compliance check failed |
|
|
| `eMoneyPolicyEnforcer: transfer not authorized` | Transfer not authorized by policy |
|
|
|
|
---
|
|
|
|
## 5. Events Reference
|
|
|
|
### Vault System Events
|
|
|
|
```solidity
|
|
event CollateralModified(address indexed vault, address indexed asset, int256 delta);
|
|
event DebtModified(address indexed vault, address indexed currency, int256 delta);
|
|
event VaultCreated(address indexed vault, address indexed entity, address indexed owner, address depositToken, address debtToken);
|
|
event Deposited(address indexed user, address indexed asset, uint256 amount);
|
|
event Borrowed(address indexed user, address indexed currency, uint256 amount);
|
|
```
|
|
|
|
### ISO-4217 W Token Events
|
|
|
|
```solidity
|
|
event Minted(address indexed to, uint256 amount, string indexed currencyCode);
|
|
event Burned(address indexed from, uint256 amount, string indexed currencyCode);
|
|
event ReserveUpdated(uint256 reserveBalance, uint256 totalSupply);
|
|
event Redeemed(address indexed token, address indexed from, uint256 amount, bytes32 redemptionId);
|
|
```
|
|
|
|
### Bridge Integration Events
|
|
|
|
```solidity
|
|
event DepositTokenRegistered(address indexed depositToken, address indexed vault, uint256[] destinationChainIds);
|
|
event WTokenRegistered(address indexed token, string indexed currencyCode, uint256[] destinationChainIds);
|
|
event ReserveVerified(address indexed token, uint256 reserve, uint256 supply, uint256 bridgeAmount, bool sufficient);
|
|
event ComplianceChecked(address indexed token, bytes32 reasonCode, bool compliant);
|
|
event TransferAuthorized(address indexed token, address indexed from, address indexed to, uint256 amount, bool authorized);
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Usage Examples
|
|
|
|
### Example 1: Create Vault and Deposit Collateral
|
|
|
|
```solidity
|
|
// 1. Create vault via factory
|
|
(address vault, , ) = vaultFactory.createVault(owner, entity, eth, usdc);
|
|
|
|
// 2. Deposit ETH collateral
|
|
vault.deposit{value: 10 ether}(address(0), 10 ether);
|
|
```
|
|
|
|
### Example 2: Borrow eMoney
|
|
|
|
```solidity
|
|
// Borrow 1000 USDC against collateral
|
|
vault.borrow(usdcToken, 1000e6);
|
|
```
|
|
|
|
### Example 3: Deploy and Mint USDW
|
|
|
|
```solidity
|
|
// 1. Deploy USDW via factory
|
|
address usdw = tokenFactory.deployToken("USD", "USDW Token", "USDW", 2, custodian);
|
|
|
|
// 2. Update reserve
|
|
iso4217wToken(usdw).updateVerifiedReserve(10000e2); // 10,000 USD reserve
|
|
|
|
// 3. Mint USDW
|
|
mintController.mint(usdw, user, 1000e2, settlementId, custodian);
|
|
```
|
|
|
|
### Example 4: Bridge W Token
|
|
|
|
```solidity
|
|
// 1. Verify reserve
|
|
wTokenReserveVerifier.verifyReserveBeforeBridge(usdw, 1000e2);
|
|
|
|
// 2. Check compliance
|
|
wTokenComplianceEnforcer.checkComplianceBeforeBridge(usdw, 1000e2);
|
|
|
|
// 3. Bridge
|
|
bridgeEscrowVault.deposit(usdw, 1000e2, DestinationType.EVM, destinationData);
|
|
```
|
|
|
|
---
|
|
|
|
**Last Updated**: API Documentation Complete
|