Skip to content
Merged
Show file tree
Hide file tree
Changes from 48 commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
aa05391
feat: dashpay
pauldelucia Aug 20, 2025
6db2041
ok
pauldelucia Aug 21, 2025
1eef611
ok
pauldelucia Aug 21, 2025
f5ac1a4
remove doc
pauldelucia Aug 21, 2025
ec65304
ok
pauldelucia Aug 22, 2025
432285a
ok
pauldelucia Aug 22, 2025
3e9ee11
database
pauldelucia Aug 23, 2025
2012520
ok
pauldelucia Aug 23, 2025
fe5586f
fix: use proper BackendTaskSuccessResults rather than Message
pauldelucia Aug 25, 2025
26155a6
fmt and clippy
pauldelucia Aug 25, 2025
25df372
remove dashpay dip file
pauldelucia Sep 1, 2025
05f73f5
logo and cleanup
pauldelucia Sep 1, 2025
7907df5
fix top panel spacing
pauldelucia Sep 1, 2025
fc660b1
ui stuff
pauldelucia Sep 1, 2025
acac400
fmt
pauldelucia Sep 1, 2025
42a858e
dip 14
pauldelucia Sep 2, 2025
1d3060d
image fetching
pauldelucia Sep 2, 2025
48c1df2
some fixes
pauldelucia Sep 3, 2025
be4078b
cleaning up
pauldelucia Sep 4, 2025
5bef691
todos
pauldelucia Sep 18, 2025
bba90a4
feat: SPV phase 1 (#440)
pauldelucia Oct 23, 2025
8723bf9
feat: spv progress bars and sync from genesis when wallets are loaded…
pauldelucia Oct 24, 2025
cc991a6
Merge branch 'v1.0-dev' into feat/dashpay
pauldelucia Oct 24, 2025
32dd45c
fmt
pauldelucia Oct 24, 2025
a5e1188
update
pauldelucia Oct 24, 2025
4999cb1
merge
QuantumExplorer Oct 24, 2025
885a8eb
fixes
QuantumExplorer Oct 24, 2025
7c8bfca
Merge branch 'v1.0-dev' into feat/dashpay
pauldelucia Nov 10, 2025
4e96a59
fix: add sdk features
pauldelucia Nov 10, 2025
75ff018
feat: add accounts and transactions to wallet screen
pauldelucia Nov 10, 2025
7ef5f2b
clippy
pauldelucia Nov 10, 2025
dfa2367
fmt
pauldelucia Nov 10, 2025
8b42344
fix: dashpay database table initialization was hanging on new db (#463)
pauldelucia Nov 10, 2025
091138d
Merge branch 'feat/dashpay' into feat/new-wallet-screen
pauldelucia Nov 11, 2025
1d40104
fix: display stuff
pauldelucia Nov 11, 2025
7370331
add accounts and much progress
pauldelucia Nov 11, 2025
21e8c6f
feat: transaction history in wallet
pauldelucia Nov 12, 2025
862c113
clippy
pauldelucia Nov 12, 2025
4db0aea
ok
pauldelucia Nov 13, 2025
7fb5746
feat: hd wallet
pauldelucia Nov 14, 2025
9bd086d
send tx via wallet and wallet lock/unlock
pauldelucia Nov 14, 2025
2a901a0
update to PeerNetworkManager
pauldelucia Nov 17, 2025
c623e38
ok
pauldelucia Nov 20, 2025
84a463e
ok
pauldelucia Nov 20, 2025
64664c0
ok
pauldelucia Nov 21, 2025
503dc81
fmt
pauldelucia Nov 22, 2025
c26bcd8
clippy
pauldelucia Nov 22, 2025
13ac162
clippy
pauldelucia Nov 22, 2025
031b1ab
feat: clear SPV data button
pauldelucia Nov 22, 2025
68b732d
fix: switch from dash core rpc to spv mode
pauldelucia Nov 22, 2025
7fec58c
feat: switch to DashSpvClientInterface
pauldelucia Nov 27, 2025
71d482f
clean spv button fix
pauldelucia Nov 27, 2025
4b598a7
feat: send from wallet screen
pauldelucia Nov 28, 2025
dd6fb44
feat: platform addresses
pauldelucia Dec 2, 2025
ee132bf
feat: platform address transitions
pauldelucia Dec 3, 2025
022b0c0
feat: platform address transitions
pauldelucia Dec 3, 2025
24006cb
feat: move dashpay screen to top level
pauldelucia Dec 5, 2025
40e9530
platform addresses sdk
pauldelucia Dec 9, 2025
f749fbe
remove async context provider fn
pauldelucia Dec 9, 2025
eddf01c
lock
pauldelucia Dec 11, 2025
d32c4ee
update for new sdk with addresses and handle sdk result data
pauldelucia Dec 12, 2025
bc44b9a
chore: update grovestark dependency
pauldelucia Dec 12, 2025
91a5791
chore: update dash-sdk rev
pauldelucia Dec 12, 2025
85b1afa
fmt
pauldelucia Dec 12, 2025
e21e424
remove elliptic curves patch
pauldelucia Dec 12, 2025
f8637ed
clippy
pauldelucia Dec 12, 2025
ec18907
feat: use BackendTaskSuccessResult variants instead of Message(String)
pauldelucia Dec 12, 2025
2646183
fmt
pauldelucia Dec 12, 2025
79665df
clippy
pauldelucia Dec 12, 2025
64078a4
update DIP18 implementation, fixes and some features around wallets a…
pauldelucia Dec 15, 2025
035a787
fix
pauldelucia Dec 15, 2025
819570b
wallet unlock on wallet screen
pauldelucia Dec 15, 2025
ecfca28
info popup component
pauldelucia Dec 15, 2025
09d7c7f
small fixes
pauldelucia Dec 15, 2025
35e5dd5
wallet unlock component
pauldelucia Dec 15, 2025
887b4a9
fix startup panic
pauldelucia Dec 16, 2025
f3f279b
welcome screen and dashpay stuff
pauldelucia Dec 16, 2025
3f5aa3d
cargo fix
pauldelucia Dec 16, 2025
016efcc
cargo fmt
pauldelucia Dec 16, 2025
0354940
chore: update deps to use most recent dash-sdk
lklimek Dec 16, 2025
59ba10f
simplify welcome screen and move spv storage clear to advanced settings
pauldelucia Dec 17, 2025
027e6d2
default connect to peers via SPV DNS seeds
pauldelucia Dec 17, 2025
f053f4b
fix: exit app without waiting
pauldelucia Dec 17, 2025
f8fcc59
fix error message and reverse quorum hash on lookup
pauldelucia Dec 17, 2025
f7260d8
fmt
pauldelucia Dec 17, 2025
dc8dcbd
settings to turn off spv auto sync
pauldelucia Dec 17, 2025
1525c47
clippy
pauldelucia Dec 17, 2025
4cbf212
work on getting started flow
pauldelucia Dec 17, 2025
366f449
AddressProvider stuff
pauldelucia Dec 22, 2025
0c24186
address sync stuff
pauldelucia Dec 22, 2025
2ab35d9
many fixes all in one
pauldelucia Dec 22, 2025
e45873a
fix
pauldelucia Dec 22, 2025
814a555
many fixes
pauldelucia Dec 23, 2025
8ecc051
fixes
pauldelucia Dec 23, 2025
3b4809c
amount input stuff
pauldelucia Dec 26, 2025
c69c7b6
alignment in identity create screen for adding keys
pauldelucia Dec 26, 2025
e7f50a2
more fixes
pauldelucia Dec 26, 2025
a0d90b1
many improvements
pauldelucia Dec 29, 2025
e95de77
simple token creator, word count selection for wallet seed phrases, more
pauldelucia Dec 30, 2025
5833039
fix: platform address info storage
pauldelucia Jan 7, 2026
75610d2
feat: generate platform addresses and address sync post-checkpoint
pauldelucia Jan 8, 2026
52b8f98
many things
pauldelucia Jan 8, 2026
b93bb6d
chore: update to recent changes in platform
shumkov Jan 9, 2026
f8f4792
docs: added few lines about .env file
shumkov Jan 9, 2026
54f0990
fix: banned addresses and failure during address sync
shumkov Jan 9, 2026
690127c
fix: updates for new platform and fee estimation
pauldelucia Jan 9, 2026
4068739
fix: only take PA credits after checkpoint
pauldelucia Jan 9, 2026
c9acdcc
feat: fee estimation and display
pauldelucia Jan 9, 2026
e4c024b
feat: fee estimation follow-up
pauldelucia Jan 9, 2026
c730943
more on fee displays
pauldelucia Jan 12, 2026
1acc50c
fix: proof logs in data contract create
pauldelucia Jan 12, 2026
f34f025
fix: white on white text for fee estimation display
pauldelucia Jan 12, 2026
7d9ab05
fix: always start as closed for advanced settings dropdown in setting…
pauldelucia Jan 12, 2026
43166da
fix: hard to see data contracts in the register contract screen
pauldelucia Jan 12, 2026
edcc03e
fix: document create screen scroll
pauldelucia Jan 12, 2026
2593513
fix: fee estimations accuracy
pauldelucia Jan 12, 2026
925bedc
Merge branch 'v1.0-dev' into feat/hd-wallet
pauldelucia Jan 12, 2026
7858507
fmt
pauldelucia Jan 12, 2026
034c71e
clippy auto fixes
pauldelucia Jan 12, 2026
b406f74
clippy manual fixes and pin dash-sdk dep
pauldelucia Jan 12, 2026
6ab6e8f
fix failing tests
pauldelucia Jan 12, 2026
2238fa3
fmt
pauldelucia Jan 12, 2026
149f603
fix: update rust toolchain to 1.92
pauldelucia Jan 12, 2026
f360966
refactor: hide SPV behind dev mode
pauldelucia Jan 12, 2026
18a2346
feat: warning about SPV being experimental
pauldelucia Jan 12, 2026
866aa54
cleanup based on claude review
pauldelucia Jan 13, 2026
5fc7757
fmt
pauldelucia Jan 13, 2026
0c11125
cleanup based on another claude review
pauldelucia Jan 13, 2026
991f438
fix: kittest failing
pauldelucia Jan 13, 2026
3e5488f
fix: remove fee result display in success screens and clean up dashpa…
pauldelucia Jan 15, 2026
0e39de6
dashpay fixes and platform address fixes
pauldelucia Jan 16, 2026
fd22961
refactor: move some AppContext functions to backend_task module
pauldelucia Jan 19, 2026
047a86e
clippy
pauldelucia Jan 19, 2026
c04c60e
clippy
pauldelucia Jan 19, 2026
1208e55
fix: refresh mode alignment in wallet screen and fmt
pauldelucia Jan 19, 2026
b8548a7
fix: failing test due to test_db issue
pauldelucia Jan 19, 2026
320d786
fix: dashpay avatar loading slow
pauldelucia Jan 19, 2026
cd41a69
fix: add rocksdb deps to ci workflow
pauldelucia Jan 19, 2026
3a47ac0
fix: free up disk space in ci workflow
pauldelucia Jan 19, 2026
a3154e7
fix: display warning when partial wallet refresh success occurs
pauldelucia Jan 19, 2026
ec3dfe6
fix: propogate error for terminal balance sync
pauldelucia Jan 19, 2026
ff3e75f
feat: more aggressive disk cleanup in ci workflow
pauldelucia Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
994 changes: 662 additions & 332 deletions Cargo.lock

Large diffs are not rendered by default.

17 changes: 15 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ qrcode = "0.14.1"
nix = { version = "0.30.1", features = ["signal"] }
eframe = { version = "0.32.0", features = ["persistence"] }
base64 = "0.22.1"
dash-sdk = { git = "https://www.github.com/dashpay/platform", tag = "v2.1.2", features = ["core_key_wallet", "core_bincode", "core_quorum-validation", "core_verification", "core_rpc_client"] }
dash-sdk = { path = "/Users/pauldelucia/Documents/Dash/platform/packages/rs-sdk", features = ["core_key_wallet", "core_key_wallet_manager", "core_bincode", "core_quorum-validation", "core_verification", "core_rpc_client", "core_spv"] }
Comment thread
pauldelucia marked this conversation as resolved.
Resolved
grovestark = { git = "https://www.github.com/pauldelucia/grovestark", rev = "5313ba9df590f114e11934e281f1e8c8bc462794" }
rayon = "1.8"
thiserror = "2.0.12"
Expand Down Expand Up @@ -46,14 +46,16 @@ arboard = { version = "3.6.0", default-features = false, features = [
directories = "6.0.0"
rusqlite = { version = "0.37.0", features = ["functions"] }
dark-light = "2.0.0"
image = { version = "0.25.6", default-features = false, features = ["png"] }
image = { version = "0.25.6", default-features = false, features = ["png", "jpeg"] }
reqwest = { version = "0.12", features = ["json", "stream"] }
bitflags = "2.9.1"
libsqlite3-sys = { version = "0.35.0", features = ["bundled"] }
rust-embed = "8.7.2"
zeroize = "1.8.1"
zxcvbn = "3.1.0"
argon2 = "0.5.3" # For Argon2 key derivation
aes-gcm = "0.10.3" # For AES-256-GCM encryption
cbc = "0.1.2" # For CBC mode encryption
crossbeam-channel = "0.5.15"
regex = "1.11.1"
humantime = "2.2.0"
Expand All @@ -79,3 +81,14 @@ uninlined_format_args = "allow"

[patch.crates-io]
elliptic-curve-tools = { git = "https://github.com/mikelodder7/elliptic-curve-tools", rev = "c989865fa71503d2cbf5c5795c4ebcf4a2f3221c" }

[patch.'https://github.com/dashpay/rust-dashcore']
dash-spv = { path = "../Dash/rust-dashcore/dash-spv" }
key-wallet = { path = "../Dash/rust-dashcore/key-wallet" }
key-wallet-manager = { path = "../Dash/rust-dashcore/key-wallet-manager" }
dashcore = { path = "../Dash/rust-dashcore/dash" }
dashcore_hashes = { path = "../Dash/rust-dashcore/hashes" }
dashcore-private = { path = "../Dash/rust-dashcore/internals" }
dash-network = { path = "../Dash/rust-dashcore/dash-network" }
dashcore-rpc = { path = "../Dash/rust-dashcore/rpc-client" }
dashcore-rpc-json = { path = "../Dash/rust-dashcore/rpc-json" }
Comment thread
pauldelucia marked this conversation as resolved.
Resolved
910 changes: 910 additions & 0 deletions DASHPAY_DIP.md

Large diffs are not rendered by default.

292 changes: 292 additions & 0 deletions DIP_14.md
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 &lt; 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&lt; 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 &lt; 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 &lt; 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)
Binary file added icons/dashpay.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading