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.statususeBuyYes()
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
| Variable | Description |
|---|---|
| NEXT_PUBLIC_MARKET_ADDRESS | PredictionMarketCDS contract |
| NEXT_PUBLIC_VAULT_ADDRESS | SiprifiVault contract |
| NEXT_PUBLIC_LENDING_ADDRESS | SiprifiLending contract |
| NEXT_PUBLIC_CREDIT_ADDRESS | SiprifiCredit (SPC) token |
| NEXT_PUBLIC_NAV_ENGINE_ADDRESS | NAV calculation engine |
| NEXT_PUBLIC_RISK_ENGINE_ADDRESS | Risk assessment engine |
All environment variables must be prefixed with
NEXT_PUBLIC_ to be accessible in the browser.