DevelopersSeptember 14, 2026by
EmpoorioChain Core
EmpoorioChain Core

Moving from Ethereum to EmpoorioChain: A Migration Guide

What works unchanged

  • Solidity 0.8.x contracts deploy as-is through Frontier.
  • Hardhat, Foundry, Remix, viem, ethers, MetaMask — configure chain id 2026, RPC https://rpc.testnet.empooriochain.org, symbol DMS, explorer https://empooscan.com.
  • EIP-1559 fees; gas price 1 gwei (runtime 220).
  • Standard precompiles 0x010x09.
  • Verification on Sourcify (the public-sale contract is an exact match there).

What is different

One ledger, two address types. Every user has a native account (vx…, prefix 2026) and an EVM account (0x…) that map to the same funds. DMS in the EVM is the native balance, not a wrapped token. Your users may arrive from Eoonia with DMS they received natively; it is already spendable from MetaMask.

Finality is deterministic. Do not count confirmations. Treat a transaction as final when its block is GRANDPA-finalized (~17 s on the testnet). Show included and finalized separately if your UI shows status.

eth_getCode at latest returns 0x for deployed contracts on runtime 213. Confirm deployment by nonce and receipt.

Metadata and upgrades. The chain upgrades in place, frequently on the testnet. Ethereum tooling is unaffected (the EVM interface is stable), but if you also touch native pallets, refresh Substrate metadata after each upgrade.

Rate limits. ~10 requests/s per IP on the public nodes, one-hour ban. Run a node for indexing or CI.

No Wasm contracts. ink! is not available; Solidity is the contract language.

Precompiles that reach the runtime

  • 0xAA — request an inference from the Ailoos network with a verified result.
  • 0x72 — ERC-721 view of native NFT pallets.
  • 0x1155 — ERC-1155 view of native assets.

When to stop writing a contract

If your contract implements any of these, the runtime already does it and enforces it chain-wide:

You are writing…Use instead
Permit / signed approvalspallet-permit
Royalty logicpallet-nft-royalties (enforced on transfer)
Account abstraction, paymasterpallet-account-abstraction, pallet-paymaster
Vault shares (4626)pallet-yield-vault, pallet-tokenized-fund
Escrow, subscriptionspallet-escrow, pallet-subscription
Compliance / allow-listspallet-compliance, pallet-sanctions, pallet-identity-ssi
Flash loanspallet-flashloan
MEV protectionpallet-mev-protection

Call them from your frontend via Polkadot.js or the SDKs, keep the contract small, and reach native assets from Solidity through 0x72 / 0x1155. Both sides share one ledger.

Migration checklist

  1. Change chain id to 2026 everywhere (it is inside every signature).
  2. Replace confirmation counting with finality.
  3. Fix deployment scripts that read eth_getCode at latest.
  4. Decide, per contract, whether a pallet replaces it.
  5. Test on the testnet with test DMS (no public faucet yet — ask).
  6. Read RED.json for hosts; ignore any hostname not in it.

Based on 02_CORE_SYSTEMS/EVM_AND_L2.md, EIP_COVERAGE.md, RED.json and the runtime 211–220 notes.

Share this article