Compare commits

...
46 Commits
Author SHA1 Message Date
Chris Troutner 3f2a12f6ec Merge pull request #31 from Permissionless-Software-Foundation/ct-unstable
fix(rpi): updating UI docker container
2022-05-17 07:10:37 -07:00
Chris Troutner c1b687efd1 fix(rpi): updating UI docker container 2022-05-17 07:07:43 -07:00
Chris Troutner faf5a83eb6 Merge pull request #30 from Permissionless-Software-Foundation/ct-unstable
Several small tweeks
2022-05-10 10:54:53 -07:00
Chris Troutner 92a35b220f fix(RPi): Updating docker images 2022-05-09 17:38:48 -07:00
Chris Troutner 58e934eeab fix(docker): Uploaded new PC images 2022-05-09 12:04:05 -07:00
Chris Troutner d5de76729d fix(production): Switching p2wdb to debug level 1 2022-05-09 09:35:31 -07:00
Chris Troutner 805cac97d9 fix(startup): Listing web3 server at startup 2022-05-09 09:33:39 -07:00
Chris Troutner 91fa460158 fix(production scripts): Improvement to sweep-wallet.js 2022-05-09 09:26:17 -07:00
Chris Troutner 2d6055b537 Merge pull request #29 from Permissionless-Software-Foundation/ct-unstable
Updating docker images
2022-05-08 16:19:42 -07:00
Chris Troutner 72e6a37ed1 fix(docker): Updating image files 2022-05-08 16:17:20 -07:00
Chris Troutner 9d18a24c7e Restoring 20s time delay on bch-dex startup 2022-05-08 13:45:01 -07:00
Chris Troutner feacf6e571 Merge pull request #28 from Permissionless-Software-Foundation/ct-unstable
feat(NFT): Adding support for NFTs
2022-05-08 13:24:14 -07:00
Chris Troutner c51f7cdf3a feat(NFT): Adding support for NFTs 2022-05-08 10:45:21 -07:00
Chris Troutner 07fbe8c654 Merge pull request #26 from Permissionless-Software-Foundation/ct-unstable
Updating docker images
2022-05-07 13:13:25 -07:00
Chris Troutner a65ec7494f fix(production): Updating docker images of PC 2022-05-07 13:10:18 -07:00
Chris Troutner 59fca7903f Merge branch 'ct-unstable' of https://github.com/Permissionless-Software-Foundation/bch-dex into ct-unstable 2022-05-07 12:12:59 -07:00
Chris Troutner f8948f12fa fix(rpi): Updating to v1.6.7 of bch-dex Docker container 2022-05-07 12:12:30 -07:00
Chris Troutner b79163cdf7 Merge pull request #25 from Permissionless-Software-Foundation/ct-unstable
Improved startup and error handling
2022-05-07 11:41:52 -07:00
Chris Troutner 2d537994ef Increasing startup time to 20 seconds 2022-05-04 17:00:46 -07:00
Chris Troutner 2ae963ee62 fix(removeStaleOrders): handling network errors 2022-05-04 16:07:24 -07:00
Chris Troutner f5cd59eb12 Merge branch 'ct-unstable' of https://github.com/Permissionless-Software-Foundation/bch-dex into ct-unstable 2022-05-04 16:06:35 -07:00
Chris Troutner d4f9e128b3 fix(removeStaleOrders): Handling network errors 2022-05-04 16:05:58 -07:00
Chris Troutner 3c322ecbd0 Merge pull request #24 from Permissionless-Software-Foundation/ct-unstable
Several minor fixes and enhancements
2022-05-04 06:12:49 -07:00
Chris Troutner 56944176fa fix(sweep-wallet): Got sweeping script working better 2022-05-04 06:03:08 -07:00
Chris Troutner 5f9cdc3f2e fix(startup): Adding 5 sec delay to bch-dex startup 2022-05-03 17:09:19 -07:00
Chris Troutner c20938f9f7 Fixing bug 2022-05-03 16:35:17 -07:00
Chris Troutner 5be3c92a29 fix(order): Better error handling in use-case 2022-05-03 15:33:33 -07:00
Chris Troutner 1476500c61 fix(rpi): Updating docker image to v1.6.6 2022-05-03 15:25:37 -07:00
Chris Troutner 519980eb99 Adding extra error handling to removeStaleOffers() 2022-05-03 14:23:13 -07:00
Chris Troutner 1e4b71aacd fix(production): Switching to newly name UI repo 2022-05-03 07:03:13 -07:00
Chris Troutner 2c1c009b64 fix(removeStaleOffers): Better error handling 2022-05-02 13:31:22 -07:00
Chris Troutner 09cbfd00e8 Merge pull request #23 from Permissionless-Software-Foundation/ct-unstable
Fixing bugs. Updating docker images
2022-05-02 10:54:09 -07:00
Chris Troutner 2c21d79740 fix(rpi): Updating docker images 2022-05-02 10:43:47 -07:00
Chris Troutner 15eb871b1f fix(production): Updating to v1.6.4 of docker images 2022-05-02 09:43:39 -07:00
Chris Troutner f4e80017d6 Merge pull request #22 from Permissionless-Software-Foundation/ct-unstable
fix(orders): Fixing bug with creating orders
2022-05-02 08:32:25 -07:00
Chris Troutner e27b9da2ee fix(orders): Fixing bug with creating orders 2022-05-02 08:29:51 -07:00
Chris Troutner adb210cd60 Merge pull request #21 from Permissionless-Software-Foundation/ct-unstable
Using RPi docker images
2022-05-01 14:57:41 -07:00
Chris Troutner ff7697baf6 fix(RPi): using docker images 2022-05-01 14:39:28 -07:00
Chris Troutner d65c3701cd fix(README): Updating README 2022-05-01 13:13:59 -07:00
Chris Troutner 4303efdb43 fix(README): Updating readme 2022-05-01 13:03:31 -07:00
Chris Troutner 87b1b7f9ca fix(rpi): Updating docker files 2022-05-01 12:45:07 -07:00
Chris Troutner 3dddf21986 Merge pull request #20 from Permissionless-Software-Foundation/ct-unstable
Improvements to production containers
2022-05-01 10:30:45 -07:00
Chris Troutner 238bee3d92 fix(production): Mounting swarm.key with IPFS container 2022-05-01 10:27:54 -07:00
Chris Troutner 04f77c883a fix(production): Mounting wallet file instead of including it in Docker image 2022-05-01 09:27:52 -07:00
Chris Troutner cddf141ce4 Merge branch 'ct-unstable' 2022-05-01 06:14:50 -07:00
Chris Troutner 628d8c01f8 Doing force install in rpi docker container 2022-05-01 06:10:31 -07:00
24 changed files with 649 additions and 229 deletions
+21 -17
View File
@@ -15,6 +15,7 @@ This repository contains the back end code. The user interface is contained in t
## Media
- [High-level Overview of bch-dex](https://youtu.be/LVX8CLi4sHw) (Video)
- [Developer walk-through for installing and hacking on bch-dex](https://youtu.be/T5XI43-SWJo) (Video)
- This video is out of date. Follow the instructions below.
## Participate
This is an open source project, and we encourage other JavaScript developers to participate in its creation and maintenance. We have two chat rooms for the community:
@@ -31,39 +32,42 @@ Running the DEX requires composition of these different software packages:
The above software is orchestrated using [Docker](https://www.docker.com/) and Docker Compose. The target operating system is Ubuntu 20+, and the target hardware is amd64 (normal desktop PCs) and the arm64 (Raspberry Pi 4). Trying to operate this software on other operating systems or hardware is possible, but not supported.
The Raspberry Pi 4 is the primary hardware target, because this software functions best when it is always running. The Pi 4 makes a great appliance for monitoring trade signals and finalizing trades.
Instructions for setting up Node.js, Docker, and Docker Compose can be found in [this Gist](https://gist.github.com/christroutner/a39f656850dc022b60f25c9663dd1cdd). Walk-through videos can also be found on the [PSF Videos page](https://psfoundation.cash/video/).
Building the Docker containers and getting the app working involve these steps:
Here are the steps involved in setting up bch-dex:
1. Follow the direction in [this Gist](https://gist.github.com/christroutner/a39f656850dc022b60f25c9663dd1cdd) to install Node.js, Docker, and Docker Compose.
1. Clone the repository with `git clone https://github.com/Permissionless-Software-Foundation/bch-dex` and enter it with `cd bch-dex`.
1. Install dependencies by running `npm install`
1. Create a wallet by executing the [create-wallet.js script](./production/scripts/create-wallet.js) with `node create-wallet.js`
1. Move the `wallet.json` file to the `bch-dex` folder in either the [x86 Docker folder](./production/docker/bch-dex) or the [RPi Docker folder](./production/rpi-docker/bch-dex/) depending on your hardware target.
1. Change directory to the `docker` or `rpi-docker` folder depending on your hardware target.
1. Build the Docker containers with `docker-compose build --no-cache`.
1. Create a wallet:
- `cd production/scripts`
- `node create-wallet.js`
1. Change directory to the `production/docker` or `production/rpi-docker` folder depending on your hardware target.
1. Pull the Docker images down from Docker Hub: `docker-compose pull`
1. Start the Docker containers with `docker-compose up -d`
1. Wait for the containers to run for about a minute, then bring them down with `docker-compose down`. That will create the needed folders in `production/data`.
1. Copy the `swarm.key` into the `production/data/go-ipfs/data/` directory. This will allow the IPFS node to connect to the PSF private network.
1. Bring the containers back up with `docker-compose up -d`.
1. Wait for the P2WDB to sync and populate bch-dex with trade data. You can monitor it with `docker logs --tail 20 -f p2wdb`.
1. Open a web browser and navigate the `http://localhost:4500`. You'll be able to see new Offers as they come in and are detected by bch-dex.
1. To take the other side of the trade, click the `Take` button in the UI.
1. You can add the 12-word mnemonic from the `wallet.json` file to the the web wallet, which will mirror your wallet in the UI, and allow you to perform basic wallet functions (send and receive BCH and tokens).
## Blockchain Infrastructure
The P2WDB and bch-dex containers requires a 'Global Back End' (as described in [CashStack.info](https://cashstack.info)) in order to connect to the blockchain. By default, the Docker containers connect to [free-bch.fullstack.cash](https://free-bch.fullstack.cash/). Several community-provided Global Back End servers are provided and can be [viewed here](https://gist.github.com/christroutner/63c5513782181f8b8ea3eb89f7cadeb6). The back end can be changed by setting the `CONSUMER_URL` environment variable in the `docker-compose.yml` file.
### Applying Software Updates
As this is an active project, software updates will happen frequently. To apply a software update, perform these steps.
<ol>
<li>Enter the `docker` or `rpi-docker` folder, depending on your hardware target.</li>
<li>Bring down the Docker containers with `docker-compose down`.</li>
<li>Pull in the software updates with `git pull`</li>
<li>Update dependencies with `npm install`</li>
<li>Rebuild the Docker containers with `docker-compose build --no-cache`</li>
<li>Clean up disk space by deleting old Docker images with `./cleanup-images.sh`</li>
<li>Start the Docker containers with `docker-compose up -d`</li>
</ol>
1. Enter the `docker` or `rpi-docker` folder, depending on your hardware target.
1. Bring down the Docker containers with `docker-compose down`.
1. Pull in the software updates with `git pull`
1. Update dependencies with `npm install`
1. Pull new Docker images with `docker-compose pull`
1. Clean up disk space by deleting old Docker images with `./cleanup-images.sh`
1. Start the Docker containers with `docker-compose up -d`
Sometimes it may be necessary to delete the databases before applying a software update. This can be done by stopping the Docker containers and deleting the `production/data` directory. When the Docker containers are restarted, they will recreate that directory. The P2WDB will re-sync and bch-dex will be populated with fresh trade data.
+7 -1
View File
@@ -56,7 +56,10 @@ class Server {
})
console.log(`Starting environment: ${config.env}`)
console.log(`Debug level: ${config.debugLevel}`)
console.log(`Debug level: ${config.debugLevel}\n`)
console.log(`Using this web3 CashStack service: ${config.consumerUrl}`)
console.log('Alternative web services listed here: https://gist.github.com/christroutner/63c5513782181f8b8ea3eb89f7cadeb6')
console.log('This app is built on top of the CashStack. Find out more: https://CashStack.info\n')
// MIDDLEWARE START
@@ -90,6 +93,9 @@ class Server {
// MIDDLEWARE END
// Delay startup to give the P2WDB time to start first, so that it accepts the webook call
await sleep(20000)
// Create webhook
try {
try {
+3 -3
View File
@@ -35,8 +35,8 @@ module.exports = {
useFullStackCash: process.env.USE_FULLSTACKCASH ? true : false,
consumerUrl: process.env.CONSUMER_URL
? process.env.CONSUMER_URL
// : 'https://free-bch.fullstack.cash',
: 'https://wa-usa-bch-consumer.fullstackcash.nl',
: 'https://free-bch.fullstack.cash',
// : 'https://wa-usa-bch-consumer.fullstackcash.nl',
// P2WDB URL that will accept API calls from the p2wdb npm library.
p2wdbUrl: process.env.P2WDB_URL ? process.env.P2WDB_URL : 'https://p2wdb.fullstack.cash',
@@ -97,7 +97,7 @@ module.exports = {
// BCH Mnemonic for generating encryption keys and payment address
mnemonic: process.env.MNEMONIC ? process.env.MNEMONIC : '',
debugLevel: process.env.DEBUG_LEVEL ? parseInt(process.env.DEBUG_LEVEL) : 2,
debugLevel: process.env.DEBUG_LEVEL ? parseInt(process.env.DEBUG_LEVEL) : 1,
// Settings for production, using external go-ipfs node.
isProduction: process.env.SVC_ENV === 'production' ? true : false,
+466 -141
View File
@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"@psf/bch-js": "6.2.5",
"@psf/bch-js": "6.3.1",
"axios": "0.21.1",
"bch-message-lib": "2.2.0",
"bcryptjs": "2.4.3",
@@ -34,7 +34,7 @@
"koa2-ratelimit": "0.9.1",
"libp2p": "^0.36.2",
"line-reader": "0.4.0",
"minimal-slp-wallet": "4.4.7",
"minimal-slp-wallet": "4.5.4",
"mongoose": "5.13.13",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.4.17",
@@ -46,7 +46,7 @@
},
"devDependencies": {
"apidoc": "0.26.0",
"bch-token-sweep": "1.5.16",
"bch-token-sweep": "2.1.1",
"chai": "4.3.0",
"coveralls": "2.11.4",
"eslint": "7.19.0",
@@ -65,6 +65,68 @@
"uuid": "8.3.2"
}
},
"../bch-message-lib": {
"version": "2.0.0",
"extraneous": true,
"license": "MIT",
"devDependencies": {
"@psf/bch-js": "6.2.1",
"apidoc": "0.25.0",
"browserify": "17.0.0",
"chai": "4.1.2",
"coveralls": "3.0.2",
"debugging-aid": "0.5.3",
"eslint": "7.17.0",
"eslint-config-prettier": "7.1.0",
"eslint-config-standard": "16.0.2",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "3.3.1",
"eslint-plugin-standard": "4.0.0",
"husky": "4.3.0",
"lodash.clonedeep": "4.5.0",
"mocha": "7.0.1",
"nyc": "15.0.0",
"semantic-release": "17.4.3",
"sinon": "9.0.2",
"standard": "14.3.1",
"tinyify": "3.0.0"
},
"peerDependencies": {
"minimal-slp-wallet": "^4.4.5"
}
},
"../bch-token-sweep": {
"version": "2.0.0",
"extraneous": true,
"license": "MIT",
"dependencies": {
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
},
"devDependencies": {
"apidoc": "0.25.0",
"browserify": "16.5.2",
"chai": "4.1.2",
"coveralls": "3.0.2",
"eslint": "7.17.0",
"eslint-config-prettier": "7.1.0",
"eslint-config-standard": "16.0.2",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "3.3.1",
"eslint-plugin-standard": "4.0.0",
"husky": "4.3.8",
"lodash.clonedeep": "4.5.0",
"mocha": "8.4.0",
"nyc": "15.1.0",
"semantic-release": "17.4.4",
"sinon": "9.2.2",
"standard": "16.0.4",
"tinyify": "3.0.0"
},
"peerDependencies": {
"minimal-slp-wallet": "4.5.x"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.1.2",
"dev": true,
@@ -1497,9 +1559,9 @@
"license": "BSD-3-Clause"
},
"node_modules/@psf/bch-js": {
"version": "6.2.5",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.5.tgz",
"integrity": "sha512-Obw+i04uIzImkacNrAUZjlO3Fi7SPcDiWkTZPJLsa+YShmICzWpayUSZvP+TgcJBZDH8ikRWxOz4fBA0fPW+iQ==",
"version": "6.3.1",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.3.1.tgz",
"integrity": "sha512-Slzq7FJFIWvQ6xhZSm4cnkvPIuFmZNrqtW2IDjZD/aHOX7nZlyQ7Hg4MTbb8CzekUHNroFyKyM36iUU7MaeQmw==",
"license": "MIT",
"dependencies": {
"@chris.troutner/bip32-utils": "1.0.5",
@@ -3045,12 +3107,151 @@
}
},
"node_modules/bch-token-sweep": {
"version": "1.5.16",
"version": "2.1.1",
"resolved": "http://94.130.170.209:4873/bch-token-sweep/-/bch-token-sweep-2.1.1.tgz",
"integrity": "sha512-Uao4aLoyUjNjY0UNTjrgAzUw1m2oq70JGQMzRgyoiGjTUAiWn9lQVaQSsbzFE03STvkaCxxdWfYIjmLGGu2U1A==",
"dev": true,
"license": "MIT",
"dependencies": {
"bch-donation": "1.1.1",
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
},
"peerDependencies": {
"minimal-slp-wallet": "4.5.x"
}
},
"node_modules/bch-token-sweep/node_modules/apidoc": {
"version": "0.51.0",
"resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.51.0.tgz",
"integrity": "sha512-3P4srhm6NA+kE/YRM4qL5jESElpQQJL+Z8n7hyr4uC+1DSwGzmE6adXPVxuT/hpDyShrqmRlHk8hf40RSqEsNw==",
"dev": true,
"license": "MIT",
"os": [
"darwin",
"freebsd",
"linux",
"openbsd",
"win32"
],
"dependencies": {
"bootstrap": "3.4.1",
"commander": "^8.3.0",
"diff-match-patch": "^1.0.5",
"esbuild-loader": "^2.16.0",
"expose-loader": "^3.1.0",
"fs-extra": "^10.0.0",
"glob": "^7.2.0",
"handlebars": "^4.7.7",
"iconv-lite": "^0.6.3",
"jquery": "^3.6.0",
"klaw-sync": "^6.0.0",
"lodash": "^4.17.21",
"markdown-it": "^12.2.0",
"nodemon": "^2.0.15",
"path-to-regexp": "^6.2.0",
"prismjs": "^1.25.0",
"semver": "^7.3.5",
"style-loader": "^3.3.1",
"url-parse": "^1.5.3",
"webpack": "^5.64.2",
"webpack-cli": "^4.9.1",
"winston": "^3.3.3"
},
"bin": {
"apidoc": "bin/apidoc"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/bch-token-sweep/node_modules/argparse": {
"version": "2.0.1",
"resolved": "http://94.130.170.209:4873/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
"node_modules/bch-token-sweep/node_modules/bch-donation": {
"version": "1.1.2",
"resolved": "http://94.130.170.209:4873/bch-donation/-/bch-donation-1.1.2.tgz",
"integrity": "sha512-V7xQ23M6Ocavb1Nj4/pATwaLX/uF/9s2nWir3f+F3aetD3kMmsRHFRuXJwGQG3dSC5fJtRR/M5Z2zynY3t91Xg==",
"dev": true,
"license": "MIT",
"dependencies": {
"apidoc": "0.51.0"
}
},
"node_modules/bch-token-sweep/node_modules/commander": {
"version": "8.3.0",
"resolved": "http://94.130.170.209:4873/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/bch-token-sweep/node_modules/entities": {
"version": "2.1.0",
"resolved": "http://94.130.170.209:4873/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
"dev": true,
"license": "BSD-2-Clause",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/bch-token-sweep/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "http://94.130.170.209:4873/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/bch-token-sweep/node_modules/glob": {
"version": "7.2.0",
"resolved": "http://94.130.170.209:4873/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/bch-token-sweep/node_modules/markdown-it": {
"version": "12.3.2",
"resolved": "http://94.130.170.209:4873/markdown-it/-/markdown-it-12.3.2.tgz",
"integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "~2.1.0",
"linkify-it": "^3.0.1",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
},
"bin": {
"markdown-it": "bin/markdown-it.js"
}
},
"node_modules/bchaddrjs-slp": {
@@ -5040,14 +5241,6 @@
"headless": "https://github.com/paulkernfeld/node-headless/tarball/master"
}
},
"node_modules/electron-eval/node_modules/headless": {
"version": "1.1.0",
"license": "MIT",
"optional": true,
"engines": {
"node": ">=0.6"
}
},
"node_modules/electron-fetch": {
"version": "1.7.4",
"license": "MIT",
@@ -9045,6 +9238,8 @@
"node_modules/ipfs-cli/node_modules/node-fetch": {
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
@@ -9570,6 +9765,8 @@
"node_modules/ipfs-core-config/node_modules/node-fetch": {
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
@@ -9753,6 +9950,8 @@
"node_modules/ipfs-core-utils/node_modules/node-fetch": {
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
@@ -10317,6 +10516,8 @@
"node_modules/ipfs-core/node_modules/node-fetch": {
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
@@ -10611,6 +10812,8 @@
"node_modules/ipfs-daemon/node_modules/node-fetch": {
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
@@ -10870,6 +11073,8 @@
"node_modules/ipfs-http-client/node_modules/node-fetch": {
"name": "@achingbrain/node-fetch",
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==",
"license": "MIT",
"engines": {
"node": "4.x || >=6.0.0"
@@ -13694,18 +13899,50 @@
}
},
"node_modules/minimal-slp-wallet": {
"version": "4.4.7",
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.4.7.tgz",
"integrity": "sha512-OGtoc5p8xyZs1sEJFpfIzNIA7PDaHOlhw/wyOY68vtGylDrTPnY94hJqnlYOJ8IWLslBUo6WfsCkLIfhVPmZSg==",
"version": "4.5.4",
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.4.tgz",
"integrity": "sha512-CzEe402T4NsFRVoovYQF5Db4lZHYnEQZseYVJMQwghVZ2gV+M69Igmsxj2/rxDGbiVbBSPd7ILMnWmes/BiseA==",
"license": "MIT",
"dependencies": {
"@psf/bch-js": "6.2.5",
"@psf/bch-js": "6.2.14",
"apidoc": "0.51.0",
"bch-consumer": "1.2.2",
"bch-consumer": "1.2.3",
"bch-donation": "1.1.2",
"crypto-js": "4.0.0"
}
},
"node_modules/minimal-slp-wallet/node_modules/@psf/bch-js": {
"version": "6.2.14",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.14.tgz",
"integrity": "sha512-tHF2DyBRgYHTvdhVY58dOzbCOuKQrhc9QvYyj+K4c7mfsVgprjU+FTcM9ZFcE3A+0G/92VBP4/kkfccqfdLlWA==",
"license": "MIT",
"dependencies": {
"@chris.troutner/bip32-utils": "1.0.5",
"@psf/bip21": "2.0.1",
"@psf/bitcoincash-ops": "2.0.0",
"@psf/bitcoincashjs-lib": "4.0.2",
"@psf/coininfo": "4.0.0",
"axios": "0.26.1",
"bc-bip68": "1.0.5",
"bchaddrjs-slp": "0.2.5",
"bigi": "1.4.2",
"bignumber.js": "9.0.0",
"bip-schnorr": "0.3.0",
"bip38": "2.0.2",
"bip39": "3.0.2",
"bip66": "1.1.5",
"bitcoinjs-message": "2.0.0",
"bs58": "4.0.1",
"ecashaddrjs": "1.0.7",
"ini": "1.3.8",
"randombytes": "2.0.6",
"safe-buffer": "5.1.2",
"satoshi-bitcoin": "1.0.4",
"slp-mdm": "0.0.6",
"slp-parser": "0.0.4",
"wif": "2.0.6"
}
},
"node_modules/minimal-slp-wallet/node_modules/apidoc": {
"version": "0.51.0",
"resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.51.0.tgz",
@@ -13756,58 +13993,6 @@
"license": "Python-2.0"
},
"node_modules/minimal-slp-wallet/node_modules/axios": {
"version": "0.25.0",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.25.0.tgz",
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.14.7"
}
},
"node_modules/minimal-slp-wallet/node_modules/bch-consumer": {
"version": "1.2.2",
"resolved": "http://94.130.170.209:4873/bch-consumer/-/bch-consumer-1.2.2.tgz",
"integrity": "sha512-kLd67+mJcxmNFJG43xRLxVdWutO9sMWIaLyVRAfeQKhH8qnMpaz3jOQ9dFPlM0/kZyTmrDTe5sINsQHFuTGcMA==",
"license": "MIT",
"dependencies": {
"@psf/bch-js": "6.2.4",
"apidoc": "0.51.0",
"axios": "0.25.0"
}
},
"node_modules/minimal-slp-wallet/node_modules/bch-consumer/node_modules/@psf/bch-js": {
"version": "6.2.4",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.4.tgz",
"integrity": "sha512-Vk+uM2cZOjsPKpsDG4U+6YfFPCfhHqUjH48jLrHP1wch78UK6ca8MILdGCH4opEPflHj/T+fLX4RZMtUm8uJAA==",
"license": "MIT",
"dependencies": {
"@chris.troutner/bip32-utils": "1.0.5",
"@psf/bip21": "2.0.1",
"@psf/bitcoincash-ops": "2.0.0",
"@psf/bitcoincashjs-lib": "4.0.2",
"@psf/coininfo": "4.0.0",
"axios": "0.26.1",
"bc-bip68": "1.0.5",
"bchaddrjs-slp": "0.2.5",
"bigi": "1.4.2",
"bignumber.js": "9.0.0",
"bip-schnorr": "0.3.0",
"bip38": "2.0.2",
"bip39": "3.0.2",
"bip66": "1.1.5",
"bitcoinjs-message": "2.0.0",
"bs58": "4.0.1",
"ecashaddrjs": "1.0.7",
"ini": "1.3.8",
"randombytes": "2.0.6",
"safe-buffer": "5.1.2",
"satoshi-bitcoin": "1.0.4",
"slp-mdm": "0.0.6",
"slp-parser": "0.0.4",
"wif": "2.0.6"
}
},
"node_modules/minimal-slp-wallet/node_modules/bch-consumer/node_modules/@psf/bch-js/node_modules/axios": {
"version": "0.26.1",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
@@ -13816,6 +14001,26 @@
"follow-redirects": "^1.14.8"
}
},
"node_modules/minimal-slp-wallet/node_modules/bch-consumer": {
"version": "1.2.3",
"resolved": "http://94.130.170.209:4873/bch-consumer/-/bch-consumer-1.2.3.tgz",
"integrity": "sha512-6hMe2RB3PkPG+ZsArSPueUjUL3G/HaONExXbGt5v/wx9iU14A3JmSJJxtpxJ+MMGjDbL9w96EJ3Yrpmn8nDi7A==",
"license": "MIT",
"dependencies": {
"@psf/bch-js": "6.2.14",
"apidoc": "0.51.0",
"axios": "0.25.0"
}
},
"node_modules/minimal-slp-wallet/node_modules/bch-consumer/node_modules/axios": {
"version": "0.25.0",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.25.0.tgz",
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.14.7"
}
},
"node_modules/minimal-slp-wallet/node_modules/bch-donation": {
"version": "1.1.2",
"resolved": "http://94.130.170.209:4873/bch-donation/-/bch-donation-1.1.2.tgz",
@@ -19237,6 +19442,22 @@
"node": ">=4"
}
},
"node_modules/prettier": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
"integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
"dev": true,
"peer": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/prettier-linter-helpers": {
"version": "1.0.0",
"dev": true,
@@ -24174,9 +24395,9 @@
"version": "1.1.0"
},
"@psf/bch-js": {
"version": "6.2.5",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.5.tgz",
"integrity": "sha512-Obw+i04uIzImkacNrAUZjlO3Fi7SPcDiWkTZPJLsa+YShmICzWpayUSZvP+TgcJBZDH8ikRWxOz4fBA0fPW+iQ==",
"version": "6.3.1",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.3.1.tgz",
"integrity": "sha512-Slzq7FJFIWvQ6xhZSm4cnkvPIuFmZNrqtW2IDjZD/aHOX7nZlyQ7Hg4MTbb8CzekUHNroFyKyM36iUU7MaeQmw==",
"requires": {
"@chris.troutner/bip32-utils": "1.0.5",
"@psf/bip21": "2.0.1",
@@ -25313,11 +25534,110 @@
"requires": {}
},
"bch-token-sweep": {
"version": "1.5.16",
"version": "2.1.1",
"resolved": "http://94.130.170.209:4873/bch-token-sweep/-/bch-token-sweep-2.1.1.tgz",
"integrity": "sha512-Uao4aLoyUjNjY0UNTjrgAzUw1m2oq70JGQMzRgyoiGjTUAiWn9lQVaQSsbzFE03STvkaCxxdWfYIjmLGGu2U1A==",
"dev": true,
"requires": {
"bch-donation": "1.1.1",
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
},
"dependencies": {
"apidoc": {
"version": "0.51.0",
"resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.51.0.tgz",
"integrity": "sha512-3P4srhm6NA+kE/YRM4qL5jESElpQQJL+Z8n7hyr4uC+1DSwGzmE6adXPVxuT/hpDyShrqmRlHk8hf40RSqEsNw==",
"dev": true,
"requires": {
"bootstrap": "3.4.1",
"commander": "^8.3.0",
"diff-match-patch": "^1.0.5",
"esbuild-loader": "^2.16.0",
"expose-loader": "^3.1.0",
"fs-extra": "^10.0.0",
"glob": "^7.2.0",
"handlebars": "^4.7.7",
"iconv-lite": "^0.6.3",
"jquery": "^3.6.0",
"klaw-sync": "^6.0.0",
"lodash": "^4.17.21",
"markdown-it": "^12.2.0",
"nodemon": "^2.0.15",
"path-to-regexp": "^6.2.0",
"prismjs": "^1.25.0",
"semver": "^7.3.5",
"style-loader": "^3.3.1",
"url-parse": "^1.5.3",
"webpack": "^5.64.2",
"webpack-cli": "^4.9.1",
"winston": "^3.3.3"
}
},
"argparse": {
"version": "2.0.1",
"resolved": "http://94.130.170.209:4873/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"bch-donation": {
"version": "1.1.2",
"resolved": "http://94.130.170.209:4873/bch-donation/-/bch-donation-1.1.2.tgz",
"integrity": "sha512-V7xQ23M6Ocavb1Nj4/pATwaLX/uF/9s2nWir3f+F3aetD3kMmsRHFRuXJwGQG3dSC5fJtRR/M5Z2zynY3t91Xg==",
"dev": true,
"requires": {
"apidoc": "0.51.0"
}
},
"commander": {
"version": "8.3.0",
"resolved": "http://94.130.170.209:4873/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"dev": true
},
"entities": {
"version": "2.1.0",
"resolved": "http://94.130.170.209:4873/entities/-/entities-2.1.0.tgz",
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
"dev": true
},
"fs-extra": {
"version": "10.1.0",
"resolved": "http://94.130.170.209:4873/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"glob": {
"version": "7.2.0",
"resolved": "http://94.130.170.209:4873/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"markdown-it": {
"version": "12.3.2",
"resolved": "http://94.130.170.209:4873/markdown-it/-/markdown-it-12.3.2.tgz",
"integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
"dev": true,
"requires": {
"argparse": "^2.0.1",
"entities": "~2.1.0",
"linkify-it": "^3.0.1",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
}
}
},
"bchaddrjs-slp": {
@@ -26713,12 +27033,6 @@
"electron": "^1.6.11",
"headless": "https://github.com/paulkernfeld/node-headless/tarball/master",
"ndjson": "^1.5.0"
},
"dependencies": {
"headless": {
"version": "1.1.0",
"optional": true
}
}
},
"electron-fetch": {
@@ -29328,7 +29642,8 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"uint8arrays": {
"version": "3.0.0",
@@ -29901,7 +30216,8 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"peer-id": {
"version": "0.15.4",
@@ -30329,7 +30645,8 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"peer-id": {
"version": "0.15.4",
@@ -30480,7 +30797,8 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"uint8arrays": {
"version": "3.0.0",
@@ -30692,7 +31010,8 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"peer-id": {
"version": "0.15.4",
@@ -30910,7 +31229,8 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz",
"integrity": "sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g=="
},
"timeout-abort-controller": {
"version": "2.0.0",
@@ -32868,17 +33188,48 @@
"dev": true
},
"minimal-slp-wallet": {
"version": "4.4.7",
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.4.7.tgz",
"integrity": "sha512-OGtoc5p8xyZs1sEJFpfIzNIA7PDaHOlhw/wyOY68vtGylDrTPnY94hJqnlYOJ8IWLslBUo6WfsCkLIfhVPmZSg==",
"version": "4.5.4",
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.4.tgz",
"integrity": "sha512-CzEe402T4NsFRVoovYQF5Db4lZHYnEQZseYVJMQwghVZ2gV+M69Igmsxj2/rxDGbiVbBSPd7ILMnWmes/BiseA==",
"requires": {
"@psf/bch-js": "6.2.5",
"@psf/bch-js": "6.2.14",
"apidoc": "0.51.0",
"bch-consumer": "1.2.2",
"bch-consumer": "1.2.3",
"bch-donation": "1.1.2",
"crypto-js": "4.0.0"
},
"dependencies": {
"@psf/bch-js": {
"version": "6.2.14",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.14.tgz",
"integrity": "sha512-tHF2DyBRgYHTvdhVY58dOzbCOuKQrhc9QvYyj+K4c7mfsVgprjU+FTcM9ZFcE3A+0G/92VBP4/kkfccqfdLlWA==",
"requires": {
"@chris.troutner/bip32-utils": "1.0.5",
"@psf/bip21": "2.0.1",
"@psf/bitcoincash-ops": "2.0.0",
"@psf/bitcoincashjs-lib": "4.0.2",
"@psf/coininfo": "4.0.0",
"axios": "0.26.1",
"bc-bip68": "1.0.5",
"bchaddrjs-slp": "0.2.5",
"bigi": "1.4.2",
"bignumber.js": "9.0.0",
"bip-schnorr": "0.3.0",
"bip38": "2.0.2",
"bip39": "3.0.2",
"bip66": "1.1.5",
"bitcoinjs-message": "2.0.0",
"bs58": "4.0.1",
"ecashaddrjs": "1.0.7",
"ini": "1.3.8",
"randombytes": "2.0.6",
"safe-buffer": "5.1.2",
"satoshi-bitcoin": "1.0.4",
"slp-mdm": "0.0.6",
"slp-parser": "0.0.4",
"wif": "2.0.6"
}
},
"apidoc": {
"version": "0.51.0",
"resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.51.0.tgz",
@@ -32914,62 +33265,29 @@
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"axios": {
"version": "0.25.0",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.25.0.tgz",
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
"version": "0.26.1",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"requires": {
"follow-redirects": "^1.14.7"
"follow-redirects": "^1.14.8"
}
},
"bch-consumer": {
"version": "1.2.2",
"resolved": "http://94.130.170.209:4873/bch-consumer/-/bch-consumer-1.2.2.tgz",
"integrity": "sha512-kLd67+mJcxmNFJG43xRLxVdWutO9sMWIaLyVRAfeQKhH8qnMpaz3jOQ9dFPlM0/kZyTmrDTe5sINsQHFuTGcMA==",
"version": "1.2.3",
"resolved": "http://94.130.170.209:4873/bch-consumer/-/bch-consumer-1.2.3.tgz",
"integrity": "sha512-6hMe2RB3PkPG+ZsArSPueUjUL3G/HaONExXbGt5v/wx9iU14A3JmSJJxtpxJ+MMGjDbL9w96EJ3Yrpmn8nDi7A==",
"requires": {
"@psf/bch-js": "6.2.4",
"@psf/bch-js": "6.2.14",
"apidoc": "0.51.0",
"axios": "0.25.0"
},
"dependencies": {
"@psf/bch-js": {
"version": "6.2.4",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.4.tgz",
"integrity": "sha512-Vk+uM2cZOjsPKpsDG4U+6YfFPCfhHqUjH48jLrHP1wch78UK6ca8MILdGCH4opEPflHj/T+fLX4RZMtUm8uJAA==",
"axios": {
"version": "0.25.0",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.25.0.tgz",
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
"requires": {
"@chris.troutner/bip32-utils": "1.0.5",
"@psf/bip21": "2.0.1",
"@psf/bitcoincash-ops": "2.0.0",
"@psf/bitcoincashjs-lib": "4.0.2",
"@psf/coininfo": "4.0.0",
"axios": "0.26.1",
"bc-bip68": "1.0.5",
"bchaddrjs-slp": "0.2.5",
"bigi": "1.4.2",
"bignumber.js": "9.0.0",
"bip-schnorr": "0.3.0",
"bip38": "2.0.2",
"bip39": "3.0.2",
"bip66": "1.1.5",
"bitcoinjs-message": "2.0.0",
"bs58": "4.0.1",
"ecashaddrjs": "1.0.7",
"ini": "1.3.8",
"randombytes": "2.0.6",
"safe-buffer": "5.1.2",
"satoshi-bitcoin": "1.0.4",
"slp-mdm": "0.0.6",
"slp-parser": "0.0.4",
"wif": "2.0.6"
},
"dependencies": {
"axios": {
"version": "0.26.1",
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"requires": {
"follow-redirects": "^1.14.8"
}
}
"follow-redirects": "^1.14.7"
}
}
}
@@ -36692,6 +37010,13 @@
"prepend-http": {
"version": "2.0.0"
},
"prettier": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
"integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
"dev": true,
"peer": true
},
"prettier-linter-helpers": {
"version": "1.0.0",
"dev": true,
+3 -3
View File
@@ -27,7 +27,7 @@
},
"repository": "Permissionless-Software-Foundation/bch-dex",
"dependencies": {
"@psf/bch-js": "6.2.5",
"@psf/bch-js": "6.3.1",
"axios": "0.21.1",
"bch-message-lib": "2.2.0",
"bcryptjs": "2.4.3",
@@ -52,7 +52,7 @@
"koa2-ratelimit": "0.9.1",
"libp2p": "^0.36.2",
"line-reader": "0.4.0",
"minimal-slp-wallet": "4.4.7",
"minimal-slp-wallet": "4.5.4",
"mongoose": "5.13.13",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.4.17",
@@ -64,7 +64,7 @@
},
"devDependencies": {
"apidoc": "0.26.0",
"bch-token-sweep": "1.5.16",
"bch-token-sweep": "2.1.1",
"chai": "4.3.0",
"coveralls": "2.11.4",
"eslint": "7.19.0",
+3 -3
View File
@@ -46,11 +46,11 @@ RUN npm set registry http://94.130.170.209:4873/
# Clone the rest.bitcoin.com repository
WORKDIR /home/safeuser
RUN git clone https://github.com/Permissionless-Software-Foundation/bch-dex-ui2
RUN git clone https://github.com/Permissionless-Software-Foundation/bch-dex-ui
# Switch to the desired branch. `master` is usually stable,
# and `stage` has the most up-to-date changes.
WORKDIR /home/safeuser/bch-dex-ui2
WORKDIR /home/safeuser/bch-dex-ui
# For development: switch to unstable branch
RUN git checkout ct-unstable
@@ -68,6 +68,6 @@ FROM nginx
EXPOSE 80
# Copy the files built in the first container to the new NGINX container.
COPY --from=builder /home/safeuser/bch-dex-ui2/public /usr/share/nginx/html
COPY --from=builder /home/safeuser/bch-dex-ui/public /usr/share/nginx/html
#USER safeuser
+1 -1
View File
@@ -64,7 +64,7 @@ RUN npm install
RUN npm run docs
# Copy the wallet files
COPY wallet.json wallet.json
#COPY wallet.json wallet.json
#VOLUME /home/safeuser/keys
+20 -12
View File
@@ -30,7 +30,7 @@ services:
- 172.17.0.1:8080:8080
volumes:
- ../data/go-ipfs/data:/data/ipfs
- ../data/go-ipfs/export:/export
- ../../swarm.key:/data/ipfs/swarm.key
# https://docs.docker.com/compose/compose-file/compose-file-v3/#command
# https://github.com/ipfs/go-ipfs/blob/91c52657166bcf86f2476926e4fe56694dc26562/Dockerfile#L115
command:
@@ -43,10 +43,14 @@ services:
restart: always
p2wdb:
build:
context: ./p2wdb/
dockerfile: Dockerfile
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/p2wdb-bch-dex:v1.7.0
container_name: p2wdb
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
DEBUG_LEVEL: 1
logging:
driver: 'json-file'
options:
@@ -65,10 +69,13 @@ services:
restart: always
bch-dex:
build:
context: ./bch-dex/
dockerfile: Dockerfile
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex:v1.7.1
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
logging:
driver: 'json-file'
options:
@@ -80,14 +87,15 @@ services:
- p2wdb
ports:
- '5700:5700' # <host port>:<container port>
# volumes:
# - ../data/ipfsdata:/home/safeuser/ipfs-service-provider/.ipfsdata
volumes:
- ../scripts/wallet.json:/home/safeuser/bch-dex/wallet.json
restart: always
dex-ui:
build:
context: ./bch-dex-ui/
dockerfile: Dockerfile
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui:v1.6.5
container_name: dex-ui
environment:
SERVER: 'http://192.168.2.3'
+2 -1
View File
@@ -16,7 +16,8 @@ export COORD_NAME=generic-p2wdb-production
#export CR_DOMAIN=subdomain.yourdomain.com
# Debug level. 0 = minimal info. 2 = max info.
export DEBUG_LEVEL=2
# This value set by docker-compose.yml
#export DEBUG_LEVEL=1
# Log-in information for retrieving a JWT token from FullStack.cash.
export FULLSTACKLOGIN=demo@demo.com
+4 -4
View File
@@ -46,11 +46,11 @@ RUN npm set registry http://94.130.170.209:4873/
# Clone the rest.bitcoin.com repository
WORKDIR /home/safeuser
RUN git clone https://github.com/Permissionless-Software-Foundation/bch-dex-ui2
RUN git clone https://github.com/Permissionless-Software-Foundation/bch-dex-ui
# Switch to the desired branch. `master` is usually stable,
# and `stage` has the most up-to-date changes.
WORKDIR /home/safeuser/bch-dex-ui2
WORKDIR /home/safeuser/bch-dex-ui
# For development: switch to unstable branch
RUN git checkout ct-unstable
@@ -58,7 +58,7 @@ RUN git checkout ct-unstable
# Install dependencies
#RUN mkdir .ipfsdata
#RUN npm install -g @mapbox/node-pre-gyp
RUN npm install
RUN npm install --force
# Build the site
RUN CI=true npm run build
@@ -68,6 +68,6 @@ FROM nginx
EXPOSE 80
# Copy the files built in the first container to the new NGINX container.
COPY --from=builder /home/safeuser/bch-dex-ui2/public /usr/share/nginx/html
COPY --from=builder /home/safeuser/bch-dex-ui/public /usr/share/nginx/html
#USER safeuser
+1 -1
View File
@@ -64,7 +64,7 @@ RUN npm install
RUN npm run docs
# Copy the wallet files
COPY wallet.json wallet.json
#COPY wallet.json wallet.json
#VOLUME /home/safeuser/keys
+20 -12
View File
@@ -31,7 +31,7 @@ services:
- 172.17.0.1:8080:8080
volumes:
- ../data/go-ipfs/data:/data/ipfs
- ../data/go-ipfs/export:/export
- ../../swarm.key:/data/ipfs/swarm.key
# https://docs.docker.com/compose/compose-file/compose-file-v3/#command
# https://github.com/ipfs/go-ipfs/blob/91c52657166bcf86f2476926e4fe56694dc26562/Dockerfile#L115
command:
@@ -44,10 +44,14 @@ services:
restart: always
p2wdb:
build:
context: ./p2wdb/
dockerfile: Dockerfile
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/pwd-bch-dex-rpi:v1.7.1
container_name: p2wdb
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
DEBUG_LEVEL: 1
logging:
driver: 'json-file'
options:
@@ -66,10 +70,13 @@ services:
restart: always
bch-dex:
build:
context: ./bch-dex/
dockerfile: Dockerfile
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex-rpi:v1.7.1
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
logging:
driver: 'json-file'
options:
@@ -81,14 +88,15 @@ services:
- p2wdb
ports:
- '5700:5700' # <host port>:<container port>
# volumes:
# - ../data/ipfsdata:/home/safeuser/ipfs-service-provider/.ipfsdata
volumes:
- ../scripts/wallet.json:/home/safeuser/bch-dex/wallet.json
restart: always
dex-ui:
build:
context: ./bch-dex-ui/
dockerfile: Dockerfile
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui-rpi:v1.7.3
container_name: dex-ui
logging:
driver: 'json-file'
@@ -16,7 +16,8 @@ export COORD_NAME=generic-p2wdb-production
#export CR_DOMAIN=subdomain.yourdomain.com
# Debug level. 0 = minimal info. 2 = max info.
export DEBUG_LEVEL=2
# This value set by docker-compose.yml
#export DEBUG_LEVEL=1
# Log-in information for retrieving a JWT token from FullStack.cash.
export FULLSTACKLOGIN=demo@demo.com
+23 -5
View File
@@ -5,7 +5,7 @@
*/
// Public npm libraries
const BCHJS = require('@psf/bch-js')
// const BCHJS = require('@psf/bch-js')
const BchTokenSweep = require('bch-token-sweep/index')
// Local libraries
@@ -17,8 +17,10 @@ const EMTPY_ADDR_CUTOFF = 10
async function sweepFunds () {
try {
// Open the wallet files.
const wallet = new WalletAdapter()
const walletInfo = await wallet.openWallet()
const walletLib = new WalletAdapter()
// const walletInfo = await walletLib.openWallet()
const walletInfo = await openWallet(walletLib)
const wallet = await walletLib.instanceWallet(walletInfo)
console.log('walletInfo: ', walletInfo)
const rootAddr = walletInfo.cashAddress
@@ -26,7 +28,7 @@ async function sweepFunds () {
console.log(`Sweeping all funds into root address ${rootAddr}...`)
// Generate an HD tree
const bchjs = new BCHJS()
const bchjs = wallet.bchjs
const rootSeed = await bchjs.Mnemonic.toSeed(walletInfo.mnemonic)
const masterHDNode = bchjs.HDNode.fromSeed(rootSeed)
@@ -46,7 +48,7 @@ async function sweepFunds () {
const sweeper = new BchTokenSweep(
wifToSweep,
rootWif,
bchjs,
wallet,
550,
rootAddr
)
@@ -66,6 +68,7 @@ async function sweepFunds () {
await bchjs.Util.sleep(3000)
} catch (err) {
console.log(`error message with index ${hdIndex}: ${err.message}`)
// console.log(err)
emptyAddrCnt++
}
@@ -80,3 +83,18 @@ async function sweepFunds () {
}
}
sweepFunds()
// Open the wallet file, or create one if the file doesn't exist.
// Does not instance the wallet. The output of this function is expected to
// be passed to instanceWallet().
async function openWallet (walletLib) {
try {
// console.log('this.WALLET_FILE: ', this.WALLET_FILE)
const walletData = await walletLib.jsonFiles.readJSON('./wallet.json')
return walletData
} catch (err) {
console.error('Error in openWallet()')
throw err
}
}
+1
View File
@@ -7,6 +7,7 @@ const Offer = new mongoose.Schema({
utxoTxid: { type: String },
utxoVout: { type: Number },
ticker: { type: String },
tokenType: { type: Number },
// Trade data
buyOrSell: { type: String },
+1
View File
@@ -14,6 +14,7 @@ const Order = new mongoose.Schema({
utxoTxid: { type: String },
utxoVout: { type: Number },
ticker: { type: String },
tokenType: { type: Number },
// Trade data
buyOrSell: { type: String },
+32 -7
View File
@@ -208,7 +208,7 @@ class WalletAdapter {
// Get token info on the offered UTXO
const txData = await this.bchWallet.getTxData([offerInfo.utxoTxid])
// console.log(`txData: ${JSON.stringify(txData, null, 2)}`)
console.log(`txData: ${JSON.stringify(txData, null, 2)}`)
// Construct the UTXO being offered for sale.
const offeredUtxo = {
@@ -222,12 +222,27 @@ class WalletAdapter {
// Build First part of the collaborative Tx a.k.a. Alice
// Generate the OP_RETURN code.
const slpSendObj = bchjs.SLP.TokenType1.generateSendOpReturn(
[offeredUtxo],
offerInfo.numTokens.toString()
)
let slpSendObj
if (offerInfo.tokenType === 65) {
// Type 65 NFT
slpSendObj = bchjs.SLP.NFT1.generateNFTChildSendOpReturn(
[offeredUtxo],
offerInfo.numTokens.toString()
)
console.log(`slpOutputs: ${slpSendObj.outputs}`)
} else if (offerInfo.tokenType === 1) {
// Type 1 fungible token
slpSendObj = bchjs.SLP.TokenType1.generateSendOpReturn(
[offeredUtxo],
offerInfo.numTokens.toString()
)
console.log(`slpOutputs: ${slpSendObj.outputs}`)
} else {
throw new Error(`Unknown token type of ${offerInfo.tokenType}. Can not create Counter Offer.`)
}
const slpData = slpSendObj.script
console.log(`slpOutputs: ${slpSendObj.outputs}`)
// Currently this app only supports a single SLP token UTXO for exact
// token quantities (no token change). e.g. 1 UTXO representing the
@@ -334,12 +349,22 @@ class WalletAdapter {
// Update the UTXO store of the wallet.
await this.bchWallet.getUtxos()
// Get the token type of the token being moved.
// Combine Fungible and NFT token UTXOs.
let tokenUtxos = this.bchWallet.utxos.utxoStore.slpUtxos.type1.tokens.concat(
this.bchWallet.utxos.utxoStore.slpUtxos.nft.tokens)
// Get token UTXOs that match the token in the order.
tokenUtxos = tokenUtxos.filter(
x => x.tokenId === tokenId
)
const txid = await this.bchWallet.sendTokens(receiver, 3)
const utxoInfo = {
txid,
vout: 1,
hdIndex: keyPair.hdIndex
hdIndex: keyPair.hdIndex,
tokenType: tokenUtxos[0].tokenType
}
return utxoInfo
+7 -2
View File
@@ -29,7 +29,8 @@ class OfferEntity {
utxoVout,
offerStatus,
makerAddr,
ticker
ticker,
tokenType
} = offerData.data
// Input Validation
@@ -69,6 +70,9 @@ class OfferEntity {
if (!ticker || typeof ticker !== 'string') {
throw new Error("Property 'ticker' must be a string.")
}
if (!tokenType || typeof tokenType !== 'number') {
throw new Error("Property 'tokenType' must be a number.")
}
// Convert the timestamp to a number.
let timestamp = new Date(offerData.timestamp)
@@ -91,7 +95,8 @@ class OfferEntity {
p2wdbHash: offerData.hash,
offerStatus: offerStatus || this.offerStatus[0],
makerAddr,
ticker
ticker,
tokenType
}
return validatedOfferData
+5 -2
View File
@@ -359,10 +359,13 @@ class OfferUseCases {
// console.log('utxoStatus: ', utxoStatus)
} catch (err) {
// Handle corner case of bad-data in the Offer model.
if (err.message.includes('txid needs to be a proper transaction ID')) {
if (err.message && err.message.includes('txid needs to be a proper transaction ID')) {
console.log(`Deleting Offer with bad data: ${JSON.stringify(thisOffer, null, 2)}`)
await thisOffer.remove()
continue
} else if (err.isAxiosError) {
console.log('Error trying to contact api.fullstack.cash')
continue
} else {
throw err
}
@@ -384,7 +387,7 @@ class OfferUseCases {
}
}
} catch (err) {
console.error('Error in removeStaleOffers()')
console.error('Error in removeStaleOffers(): ', err)
throw err
}
}
+13 -5
View File
@@ -65,6 +65,7 @@ class OrderLib {
// Update the order with the new UTXO information.
orderEntity.utxoTxid = utxoInfo.txid
orderEntity.utxoVout = utxoInfo.vout
orderEntity.tokenType = utxoInfo.tokenType
// Add P2WDB specific flag for signaling that this is a new offer.
orderEntity.dataType = 'offer'
@@ -81,6 +82,7 @@ class OrderLib {
// Create a MongoDB model to hold the Order
orderEntity.hdIndex = utxoInfo.hdIndex
orderEntity.p2wdbHash = hash
console.log(`creating new order model: ${JSON.stringify(orderEntity, null, 2)}`)
const order = new this.OrderModel(orderEntity)
await order.save()
@@ -88,7 +90,7 @@ class OrderLib {
return hash
} catch (err) {
// console.log("Error in use-cases/entry.js/createEntry()", err.message)
wlogger.error('Error in use-cases/createOrder())')
wlogger.error('Error in use-cases/order.js/createOrder())')
console.log('error entryObj: ', entryObj)
throw err
}
@@ -116,11 +118,14 @@ class OrderLib {
if (orderEntity.buyOrSell.includes('sell')) {
// Sell Order
// Combine Fungible and NFT token UTXOs.
let tokenUtxos = utxos.slpUtxos.type1.tokens.concat(utxos.slpUtxos.nft.tokens)
// Get token UTXOs that match the token in the order.
const tokenUtxos = utxos.slpUtxos.type1.tokens.filter(
tokenUtxos = tokenUtxos.filter(
x => x.tokenId === orderEntity.tokenId
)
// console.log('tokenUtxos: ', tokenUtxos)
console.log('tokenUtxos: ', tokenUtxos)
// Get the total amount of tokens in the wallet that match the token
// in the order.
@@ -130,7 +135,7 @@ class OrderLib {
// If there are fewer tokens in the wallet than what's in the order,
// throw an error.
if (totalTokenBalance <= orderEntity.numTokens || isNaN(totalTokenBalance)) {
if (totalTokenBalance < orderEntity.numTokens || isNaN(totalTokenBalance)) {
throw new Error(
'App wallet does not have enough tokens to satisfy the SELL order.'
)
@@ -198,10 +203,13 @@ class OrderLib {
// console.log('utxoStatus: ', utxoStatus)
} catch (err) {
// Handle corner case of bad-data in the Order model.
if (err.message.includes('txid needs to be a proper transaction ID')) {
if (err.message && err.message.includes('txid needs to be a proper transaction ID')) {
console.log(`Deleting Order with bad data: ${JSON.stringify(thisOrder, null, 2)}`)
await thisOrder.remove()
continue
} else if (err.isAxiosError) {
console.log('Error trying to contact api.fullstack.cash')
continue
} else {
throw err
}
+5 -4
View File
@@ -262,10 +262,11 @@ describe('#wallet', () => {
wif: 'L4qKTMCwjH9jHnYtNh9Vsrxj7Hg6zmoN8E2v7N47UKvNVEjw7FU8',
hdIndex: 6
})
uut.bchWallet = {
sendTokens: async () => 'fake-txid',
getUtxos: async () => {}
}
uut.bchWallet = new MockBchWallet()
// uut.bchWallet = {
// sendTokens: async () => 'fake-txid',
// getUtxos: async () => {}
// }
const inObj = {
tokenId: 'a4fb5c2da1aa064e25018a43f9165040071d9e984ba190c222a7f59053af84b2',
+3 -1
View File
@@ -254,7 +254,8 @@ describe('#Offer-Entity', () => {
utxoVout: 0,
offerStatus: 'posted',
makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00',
ticker: 'TROUT'
ticker: 'TROUT',
tokenType: 1
},
timestamp: '2021-09-20T17:54:26.395Z',
localTimeStamp: '9/20/2021, 10:54:26 AM',
@@ -279,6 +280,7 @@ describe('#Offer-Entity', () => {
assert.property(result, 'localTimestamp')
assert.property(result, 'txid')
assert.property(result, 'p2wdbHash')
assert.property(result, 'tokenType')
})
})
})
+4 -2
View File
@@ -127,9 +127,11 @@ class MockBchWallet {
]
},
nft: {
groupMintBatons: [],
groupTokens: [],
tokens: []
},
group: {
tokens: [],
mintBatons: []
}
}
}
+2 -1
View File
@@ -96,7 +96,8 @@ describe('#offer-use-case', () => {
'241c06bf61384b8623477e419bf4779edbcc7e3bc862f0f179a9ed2967069b87',
utxoVout: 0,
makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00',
ticker: 'TROUT'
ticker: 'TROUT',
tokenType: 1
},
timestamp: '2021-09-20T17:54:26.395Z',
localTimeStamp: '9/20/2021, 10:54:26 AM',