@zebec-network/evm-card-sdk
Version:
An sdk for interacting with zebec card evm contracts
326 lines (325 loc) • 9.19 kB
TypeScript
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>;
}