UNPKG

@antefinance/ante-sdk

Version:

Library for interacting with Ante smart contracts

101 lines (91 loc) 2.63 kB
import { CommitmentStakeValueType } from '@types'; import { TokenDetails, CommitmentPartySide, CommitmentStake, CommitmentStakeType, } from '@types'; import { formatUnits, getAddress } from 'viem'; export const TOKENS: Record<string, TokenDetails> = { USDC: { name: 'USDC', symbol: 'USDC', decimals: 6, eip712Version: '2', }, gUSDC: { name: 'USD Coin', symbol: 'USDC', decimals: 6, eip712Version: '2', }, }; export const TOKENS_DETAILS: Record<number, Record<string, TokenDetails>> = { 0x1: { '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': TOKENS.USDC, }, 0x5: { '0x07865c6E87B9F70255377e024ace6630C1Eaa37F': TOKENS.gUSDC, }, }; const tokenStakeToString = ( tokenStake: | { chainId: number; token: string; amount: string; } | undefined ): string | null => { if (!tokenStake) return null; try { const tokenAddress = getAddress(tokenStake.token.toLowerCase()); const tokenDetails = TOKENS_DETAILS[tokenStake.chainId]?.[tokenAddress]; if (!tokenDetails) { return null; } return `${formatUnits(BigInt(tokenStake.amount), tokenDetails.decimals)} ${ tokenDetails.symbol }`; } catch (error) { return null; } }; export const prepareStake = ( stake: CommitmentStake ): Record<CommitmentPartySide, string | null> => { const { type: stakeType } = stake; let committerStake = null; let counterpartyStake = null; if ( [CommitmentStakeType.ONE_WAY_PENALTY, CommitmentStakeType.TWO_WAY].includes( stakeType as CommitmentStakeType ) ) { committerStake = stake.valueType === CommitmentStakeValueType.STRING ? stake.value[CommitmentPartySide.COMMITTER]?.toString() : tokenStakeToString(stake.value[CommitmentPartySide.COMMITTER]); } if ( [CommitmentStakeType.ONE_WAY_REWARD, CommitmentStakeType.TWO_WAY].includes( stakeType as CommitmentStakeType ) ) { counterpartyStake = stake.valueType === CommitmentStakeValueType.STRING ? stake.value[CommitmentPartySide.COUNTERPARTY]?.toString() : tokenStakeToString(stake.value[CommitmentPartySide.COUNTERPARTY]); } return { [CommitmentPartySide.COMMITTER]: committerStake ?? null, [CommitmentPartySide.COUNTERPARTY]: counterpartyStake ?? null, }; }; export const formatStake = (stake: CommitmentStake): string => { const { [CommitmentPartySide.COMMITTER]: committerStake, [CommitmentPartySide.COUNTERPARTY]: counterpartyStake, } = prepareStake(stake); return `${committerStake || 'none'} : ${counterpartyStake || 'none'}`; };