Skip to main content

Horizon SDK

Official TypeScript SDK for integrating with Horizon Protocol - decentralized mission coordination on Base L2.

Features​

FeatureDescription
ðŸ“Ķ Contract ABIsType-safe ABIs for all 8 protocol contracts
🔧 UtilitiesUSDC parsing, fee calculations, address formatting
🌐 NetworksPre-configured for Base Sepolia and Base Mainnet
📝 TypesFull TypeScript definitions for all entities
ðŸŠķ LightweightZero dependencies (peer dependency on viem)

Installation​

# Using npm
npm install @horizon-protocol/sdk viem

# Using yarn
yarn add @horizon-protocol/sdk viem

# Using pnpm
pnpm add @horizon-protocol/sdk viem

Quick Start​

import { createPublicClient, http } from 'viem';
import { baseSepolia } from 'viem/chains';
import {
BASE_SEPOLIA,
MissionFactoryABI,
parseUSDC,
formatUSDC,
} from '@horizon-protocol/sdk';

// Create viem client
const client = createPublicClient({
chain: baseSepolia,
transport: http(BASE_SEPOLIA.rpcUrl),
});

// Read total mission count
const missionCount = await client.readContract({
address: BASE_SEPOLIA.contracts.missionFactory,
abi: MissionFactoryABI,
functionName: 'missionCount',
});

console.log(`Total missions: ${missionCount}`);

What's Included​

Contract ABIs​

import {
MissionFactoryABI, // Mission creation and lookup
MissionEscrowABI, // Mission lifecycle management
GuildFactoryABI, // Guild creation
GuildDAOABI, // Guild governance
PaymentRouterABI, // Fee distribution
ReputationAttestationsABI, // On-chain ratings
HorizonAchievementsABI, // Achievement NFTs
ERC20ABI, // USDC interactions
} from '@horizon-protocol/sdk';

Network Configs​

import { BASE_SEPOLIA, BASE_MAINNET, getContracts } from '@horizon-protocol/sdk';

// Pre-configured addresses
console.log(BASE_SEPOLIA.contracts.missionFactory);
// => '0xee9234954b134c39c17a75482da78e46b16f466c'

// Get contracts by chain ID
const contracts = getContracts(84532); // Base Sepolia

Utility Functions​

import {
parseUSDC, // '10.50' => 10500000n
formatUSDC, // 10500000n => '10.500000'
calculateFeeSplit, // Calculate payment distribution
calculateDDR, // Dispute reserve calculation
calculateExpiresAt, // Expiration timestamp
toBytes32, // String to bytes32
formatAddress, // Truncate address
} from '@horizon-protocol/sdk';

TypeScript Types​

import {
MissionState,
DisputeState,
DisputeOutcome,
type Mission,
type Guild,
type FeeSplit,
} from '@horizon-protocol/sdk';

Next Steps​

Resources​