UNPKG

@collabland/staking-contracts

Version:
68 lines (67 loc) 2.5 kB
import { AssetType } from '@collabland/chain'; import { BigNumber, providers } from 'ethers'; import { StakingAsset } from './models/staking.model.js'; export { StakingAsset, StakingContractMetadata } from './models/staking.model.js'; export interface EthersProviderService { getProvider(chainIdOrNetwork: string | number): providers.Provider; } /** * Interface to be implemented to support specific staking contracts */ export interface StackingContractAdapter { contractName?: string; /** * Chain id for the staking contract, default to `1` (Ethereum Mainnet) */ chainId?: number; /** * Contract address */ contractAddress: string; /** * Supported assets to be staked */ supportedAssets: StakingAsset[]; /** * Check if the given asset name is supported by this staking contract * @param asset - Asset name such as `ERC721:0x...` */ isAssetSupported(assetName: string): Promise<boolean>; /** * Get asset type that can be staked to the contract * @param assetName - Name of the asset if the staking contract allows multiple * types of tokens to be staked */ getStakingAssetType(assetName?: string): AssetType | undefined; /** * Get a list token ids staked by the owner * @param provider - Ethers provider * @param owner - Owner address * @param assetName - Asset name */ getStakedTokenIds(owner: string, assetName?: string): Promise<BigNumber[]>; /** * Get number of token ids staked by the owner * @param provider - Ethers provider * @param owner - Owner address * @param assetName - Asset name */ getStakedTokenBalance(owner: string, assetName?: string): Promise<BigNumber>; } /** * Base class for staking contract adapters */ export declare abstract class BaseStakingContractAdapter implements StackingContractAdapter { contractName?: string | undefined; providerService: EthersProviderService; chainId: number; contractAddress: string; abstract supportedAssets: StakingAsset[]; private _provider; get provider(): providers.Provider; isAssetSupported(assetName: string): Promise<boolean>; getStakingAsset(nameOrAssetType?: string): StakingAsset; getStakingAssetType(name?: string): AssetType | undefined; getStakedTokenBalance(owner: string, assetName?: string): Promise<BigNumber>; getStakedTokenIds(owner: string, assetName?: string): Promise<BigNumber[]>; }