# ISwap\<T, D, S>

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:54](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L54)

Base abstract class for all swap types

## Extended by

* [`IClaimableSwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/interfaces/IClaimableSwap.md)
* [`IRefundableSwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/interfaces/IRefundableSwap.md)
* [`IEscrowSwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/IEscrowSwap.md)
* [`SpvFromBTCSwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/SpvFromBTCSwap.md)
* [`LnForGasSwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/LnForGasSwap.md)
* [`OnchainForGasSwap`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/OnchainForGasSwap.md)

## Type Parameters

| Type Parameter                                                                                                                                                                     | Default type                                                                                                                                                               |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `T` *extends* [`ChainType`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/ChainType.md)                                                               | [`ChainType`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/ChainType.md)                                                                     |
| `D` *extends* `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `D`>, `ISwap`<`T`, `D`, `S`>> | `SwapTypeDefinition`<`T`, [`ISwapWrapper`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/classes/ISwapWrapper.md)<`T`, `any`>, `ISwap`<`T`, `any`, `any`>> |
| `S` *extends* `number`                                                                                                                                                             | `number`                                                                                                                                                                   |

## Constructors

### Constructor

```
protected new ISwap<T, D, S>(wrapper, obj): ISwap<T, D, S>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:178](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L178)

#### Parameters

| Parameter | Type              |
| --------- | ----------------- |
| `wrapper` | `D`\[`"Wrapper"`] |
| `obj`     | `any`             |

#### Returns

`ISwap`<`T`, `D`, `S`>

### Constructor

```
protected new ISwap<T, D, S>(wrapper, swapInit): ISwap<T, D, S>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:179](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L179)

#### Parameters

| Parameter  | Type              |
| ---------- | ----------------- |
| `wrapper`  | `D`\[`"Wrapper"`] |
| `swapInit` | `ISwapInit`       |

#### Returns

`ISwap`<`T`, `D`, `S`>

## Properties

### chainIdentifier

```
readonly chainIdentifier: T["ChainId"];
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:168](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L168)

Smart chain identifier string corresponding to this swap

***

### createdAt

```
createdAt: number;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:176](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L176)

A UNIX milliseconds timestamps of when this swap was created

***

### events

```
readonly events: EventEmitter<{

  swapState: [D["Swap"]];

}>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:160](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L160)

Event emitter emitting `"swapState"` event when swap's state changes

***

### exactIn

```
readonly exactIn: boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:172](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L172)

Whether a swap is an exact input swap

***

### url?

```
readonly optional url: string;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:164](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L164)

URL of the intermediary (LP) used for this swap, already has the swap service specific path appended

***

### TYPE

```
abstract protected readonly TYPE: SwapType;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:62](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L62)

Swap type

## Methods

### execute()

```
abstract execute(...args): Promise<boolean>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:279](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L279)

Executes the swap with the provided wallet, the exact arguments for this functions differ for various swap types. Check the `execute()` function signature in the respective swap class to see the required arguments.

#### Parameters

| Parameter | Type     | Description                                                                                                                            |
| --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| ...`args` | `any`\[] | Execution arguments, usually contains a source wallet object, callbacks and options, for exact syntax check the respective swap class. |

#### Returns

`Promise`<`boolean`>

Whether a swap was successfully executed or not, if it wasn't the user can refund or claim manually

***

### getDirection()

```
getDirection(): SwapDirection;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:560](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L560)

Returns the direction of the swap

#### Returns

[`SwapDirection`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/enumerations/SwapDirection.md)

***

### getExecutionAction()

```
abstract getExecutionAction(options?): Promise<SwapExecutionAction>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:586](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L586)

Returns a current state-dependent action for the user to execute, or `undefined` if there is no more action required for this swap - this means that the swap is probably finished (either expired, failed or settled).

#### Parameters

| Parameter  | Type  | Description                                                                                                                                                                                                            |
| ---------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options?` | `any` | Optional options argument for the additional action context (i.e. passing bitcoin wallet info to get funded PSBTs or passing the externally-generated swap secret), see the actual type in the respective swap classes |

#### Returns

`Promise`<[`SwapExecutionAction`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapExecutionAction.md)>

***

### getExecutionStatus()

```
abstract getExecutionStatus(options?): Promise<{

  currentAction: SwapExecutionAction;

  stateInfo: SwapStateInfo<S>;

  steps: SwapExecutionStep[];

}>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:605](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L605)

Returns the current action and the full execution steps for a given swap. Prefer this to calling [getExecutionSteps](#getexecutionsteps) and [getExecutionAction](#getexecutionaction) separately - if called sequentially they might return the respective steps/actions in different states if you hit the state transition boundary.

#### Parameters

| Parameter  | Type  | Description                                                                                                               |
| ---------- | ----- | ------------------------------------------------------------------------------------------------------------------------- |
| `options?` | `any` | Optional options argument for the additional execution status context, see the actual type in the respective swap classes |

#### Returns

`Promise`<{ `currentAction`: [`SwapExecutionAction`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapExecutionAction.md); `stateInfo`: [`SwapStateInfo`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapStateInfo.md)<`S`>; `steps`: [`SwapExecutionStep`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapExecutionStep.md)\[]; }>

***

### getExecutionSteps()

```
abstract getExecutionSteps(options?): Promise<SwapExecutionStep[]>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:595](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L595)

Returns a list of execution steps the user has to go through for a given swap, to see the possible execution steps check out [SwapExecutionStep](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapExecutionStep.md).

#### Parameters

| Parameter  | Type  | Description                                                                                                                                        |
| ---------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `options?` | `any` | Optional options argument for the additional steps context (i.e. automatic settlement timeout), see the actual type in the respective swap classes |

#### Returns

`Promise`<[`SwapExecutionStep`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapExecutionStep.md)\[]>

***

### getFee()

```
abstract getFee(): Fee;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:664](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L664)

Returns total fee for the swap, the fee is represented in source currency & destination currency, but is paid only once

#### Returns

[`Fee`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/Fee.md)

***

### getFeeBreakdown()

```
abstract getFeeBreakdown(): FeeBreakdown<T["ChainId"]>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:669](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L669)

Returns the breakdown of all the fees paid

#### Returns

[`FeeBreakdown`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/FeeBreakdown.md)<`T`\[`"ChainId"`]>

***

### getId()

```
abstract getId(): string;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:495](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L495)

Returns the ID of the swap, as used in the storage

#### Returns

`string`

***

### getInput()

```
abstract getInput(): TokenAmount;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:648](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L648)

Returns input amount of the swap, user needs to pay this much

#### Returns

[`TokenAmount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/TokenAmount.md)

***

### getInputAddress()

```
abstract getInputAddress(): string;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:475](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L475)

Returns source address of the swap

#### Returns

`string`

***

### getInputToken()

```
abstract getInputToken(): Token<T["ChainId"]>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:653](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L653)

Returns the input token of the swap

#### Returns

[`Token`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/Token.md)<`T`\[`"ChainId"`]>

***

### getInputTxId()

```
abstract getInputTxId(): string;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:485](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L485)

Returns swap input transaction ID on the source chain

#### Returns

`string`

***

### getInputWithoutFee()

```
abstract getInputWithoutFee(): TokenAmount;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:658](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L658)

Returns input amount of the swap without the fees (swap fee, network fee)

#### Returns

[`TokenAmount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/TokenAmount.md)

***

### getOutput()

```
abstract getOutput(): TokenAmount;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:638](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L638)

Returns output amount of the swap, user receives this much

#### Returns

[`TokenAmount`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/TokenAmount.md)

***

### getOutputAddress()

```
abstract getOutputAddress(): string;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:480](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L480)

Returns destination address of the swap

#### Returns

`string`

***

### getOutputToken()

```
abstract getOutputToken(): Token<T["ChainId"]>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:643](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L643)

Returns the output token of the swap

#### Returns

[`Token`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/Token.md)<`T`\[`"ChainId"`]>

***

### getOutputTxId()

```
abstract getOutputTxId(): string;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:490](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L490)

Returns swap output transaction ID on the destination chain

#### Returns

`string`

***

### getPriceInfo()

```
getPriceInfo(): object;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:388](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L388)

Returns pricing info about the swap

#### Returns

`object`

| Name           | Type                                                                                                           | Defined in                                                                                                                                          |
| -------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `difference`   | [`PercentagePPM`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/PercentagePPM.md) | [atomiq-sdk/src/swaps/ISwap.ts:391](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L391) |
| `marketPrice?` | `number`                                                                                                       | [atomiq-sdk/src/swaps/ISwap.ts:389](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L389) |
| `swapPrice`    | `number`                                                                                                       | [atomiq-sdk/src/swaps/ISwap.ts:390](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L390) |

***

### getQuoteExpiry()

```
getQuoteExpiry(): number;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:546](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L546)

Returns quote expiry in UNIX millis

#### Returns

`number`

***

### getState()

```
getState(): S;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:567](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L567)

Returns the current state of the swap

#### Returns

`S`

***

### getStateInfo()

```
getStateInfo(): SwapStateInfo<S>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:574](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L574)

Returns the current state of the swap along with the human-readable description of the state

#### Returns

[`SwapStateInfo`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/type-aliases/SwapStateInfo.md)<`S`>

***

### getType()

```
getType(): SwapType;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:553](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L553)

Returns the type of the swap

#### Returns

[`SwapType`](https://docs.atomiq.exchange/sdk-reference/api/atomiq-sdk/src/enumerations/SwapType.md)

***

### hasValidPrice()

```
hasValidPrice(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:380](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L380)

Checks if the pricing for the swap is valid, according to max allowed price difference set in the ISwapPrice

#### Returns

`boolean`

***

### isFailed()

```
abstract isFailed(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:526](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L526)

Returns whether the swap failed (e.g. was refunded)

#### Returns

`boolean`

***

### isFinished()

```
abstract isFinished(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:505](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L505)

Returns whether the swap is finished and in its terminal state (this can mean successful, refunded or failed)

#### Returns

`boolean`

***

### isInitiated()

```
isInitiated(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:539](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L539)

Whether a swap was initialized, a swap is considered initialized on first interaction with it, i.e. calling commit() on a Smart chain -> Bitcoin swaps, calling waitForPayment() or similar on the other direction. Not initiated swaps are not saved to the persistent storage by default (see SwapperOptions.saveUninitializedSwaps)

#### Returns

`boolean`

***

### isInProgress()

```
abstract isInProgress(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:531](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L531)

Returns whether the swap is currently being processed

#### Returns

`boolean`

***

### isQuoteExpired()

```
abstract isQuoteExpired(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:510](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L510)

Checks whether the swap's quote has definitely expired and cannot be committed anymore, we can remove such swap

#### Returns

`boolean`

***

### isQuoteSoftExpired()

```
abstract isQuoteSoftExpired(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:516](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L516)

Checks whether the swap's quote is soft expired (this means there is not enough time buffer for it to commit, but it still can happen)

#### Returns

`boolean`

***

### isSuccessful()

```
abstract isSuccessful(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:521](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L521)

Returns whether the swap finished successful

#### Returns

`boolean`

***

### refreshPriceData()

```
refreshPriceData(): Promise<void>;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:336](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L336)

Re-fetches & revalidates the price data based on the current market prices

#### Returns

`Promise`<`void`>

***

### requiresAction()

```
abstract requiresAction(): boolean;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:500](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L500)

Checks whether there is some action required from the user for this swap - can mean either refundable or claimable

#### Returns

`boolean`

***

### serialize()

```
serialize(): any;
```

Defined in: [atomiq-sdk/src/swaps/ISwap.ts:704](https://github.com/atomiqlabs/atomiq-sdk/blob/786509324f7f09c427e9ccfe527d82e496f06af5/src/swaps/ISwap.ts#L704)

Serializes the swap to a JSON stringifiable representation (i.e. no bigints, buffers etc.)

#### Returns

`any`
