Skip to content
Snippets Groups Projects
Commit 4befca92 authored by Éloïs's avatar Éloïs
Browse files

[HD-WALLET] create RFC 0015_Dubp_HD_Wallet

parent 1a1adf15
Branches
Tags
No related merge requests found
# DUBP conventions for Hierarchical Deterministic Wallet
## Master seed generation
Master seed should be generated from a [Dubp-Mnemonic].
## Key derivation
Key derivation should use [BIP-Ed25519] specifications.
## Key derivation scheme
First derivation step should be an hardened derivation and represent an `account_id`.
`account_id` is an integer beetween `0` and `(2^24) - 1`.
There are 4 types of accounts :
| Account type | `account_id` value conditions |
|-|-|
| Member | `account_id == 0` |
| Transparent | `account_id != 0 && account_id % 3 == 0` |
| Semi-opaque | `account_id % 3 == 1` |
| Opaque | `account_id % 3 == 2` |
### Account types
Transparent: classic non-member wallet
Semi-opaque: A wallet that uses a single-use public key for each payment to itself (cash back and change transaction), but always uses the same public key for all payments received.
Opaque: A wallet using single-use public keys for each payment received and for each payment to oneself (cash back and change transaction).
### Semi-opaque account derivation scheme
The payment receipt keypair is obtained by derivation `0'` from the semi-opaque account keypair.
For self-payment, it is first necessary to derive the so-called "internal keypair", by derivation `1'` from the semi-opaque account keypair.
Then, each single-use public key is obtained by soft derivation of the "internal public key".
So, the ith payment to oneself is made on the `m/a'/1'/i` keypair, where `a` is the `account_id` of the semi-opaque account.
### Opaque account derivation scheme
For payments to oneself, the scheme is identical to the semi-opaque account scheme.
For external payments, it is first necessary to derive the so-called "external keypair", by derivation `0'` from the opaque account keypair.
Then, each single-use public key is obtained by soft derivation of the "external public key".
So, the ith outward payment is made on the `m/a'/0'/i` keypair, where `a` is the `account_id` of the opaque account.
[Dubp-Mnemonic]: https://git.duniter.org/documents/rfcs/blob/dubp-mnemonic/rfc/0014_Dubp_Mnemonic.md
[BIP-Ed25519]: https://drive.google.com/file/d/0ByMtMw2hul0EMFJuNnZORDR2NDA/view
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment