Comparing version 0.1.2 to 0.2.0
@@ -12,2 +12,4 @@ #!/usr/bin/env node | ||
let Xaddr = require("./_xaddr.js"); | ||
let coinType = 5; // TODO testnet? | ||
@@ -49,4 +51,7 @@ | ||
referenceKey = privateRoot | ||
//@ts-ignore | ||
.deriveChild(44 + HdKey.HARDENED_OFFSET) | ||
//@ts-ignore | ||
.deriveChild(coinType + HdKey.HARDENED_OFFSET) | ||
//@ts-ignore | ||
.deriveChild(account + HdKey.HARDENED_OFFSET) | ||
@@ -63,2 +68,3 @@ .deriveChild(direction) | ||
); | ||
//@ts-ignore | ||
referenceKey = directionRoot.deriveChild(index); | ||
@@ -71,3 +77,5 @@ let wif3 = await b58c.encode({ | ||
let accountRoot = privateRoot.derive(`m/44'/${coinType}'/${account}'`); | ||
//@ts-ignore | ||
directionRoot = accountRoot.deriveChild(direction); | ||
//@ts-ignore | ||
referenceKey = directionRoot.deriveChild(index); | ||
@@ -102,3 +110,6 @@ let wif4 = await b58c.encode({ | ||
let addr = await Xaddr.publicKeyToAddr(referenceKey.publicKey); | ||
console.info(wif1); | ||
console.error(addr); | ||
} | ||
@@ -105,0 +116,0 @@ |
@@ -12,2 +12,4 @@ #!/usr/bin/env node | ||
let Xaddr = require("./_xaddr.js"); | ||
let coinType = 5; // TODO testnet? | ||
@@ -111,10 +113,4 @@ | ||
}); | ||
let addr = await Xaddr.publicKeyToAddr(key.publicKey); | ||
let pubKeyHash = await publicKeyToPubKeyHash(key.publicKey); | ||
let pubKeyHashHex = uint8ArrayToHex(pubKeyHash); | ||
let addr = await b58c.encode({ | ||
// TODO version: opts?.version, | ||
pubKeyHash: pubKeyHashHex, | ||
}); | ||
console.info(`${hdpath}: ${wif}`); | ||
@@ -164,56 +160,3 @@ console.info(` ${addr}`); | ||
/** @type {import('node:crypto')} */ | ||
//@ts-ignore | ||
let Crypto = exports.crypto || require("node:crypto"); | ||
/** | ||
* @callback Sha256Sum | ||
* @param {Uint8Array|Buffer} u8 | ||
* @returns {Promise<Uint8Array|Buffer>} | ||
*/ | ||
/** @type {Sha256Sum} */ | ||
let sha256sum = async function (u8) { | ||
let arrayBuffer = await Crypto.subtle.digest("SHA-256", u8); | ||
let buf = new Uint8Array(arrayBuffer); | ||
return buf; | ||
}; | ||
/** @type {import('@dashincubator/ripemd160')} */ | ||
//@ts-ignore | ||
let RIPEMD160 = exports.RIPEMD160 || require("@dashincubator/ripemd160"); | ||
/** | ||
* @param {Uint8Array|Buffer} buf | ||
* @returns {Promise<Uint8Array>} - pubKeyHash buffer (no magic byte or checksum) | ||
*/ | ||
async function publicKeyToPubKeyHash(buf) { | ||
let shaBuf = await sha256sum(buf); | ||
let ripemd = RIPEMD160.create(); | ||
ripemd.update(shaBuf); | ||
let hash = ripemd.digest(); | ||
return hash; | ||
} | ||
/** | ||
* JS Buffer to Hex that works for Little-Endian CPUs (ARM, x64, x86, WASM) | ||
* @param {Buffer|Uint8Array} buf | ||
* @returns {String} - hex | ||
*/ | ||
function uint8ArrayToHex(buf) { | ||
/** @type {Array<String>} */ | ||
let hex = []; | ||
buf.forEach(function (b) { | ||
let h = b.toString(16); | ||
h = h.padStart(2, "0"); | ||
hex.push(h); | ||
}); | ||
return hex.join(""); | ||
} | ||
/** | ||
* @param {Array<String>} arr | ||
@@ -220,0 +163,0 @@ * @returns {Array<String>} |
@@ -41,2 +41,9 @@ #!/usr/bin/env node | ||
let xKeys = xKey.toJSON(); | ||
// TODO would other software know how to reconcile parent-child keys? | ||
//let xPrivKey = privateRoot.derive(`m/44'/${coinType}'/${account}'`); | ||
//let xPubKey = xPrivKey.deriveChild(0); | ||
//let xKeys = { | ||
// parentPrivate: xPrivKey.toJSON().xpriv, | ||
// childPublic: xPubKey.toJSON().xpub, | ||
//}; | ||
@@ -43,0 +50,0 @@ let xprvParts = await b58c.decode(xKeys.xpriv); |
{ | ||
"name": "dashhd", | ||
"version": "0.1.2", | ||
"version": "0.2.0", | ||
"description": "Browser, Node, Bundler, and CLI compatible Dash HD Wallet tools", | ||
"main": "index.js", | ||
"bin": { | ||
"dash-mnemonic-generate": "./bin/mnemonic-generate.js", | ||
"dash-mnemonic-to-seed": "./bin/mnemonic-to-seed.js", | ||
"dash-seed-to-wif": "./bin/seed-to-wif.js", | ||
"dash-seed-to-wifs": "./bin/seed-to-wifs.js", | ||
"dash-seed-to-xkeys": "./bin/seed-to-xkeys.js", | ||
"dash-wif-to-qr": "./bin/wif-to-qr.js", | ||
"dash-xprv-to-wif": "./bin/xprv-to-wif.js", | ||
"dash-xprv-to-wifs": "./bin/xprv-to-wifs.js", | ||
"dash-xpub-to-addr": "./bin/xpub-to-addr.js", | ||
"dash-xpub-to-addrs": "./bin/xpub-to-addrs.js" | ||
}, | ||
"files": [ | ||
@@ -7,0 +19,0 @@ "bin/", |
@@ -5,5 +5,41 @@ # dashhd.js | ||
# Table of Contents | ||
- CLI utils | ||
- dash-mnemonic-generate | ||
- dash-mnemonic-to-seed (salted or plain) | ||
- dash-seed-to-xkeys (extended public / private keys) | ||
- dash-seed-to-wif | ||
- dash-seed-to-wifs | ||
- dash-xprv-to-wif | ||
- dash-xprv-to-wifs | ||
- dash-xpub-to-addr | ||
- dash-xpub-to-addrs | ||
- Test Fixtures | ||
- Mnemonic | ||
- Salted Seed (password) | ||
- Plain Seed | ||
<!-- TODO | ||
- mnemonic-to-wifs | ||
- mnemonic-to-addrs | ||
--> | ||
# CLI | ||
## Install | ||
```sh | ||
npm install --location=global dashhd | ||
``` | ||
Or, use without installing: | ||
```sh | ||
npx -p dashd dash-mnemonic-generate | ||
``` | ||
## Usages | ||
```sh | ||
./bin/mnemonic-generate.js | ||
@@ -32,7 +68,23 @@ | ||
# Usage: seed-to-wif <./seed.hex> [account] [direction] [index] | ||
``` | ||
# XD3sNsdXjXvsnGtcbiqj3SCVdGHyHCRWFDaCAhWotxVfudSN4iRt | ||
```sh | ||
./bin/xprv-to-wif.js | ||
# Usage: xprv-to-wif <./xprv.txt> [index] | ||
``` | ||
```txt | ||
XD3sNsdXjXvsnGtcbiqj3SCVdGHyHCRWFDaCAhWotxVfudSN4iRt | ||
``` | ||
```sh | ||
./bin/xpub-to-addr.js | ||
# Usage: xpub-to-addr <./xpub.txt> [index] | ||
``` | ||
```txt | ||
XnRtALP7ns8stH6o79RQTiWGeW2SQeetxL | ||
``` | ||
```sh | ||
./bin/seed-to-wifs.js | ||
@@ -43,2 +95,8 @@ # Usage: seed-to-wif <./seed.hex> [fromPath] [toPath] | ||
```sh | ||
./bin/xprv-to-wifs.js | ||
# Usage: xprv-to-wif <./xprv.txt> [fromPath] [toPath] | ||
# Example: xprv-to-wif ./xprv.txt "0'/0/0" "1'/0/1" | ||
``` | ||
```txt | ||
@@ -56,2 +114,13 @@ m/44'/5'/0'/0/0: XKHiWYkmDkNnWGP756UCGcuZ21mHGeYdWeCBBHCBGZaf3NYw1SAz | ||
```sh | ||
./bin/xpub-to-addrs.js | ||
# Usage: xpub-to-addrs <./xpub.txt> [startIndex] [endIndex] | ||
# Example: xpub-to-addrs ./xpub.txt 0 1 | ||
``` | ||
```txt | ||
XjxyR1gve94LuKqkMLEeqJbEVM5B5q1ZSx | ||
XxRrwh1xBWig9rfLyiy494u2vj6YXQMsH7 | ||
``` | ||
# Fixtures | ||
@@ -107,2 +176,4 @@ | ||
XnRtALP7ns8stH6o79RQTiWGeW2SQeetxL (Addr) | ||
m/44'/5'/0'/0/1: XJ8RCLHTg55mBbvv5mF5Ja3DikzBYWxHn5DvKyJoFm2cufBdUSc2 | ||
XeGtfXhcgeyLS2EtAnrkbEKNmVVDupZV6p | ||
@@ -114,3 +185,3 @@ (account 2, internal/change, address 2) | ||
## Seed, xprv, WIFs, & Addrs (Empty Password) | ||
## Seed, xprv, WIFs, & Addrs (With Password) | ||
@@ -150,2 +221,4 @@ If the mnemonic is used with the "password" (or "secret") `supersecret123`, it | ||
XjxyR1gve94LuKqkMLEeqJbEVM5B5q1ZSx (Addr) | ||
m/44'/5'/0'/0/1: XCsy8Qw1fLH7C1UxLjBfTfLpn8DMRK1TMNNE2a5J1F4TyE5UApcK | ||
XxRrwh1xBWig9rfLyiy494u2vj6YXQMsH7 | ||
@@ -152,0 +225,0 @@ (account 2, internal/change, address 2) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
28310
16
611
229