DIP-2

Abstract

To facilitate Ethereum integration, Substrate-based chains are transitioning to H160 account addresses, using ECDSA for signatures. This change streamlines the user experience by consolidating address types and wallets.

Rationale

Ethereum-like and Substrate-based chains differ significantly in their account format.

Ethereum uses H160 for its account addresses, while Substrate opts for H256.

With the EVM being a superior feature, more Substrate-based chains are incorporating it into their systems to tap into Ethereum’s ecosystem Darwinia is doing the same.

However, this creates an issue where users and developers must juggle two distinct address types and wallets.

To avoid this disconnect, we’ve decided to adopt H160 as the native account address type for Substrate.

With this improvement, users only need to interact with one type of account and wallet.

Specification

Utilize ECDSA as the signature algorithm for Substrate native runtime.

/// Alias to 512-bit hash when used in the context of a transaction signature on the chain.
pub type Signature = fp_account::EthereumSignature;

/// Some way of identifying an account on the chain.
/// We intentionally make it equivalent to the public key of our transaction signing scheme.
pub type AccountId = <<Signature as sp_runtime::traits::Verify>::Signer as sp_runtime::traits::IdentifyAccount>::AccountId;

The address is 20 bytes long, and the public key no longer has a corresponding SS58 address.

All pallet addresses have been truncated to 20 bytes; simply remove the trailing zeros, which are 12 bytes long.