Skip to main content

Environment Setup

Creating the Environment File

The CTF Exchange requires specific environment variables for deployment. Create a .env file in the root directory:
1

Copy the Template

Start by copying the example environment file:
2

Configure Variables

Open .env and configure the required variables:

Environment Variables Reference

string
required
Private key of the deployer account. This account will deploy the exchange contract and will have initial admin privileges that are later renounced.
address
required
Address that will be granted admin and operator roles after deployment. This address will maintain control after the deployer renounces their roles.
string
required
RPC endpoint for the target network (e.g., Polygon, Amoy testnet).
address
required
Address of the ERC20 collateral token (e.g., USDC) used for trading.
address
required
Address of the Conditional Tokens Framework (CTF) contract.
address
required
Address of the Polymarket proxy factory contract.
address
required
Address of the Gnosis Safe factory contract used for multisig support.
Never commit your .env file to version control. The file is already included in .gitignore to prevent accidental exposure of sensitive information.

Deployment Script

Understanding the Deployment Flow

The exchange deployment script is located at src/exchange/scripts/ExchangeDeployment.s.sol. Here’s how it works:

Deployment Steps

1

Constructor Parameters

The exchange is initialized with five critical parameters:
2

Admin Role Assignment

The deployment script grants both admin and operator roles to the specified admin address:
  • addAdmin(admin) - Grants administrative privileges
  • addOperator(admin) - Grants operator privileges for trading operations
3

Deployer Role Renunciation

For security, the deployer immediately renounces all privileges:
  • renounceAdminRole() - Removes deployer’s admin access
  • renounceOperatorRole() - Removes deployer’s operator access
This ensures that only the designated admin address retains control over the exchange.

Running the Deployment

Local Deployment (Testing)

Test your deployment script on a local Anvil instance:

Testnet Deployment

Deploy to a testnet (e.g., Amoy):
The --verify flag will automatically verify your contract on the block explorer if you have an API key configured.

Production Deployment

For mainnet deployment (e.g., Polygon), use additional safety flags:
Always perform a dry run without --broadcast first to simulate the deployment and verify gas costs.

Current Deployments

The CTF Exchange is currently deployed on the following networks:

Polygon Mainnet

Address: 0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982EView on Polygonscan →

Amoy Testnet

Address: 0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40View on Amoy Explorer →

Configuration Options

Solidity Compiler Settings

The compiler is configured in foundry.toml for optimal gas efficiency:
  • Solidity Version: 0.8.15 (tested and audited)
  • Optimizer Runs: 1,000,000 for maximum runtime gas optimization

Gas Reporting

Gas reporting is enabled for all contracts:
Generate a gas report during testing:

Fuzz Testing Profiles

Two fuzz testing profiles are available:
Run tests with the intense profile:

Post-Deployment Configuration

Registering Token Pairs

After deployment, token pairs must be registered before trading can begin:

Adding Operators

Additional operators can be added for order matching:

Pausing Trading

In emergency situations, trading can be paused:

Security Considerations

The CTF Exchange has been audited by ChainSecurity. Review the audit report before deployment.

Private Key Security

Never share or commit private keys. Use hardware wallets for production deployments.

Admin Controls

The admin address has significant control. Consider using a multisig wallet.

Testing

Always test deployments on testnet before mainnet deployment.

Verification

Verify contract source code on block explorers for transparency.