diff --git a/bin/server.js b/bin/server.js index 614f82d..0b78b3e 100644 --- a/bin/server.js +++ b/bin/server.js @@ -91,7 +91,7 @@ class Server { // MIDDLEWARE END // 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 try { diff --git a/package-lock.json b/package-lock.json index 57b9978..6775b05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", @@ -13895,22 +13895,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 +13939,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 +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==", @@ -14058,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", @@ -24416,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", @@ -33209,21 +33168,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 +33208,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 +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" } } } diff --git a/package.json b/package.json index 0375dac..97f22cb 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/adapters/localdb/models/offer.js b/src/adapters/localdb/models/offer.js index 1acc475..f1a120a 100644 --- a/src/adapters/localdb/models/offer.js +++ b/src/adapters/localdb/models/offer.js @@ -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 }, diff --git a/src/adapters/localdb/models/order.js b/src/adapters/localdb/models/order.js index e489f4d..31b47fa 100644 --- a/src/adapters/localdb/models/order.js +++ b/src/adapters/localdb/models/order.js @@ -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 }, diff --git a/src/adapters/wallet.js b/src/adapters/wallet.js index eed29ac..912bfed 100644 --- a/src/adapters/wallet.js +++ b/src/adapters/wallet.js @@ -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 diff --git a/src/entities/offer.js b/src/entities/offer.js index 8b57b97..c21936e 100644 --- a/src/entities/offer.js +++ b/src/entities/offer.js @@ -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 diff --git a/src/use-cases/order.js b/src/use-cases/order.js index ddbc47e..13bf3eb 100644 --- a/src/use-cases/order.js +++ b/src/use-cases/order.js @@ -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. diff --git a/test/unit/adapters/wallet.adapter.unit.js b/test/unit/adapters/wallet.adapter.unit.js index 20d790e..644ced3 100644 --- a/test/unit/adapters/wallet.adapter.unit.js +++ b/test/unit/adapters/wallet.adapter.unit.js @@ -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', diff --git a/test/unit/entities/offer.entity.unit.js b/test/unit/entities/offer.entity.unit.js index 480d4eb..6425896 100644 --- a/test/unit/entities/offer.entity.unit.js +++ b/test/unit/entities/offer.entity.unit.js @@ -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') }) }) }) diff --git a/test/unit/mocks/adapters/wallet.js b/test/unit/mocks/adapters/wallet.js index b62b385..19ce10b 100644 --- a/test/unit/mocks/adapters/wallet.js +++ b/test/unit/mocks/adapters/wallet.js @@ -127,9 +127,11 @@ class MockBchWallet { ] }, nft: { - groupMintBatons: [], - groupTokens: [], tokens: [] + }, + group: { + tokens: [], + mintBatons: [] } } } diff --git a/test/unit/use-cases/offer.use-case.unit.js b/test/unit/use-cases/offer.use-case.unit.js index 97036b0..c7b8d06 100644 --- a/test/unit/use-cases/offer.use-case.unit.js +++ b/test/unit/use-cases/offer.use-case.unit.js @@ -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',