Compare commits

...
26 Commits
Author SHA1 Message Date
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
18 changed files with 513 additions and 161 deletions
+3
View File
@@ -90,6 +90,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 {
+419 -121
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": {
@@ -13694,18 +13895,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 +13989,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 +13997,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",
@@ -24174,9 +24375,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 +25514,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": {
@@ -32868,17 +33168,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 +33245,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"
}
}
}
+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
+2 -2
View File
@@ -71,7 +71,7 @@ services:
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex:v1.6.2
image: christroutner/bch-dex:v1.7.0
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -94,7 +94,7 @@ services:
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui:v1.6.2
image: christroutner/bch-dex-ui:v1.6.5
container_name: dex-ui
environment:
SERVER: 'http://192.168.2.3'
+2 -2
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
+2 -2
View File
@@ -72,7 +72,7 @@ services:
#build:
# context: ./bch-dex/
# dockerfile: Dockerfile
image: christroutner/bch-dex-rpi:v1.6.2
image: christroutner/bch-dex-rpi:v1.7.0
container_name: bch-dex
environment:
CONSUMER_URL: 'https://free-bch.fullstack.cash'
@@ -95,7 +95,7 @@ services:
#build:
# context: ./bch-dex-ui/
# dockerfile: Dockerfile
image: christroutner/bch-dex-ui-rpi:v1.6.2
image: christroutner/bch-dex-ui-rpi:v1.6.4
container_name: dex-ui
logging:
driver: 'json-file'
+7 -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,9 @@ 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 wallet = await walletLib.instanceWallet(walletInfo)
console.log('walletInfo: ', walletInfo)
const rootAddr = walletInfo.cashAddress
@@ -26,7 +27,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 +47,7 @@ async function sweepFunds () {
const sweeper = new BchTokenSweep(
wifToSweep,
rootWif,
bchjs,
wallet,
550,
rootAddr
)
@@ -66,6 +67,7 @@ async function sweepFunds () {
await bchjs.Util.sleep(3000)
} catch (err) {
console.log(`error message with index ${hdIndex}: ${err.message}`)
// console.log(err)
emptyAddrCnt++
}
+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
}
}
+12 -4
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.
@@ -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',