I can provide a little bit of background here.
What I call âlegacy account idâ is the type of account identifier that has been used by the ICP ledger since the beginning. It looks like this 4d986d218bf8eb0473e002caf8b6de660e2ce580834190c71bfc6d7f5e82b78d
. It is the hash of the principal who controls it plus a subaccount identifier. The differences to an Ethereum address are:
- Ethereum addresses come from public keys without any subaccounts, so Ethereum addresses are more like principals than they are like legacy account ids
- Ethereum addresses are 20 bytes while legacy account ids are 32 bytes
A risk with these account identifiers is that you may lose access to your funds if you forget the subaccount that you used to create it. This is not a problem for short subaccount ids like 1,2,3,⌠but is for long subaccount ids. For example the account id 4d986d218bf8eb0473e002caf8b6de660e2ce580834190c71bfc6d7f5e82b78d
was created from principal h5boe-vqaaa-aaaam-ac36q-cai
and subaccount id 6867bf53ffcaa0cd11f3bb59be8e4d9e71b20d096cc822a5dffecc7561b026ce
. If you somehow forget the value 6867bf53ffcaa0cd11f3bb59be8e4d9e71b20d096cc822a5dffecc7561b026ce
, even if you still have control of the principal h5boe-vqaaa-aaaam-ac36q-cai
then you canât acces the funds on 4d986d218bf8eb0473e002caf8b6de660e2ce580834190c71bfc6d7f5e82b78d
anymore.
If Ethereum had subaccounts then I doubt they would hash the Ethereum address and the subaccount id together to produce something that looks again like an Ethereum address. They would probably just created an âextended Ethereum addressâ which is an Ethereum address plus a subaccount id.
What I call âICRC-1 account identifierâ is the one that looks like this h5boe-vqaaa-aaaam-ac36q-cai-ckw43vy.6867bf53ffcaa0cd11f3bb59be8e4d9e71b20d096cc822a5dffecc7561b026ce
. It contains a principal and a subaccount id. I think calling it âhuman readableâ is a little bit misleading. It is true that we can identify the two components principal and subaccount, but no other information can be read from it. Like the hypothetical âextended Etherum addressâ I would call it an âextended principalâ. The analogy is really principal â Ethereum address and not legacy account id â Ethereum address.
All tokens on the IC are ICRC-1 tokens and support sending to ICRC-1 accounts, including the ICP token. The ICP token supports both, legacy account ids and ICRC-1 accounts. The same ICRC-1 account id can be used across all tokens on the IC. With one ICRC-1 account id the user can handle all tokens. That is a property that you wanted.
The ICRC-1 account id for the default account is equal to the principal. So principals can be used directly to hold all tokens on the IC. So here is the analogy with Ethereum that you wanted: Ethereum address = principal = single identifier which can be used across all tokens on the IC.
The fact that a principal looks different than an Ethereum address (h5boe-vqaaa-aaaam-ac36q-cai
vs 20 bytes hex) should not have any impact on anything. Exchanges supoprt all kinds of tokens and certainly not all those tokensâ account identifiers have the same format as an Ethereum key.
Exchanges donât care about what an âaddressâ means. They care that there is a Rosetta node for the token. Currently, no token on the IC other than ICP is supported by centralized exchanges, or is it? But that doesnât have to be the fault of how the account identifiers look. The IC tokens other than ICP simply werenât interesting enough for the exchanges add. If a token had enough demand and provided a Rosetta node then they would probably support it regardless of how the account identifier looks.
The easiest path forward is probably to fix the holes that you have identified. If dashboard and NNS wallet donât support ICRC-1 account identifiers for ICP then that should be fixed.
It is unfortunate that ICP launched with a different identifier initially so now we have two kinds of identifiers for the ICP token. It is a source of confusion for sure.