import { Address } from '@btc-vision/transaction';
import { CallResult } from '../../../../contracts/CallResult.js';
import { BalanceOf, TotalSupply } from '../opnet/IOP_20Contract.js';
import { IOP_NETContract } from '../opnet/IOP_NETContract.js';
export type Status = CallResult<{
    status: bigint;
}>;
interface IMotoswapReentrancyGuard extends IOP_NETContract {
    status(): Promise<Status>;
}
export type Admin = CallResult<{
    adminAddress: Address;
}>;
export type ChangeAdmin = CallResult<{
    success: boolean;
}>;
interface IMotoswapOwnableReentrancyGuard extends IMotoswapReentrancyGuard {
    admin(): Promise<Admin>;
    changeAdmin(newAdmin: Address): Promise<ChangeAdmin>;
}
export type GetMotoAddress = CallResult<{
    motoAddress: Address;
}>;
export type MotoAddress = CallResult<{
    totalSupply: bigint;
}>;
export type LastInteractedBlock = CallResult<{
    lastInteractedBlock: bigint;
}>;
export type RewardDebt = CallResult<{
    rewardDebt: bigint;
}>;
export type RewardBalance = CallResult<{
    rewardBalance: bigint;
}>;
export type PendingReward = CallResult<{
    pendingReward: bigint;
}>;
export type CalculateSlashingFee = CallResult<{
    slashingFee: bigint;
}>;
export type EnabledRewardTokens = CallResult<{
    enabledRewardTokens: Address[];
}>;
export type Stake = CallResult<{
    success: boolean;
}>;
export type Unstake = CallResult<{
    success: boolean;
}>;
export type ClaimRewards = CallResult<{
    success: boolean;
}>;
export type AdminAddRewardToken = CallResult<{
    success: boolean;
}>;
export type AdminRemoveRewardToken = CallResult<{
    success: boolean;
}>;
export type AdminChangeMotoAddress = CallResult<{
    success: boolean;
}>;
export type AdminChangeLockupParameters = CallResult<{
    success: boolean;
}>;
export type AdminEnableEmergencyWithdrawals = CallResult<{
    success: boolean;
}>;
export type RewardTokenAddedEvent = {
    readonly token: Address;
};
export type RewardTokenRemovedEvent = {
    readonly token: Address;
};
export interface IMotoswapStakingContract extends IMotoswapOwnableReentrancyGuard {
    balanceOf(address: Address): Promise<BalanceOf>;
    totalSupply(): Promise<TotalSupply>;
    motoAddress(): Promise<MotoAddress>;
    lastInteractedBlock(address: Address): Promise<LastInteractedBlock>;
    rewardDebt(user: Address, rewardToken: Address): Promise<RewardDebt>;
    rewardBalance(user: Address): Promise<RewardBalance>;
    pendingReward(user: Address, rewardToken: Address): Promise<PendingReward>;
    calculateSlashingFee(user: Address, amount: bigint): Promise<CalculateSlashingFee>;
    enabledRewardTokens(): Promise<EnabledRewardTokens>;
    stake(amount: bigint): Promise<Stake>;
    unstake(): Promise<Unstake>;
    claimRewards(): Promise<ClaimRewards>;
    adminAddRewardToken(token: Address): Promise<AdminAddRewardToken>;
    adminRemoveRewardToken(token: Address): Promise<AdminAddRewardToken>;
    adminChangeMotoAddress(token: Address): Promise<AdminAddRewardToken>;
    adminChangeLockupParameters(newLockupDuration: bigint, newMaxSlashingFeePercent: bigint, newBlocksPerOnePercentSlashingFeeReduction: bigint): Promise<AdminChangeLockupParameters>;
    adminEnableEmergencyWithdrawals(): Promise<AdminEnableEmergencyWithdrawals>;
}
export {};
