Compare commits

...
40 Commits
Author SHA1 Message Date
Chris Troutner a80b82da7a Merge pull request #70 from Permissionless-Software-Foundation/ct-unstable
Updating P2WDB docker image
2023-05-11 07:12:38 -07:00
Chris Troutner 41d2aaa16d fix(production): Updating P2WDB docker image 2023-05-11 07:11:11 -07:00
Chris Troutner b9aeb8faa0 Updating list-addrs script 2022-12-24 21:07:30 -08:00
Chris Troutner a4e75cdccc fix(scripts): Adding script to list addresses in a wallet 2022-12-24 21:05:42 -08:00
Chris Troutner f74c94ef50 fix(sweep): Adding fullstack-sweep-wallet.js for faster wallet sweeping 2022-12-24 07:34:54 -08:00
Chris Troutner bfb51fdcc6 fix(docker): Bumping p2wdb to v3.3.5 2022-12-13 06:52:10 -08:00
Chris Troutner 25aaf4146f Merge pull request #69 from Permissionless-Software-Foundation/ct-unstable
Minor fixes. New docker image v2.2.4
2022-12-13 06:47:11 -08:00
Chris Troutner 8ee10f2f8c fix(docker): Increasing docker image to v2.2.4 2022-12-13 06:44:20 -08:00
Chris Troutner bf96821c2c fix(docker): Fixing issue with P2WDB 2022-12-13 06:09:02 -08:00
Chris Troutner 9787806427 fix(docker): Disabling BCH payments in local P2WDB (be default) 2022-12-10 12:36:02 -08:00
Chris Troutner 9043aab432 fix(docker): Switching to p2wdbv3.3.3 2022-12-10 12:19:53 -08:00
Chris Troutner 58989a81dc Merge pull request #68 from Permissionless-Software-Foundation/ct-unstable
fix(config): Using public P2WDB for writes by default
2022-12-10 10:54:07 -08:00
Chris Troutner 82acd623d8 fix(config): Using public P2WDB for writes by default 2022-12-10 10:43:55 -08:00
Chris Troutner e4fe8cc492 Adding minor debug log 2022-12-07 15:26:35 -08:00
Chris Troutner 66b8e6b263 Merge branch 'ct-unstable' 2022-12-05 10:36:25 -08:00
Chris Troutner cabff83222 Updating docker image to v2.2.3 2022-12-05 10:36:16 -08:00
Chris Troutner d94b527780 Merge pull request #67 from Permissionless-Software-Foundation/ct-unstable
fix(minimal-slp-wallet): Updating to v5.5.5
2022-12-05 10:32:38 -08:00
Chris Troutner f0e8a05f08 fix(minimal-slp-wallet): Updating to v5.5.5 2022-12-05 10:27:37 -08:00
Chris Troutner 278b4127e1 fix(docker): Bumping bch-dex container to v2.2.2 2022-12-05 09:51:54 -08:00
Chris Troutner 87b3d7519c Merge pull request #66 from Permissionless-Software-Foundation/ct-unstable
Optimize wallet on new orders. Use local P2WDB
2022-12-05 09:43:14 -08:00
Chris Troutner ed4e75c9ad fix(docker): Using local P2WDB rather than p2wdb.fullstack.cash 2022-12-05 09:39:52 -08:00
Chris Troutner b0cc5a6e0b fix(order): Optimizing wallet before creating new orders 2022-12-05 09:38:28 -08:00
Chris Troutner 6b4139a29e Merge pull request #65 from Permissionless-Software-Foundation/ct-unstable
fix(docker): Disabling P2WDB payment service by default
2022-12-03 13:35:13 -08:00
Chris Troutner 925242262a fix(docker): Disabling P2WDB payment service by default 2022-12-03 13:32:13 -08:00
Chris Troutner 74fe77009c fix(timer): Setting time controller to fire every 10 minutes 2022-12-03 13:27:47 -08:00
Chris Troutner 51f7905dad fix(p2wdb-esm): Upgrading to v2.2.9 2022-12-02 21:10:18 -08:00
Chris Troutner 0b1d3e63f6 Merge pull request #64 from Permissionless-Software-Foundation/ct-unstable
feat(order): Adding functions needed by AMM
2022-12-02 20:07:54 -08:00
Chris Troutner 549fd4fd5a feat(order): Adding functions needed by AMM 2022-12-02 07:44:35 -08:00
Chris Troutner 846ee21c48 Merge pull request #63 from Permissionless-Software-Foundation/ct-unstable
feat(Orders): Added new REST endpoint to get all Orders
2022-12-01 15:12:46 -08:00
Chris Troutner 6654836440 Merge branch 'master' into ct-unstable 2022-12-01 15:10:41 -08:00
Chris Troutner a25a13673e feat(Orders): Added new REST endpoint to get all Orders 2022-12-01 15:10:04 -08:00
Chris Troutner 30eed1ffb1 Merge pull request #62 from Permissionless-Software-Foundation/ct-unstable
fix(production): Updating docker images
2022-11-29 15:49:36 -08:00
Chris Troutner 7884cffdc6 fix(production): Updating docker images 2022-11-29 15:47:18 -08:00
Chris Troutner c1a8210fa7 Merge pull request #61 from Permissionless-Software-Foundation/ct-unstable
fix(p2wdb-esm): Bumping to v2.2.8
2022-11-03 05:58:54 -07:00
Chris Troutner 9f3b482f57 fix(p2wdb-esm): Bumping to v2.2.8 2022-11-03 05:56:48 -07:00
Chris Troutner 9487027852 Merge pull request #60 from Permissionless-Software-Foundation/ct-unstable
fix(garbage collection): Fixing bug that was deleting valid offers
2022-11-02 17:32:45 -07:00
Chris Troutner 9065900608 fix(garbage collection): Fixing bug that was deleting valid offers 2022-11-02 17:02:36 -07:00
Chris Troutner 2da319f896 fix(garbage): Debugging garbage collection 2022-11-02 15:07:47 -07:00
Chris Troutner 449a98d80c fix(offers): Rounding sats 2022-11-02 15:06:10 -07:00
Chris Troutner 2343120fcf Merge pull request #59 from Permissionless-Software-Foundation/ct-unstable
Updating p2wdb lib
2022-10-10 16:49:24 -07:00
16 changed files with 689 additions and 54 deletions
+1
View File
@@ -69,5 +69,6 @@ ipfs-service-provider.sh
run-dev.sh
wallet.json
data/
*.zip
!README.md
+4
View File
@@ -47,6 +47,7 @@ export default {
// 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',
// p2wdbUrl: process.env.P2WDB_URL ? process.env.P2WDB_URL : 'http://localhost:5010',
// FullStack.cash account information, used for automatic JWT handling.
getJwtAtStartup: process.env.GET_JWT_AT_STARTUP ? true : false,
@@ -62,6 +63,9 @@ export default {
fullstackPassword: process.env.FULLSTACKPASS
? process.env.FULLSTACKPASS
: 'demo',
authPass: process.env.FULLSTACK_AUTH_PASS
? process.env.FULLSTACK_AUTH_PASS
: '',
// IPFS settings.
isCircuitRelay: process.env.ENABLE_CIRCUIT_RELAY ? true : false,
+202 -34
View File
@@ -13,6 +13,7 @@
"@psf/bch-js": "6.5.1",
"axios": "0.27.2",
"bch-message-lib": "2.2.1",
"bch-token-sweep": "2.2.1",
"bcryptjs": "2.4.3",
"bitcoincashjs-lib": "3.3.3",
"glob": "7.1.6",
@@ -34,11 +35,11 @@
"koa2-ratelimit": "0.9.1",
"libp2p": "0.36.2",
"line-reader": "0.4.0",
"minimal-slp-wallet": "5.4.3",
"minimal-slp-wallet": "5.5.5",
"mongoose": "5.13.14",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.7.5",
"p2wdb-esm": "2.2.7",
"p2wdb-esm": "2.2.9",
"passport-local": "1.0.0",
"public-ip": "4.0.4",
"winston": "3.3.3",
@@ -46,7 +47,6 @@
},
"devDependencies": {
"apidoc": "0.51.1",
"bch-token-sweep": "2.1.2",
"c8": "7.12.0",
"chai": "4.3.0",
"coveralls": "2.11.4",
@@ -2103,15 +2103,54 @@
}
},
"node_modules/bch-consumer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/bch-consumer/-/bch-consumer-1.4.0.tgz",
"integrity": "sha512-olftYKtCgT+81fnEL0iSArmeRANw1SZjSwwYsZV7t9CJZjtMXBSXJDCaQoAzUAXNRMtICB3uxAKD1MWuBznZuw==",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/bch-consumer/-/bch-consumer-1.4.1.tgz",
"integrity": "sha512-sRXcM4vNGoC+jUfm2t6z37a9FBZvJJ0/6DUbRtzY7lZad4PXDY34wZ7xYvDfCUUuarTk9epp5sVyWxZowQRIOA==",
"dependencies": {
"@psf/bch-js": "6.5.1",
"@psf/bch-js": "6.5.3",
"apidoc": "0.51.0",
"axios": "0.25.0"
}
},
"node_modules/bch-consumer/node_modules/@psf/bch-js": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.5.3.tgz",
"integrity": "sha512-38UB7NRrVzslZydWZWnB8FVWr5UpxG0cs0Xb1zmovfyOnp96XrAXfWLEuNKstAkpLApegeMY055b7vaKop/wRQ==",
"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/bch-consumer/node_modules/@psf/bch-js/node_modules/axios": {
"version": "0.26.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"dependencies": {
"follow-redirects": "^1.14.8"
}
},
"node_modules/bch-consumer/node_modules/apidoc": {
"version": "0.51.0",
"resolved": "https://registry.npmjs.org/apidoc/-/apidoc-0.51.0.tgz",
@@ -2263,9 +2302,9 @@
}
},
"node_modules/bch-token-sweep": {
"version": "2.1.2",
"dev": true,
"license": "MIT",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bch-token-sweep/-/bch-token-sweep-2.2.1.tgz",
"integrity": "sha512-f4UGEpPXzea7HQMRSEb6h/amXiwrlsMBAjl1dVYg5//26IDWeG+e3qVNtMJhm00NMZ0BS+LasUa2xlz0UVziZA==",
"dependencies": {
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
@@ -7118,7 +7157,8 @@
},
"node_modules/jwt-bch-lib": {
"version": "1.3.0",
"license": "MIT",
"resolved": "https://registry.npmjs.org/jwt-bch-lib/-/jwt-bch-lib-1.3.0.tgz",
"integrity": "sha512-CZs3jUHJlWvConvoTeLDogDEwUysKeojYJxfUhbwJKJrtDCSfi3ZWbsZZ8WN30Xs28aZPDB+qlHPJlTXQmup0w==",
"dependencies": {
"axios": "^0.21.1"
}
@@ -8068,17 +8108,49 @@
}
},
"node_modules/minimal-slp-wallet": {
"version": "5.4.3",
"resolved": "https://registry.npmjs.org/minimal-slp-wallet/-/minimal-slp-wallet-5.4.3.tgz",
"integrity": "sha512-l9shPcWUHJhmHa6iJs917XNVQR0jaLHgww0fC78ubRokW0Zhea2jO9FNJLi74T8Nd8StCg1pVAlS+MKszU3swQ==",
"version": "5.5.5",
"resolved": "https://registry.npmjs.org/minimal-slp-wallet/-/minimal-slp-wallet-5.5.5.tgz",
"integrity": "sha512-2L0AsMqaQVz939UNUWXnI+9+pzUEaxPSZfXgYQc2hErpk0+XvysnLTjWvT1DOgB1Cqg5Edy6Q02mRxOdXCJO+w==",
"dependencies": {
"@psf/bch-js": "6.5.1",
"@chris.troutner/retry-queue-commonjs": "1.0.8",
"@psf/bch-js": "6.5.3",
"apidoc": "0.51.0",
"bch-consumer": "1.4.0",
"bch-consumer": "1.4.1",
"bch-donation": "1.1.2",
"crypto-js": "4.0.0"
}
},
"node_modules/minimal-slp-wallet/node_modules/@psf/bch-js": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.5.3.tgz",
"integrity": "sha512-38UB7NRrVzslZydWZWnB8FVWr5UpxG0cs0Xb1zmovfyOnp96XrAXfWLEuNKstAkpLApegeMY055b7vaKop/wRQ==",
"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": "https://registry.npmjs.org/apidoc/-/apidoc-0.51.0.tgz",
@@ -8121,6 +8193,14 @@
"node": ">=14.0.0"
}
},
"node_modules/minimal-slp-wallet/node_modules/axios": {
"version": "0.26.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"dependencies": {
"follow-redirects": "^1.14.8"
}
},
"node_modules/minimal-slp-wallet/node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -8853,6 +8933,8 @@
"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"
@@ -11865,9 +11947,9 @@
}
},
"node_modules/p2wdb-esm": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.7.tgz",
"integrity": "sha512-528nGjthkkAf8n4H7jSX52pCpsprKgRfZKB4emIYHkOFo9rHYOOZMLlbRkluYtAThjVxJd7w3fyplZFPEXzlyA==",
"version": "2.2.9",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.9.tgz",
"integrity": "sha512-I6Pc/Jj2kQRIpDmvs0LAnIv7ssFm1kz+SW+SRkjHezw84arFeeIMkqaVk8DXnKWKfIqy3asG4E77jVGrD55IRA==",
"dependencies": {
"@chris.troutner/retry-queue-commonjs": "1.0.8",
"axios": "0.24.0"
@@ -17109,15 +17191,56 @@
"integrity": "sha512-GzaMlN7pNthrY5BhReVhnfr4Ixx+GUSfyNRHYh0QiMUF0d0+0YaD8MpEdv6AjFBksg/zlqL1fVCBBm6PpTt2Rg=="
},
"bch-consumer": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/bch-consumer/-/bch-consumer-1.4.0.tgz",
"integrity": "sha512-olftYKtCgT+81fnEL0iSArmeRANw1SZjSwwYsZV7t9CJZjtMXBSXJDCaQoAzUAXNRMtICB3uxAKD1MWuBznZuw==",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/bch-consumer/-/bch-consumer-1.4.1.tgz",
"integrity": "sha512-sRXcM4vNGoC+jUfm2t6z37a9FBZvJJ0/6DUbRtzY7lZad4PXDY34wZ7xYvDfCUUuarTk9epp5sVyWxZowQRIOA==",
"requires": {
"@psf/bch-js": "6.5.1",
"@psf/bch-js": "6.5.3",
"apidoc": "0.51.0",
"axios": "0.25.0"
},
"dependencies": {
"@psf/bch-js": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.5.3.tgz",
"integrity": "sha512-38UB7NRrVzslZydWZWnB8FVWr5UpxG0cs0Xb1zmovfyOnp96XrAXfWLEuNKstAkpLApegeMY055b7vaKop/wRQ==",
"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": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"requires": {
"follow-redirects": "^1.14.8"
}
}
}
},
"apidoc": {
"version": "0.51.0",
"resolved": "https://registry.npmjs.org/apidoc/-/apidoc-0.51.0.tgz",
@@ -17228,8 +17351,9 @@
"requires": {}
},
"bch-token-sweep": {
"version": "2.1.2",
"dev": true,
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/bch-token-sweep/-/bch-token-sweep-2.2.1.tgz",
"integrity": "sha512-f4UGEpPXzea7HQMRSEb6h/amXiwrlsMBAjl1dVYg5//26IDWeG+e3qVNtMJhm00NMZ0BS+LasUa2xlz0UVziZA==",
"requires": {
"bch-donation": "1.1.2",
"bignumber.js": "9.0.0"
@@ -20404,6 +20528,8 @@
},
"jwt-bch-lib": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/jwt-bch-lib/-/jwt-bch-lib-1.3.0.tgz",
"integrity": "sha512-CZs3jUHJlWvConvoTeLDogDEwUysKeojYJxfUhbwJKJrtDCSfi3ZWbsZZ8WN30Xs28aZPDB+qlHPJlTXQmup0w==",
"requires": {
"axios": "^0.21.1"
},
@@ -21079,17 +21205,49 @@
"dev": true
},
"minimal-slp-wallet": {
"version": "5.4.3",
"resolved": "https://registry.npmjs.org/minimal-slp-wallet/-/minimal-slp-wallet-5.4.3.tgz",
"integrity": "sha512-l9shPcWUHJhmHa6iJs917XNVQR0jaLHgww0fC78ubRokW0Zhea2jO9FNJLi74T8Nd8StCg1pVAlS+MKszU3swQ==",
"version": "5.5.5",
"resolved": "https://registry.npmjs.org/minimal-slp-wallet/-/minimal-slp-wallet-5.5.5.tgz",
"integrity": "sha512-2L0AsMqaQVz939UNUWXnI+9+pzUEaxPSZfXgYQc2hErpk0+XvysnLTjWvT1DOgB1Cqg5Edy6Q02mRxOdXCJO+w==",
"requires": {
"@psf/bch-js": "6.5.1",
"@chris.troutner/retry-queue-commonjs": "1.0.8",
"@psf/bch-js": "6.5.3",
"apidoc": "0.51.0",
"bch-consumer": "1.4.0",
"bch-consumer": "1.4.1",
"bch-donation": "1.1.2",
"crypto-js": "4.0.0"
},
"dependencies": {
"@psf/bch-js": {
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@psf/bch-js/-/bch-js-6.5.3.tgz",
"integrity": "sha512-38UB7NRrVzslZydWZWnB8FVWr5UpxG0cs0Xb1zmovfyOnp96XrAXfWLEuNKstAkpLApegeMY055b7vaKop/wRQ==",
"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": "https://registry.npmjs.org/apidoc/-/apidoc-0.51.0.tgz",
@@ -21119,6 +21277,14 @@
"winston": "^3.3.3"
}
},
"axios": {
"version": "0.26.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"requires": {
"follow-redirects": "^1.14.8"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -21599,7 +21765,9 @@
}
},
"node-fetch": {
"version": "npm:@achingbrain/node-fetch@2.6.7"
"version": "npm:@achingbrain/node-fetch@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=="
},
"node-forge": {
"version": "1.3.1"
@@ -23626,9 +23794,9 @@
"dev": true
},
"p2wdb-esm": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.7.tgz",
"integrity": "sha512-528nGjthkkAf8n4H7jSX52pCpsprKgRfZKB4emIYHkOFo9rHYOOZMLlbRkluYtAThjVxJd7w3fyplZFPEXzlyA==",
"version": "2.2.9",
"resolved": "https://registry.npmjs.org/p2wdb-esm/-/p2wdb-esm-2.2.9.tgz",
"integrity": "sha512-I6Pc/Jj2kQRIpDmvs0LAnIv7ssFm1kz+SW+SRkjHezw84arFeeIMkqaVk8DXnKWKfIqy3asG4E77jVGrD55IRA==",
"requires": {
"@chris.troutner/retry-queue-commonjs": "1.0.8",
"axios": "0.24.0"
+3 -3
View File
@@ -32,6 +32,7 @@
"@psf/bch-js": "6.5.1",
"axios": "0.27.2",
"bch-message-lib": "2.2.1",
"bch-token-sweep": "2.2.1",
"bcryptjs": "2.4.3",
"bitcoincashjs-lib": "3.3.3",
"glob": "7.1.6",
@@ -53,11 +54,11 @@
"koa2-ratelimit": "0.9.1",
"libp2p": "0.36.2",
"line-reader": "0.4.0",
"minimal-slp-wallet": "5.4.3",
"minimal-slp-wallet": "5.5.5",
"mongoose": "5.13.14",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.7.5",
"p2wdb-esm": "2.2.7",
"p2wdb-esm": "2.2.9",
"passport-local": "1.0.0",
"public-ip": "4.0.4",
"winston": "3.3.3",
@@ -65,7 +66,6 @@
},
"devDependencies": {
"apidoc": "0.51.1",
"bch-token-sweep": "2.1.2",
"c8": "7.12.0",
"chai": "4.3.0",
"coveralls": "2.11.4",
@@ -29,4 +29,6 @@ export WEBHOOKSERVICE=http://172.17.0.1:5667/webhook
export WEBHOOKTARGET=http://172.17.0.1:5700/p2wdb
export APP_ID=bch-dex-001
#export P2WDB_URL=http://172.17.0.1:5667
npm start
+11 -9
View File
@@ -46,10 +46,11 @@ services:
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/p2wdb:v3.1.8
image: christroutner/p2wdb:v4.0.3
container_name: p2wdb
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
#ENABLE_BCH_PAYMENT: 1
DEBUG_LEVEL: 1
logging:
driver: 'json-file'
@@ -67,13 +68,14 @@ services:
volumes:
- ../data/ipfsdata/p2wdb:/home/safeuser/ipfs-p2wdb-service/.ipfsdata/p2wdb
- ./p2wdb/start-production.sh:/home/safeuser/ipfs-p2wdb-service/start-production.sh
#- ../scripts/wallet.json:/home/safeuser/ipfs-p2wdb-service/wallet.json
restart: always
bch-dex:
build:
context: ./bch-dex/
dockerfile: Dockerfile
#image: christroutner/bch-dex:v2.0.8
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex:v2.2.4
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -94,10 +96,10 @@ services:
restart: always
dex-ui:
build:
context: ./bch-dex-ui/
dockerfile: Dockerfile
#image: christroutner/bch-dex-ui:v1.2.4
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui:v1.2.4
container_name: dex-ui
environment:
SERVER: 'http://192.168.2.3'
+153
View File
@@ -0,0 +1,153 @@
/*
This script is similar ot sweep-wallet.js, but it can do a much faster (bulk)
scanning of addresses. However, this requires a subscription to a FullStack.cash
or access to a web2 Cash Stack.
This script will scan 20 addresses at a time. If a balance is found in any
of the addresses, it will sweep the funds from that address.
*/
/*
// Public npm libraries
import BchTokenSweep from 'bch-token-sweep/index.js'
// Local libraries
import WalletAdapter from '../../src/adapters/wallet.js'
import BCHJS from '@psf/bch-js'
import JwtLib from 'jwt-bch-lib'
// Constants
// const EMTPY_ADDR_CUTOFF = 100
const LAST_ADDR_INDEX = 100
if (!process.env.BCHJSTOKEN) {
console.log('You will need a JWT token from FullStack.cash to execute this script. Export it to the BCHJSTOKEN environment variable and try again.')
exit(0)
}
async function sweepFunds () {
try {
// Configure the wallet library to use a FullStack.cash or a local Cash Stack
const walletLib = new WalletAdapter()
walletLib.config.useFullStackCash = true
walletLib.config.apiServer = 'http://192.168.2.129:3000/v5/'
// const walletInfo = await walletLib.openWallet()
const walletInfo = await openWallet(walletLib)
const wallet = await walletLib.instanceWallet(walletInfo)
console.log('walletInfo: ', walletInfo)
const rootAddr = walletInfo.cashAddress
const rootWif = walletInfo.privateKey
console.log(`Sweeping all funds into root address ${rootAddr}...`)
// Instantiate bch-js, and use the JWT token saved to environment variable.
// Generate an HD tree
// const bchjs = wallet.bchjs
const bchjs = new BCHJS()
const rootSeed = await bchjs.Mnemonic.toSeed(walletInfo.mnemonic)
const masterHDNode = bchjs.HDNode.fromSeed(rootSeed)
const emptyAddrCnt = 0
const hdIndex = 1
// Divide all the addresses by 20, since that's how many will be checked at once.
const numOfLoops = Math.ceil(LAST_ADDR_INDEX / 20)
for (let i = 1; i < numOfLoops; i++) {
const startIndex = i
const stopIndex = i * 20
console.log(`startIndex: ${startIndex}, stopIndex: ${stopIndex}`)
// Generate the next block of 20 key pairs to scan.
const addrsToScan = []
const wifsToScan = []
for (let j = startIndex; j < stopIndex; j++) {
// Generate a keypair from the HD wallet.
const childNode = masterHDNode.derivePath(`m/44'/245'/0'/0/${j}`)
const cashAddress = bchjs.HDNode.toCashAddress(childNode)
const wifToSweep = bchjs.HDNode.toWIF(childNode)
addrsToScan.push(cashAddress)
wifsToScan.push(wifToSweep)
}
console.log(`Scanning these addresses for a balance: ${JSON.stringify(addrsToScan, null, 2)}`)
// Scan a block of 20 addresses for a balance.
const balances = await bchjs.Electrumx.balance(addrsToScan)
console.log(`balances: ${JSON.stringify(balances, null, 2)}`)
// Scan through the results and look for a balance.
for (let j = 0; j < balances.balances.length; j++) {
const thisBalance = balances.balances[j]
// const combinedBal = thisBalance.balance.confirmed + thisBalance.balance.
// if(thisBalance.)
}
}
// do {
// // Generate a keypair from the HD wallet.
// const childNode = masterHDNode.derivePath(`m/44'/245'/0'/0/${hdIndex}`)
// const cashAddress = bchjs.HDNode.toCashAddress(childNode)
// const wifToSweep = bchjs.HDNode.toWIF(childNode)
//
// console.log(`\nSweeping ${cashAddress} with private key ${wifToSweep}`)
//
// try {
// // Sweep tokens from address
// const sweeper = new BchTokenSweep(
// wifToSweep,
// rootWif,
// wallet,
// 550,
// rootAddr
// )
// await sweeper.populateObjectFromNetwork()
//
// const hex = await sweeper.sweepTo(rootAddr)
// // console.log(`hex: ${hex}`)
//
// const txid = await sweeper.blockchain.broadcast(hex)
//
// // console.log('Transaction ID', txid)
// console.log(`Swept HD index ${hdIndex}. TXID: ${txid}`)
//
// emptyAddrCnt = 0
//
// // Wait between loop iterations.
// await bchjs.Util.sleep(3000)
// } catch (err) {
// console.log(`error message with index ${hdIndex}: ${err.message}`)
// // console.log(err)
// emptyAddrCnt++
// }
//
// hdIndex++
// } while (emptyAddrCnt < EMTPY_ADDR_CUTOFF)
//
// console.log(`${EMTPY_ADDR_CUTOFF} empty addresses detected. Exiting.`)
//
// console.log('\n\nDo not forget to reset the nextAddress property in the wallet.json file!\n\n')
} catch (err) {
console.error('Error in sweepFunds(): ', err)
}
}
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
}
}
*/
@@ -0,0 +1,111 @@
/*
This script is the same as sweep-wallet.js, but it requires a FullStack.cash
account, which makes the scanning much faster.
*/
// Public npm libraries
// const BCHJS = require('@psf/bch-js')
import BchTokenSweep from 'bch-token-sweep/index.js'
// Local libraries
import WalletAdapter from '../../src/adapters/wallet.js'
// Constants
// const EMTPY_ADDR_CUTOFF = 10
const START_INDEX = 1
const LAST_ADDR_INDEX = 100
if (!process.env.BCHJSTOKEN) {
console.log('You will need a JWT token from FullStack.cash to execute this script. Export it to the BCHJSTOKEN environment variable and try again.')
process.exit(0)
}
async function sweepFunds () {
try {
// Configure the wallet library to use a FullStack.cash or a local Cash Stack
const walletLib = new WalletAdapter()
walletLib.config.useFullStackCash = true
// walletLib.config.apiServer = 'http://192.168.2.129:3000/v5/'
walletLib.config.apiServer = 'https://api.fullstack.cash/v5/'
// Open the wallet files.
const walletInfo = await openWallet(walletLib)
const wallet = await walletLib.instanceWallet(walletInfo)
console.log('walletInfo: ', walletInfo)
const rootAddr = walletInfo.cashAddress
const rootWif = walletInfo.privateKey
console.log(`Sweeping all funds into root address ${rootAddr}...`)
// Generate an HD tree
const bchjs = wallet.bchjs
const rootSeed = await bchjs.Mnemonic.toSeed(walletInfo.mnemonic)
const masterHDNode = bchjs.HDNode.fromSeed(rootSeed)
let emptyAddrCnt = 0
let hdIndex = START_INDEX
do {
// Generate a keypair from the HD wallet.
const childNode = masterHDNode.derivePath(`m/44'/245'/0'/0/${hdIndex}`)
const cashAddress = bchjs.HDNode.toCashAddress(childNode)
const wifToSweep = bchjs.HDNode.toWIF(childNode)
console.log(`\nSweeping ${cashAddress} with private key ${wifToSweep}`)
try {
// Sweep tokens from address
const sweeper = new BchTokenSweep(
wifToSweep,
rootWif,
wallet,
550,
rootAddr
)
await sweeper.populateObjectFromNetwork()
const hex = await sweeper.sweepTo(rootAddr)
// console.log(`hex: ${hex}`)
const txid = await sweeper.blockchain.broadcast(hex)
// console.log('Transaction ID', txid)
console.log(`Swept HD index ${hdIndex}. TXID: ${txid}`)
emptyAddrCnt = 0
// Wait between loop iterations.
await bchjs.Util.sleep(3000)
} catch (err) {
console.log(`error message with index ${hdIndex}: ${err.message}`)
// console.log(err)
emptyAddrCnt++
}
hdIndex++
// } while (emptyAddrCnt < EMTPY_ADDR_CUTOFF)
// console.log(`${EMTPY_ADDR_CUTOFF} empty addresses detected. Exiting.`)
} while (hdIndex < LAST_ADDR_INDEX)
console.log(`Last index of ${LAST_ADDR_INDEX} reached. emptyAddrCnt: ${emptyAddrCnt}`)
console.log('\n\nDo not forget to reset the nextAddress property in the wallet.json file!\n\n')
} catch (err) {
console.error('Error in sweepFunds(): ', err)
}
}
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
}
}
+67
View File
@@ -0,0 +1,67 @@
/*
This script is the same as sweep-wallet.js, but instead of sweeping the keys,
it simply lists out the addresses in the HD keychain. This is hany when trying
to figure out which address a token was sent to.
*/
// Public npm libraries
// Local libraries
import WalletAdapter from '../../src/adapters/wallet.js'
// Constants
const START_INDEX = 1
const LAST_ADDR_INDEX = 100
async function listAddrs () {
try {
// Configure the wallet library to use a FullStack.cash or a local Cash Stack
const walletLib = new WalletAdapter()
// Open the wallet files.
const walletInfo = await openWallet(walletLib)
const wallet = await walletLib.instanceWallet(walletInfo)
console.log('walletInfo: ', walletInfo)
const rootAddr = walletInfo.cashAddress
// const rootWif = walletInfo.privateKey
console.log(`Sweeping all funds into root address ${rootAddr}...`)
// Generate an HD tree
const bchjs = wallet.bchjs
const rootSeed = await bchjs.Mnemonic.toSeed(walletInfo.mnemonic)
const masterHDNode = bchjs.HDNode.fromSeed(rootSeed)
let hdIndex = START_INDEX
do {
// Generate a keypair from the HD wallet.
const childNode = masterHDNode.derivePath(`m/44'/245'/0'/0/${hdIndex}`)
const cashAddress = bchjs.HDNode.toCashAddress(childNode)
// const wifToSweep = bchjs.HDNode.toWIF(childNode)
console.log(`HD Index ${hdIndex}: ${cashAddress}`)
hdIndex++
} while (hdIndex < LAST_ADDR_INDEX)
console.log(`Last index of ${LAST_ADDR_INDEX} reached.`)
} catch (err) {
console.error('Error in sweepFunds(): ', err)
}
}
listAddrs()
// 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
}
}
-2
View File
@@ -2,8 +2,6 @@
This script will travers the HD wallet and sweep funds and tokens back
into the root address (index 0). That root address needs to have funds
to pay for the transactions.
This script will sweep BCH and fungible (Type 1) tokens, but not NFTs.
*/
// Public npm libraries
+46 -1
View File
@@ -4,6 +4,7 @@
// Public npm libraries
import BchWallet from 'minimal-slp-wallet'
import BchTokenSweep from 'bch-token-sweep/index.js'
import bitcoinJs from 'bitcoincashjs-lib'
@@ -22,6 +23,8 @@ const WALLET_FILE = `${__dirname.toString()}/../../wallet.json`
// const P2WDB_TOKEN_ID =
// '38e97c5d7d3585a2cbf3f9580c82ca33985f9cb0845d4dcce220cb709f9538b0'
const advancedConfig = {}
class WalletAdapter {
constructor (localConfig = {}) {
// Encapsulate dependencies
@@ -31,6 +34,7 @@ class WalletAdapter {
this.bitcoinJs = bitcoinJs
this.BchWallet = BchWallet
this.bchWallet = {} // Will be replaced when initialized.
// this.advancedConfig = localConfig.advancedConfig
// Bind the 'this' object
this.moveTokens = this.moveTokens.bind(this)
@@ -87,7 +91,7 @@ class WalletAdapter {
throw new Error('Wallet data is not formatted correctly. Can not read mnemonic in wallet file!')
}
const advancedConfig = {}
// const advancedConfig = {}
console.log(`Using FullStack.cash: ${this.config.useFullStackCash}`)
if (this.config.useFullStackCash) {
advancedConfig.interface = 'rest-api'
@@ -512,6 +516,47 @@ class WalletAdapter {
throw err
}
}
// Given an Order database object, this function sends the tokens from the
// HD index where they are stored, back to the root address of the wallet.
async reclaimTokens (orderData) {
try {
// Get the key pair from the Order.
const keyPair = await this.getKeyPair(orderData.hdIndex)
console.log('keyPair: ', keyPair)
// Instantiate the wallet using the private key of the Order.
// const tempWallet = new this.BchWallet(keyPair.wif, advancedConfig)
// await tempWallet.initialize()
// Send the tokens from the Order to the root address.
// const receiver = {
// address: this.bchWallet.walletInfo.address,
// tokenId: orderData.tokenId,
// qty: orderData.numTokens
// }
// console.log('receiver: ', receiver)
//
// const txid = await tempWallet.sendTokens(receiver)
// Sweep the tokens to the root address.
const sweeper = new BchTokenSweep(
keyPair.wif,
this.bchWallet.walletInfo.privateKey,
this.bchWallet,
550,
this.bchWallet.walletInfo.cashAddress
)
await sweeper.populateObjectFromNetwork()
const hex = await sweeper.sweepTo(this.bchWallet.walletInfo.cashAddress)
const txid = await this.bchWallet.ar.sendTx(hex)
return txid
} catch (err) {
console.error('Error in wallet.js/reclaimTokens()')
throw err
}
}
}
export default WalletAdapter
@@ -35,6 +35,7 @@ class OrderRESTControllerLib {
// console.log('body: ', ctx.request.body)
const orderObj = ctx.request.body.order
console.log('orderObj: ', orderObj)
const hash = await _this.useCases.order.createOrder(orderObj)
@@ -47,6 +48,41 @@ class OrderRESTControllerLib {
}
}
// curl -X GET http://localhost:5700/order/list/all/0
async listOrders (ctx) {
try {
let page = ctx.params.page
if (!page) page = 0
const offers = await _this.useCases.order.listOrders(page)
ctx.body = offers
} catch (err) {
console.log('Error in listOrders REST API handler: ', err)
_this.handleError(ctx, err)
}
}
// Delete an existing order by returning the token to the root address of
// the DEX wallet.
async deleteOrder (ctx) {
try {
// console.log('body: ', ctx.request.body)
const p2wdbHash = ctx.request.body.p2wdbHash
// console.log('p2wdbHash: ', p2wdbHash)
const txid = await _this.useCases.order.deleteOrder(p2wdbHash)
ctx.body = { txid }
} catch (err) {
// console.log(`err.message: ${err.message}`)
// console.log('err: ', err)
// ctx.throw(422, err.message)
_this.handleError(ctx, err)
}
}
// DRY error handler
handleError (ctx, err) {
console.log('err', err)
+2
View File
@@ -50,6 +50,8 @@ class OrderRouter {
// Define the routes and attach the controller.
this.router.post('/', _this.orderRESTController.createOrder)
this.router.get('/list/all/:page', _this.orderRESTController.listOrders)
this.router.post('/delete', _this.orderRESTController.deleteOrder)
// Attach the Controller routes to the Koa app.
app.use(_this.router.routes())
+5 -4
View File
@@ -306,7 +306,7 @@ class OfferUseCases {
console.log(`utxos: ${JSON.stringify(utxos, null, 2)}`)
// Calculate amount of sats to generate a counter offer.
let satsToMove = offerInfo.numTokens * parseInt(offerInfo.rateInBaseUnit)
let satsToMove = Math.ceil(offerInfo.numTokens * parseInt(offerInfo.rateInBaseUnit))
if (isNaN(satsToMove)) {
throw new Error('Could not calculate the amount of BCH to generate counter offer')
}
@@ -385,7 +385,7 @@ class OfferUseCases {
// Sell Offer
// Calculate the sats needed
const satsNeeded = offerEntity.numTokens * parseInt(offerEntity.rateInBaseUnit)
const satsNeeded = Math.ceil(offerEntity.numTokens * parseInt(offerEntity.rateInBaseUnit))
if (isNaN(satsNeeded)) {
throw new Error('Could not calculate sats needed!')
}
@@ -467,7 +467,7 @@ class OfferUseCases {
console.log(`txObj: ${JSON.stringify(txObj, null, 2)}`)
// Ensure the 3rd output (vout=2) contains the required amount of BCH.
const satsToReceive = orderData.numTokens * parseInt(orderData.rateInBaseUnit)
const satsToReceive = Math.ceil(orderData.numTokens * parseInt(orderData.rateInBaseUnit))
if (isNaN(satsToReceive)) {
throw new Error('Could not calculate the amount of BCH offered in the Counter Offer')
}
@@ -579,7 +579,8 @@ class OfferUseCases {
}
// If the Offer UTXO is spent, delete the Offer model.
if (!utxoStatus) {
if (utxoStatus === false) {
console.log('utxoStatus: ', utxoStatus)
console.log(`Spent UTXO detected. Deleting this Offer: ${JSON.stringify(thisOffer, null, 2)}`)
await thisOffer.remove()
}
+45 -1
View File
@@ -10,6 +10,8 @@ import wlogger from '../adapters/wlogger.js'
import OrderEntity from '../entities/order.js'
import config from '../../config/index.js'
const DEFAULT_ENTRIES_PER_PAGE = 20
class OrderLib {
constructor (localConfig = {}) {
// console.log('User localConfig: ', localConfig)
@@ -47,6 +49,10 @@ class OrderLib {
const orderEntity = this.orderEntity.inputValidate(entryObj)
console.log('orderEntity: ', orderEntity)
// Optimize the wallet to speed up working with it.
console.log('Optimizing wallet before creating new order.')
await this.retryQueue.addToQueue(this.adapters.wallet.bchWallet.optimize, {})
// Ensure sufficient tokens exist to create the order.
// await this.ensureFunds(orderEntity)
await this.retryQueue.addToQueue(this.ensureFunds, orderEntity)
@@ -235,7 +241,8 @@ class OrderLib {
}
// If the Order UTXO is spent, delete the Order model.
if (!utxoStatus) {
if (utxoStatus === false) {
console.log('utxoStatus: ', utxoStatus)
console.log(`Spent UTXO detected. Deleting this Order: ${JSON.stringify(thisOrder, null, 2)}`)
await thisOrder.remove()
}
@@ -245,6 +252,43 @@ class OrderLib {
throw err
}
}
async listOrders (page = 0) {
try {
const data = await this.OrderModel.find({})
// Sort entries so newest entries show first.
.sort('-timestamp')
// Skip to the start of the selected page.
.skip(page * DEFAULT_ENTRIES_PER_PAGE)
// Only return 20 results.
.limit(DEFAULT_ENTRIES_PER_PAGE)
return data
} catch (error) {
console.error('Error in use-cases/order/listOrders()')
throw error
}
}
// Delete an Order model by sending the token back to the root address. This
// will allow the garbage collectors to delete the Order and the Offer.
async deleteOrder (p2wdbHash) {
try {
console.log('p2wdbHash: ', p2wdbHash)
// Find the order by the given hash.
const order = await this.findOrderByHash(p2wdbHash)
console.log('order: ', order)
// Reclaim the tokens
const txid = await this.adapters.wallet.reclaimTokens(order)
return txid
} catch (err) {
console.error('Error in use-cases/order/deleteOrder()')
throw err
}
}
}
export default OrderLib
+1
View File
@@ -37,6 +37,7 @@ class MockBchWallet {
this.getTokenData = async () => {}
this.initialize = async () => {}
this.utxoIsValid = async () => {}
this.optimize = async () => {}
// Environment variable is used by wallet-balance.unit.js to force an error.
if (process.env.NO_UTXO) {