diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9139ffd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+public
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..1592248
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,6 @@
+# Files Prettier should not format
+**/*.log
+**/.DS_Store
+*.
+dist
+node_modules
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..df8e147
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,9 @@
+{
+ "printWidth": 80,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "bracketSpacing": true,
+ "proseWrap": "always",
+ "semi": false,
+ "trailingComma": "all"
+ }
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..361493b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2022 jojobyte
+Copyright (c) 2022 Dash Incubator
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b9fd732
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# CrowdNode UI
+### a Graphical User Interface (GUI) for [CrowdNode.js](https://github.com/dashhive/crowdnode.js) using Vanilla HTML, CSS & JS
+
+Should meet the requirements from https://github.com/dashhive/crowdnode-ui/issues/1 & https://github.com/dashhive/crowdnode.js/issues/47
+
diff --git a/index.css b/index.css
new file mode 100644
index 0000000..576aeca
--- /dev/null
+++ b/index.css
@@ -0,0 +1,216 @@
+
+:root {
+ color-scheme: light dark;
+ --c: #111; /* base interactive color */
+ --oc: #222; /* off interactive color */
+ --hc: #555; /* highlight color */
+ --d: #242424; /* base bg color */
+ --l: #eee; /* base color */
+ --bgc: var(--d);
+ --fc: var(--l);
+
+ --info: #0bf;
+ --note: #888;
+ --dang: #f55; /* danger */
+ --succ: #5b5; /* success */
+
+ --fb: -apple-system, BlinkMacSystemFont, Avenir, "Avenir Next",
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
+ "Droid Sans", "Helvetica Neue", sans-serif;
+ --fm: "IBM Plex Mono", Consolas, "Andale Mono WT", "Andale Mono",
+ "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono",
+ "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco,
+ "Courier New", Courier, monospace;
+ font-family: var(--fb);
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 400;
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-text-size-adjust: 100%;
+}
+
+* { box-sizing: border-box; }
+
+@media (prefers-color-scheme: light) {
+ html:not(.it),img,video { filter: invert(95%) hue-rotate(180deg); }
+}
+@media (prefers-color-scheme: dark) {
+ html.it,img,video { filter: invert(95%) hue-rotate(180deg); }
+}
+
+body {
+ background: var(--bgc);
+ color: var(--fc);
+ margin: 0;
+ display: flex;
+ flex-direction: column;
+ place-items: center;
+ min-width: 320px;
+ min-height: 100vh;
+}
+header {
+ margin: 0 auto;
+ padding: 0 2rem;
+ max-width: 1100px;
+ min-height: 85px;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ flex-direction: column-reverse;
+}
+main {
+ margin: 0 auto;
+ padding: 0 2rem;
+ max-width: 1100px;
+ /* min-height: 70vh; */
+ width: 100%;
+}
+h1 { text-align: center; }
+main form {
+ display: flex;
+ margin: 0 auto 1rem;
+ gap: .5rem;
+}
+form fieldset { border: 0;
+ display: flex;
+ flex-direction: column;
+ min-width: 200px;
+ width: 100%;
+ justify-content: left;
+ gap: .5rem;
+}
+/* label { display: flex;
+ flex-direction: row;
+ min-width: 100px;
+} */
+button {
+ background-color: var(--oc);
+ color: var(--fc);
+ /* border-radius: 8px; */
+ border: 1px solid var(--fc);
+ padding: 0.8rem 1.2rem;
+ font-size: 1.1em;
+ font-weight: 500;
+ font-family: inherit;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:disabled {
+ background-color: var(--d);
+ color: var(--note);
+ border-color: var(--note);
+ cursor: not-allowed;
+}
+button:not(:disabled):hover {
+ background-color: var(--c);
+ color: var(--info);
+ border-color: var(--info);
+}
+button:not(:disabled):focus,
+button:not(:disabled):focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+}
+input, select {
+ background-color: var(--c);
+ color: var(--fc);
+ border: 1px solid var(--hc);
+ text-align: center;
+ line-height: 1;
+ font-size: 1.5rem;
+ width: 100%;
+ height: 3rem;
+ /* max-width: 24rem; */
+}
+table {
+ width: 100%;
+ table-layout: fixed;
+}
+table > tbody td {
+ padding: 1rem;
+ word-break: break-word;
+}
+table th:first-child,
+table td:first-child {
+ width: 120px;
+}
+a {
+ color: var(--info);
+ text-decoration: none;
+}
+a:hover {
+ color: var(--info);
+ text-decoration: dashed;
+ text-decoration-line: underline;
+}
+pre {
+ background-color: var(--c);
+ font-family: var(--fm);
+ font-size: 14px;
+ padding: 1rem;
+ max-width: 100%;
+ /* overflow: auto; */
+}
+pre code {
+ white-space: pre-line;
+}
+pre code > * {
+ display: inline;
+}
+pre code .dem {
+ color: var(--note);
+}
+pre code em {
+ color: var(--dang);
+ font-style: normal;
+}
+pre code address {
+ color: var(--succ);
+ font-style: normal;
+}
+pre code output {
+ color: var(--info);
+ font-style: italic;
+}
+form[name="network"] {
+ justify-content: center;
+}
+
+.hide {
+ display: none;
+}
+.row {
+ flex-direction: row;
+}
+.col {
+ flex-direction: column;
+}
+.msg {
+ display: flex;
+ flex-direction: column;
+}
+.center {
+ align-content: center;
+ justify-items: center;
+ text-align: center;
+}
+.center form {
+ width: 100%;
+ flex-direction: column;
+ margin-bottom: 0;
+}
+.center input {
+ max-width: initial;
+ line-height: 2;
+}
+@media (min-width: 650px) {
+ form {
+ max-width: 60%;
+ }
+ header {
+ flex-direction: row;
+ }
+}
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e57d6b5
--- /dev/null
+++ b/index.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+ CrowdNode.js UI
+
+
+
+
+
+
+ CrowdNode.js UI
+
+
+
+
+
+
+
+ Enter a valid Ðash address above to get the CrowdNode balance.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100755
index 0000000..d775cea
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,41 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "target": "esnext",
+ "module": "esnext",
+ "moduleResolution": "node",
+ "maxNodeModuleJsDepth": 20,
+ "allowSyntheticDefaultImports": true,
+ "lib": [
+ "DOM",
+ "DOM.Iterable",
+ "ESNext",
+ "WebWorker"
+ ],
+ "declaration": true,
+ "declarationDir": ".",
+ "declarationMap": true,
+ "allowJs": true,
+ "checkJs": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ // "forceConsistentCasingInFileNames": true,
+ // "strict": true,
+ // "strictNullChecks": true,
+ // "strictFunctionTypes": true,
+ // "noImplicitAny": true,
+ // "alwaysStrict": true,
+ "skipLibCheck": true,
+ // "types": ["bun-types"],
+ "types": ["node"],
+ "typeRoots": [
+ "typings",
+ "node_modules/@types",
+ // "node_modules/dash"
+ ]
+ },
+ "include": ["*.js", "bin/**/*.js", "lib/**/*.js", "src/**/*.js"],
+ "exclude": [
+ "node_modules"
+ ]
+}
\ No newline at end of file
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..ad30153
--- /dev/null
+++ b/main.js
@@ -0,0 +1,129 @@
+// import * as CrowdNode from './node_modules/crowdnode/crowdnode.js'
+// import * as CrowdNode from 'crowdnode'
+// import { CrowdNode } from "crowdnode";
+
+// let DashKeys = window.DashKeys;
+
+let myPrivateKey
+
+// @ts-ignore
+CrowdNode.init({
+ baseUrl: 'https://dashnode.duckdns.org/api/cors/app.crowdnode.io',
+ insightBaseUrl: 'https://insight.dash.org/insight-api',
+ dashsocketBaseUrl: 'https://insight.dash.org/socket.io',
+ dashsightBaseUrl: 'https://dashsight.dashincubator.dev/insight-api',
+})
+
+async function getPrivateKey(wif) {
+ // Dash Core Lib Implementation
+ // @ts-ignore
+ // const { PrivateKey } = dashcore;
+ // const key = new PrivateKey();
+ // const address = key.toAddress().toString();
+ // // const WIF = key.toWIF().trim();
+
+ let addr
+
+ if (!wif) {
+ wif = await DashKeys.generate();
+ }
+ // ex: "XEez2HcUhEomZoxzgH7H3LxnRAkqF4kRCVE8mW9q4YSUV4yuADec"
+
+ try {
+ addr = await DashKeys.wifToAddr(wif);
+ } catch (err) {
+ console.error('Invalid private key WIF')
+ }
+ // ex: "Xjn9fksLacciynroVhMLKGXMqMJtzJNLvQ"
+
+ return { wif, addr }
+}
+
+async function getBalance(address) {
+ // @ts-ignore
+ return await CrowdNode.http.GetBalance(
+ address
+ );
+}
+
+// @ts-ignore
+console.log('CrowdNode', CrowdNode)
+
+// @ts-ignore
+document.privKeyForm
+ .addEventListener('input', async event => {
+ console.log('change privKeyForm', event)
+ // @ts-ignore
+ document.privKeyForm.querySelector('button').disabled = false
+ })
+document.privKeyForm
+ .addEventListener('submit', async event => {
+ event.preventDefault()
+ // event.stopPropagation()
+ const privateKey = event.target.privateKey?.value
+
+ myPrivateKey = window.myPrivateKey = await getPrivateKey(privateKey)
+
+ if (myPrivateKey) {
+ console.log('privKey', myPrivateKey)
+ // @ts-ignore
+ document.privKeyForm.querySelector('button').disabled = true
+ // @ts-ignore
+ document.initCrowdNodeForm.querySelector('button').disabled = false
+ // @ts-ignore
+ document.balanceForm.querySelector('button').disabled = false
+ }
+ })
+
+// @ts-ignore
+document.initCrowdNodeForm.addEventListener('submit', async event => {
+ event.preventDefault()
+ // event.stopPropagation()
+
+ // const privKey = getPrivateKey()
+ // @ts-ignore
+ const { hotwallet } = CrowdNode.main;
+
+ if (myPrivateKey) {
+ // @ts-ignore
+ let cnSignup = await CrowdNode.signup(myPrivateKey.wif, hotwallet);
+ // @ts-ignore
+ let cnAccept = await CrowdNode.accept(myPrivateKey.wif, hotwallet);
+
+ console.log('privKey', myPrivateKey, cnSignup, cnAccept)
+ }
+})
+
+// @ts-ignore
+document.balanceForm.addEventListener('submit', async event => {
+ event.preventDefault()
+ // event.stopPropagation()
+
+ // const addr = event.target.address?.value
+
+ if (myPrivateKey) {
+ const { addr } = myPrivateKey
+ let balance = await getBalance(addr)
+
+ if (balance?.TotalBalance) {
+ let msg = `Current CrowdNode balance for "${
+ addr
+ }" is Đ${
+ balance.TotalBalance
+ } with ${
+ balance.TotalDividend
+ } in dividends.`
+
+ console.info(
+ msg,
+ balance
+ );
+
+ document.querySelector('p.balance').textContent = msg
+ } else {
+ console.warn(
+ balance.value
+ );
+ }
+ }
+})
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..82f4ac3
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1080 @@
+{
+ "name": "crowdnode-ui",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "crowdnode-ui",
+ "version": "0.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "crowdnode": "^1.8.0",
+ "dashkeys": "^0.3.1",
+ "dashsight": "^1.3.5",
+ "dashwallet": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@dashevo/dashcore-lib": {
+ "version": "0.19.44",
+ "resolved": "https://registry.npmjs.org/@dashevo/dashcore-lib/-/dashcore-lib-0.19.44.tgz",
+ "integrity": "sha512-t22zf/wSpV5+kgr+rdiEnUCPmX7TEN30s8aLFNPYtPxJb17kLLGBHp+zwC+NQSKjXliT6T8XwX4cqoDT/IikLg==",
+ "dependencies": {
+ "@dashevo/x11-hash-js": "^1.0.2",
+ "@types/node": "^12.12.47",
+ "bloom-filter": "^0.2.0",
+ "bls-signatures": "^0.2.5",
+ "bn.js": "^4.12.0",
+ "bs58": "=4.0.1",
+ "elliptic": "^6.5.4",
+ "inherits": "=2.0.1",
+ "lodash": "^4.17.20",
+ "ripemd160": "^2.0.2",
+ "unorm": "^1.6.0"
+ }
+ },
+ "node_modules/@dashevo/x11-hash-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@dashevo/x11-hash-js/-/x11-hash-js-1.0.2.tgz",
+ "integrity": "sha512-3vvnZweBca4URBXHF+FTrM4sdTpp3IMt73G1zUKQEdYm/kJkIKN94qpFai7YZDl87k64RCH+ckRZk6ruQPz5KQ=="
+ },
+ "node_modules/@dashincubator/base58check": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@dashincubator/base58check/-/base58check-1.3.1.tgz",
+ "integrity": "sha512-v2vYOwsTmbfaADJUg+0Vsw61/P5XtdDnjZtImDIC5DePIA/2lT9V+00nR5GsKfwc40WQ02tFlN+xoFt9cx+P7A==",
+ "bin": {
+ "base58check": "bin/base58check.js"
+ }
+ },
+ "node_modules/@dashincubator/ripemd160": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@dashincubator/ripemd160/-/ripemd160-2.3.0.tgz",
+ "integrity": "sha512-SfaUhvXti0Ut6ZhlAwurrRAG56phxqWozj72Hixx/v3LSQj1/wjkgTuDaexil672CzLD+RRWoPgp41BSM+DJJA=="
+ },
+ "node_modules/@dashincubator/secp256k1": {
+ "version": "1.7.1-0",
+ "resolved": "https://registry.npmjs.org/@dashincubator/secp256k1/-/secp256k1-1.7.1-0.tgz",
+ "integrity": "sha512-ximJhou6YwJw0UHfsfeoDv1svhgriaWZrTV2yKhdZbs1BR/VaChGt+c+qpvQwPuMiP8MoW5B7n3HbXTtHLhS/w=="
+ },
+ "node_modules/@root/base58check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@root/base58check/-/base58check-1.0.1.tgz",
+ "integrity": "sha512-aK2kF0968I2xwewyYOHx5Fq1DVkRIsfb1lZmkjbbv06+dEa1bLpMUwHK/rpK46T43UoiZZU8X0Uv/JyZVNLqig==",
+ "dependencies": {
+ "base-x": "^4.0.0"
+ },
+ "bin": {
+ "base58check": "bin/base58check.js"
+ }
+ },
+ "node_modules/@root/base58check/node_modules/base-x": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
+ "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
+ },
+ "node_modules/@root/passphrase": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@root/passphrase/-/passphrase-1.1.0.tgz",
+ "integrity": "sha512-uokMKGQ+wUiqHpvxWRZNj5QtSGvoLOfOND/ny7NZaV2+48mahzJPUbLE9y/xhf/536mi9UvwlnbgTyVqedVHUA=="
+ },
+ "node_modules/@root/request": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@root/request/-/request-1.9.2.tgz",
+ "integrity": "sha512-wVaL9yVV9oDR9UNbPZa20qgY+4Ch6YN8JUkaE4el/uuS5dmhD8Lusm/ku8qJVNtmQA56XLzEDCRS6/vfpiHK2A=="
+ },
+ "node_modules/@types/node": {
+ "version": "12.20.55",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="
+ },
+ "node_modules/base-x": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/bip39": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz",
+ "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==",
+ "dependencies": {
+ "@types/node": "11.11.6",
+ "create-hash": "^1.1.0",
+ "pbkdf2": "^3.0.9",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "node_modules/bip39/node_modules/@types/node": {
+ "version": "11.11.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz",
+ "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ=="
+ },
+ "node_modules/bloom-filter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bloom-filter/-/bloom-filter-0.2.0.tgz",
+ "integrity": "sha512-RMG2RpnKczVzRsEYSPaT5rKsyj0w5/wpQRjaW4vOMe1WyUDQpoqxjNc10uROEjdhu63ytRt6aFRPXFePi/Rd7A=="
+ },
+ "node_modules/bls-signatures": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/bls-signatures/-/bls-signatures-0.2.5.tgz",
+ "integrity": "sha512-5TzQNCtR4zWE4lM08EOMIT8l3b4h8g5LNKu50fUYP1PnupaLGSLklAcTto4lnH7VXpyhsar+74L9wNJII4E/4Q=="
+ },
+ "node_modules/bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+ },
+ "node_modules/brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
+ },
+ "node_modules/bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
+ "dependencies": {
+ "base-x": "^3.0.2"
+ }
+ },
+ "node_modules/bs58check": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
+ "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
+ "dependencies": {
+ "bs58": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dependencies": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "node_modules/create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dependencies": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "node_modules/crowdnode": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/crowdnode/-/crowdnode-1.8.0.tgz",
+ "integrity": "sha512-PgP7foeXhQ+omQk6iw92n59zQeTVJ/MzVOQi5rYU4tmvHoRRMD6mbHczNxj7zETZIxxMURRPi38FnKPYtr4j+w==",
+ "dependencies": {
+ "@dashevo/dashcore-lib": "^0.19.41",
+ "dashsight": "^1.3.0-0"
+ },
+ "bin": {
+ "crowdnode": "bin/crowdnode.js"
+ },
+ "optionalDependencies": {
+ "@root/request": "^1.9.1",
+ "dotenv": "^16.0.1",
+ "qrcode-svg": "^1.1.0",
+ "tough-cookie": "^4.0.0",
+ "ws": "^8.8.0"
+ }
+ },
+ "node_modules/dashkeys": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/dashkeys/-/dashkeys-0.3.1.tgz",
+ "integrity": "sha512-MErh3/ll7PcsW7e674CvVdF6nSzZSQi8Ryz9fhGvO1kfuou/IWvS+CNUYwxAdNz3PHNbXJ37QVV7QFHJhO1/yA==",
+ "dependencies": {
+ "@dashincubator/base58check": "^1.2.0",
+ "@dashincubator/ripemd160": "^2.3.0",
+ "@dashincubator/secp256k1": "^1.7.1-0"
+ },
+ "bin": {
+ "dashkeys": "bin/dashkeys.js"
+ }
+ },
+ "node_modules/dashsight": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/dashsight/-/dashsight-1.3.5.tgz",
+ "integrity": "sha512-IAY0KCRbxQ65CIKiRoYRepfh4/Vo1uk+/RIQfMQ5Z08R/r3DNPtZjDazgDaIozJIj0pvO1aYURkXWDE83+xf/Q==",
+ "dependencies": {
+ "@root/request": "^1.9.2"
+ },
+ "bin": {
+ "dashsight-balance": "bin/balance.js",
+ "dashsight-instantsend": "bin/instantsend.js",
+ "dashsight-tx": "bin/tx.js",
+ "dashsight-txs": "bin/txs.js",
+ "dashsight-utxos": "bin/utxos.js"
+ },
+ "optionalDependencies": {
+ "dotenv": "^16.0.1"
+ }
+ },
+ "node_modules/dashwallet": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/dashwallet/-/dashwallet-0.2.1.tgz",
+ "integrity": "sha512-lBNJFm6sWhlutSTIdPufDenHKKg4oV5d/QD7XESx3hP94deVvH0xF2Bs6y/AKwzapqPGsxCHW24ITpnuRGO8yg==",
+ "dependencies": {
+ "@dashevo/dashcore-lib": "^0.19.44",
+ "@root/base58check": "^1.0.0",
+ "@root/passphrase": "^1.1.0",
+ "bip39": "^3.0.4",
+ "dashsight": "^1.3.5",
+ "hdkey": "github:dashhive/hdkey",
+ "ripemd160": "^2.0.2",
+ "secp256k1": "^4.0.3"
+ },
+ "bin": {
+ "dashwallet": "bin/wallet.js"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.0.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
+ "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
+ "optional": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dependencies": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/elliptic/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash-base/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "node_modules/hash.js/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/hdkey": {
+ "version": "2.0.1",
+ "resolved": "git+ssh://git@github.com/dashhive/hdkey.git#36ce1e866858df50e1d79950b692f2806e13d4ef",
+ "license": "MIT",
+ "dependencies": {
+ "bs58check": "^2.1.2",
+ "ripemd160": "^2.0.2",
+ "safe-buffer": "^5.1.1",
+ "secp256k1": "^4.0.0"
+ }
+ },
+ "node_modules/hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "dependencies": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA=="
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "node_modules/md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "node_modules/minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "node_modules/minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+ },
+ "node_modules/node-addon-api": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
+ "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
+ },
+ "node_modules/node-gyp-build": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
+ "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "dependencies": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "optional": true
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/qrcode-svg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/qrcode-svg/-/qrcode-svg-1.1.0.tgz",
+ "integrity": "sha512-XyQCIXux1zEIA3NPb0AeR8UMYvXZzWEhgdBgBjH9gO7M48H9uoHzviNz8pXw3UzrAcxRRRn9gxHewAVK7bn9qw==",
+ "optional": true,
+ "bin": {
+ "qrcode-svg": "bin/qrcode-svg.js"
+ }
+ },
+ "node_modules/querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "optional": true
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readable-stream/node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "optional": true
+ },
+ "node_modules/ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dependencies": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/secp256k1": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "elliptic": "^6.5.4",
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
+ "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
+ "optional": true,
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "optional": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/unorm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
+ "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "optional": true,
+ "dependencies": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/ws": {
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+ "optional": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ }
+ },
+ "dependencies": {
+ "@dashevo/dashcore-lib": {
+ "version": "0.19.44",
+ "resolved": "https://registry.npmjs.org/@dashevo/dashcore-lib/-/dashcore-lib-0.19.44.tgz",
+ "integrity": "sha512-t22zf/wSpV5+kgr+rdiEnUCPmX7TEN30s8aLFNPYtPxJb17kLLGBHp+zwC+NQSKjXliT6T8XwX4cqoDT/IikLg==",
+ "requires": {
+ "@dashevo/x11-hash-js": "^1.0.2",
+ "@types/node": "^12.12.47",
+ "bloom-filter": "^0.2.0",
+ "bls-signatures": "^0.2.5",
+ "bn.js": "^4.12.0",
+ "bs58": "=4.0.1",
+ "elliptic": "^6.5.4",
+ "inherits": "=2.0.1",
+ "lodash": "^4.17.20",
+ "ripemd160": "^2.0.2",
+ "unorm": "^1.6.0"
+ }
+ },
+ "@dashevo/x11-hash-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@dashevo/x11-hash-js/-/x11-hash-js-1.0.2.tgz",
+ "integrity": "sha512-3vvnZweBca4URBXHF+FTrM4sdTpp3IMt73G1zUKQEdYm/kJkIKN94qpFai7YZDl87k64RCH+ckRZk6ruQPz5KQ=="
+ },
+ "@dashincubator/base58check": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@dashincubator/base58check/-/base58check-1.3.1.tgz",
+ "integrity": "sha512-v2vYOwsTmbfaADJUg+0Vsw61/P5XtdDnjZtImDIC5DePIA/2lT9V+00nR5GsKfwc40WQ02tFlN+xoFt9cx+P7A=="
+ },
+ "@dashincubator/ripemd160": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@dashincubator/ripemd160/-/ripemd160-2.3.0.tgz",
+ "integrity": "sha512-SfaUhvXti0Ut6ZhlAwurrRAG56phxqWozj72Hixx/v3LSQj1/wjkgTuDaexil672CzLD+RRWoPgp41BSM+DJJA=="
+ },
+ "@dashincubator/secp256k1": {
+ "version": "1.7.1-0",
+ "resolved": "https://registry.npmjs.org/@dashincubator/secp256k1/-/secp256k1-1.7.1-0.tgz",
+ "integrity": "sha512-ximJhou6YwJw0UHfsfeoDv1svhgriaWZrTV2yKhdZbs1BR/VaChGt+c+qpvQwPuMiP8MoW5B7n3HbXTtHLhS/w=="
+ },
+ "@root/base58check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@root/base58check/-/base58check-1.0.1.tgz",
+ "integrity": "sha512-aK2kF0968I2xwewyYOHx5Fq1DVkRIsfb1lZmkjbbv06+dEa1bLpMUwHK/rpK46T43UoiZZU8X0Uv/JyZVNLqig==",
+ "requires": {
+ "base-x": "^4.0.0"
+ },
+ "dependencies": {
+ "base-x": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz",
+ "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw=="
+ }
+ }
+ },
+ "@root/passphrase": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@root/passphrase/-/passphrase-1.1.0.tgz",
+ "integrity": "sha512-uokMKGQ+wUiqHpvxWRZNj5QtSGvoLOfOND/ny7NZaV2+48mahzJPUbLE9y/xhf/536mi9UvwlnbgTyVqedVHUA=="
+ },
+ "@root/request": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@root/request/-/request-1.9.2.tgz",
+ "integrity": "sha512-wVaL9yVV9oDR9UNbPZa20qgY+4Ch6YN8JUkaE4el/uuS5dmhD8Lusm/ku8qJVNtmQA56XLzEDCRS6/vfpiHK2A=="
+ },
+ "@types/node": {
+ "version": "12.20.55",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz",
+ "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="
+ },
+ "base-x": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
+ "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "bip39": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz",
+ "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==",
+ "requires": {
+ "@types/node": "11.11.6",
+ "create-hash": "^1.1.0",
+ "pbkdf2": "^3.0.9",
+ "randombytes": "^2.0.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "11.11.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz",
+ "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ=="
+ }
+ }
+ },
+ "bloom-filter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bloom-filter/-/bloom-filter-0.2.0.tgz",
+ "integrity": "sha512-RMG2RpnKczVzRsEYSPaT5rKsyj0w5/wpQRjaW4vOMe1WyUDQpoqxjNc10uROEjdhu63ytRt6aFRPXFePi/Rd7A=="
+ },
+ "bls-signatures": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/bls-signatures/-/bls-signatures-0.2.5.tgz",
+ "integrity": "sha512-5TzQNCtR4zWE4lM08EOMIT8l3b4h8g5LNKu50fUYP1PnupaLGSLklAcTto4lnH7VXpyhsar+74L9wNJII4E/4Q=="
+ },
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
+ },
+ "bs58": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
+ "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==",
+ "requires": {
+ "base-x": "^3.0.2"
+ }
+ },
+ "bs58check": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
+ "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
+ "requires": {
+ "bs58": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "crowdnode": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/crowdnode/-/crowdnode-1.8.0.tgz",
+ "integrity": "sha512-PgP7foeXhQ+omQk6iw92n59zQeTVJ/MzVOQi5rYU4tmvHoRRMD6mbHczNxj7zETZIxxMURRPi38FnKPYtr4j+w==",
+ "requires": {
+ "@dashevo/dashcore-lib": "^0.19.41",
+ "@root/request": "^1.9.1",
+ "dashsight": "^1.3.0-0",
+ "dotenv": "^16.0.1",
+ "qrcode-svg": "^1.1.0",
+ "tough-cookie": "^4.0.0",
+ "ws": "^8.8.0"
+ }
+ },
+ "dashkeys": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/dashkeys/-/dashkeys-0.3.1.tgz",
+ "integrity": "sha512-MErh3/ll7PcsW7e674CvVdF6nSzZSQi8Ryz9fhGvO1kfuou/IWvS+CNUYwxAdNz3PHNbXJ37QVV7QFHJhO1/yA==",
+ "requires": {
+ "@dashincubator/base58check": "^1.2.0",
+ "@dashincubator/ripemd160": "^2.3.0",
+ "@dashincubator/secp256k1": "^1.7.1-0"
+ }
+ },
+ "dashsight": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/dashsight/-/dashsight-1.3.5.tgz",
+ "integrity": "sha512-IAY0KCRbxQ65CIKiRoYRepfh4/Vo1uk+/RIQfMQ5Z08R/r3DNPtZjDazgDaIozJIj0pvO1aYURkXWDE83+xf/Q==",
+ "requires": {
+ "@root/request": "^1.9.2",
+ "dotenv": "^16.0.1"
+ }
+ },
+ "dashwallet": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/dashwallet/-/dashwallet-0.2.1.tgz",
+ "integrity": "sha512-lBNJFm6sWhlutSTIdPufDenHKKg4oV5d/QD7XESx3hP94deVvH0xF2Bs6y/AKwzapqPGsxCHW24ITpnuRGO8yg==",
+ "requires": {
+ "@dashevo/dashcore-lib": "^0.19.44",
+ "@root/base58check": "^1.0.0",
+ "@root/passphrase": "^1.1.0",
+ "bip39": "^3.0.4",
+ "dashsight": "^1.3.5",
+ "hdkey": "github:dashhive/hdkey",
+ "ripemd160": "^2.0.2",
+ "secp256k1": "^4.0.3"
+ }
+ },
+ "dotenv": {
+ "version": "16.0.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
+ "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
+ "optional": true
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "hdkey": {
+ "version": "git+ssh://git@github.com/dashhive/hdkey.git#36ce1e866858df50e1d79950b692f2806e13d4ef",
+ "from": "hdkey@github:dashhive/hdkey",
+ "requires": {
+ "bs58check": "^2.1.2",
+ "ripemd160": "^2.0.2",
+ "safe-buffer": "^5.1.1",
+ "secp256k1": "^4.0.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA=="
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+ },
+ "node-addon-api": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
+ "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
+ },
+ "node-gyp-build": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz",
+ "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg=="
+ },
+ "pbkdf2": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
+ "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+ "optional": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "optional": true
+ },
+ "qrcode-svg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/qrcode-svg/-/qrcode-svg-1.1.0.tgz",
+ "integrity": "sha512-XyQCIXux1zEIA3NPb0AeR8UMYvXZzWEhgdBgBjH9gO7M48H9uoHzviNz8pXw3UzrAcxRRRn9gxHewAVK7bn9qw==",
+ "optional": true
+ },
+ "querystringify": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "optional": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "optional": true
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "secp256k1": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz",
+ "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==",
+ "requires": {
+ "elliptic": "^6.5.4",
+ "node-addon-api": "^2.0.0",
+ "node-gyp-build": "^4.2.0"
+ }
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
+ "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
+ "optional": true,
+ "requires": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.2.0",
+ "url-parse": "^1.5.3"
+ }
+ },
+ "universalify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "optional": true
+ },
+ "unorm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
+ "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA=="
+ },
+ "url-parse": {
+ "version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+ "optional": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "ws": {
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
+ "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
+ "optional": true,
+ "requires": {}
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..e8121f4
--- /dev/null
+++ b/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "crowdnode-ui",
+ "description": "a Graphical User Interface (GUI) for CrowdNode.js",
+ "license": "MIT",
+ "version": "0.0.0",
+ "keywords": [
+ "crowdnode",
+ "dash",
+ "cryptocurrency",
+ "gui",
+ "html",
+ "css",
+ "js",
+ "vanilla"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/dashhive/crowdnode-ui.git"
+ },
+ "author": "jojobyte (https://jojo.io/)",
+ "type": "module",
+ "private": true,
+ "main": "index.html",
+ "scripts": {
+ "start": "npx serve -l 5555 ."
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "dependencies": {
+ "crowdnode": "^1.8.0",
+ "dashkeys": "^0.3.1",
+ "dashsight": "^1.3.5",
+ "dashwallet": "^0.2.1"
+ }
+}
diff --git a/utils.js b/utils.js
new file mode 100644
index 0000000..39f5b35
--- /dev/null
+++ b/utils.js
@@ -0,0 +1,123 @@
+// From https://github.com/dashhive/dashkeys.js#helpful-helper-functions
+
+// let Base58Check = require("@dashincubator/base58check").Base58Check;
+let dash58check = Base58Check.create({
+ pubKeyHashVersion: "4c", // "8c" for dash testnet, "00" for bitcoin main
+ privateKeyVersion: "cc", // "ef" for dash testnet, "80" for bitcoin main
+});
+
+/**
+* @param {String} addr
+* @returns {Promise} - p2pkh (no magic byte or checksum)
+*/
+async function addrToPubKeyHash(addr) {
+ let b58cAddr = dash58check.decode(addr);
+ let pubKeyHash = hexToUint8Array(b58cAddr.pubKeyHash);
+ return pubKeyHash;
+}
+
+/**
+* @param {Uint8Array} pubKeyHash - no magic byte or checksum
+* @returns {Promise} - Pay Addr
+*/
+async function pubKeyHashToAddr(pubKeyHash) {
+ let hex = uint8ArrayToHex(pubKeyHash);
+ let addr = await dash58check.encode({ pubkeyHash: hex });
+ return addr;
+}
+
+/**
+* @param {String} wif
+* @returns {Promise} - private key (no magic byte or checksum)
+*/
+async function wifToPrivateKey(wif) {
+ let b58cWif = dash58check.decode(wif);
+ let privateKey = hexToUint8Array(b58cWif.privateKey);
+ return privateKey;
+}
+
+/**
+* @param {Uint8Array} privKey
+* @returns {Promise} - wif
+*/
+async function privateKeyToWif(privKey) {
+ let privateKey = uint8ArrayToHex(privKey);
+
+ let wif = await dash58check.encode({ privateKey: privateKey });
+ return wif;
+}
+
+/**
+* @param {String} addrOrWif
+*/
+async function decode(addrOrWif) {
+ let parts = await dash58check.decode(addrOrWif);
+ let check = await dash58check.checksum(parts);
+ let valid = parts.check === check;
+
+ parts.valid = valid;
+ //parts.privateKeyBuffer = hexToUint8Array(parts.privateKey);
+ //parts.pubKeyHashBuffer = hexToUint8Array(parts.pubKeyHash);
+
+ return parts;
+}
+
+/**
+* @param {Uint8Array} buf
+* @returns {String} - Pay Addr or WIF
+* @throws {Error}
+*/
+async function encode(buf) {
+ let hex = uint8ArrayToHex(buf);
+
+ if (32 === buf.length) {
+ return await dash58check.encode({
+ privateKey: hex,
+ });
+ }
+
+ if (20 === buf.length) {
+ return await dash58check.encode({
+ pubKeyHash: hex,
+ });
+ }
+
+ throw new Error("buffer length must be (PubKeyHash) or 32 (PrivateKey)");
+}
+
+/**
+* JS Buffer to Hex that works in browsers and Little-Endian
+* (which is most of the - ARM, x64, x86, WASM, etc)
+* @param {Uint8Array} buf
+* @returns {String} - hex
+*/
+function uint8ArrayToHex(buf) {
+ /** @type {Array} */
+ let hex = [];
+
+ buf.forEach(function (b) {
+ let c = b.toString(16).padStart(2, "0");
+ hex.push(c);
+ });
+
+ return hex.join("");
+}
+
+/**
+* Hex to JS Buffer that works in browsers and Little-Endian CPUs
+* (which is most of the - ARM, x64, x86, WASM, etc)
+* @param {String} hex
+* @returns {Uint8Array} - JS Buffer (Node and Browsers)
+*/
+function hexToUint8Array(hex) {
+ let buf = new Uint8Array(hex.length / 2);
+
+ for (let i = 0; i < hex.length; i += 2) {
+ let c = hex.slice(i, i + 2);
+ let b = parseInt(c, 16);
+ let index = i / 2;
+ buf[index] = b;
+ }
+
+ return buf;
+}
\ No newline at end of file