@antefinance/ante-sdk
Version:
Library for interacting with Ante smart contracts
101 lines (91 loc) • 2.63 kB
text/typescript
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'}`;
};