# atomiq-chain-evm/src

# @atomiqlabs/chain-evm

`@atomiqlabs/chain-evm` is the EVM integration package for the Atomiq protocol.

Within the Atomiq stack, this library provides the EVM-side building blocks used for Bitcoin-aware swaps and SPV-backed vault flows on supported EVM-compatible chains. It includes:

* chain initializers for Atomiq-supported EVM networks
* the `EVMChainInterface` used to talk to chain RPCs
* BTC relay, escrow swap, and SPV vault contract wrappers
* browser and server-side EVM signer helpers
* event utilities for tracking swap and vault activity

This package is intended for direct protocol integrations and for higher-level Atomiq SDK layers that need EVM chain support.

## Installation

Install the package with its `ethers` peer dependency:

```
npm install @atomiqlabs/chain-evm ethers
```

## Supported Chains

The package currently exports chain initializers for:

* Botanix via `BotanixInitializer`
* Citrea via `CitreaInitializer`
* Alpen via `AlpenInitializer`
* GOAT Network via `GoatInitializer`

Canonical deployments currently defined in this package:

| Chain        | Canonical deployments included |
| ------------ | ------------------------------ |
| Botanix      | `MAINNET`, `TESTNET`           |
| Citrea       | `MAINNET`, `TESTNET4`          |
| Alpen        | `TESTNET`, `TESTNET4`          |
| GOAT Network | `TESTNET`, `TESTNET4`          |

For Alpen and GOAT Network, `MAINNET` chain types exist in the API, but default mainnet contract addresses are not populated in this package yet. In those cases, pass explicit contract addresses if you want to use non-canonical deployments.

## SDK Example

Initialize the atomiq SDK with Citrea network support:

```
import {CitreaInitializer, CitreaInitializerType} from "@atomiqlabs/chain-evm";

import {BitcoinNetwork, SwapperFactory, TypedSwapper} from "@atomiqlabs/sdk";



//Define chains that you want to support here

const chains = [CitreaInitializer] as const;

type SupportedChains = typeof chains; //It's helpful that we also get the type of the chains array



const Factory = new SwapperFactory<SupportedChains>(chains); //Create swapper factory



const swapper: TypedSwapper<SupportedChains> = Factory.newSwapper({

  chains: {

    CITREA: {

      rpcUrl: citreaRpc, //You can also pass JsonApiProvider object here

    }

  },

  bitcoinNetwork: BitcoinNetwork.MAINNET //or BitcoinNetwork.TESTNET3, BitcoinNetwork.TESTNET4 - this also sets the deployment to use for EVM chains

});
```

## BTC Relay

* [EVMBtcHeader](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMBtcHeader.md)
* [EVMBtcRelay](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMBtcRelay.md)
* [EVMBtcStoredHeader](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMBtcStoredHeader.md)

## Chain Interface

* [EVMChainInterface](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMChainInterface.md)
* [EVMConfiguration](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/EVMConfiguration.md)
* [EVMFeeRate](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/EVMFeeRate.md)
* [EVMFees](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMFees.md)
* [EVMOptions](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/EVMOptions.md)
* [EVMRetryPolicy](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/EVMRetryPolicy.md)
* [EVMTx](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/EVMTx.md)
* [SignedEVMTx](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/SignedEVMTx.md)

## Events

* [EVMChainEventsBrowser](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMChainEventsBrowser.md)
* [EVMEventListenerState](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/EVMEventListenerState.md)

## Networks/Alpen

* [AlpenAssetsType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/AlpenAssetsType.md)
* [AlpenChainType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/AlpenChainType.md)
* [AlpenInitializer](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/variables/AlpenInitializer.md)
* [AlpenInitializerType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/AlpenInitializerType.md)
* [AlpenOptions](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/AlpenOptions.md)
* [initializeAlpen](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/functions/initializeAlpen.md)

## Networks/Botanix

* [BotanixAssetsType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/BotanixAssetsType.md)
* [BotanixChainType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/BotanixChainType.md)
* [BotanixInitializer](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/variables/BotanixInitializer.md)
* [BotanixInitializerType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/BotanixInitializerType.md)
* [BotanixOptions](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/BotanixOptions.md)
* [initializeBotanix](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/functions/initializeBotanix.md)

## Networks/Citrea

* [CitreaAssetsType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/CitreaAssetsType.md)
* [CitreaChainType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/CitreaChainType.md)
* [CitreaFees](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/CitreaFees.md)
* [CitreaInitializer](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/variables/CitreaInitializer.md)
* [CitreaInitializerType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/CitreaInitializerType.md)
* [CitreaOptions](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/CitreaOptions.md)
* [initializeCitrea](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/functions/initializeCitrea.md)

## Networks/GOAT

* [GoatAssetsType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/GoatAssetsType.md)
* [GoatChainType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/GoatChainType.md)
* [GoatInitializer](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/variables/GoatInitializer.md)
* [GoatInitializerType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/GoatInitializerType.md)
* [GoatOptions](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/type-aliases/GoatOptions.md)
* [initializeGoat](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/functions/initializeGoat.md)

## Providers

* [JsonRpcProviderWithRetries](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/JsonRpcProviderWithRetries.md)
* [ReconnectingWebSocketProvider](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/ReconnectingWebSocketProvider.md)
* [WebSocketProviderWithRetries](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/WebSocketProviderWithRetries.md)

## Swaps

* [EVMSpvVaultContract](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMSpvVaultContract.md)
* [EVMSpvVaultData](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMSpvVaultData.md)
* [EVMSpvWithdrawalData](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMSpvWithdrawalData.md)
* [EVMSwapContract](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMSwapContract.md)
* [EVMSwapData](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMSwapData.md)

## Wallets

* [EVMBrowserSigner](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMBrowserSigner.md)
* [EVMSigner](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-evm/src/classes/EVMSigner.md)
