From fda3096e650542ab886b74c191cd489f507a9881 Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Wed, 13 Dec 2023 22:31:00 +0800 Subject: [PATCH] DIP-2 (#9) --- DIPs/dip-2.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 DIPs/dip-2.md diff --git a/DIPs/dip-2.md b/DIPs/dip-2.md new file mode 100644 index 0000000..a0b6817 --- /dev/null +++ b/DIPs/dip-2.md @@ -0,0 +1,50 @@ +--- +dip: 2 +title: Seamless Account Integration Between EVM and Substrate +description: This proposal introduces the adoption of `H160` account addresses in Substrate-based chains to unify address formats with EVM, which aims to simplify user interactions and enhance compatibility with the Ethereum ecosystem. +authors: Darwinia Network (@AurevoirXavier, @boundless-forest, @hackfisher) +status: Final +type: Core +created: 2023-12-13 +--- + + +## 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. + +```rs +/// 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 = <::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. + + +## Copyright +Copyright and related rights waived via [CC0](../LICENSE).