API Reference

Integrate Siprifi into your application using our React hooks and contract ABIs.

React Hooks

Siprifi provides a set of React hooks built on wagmi for easy integration.

useMarkets()

Fetches all markets from the protocol.

typescript
import { useMarkets } from '@/hooks/use-siprifi-data';

function MarketList() {
  const { data: markets, isLoading, error } = useMarkets();
  
  if (isLoading) return <Spinner />;
  if (error) return <Error message={error.message} />;
  
  return (
    <ul>
      {markets?.map(market => (
        <li key={market.id}>{market.eventName}</li>
      ))}
    </ul>
  );
}

useMarket(id)

Fetches a single market by ID.

typescript
import { useMarket } from '@/hooks/use-siprifi-data';

const { data: market, isLoading } = useMarket(1);

// market.eventName
// market.maturityDate
// market.collateralETH
// market.yesIssued
// market.status

useBuyYes()

Hook for purchasing YES tokens.

typescript
import { useBuyYes } from '@/hooks/use-siprifi-data';

function BuyButton({ marketId }) {
  const { buyYes, isPending, isSuccess, error } = useBuyYes();
  
  return (
    <button 
      onClick={() => buyYes(marketId)}
      disabled={isPending}
    >
      {isPending ? 'Confirming...' : 'Buy YES (0.1 ETH)'}
    </button>
  );
}

useCreateMarket()

Hook for creating new markets.

typescript
import { useCreateMarket } from '@/hooks/use-siprifi-data';
import { parseEther } from 'viem';

function CreateMarketForm() {
  const { createMarket, isPending, isSuccess } = useCreateMarket();
  
  const handleSubmit = () => {
    createMarket(
      "Company XYZ Default",           // eventName
      BigInt(Math.floor(Date.now() / 1000) + 86400 * 30), // maturity (30 days)
      parseEther("1")                  // collateral in ETH
    );
  };
  
  return <button onClick={handleSubmit}>Create</button>;
}

useUserCredit(address)

Fetches user's credit line data.

typescript
import { useUserCredit } from '@/hooks/use-siprifi-data';

const { data: credit, isLoading } = useUserCredit(userAddress);

// credit.ebp - Effective Borrowing Power
// credit.debt - Current debt
// credit.healthFactor - Health factor (> 1 = safe)

TypeScript Types

typescript
// Market type
interface Market {
  id: number;
  issuer?: string;
  eventName: string;
  description: string;
  status: "InProgress" | "MaturityReached" | "Resolved";
  yesIssued: bigint;
  maxNotional: bigint;
  collateralETH: bigint;
  maturityDate: Date;
  outcome?: number;
  yesToken?: string;
  noToken?: string;
}

// Credit data type
interface UserCredit {
  ebp: bigint;
  debt: bigint;
  healthFactor: bigint;
}

// Protocol stats type
interface ProtocolStats {
  tvl: bigint;
  protocolNAV: bigint;
  sipUSDPrice: bigint;
  spcTotalSupply: bigint;
  totalMarkets: number;
  activeMarkets: number;
}

Contract ABIs

Import contract ABIs from the contracts file:

typescript
import {
  CONTRACT_ADDRESSES,
  PREDICTION_MARKET_CDS_ABI,
  SIPRIFI_VAULT_ABI,
  SIPRIFI_LENDING_ABI,
  SIPRIFI_CREDIT_ABI,
  ERC20_ABI,
} from '@/lib/contracts';

Environment Variables

VariableDescription
NEXT_PUBLIC_MARKET_ADDRESSPredictionMarketCDS contract
NEXT_PUBLIC_VAULT_ADDRESSSiprifiVault contract
NEXT_PUBLIC_LENDING_ADDRESSSiprifiLending contract
NEXT_PUBLIC_CREDIT_ADDRESSSiprifiCredit (SPC) token
NEXT_PUBLIC_NAV_ENGINE_ADDRESSNAV calculation engine
NEXT_PUBLIC_RISK_ENGINE_ADDRESSRisk assessment engine
All environment variables must be prefixed with NEXT_PUBLIC_ to be accessible in the browser.