Compare commits

...
20 Commits
Author SHA1 Message Date
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
20 changed files with 213 additions and 198 deletions
+5 -2
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
@@ -91,7 +94,7 @@ class Server {
// MIDDLEWARE END
// Delay startup to give the P2WDB time to start first, so that it accepts the webook call
await sleep(5000)
await sleep(20000)
// Create webhook
try {
+1 -1
View File
@@ -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,
+104 -161
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.5.2",
"minimal-slp-wallet": "4.5.4",
"mongoose": "5.13.13",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.4.17",
@@ -1559,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",
@@ -5241,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",
@@ -9246,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"
@@ -9771,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"
@@ -9954,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"
@@ -10518,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"
@@ -10812,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"
@@ -11071,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"
@@ -13895,22 +13899,22 @@
}
},
"node_modules/minimal-slp-wallet": {
"version": "4.5.2",
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.2.tgz",
"integrity": "sha512-aVTzMmEDiWNVVED4S5ixtBjY7Y4sfFmzVM7v6PuH8wU8ceXyZPzVwlJgjC2Lm0o11bToHAPhuT1Ytafr1YkseA==",
"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.8",
"@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.8",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.8.tgz",
"integrity": "sha512-kJoAeBmdVT6qjwAIlxPDgD1WkCBcAbDsbcwu1fqC0VfcrchuxajAGjqesQDY5bBsCjDKf6/taGC9zl+/pEW+jw==",
"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",
@@ -13939,15 +13943,6 @@
"wif": "2.0.6"
}
},
"node_modules/minimal-slp-wallet/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==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.14.8"
}
},
"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",
@@ -13998,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==",
@@ -14058,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",
@@ -19479,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,
@@ -24416,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",
@@ -27054,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": {
@@ -29669,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",
@@ -30242,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",
@@ -30670,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",
@@ -30821,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",
@@ -31033,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",
@@ -31251,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",
@@ -33209,21 +33188,21 @@
"dev": true
},
"minimal-slp-wallet": {
"version": "4.5.2",
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.2.tgz",
"integrity": "sha512-aVTzMmEDiWNVVED4S5ixtBjY7Y4sfFmzVM7v6PuH8wU8ceXyZPzVwlJgjC2Lm0o11bToHAPhuT1Ytafr1YkseA==",
"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.8",
"@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.8",
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.8.tgz",
"integrity": "sha512-kJoAeBmdVT6qjwAIlxPDgD1WkCBcAbDsbcwu1fqC0VfcrchuxajAGjqesQDY5bBsCjDKf6/taGC9zl+/pEW+jw==",
"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",
@@ -33249,16 +33228,6 @@
"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"
}
}
}
},
"apidoc": {
@@ -33296,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"
}
}
}
@@ -37074,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,
+2 -2
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.5.2",
"minimal-slp-wallet": "4.5.4",
"mongoose": "5.13.13",
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
"nodemailer": "6.4.17",
+1 -1
View File
@@ -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
+4 -3
View File
@@ -46,10 +46,11 @@ services:
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/p2wdb-bch-dex:v1.6.2
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:
@@ -71,7 +72,7 @@ services:
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex:v1.6.4
image: christroutner/bch-dex:v1.7.1
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -94,7 +95,7 @@ services:
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui:v1.6.4
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
+6 -5
View File
@@ -47,10 +47,11 @@ services:
#build:
# context: ./p2wdb/
# dockerfile: Dockerfile
image: christroutner/pwd-bch-dex-rpi:v1.6.2
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:
@@ -69,10 +70,10 @@ services:
restart: always
bch-dex:
build:
context: ./bch-dex/
dockerfile: Dockerfile
#image: christroutner/bch-dex-rpi:v1.6.6
#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'
@@ -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
+17 -1
View File
@@ -18,7 +18,8 @@ async function sweepFunds () {
try {
// Open the wallet files.
const walletLib = new WalletAdapter()
const walletInfo = await walletLib.openWallet()
// const walletInfo = await walletLib.openWallet()
const walletInfo = await openWallet(walletLib)
const wallet = await walletLib.instanceWallet(walletInfo)
console.log('walletInfo: ', walletInfo)
@@ -82,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
+3
View File
@@ -363,6 +363,9 @@ class OfferUseCases {
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
}
+11 -3
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.
@@ -202,6 +207,9 @@ class OrderLib {
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',