Skip to main content

Documentation Index

Fetch the complete documentation index at: https://dev-docs.multihopper.com/llms.txt

Use this file to discover all available pages before exploring further.

System Overview

MultiHopper is built as a layered system. The protocol layer enforces all routing guarantees on-chain; the application layer provides the tooling to create and monitor routes.
User / Integrator

  REST API / App

 Keeper Network

  Smart Contracts (Anchor / Rust)

  Solana + Token2022

Smart Contracts

Two on-chain programs implement the protocol:

MultiHopper Core

7ukX5xXys5nekSfvWxqfCJpjJxF9ymvJz9v9wSCR6fkeHandles route creation, hop execution, wrap/unwrap operations, fee collection, provider registration, and fee schedule management. This is the primary program for all route interactions.

Orchestrator

4TPCmR2uN3hDM1FbTsf7ZtFXwXGSz4u1Kxv5YHj6eruXA permissionless execution engine that breaks route deployment into discrete keeper-executable steps. Manages the multi-transaction sequence needed to fund and initialize a route on behalf of the creator.

Key On-Chain Accounts

MultiHopper Core

AccountSeedDescription
RouteConfig[b"route", route_id]Stores the full route definition: hop sequence, recipients, amounts, timing, prepaid hops, provider, and execution state
Vault (SPL)[b"vault_authority", route_id]Program-controlled token account holding original deposited SPL tokens
SolVault[b"sol_vault", route_id]Program-controlled lamport vault for SOL routes
WrapperMint[b"mint_authority", route_id]Token2022 mint with permanent delegate, metadata pointer, and transfer hook extensions
Provider[b"provider", provider_id]Integrator registration — stores provider wallet and ID
FeeSchedule[b"fee_schedule", provider_id]Tiered fee tiers for a registered provider

Orchestrator

AccountSeedDescription
OrchestratorConfig[b"orchestrator", orchestrator_id]Stores the full step sequence, keeper share in basis points, step count, and creator
OrchestratorStep[b"orchestrator_step", orchestrator_id, step_index]Individual step with type, execute_at timestamp, and execution state

Application Layer

ComponentTechnologyPurpose
Web AppReact 18/19, Vite, TailwindCSSRoute creation UI, wallet connection, transaction signing
APIFastify, tRPC (internal), REST /api/v1 (external)Transaction building, route management
SchedulerNode.js cronMonitors pending steps and hops, submits keeper transactions
IndexerCustom ETLOn-chain event indexing for real-time route status tracking
DatabasePostgreSQL, Drizzle ORMRoute state, user data, execution history

Monorepo Structure

The codebase is organized as a Turborepo monorepo:
multihopper/
├── apps/
│   ├── web/          # React frontend
│   └── api/          # Fastify API server
├── libs/
│   ├── server/       # tRPC routers and server logic
│   └── shared/       # Shared types and utilities
The Anchor programs live in a separate multihopper-contracts repository.

Full Tech Stack

LayerTechnologies
Smart ContractsAnchor, Rust, Token2022 (spl-token-2022)
FrontendReact 18/19, Vite, TanStack Router, Solana Wallet Adapter
BackendFastify, tRPC, Drizzle ORM, PostgreSQL
InfrastructureTurborepo, TypeScript, Docker

Architectural Principles

Distribution and execution are intentionally separated. The abstraction layer handles asset routing and intermediate wallet coordination. The hop execution engine handles sequenced transfers. This separation allows each layer to evolve independently and makes the security boundary cleaner. Permissionless execution. No single entity controls whether a route executes. Any keeper can trigger orchestrator steps or hop executions — the program validates correctness, not identity. Off-chain indexing, on-chain authority. The indexer and API provide a convenient read layer, but they hold no authority over funds. All state that matters for settlement is on-chain. Provider extensibility. Integrators can register as providers via register_provider, attach a provider_id to routes, and configure per-provider fee tiers via initialize_fee_schedule / update_fee_schedule.