@collabland/staking-contracts
Version:
Staking contracts supported by Collab.Land
68 lines (67 loc) • 2.5 kB
TypeScript
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[]>;
}