EVM interface Michelson interface Native atomic composability

Build on
Tezos X

Public testnet for Tezos X — the execution layer where the EVM and Michelson interfaces share a single chain, secured by Tezos L1. Deploy on Tezos X with the toolstack you already know — Solidity or Michelson — and have your contracts compose atomically with any other contract — EVM or Michelson — in a single transaction.

This dashboard is under active development — services and links may change without notice.

New here? Try a tutorial Found a bug? Tell us in the Tezos X Discord channel
EVM chain ID
Michelson chain ID
Block
Node

What's new

Latest updates

Recent events on Previewnet, ordered by date — most recent first. Kernel upgrades roll out through the on-chain governance contract.

June 3, 2026 — 09:00 UTC v0.6 Kernel upgrade — cross-runtime tx.origin fixed, new gateway address views, and broad Michelson/L1 parity

Security

  • tx.origin now resolves to the real originator across runtimes. On a cross-interface call, the EVM ORIGIN opcode returns the transaction originator while msg.sender still returns the immediate caller. Previously both returned the immediate caller, so the common EOA-only guard require(tx.origin == msg.sender) could be silently bypassed by routing a call through the Michelson interface. The originator is also preserved across an EVM → Michelson → EVM round-trip — it resolves back to the originating account instead of collapsing onto an internal alias. Direct EOA calls are unchanged (tx.origin == msg.sender as before).

New

  • Contracts can now resolve cross-runtime address identity on-chain, through two read-only selectors on the runtime-gateway precompile (0xff…07) — both non-payable, log-free, and STATICCALL-safe, so they're callable from a view. originOf(addr, sourceRuntime) classifies an address as Native (a real account on that runtime), Alias (a forwarder standing in for a foreign caller), or Unknown — so a security gate or admin check can reject a foreign account's alias where it expects a genuine local account, the natural complement to the tx.origin fix above. A code-presence back-stop also recognizes CREATE/CREATE2 contracts and EIP-7702 delegated EOAs as Native. resolveAddress(addr, sourceRuntime, targetRuntime) returns the same identity's address on the other runtime and reports whether that counterpart is already materialized (its account exists) or still only derived (computable but not yet created) — letting a dApp route a cross-runtime payment or call to the correct address and, when needed, materialize the account first via a native atomic call rather than sending value to an address with no account behind it yet.
  • A Michelson contract's synthetic cross-interface views are now discoverable through standard contract introspection. The enshrined gateway's staticcall_evm view is surfaced on the synthesized /script, so wallets, indexers, and block explorers find it the same way they find any declared Tezos view.
  • Aliases originated as part of a native atomic call now emit dedicated receipts, so indexers can attribute the new account to the call that created it.

Improvements

  • The monitor/heads/main RPC now honors the protocol and next_protocol filters and emits the current head immediately as the first element of the stream, matching L1's monitor_heads. Wait-for-head flows no longer block until the next block, and filtered clients no longer receive heads they excluded.
  • Michelson/L1 parity: the same Michelson source now behaves identically on L1 and the Michelson interface. PUSH timestamp parses large decimal literals and RFC3339 leap-seconds like L1; UNPACK string rejects carriage returns and other non-permitted bytes; UNPACK rejects non-canonical zarith encodings; LSR bytes handles oversized shift counts without trapping; and big-map ids allocated during CREATE_CONTRACT are assigned in storage source order, like externally originated contracts.
  • Same-runtime gateway round-trips no longer launder the caller's identity: when source and target runtimes match and the caller is a native account, the callee now sees the real msg.sender / SENDER instead of a re-derived alias — so msg.sender-based access controls (require(msg.sender == owner) and the like) stay correct even when a call is routed through the gateway within one runtime.

Fixes

  • Alias materialization is now atomic. If forwarder initialization fails (revert, halt, or a gas budget below the intrinsic cost), the delegation code_hash write is rolled back. A failed init previously left a half-materialized account that a later call would bless without re-running initialization — permanently bricking the alias.
  • Cross-runtime calls now enforce a maximum chain depth (≤ 128). A self-recursive Michelson↔EVM gateway cycle that previously wedged sequencer block production now fails cleanly at the operation level (catchable revert) once the cap is reached, leaving the block intact.
  • Several conditions that could previously abort a whole block now surface as catchable, operation-level errors instead: EVM pre-execution validation failures (e.g. a forwarded gas limit below the intrinsic cost) on the cross-runtime and static-call paths, an inbound Michelson X-Tezos-Sender that is an implicit tz1/tz2/tz3 account, and other user-triggerable errors.
  • A failed cross-runtime call now always records its receipt, even when the caller's leftover gas is too low to encode the call event — the kernel sponsors that encoding from a dedicated budget. Indexers and call-graph reconstruction no longer go blind on gas-tight failed calls, and a successful call can no longer be misreported as out-of-gas by this bookkeeping.
  • Deeply nested Michelson input is now bounded by gas instead of trapping the runtime: (de)serialization, typechecking, interpretation, and the related walks run iteratively rather than recursively, so adversarially deep input fails on gas rather than crashing.
  • Fixed transient big-maps allocated by a Michelson callee leaking into — and persisting in — durable storage on the inbound cross-runtime path, where they could collide with real durable big-maps.
May 21, 2026 — 13:00 UTC v0.5 Kernel upgrade — Michelson reads EVM state, and storage now costs tez like L1

Action required

  • Re-create your accounts after this upgrade. Addresses and their aliases created before this update may now misbehave. Generate fresh addresses — their new aliases will work correctly. If octez-client aliases you set up earlier are throwing errors, this is why.

New

  • Michelson code can now read EVM state synchronously — the mirror of the EVM→Michelson view added in v0.2. A VIEW reaching the cross-interface gateway returns the EVM response with no value transfer, so it works even inside Michelson view bodies, where TRANSFER_TOKENS is forbidden. The view takes (destination, calldata) and returns the EVM response wrapped in Some on success.
  • Cross-interface reads now enforce a real static-call contract: the read entry rejects any attached value and refuses any state change. Attempting to write storage, emit a log, deploy, self-destruct, or send value during a static read fails cleanly with a catchable error instead of corrupting the call.

Improvements

  • Michelson operations now pay storage burn like Tezos L1: originations, transfers that grow storage, and the first credit to a fresh implicit account each burn tez in proportion to the storage they use. An operation whose source can't cover the burn is cleanly backtracked with no partial state, matching L1 manager-operation semantics. Keep enough tez on your accounts to cover storage.

Fixes

  • Internal failures in the Michelson runtime now surface as structured errors instead of opaque aborts, making failed operations easier to diagnose.
May 13, 2026 — 12:00 UTC v0.4 Kernel upgrade — richer Michelson receipts for indexers and wallets

Improvements

  • Michelson manager-operation receipts now report real storage_size and paid_storage_size_diff. Originations, transfers and updates surface the contract's actual storage footprint instead of zeros, matching the receipt shape produced by Tezos L1.

New

  • Deposits targeting a Tezos implicit account (tz1…) now emit a Michelson deposit event of type pair (nat %inbox_level) (nat %inbox_msg_id) on the operation receipt. Indexers can correlate the L2 credit with the exact shared-inbox message that triggered it.
  • Deposits to a Tezos implicit account also emit balance updates on the receipt, so TzKT and Tezos wallets attribute the credit to the right account without inferring it from context.
May 7, 2026 — 11:00 UTC Michelson interface incident — resolved

Incident

  • Following the May 6 upgrade, all smart contracts previously deployed on Tezos X Previewnet through the Michelson interface have been lost. If you deployed a dApp before block 17,555, you will need to redeploy it. We apologize for the inconvenience.
  • The Michelson RPC and TzKT are back to nominal. Redeployments are unblocked.
  • The chain kept producing blocks throughout. The EVM interface was unaffected — no impact on Solidity contracts, no balances or state lost on the EVM side.
May 6, 2026 — 16:00 UTC Investigating: bug on the Michelson interface

Incident

  • An issue has surfaced on the Michelson interface following this morning's kernel upgrade. Michelson contract calls and queries are returning unexpected results. The chain is still producing blocks normally and the EVM interface is unaffected. Team is investigating, updates will follow.
May 6, 2026 — 10:42 UTC v0.3 Kernel upgrade — smoother cross-runtime calls and cleaner indexer data

Improvements

  • Michelson operations can now consume up to 3,000,000 gas units (matching the EVM 30M-gas budget). EVM transactions reaching the Michelson interface with plenty of gas left no longer hit a misleading out-of-gas error.

Fixes

  • Events emitted during cross-interface calls — both EVM logs and Michelson EMIT events — now reliably appear on transaction receipts. Block explorers, indexers and on-chain analytics tools see a complete picture of what happened.
  • Receipts of transactions that mix successful and failed cross-interface calls now match the call order and the semantics already used by Tezos L1 manager operations.
  • The internal address used to attribute cross-interface calls (0x7e205800…01) no longer shows a fake huge balance on Blockscout.
April 29, 2026 v0.2 EVM contracts can now read Michelson state

New

  • EVM contracts can call Michelson views through the cross-interface gateway — read state from a Michelson contract during an EVM call, with no value transfer and no log emission. Compatible with Solidity's staticcall pattern.

Fixes

  • Unused gas is now correctly refunded when a precompile reverts — previously the full gas limit could be charged.
  • When a transaction interleaves successful and failed cross-interface calls, internal operations are now ordered by execution and the top-level result reconciles consistently with the internals.
April 24, 2026 v0.1 First consolidated release of Tezos X

New

  • The Michelson interface goes live on top of Etherlink. Tezos-native applications can be deployed alongside the existing EVM ecosystem.
  • Two gateways enable native atomic composability: an EVM contract and a Michelson contract can interact within a single transaction, with shared atomic semantics.
  • The kernel processes Tezos operations sequenced in incoming blueprints and produces Tezos blocks visible to Michelson explorers and wallets.

Full technical changelog: CHANGES_TEZOSX.md ↗


Get connected

Add the network to your wallet

MetaMask for the EVM interface, Temple or octez-client for the Michelson interface. Each account holds two addresses — 0x… for EVM and tz1… for Michelson — on the same chain, with separate balances.

🦊
MetaMask
EVM interface · Solidity contracts
One-click setup via wallet_addEthereumChain. No MetaMask? Install it ↗

Or add manually

Network name Tezos X Previewnet
RPC URL evm.previewnet.tezosx.nomadic-labs.com
Chain ID
Currency symbol XTZ
Block explorer blockscout.previewnet.tezosx.nomadic-labs.com
🏛
Michelson wallets
Temple, Kukai, Umami, octez-client — any Tezos-compatible wallet
RPC endpoint michelson.previewnet.tezosx.nomadic-labs.com
Michelson chain ID
Block explorer tzkt.previewnet.tezosx.nomadic-labs.com
octez-client \ --endpoint https://michelson.previewnet.tezosx.nomadic-labs.com \ config update

Get started

Fund your wallet

Get testnet XTZ before anything else — works for both interfaces.

Faucet

Fund any address — MetaMask (0x…) or Temple (tz1…) — with testnet XTZ in seconds. No registration, no rate limit.

Get testnet XTZ  ↗

Move funds

Bridge & withdraw

Deposit from Tezos L1 to the Previewnet, or withdraw back — same UI for both directions.

Bridge

Move XTZ between Tezos L1 and the Tezos X Previewnet. Supports both deposit and withdraw flows through a single interface.

Open bridge  ↗

Explore the chain

Inspect what's on-chain

A dedicated explorer per interface — plus a unified view that follows atomic cross-interface calls across both.

EVM
Blockscout

Inspect EVM transactions, deployed contracts, token transfers, and contract verification on the Previewnet.

Michelson
TzKT

Query Michelson contracts, operations, and on-chain storage via the TzKT indexer and REST API.

Composability Experimental
Cross-interface explorer

Follow an atomic call end-to-end — across the EVM and Michelson interfaces — in a single timeline. Bridges Blockscout and TzKT data.


What you can build

Live demos on Previewnet

Hosted, working applications showcasing what native atomic composability unlocks.

Composability
Potluck

A native atomic composability demo, dressed up as a small game. Every button press is a single transaction that atomically touches both the EVM and Michelson interfaces in the same block — the game is just the wrapper that makes the mechanic tangible.

Demonstrates Native atomic composability: an EVM contract calls a Michelson contract atomically, with no intermediate steps or trusted relayers.
Composability
Cross-interface counter

Live working version of the application built in our cross-interface counter tutorial. Click to play with it; follow the tutorial below to deploy your own.

Demonstrates EVM Solidity forwarder calling a Michelson contract through the gateway — increment, decrement, atomic revert when Michelson rejects the call.

Tools

Tools for builders

Libraries, services, and integrations to write, deploy, and use Tezos X.

Coming soon
tx-codec

Optimized Solidity library for encoding and decoding Michelson values from EVM contracts, backed by formal verification.

Composability EVM Michelson
Tezos X Wallet

A wallet built for Tezos X — one account, both interfaces. Drives any EVM dApp directly through the cross-interface gateway via window.ethereum / EIP-6963, so dApps see your Tezos account natively without an extra EVM key.

Already use Temple, Kukai, or MetaMask? Keep them — this is an alternative for users who want a single integrated app instead of two wallets side by side.

EVM
xDex

IguanaDEX fork running on the Previewnet — swap, provide liquidity, create pools and tokens. Useful for liquidity and integration tests against EVM contracts.


Documentation
Developer docs
Concepts, operations, and full API references for the EVM and Michelson interfaces.
Documentation
Tutorials
Step-by-step walkthroughs — start with a Native Atomic Composability counter that spans the EVM and Michelson interfaces in a single transaction.

Background reading: Tezos X — From Roadmap to Reality ↗

Questions or feedback? Reach the team in the Tezos X channel on discord.gg/tezos ↗.


Network

All endpoints

Raw RPC and infrastructure endpoints for direct integration. Canonical reference (chain IDs, rollup address, kernel config): github.com/trilitech/tezos-x-previewnet ↗.

EVM RPC https://evm.previewnet.tezosx.nomadic-labs.com
Michelson RPC https://michelson.previewnet.tezosx.nomadic-labs.com
Rollup address
EVM node version