UNPKG

@zebec-network/evm-card-sdk

Version:
326 lines (325 loc) 9.19 kB
import { ethers } from "ethers"; import { type OdysseyZebecCard, type Token, type Weth, type ZebecCard } from "./artifacts"; /** * Card type featured by zebec instant card. */ export type CardType = "silver" | "carbon"; /** * Zebec Instant Card configs */ export type CardConfig = { nativeFeePercent: string; nonNativeFeePercent: string; revenueFeePercent: string; totalCardSold: bigint; cardVault: string; revenueVault: string; commissionVault: string; usdcAddress: string; minCardAmount: string; maxCardAmount: string; dailyCardPurchaseLimit: string; }; export type FeeTier = { feePercent: string; minAmount: string; maxAmount: string; }; export type CardPurchaseOfDay = { totalCardPurchased: string; cardPurchasedTimestamp: number; }; /** * A type that hold swap transaction data */ export type SwapData = { dstAmount: string; from: string; to: string; swapParams: { executor: string; description: { srcToken: string; dstToken: string; srcReceiver: string; dstReceiver: string; srcAmount: string; minReturnAmount: string; flags: string; }; routeData: string; }; ether: string; gas: number; gasPrice: string; }; export type SwapAndBuyCardParams = { swapData: Omit<SwapData, "gas" | "gasPrice">; cardType: CardType; buyerEmail: string; overrides?: ethers.Overrides; }; export type SwapAndBuyCardParamsOdyssey = { cardType: CardType; buyerEmail: string; ether: string; slippage: number; overrides?: ethers.Overrides; }; /** * A class which holds methods and properties to interact with Zebec Instanct Card evm contracts. * @example * * const signer = <ethers.Signer Instance> // most wallet provider have way to create signer * const chainId = 11155111 // sepolia; * const service = new ZebecCardService(signer, chainId); * */ export declare class ZebecCardService { readonly signer: ethers.Signer; readonly chainId: number; readonly zebecCard: ZebecCard | OdysseyZebecCard; readonly usdcToken: Token; readonly weth: Weth; /** * Create instance of ZebecCardService. * @param signer ethers signer * @param chainId chain ID supported by sdk */ constructor(signer: ethers.Signer, chainId: number); /** * Sets Native Fee in card config. * * Can only be invoked admin. * * @param params * @returns */ setNativeFee(params: { feeInPercent: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets NonNative Fee in card config * * Can only be invoked admin. * * @param params * @returns */ setNonNativeFee(params: { feeInPercent: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets Revenue Fee in card config * * Can only be invoked admin. * * @param params * @returns */ setRevenueFee(params: { feeInPercent: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets Revenue vault address in card config * * Can only be invoked admin. * * @param params * @returns */ setRevenueVault(params: { vaultAddress: ethers.AddressLike; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets commission vault address in card config * * Can only be invoked admin. * * @param params * @returns */ setCommissionVault(params: { vaultAddress: ethers.AddressLike; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets card vault address in card config * * Can only be invoked admin. * */ setCardVault(params: { vaultAddress: ethers.AddressLike; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets usdc address in card config * Can only be invoked by admin */ setUsdcAddress(params: { tokenAddress: ethers.AddressLike; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets minimum card amount for purchasing card in card config */ setMinCardAmount(params: { minCardAmount: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets maximum card amount for purchasing card in card config */ setMaxCardAmount(params: { maxCardAmount: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets daily card purchase limit in card config */ setDailyCardPurchaseLimit(params: { dailyCardPurchaseLimit: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Updates fee for given min - max (range) amount and inserts if range in not found. */ setFee(params: { minAmount: string; maxAmount: string; feePercent: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Sets fee tiers only be invoked by admin */ setFeeTiers(params: { feeTiers: FeeTier[]; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; private _parseFeeTiers; setCustomFee(params: { tokenAddress: string; fee: number | string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; getCustomFee(params: { tokenAddress: string; overrides?: ethers.Overrides; }): Promise<string>; setReloadableFee(params: { fee: string | number; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Deposits usdc to user vault * @param params * @returns */ depositUsdc(params: { amount: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Withdraw usdc from user vault * @param params * @returns */ withdraw(params: { amount: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Transfer specified amount from user's vault balance to card vault with some fee amount for card purchase. * @param params * @returns */ buyCard(params: { amount: string; cardType: CardType; buyerEmail: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; /** * Swaps given src token to usdc and transfers to user's vault * @param params * @param overrides * @returns */ swapAndDeposit(params: { swapData: Omit<SwapData, "gas" | "gasPrice">; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; buyCardDirect(params: { amount: string; cardType: CardType; buyerEmail: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; swapAndBuyCardDirect(params: SwapAndBuyCardParams): Promise<ethers.ContractTransactionResponse>; swapAndBuyCardOdyssey(params: SwapAndBuyCardParamsOdyssey): Promise<ethers.ContractTransactionResponse>; getReloadableFee(): Promise<string>; /** * Gets minimum usdc amount for given ether amount * @param etherAmount * @param slippage * @returns */ getMinimumUsdcAmount(etherAmount: string, slippage: number): Promise<string>; /** * Gets user's vault balance * @param params * @returns */ getUserBalance(params: { userAddress: ethers.AddressLike; }): Promise<string>; /** * Gets user's card purchase * @param params * @returns */ getCardPurhcaseOfDay(params: { userAddress: ethers.AddressLike; }): Promise<CardPurchaseOfDay>; /** * Gets Zebec Instant Card contract configs * @returns */ getCardConfig(): Promise<CardConfig>; /** * Gets fee tiers * @returns Array of fee tier */ getFeeTiers(): Promise<Array<FeeTier>>; /** * Gets admin adddress * @returns */ getAdmin(): Promise<string>; /** * add allowance of given amount of given token to given spender * @param params * @returns */ approve(params: { token: string; spender: ethers.AddressLike; amount: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse | null>; /** * Wrap ETH to Wrapped ETH * @param param * @returns */ wrapEth(params: { amount: string; overrides?: ethers.Overrides; }): Promise<ethers.ContractTransactionResponse>; }