Files
explorer-monorepo/docs/API_DOCUMENTATION.md

454 lines
11 KiB
Markdown
Raw Normal View History

# API Documentation
**Date**: 2025-12-24
**Status**: Complete API documentation for all contracts
---
## Overview
This document provides comprehensive API documentation for all contracts in the system.
---
## Legal Compliance Contracts
### LegallyCompliantBase
**Location**: `contracts/compliance/LegallyCompliantBase.sol`
#### Functions
##### `recordLegalNotice(string calldata message)`
Record a legal notice.
**Parameters**:
- `message`: Legal notice message
**Access**: `DEFAULT_ADMIN_ROLE` only
**Events**: `LegalNotice(bytes32 indexed noticeHash, string message, uint256 timestamp)`
##### `_generateLegalReferenceHash(address from, address to, uint256 value, bytes memory additionalData)`
Generate a legal reference hash for a value transfer.
**Parameters**:
- `from`: Source address
- `to`: Destination address
- `value`: Transfer amount
- `additionalData`: Additional data
**Returns**: `bytes32` - Legal reference hash
**Access**: Internal
##### `_emitCompliantValueTransfer(address from, address to, uint256 value, string memory legalReference, bytes32 iso20022MessageId)`
Emit a compliant value transfer event.
**Parameters**:
- `from`: Source address
- `to`: Destination address
- `value`: Transfer amount
- `legalReference`: Legal reference string
- `iso20022MessageId`: ISO 20022 message ID
**Access**: Internal
#### Events
- `LegalNotice(bytes32 indexed noticeHash, string message, uint256 timestamp)`
- `ValueTransferDeclared(address indexed from, address indexed to, uint256 value, bytes32 legalReferenceHash)`
- `JurisdictionDeclared(string jurisdiction, uint256 timestamp)`
- `DisputeResolutionMechanismSet(string mechanism, uint256 timestamp)`
#### Constants
- `LEGAL_FRAMEWORK_VERSION`: "1.0.0"
- `LEGAL_JURISDICTION`: "International Private Law"
- `DISPUTE_RESOLUTION_MECHANISM`: "ICC Arbitration (Paris)"
- `ISO_20022_COMPLIANCE`: ISO 20022 compliance statement
- `TRAVEL_RULE_EXEMPTION_STATEMENT`: Travel Rules exemption statement
- `REGULATORY_EXEMPTION_STATEMENT`: Regulatory exemption statement
---
### ComplianceRegistry
**Location**: `contracts/compliance/ComplianceRegistry.sol`
#### Functions
##### `registerContract(address contractAddress)`
Register a contract that inherits from LegallyCompliantBase.
**Parameters**:
- `contractAddress`: Address of the compliant contract
**Access**: `REGISTRAR_ROLE` only
**Events**: `ContractRegistered(address indexed contractAddress, string legalFrameworkVersion, string legalJurisdiction, uint256 timestamp)`
##### `updateContractCompliance(address contractAddress, bytes32 newLegalNoticeHash)`
Update compliance status with a new legal notice.
**Parameters**:
- `contractAddress`: Address of the compliant contract
- `newLegalNoticeHash`: Hash of the new legal notice
**Access**: `REGISTRAR_ROLE` only
**Events**: `ContractComplianceUpdated(address indexed contractAddress, bytes32 lastLegalNoticeHash, uint256 timestamp)`
##### `getContractComplianceStatus(address contractAddress)`
Get compliance status for a contract.
**Parameters**:
- `contractAddress`: Address of the contract
**Returns**: `ContractComplianceStatus` struct
##### `isContractRegistered(address contractAddress)`
Check if a contract is registered.
**Parameters**:
- `contractAddress`: Address of the contract
**Returns**: `bool` - True if registered
---
## Token Contracts
### CompliantUSDT
**Location**: `contracts/tokens/CompliantUSDT.sol`
#### Functions
##### `pause()`
Pause token transfers.
**Access**: Owner only
##### `unpause()`
Unpause token transfers.
**Access**: Owner only
##### `mint(address to, uint256 amount)`
Mint new tokens.
**Parameters**:
- `to`: Address to mint tokens to
- `amount`: Amount of tokens to mint
**Access**: Owner only
##### `burn(uint256 amount)`
Burn tokens from caller's balance.
**Parameters**:
- `amount`: Amount of tokens to burn
**Access**: Public
#### Standard ERC20 Functions
- `transfer(address to, uint256 amount)`
- `transferFrom(address from, address to, uint256 amount)`
- `approve(address spender, uint256 amount)`
- `balanceOf(address account)`
- `totalSupply()`
- `decimals()` - Returns 6
---
### CompliantUSDC
**Location**: `contracts/tokens/CompliantUSDC.sol`
Same API as CompliantUSDT.
---
## Utility Contracts
### TokenRegistry
**Location**: `contracts/utils/TokenRegistry.sol`
#### Functions
##### `registerToken(address tokenAddress, string calldata name, string calldata symbol, uint8 decimals, bool isNative, address bridgeAddress)`
Register a new token.
**Parameters**:
- `tokenAddress`: Address of the token contract
- `name`: Token name
- `symbol`: Token symbol
- `decimals`: Number of decimals
- `isNative`: Whether this is a native token
- `bridgeAddress`: Bridge address if bridged (address(0) if not)
**Access**: `REGISTRAR_ROLE` only
##### `updateTokenStatus(address tokenAddress, bool isActive)`
Update token status.
**Parameters**:
- `tokenAddress`: Address of the token
- `isActive`: New active status
**Access**: `REGISTRAR_ROLE` only
##### `removeToken(address tokenAddress)`
Remove a token from the registry.
**Parameters**:
- `tokenAddress`: Address of the token
**Access**: `REGISTRAR_ROLE` only
##### `getTokenInfo(address tokenAddress)`
Get token information.
**Parameters**:
- `tokenAddress`: Address of the token
**Returns**: `TokenInfo` struct
##### `getTokenBySymbol(string calldata symbol)`
Get token address by symbol.
**Parameters**:
- `symbol`: Token symbol
**Returns**: `address` - Token address (address(0) if not found)
##### `isTokenRegistered(address tokenAddress)`
Check if a token is registered.
**Parameters**:
- `tokenAddress`: Address of the token
**Returns**: `bool` - True if registered
##### `isTokenActive(address tokenAddress)`
Check if a token is active.
**Parameters**:
- `tokenAddress`: Address of the token
**Returns**: `bool` - True if active
##### `getAllTokens()`
Get all registered tokens.
**Returns**: `address[]` - Array of token addresses
##### `getTokenCount()`
Get count of registered tokens.
**Returns**: `uint256` - Number of registered tokens
---
### FeeCollector
**Location**: `contracts/utils/FeeCollector.sol`
#### Functions
##### `collectFees(address token, uint256 amount)`
Collect fees in a token.
**Parameters**:
- `token`: Token address (address(0) for native ETH)
- `amount`: Amount to collect
**Access**: Public (payable for ETH)
##### `distributeFees(address token)`
Distribute collected fees to recipients.
**Parameters**:
- `token`: Token address (address(0) for native ETH)
**Access**: `FEE_MANAGER_ROLE` only
##### `addFeeRecipient(address token, address recipient, uint256 shareBps)`
Add a fee recipient for a token.
**Parameters**:
- `token`: Token address (address(0) for native ETH)
- `recipient`: Recipient address
- `shareBps`: Share in basis points (10000 = 100%)
**Access**: `FEE_MANAGER_ROLE` only
##### `removeFeeRecipient(address token, address recipient)`
Remove a fee recipient.
**Parameters**:
- `token`: Token address
- `recipient`: Recipient address to remove
**Access**: `FEE_MANAGER_ROLE` only
##### `getFeeRecipients(address token)`
Get fee recipients for a token.
**Parameters**:
- `token`: Token address
**Returns**: `FeeRecipient[]` - Array of fee recipients
##### `getTotalCollected(address token)`
Get total collected fees for a token.
**Parameters**:
- `token`: Token address
**Returns**: `uint256` - Total collected amount
##### `getTotalDistributed(address token)`
Get total distributed fees for a token.
**Parameters**:
- `token`: Token address
**Returns**: `uint256` - Total distributed amount
##### `getBalance(address token)`
Get current balance for a token.
**Parameters**:
- `token`: Token address (address(0) for native ETH)
**Returns**: `uint256` - Current balance
##### `emergencyWithdraw(address token, address to, uint256 amount)`
Emergency withdraw (admin only).
**Parameters**:
- `token`: Token address (address(0) for native ETH)
- `to`: Recipient address
- `amount`: Amount to withdraw
**Access**: `DEFAULT_ADMIN_ROLE` only
---
## AddressMapper
**Location**: `contracts/utils/AddressMapper.sol`
#### Functions
##### `getDeployedAddress(address genesisAddress)`
Get the deployed address for a genesis address.
**Parameters**:
- `genesisAddress`: The address from genesis.json
**Returns**: `address` - The actual deployed address
##### `getGenesisAddress(address deployedAddress)`
Get the genesis address for a deployed address.
**Parameters**:
- `deployedAddress`: The deployed address
**Returns**: `address` - The genesis address
##### `isMapped(address addr)`
Check if an address is a genesis address that has been mapped.
**Parameters**:
- `addr`: Address to check
**Returns**: `bool` - True if the address has a mapping
##### `setMapping(address genesisAddress, address deployedAddress)`
Add or update a mapping (owner only).
**Parameters**:
- `genesisAddress`: The genesis address
- `deployedAddress`: The deployed address
**Access**: Owner only
##### `removeMapping(address genesisAddress)`
Remove a mapping (owner only).
**Parameters**:
- `genesisAddress`: The genesis address to remove
**Access**: Owner only
##### `transferOwnership(address newOwner)`
Transfer ownership (owner only).
**Parameters**:
- `newOwner`: The new owner address
**Access**: Owner only
---
## Error Codes
### ComplianceRegistry
- `"ComplianceRegistry: zero address"` - Zero address provided
- `"ComplianceRegistry: contract already registered"` - Contract already registered
- `"ComplianceRegistry: contract not registered"` - Contract not registered
### TokenRegistry
- `"TokenRegistry: zero address"` - Zero address provided
- `"TokenRegistry: token already registered"` - Token already registered
- `"TokenRegistry: symbol already used"` - Symbol already in use
- `"TokenRegistry: invalid token contract"` - Invalid token contract
- `"TokenRegistry: token not registered"` - Token not registered
### FeeCollector
- `"FeeCollector: ETH amount mismatch"` - ETH amount mismatch
- `"FeeCollector: no ETH expected"` - No ETH expected
- `"FeeCollector: no recipients configured"` - No recipients configured
- `"FeeCollector: no fees to distribute"` - No fees to distribute
- `"FeeCollector: ETH transfer failed"` - ETH transfer failed
- `"FeeCollector: distribution overflow"` - Distribution overflow
- `"FeeCollector: zero recipient"` - Zero recipient address
- `"FeeCollector: invalid share"` - Invalid share percentage
- `"FeeCollector: recipient already exists"` - Recipient already exists
- `"FeeCollector: recipient not found"` - Recipient not found
---
## Events Reference
### ComplianceRegistry
- `ContractRegistered(address indexed contractAddress, string legalFrameworkVersion, string legalJurisdiction, uint256 timestamp)`
- `ContractComplianceUpdated(address indexed contractAddress, bytes32 lastLegalNoticeHash, uint256 timestamp)`
### TokenRegistry
- `TokenRegistered(address indexed tokenAddress, string name, string symbol, uint8 decimals, uint256 timestamp)`
- `TokenUpdated(address indexed tokenAddress, bool isActive, uint256 timestamp)`
- `TokenRemoved(address indexed tokenAddress, uint256 timestamp)`
### FeeCollector
- `FeesCollected(address indexed token, address indexed from, uint256 amount, uint256 timestamp)`
- `FeesDistributed(address indexed token, address indexed recipient, uint256 amount, uint256 timestamp)`
- `FeeRecipientAdded(address indexed token, address indexed recipient, uint256 shareBps, uint256 timestamp)`
- `FeeRecipientRemoved(address indexed token, address indexed recipient, uint256 timestamp)`
---
**Last Updated**: 2025-12-24