import {ethers, Contract, ContractReceipt} from 'ethers'; import {Obligation} from '../typechain/Obligation'; import {OptionPairFactory} from '../typechain/OptionPairFactory'; import {BigNumberish, BytesLike, BigNumber} from 'ethers'; import {Option} from '../typechain/Option'; import {OptionLib} from '../typechain/OptionLib'; import {Script} from './constants'; import {Ierc20} from '../typechain/Ierc20'; import {IRelay} from '../typechain/IRelay'; import {IReferee} from '../typechain/IReferee'; import {ITreasury} from '../typechain/ITreasury'; import {IWriterRegistry} from '../typechain/IWriterRegistry'; import {SignerOrProvider, Optional, Signer, Provider} from './core'; import {Addresses} from './addresses'; import {EventFragment, Result} from 'ethers/lib/utils'; import {ConfirmationNotifier} from './notifier'; export declare type AddressesPair = { option: string; obligation: string; }; declare type ObligationInfo = { _expiryTime: BigNumber; _windowSize: BigNumber; _strikePrice: BigNumber; _decimals: BigNumber; _collateral: string; _option: string; }; interface Connectable { connect: (addr: string, signer: SignerOrProvider) => C; } interface Callable { address: string; } export declare function reconnect>( contract: C, factory: A, signer: Signer ): C; export declare function deploy0( signer: Signer, factory: new (signer: Signer) => { deploy: () => Promise; } ): Promise; export declare function deploy1( signer: Signer, factory: new (signer: Signer) => { deploy: (b: B) => Promise; }, arg: B ): Promise; export declare function deploy2( signer: Signer, factory: new (signer: Signer) => { deploy: (b: B, c: C) => Promise; }, arg0: B, arg1: C ): Promise; export declare function getEvent( fragment: EventFragment, args: T, receipt: ContractReceipt, contract: Contract ): Promise; export declare function getRequestEvent( obligation: Obligation, buyer: string, seller: string, receipt: ContractReceipt ): Promise; export declare function getCreatePairEvent( optionFactory: OptionPairFactory, receipt: ContractReceipt ): Promise; export declare function createPair( optionFactory: OptionPairFactory, expiryTime: BigNumberish, windowSize: BigNumberish, strikePrice: BigNumberish, collateral: string, referee: string, confirmations?: number ): Promise; export declare type BtcAddress = { hash: BytesLike; format: Script; }; export interface ReadOptionPair { getDetails(): Promise; getPairAddress(): Promise; totalSupplied(account: string): Promise; totalWritten(account: string): Promise; optionsBalance(account: string): Promise; getOptionInPrice(amount: BigNumberish): Promise; getOptionOutPrice(amount: BigNumberish): Promise; } export interface WriteOptionPair extends ReadOptionPair { approveMaxOption(): Promise; checkAllowanceOption(): Promise; write( premium: BigNumberish, amount: BigNumberish, btcAddress?: BtcAddress ): ConfirmationNotifier; buyOptions( amountOut: BigNumberish, amountInMax: BigNumberish, deadline: BigNumberish ): ConfirmationNotifier; sellOptions( amountIn: BigNumberish, amountOutMin: BigNumberish, deadline: BigNumberish ): ConfirmationNotifier; sellObligations( amountADesired: BigNumberish, amountBDesired: BigNumberish, amountAMin: BigNumberish, amountBMin: BigNumberish, deadline: BigNumberish ): ConfirmationNotifier; buyObligations( amountOut: BigNumberish, amountInMax: BigNumberish ): ConfirmationNotifier; requestExercise(seller: string, satoshis: BigNumberish): ConfirmationNotifier; executeExercise( seller: string, height: BigNumberish, index: BigNumberish, txid: BytesLike, header: BytesLike, proof: BytesLike, rawtx: BytesLike ): ConfirmationNotifier; } export declare class ReadOnlyOptionPair implements ReadOptionPair { protected option: Option; protected obligation: Obligation; protected optionLib: OptionLib; protected collateral: Ierc20; protected treasury: ITreasury; constructor( option: Option, obligation: Obligation, optionLib: OptionLib, collateral: Ierc20, treasury: ITreasury ); getDetails(): Promise; getPairAddress(): Promise; totalSupplied(account: string): Promise; totalWritten(account: string): Promise; optionsBalance(account: string): Promise; getOptionInPrice(amount: BigNumberish): Promise; getOptionOutPrice(amount: BigNumberish): Promise; } export declare class ReadWriteOptionPair extends ReadOnlyOptionPair implements WriteOptionPair { readonly account: string; readonly confirmations?: number; constructor( option: Option, obligation: Obligation, optionLib: OptionLib, collateral: Ierc20, treasury: ITreasury, account: string, confirmations?: number ); approveMaxOption(): Promise; checkAllowanceOption(): Promise; write( premium: BigNumberish, amount: BigNumberish, _btcAddress: BtcAddress ): ConfirmationNotifier; buyOptions( amountOut: BigNumberish, amountInMax: BigNumberish, deadline: BigNumberish ): ConfirmationNotifier; sellOptions( amountIn: BigNumberish, amountOutMin: BigNumberish, deadline: BigNumberish ): ConfirmationNotifier; sellObligations( amountADesired: BigNumberish, amountBDesired: BigNumberish, amountAMin: BigNumberish, amountBMin: BigNumberish, deadline: BigNumberish ): ConfirmationNotifier; buyObligations( amountOut: BigNumberish, amountInMax: BigNumberish ): ConfirmationNotifier; requestExercise(seller: string, satoshis: BigNumberish): ConfirmationNotifier; executeExercise( seller: string, height: BigNumberish, index: BigNumberish, txid: BytesLike, header: BytesLike, proof: BytesLike, rawtx: BytesLike ): ConfirmationNotifier; private waitConfirm; } export interface ReadContracts { getRelayHeight(): Promise; getPair(option: string): Promise; listOptions(): Promise; totalLiquidity(): Promise; } export interface WriteContracts extends ReadContracts { checkAllowanceCollateral(): Promise; approveMaxCollateral(): Promise; createPair( expiryTime: BigNumberish, windowSize: BigNumberish, strikePrice: BigNumberish ): Promise; getPair(option: string): Promise; } export declare class ReadOnlyContracts implements ReadContracts { readonly optionFactory: OptionPairFactory; readonly optionLib: OptionLib; readonly collateral: Ierc20; readonly referee: IReferee; readonly relay: IRelay; readonly writerRegistry: IWriterRegistry; readonly signer: SignerOrProvider; constructor( optionFactory: OptionPairFactory, optionLib: OptionLib, collateral: Ierc20, referee: IReferee, relay: IRelay, writerRegistry: IWriterRegistry, signer: SignerOrProvider ); static load( contracts: Addresses, signer: SignerOrProvider ): Promise; static resolve(provider: Provider): Promise>; getRelayHeight(): Promise; getPair(optionAddress: string): Promise; totalLiquidity(): Promise; listOptions(): Promise; } declare type JsonRpcProvider = ethers.providers.JsonRpcProvider; export declare class ReadWriteContracts extends ReadOnlyContracts implements WriteContracts { readonly account: string; readonly confirmations?: number; constructor( optionFactory: OptionPairFactory, optionLib: OptionLib, collateral: Ierc20, referee: IReferee, relay: IRelay, writerRegistry: IWriterRegistry, signer: Signer, account: string, confirmations?: number ); static load( contracts: Addresses, signer: Signer, confirmations?: number ): Promise; static resolve( provider: JsonRpcProvider, confirmations?: number ): Promise>; checkAllowanceCollateral(): Promise; approveMaxCollateral(): Promise; createPair( expiryTime: BigNumberish, windowSize: BigNumberish, strikePrice: BigNumberish ): Promise; getPair(optionAddress: string): Promise; } export {};