Files
explorer-monorepo/docs/API_DOCUMENTATION.md

11 KiB

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.


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