opnet
Version:
The perfect library for building Bitcoin-based applications.
446 lines (381 loc) • 13.4 kB
text/typescript
import { Address } from '@btc-vision/transaction';
import { CallResult } from '../../../../contracts/CallResult.js';
import { OPNetEvent } from '../../../../contracts/OPNetEvent.js';
import { TransferredEvent } from '../opnet/IOP20Contract.js';
import { IOP_NETContract } from '../opnet/IOP_NETContract.js';
export type LiquidityListedEvent = {
readonly totalLiquidity: bigint;
readonly provider: string;
};
export type LiquidityReservedEvent = {
readonly depositAddress: string;
readonly satoshisAmount: bigint;
readonly providerId: bigint;
readonly tokenAmount: bigint;
};
export type ListingCanceledEvent = {
readonly amount: bigint;
readonly penalty: bigint;
};
export type ProviderActivatedEvent = {
readonly providerId: bigint;
readonly listingAmount: bigint;
readonly btcToRemove: bigint;
};
export type ProviderConsumedEvent = {
readonly providerId: bigint;
readonly amountUsed: bigint;
};
export type ProviderFulfilledEvent = {
readonly providerId: bigint;
readonly removalCompleted: boolean;
readonly stakedAmount: bigint;
};
export type ReservationFallbackEvent = {
readonly reservationId: bigint;
readonly expirationBlock: bigint;
};
export type ReservationCreatedEvent = {
readonly expectedAmountOut: bigint;
readonly totalSatoshis: bigint;
};
export type ReservationPurgedEvent = {
readonly reservationId: bigint;
readonly currentBlock: bigint;
readonly purgingBlock: bigint;
readonly purgeIndex: number;
readonly providerCount: number;
readonly purgedAmount: bigint;
};
export type SwapExecutedEvent = {
readonly buyer: Address;
readonly amountIn: bigint;
readonly amountOut: bigint;
readonly totalFees: bigint;
};
export type WithdrawListingEvent = {
readonly amount: bigint;
readonly tokenAddress: Address;
readonly providerId: bigint;
readonly sender: Address;
};
/* ------------------------------------------------------------------
* Call-result helpers
* ------------------------------------------------------------------ */
export type ReserveNativeSwap = CallResult<
{},
OPNetEvent<
| LiquidityReservedEvent
| ReservationCreatedEvent
| TransferredEvent
| ProviderFulfilledEvent
| ReservationPurgedEvent
>[]
>;
export type ListLiquidity = CallResult<{}, OPNetEvent<LiquidityListedEvent | TransferredEvent>[]>;
export type CancelListing = CallResult<
{},
OPNetEvent<ListingCanceledEvent | TransferredEvent | ReservationPurgedEvent>[]
>;
export type WithdrawListing = CallResult<{}, OPNetEvent<WithdrawListingEvent | TransferredEvent>[]>;
export type CreatePool = CallResult<{}, OPNetEvent<TransferredEvent | ReservationPurgedEvent>[]>;
export type SetFees = CallResult;
export type SetStakingContractAddress = CallResult;
export type SetFeesAddress = CallResult;
export type Pause = CallResult;
export type Unpause = CallResult;
export type ActivateWithdrawMode = CallResult;
export type IsPaused = CallResult<{ paused: boolean }, []>;
export type IsWithdrawModeActive = CallResult<{ active: boolean }, []>;
export type GetFees = CallResult<{ reservationBaseFee: bigint; priorityQueueBaseFee: bigint }, []>;
export type Swap = CallResult<
{},
OPNetEvent<
| SwapExecutedEvent
| TransferredEvent
| ProviderActivatedEvent
| ProviderFulfilledEvent
| ProviderConsumedEvent
| ReservationFallbackEvent
>[]
>;
export type GetReserve = CallResult<
{
liquidity: bigint;
reservedLiquidity: bigint;
virtualBTCReserve: bigint;
virtualTokenReserve: bigint;
},
[]
>;
export type GetQuote = CallResult<
{
tokensOut: bigint;
requiredSatoshis: bigint;
price: bigint;
scale: bigint;
},
[]
>;
export type GetProviderDetails = CallResult<
{
id: bigint;
liquidity: bigint;
reserved: bigint;
btcReceiver: string;
indexedAt: number;
isPriority: boolean;
purgeIndex: number;
isActive: boolean;
lastListedTokensAtBlock: bigint;
isPurged: boolean;
isLiquidityProvisionAllowed: boolean;
toReset: boolean;
},
[]
>;
export type GetProviderDetailsById = CallResult<
{
id: bigint;
liquidity: bigint;
reserved: bigint;
btcReceiver: string;
indexedAt: number;
isPriority: boolean;
purgeIndex: number;
isActive: boolean;
lastListedTokensAtBlock: bigint;
isPurged: boolean;
isLiquidityProvisionAllowed: boolean;
toReset: boolean;
},
[]
>;
export type GetPriorityQueueCost = CallResult<{ cost: bigint }, []>;
export type AntiBotSettings = CallResult<
{
antiBotExpirationBlock: bigint;
maxTokensPerReservation: bigint;
},
[]
>;
export type StakingAddressResult = CallResult<{ stakingAddress: Address }, []>;
export type FeesAddressResult = CallResult<{ feesAddress: string }, []>;
export type QueueDetails = CallResult<
{
lastPurgedBlock: bigint;
blockWithReservationsLength: number;
priorityQueueLength: number;
priorityQueueStartingIndex: number;
standardQueueLength: number;
standardQueueStartingIndex: number;
priorityPurgeQueueLength: number;
standardPurgeQueueLength: number;
},
[]
>;
export type GetPoolInfoNativeSwap = CallResult<
{
poolType: number;
amplification: bigint;
pegStalenessThreshold: bigint;
},
[]
>;
export type OnOP20ReceivedResult = CallResult<{ selector: Uint8Array }, []>;
/**
* @description This interface represents the NativeSwap contract,
* including all new/updated methods and type definitions.
*
* @interface INativeSwapContract
* @extends {IOP_NETContract}
* @category Contracts
*/
export interface INativeSwapContract extends IOP_NETContract {
/**
* @description Reserves a certain amount of tokens.
* @param token - The address of the token to reserve.
* @param maximumAmountIn - The maximum amount of satoshis to spend.
* @param minimumAmountOut - The minimum amount of tokens expected out.
* @param activationDelay - Number of blocks before activation.
* @param sender - The address of the sender (bytes).
* @returns {Promise<ReserveNativeSwap>}
*/
reserve(
token: Address,
maximumAmountIn: bigint,
minimumAmountOut: bigint,
activationDelay: number,
sender: Uint8Array,
): Promise<ReserveNativeSwap>;
/**
* @description Lists liquidity for sale.
* @param token - The address of the token to list.
* @param receiver - The 33 bytes public key for receiving payments (bytes).
* @param receiverStr - The Bitcoin address as a string.
* @param amountIn - The amount of tokens to list for sale.
* @param priority - Whether to place this listing in the priority queue.
* @returns {Promise<ListLiquidity>}
*/
listLiquidity(
token: Address,
receiver: Uint8Array,
receiverStr: string,
amountIn: bigint,
priority: boolean,
): Promise<ListLiquidity>;
/**
* @description Cancels a previously listed liquidity position.
* @param token - The address of the token to remove from the listing.
* @returns {Promise<CancelListing>}
*/
cancelListing(token: Address): Promise<CancelListing>;
/**
* @description Withdraws listing when in withdraw mode.
* @param token - The address of the token to withdraw.
* @returns {Promise<WithdrawListing>}
*/
withdrawListing(token: Address): Promise<WithdrawListing>;
/**
* @description Creates a new liquidity pool.
* @param token - The token address.
* @param floorPrice - The floor price to set.
* @param initialLiquidity - The amount of liquidity to seed.
* @param receiver - The 33 bytes public key for receiving payments (bytes).
* @param receiverStr - The Bitcoin address as a string.
* @param antiBotEnabledFor - Number of blocks for anti-bot protection.
* @param antiBotMaximumTokensPerReservation - Anti-bot max tokens per user.
* @param maxReservesIn5BlocksPercent - Cap on reserves in a short window.
* @param poolType - Pool type (0 = standard, 1 = stable).
* @param amplification - StableSwap A parameter (1-10000).
* @param pegStalenessThreshold - Max blocks since peg update (0 = no check).
* @returns {Promise<CreatePool>}
*/
createPool(
token: Address,
floorPrice: bigint,
initialLiquidity: bigint,
receiver: Uint8Array,
receiverStr: string,
antiBotEnabledFor: number,
antiBotMaximumTokensPerReservation: bigint,
maxReservesIn5BlocksPercent: number,
poolType: number,
amplification: bigint,
pegStalenessThreshold: bigint,
): Promise<CreatePool>;
/**
* @description Sets the global fee parameters.
* @param reservationBaseFee - Base fee for a reservation.
* @param priorityQueueBaseFee - Base fee for priority queue usage.
* @returns {Promise<SetFees>}
*/
setFees(reservationBaseFee: bigint, priorityQueueBaseFee: bigint): Promise<SetFees>;
/**
* @description Sets the staking contract address.
* @param stakingContractAddress - The new staking contract address.
* @returns {Promise<SetStakingContractAddress>}
*/
setStakingContractAddress(stakingContractAddress: Address): Promise<SetStakingContractAddress>;
/**
* @description Sets the fees collection address.
* @param feesAddress - The Bitcoin address for fees collection.
* @returns {Promise<SetFeesAddress>}
*/
setFeesAddress(feesAddress: string): Promise<SetFeesAddress>;
/**
* @description Pauses the contract.
* @returns {Promise<Pause>}
*/
pause(): Promise<Pause>;
/**
* @description Unpauses the contract.
* @returns {Promise<Unpause>}
*/
unpause(): Promise<Unpause>;
/**
* @description Activates withdraw mode.
* @returns {Promise<ActivateWithdrawMode>}
*/
activateWithdrawMode(): Promise<ActivateWithdrawMode>;
/**
* @description Checks if the contract is paused.
* @returns {Promise<IsPaused>}
*/
isPaused(): Promise<IsPaused>;
/**
* @description Checks if withdraw mode is active.
* @returns {Promise<IsWithdrawModeActive>}
*/
isWithdrawModeActive(): Promise<IsWithdrawModeActive>;
/**
* @description Retrieves the current fee parameters.
* @returns {Promise<GetFees>}
*/
getFees(): Promise<GetFees>;
/**
* @description Executes a swap operation.
* @param token - The address of the token to swap.
* @returns {Promise<Swap>}
*/
swap(token: Address): Promise<Swap>;
/**
* @description Retrieves the reserve information for a token.
* @param token - The address of the token.
* @returns {Promise<GetReserve>}
*/
getReserve(token: Address): Promise<GetReserve>;
/**
* @description Retrieves a quote for swapping tokens.
* @param token - The address of the token.
* @param satoshisIn - The amount of satoshis being sent.
* @returns {Promise<GetQuote>}
*/
getQuote(token: Address, satoshisIn: bigint): Promise<GetQuote>;
/**
* @description Retrieves the provider details for a token.
* @param token - The address of the token.
* @returns {Promise<GetProviderDetails>}
*/
getProviderDetails(token: Address): Promise<GetProviderDetails>;
/**
* @description Retrieves provider details by provider ID.
* @param providerId - The provider ID.
* @returns {Promise<GetProviderDetailsById>}
*/
getProviderDetailsById(providerId: bigint): Promise<GetProviderDetailsById>;
/**
* @description Retrieves the queue details for a token.
* @param token - The address of the token.
* @returns {Promise<QueueDetails>}
*/
getQueueDetails(token: Address): Promise<QueueDetails>;
/**
* @description Retrieves the cost for using the priority queue.
* @returns {Promise<GetPriorityQueueCost>}
*/
getPriorityQueueCost(): Promise<GetPriorityQueueCost>;
/**
* @description Gets the anti-bot settings for a token.
* @param token - The address of the token.
* @returns {Promise<AntiBotSettings>}
*/
getAntibotSettings(token: Address): Promise<AntiBotSettings>;
/**
* @description Retrieves the address of the staking contract.
* @returns {Promise<StakingAddressResult>}
*/
getStakingContractAddress(): Promise<StakingAddressResult>;
/**
* @description Retrieves the fees collection address.
* @returns {Promise<FeesAddressResult>}
*/
getFeesAddress(): Promise<FeesAddressResult>;
/**
* @description Gets pool info including stable pool settings.
* @param token - The address of the token.
* @returns {Promise<GetPoolInfo>}
*/
getPoolInfo(token: Address): Promise<GetPoolInfoNativeSwap>;
update(address: Address, calldata: Uint8Array): Promise<CallResult>;
}