Skip to main content

SDK API Reference

Complete API reference for the Horizon Protocol SDK.

Network Configuration​

BASE_SEPOLIA​

Pre-configured network for Base Sepolia testnet.

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

BASE_SEPOLIA = {
chainId: 84532,
name: 'Base Sepolia',
rpcUrl: 'https://sepolia.base.org',
blockExplorer: 'https://sepolia.basescan.org',
contracts: {
missionFactory: '0xee9234954b134c39c17a75482da78e46b16f466c',
paymentRouter: '0x94fb7908257ec36f701d2605b51eefed4326ddf5',
guildFactory: '0xfeae3538a4a1801e47b6d16104aa8586edb55f00',
reputationAttestations: '0xedae9682a0fb6fb3c18d6865461f67db7d748002',
disputeResolver: '0xb00ac4278129928aecc72541b0bcd69d94c1691e',
horizonAchievements: '0x568e0e3102bfa1f4045d3f62559c0f9823b469bc',
usdc: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
},
};

getContracts(chainId)​

Get contract addresses by chain ID.

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

const contracts = getContracts(84532);
console.log(contracts.missionFactory);

getNetwork(chainId)​

Get full network configuration by chain ID.

import { getNetwork } from '@horizon-protocol/sdk';

const network = getNetwork(84532);
console.log(network.name); // 'Base Sepolia'

Contract ABIs​

All ABIs are typed for use with viem.

ExportDescription
MissionFactoryABIMission creation and indexing
MissionEscrowABIIndividual mission escrow lifecycle
GuildFactoryABIGuild creation
GuildDAOABIGuild governance and membership
PaymentRouterABIFee distribution logic
ReputationAttestationsABIOn-chain rating attestations
HorizonAchievementsABIAchievement NFT contract
ERC20ABIStandard ERC20 (for USDC)

Utility Functions​

parseUSDC(amount)​

Convert human-readable amount to USDC units (6 decimals).

import { parseUSDC } from '@horizon-protocol/sdk';

parseUSDC('10.50'); // => 10500000n
parseUSDC(10.5); // => 10500000n
parseUSDC(100); // => 100000000n

formatUSDC(amount)​

Convert USDC units to human-readable string.

import { formatUSDC } from '@horizon-protocol/sdk';

formatUSDC(10500000n); // => '10.500000'
formatUSDC(100000000n); // => '100.000000'

calculateFeeSplit(rewardAmount, guildFeeBps)​

Calculate payment distribution for a mission.

import { calculateFeeSplit, parseUSDC } from '@horizon-protocol/sdk';

const fees = calculateFeeSplit(parseUSDC(100), 100); // 1% MetaDAO/SubDAO fee
// {
// performerAmount: 92000000n, // 92%
// protocolAmount: 2500000n, // 2.5%
// labsAmount: 2500000n, // 2.5%
// resolverAmount: 2000000n, // 2%
// guildAmount: 1000000n, // 1%
// }

calculateDDR(rewardAmount)​

Calculate Dynamic Dispute Reserve (5% of reward).

import { calculateDDR, parseUSDC } from '@horizon-protocol/sdk';

calculateDDR(parseUSDC(100)); // => 5000000n (5 USDC)

calculateLPP(rewardAmount)​

Calculate Loser-Pays Penalty (2% of reward).

import { calculateLPP, parseUSDC } from '@horizon-protocol/sdk';

calculateLPP(parseUSDC(100)); // => 2000000n (2 USDC)

calculateExpiresAt(durationSeconds)​

Calculate expiration timestamp from now.

import { calculateExpiresAt } from '@horizon-protocol/sdk';

calculateExpiresAt(24 * 3600); // 24 hours from now
calculateExpiresAt(7 * 24 * 3600); // 7 days from now

isMissionExpired(expiresAt)​

Check if a mission has expired.

import { isMissionExpired } from '@horizon-protocol/sdk';

isMissionExpired(1704326400n); // true/false

toBytes32(value)​

Convert string to bytes32 (for IPFS hashes).

import { toBytes32 } from '@horizon-protocol/sdk';

toBytes32('QmXoypizjW3W...');
// => '0x516d586f7970697a6a...'

randomBytes32()​

Generate random bytes32 (for proofs).

import { randomBytes32 } from '@horizon-protocol/sdk';

randomBytes32(); // => '0x7f4e8a2b...'

formatAddress(address)​

Truncate address for display.

import { formatAddress } from '@horizon-protocol/sdk';

formatAddress('0x1234567890abcdef...'); // => '0x1234...cdef'

Types​

MissionState​

enum MissionState {
Open = 0,
Accepted = 1,
Submitted = 2,
Completed = 3,
Cancelled = 4,
Disputed = 5,
Expired = 6,
}

DisputeState​

enum DisputeState {
None = 0,
AwaitingDDR = 1,
UnderReview = 2,
Resolved = 3,
Appealed = 4,
Finalized = 5,
}

DisputeOutcome​

enum DisputeOutcome {
None = 0,
InitiatorWins = 1,
RespondentWins = 2,
Split = 3,
}

AchievementCategory​

enum AchievementCategory {
Milestone = 0,
Performance = 1,
Guild = 2,
Seasonal = 3,
Special = 4,
}

Constants​

import {
USDC_DECIMALS, // 6
MIN_REWARD, // 1000000n (1 USDC)
MAX_REWARD, // 100000000000n (100,000 USDC)
MIN_DURATION, // 3600 (1 hour)
MAX_DURATION, // 2592000 (30 days)
FEES, // { PROTOCOL_BPS: 250, LABS_BPS: 250, RESOLVER_BPS: 200 }
APPEAL_PERIOD, // 172800 (48 hours)
ZERO_ADDRESS, // 0x0000000000000000000000000000000000000000
} from '@horizon-protocol/sdk';

Contract Addresses​

Base Sepolia (Testnet)​

ContractAddress
PaymentRouter0x94fb7908257ec36f701d2605b51eefed4326ddf5
MissionFactory0xee9234954b134c39c17a75482da78e46b16f466c
GuildFactory0xfeae3538a4a1801e47b6d16104aa8586edb55f00
ReputationAttestations0xedae9682a0fb6fb3c18d6865461f67db7d748002
DisputeResolver0xb00ac4278129928aecc72541b0bcd69d94c1691e
HorizonAchievements0x568e0e3102bfa1f4045d3f62559c0f9823b469bc
USDC0x036CbD53842c5426634e7929541eC2318f3dCF7e