mirror of
https://github.com/Permissionless-Software-Foundation/bch-dex.git
synced 2026-09-21 16:52:00 -07:00
feat(NFT): Adding support for NFTs
This commit is contained in:
+1
-1
@@ -91,7 +91,7 @@ class Server {
|
|||||||
// MIDDLEWARE END
|
// MIDDLEWARE END
|
||||||
|
|
||||||
// Delay startup to give the P2WDB time to start first, so that it accepts the webook call
|
// Delay startup to give the P2WDB time to start first, so that it accepts the webook call
|
||||||
await sleep(20000)
|
await sleep(2000)
|
||||||
|
|
||||||
// Create webhook
|
// Create webhook
|
||||||
try {
|
try {
|
||||||
|
|||||||
Generated
+57
-141
@@ -9,7 +9,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": "6.2.5",
|
"@psf/bch-js": "6.3.1",
|
||||||
"axios": "0.21.1",
|
"axios": "0.21.1",
|
||||||
"bch-message-lib": "2.2.0",
|
"bch-message-lib": "2.2.0",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
"koa2-ratelimit": "0.9.1",
|
"koa2-ratelimit": "0.9.1",
|
||||||
"libp2p": "^0.36.2",
|
"libp2p": "^0.36.2",
|
||||||
"line-reader": "0.4.0",
|
"line-reader": "0.4.0",
|
||||||
"minimal-slp-wallet": "4.5.2",
|
"minimal-slp-wallet": "4.5.4",
|
||||||
"mongoose": "5.13.13",
|
"mongoose": "5.13.13",
|
||||||
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
|
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
|
||||||
"nodemailer": "6.4.17",
|
"nodemailer": "6.4.17",
|
||||||
@@ -1559,9 +1559,9 @@
|
|||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
},
|
},
|
||||||
"node_modules/@psf/bch-js": {
|
"node_modules/@psf/bch-js": {
|
||||||
"version": "6.2.5",
|
"version": "6.3.1",
|
||||||
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.5.tgz",
|
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.3.1.tgz",
|
||||||
"integrity": "sha512-Obw+i04uIzImkacNrAUZjlO3Fi7SPcDiWkTZPJLsa+YShmICzWpayUSZvP+TgcJBZDH8ikRWxOz4fBA0fPW+iQ==",
|
"integrity": "sha512-Slzq7FJFIWvQ6xhZSm4cnkvPIuFmZNrqtW2IDjZD/aHOX7nZlyQ7Hg4MTbb8CzekUHNroFyKyM36iUU7MaeQmw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chris.troutner/bip32-utils": "1.0.5",
|
"@chris.troutner/bip32-utils": "1.0.5",
|
||||||
@@ -13895,22 +13895,22 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimal-slp-wallet": {
|
"node_modules/minimal-slp-wallet": {
|
||||||
"version": "4.5.2",
|
"version": "4.5.4",
|
||||||
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.2.tgz",
|
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.4.tgz",
|
||||||
"integrity": "sha512-aVTzMmEDiWNVVED4S5ixtBjY7Y4sfFmzVM7v6PuH8wU8ceXyZPzVwlJgjC2Lm0o11bToHAPhuT1Ytafr1YkseA==",
|
"integrity": "sha512-CzEe402T4NsFRVoovYQF5Db4lZHYnEQZseYVJMQwghVZ2gV+M69Igmsxj2/rxDGbiVbBSPd7ILMnWmes/BiseA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": "6.2.8",
|
"@psf/bch-js": "6.2.14",
|
||||||
"apidoc": "0.51.0",
|
"apidoc": "0.51.0",
|
||||||
"bch-consumer": "1.2.2",
|
"bch-consumer": "1.2.3",
|
||||||
"bch-donation": "1.1.2",
|
"bch-donation": "1.1.2",
|
||||||
"crypto-js": "4.0.0"
|
"crypto-js": "4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimal-slp-wallet/node_modules/@psf/bch-js": {
|
"node_modules/minimal-slp-wallet/node_modules/@psf/bch-js": {
|
||||||
"version": "6.2.8",
|
"version": "6.2.14",
|
||||||
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.8.tgz",
|
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.14.tgz",
|
||||||
"integrity": "sha512-kJoAeBmdVT6qjwAIlxPDgD1WkCBcAbDsbcwu1fqC0VfcrchuxajAGjqesQDY5bBsCjDKf6/taGC9zl+/pEW+jw==",
|
"integrity": "sha512-tHF2DyBRgYHTvdhVY58dOzbCOuKQrhc9QvYyj+K4c7mfsVgprjU+FTcM9ZFcE3A+0G/92VBP4/kkfccqfdLlWA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chris.troutner/bip32-utils": "1.0.5",
|
"@chris.troutner/bip32-utils": "1.0.5",
|
||||||
@@ -13939,15 +13939,6 @@
|
|||||||
"wif": "2.0.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": {
|
"node_modules/minimal-slp-wallet/node_modules/apidoc": {
|
||||||
"version": "0.51.0",
|
"version": "0.51.0",
|
||||||
"resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.51.0.tgz",
|
"resolved": "http://94.130.170.209:4873/apidoc/-/apidoc-0.51.0.tgz",
|
||||||
@@ -13998,58 +13989,6 @@
|
|||||||
"license": "Python-2.0"
|
"license": "Python-2.0"
|
||||||
},
|
},
|
||||||
"node_modules/minimal-slp-wallet/node_modules/axios": {
|
"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",
|
"version": "0.26.1",
|
||||||
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.26.1.tgz",
|
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.26.1.tgz",
|
||||||
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
|
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
|
||||||
@@ -14058,6 +13997,26 @@
|
|||||||
"follow-redirects": "^1.14.8"
|
"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": {
|
"node_modules/minimal-slp-wallet/node_modules/bch-donation": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "http://94.130.170.209:4873/bch-donation/-/bch-donation-1.1.2.tgz",
|
"resolved": "http://94.130.170.209:4873/bch-donation/-/bch-donation-1.1.2.tgz",
|
||||||
@@ -24416,9 +24375,9 @@
|
|||||||
"version": "1.1.0"
|
"version": "1.1.0"
|
||||||
},
|
},
|
||||||
"@psf/bch-js": {
|
"@psf/bch-js": {
|
||||||
"version": "6.2.5",
|
"version": "6.3.1",
|
||||||
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.5.tgz",
|
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.3.1.tgz",
|
||||||
"integrity": "sha512-Obw+i04uIzImkacNrAUZjlO3Fi7SPcDiWkTZPJLsa+YShmICzWpayUSZvP+TgcJBZDH8ikRWxOz4fBA0fPW+iQ==",
|
"integrity": "sha512-Slzq7FJFIWvQ6xhZSm4cnkvPIuFmZNrqtW2IDjZD/aHOX7nZlyQ7Hg4MTbb8CzekUHNroFyKyM36iUU7MaeQmw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@chris.troutner/bip32-utils": "1.0.5",
|
"@chris.troutner/bip32-utils": "1.0.5",
|
||||||
"@psf/bip21": "2.0.1",
|
"@psf/bip21": "2.0.1",
|
||||||
@@ -33209,21 +33168,21 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"minimal-slp-wallet": {
|
"minimal-slp-wallet": {
|
||||||
"version": "4.5.2",
|
"version": "4.5.4",
|
||||||
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.2.tgz",
|
"resolved": "http://94.130.170.209:4873/minimal-slp-wallet/-/minimal-slp-wallet-4.5.4.tgz",
|
||||||
"integrity": "sha512-aVTzMmEDiWNVVED4S5ixtBjY7Y4sfFmzVM7v6PuH8wU8ceXyZPzVwlJgjC2Lm0o11bToHAPhuT1Ytafr1YkseA==",
|
"integrity": "sha512-CzEe402T4NsFRVoovYQF5Db4lZHYnEQZseYVJMQwghVZ2gV+M69Igmsxj2/rxDGbiVbBSPd7ILMnWmes/BiseA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@psf/bch-js": "6.2.8",
|
"@psf/bch-js": "6.2.14",
|
||||||
"apidoc": "0.51.0",
|
"apidoc": "0.51.0",
|
||||||
"bch-consumer": "1.2.2",
|
"bch-consumer": "1.2.3",
|
||||||
"bch-donation": "1.1.2",
|
"bch-donation": "1.1.2",
|
||||||
"crypto-js": "4.0.0"
|
"crypto-js": "4.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": {
|
"@psf/bch-js": {
|
||||||
"version": "6.2.8",
|
"version": "6.2.14",
|
||||||
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.8.tgz",
|
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.14.tgz",
|
||||||
"integrity": "sha512-kJoAeBmdVT6qjwAIlxPDgD1WkCBcAbDsbcwu1fqC0VfcrchuxajAGjqesQDY5bBsCjDKf6/taGC9zl+/pEW+jw==",
|
"integrity": "sha512-tHF2DyBRgYHTvdhVY58dOzbCOuKQrhc9QvYyj+K4c7mfsVgprjU+FTcM9ZFcE3A+0G/92VBP4/kkfccqfdLlWA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@chris.troutner/bip32-utils": "1.0.5",
|
"@chris.troutner/bip32-utils": "1.0.5",
|
||||||
"@psf/bip21": "2.0.1",
|
"@psf/bip21": "2.0.1",
|
||||||
@@ -33249,16 +33208,6 @@
|
|||||||
"slp-mdm": "0.0.6",
|
"slp-mdm": "0.0.6",
|
||||||
"slp-parser": "0.0.4",
|
"slp-parser": "0.0.4",
|
||||||
"wif": "2.0.6"
|
"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": {
|
"apidoc": {
|
||||||
@@ -33296,62 +33245,29 @@
|
|||||||
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
|
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
|
||||||
},
|
},
|
||||||
"axios": {
|
"axios": {
|
||||||
"version": "0.25.0",
|
"version": "0.26.1",
|
||||||
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.25.0.tgz",
|
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.26.1.tgz",
|
||||||
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
|
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"follow-redirects": "^1.14.7"
|
"follow-redirects": "^1.14.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bch-consumer": {
|
"bch-consumer": {
|
||||||
"version": "1.2.2",
|
"version": "1.2.3",
|
||||||
"resolved": "http://94.130.170.209:4873/bch-consumer/-/bch-consumer-1.2.2.tgz",
|
"resolved": "http://94.130.170.209:4873/bch-consumer/-/bch-consumer-1.2.3.tgz",
|
||||||
"integrity": "sha512-kLd67+mJcxmNFJG43xRLxVdWutO9sMWIaLyVRAfeQKhH8qnMpaz3jOQ9dFPlM0/kZyTmrDTe5sINsQHFuTGcMA==",
|
"integrity": "sha512-6hMe2RB3PkPG+ZsArSPueUjUL3G/HaONExXbGt5v/wx9iU14A3JmSJJxtpxJ+MMGjDbL9w96EJ3Yrpmn8nDi7A==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@psf/bch-js": "6.2.4",
|
"@psf/bch-js": "6.2.14",
|
||||||
"apidoc": "0.51.0",
|
"apidoc": "0.51.0",
|
||||||
"axios": "0.25.0"
|
"axios": "0.25.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": {
|
"axios": {
|
||||||
"version": "6.2.4",
|
"version": "0.25.0",
|
||||||
"resolved": "http://94.130.170.209:4873/@psf%2fbch-js/-/bch-js-6.2.4.tgz",
|
"resolved": "http://94.130.170.209:4873/axios/-/axios-0.25.0.tgz",
|
||||||
"integrity": "sha512-Vk+uM2cZOjsPKpsDG4U+6YfFPCfhHqUjH48jLrHP1wch78UK6ca8MILdGCH4opEPflHj/T+fLX4RZMtUm8uJAA==",
|
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@chris.troutner/bip32-utils": "1.0.5",
|
"follow-redirects": "^1.14.7"
|
||||||
"@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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -27,7 +27,7 @@
|
|||||||
},
|
},
|
||||||
"repository": "Permissionless-Software-Foundation/bch-dex",
|
"repository": "Permissionless-Software-Foundation/bch-dex",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@psf/bch-js": "6.2.5",
|
"@psf/bch-js": "6.3.1",
|
||||||
"axios": "0.21.1",
|
"axios": "0.21.1",
|
||||||
"bch-message-lib": "2.2.0",
|
"bch-message-lib": "2.2.0",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
"koa2-ratelimit": "0.9.1",
|
"koa2-ratelimit": "0.9.1",
|
||||||
"libp2p": "^0.36.2",
|
"libp2p": "^0.36.2",
|
||||||
"line-reader": "0.4.0",
|
"line-reader": "0.4.0",
|
||||||
"minimal-slp-wallet": "4.5.2",
|
"minimal-slp-wallet": "4.5.4",
|
||||||
"mongoose": "5.13.13",
|
"mongoose": "5.13.13",
|
||||||
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
|
"node-fetch": "npm:@achingbrain/node-fetch@2.6.7",
|
||||||
"nodemailer": "6.4.17",
|
"nodemailer": "6.4.17",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const Offer = new mongoose.Schema({
|
|||||||
utxoTxid: { type: String },
|
utxoTxid: { type: String },
|
||||||
utxoVout: { type: Number },
|
utxoVout: { type: Number },
|
||||||
ticker: { type: String },
|
ticker: { type: String },
|
||||||
|
tokenType: { type: Number },
|
||||||
|
|
||||||
// Trade data
|
// Trade data
|
||||||
buyOrSell: { type: String },
|
buyOrSell: { type: String },
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ const Order = new mongoose.Schema({
|
|||||||
utxoTxid: { type: String },
|
utxoTxid: { type: String },
|
||||||
utxoVout: { type: Number },
|
utxoVout: { type: Number },
|
||||||
ticker: { type: String },
|
ticker: { type: String },
|
||||||
|
tokenType: { type: Number },
|
||||||
|
|
||||||
// Trade data
|
// Trade data
|
||||||
buyOrSell: { type: String },
|
buyOrSell: { type: String },
|
||||||
|
|||||||
+32
-7
@@ -208,7 +208,7 @@ class WalletAdapter {
|
|||||||
|
|
||||||
// Get token info on the offered UTXO
|
// Get token info on the offered UTXO
|
||||||
const txData = await this.bchWallet.getTxData([offerInfo.utxoTxid])
|
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.
|
// Construct the UTXO being offered for sale.
|
||||||
const offeredUtxo = {
|
const offeredUtxo = {
|
||||||
@@ -222,12 +222,27 @@ class WalletAdapter {
|
|||||||
|
|
||||||
// Build First part of the collaborative Tx a.k.a. Alice
|
// Build First part of the collaborative Tx a.k.a. Alice
|
||||||
// Generate the OP_RETURN code.
|
// Generate the OP_RETURN code.
|
||||||
const slpSendObj = bchjs.SLP.TokenType1.generateSendOpReturn(
|
let slpSendObj
|
||||||
[offeredUtxo],
|
if (offerInfo.tokenType === 65) {
|
||||||
offerInfo.numTokens.toString()
|
// 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
|
const slpData = slpSendObj.script
|
||||||
console.log(`slpOutputs: ${slpSendObj.outputs}`)
|
|
||||||
|
|
||||||
// Currently this app only supports a single SLP token UTXO for exact
|
// Currently this app only supports a single SLP token UTXO for exact
|
||||||
// token quantities (no token change). e.g. 1 UTXO representing the
|
// token quantities (no token change). e.g. 1 UTXO representing the
|
||||||
@@ -334,12 +349,22 @@ class WalletAdapter {
|
|||||||
// Update the UTXO store of the wallet.
|
// Update the UTXO store of the wallet.
|
||||||
await this.bchWallet.getUtxos()
|
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 txid = await this.bchWallet.sendTokens(receiver, 3)
|
||||||
|
|
||||||
const utxoInfo = {
|
const utxoInfo = {
|
||||||
txid,
|
txid,
|
||||||
vout: 1,
|
vout: 1,
|
||||||
hdIndex: keyPair.hdIndex
|
hdIndex: keyPair.hdIndex,
|
||||||
|
tokenType: tokenUtxos[0].tokenType
|
||||||
}
|
}
|
||||||
|
|
||||||
return utxoInfo
|
return utxoInfo
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ class OfferEntity {
|
|||||||
utxoVout,
|
utxoVout,
|
||||||
offerStatus,
|
offerStatus,
|
||||||
makerAddr,
|
makerAddr,
|
||||||
ticker
|
ticker,
|
||||||
|
tokenType
|
||||||
} = offerData.data
|
} = offerData.data
|
||||||
|
|
||||||
// Input Validation
|
// Input Validation
|
||||||
@@ -69,6 +70,9 @@ class OfferEntity {
|
|||||||
if (!ticker || typeof ticker !== 'string') {
|
if (!ticker || typeof ticker !== 'string') {
|
||||||
throw new Error("Property 'ticker' must be a 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.
|
// Convert the timestamp to a number.
|
||||||
let timestamp = new Date(offerData.timestamp)
|
let timestamp = new Date(offerData.timestamp)
|
||||||
@@ -91,7 +95,8 @@ class OfferEntity {
|
|||||||
p2wdbHash: offerData.hash,
|
p2wdbHash: offerData.hash,
|
||||||
offerStatus: offerStatus || this.offerStatus[0],
|
offerStatus: offerStatus || this.offerStatus[0],
|
||||||
makerAddr,
|
makerAddr,
|
||||||
ticker
|
ticker,
|
||||||
|
tokenType
|
||||||
}
|
}
|
||||||
|
|
||||||
return validatedOfferData
|
return validatedOfferData
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class OrderLib {
|
|||||||
// Update the order with the new UTXO information.
|
// Update the order with the new UTXO information.
|
||||||
orderEntity.utxoTxid = utxoInfo.txid
|
orderEntity.utxoTxid = utxoInfo.txid
|
||||||
orderEntity.utxoVout = utxoInfo.vout
|
orderEntity.utxoVout = utxoInfo.vout
|
||||||
|
orderEntity.tokenType = utxoInfo.tokenType
|
||||||
|
|
||||||
// Add P2WDB specific flag for signaling that this is a new offer.
|
// Add P2WDB specific flag for signaling that this is a new offer.
|
||||||
orderEntity.dataType = 'offer'
|
orderEntity.dataType = 'offer'
|
||||||
@@ -81,6 +82,7 @@ class OrderLib {
|
|||||||
// Create a MongoDB model to hold the Order
|
// Create a MongoDB model to hold the Order
|
||||||
orderEntity.hdIndex = utxoInfo.hdIndex
|
orderEntity.hdIndex = utxoInfo.hdIndex
|
||||||
orderEntity.p2wdbHash = hash
|
orderEntity.p2wdbHash = hash
|
||||||
|
|
||||||
console.log(`creating new order model: ${JSON.stringify(orderEntity, null, 2)}`)
|
console.log(`creating new order model: ${JSON.stringify(orderEntity, null, 2)}`)
|
||||||
const order = new this.OrderModel(orderEntity)
|
const order = new this.OrderModel(orderEntity)
|
||||||
await order.save()
|
await order.save()
|
||||||
@@ -88,7 +90,7 @@ class OrderLib {
|
|||||||
return hash
|
return hash
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// console.log("Error in use-cases/entry.js/createEntry()", err.message)
|
// 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)
|
console.log('error entryObj: ', entryObj)
|
||||||
throw err
|
throw err
|
||||||
}
|
}
|
||||||
@@ -116,11 +118,14 @@ class OrderLib {
|
|||||||
if (orderEntity.buyOrSell.includes('sell')) {
|
if (orderEntity.buyOrSell.includes('sell')) {
|
||||||
// Sell Order
|
// 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.
|
// 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
|
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
|
// Get the total amount of tokens in the wallet that match the token
|
||||||
// in the order.
|
// in the order.
|
||||||
|
|||||||
@@ -262,10 +262,11 @@ describe('#wallet', () => {
|
|||||||
wif: 'L4qKTMCwjH9jHnYtNh9Vsrxj7Hg6zmoN8E2v7N47UKvNVEjw7FU8',
|
wif: 'L4qKTMCwjH9jHnYtNh9Vsrxj7Hg6zmoN8E2v7N47UKvNVEjw7FU8',
|
||||||
hdIndex: 6
|
hdIndex: 6
|
||||||
})
|
})
|
||||||
uut.bchWallet = {
|
uut.bchWallet = new MockBchWallet()
|
||||||
sendTokens: async () => 'fake-txid',
|
// uut.bchWallet = {
|
||||||
getUtxos: async () => {}
|
// sendTokens: async () => 'fake-txid',
|
||||||
}
|
// getUtxos: async () => {}
|
||||||
|
// }
|
||||||
|
|
||||||
const inObj = {
|
const inObj = {
|
||||||
tokenId: 'a4fb5c2da1aa064e25018a43f9165040071d9e984ba190c222a7f59053af84b2',
|
tokenId: 'a4fb5c2da1aa064e25018a43f9165040071d9e984ba190c222a7f59053af84b2',
|
||||||
|
|||||||
@@ -254,7 +254,8 @@ describe('#Offer-Entity', () => {
|
|||||||
utxoVout: 0,
|
utxoVout: 0,
|
||||||
offerStatus: 'posted',
|
offerStatus: 'posted',
|
||||||
makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00',
|
makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00',
|
||||||
ticker: 'TROUT'
|
ticker: 'TROUT',
|
||||||
|
tokenType: 1
|
||||||
},
|
},
|
||||||
timestamp: '2021-09-20T17:54:26.395Z',
|
timestamp: '2021-09-20T17:54:26.395Z',
|
||||||
localTimeStamp: '9/20/2021, 10:54:26 AM',
|
localTimeStamp: '9/20/2021, 10:54:26 AM',
|
||||||
@@ -279,6 +280,7 @@ describe('#Offer-Entity', () => {
|
|||||||
assert.property(result, 'localTimestamp')
|
assert.property(result, 'localTimestamp')
|
||||||
assert.property(result, 'txid')
|
assert.property(result, 'txid')
|
||||||
assert.property(result, 'p2wdbHash')
|
assert.property(result, 'p2wdbHash')
|
||||||
|
assert.property(result, 'tokenType')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -127,9 +127,11 @@ class MockBchWallet {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
nft: {
|
nft: {
|
||||||
groupMintBatons: [],
|
|
||||||
groupTokens: [],
|
|
||||||
tokens: []
|
tokens: []
|
||||||
|
},
|
||||||
|
group: {
|
||||||
|
tokens: [],
|
||||||
|
mintBatons: []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,8 @@ describe('#offer-use-case', () => {
|
|||||||
'241c06bf61384b8623477e419bf4779edbcc7e3bc862f0f179a9ed2967069b87',
|
'241c06bf61384b8623477e419bf4779edbcc7e3bc862f0f179a9ed2967069b87',
|
||||||
utxoVout: 0,
|
utxoVout: 0,
|
||||||
makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00',
|
makerAddr: 'bitcoincash:qzl0d3gcqeypv4cy7gh8rgdszxa9vvm2acv7fqtd00',
|
||||||
ticker: 'TROUT'
|
ticker: 'TROUT',
|
||||||
|
tokenType: 1
|
||||||
},
|
},
|
||||||
timestamp: '2021-09-20T17:54:26.395Z',
|
timestamp: '2021-09-20T17:54:26.395Z',
|
||||||
localTimeStamp: '9/20/2021, 10:54:26 AM',
|
localTimeStamp: '9/20/2021, 10:54:26 AM',
|
||||||
|
|||||||
Reference in New Issue
Block a user