Packages: core (BIP39/32/44/49/84/86 derivation, WIF), keystore (PBKDF2 + AES-GCM), psbt, p2p (BIP157/158 SPV daemon, Dandelion++ broadcast with relay-echo verification), blockbook, rpc, electrum, net, bns, web-ui (React/Vite), mobile (Expo). ops/ holds the nginx vhost, systemd unit and push.sh deploy script for digibyte.x/web.
84 lines
3.1 KiB
Markdown
84 lines
3.1 KiB
Markdown
# @dgb-wallet/core
|
||
|
||
DigiByte wallet primitives — no node required.
|
||
|
||
- BIP39 seed generation / validation / import
|
||
- BIP32 hierarchical deterministic derivation with DGB xpub/xprv version bytes
|
||
- BIP44 legacy, BIP49 P2SH-SegWit, BIP84 native SegWit, BIP86 Taproot
|
||
- Address encoding for `D…`, `S…`, `dgb1q…`, `dgb1p…`
|
||
- WIF (Wallet Import Format) import/export with network-byte validation
|
||
|
||
This package is the shared crypto core that the mobile app and browser
|
||
extension both depend on. All keygen and signing happens locally; the
|
||
package never talks to a network.
|
||
|
||
## Quick start
|
||
|
||
```bash
|
||
cd "D:\Program Files\DigiByte-Wallet\packages\core" # or wherever you put it
|
||
npm install
|
||
npm run demo
|
||
```
|
||
|
||
Generates a fresh 12-word seed and prints the first three addresses at
|
||
each of the four descriptor classes (legacy, P2SH-SegWit, native SegWit,
|
||
Taproot).
|
||
|
||
To recover from an existing seed and dump many candidate addresses,
|
||
generate a throwaway test seed first (never use a real seed):
|
||
|
||
```bash
|
||
# 1. generate a fresh throwaway seed and copy it from stdout
|
||
npm run demo
|
||
|
||
# 2. paste ONLY those 12 words back — nothing else, no placeholder text
|
||
npm run recover -- "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12"
|
||
```
|
||
|
||
> ⚠️ **Never paste a real seed phrase into a terminal, a chat, a support
|
||
> ticket, or any input field that isn't the wallet itself.** Terminal
|
||
> command history persists in `~/.bash_history` /
|
||
> `%USERPROFILE%\.bash_history` / PowerShell's `PSReadLine` history —
|
||
> anyone with access to your machine can recover it. Use a fresh test
|
||
> seed for any script that takes a seed as an argument.
|
||
|
||
Cross-check any produced address against `iancoleman.io/bip39` with
|
||
coin = "DGB - Digibyte" — they should match byte-for-byte.
|
||
|
||
## Network parameters
|
||
|
||
Sourced from `src/kernel/chainparams.cpp` `CMainParams` in
|
||
[DigiByte-Core/digibyte](https://github.com/DigiByte-Core/digibyte).
|
||
|
||
| | Mainnet | Testnet |
|
||
|---|---|---|
|
||
| bech32 HRP | `dgb` | `dgbt` |
|
||
| pubKeyHash | `0x1e` → `D…` | `0x7e` |
|
||
| scriptHash | `0x3f` → `S…` | `0x8c` |
|
||
| WIF | `0x80` | `0xef` |
|
||
| xpub / xprv | `0x0488b21e` / `0x0488ade4` | `0x043587cf` / `0x04358394` |
|
||
| SLIP-0044 coin type | **20** | 1 (all testnets) |
|
||
|
||
## Layout
|
||
|
||
```
|
||
src/
|
||
network.ts — DGB mainnet + testnet params, P2P constants
|
||
seed.ts — BIP39: generate, validate, mnemonic → seed
|
||
hd.ts — BIP32: root, account, address nodes
|
||
address.ts — P2PKH, P2SH-P2WPKH, P2WPKH, P2TR encoders
|
||
wif.ts — WIF import/export with version-byte validation
|
||
descriptor.ts — derivation-path strings, xpub/xprv export
|
||
index.ts — re-exports
|
||
|
||
scripts/
|
||
derive-from-seed.ts — generate wallet, show 3 addresses per path
|
||
recover-from-seed.ts — scan 5 accounts × 20 addresses per path
|
||
```
|
||
|
||
## Roadmap
|
||
|
||
- **`@dgb-wallet/p2p`** — DGB P2P client with BIP157/158 compact block filters
|
||
- **`@dgb-wallet/rpc`** — thin adapter for a local pruned Core (broadcast bastion)
|
||
- **`@dgb-wallet/blockbook`** — opt-in convenience-mode backend
|
||
- **`@dgb-wallet/psbt`** — transaction construction / signing on top of `core`
|