Address: 0x0000000000000000000000000000000000001002
Deprecation Notice — Prop 115 & Prop 116Per governance Proposal 115, CosmWasm code uploads (MsgStoreCode) and contract instantiations (MsgInstantiateContract) are disabled chain-wide. The instantiate() function on this precompile will revert for all callers. Only execute(), execute_batch(), and query() against pre-existing CosmWasm contracts remain functional, and all CosmWasm functionality is deprecated in favor of EVM-only per SIP-3.In addition, IBC is disabled in both directions: Proposals 116 and 120 disabled inbound IBC, and Proposal 121 disabled outbound IBC on July 31, 2026. No asset can be bridged into or out of Sei over IBC. See the SIP-03 Migration Guide for the full explanation and the list of affected assets.For new smart contract development, use the EVM directly. See Deploy a Smart Contract.
The Sei CosmWasm precompile allows EVM applications to interact directly with pre-existing CosmWasm contracts through standard smart contract calls. This enables execution, batch operations, and querying of CosmWasm contracts directly from your dApps without needing separate Cosmos SDK integration.
What is a precompile? A precompile is a special smart contract deployed at a fixed address by the Sei protocol itself, that exposes custom native chain logic to EVM-based applications. It acts like a regular contract from the EVM’s perspective, but executes privileged, low-level logic efficiently.
How Does the CosmWasm Precompile Work?
The CosmWasm precompile at address 0x0000000000000000000000000000000000001002 exposes functions like execute(), execute_batch(), and query().
- Direct Integration: EVM contracts and dApps can call CosmWasm functions like any other smart contract method.
- Native Execution: Operations are executed at the Cosmos SDK level for maximum efficiency and security.
- Seamless Bridge: No need for separate wallet integrations or complex cross-chain interactions.
What You’ll Learn in This Guide
By the end of this guide, you’ll be able to:
- Execute Contract Functions - Call CosmWasm contract methods and handle message formatting
- Batch Operations - Execute multiple contract calls efficiently in a single transaction
- Query Contract State - Read CosmWasm contract data without gas costs
- Handle Cross-Runtime Data - Master message encoding/decoding between EVM and CosmWasm formats
Functions
The CosmWasm precompile exposes the following functions:
Transaction Functions
The
instantiate() function has been disabled by
Prop 115 and will revert. It is omitted from this reference. The ABI in
@sei-js/precompiles may still expose it for backwards compatibility, but calling it on-chain will fail.
Query Functions
Using the Precompile
Setup
Prerequisites
Before getting started, ensure you have:
- Node.js (v18 or higher)
- npm or yarn package manager
- EVM-compatible wallet
- SEI tokens for gas and contract operations
Install Dependencies
Install the required packages for interacting with Sei precompiles:
Import Precompile Components
Precompile Address: The CosmWasm precompile is deployed at 0x0000000000000000000000000000000000001002
Contract Initialization
Set up your provider, signer, and contract instance:
One of the most important concepts to understand when working with the Sei CosmWasm precompile:
CosmWasm Message Structure
The CosmWasm precompile requires JSON-encoded messages that conform to each contract’s specific schema:
How Message Encoding Works
All CosmWasm functions require JSON-encoded byte arrays:
execute() - accepts execution message as JSON bytes
query() - accepts query message as JSON bytes
Native Token Handling:
- Use
msg.value for SEI amounts
- Use
coins parameter for other denominations (encoded as JSON bytes)
Best Practice: Message Encoding Helpers
When working with CosmWasm messages, use proper JSON encoding:
Use these helper functions to handle CosmWasm message formatting:
Step-by-Step Guide: Using the CosmWasm Precompile
Execute a CosmWasm Contract
Execute Batch Operations
Query a CosmWasm Contract
Query Limitations: CosmWasm queries are read-only operations and don’t consume gas, but parsing JSON responses in Solidity is complex. Consider handling response parsing off-chain.
Advanced Usage Examples
Cross-Runtime DeFi Integration
Complete Integration Example
Contract Example Note: This contract acts as a bridge between EVM and existing CosmWasm contracts. Message encoding/decoding should be handled client-side for complex operations.
Client Integration Example
Troubleshooting
Common Issues and Solutions
Message Encoding Issues
Error Code Reference
Important Notes
Remember the key rule: All CosmWasm messages must be properly JSON-encoded as bytes, and contract schemas vary by implementation!
- JSON Encoding: All messages must be valid JSON encoded as UTF-8 bytes, invalid JSON will cause transaction failures
- Schema Compliance: Messages must match the contract’s expected format
- Type Safety: Use proper data types as expected by the contract
- Use valid Sei contract addresses with
sei1... prefix
- These are Cosmos-format addresses, not EVM addresses
- Contract Existence: Verify contracts exist before calling
Cross-Runtime Considerations
- State Isolation: CosmWasm and EVM contracts have separate state
- Gas Estimation: CosmWasm operations may require different gas calculations
- Error Handling: Failed CosmWasm operations revert the entire EVM transaction
- Native Token Handling: Use
msg.value for SEI, coins for other denominations
- Batch Limitations: Large batches may hit gas limits
Best Practices
- Always validate JSON messages before sending
- Handle response parsing carefully, especially for complex data structures
- Use batch operations for multiple related calls to save gas
- Query contracts before executing to verify state when possible
View the CosmWasm precompile source code and the contract ABI
here.