From d62fc3b5755ffbafbf6954694ddab90323aa2ee4 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Fri, 11 Mar 2022 08:15:31 -0800 Subject: [PATCH] Got /order/take mocked up for further development --- src/use-cases/order/index.js | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/use-cases/order/index.js b/src/use-cases/order/index.js index 1f0648e..f1b54a7 100644 --- a/src/use-cases/order/index.js +++ b/src/use-cases/order/index.js @@ -8,7 +8,9 @@ local Offers are no different than Orders generated by other peers. */ +// Local libraries const OrderEntity = require('../../entities/order') +const config = require('../../../config') class OrderUseCases { constructor (localConfig = {}) { @@ -20,6 +22,9 @@ class OrderUseCases { ) } + // Encapsulate dependencies + this.config = config + this.orderEntity = new OrderEntity() this.OrderModel = this.adapters.localdb.Order } @@ -105,15 +110,34 @@ class OrderUseCases { const utxos = this.adapters.wallet.bchWallet.utxos.utxoStore console.log(`utxos: ${JSON.stringify(utxos, null, 2)}`) + // TODO: Move funds to create a segrated UTXO for taking the order + // Create a partially signed transaction. // https://github.com/Permissionless-Software-Foundation/bch-js-examples/blob/master/bch/applications/collaborate/sell-slp/e2e-exchange/step2-purchase-tx.js#L59 const partialTxHex = await this.adapters.wallet.generatePartialTx(orderInfo) + // return partialTxHex - return partialTxHex + // Create valid Order object + const takenOrderInfo = Object.assign({}, orderInfo) + takenOrderInfo.patialTxHex = partialTxHex + delete takenOrderInfo.p2wdbHash + delete takenOrderInfo._id + takenOrderInfo.offerHash = orderInfo.p2wdbHash - // return true + // Write order info to the P2WDB + // TODO: This will trigger the webhook. Find some way of triggering the + // webhook on new orders, but not on counteroffers + const p2wdbObj = { + wif: this.adapters.wallet.bchWallet.walletInfo.privateKey, + data: takenOrderInfo, + appId: this.config.p2wdbAppId + } + const hash = await this.adapters.p2wdb.write(p2wdbObj) + + // Return the P2WDB CID + return hash } catch (err) { - console.error('Error in use-cases/order/takeOrder()') + console.error('Error in use-cases/order/takeOrder(): ', err) throw err } } @@ -125,6 +149,8 @@ class OrderUseCases { // console.log('this.adapters.wallet: ', this.adapters.wallet.bchWallet) // console.log(`walletInfo: ${JSON.stringify(this.adapters.wallet.bchWallet.walletInfo, null, 2)}`) + await this.adapters.wallet.bchWallet.walletInfoPromise + // Ensure the app wallet has enough funds to write to the P2WDB. const wif = this.adapters.wallet.bchWallet.walletInfo.privateKey const canWriteToP2WDB = await this.adapters.p2wdb.checkForSufficientFunds(wif)