import { AppInterface , NetworkContext , OutcomeType , SolidityValueType } from "@counterfactual/types" ; import { Provider } from "ethers/providers" ; import { BigNumber } from "ethers/utils" ; import { Store } from "../store" ; import { Opcode , Protocol } from "./enums" ; export type ProtocolExecutionFlow = { [ x ] : ( context : Context ) => AsyncIterableIterator < any [ ] > ; } ; export type Middleware = { ( args ) : any ; } ; export type Instruction = Function | Opcode ; export interface Context { network : NetworkContext ; store : Store ; message : ProtocolMessage ; provider : Provider ; } export type ProtocolMessage = { processID : string ; protocol : Protocol ; params ? : ProtocolParameters ; toXpub : string ; seq : number ; customData : { [ key ] : any ; } ; } ; export type SetupParams = { initiatorXpub : string ; responderXpub : string ; multisigAddress : string ; } ; type AppABIEncodings = { stateEncoding : string ; actionEncoding : string | undefined ; } ; export type ProposeInstallParams = { multisigAddress : string ; initiatorXpub : string ; responderXpub : string ; appDefinition : string ; abiEncodings : AppABIEncodings ; initiatorDeposit : BigNumber ; initiatorDepositTokenAddress ? : string ; responderDeposit : BigNumber ; responderDepositTokenAddress ? : string ; timeout : BigNumber ; initialState : SolidityValueType ; outcomeType : OutcomeType ; } ; export type UpdateParams = { initiatorXpub : string ; responderXpub : string ; multisigAddress : string ; appIdentityHash : string ; newState : SolidityValueType ; } ; export type TakeActionParams = { initiatorXpub : string ; responderXpub : string ; multisigAddress : string ; appIdentityHash : string ; action : SolidityValueType ; } ; export type WithdrawParams = { initiatorXpub : string ; responderXpub : string ; multisigAddress : string ; recipient : string ; amount : BigNumber ; tokenAddress : string ; } ; export type InstallParams = { initiatorXpub : string ; initiatorDepositTokenAddress : string ; responderXpub : string ; responderDepositTokenAddress : string ; multisigAddress : string ; initiatorBalanceDecrement : BigNumber ; responderBalanceDecrement : BigNumber ; participants : string [ ] ; initialState : SolidityValueType ; appInterface : AppInterface ; defaultTimeout : number ; appSeqNo : number ; outcomeType : OutcomeType ; disableLimit : boolean ; } ; export type UninstallParams = { appIdentityHash : string ; initiatorXpub : string ; responderXpub : string ; multisigAddress : string ; } ; export type InstallVirtualAppParams = { initiatorXpub : string ; responderXpub : string ; intermediaryXpub : string ; defaultTimeout : number ; appInterface : AppInterface ; initialState : SolidityValueType ; initiatorBalanceDecrement : BigNumber ; responderBalanceDecrement : BigNumber ; tokenAddress : string ; appSeqNo : number ; outcomeType : OutcomeType ; } ; export type UninstallVirtualAppParams = { initiatorXpub : string ; responderXpub : string ; intermediaryXpub : string ; targetAppIdentityHash : string ; targetOutcome : string ; } ; export type ProtocolParameters = SetupParams | ProposeInstallParams | UpdateParams | InstallParams | UninstallParams | WithdrawParams | InstallVirtualAppParams | UninstallVirtualAppParams ;