Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ethereum purpose allocation and path scheme for deterministic wallets #600

Merged
merged 7 commits into from
Mar 18, 2019

Conversation

Arachnid
Copy link
Contributor

@Arachnid Arachnid commented Apr 14, 2017

This EIP defines a logical hierarchy for deterministic wallets based on BIP32 and the purpose scheme defined in BIP43.

This EIP is a particular application of BIP43.

The existing convention is to use the 'Ethereum' coin type, leading to paths starting with `m/44'/60'/*`. Because this still assumes a UTXO-based coin, we contend that this is a poor fit, resulting in standardisation, usability, and security compromises. As a result, we are making the above proposal to define an entirely new hierarchy for Ethereum-based chains.

## Backwards Compatibility
The introduction of another derivation path requires existing software to add support for this scheme in addition to any existing schemes. Given the already confused nature of wallet derivation paths in Ethereum, we anticipate this will cause relatively little additional disruption, and has the potential to improve matters significantly in the long run.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given the already confused nature of wallet derivation paths in Ethereum, we anticipate this will cause relatively little additional disruption

This sentence does not exactly instill me with a sense of tranquility, it more reminds me how many very difficult UX problems we still have to solve.

That said, I agree, we've already "bought in" to this confusing paradigm, and isolating accounts per-purpose is a standard evolution that we've been looking forward to for a long time.

These changes are modest, and I think easily agreeable to any client developers currently supporting the BIP39 standards.

@Arachnid
Copy link
Contributor Author

My discussions on the Bitcoin mailing list have resulted in this PR: bitcoin/bips#523

Short version: Ethereum would be m/43'/60'/<eip number>'/.... If there's no objections, I'll update this EIP and #601.

@iam-peekay
Copy link

@Arachnid what is the difference between #600 and #601?

@MicahZoltu
Copy link
Contributor

@iam-peekay #600 defines a framework upon which to extend BIP32 derivation paths in a way that is more-or-less compatible with BIP43 derivation paths. #601 is the first (and so far only) proposed implementation that leverages that new framework.

This is akin to BIP32 that defines how derivation paths work (we still use that), BIP43 which defines how people spec derivation paths (similar to EIP600) and BIP 44 which is an application of BIP43 (just as EIP601 is an application of EIP600).

@iam-peekay
Copy link

@MicahZoltu thank you! that's helpful.

Just so I completely understand, I'm currently architecting the key management for an application I'm building, and I'm looking at following the spec defined in #602. But I assume for now I'll have to either stick with NPM modules ethereumjs-wallet/hdkey and bip39 to handle seed phrases and HD keys or write my own eip602 NPM module to handle seed phrases and HD keys?

Sorry if it's a noob question!

@MicahZoltu
Copy link
Contributor

I believe all 3 of these specs are BIP32 compatible and I think they are all BIP43 compatible. If you can find a library that speaks those then these should work. That being said, I don't think anyone has written a JS library specifically against this proposal (or the other two) yet.

@iam-peekay
Copy link

Thanks @MicahZoltu. Agreed.
Appreciate the clarification!

@Arachnid
Copy link
Contributor Author

This is a courtesy notice to let you know that the format for EIPs has been modified slightly. If you want your draft merged, you will need to make some small changes to how your EIP is formatted:

  • Frontmatter is now contained between lines with only a triple dash ('---')
  • Headers in the frontmatter are now lowercase.

If your PR is editing an existing EIP rather than creating a new one, this has already been done for you, and you need only rebase your PR.

In addition, a continuous build has been setup, which will check your PR against the rules for EIP formatting automatically once you update your PR. This build ensures all required headers are present, as well as performing a number of other checks.

Please rebase your PR against the latest master, and edit your PR to use the above format for frontmatter. For convenience, here's a sample header you can copy and adapt:

---
eip: <num>
title: <title>
author: <author>
type: [Standards Track|Informational|Meta]
category: [Core|Networking|Interface|ERC] (for type: Standards Track only)
status: Draft
created: <date>
---

@MicahZoltu
Copy link
Contributor

@Arachnid I propose we move this to Last Call (after you clean it up per your above comment). Discussion has died down on it and I think there is value in actually getting this finalized.

eip-600.md Outdated
category: ERC
status: Draft
created: 2017-04-13
replaces: 84
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs discussion link. I recommend Ethereum Magicians.

eip-600.md Outdated
---
eip: 600
title: Ethereum purpose allocation for Deterministic Wallets
author: Nick Johnson <nick@ethereum.org>, Micah Zoltu
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub handle is MicahZoltu

@joeykrug
Copy link

Why hasn't this been merged for discussion?

@MicahZoltu
Copy link
Contributor

Because I can't convince @Arachnid to add a discussion-url. :P

eip-600.md Outdated
status: Draft
discussions-to: https://ethereum-magicians.org/t/eip-erc-app-keys-application-specific-wallet-accounts/2742
created: 2017-04-13
replaces: 84
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no EIP 84

Hardened derivation is used at this level.

### Subpurpose
Subpurpose is set to 60, the SLIP-44 code for Ethereum.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is the reference to SLIP-44?

@nicksavers nicksavers merged commit 3d4dc87 into ethereum:master Mar 18, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants