Repository navigation
feat: HD wallet system, DashPay integration, SPV support, and more #464
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
Merged
Merged
Changes from 48 commits
Commits
Show all changes
142 commits
Select commit
Hold shift + click to select a range
aa05391
feat: dashpay
pauldelucia 6db2041
ok
pauldelucia 1eef611
ok
pauldelucia f5ac1a4
remove doc
pauldelucia ec65304
ok
pauldelucia 432285a
ok
pauldelucia 3e9ee11
database
pauldelucia 2012520
ok
pauldelucia fe5586f
fix: use proper BackendTaskSuccessResults rather than Message
pauldelucia 26155a6
fmt and clippy
pauldelucia 25df372
remove dashpay dip file
pauldelucia 05f73f5
logo and cleanup
pauldelucia 7907df5
fix top panel spacing
pauldelucia fc660b1
ui stuff
pauldelucia acac400
fmt
pauldelucia 42a858e
dip 14
pauldelucia 1d3060d
image fetching
pauldelucia 48c1df2
some fixes
pauldelucia be4078b
cleaning up
pauldelucia 5bef691
todos
pauldelucia bba90a4
feat: SPV phase 1 (#440)
pauldelucia 8723bf9
feat: spv progress bars and sync from genesis when wallets are loaded…
pauldelucia cc991a6
Merge branch 'v1.0-dev' into feat/dashpay
pauldelucia 32dd45c
fmt
pauldelucia a5e1188
update
pauldelucia 4999cb1
merge
QuantumExplorer 885a8eb
fixes
QuantumExplorer 7c8bfca
Merge branch 'v1.0-dev' into feat/dashpay
pauldelucia 4e96a59
fix: add sdk features
pauldelucia 75ff018
feat: add accounts and transactions to wallet screen
pauldelucia 7ef5f2b
clippy
pauldelucia dfa2367
fmt
pauldelucia 8b42344
fix: dashpay database table initialization was hanging on new db (#463)
pauldelucia 091138d
Merge branch 'feat/dashpay' into feat/new-wallet-screen
pauldelucia 1d40104
fix: display stuff
pauldelucia 7370331
add accounts and much progress
pauldelucia 21e8c6f
feat: transaction history in wallet
pauldelucia 862c113
clippy
pauldelucia 4db0aea
ok
pauldelucia 7fb5746
feat: hd wallet
pauldelucia 9bd086d
send tx via wallet and wallet lock/unlock
pauldelucia 2a901a0
update to PeerNetworkManager
pauldelucia c623e38
ok
pauldelucia 84a463e
ok
pauldelucia 64664c0
ok
pauldelucia 503dc81
fmt
pauldelucia c26bcd8
clippy
pauldelucia 13ac162
clippy
pauldelucia 031b1ab
feat: clear SPV data button
pauldelucia 68b732d
fix: switch from dash core rpc to spv mode
pauldelucia 7fec58c
feat: switch to DashSpvClientInterface
pauldelucia 71d482f
clean spv button fix
pauldelucia 4b598a7
feat: send from wallet screen
pauldelucia dd6fb44
feat: platform addresses
pauldelucia ee132bf
feat: platform address transitions
pauldelucia 022b0c0
feat: platform address transitions
pauldelucia 24006cb
feat: move dashpay screen to top level
pauldelucia 40e9530
platform addresses sdk
pauldelucia f749fbe
remove async context provider fn
pauldelucia eddf01c
lock
pauldelucia d32c4ee
update for new sdk with addresses and handle sdk result data
pauldelucia bc44b9a
chore: update grovestark dependency
pauldelucia 91a5791
chore: update dash-sdk rev
pauldelucia 85b1afa
fmt
pauldelucia e21e424
remove elliptic curves patch
pauldelucia f8637ed
clippy
pauldelucia ec18907
feat: use BackendTaskSuccessResult variants instead of Message(String)
pauldelucia 2646183
fmt
pauldelucia 79665df
clippy
pauldelucia 64078a4
update DIP18 implementation, fixes and some features around wallets a…
pauldelucia 035a787
fix
pauldelucia 819570b
wallet unlock on wallet screen
pauldelucia ecfca28
info popup component
pauldelucia 09d7c7f
small fixes
pauldelucia 35e5dd5
wallet unlock component
pauldelucia 887b4a9
fix startup panic
pauldelucia f3f279b
welcome screen and dashpay stuff
pauldelucia 3f5aa3d
cargo fix
pauldelucia 016efcc
cargo fmt
pauldelucia 0354940
chore: update deps to use most recent dash-sdk
lklimek 59ba10f
simplify welcome screen and move spv storage clear to advanced settings
pauldelucia 027e6d2
default connect to peers via SPV DNS seeds
pauldelucia f053f4b
fix: exit app without waiting
pauldelucia f8fcc59
fix error message and reverse quorum hash on lookup
pauldelucia f7260d8
fmt
pauldelucia dc8dcbd
settings to turn off spv auto sync
pauldelucia 1525c47
clippy
pauldelucia 4cbf212
work on getting started flow
pauldelucia 366f449
AddressProvider stuff
pauldelucia 0c24186
address sync stuff
pauldelucia 2ab35d9
many fixes all in one
pauldelucia e45873a
fix
pauldelucia 814a555
many fixes
pauldelucia 8ecc051
fixes
pauldelucia 3b4809c
amount input stuff
pauldelucia c69c7b6
alignment in identity create screen for adding keys
pauldelucia e7f50a2
more fixes
pauldelucia a0d90b1
many improvements
pauldelucia e95de77
simple token creator, word count selection for wallet seed phrases, more
pauldelucia 5833039
fix: platform address info storage
pauldelucia 75610d2
feat: generate platform addresses and address sync post-checkpoint
pauldelucia 52b8f98
many things
pauldelucia b93bb6d
chore: update to recent changes in platform
shumkov f8f4792
docs: added few lines about .env file
shumkov 54f0990
fix: banned addresses and failure during address sync
shumkov 690127c
fix: updates for new platform and fee estimation
pauldelucia 4068739
fix: only take PA credits after checkpoint
pauldelucia c9acdcc
feat: fee estimation and display
pauldelucia e4c024b
feat: fee estimation follow-up
pauldelucia c730943
more on fee displays
pauldelucia 1acc50c
fix: proof logs in data contract create
pauldelucia f34f025
fix: white on white text for fee estimation display
pauldelucia 7d9ab05
fix: always start as closed for advanced settings dropdown in setting…
pauldelucia 43166da
fix: hard to see data contracts in the register contract screen
pauldelucia edcc03e
fix: document create screen scroll
pauldelucia 2593513
fix: fee estimations accuracy
pauldelucia 925bedc
Merge branch 'v1.0-dev' into feat/hd-wallet
pauldelucia 7858507
fmt
pauldelucia 034c71e
clippy auto fixes
pauldelucia b406f74
clippy manual fixes and pin dash-sdk dep
pauldelucia 6ab6e8f
fix failing tests
pauldelucia 2238fa3
fmt
pauldelucia 149f603
fix: update rust toolchain to 1.92
pauldelucia f360966
refactor: hide SPV behind dev mode
pauldelucia 18a2346
feat: warning about SPV being experimental
pauldelucia 866aa54
cleanup based on claude review
pauldelucia 5fc7757
fmt
pauldelucia 0c11125
cleanup based on another claude review
pauldelucia 991f438
fix: kittest failing
pauldelucia 3e5488f
fix: remove fee result display in success screens and clean up dashpa…
pauldelucia 0e39de6
dashpay fixes and platform address fixes
pauldelucia fd22961
refactor: move some AppContext functions to backend_task module
pauldelucia 047a86e
clippy
pauldelucia c04c60e
clippy
pauldelucia 1208e55
fix: refresh mode alignment in wallet screen and fmt
pauldelucia b8548a7
fix: failing test due to test_db issue
pauldelucia 320d786
fix: dashpay avatar loading slow
pauldelucia cd41a69
fix: add rocksdb deps to ci workflow
pauldelucia 3a47ac0
fix: free up disk space in ci workflow
pauldelucia a3154e7
fix: display warning when partial wallet refresh success occurs
pauldelucia ec3dfe6
fix: propogate error for terminal balance sync
pauldelucia ff3e75f
feat: more aggressive disk cleanup in ci workflow
pauldelucia File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,292 @@ | ||
| <pre> | ||
| DIP: 0014 | ||
| Title: Extended Key Derivation using 256-bit Unsigned Integers | ||
| Author(s): Samuel Westrich | ||
| Special-Thanks: Dashameter, Eric Britten, Thephez | ||
| Comments-Summary: No comments yet. | ||
| Status: Proposed | ||
| Type: Informational | ||
| Created: 2020-11-25 | ||
| License: MIT License | ||
| </pre> | ||
|
|
||
| # Table of Contents | ||
|
|
||
| 1. [Abstract](#abstract) | ||
| 1. [Motivation](#motivation) | ||
| 1. [Prior Work](#prior-work) | ||
| 1. [Compatibility](#compatibility) | ||
| 1. [The Dashpay Example](#the-dashpay-example) | ||
| 1. [Specification: Key derivation](#specification-key-derivation) | ||
| 1. [Test Vectors](#test-vectors) | ||
| 1. [Copyright](#copyright) | ||
|
|
||
| # Abstract | ||
|
|
||
| This Document expands the derivation ability set by BIP32 to allow for derivation on paths using | ||
| 256-bit unsigned integers. | ||
|
|
||
| # Motivation | ||
|
|
||
| Derivation paths defined in BIP32 are limited to 31-bit children. The original reasoning seems to be | ||
| mostly from the use case of BIP32. It seems unattainable to use more than 2<sup>31</sup> (Over 2 | ||
| billion) addresses in a wallet. However if we need a unique child in a derivation path, this cannot | ||
| be achieved with 31-bit children. We need unique children in DashPay derivation paths. Unique | ||
| children can be defined as 2 random indexes that have less than 2<sup>128</sup> chance of being the | ||
| same. As 256-bit derivation paths might be useful for other applications, we believe the solution | ||
| presented within merits its own document. | ||
|
|
||
| # Prior work | ||
|
|
||
| * [BIP-0032 - Hierarchical Deterministic | ||
| Wallets](https://github.com/dashevo/bips/blob/master/bip-0032.mediawiki) | ||
| * [BIP-0044 - Multi-Account Hierarchy for Deterministic | ||
| Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) | ||
|
|
||
| # Compatibility | ||
|
|
||
| One fundamental aspect of this document is backwards compatibility with BIP32 derivation. If a child | ||
| key’s index is less than 2<sup>32</sup>-1 then the resultant child key created by the derivation | ||
| outlined in this document will match the derivation outlined in BIP32. | ||
|
|
||
| # The Dashpay Example | ||
|
|
||
| Derivation in BIP32 is limited to 31 bits (the 32nd bit is used to mark hardening). If we limited | ||
| ourselves to 31-bit derivations we would be faced with the following problem: we need the derivation | ||
| path between user A and user B to be unique and be made in such a way that a user C could never | ||
| create an attack to have the same address space as given to B from A. | ||
|
|
||
| To illustrate the attack let’s assume we used only 31-bit derivation. Since user A and user B’s | ||
| unique id is public, any form that reduces the entropy of this relationship to 31 bits per child | ||
| would be attackable. For example, if we used the last 31 bits of the unique id for each user to make | ||
| the tail of the derivation path then user C could cycle through ~2<sup>31</sup> Blockchain | ||
| Identities and eventually find one that would match. This would easily be achievable with an ASIC | ||
| miner. User C would then receive the same extended public key as user B and therefore be able to | ||
| know when payments were made from User B to user A. More complicated schemes also suffer the same | ||
| problem as User C could replicate any known function to create the same 31 bits. | ||
|
|
||
| To solve this we allow derivation of paths on 256-bit unsigned integers matching the Identity’s | ||
| registration hash. | ||
|
|
||
| The derivation path for Dashpay relationships is discussed more in depth in the DashPay | ||
| Implementation Proposal. Here we will focus on the last two 256-bit derivations. The derivation path | ||
| will look like: | ||
|
|
||
| `m(userA)/9’/5’/15’/0’/(userA’s unique id)/(userB’s unique id)` | ||
|
|
||
| Deconstructed that is : | ||
|
|
||
| * 9 hardened / See DIP9 | ||
| * 5 hardened / Coin type | ||
| * 15 hardened / Feature | ||
| * 0 hardened / Account | ||
| * userA’s unique id (not hardened) | ||
| * userB’s unique id (not hardened) | ||
|
|
||
| Making the last two fields non-hardened allows for an extended public key that covers all address | ||
| spaces of all our contacts for all our blockchain identities. This can be used for accounting and | ||
| also to create the friend requests without having to use a private key. | ||
|
|
||
| # Specification: Key derivation | ||
|
|
||
| We will modify the following to the original specification as described in | ||
| [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#conventions). | ||
|
|
||
| ## Conventions | ||
|
|
||
| As standard conversion functions, we assume: | ||
|
|
||
| * ser<sub>256</sub>(i): serialize a 256-bit unsigned integer `i` as a 32-byte sequence, most | ||
| significant byte first. | ||
|
|
||
| ## Extended Keys | ||
|
|
||
| In the original BIP32 specification, each extended key had 2<sup>31</sup> normal child keys and | ||
| 2<sup>31</sup> hardened child keys. We extend that specification to now allow 2<sup>256</sup> normal | ||
| child keys and 2<sup>256</sup> hardened child keys. Each of these child keys has an index. In the | ||
| original specification, a key was hardened if the most significant bit of the index was set. Instead | ||
| we now use a Boolean `h` to represent if a child key is hardened. Hence now both normal child keys | ||
| and hardened keys will use indices 0 through 2<sup>256</sup>-1. | ||
|
|
||
| ## Child Key Derivation (CKD) Functions | ||
|
|
||
| Given a parent extended key and an index `i`, it is possible to compute the corresponding child | ||
| extended key. The algorithm to do so depends on whether the child is a hardened key or not, if the | ||
| index is less or more than 2<sup>31</sup>, and whether we're talking about private or public keys. | ||
|
|
||
| ### Private parent key → private child key | ||
|
|
||
| The function CKDpriv256((k<sub>par</sub>, c<sub>par</sub>), i, h) → (k<sub>i</sub>, c<sub>i</sub>) | ||
| computes a child extended private key from the parent extended private key: | ||
|
|
||
| * Check whether i < 2<sup>32</sup> (whether we should use compatibility mode) and check if `h` is | ||
| true (whether the child is a hardened key). | ||
| * If (i< 2<sup>32</sup>) : | ||
| * If hardened child (h==true): let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = 0x00 || | ||
| ser<sub>256</sub>(k<sub>par</sub>) || ser<sub>32</sub>(i)). (Note: The 0x00 pads the private | ||
| key to make it 33 bytes long.) | ||
| * If normal child: let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = | ||
| ser<sub>P</sub>(point(k<sub>par</sub>)) || ser<sub>32</sub>(i)). | ||
| * If (i>=2<sup>32</sup>) : | ||
| * If hardened child (h==true): let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = 0x00 || | ||
| ser<sub>256</sub>(k<sub>par</sub>) || ser<sub>256</sub>(i)). (Note: The 0x00 pads the private | ||
| key to make it 33 bytes long.) | ||
| * If normal child: let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = | ||
| ser<sub>P</sub>(point(k<sub>par</sub>)) || ser<sub>256</sub>(i)). | ||
| * Split I into two 32-byte sequences, I<sub>L</sub> and I<sub>R</sub>. | ||
| * The returned child key k<sub>i</sub> is parse<sub>256</sub>(I<sub>L</sub>) + k<sub>par</sub> (mod | ||
| n). | ||
| * The returned chain code c<sub>i</sub> is I<sub>R</sub>. | ||
| * In case parse<sub>256</sub>(I<sub>L</sub>) ≥ n or k<sub>i</sub> = 0, the resulting key is invalid, | ||
| and one should proceed with the next value for `i`. (Note: this has a probability lower than 1 in | ||
| 2<sup>127</sup>.) | ||
|
|
||
| The HMAC-SHA512 function is specified in [RFC 4231](http://tools.ietf.org/html/rfc4231). | ||
|
|
||
| ### Public parent key → public child key | ||
|
|
||
| The function CKDpub256((K<sub>par</sub>, c<sub>par</sub>), i, h) → (K<sub>i</sub>, c<sub>i</sub>) | ||
| computes a child extended public key from the parent extended public key. It is only defined for | ||
| non-hardened child keys. | ||
|
|
||
| * Check if `h` is true, if it is then return failure. | ||
| * Check whether i < 2<sup>32</sup> (whether we should use compatibility mode). | ||
| * If it is (compatibility mode): let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = | ||
| ser<sub>P</sub>(K<sub>par</sub>) || ser<sub>32</sub>(i)). | ||
| * If not (UInt256 mode): let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = | ||
| ser<sub>p</sub>(K<sub>par</sub>) || ser<sub>256</sub>(i)). | ||
| * Split I into two 32-byte sequences, I<sub>L</sub> and I<sub>R</sub>. | ||
| * The returned child key K<sub>i</sub> is point(parse<sub>256</sub>(I<sub>L</sub>)) + | ||
| K<sub>par</sub>. | ||
| * The returned chain code c<sub>i</sub> is I<sub>R</sub>. | ||
| * In case parse<sub>256</sub>(I<sub>L</sub>) ≥ n or K<sub>i</sub> is the point at infinity, the | ||
| resulting key is invalid, and one should proceed with the next value for `i`. | ||
|
|
||
| ## Serialization Format | ||
|
|
||
| Extended public and private keys are serialized as follows: | ||
|
|
||
| If (child number < 2<sup>32</sup>) follow serialization format as described in BIP32 : | ||
|
|
||
| * 4 byte: version bytes (mainnet: `0x0488B21E` public, `0x0488ADE4` private; testnet: `0x043587CF` | ||
| public, `0x04358394` private) | ||
| * 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 derived keys, .... | ||
| * 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) | ||
| * 4 bytes: child number. This is ser<sub>32</sub>(i) for i in x<sub>i</sub> = x<sub>par</sub>/i, | ||
| with x<sub>i</sub> the key being serialized. (0x00000000 if master key) | ||
| * 32 bytes: the chain code | ||
| * 33 bytes: the public key or private key data (ser<sub>P</sub>(K) for public keys, 0x00 || | ||
| ser<sub>256</sub>(k) for private keys) | ||
|
|
||
| Because of the choice of the version bytes, the Base58 representation will start with `xprv` or | ||
| `xpub` on mainnet, `tprv` or `tpub` on testnet. | ||
|
|
||
| If (child number >= 2<sup>32</sup>) then serialize the following way : | ||
|
|
||
| * 4 byte: version bytes (mainnet: `0X0EECEFC5` public, `0x0EECF02E` private; testnet: `0x0EED270B` | ||
| public, `0x0EED2774` private) | ||
| * 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 derived keys, .... | ||
| * 4 bytes: the fingerprint of the parent's key (0x00000000 if master key) | ||
| * 1 byte: hardening: 0x00 if not hardened, 0x01 if hardened | ||
| * 32 bytes: child number. This is ser<sub>256</sub>(i) for i in x<sub>i</sub> = x<sub>par</sub>/i, | ||
| with x<sub>i</sub> the key being serialized. (Only zeros if master key) | ||
| * 32 bytes: the chain code | ||
| * 33 bytes: the public key or private key data (ser<sub>P</sub>(K) for public keys, 0x00 || | ||
| ser<sub>256</sub>(k) for private keys) | ||
|
|
||
| Because of the choice of the version bytes, the Base58 representation will start with `dpms` | ||
| (dashpay mainnet secret) or `dpmp` (dashpay mainnet public) on mainnet, `dpts` (dashpay testnet | ||
| secret) or `dptp` (dashpay testnet public) on testnet or devnets. | ||
|
|
||
| # Test Vectors | ||
|
|
||
| ## Test Vector 1 | ||
|
|
||
| Mnemonic : birth kingdom trash renew flavor utility donkey gasp regular alert pave layer | ||
|
|
||
| Seed Data : | ||
| b16d3782e714da7c55a397d5f19104cfed7ffa8036ac514509bbb50807f8ac598eeb26f0797bd8cc221a6cbff2168d90a5e9ee025a5bd977977b9eccd97894bb | ||
|
|
||
| Key Type : Secp256k1 | ||
|
|
||
| Derivation (Note : The second derivation is hardened) : | ||
|
|
||
| ``` text | ||
| m/ | ||
| 0x775d3854c910b7dee436869c4724bed2fe0784e198b8a39f02bbb49d8ebcfc3b/ | ||
| 0xf537439f36d04a15474ff7423e4b904a14373fafb37a41db74c84f1dbb5c89a6'/ | ||
| 0x4c4592ca670c983fc43397dfd21a6f427fac9b4ac53cb4dcdc6522ec51e81e79/ | ||
| 0 | ||
| ``` | ||
|
|
||
| * Key : 0xe8781fdef72862968cd9a4d2df34edaf9dcc5b17629ec505f0d2d1a8ed6f9f09 | ||
| * Ext Pub : tpubDF4tEyAdpXySRui9CvGRTSQU4BgLwGxuLPKEb9WqEE93raF2ffU1PRQ6oJHCgZ7dArzcMj9iKG8s8EFA1DdwgzWAXs61uFuRE1bQi8kAmLy | ||
| * Ext Priv : tprv8iNr6Z8PgAHmYSgMKGbq42kMVAAQmwmzm5iTJdUXoxLf25zG3GeRCvnEdC6HKTHkU59nZkfjvcGk9VW2YHsFQMwsZrQLyNrGx9c37kgb368 | ||
|
|
||
| ## Test Vector 2 | ||
|
|
||
| Mnemonic : birth kingdom trash renew flavor utility donkey gasp regular alert pave layer | ||
|
|
||
| Seed Data : | ||
| b16d3782e714da7c55a397d5f19104cfed7ffa8036ac514509bbb50807f8ac598eeb26f0797bd8cc221a6cbff2168d90a5e9ee025a5bd977977b9eccd97894bb | ||
|
|
||
| Key Type : Secp256k1 | ||
|
|
||
| Derivation (Note : All derivations except the last are hardened) : | ||
|
|
||
| ``` text | ||
| m/9'/5'/15'/0'/ | ||
| 0x555d3854c910b7dee436869c4724bed2fe0784e198b8a39f02bbb49d8ebcfc3a'/ | ||
| 0xa137439f36d04a15474ff7423e4b904a14373fafb37a41db74c84f1dbb5c89b5'/ | ||
| 0 | ||
| ``` | ||
|
|
||
| * Key : 0xfac40790776d171ee1db90899b5eb2df2f7d2aaf35ad56f07ffb8ed2c57f8e60 | ||
| * Ext Pub : tpubDLqNye58JQGox9dqWN5xZUgC5XGC6KwWmTSX6qGugrGEa5QffDm3iDfsVtX7qyXuWoQsXA6YCSuckKshyjnwiGGoYWHonAv2X98HTU613UH | ||
| * Ext Priv : tprv8p9LqE2tA2b94gc3ciRNA525WVkFvzkcC9qjpKEcGaTqjb9u2pwTXj41KkZTj3c1a6fJUpyXRfcB4dimsYsLMjQjsTJwi5Ukx6tJ5BpmYpx | ||
|
|
||
| ## Test Vector 3 | ||
|
|
||
| Mnemonic : birth kingdom trash renew flavor utility donkey gasp regular alert pave layer | ||
|
|
||
| Seed Data : | ||
| b16d3782e714da7c55a397d5f19104cfed7ffa8036ac514509bbb50807f8ac598eeb26f0797bd8cc221a6cbff2168d90a5e9ee025a5bd977977b9eccd97894bb | ||
|
|
||
| Key Type : Secp256k1 | ||
|
|
||
| Derivation (Note : The derivation is NOT hardened) : | ||
|
|
||
| ``` text | ||
| m/ | ||
| 0x775d3854c910b7dee436869c4724bed2fe0784e198b8a39f02bbb49d8ebcfc3b | ||
| ``` | ||
|
|
||
| * Key : 0xf6a95ae75ea8362d9478932f71b262b3d981918fe030316686a475dea4889938 | ||
| * Ext Pub : dptp1C5gGd8NzvAke5WNKyRfpDRyvV2UZ3jjrZVZU77qk9yZemMGSdZpkWp7y6wt3FzvFxAHSW8VMCaC1p6Ny5EqWuRm2sjvZLUUFMMwXhmW6eS69qjX958RYBH5R8bUCGZkCfUyQ8UVWcx9katkrRr | ||
| * Ext Priv : dpts1vgMVEs9mmv1YLwURCeoTn9CFMZ8JMVhyZuxQSKttNSETR3zydMFHMKTTNDQPf6nnupCCtcNnSu3nKZXAJhaguyoJWD4Ju5PE6PSkBqAKWci7HLz37qmFmZZU6GMkLvNLtST2iV8NmqqbX37c45 | ||
|
|
||
| ## Test Vector 4 | ||
|
|
||
| Mnemonic : birth kingdom trash renew flavor utility donkey gasp regular alert pave layer | ||
|
|
||
| Seed Data : | ||
| b16d3782e714da7c55a397d5f19104cfed7ffa8036ac514509bbb50807f8ac598eeb26f0797bd8cc221a6cbff2168d90a5e9ee025a5bd977977b9eccd97894bb | ||
|
|
||
| Key Type : Secp256k1 | ||
|
|
||
| Derivation (Note : The second derivation is hardened) : | ||
|
|
||
| ``` text | ||
| m/ | ||
| 0x775d3854c910b7dee436869c4724bed2fe0784e198b8a39f02bbb49d8ebcfc3b/ | ||
| 0xf537439f36d04a15474ff7423e4b904a14373fafb37a41db74c84f1dbb5c89a6' | ||
| ``` | ||
|
|
||
| * Key : b898ad92d3a0698bc3117d3777d82676673816ce52f4fc2f1263a2f676825f90 | ||
| * Ext Pub : dptp1CLkexeadp6guoi8Fbiwq6CLZm3hT1DJLwHsxWvwYSeAhjenFhcQ9HumZSftfZEr4dyQjFD7gkM5bSn6Aj7F1Jve8KTn4JsMEaj9dFyJkYs4Ga5HSUqeajxGVmzaY1pEioDmvUtZL3J1NCDCmzQ | ||
| * Ext Priv : dpts1vwRsaPMQfqwp59ELpx5UeuYtdaMCJyGTwiGtr8zgf6qWPMWnhPpg8R73hwR1xLibbdKVdh17zfwMxFEMxZzBKUgPwvuosUGDKW4ayZjs3AQB9EGRcVpDoFT8V6nkcc6KzksmZxvmDcd3MqiPEu | ||
|
|
||
| # Copyright | ||
|
|
||
| Copyright (c) 2020 Dash Core Group, Inc. [Licensed under the MIT | ||
| License](https://opensource.org/licenses/MIT) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.