> ## Documentation Index
> Fetch the complete documentation index at: https://seilabs-docs-evm-cookbook.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Sei Pointer Contracts: Bridging EVM and Cosmos Environments

> Understand how Sei's pointer contract system enables seamless asset movement between EVM and Cosmos environments, with implementation patterns for various token types.

<Warning>
  **Pointer contracts are primarily a legacy and migration tool.** Per [Proposal 115](https://seistream.app/proposals/115), no new CosmWasm contracts can be uploaded or instantiated on Sei. Because of this, the pointer flow from CW20, CW721, and CW1155 to ERC20, ERC721, and ERC1155 applies only to already-deployed CosmWasm contracts.

  Do not use native-denom pointers to build IBC or tokenfactory integrations. IBC is disabled in both directions, and tokenfactory is not a supported development path. Existing IBC balances may remain accessible through their pointers, but a pointer does not restore the route to the origin chain. For new tokens or NFTs, deploy ERC20, ERC721, or ERC1155 contracts directly on the EVM.
</Warning>

Pointer contracts let tokens work in both the EVM and Cosmos environments. A
pointer is intended to be efficient and quick to deploy. It is an interpreter
between the "languages" of the two execution environments.

## Why pointer contracts

<img src="https://mintcdn.com/seilabs-docs-evm-cookbook/IhEyu7GQ2MVOnsHK/assets/pointer-contracts-without.png?fit=max&auto=format&n=IhEyu7GQ2MVOnsHK&q=85&s=922de6c4858284c31557661d36f63878" alt="Without Pointer Contracts" width="2800" height="1340" data-path="assets/pointer-contracts-without.png" />

*A world without pointer contracts*

Wallets and clients for feature-rich protocols typically support only one
execution environment. EVM wallets handle ERC-20 coins and ERC-721 NFTs. They
cannot interact with Cosmos-SDK-based assets, because the token standards and
interaction methods are different. Clients built for other protocols, such as
Cosmos and its various SDK modules, have the same problem. They cannot directly
interact with Ethereum-based contracts or ERC tokens.

Pointer contracts solve this problem. They make either protocol interoperable,
regardless of the client interface.

<img src="https://mintcdn.com/seilabs-docs-evm-cookbook/IhEyu7GQ2MVOnsHK/assets/pointer-contracts-simplified.png?fit=max&auto=format&n=IhEyu7GQ2MVOnsHK&q=85&s=04493dc6d07539a54eeb923d5adfeb4f" alt="With Pointer Contracts" width="1752" height="704" data-path="assets/pointer-contracts-simplified.png" />

*With pointer contracts, wallets in either environment can access all tokens*

## How pointer contracts work

<img src="https://mintcdn.com/seilabs-docs-evm-cookbook/IhEyu7GQ2MVOnsHK/assets/pointer-contracts-how-it-works.png?fit=max&auto=format&n=IhEyu7GQ2MVOnsHK&q=85&s=11a8b856dab8f9928820c91c20b532f0" alt="How Pointer Contracts Work" width="1746" height="1026" data-path="assets/pointer-contracts-how-it-works.png" />

*Pointer contracts enable interoperability*

Each smart contract can have only **one** associated pointer contract. The
pointer contract must be registered on chain when it is deployed. This prevents
conflicts and gives a reference point to verify that the paired contract is
authentic.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.