Skip to main content

Contracts Interfaces

IPrivacyPool

Core interface for privacy pools smart contracts that handle deposits and withdrawals.

interface IPrivacyPool {
struct Withdrawal {
address processooor; // Allowed address to process withdrawal
uint256 scope; // Unique pool identifier
bytes data; // Encoded arbitrary data for Entrypoint
}

// Core Functions
function deposit(
address depositor,
uint256 value,
uint256 precommitment
) external payable returns (uint256 commitment);

function withdraw(
Withdrawal memory w,
ProofLib.WithdrawProof memory p
) external;

function ragequit(ProofLib.RagequitProof memory p) external;

// View Functions
function SCOPE() external view returns (uint256);
function ASSET() external view returns (address);
}

IEntrypoint

Central registry and coordinator for privacy pools.

interface IEntrypoint {
struct AssetConfig {
IPrivacyPool pool;
uint256 minimumDepositAmount;
uint256 vettingFeeBPS;
}

struct FeeData {
address recipient;
address feeRecipient;
uint256 relayFeeBPS;
}

// Registry Functions
function registerPool(
IERC20 asset,
IPrivacyPool pool,
uint256 minimumDepositAmount,
uint256 vettingFeeBPS
) external;

function deposit(uint256 precommitment) external payable returns (uint256);

function deposit(
IERC20 asset,
uint256 value,
uint256 precommitment
) external returns (uint256);

function relay(
IPrivacyPool.Withdrawal calldata withdrawal,
ProofLib.WithdrawProof calldata proof
) external;

// View Functions
function scopeToPool(uint256 scope) external view returns (IPrivacyPool);
function assetConfig(IERC20 asset) external view returns (
IPrivacyPool pool,
uint256 minimumDepositAmount,
uint256 vettingFeeBPS
);
}