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, explorerhttps://empooscan.com. - EIP-1559 fees; gas price 1 gwei (runtime 220).
- Standard precompiles
0x01–0x09. - 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 approvals | pallet-permit |
| Royalty logic | pallet-nft-royalties (enforced on transfer) |
| Account abstraction, paymaster | pallet-account-abstraction, pallet-paymaster |
| Vault shares (4626) | pallet-yield-vault, pallet-tokenized-fund |
| Escrow, subscriptions | pallet-escrow, pallet-subscription |
| Compliance / allow-lists | pallet-compliance, pallet-sanctions, pallet-identity-ssi |
| Flash loans | pallet-flashloan |
| MEV protection | pallet-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
- Change chain id to 2026 everywhere (it is inside every signature).
- Replace confirmation counting with finality.
- Fix deployment scripts that read
eth_getCodeatlatest. - Decide, per contract, whether a pallet replaces it.
- Test on the testnet with test DMS (no public faucet yet — ask).
- Read
RED.jsonfor 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.


