H160 Precompile Gateway: Standardized EVM Access for Polkadot DApps

Hi Polkadot community,

I would like to highlight the need to standardize the use of Ethereum-style H160 addresses and the adoption of EVM standards for dApp development on Polkadot. The ecosystem already includes functioning EVM and PVM runtimes; this effort focuses on aligning dApp development with industry standards, while keeping Substrate as a low-level layer for parachain and system developers.

The goal is to reduce operational costs and complexity for developers by providing a standardized interface compatible with existing Ethereum tooling (wallets, ethers.js, viem), while keeping Substrate accessible as a low-level layer for parachain and system developers.

Key highlights:

1- H160 Address Standard Compliance
Ethereum-style H160 addresses standardized for accounts and “virtual contract” endpoints.
H160 is used strictly for identity and routing, not for executing EVM bytecode.
Ensures seamless integration with wallets and Ethereum tooling (MetaMask, WalletConnect, ethers.js, viem), fully aligning with industry standards.

2- Precompile Gateway for Standardized ABI Dispatch
A runtime precompile dispatches Ethereum-formatted transactions from the adapter to native Substrate pallets.
Responsibilities:
Verify EIP-155 signatures
Map H160 → Substrate AccountId32
Decode calldata and route to the correct pallet
Supports standard ABI calls for transfers, assets, governance, and other operations without requiring developers to understand Substrate internals.

3- Efficiency & Developer Experience
No unnecessary EVM execution → drastically reduces operational costs, gas overhead, and runtime complexity
Frontend devs see a clean Ethereum-compatible interface, while Substrate remains fully available for parachain/system developers
Simplifies dApp development, improves safety, and accelerates time-to-market.

4- Benefits
Plug-and-play developer UX for dApps
Security-first: avoids common EVM risks (reentrancy, gas griefing, storage collisions)
Industry standard compliance: consistent H160 and ABI interface
Clear separation of layers: dApp developers use the adapter gateway; Substrate remains for advanced system development

This development will be carried out exclusively by Parity Technologies and the Fellowship, ensuring consistency, security, and maintainability across the ecosystem.


Appendix 1

Example for Governance:

interface Governance {
function vote(uint256 referendumId, bool support) external;
}

support = true for “yes”, false for “no”

This is exactly what a developer would see from the EVM perspective
Completely hides Substrate / pallet complexity

What happens internally:
1- Gateway receives the transaction from MetaMask / ethers.js

2-Verifies the EVM signature (secp256k1) → obtains H160 sender

3-Maps H160 → Substrate AccountId

4-Decodes ABI data (referendumId, support)

5- Constructs the corresponding Substrate pallet call:

pallet_conviction_voting::Call::vote { referendumId, aye: support }

6- Dispatches the call in the runtime with Signed(origin)

Developer only sees vote(referendumId, support) — completely unaware of Substrate internals.


Appendix 2

Example: Accessing Virtual Contracts via Ethers.js

Developers interact with virtual contracts exactly like standard EVM contracts.

1. Contract address (H160)

const GOVERNANCE_CONTRACT_ADDRESS = "0x0000000000000000000000000000000000000801";

2. Standard ABI (generated from Solidity interface)

const governanceAbi = [
  "function vote(uint256 referendumId, bool support) external"
];

3. Create a contract instance

import { ethers } from "ethers";

const provider = new ethers.BrowserProvider(window.ethereum);
const signer = await provider.getSigner();

const governance = new ethers.Contract(
  GOVERNANCE_CONTRACT_ADDRESS,
  governanceAbi,
  signer
);

4. Call the method

// Vote YES on referendum 42
await governance.vote(42, true);

What the developer sees:

“I am calling a standard EVM contract.”

Under the hood:

  1. The transaction goes through eth_sendTransaction / eth_call

  2. The virtual contract address is recognized by the gateway/precompile

  3. Calldata is decoded according to the ABI

  4. EVM signature (H160) is verified and mapped to Substrate AccountId

  5. The corresponding Substrate pallet call is constructed

  6. The call is dispatched in the runtime

Key point:

From the developer’s perspective, virtual contracts are indistinguishable from regular EVM contracts, while the runtime handles all Substrate-specific type conversions.

2 Likes

Thanks for sharing this. I’m trying to understand the status and scope of what’s being proposed here.

In the post you write:

Is this meant as an announcement of an already-approved initiative, or is it a proposal intended to gather feedback? If it’s the former, could you point to the relevant governance/Fellowship context (e.g., an RFC, motion, minutes, or prior discussion) that establishes the mandate and decision path?

Also, could you clarify your role/affiliation (Parity / Fellowship / other) and in what capacity you’re presenting this? The wording reads quite definitive, so understanding who is speaking and with what mandate would help frame feedback appropriately.

Finally: are you explicitly looking for technical review and tradeoff analysis at this stage? If yes, I’m happy to provide detailed feedback, but I want to confirm the decision is still open and that there’s a clear channel for incorporating community input.

One more thing for transparency: this account appears relatively new and doesn’t have much public context behind it. Would you be comfortable sharing who you are (at least at the level of “real name / team / org” or a verifiable link to your work), so people can have a better understanding about where this proposal is coming from?

It's a proposal in the forum like any other.

I must insist: who are you?

I prefer to remain anonymous. The proposal should be evaluated based on its technical merit, not on the identity of the contributor. This is in line with the forum’s guidelines.

I’m happy to provide clarifications about the proposal itself, but I do not wish to disclose personal details.

And I think that if you insist, you’re crossing the line of what’s allowed on the forum.

For what it’s worth (from a semi-anon account, though you could find my real info via my failed W3F grant), ultracoconut has been active on X for a year and a half showcasing his work. He mainly focuses on customer-facing dApps, and from what I’ve observed, his output matches his persona of moving from hardware into web dev. So, if you’re worried he’s just another bot, he is not. Whether the time spent here is worth it, I can’t say, but he does seem earnest every time we have talked.