Skip to content

nahimterrazas/oif-solvers

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OIF Protocol Solver

Minimal OIF Protocol Solver Proof-of-Concept

πŸš€ Quick Start

# Clone the repository
git clone https://github.com/your-org/oif-solvers.git
cd oif-solvers

# Install dependencies
npm install

# Build TypeScript	npm run build

# Start solver locally (uses config/chains-local.json)
npm run start:local

# Or run in development mode
npm run dev

πŸ“‹ Configuration

All settings are loaded from config/chains-local.json and/or environment variables.

Local Config File (recommended)

Edit config/chains-local.json with your chain RPC URLs, contract addresses, and solver parameters.

Environment Variables

  • SOLVER_PRIVATE_KEY (required): wallet private key for signing transactions
  • ORIGIN_RPC_URL (required): RPC endpoint for the origin chain
  • DESTINATION_RPC_URL (required): RPC endpoint for the destination chain
  • SOLVER_PORT (optional, default: 3000)
  • SOLVER_HOST (optional, default: 0.0.0.0)
  • MAX_GAS_PRICE (optional)
  • GAS_MULTIPLIER (optional)
  • RETRY_ATTEMPTS (optional)

πŸ“‘ API Endpoints

Method Path Description
GET /api/v1/health Health check
POST /api/v1/orders Submit a new order
GET /api/v1/orders/:orderId Get order status by ID
GET /api/v1/queue View pending and processing queue
GET / API metadata

βš™οΈ Available Scripts

npm run build            # Compile TypeScript to dist/
npm run dev              # Run using ts-node (development mode)
npm run start            # Run compiled solver (dist/index.js)
npm run start:local      # Run solver with local config
npm run test-config      # Test configuration loader
npm run test-contracts   # Test contract integration
npm run test-api         # Run API server CLI help
npm run test-services    # Test core services
npm run test-chain-config# Validate chain config loader
npm run clean            # Remove dist/ directory

πŸ“ Project Structure

.
β”œβ”€β”€ config/
β”‚   └── chains-local.json       Local chain & solver config
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.ts                Main entrypoint (OIFProtocolSolver)
β”‚   β”œβ”€β”€ SolverServer.ts         Express-based API server
β”‚   β”œβ”€β”€ services/               Core business logic services
β”‚   β”œβ”€β”€ storage/                Order storage and persistence
β”‚   β”œβ”€β”€ models/                 Data models (StandardOrder, MandateOutput, SolverState)
β”‚   β”œβ”€β”€ contracts/              ContractFactory & contract interfaces
β”‚   β”œβ”€β”€ config/                 Configuration loader utilities (ConfigLoader)
β”‚   β”œβ”€β”€ events/                 Event listeners for fill & finalization events
β”‚   └── utils/                  Helper utilities (Logger, JsonUtils, ChainUtils)
β”œβ”€β”€ run-solver-local.js         Local runner using config/chains-local.json
β”œβ”€β”€ scripts/                    Helper scripts (verify-workflow.sh, test-full-workflow.sh)
β”œβ”€β”€ package.json                Project metadata & npm scripts
β”œβ”€β”€ tsconfig.json               TypeScript configuration
β”œβ”€β”€ README.md                   This file
└── LICENSE                     MIT license

πŸ—οΈ How It Works

  1. Receive Order: HTTP POST to /api/v1/orders with {"order": StandardOrder, "signature": string}.
  2. Enqueue & Validate: OrderMonitoringService validates and enqueues the order.
  3. Fill: CrossChainService executes the fill transaction on the destination chain.
  4. Finalize: FinalizationService executes the finalize transaction on the origin chain.
  5. Monitor: Check order status with GET /api/v1/orders/:orderId or GET /api/v1/queue.

πŸ–ΌοΈ End-to-End Workflow Diagram

OIF Protocol Solver Workflow

πŸ”‘ Wallet Configuration

The solver uses a wallet to sign transactions when filling orders (Step2) and finalizing them (Step3).

Current Setup

By default, the solver uses Anvil Account #0 which has 10,000 ETH on both chains:

  • Address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
  • Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

Configuration Options

Option 1: Config File (Recommended) Edit config/chains-local.json:

{
  "solver": {
    "wallet": {
      "description": "Anvil account #0 (has 10000 ETH for testing)",
      "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
      "privateKey": "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
    }
  }
}

Option 2: Environment Variables

export SOLVER_PRIVATE_KEY="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
export SOLVER_ADDRESS="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"

πŸ“š Documentation

  • Configuration: config/chains-local.json

πŸ—οΈ Development

# Install dependencies
npm install

# Build TypeScript
npm run build

# Start locally
npm run start:local

### Build and Run
```bash
# Install dependencies
npm install

# Build (core components only - API has known issues)
npm run build

# Run simple solver
npm run dev

Project Structure

solver/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ CrossChainService.ts      βœ… orchestrator
β”‚   β”‚   β”œβ”€β”€ FinalizationService.ts    βœ… finalize (claim) tokens
β”‚   β”‚   └── OrderMonitoringService.ts βœ… Basic queue management
β”‚   β”œβ”€β”€ models/
β”‚   β”‚   β”œβ”€β”€ StandardOrder.ts          βœ… Order data structures
β”‚   β”‚   └── MandateOutput.ts         βœ… Output definitions
β”‚   β”œβ”€β”€ contracts/
β”‚   β”‚   └── ContractFactory.ts       βœ… Contract connection factory
β”‚   β”œβ”€β”€ index-simple.ts              βœ… Simple CLI interface
β”œβ”€β”€ README.md                        πŸ“‹ This file
└── package.json                     βœ… Dependencies and scripts

Current Status

βœ… Working (Core MVP)

  • JSON Processing: Reads Step1 output correctly
  • Cross-Chain Execution: Automated Step2 (CoinFiller.fill())
  • Finalization: Automated Step3 (SettlerCompact.finalise())
  • CLI Interface: Simple command-line operation
  • Error Handling: Gas estimation, retries, validation

⚠️ Known Issues (Secondary)

  • API Layer: SolverAPI.ts has TypeScript compilation errors due to over-engineering
  • Complex Monitoring: OrderMonitoringService has unused complex features
  • Event Listening: Removed unnecessary event-driven infrastructure

🎯 Ready For

  • Testing with real orders: Core functionality is complete
  • Integration with Step1 scripts: JSON format compatibility confirmed
  • Production deployment: Core services are stable
  • Performance optimization: Basic implementation is working

Quick Test

Run the core component test:

node test-core.js

This verifies all essential components are present and working.

Flow Summary

User runs Step1_CreateOrder.s.sol β†’ order_data.json
                ↓
Solver reads JSON β†’ CoinFiller.fill() (destination chain)
                ↓  
Solver executes β†’ SettlerCompact.finalise() (origin chain)
                ↓
Cross-chain swap complete βœ…

The solver successfully automates the manual Step2/Step3 workflow while maintaining exactly the same transaction logic.

Dependencies

  • ethers: Blockchain interaction
  • express: API server (for advanced features)
  • dotenv: Environment configuration
  • typescript: Development tooling

Environment Variables

# Required
SOLVER_PRIVATE_KEY=0x...          # Solver wallet private key
ORIGIN_RPC_URL=https://...        # Origin chain RPC
DESTINATION_RPC_URL=https://...   # Destination chain RPC

# Optional
MAX_GAS_PRICE=100000000000        # Max gas price in wei
GAS_MULTIPLIER=1.2                # Gas limit safety buffer
RETRY_ATTEMPTS=3                  # Transaction retry count

Next Steps

  1. Test with real orders: Use actual Step1 JSON output
  2. Fix API layer: Resolve TypeScript compilation issues in SolverAPI.ts
  3. Add monitoring: Implement proper transaction monitoring
  4. Optimize performance: Add caching and batch processing
  5. Production hardening: Add comprehensive error handling

The core solver functionality is complete and ready for testing.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 75.3%
  • Shell 15.5%
  • Solidity 7.4%
  • JavaScript 1.8%