# atomiq-chain-starknet/src

# @atomiqlabs/chain-starknet

`@atomiqlabs/chain-starknet` is the Starknet integration package for the Atomiq protocol.

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

* the `StarknetInitializer` used to register Starknet support in the Atomiq SDK
* the `StarknetChainInterface` used to talk to Starknet RPCs
* Starknet BTC relay, escrow swap, and SPV vault contract wrappers
* signer helpers for browser and programmatic Starknet integrations
* retrying RPC and websocket helpers for chain access and realtime events

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

## Installation

Install the package with its `starknet` peer dependency:

```
npm install @atomiqlabs/chain-starknet starknet
```

## Supported Chains

This package exports a single Starknet initializer:

* Starknet via `StarknetInitializer`

Canonical deployments currently defined in this package:

| Chain    | Canonical deployments included   |
| -------- | -------------------------------- |
| Starknet | `MAINNET`, `TESTNET`, `TESTNET4` |

By default, `StarknetInitializer` selects `SN_MAIN` Starknet network when `bitcoinNetwork` is `BitcoinNetwork.MAINNET`, and `SN_SEPOLIA` otherwise. That means both `BitcoinNetwork.TESTNET` and `BitcoinNetwork.TESTNET4` use Starknet Sepolia by default, while the BTC relay contract switches to the matching Bitcoin-network-specific deployment.

If you need a non-canonical deployment, pass explicit, `swapContract`, `spvVaultContract`, `btcRelayContract`, or handler contract overrides in the initializer options.

## SDK Example

Initialize the Atomiq SDK with Starknet network support:

```
import {StarknetInitializer} from "@atomiqlabs/chain-starknet";

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



// Define chains that you want to support here

const chains = [StarknetInitializer] as const;

type SupportedChains = typeof chains;



const Factory = new SwapperFactory<SupportedChains>(chains);



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

  chains: {

    STARKNET: {

      rpcUrl: starknetRpc,

      wsUrl: starknetWs // Optional, but recommended for realtime event subscriptions

    }

  },

  bitcoinNetwork: BitcoinNetwork.MAINNET // or BitcoinNetwork.TESTNET / BitcoinNetwork.TESTNET4

});
```

If you use the lower-level initializer directly, you can also override the default Starknet chain ID and canonical contract addresses independently when you need custom deployments.

## BTC Relay

* [StarknetBtcHeader](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetBtcHeader.md)
* [StarknetBtcRelay](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetBtcRelay.md)
* [StarknetBtcStoredHeader](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetBtcStoredHeader.md)

## Chain Interface

* [initializeStarknet](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/functions/initializeStarknet.md)
* [isStarknetTxDeployAccount](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/functions/isStarknetTxDeployAccount.md)
* [isStarknetTxInvoke](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/functions/isStarknetTxInvoke.md)
* [SignedStarknetTx](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/SignedStarknetTx.md)
* [StarknetAssetsType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetAssetsType.md)
* [StarknetChainInterface](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetChainInterface.md)
* [StarknetChainType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetChainType.md)
* [StarknetConfig](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetConfig.md)
* [StarknetFeeRate](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetFeeRate.md)
* [StarknetFees](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetFees.md)
* [StarknetGas](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetGas.md)
* [StarknetInitializer](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/variables/StarknetInitializer.md)
* [StarknetInitializerType](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetInitializerType.md)
* [StarknetOptions](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetOptions.md)
* [StarknetTx](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTx.md)
* [StarknetTxDeployAccount](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTxDeployAccount.md)
* [StarknetTxInvoke](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetTxInvoke.md)

## Events

* [StarknetChainEventsBrowser](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetChainEventsBrowser.md)
* [StarknetEventListenerState](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetEventListenerState.md)

## Providers

* [RpcProviderWithRetries](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/RpcProviderWithRetries.md)
* [WebSocketChannelWithRetries](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/WebSocketChannelWithRetries.md)

## Swaps

* [StarknetSpvVaultContract](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSpvVaultContract.md)
* [StarknetSpvVaultData](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSpvVaultData.md)
* [StarknetSpvWithdrawalData](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSpvWithdrawalData.md)
* [StarknetSuccessAction](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/type-aliases/StarknetSuccessAction.md)
* [StarknetSwapContract](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSwapContract.md)
* [StarknetSwapData](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSwapData.md)

## Wallets

* [StarknetBrowserSigner](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetBrowserSigner.md)
* [StarknetKeypairWallet](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetKeypairWallet.md)
* [StarknetSigner](https://docs.atomiq.exchange/sdk-reference/api/atomiq-chain-starknet/src/classes/StarknetSigner.md)
