UNPKG

opnet

Version:

The perfect library for building Bitcoin-based applications.

303 lines (253 loc) 7.72 kB
import { Address, AddressMap } from '@btc-vision/transaction'; import { CallResult } from '../../../../contracts/CallResult.js'; import { OPNetEvent } from '../../../../contracts/OPNetEvent.js'; import { IOP_NETContract } from './IOP_NETContract.js'; // ------------------------------------------------------------------ // Event Definitions // ------------------------------------------------------------------ export type TransferredEvent = { readonly operator: Address; readonly from: Address; readonly to: Address; readonly amount: bigint; }; export type ApprovedEvent = { readonly owner: Address; readonly spender: Address; readonly amount: bigint; }; export type BurnedEvent = { readonly from: Address; readonly amount: bigint; }; export type MintedEvent = { readonly to: Address; readonly amount: bigint; }; // ------------------------------------------------------------------ // Call Results // ------------------------------------------------------------------ /** * @description Represents the result of the name function call. */ export type Name = CallResult< { name: string; }, [] >; /** * @description Represents the result of the symbol function call. */ export type SymbolOf = CallResult< { symbol: string; }, [] >; /** * @description Represents the result of the icon function call. */ export type TokenIcon = CallResult< { icon: string; }, [] >; /** * @description Represents the result of the decimals function call. */ export type Decimals = CallResult< { decimals: number; }, [] >; /** * @description Represents the result of the totalSupply function call. */ export type TotalSupply = CallResult< { totalSupply: bigint; }, [] >; /** * @description Represents the result of the maximumSupply function call. */ export type MaxSupply = CallResult< { maximumSupply: bigint; }, [] >; /** * @description Represents the result of the domainSeparator function call. */ export type DomainSeparator = CallResult< { domainSeparator: Uint8Array; }, [] >; /** * @description Represents the result of the balanceOf function call. */ export type BalanceOf = CallResult< { balance: bigint; }, [] >; /** * @description Represents the result of the nonceOf function call. */ export type NonceOf = CallResult< { nonce: bigint; }, [] >; /** * @description Represents the result of the allowance function call. */ export type Allowance = CallResult< { remaining: bigint; }, [] >; /** * @description Represents the result of the transfer function call. */ export type Transfer = CallResult<{}, [OPNetEvent<TransferredEvent>]>; /** * @description Represents the result of the transferFrom function call. */ export type TransferFrom = CallResult<{}, [OPNetEvent<TransferredEvent>]>; /** * @description Represents the result of the safeTransfer function call. */ export type SafeTransfer = CallResult<{}, [OPNetEvent<TransferredEvent>]>; /** * @description Represents the result of the safeTransferFrom function call. */ export type SafeTransferFrom = CallResult<{}, [OPNetEvent<TransferredEvent>]>; /** * @description Represents the result of the increaseAllowance function call. */ export type IncreaseAllowance = CallResult<{}, [OPNetEvent<ApprovedEvent>]>; /** * @description Represents the result of the decreaseAllowance function call. */ export type DecreaseAllowance = CallResult<{}, [OPNetEvent<ApprovedEvent>]>; /** * @description Represents the result of the increaseAllowanceBySignature function call. */ export type IncreaseAllowanceBySignature = CallResult<{}, [OPNetEvent<ApprovedEvent>]>; /** * @description Represents the result of the decreaseAllowanceBySignature function call. */ export type DecreaseAllowanceBySignature = CallResult<{}, [OPNetEvent<ApprovedEvent>]>; /** * @description Represents the result of the burn function call. */ export type Burn = CallResult<{}, [OPNetEvent<BurnedEvent>]>; /** * @description Represents the result of the mint function call. */ export type Mint = CallResult<{}, OPNetEvent<MintedEvent>[]>; /** * @description Represents the result of the airdrop function call. */ export type Airdrop = CallResult<{}, OPNetEvent<MintedEvent>[]>; /** * @description Represents the result of the metadata function call. */ export type TokenMetadata = CallResult< { name: string; symbol: string; icon: string; decimals: number; totalSupply: bigint; domainSeparator: Uint8Array; }, [] >; /** * @description This interface represents the OP20 base contract. * @interface IOP20Contract * @extends {IOP_NETContract} * @category Contracts * * @example * import { Address } from '@btc-vision/transaction'; * import { IOP20Contract } from '../abi/shared/interfaces/IOP20Contract.js'; * import { OP_20_ABI } from '../abi/shared/json/OP_20_ABI.js'; * import { CallResult } from '../contracts/CallResult.js'; * import { getContract } from '../contracts/Contract.js'; * import { JSONRpcProvider } from '../providers/JSONRpcProvider.js'; * * const provider: JSONRpcProvider = new JSONRpcProvider({ url: 'https://regtest.opnet.org', network: networks.regtest }); * const contract: IOP20Contract = getContract<IOP20Contract>( * 'bcrt1pyrs3eqwnrmd4ql3nwvx66yzp0wc24xd2t9pf8699ln340pjs7f3sar3tum', * OP_20_ABI, * provider, * networks.regtest, * ); * * const address: Address = new Address([ * 40, 11, 228, 172, 219, 50, 169, 155, 163, 235, 250, 102, 169, 29, 219, 65, 167, 183, 161, 210, * 254, 244, 21, 57, 153, 34, 205, 138, 4, 72, 92, 2, * ]); * * const balanceExample = await contract.balanceOf( * address * ); * * console.log('Balance:', balanceExample.properties.balance); */ export interface IOP20Contract extends IOP_NETContract { name(): Promise<Name>; symbol(): Promise<SymbolOf>; icon(): Promise<TokenIcon>; decimals(): Promise<Decimals>; totalSupply(): Promise<TotalSupply>; maximumSupply(): Promise<MaxSupply>; domainSeparator(): Promise<DomainSeparator>; balanceOf(owner: Address): Promise<BalanceOf>; nonceOf(owner: Address): Promise<NonceOf>; allowance(owner: Address, spender: Address): Promise<Allowance>; transfer(to: Address, amount: bigint): Promise<Transfer>; transferFrom(from: Address, to: Address, amount: bigint): Promise<TransferFrom>; safeTransfer(to: Address, amount: bigint, data: Uint8Array): Promise<SafeTransfer>; safeTransferFrom( from: Address, to: Address, amount: bigint, data: Uint8Array, ): Promise<SafeTransferFrom>; increaseAllowance(spender: Address, amount: bigint): Promise<IncreaseAllowance>; decreaseAllowance(spender: Address, amount: bigint): Promise<DecreaseAllowance>; increaseAllowanceBySignature( owner: Uint8Array, ownerTweakedPublicKey: Uint8Array, spender: Address, amount: bigint, deadline: bigint, signature: Uint8Array, ): Promise<IncreaseAllowanceBySignature>; decreaseAllowanceBySignature( owner: Uint8Array, ownerTweakedPublicKey: Uint8Array, spender: Address, amount: bigint, deadline: bigint, signature: Uint8Array, ): Promise<DecreaseAllowanceBySignature>; burn(amount: bigint): Promise<Burn>; metadata(): Promise<TokenMetadata>; mint(address: Address, amount: bigint): Promise<Mint>; airdrop(addressAndAmount: AddressMap<bigint>): Promise<Airdrop>; }