diff --git a/package-lock.json b/package-lock.json index 2f56e4b..5998eb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@fortawesome/react-fontawesome": "0.2.2", "@noble/hashes": "1.8.0", "axios": "0.27.2", - "bch-dex-lib": "2.2.0", + "bch-dex-lib": "2.3.1", "bch-message-lib": "2.2.1", "bch-nostr": "1.3.4", "bch-token-sweep": "2.2.1", @@ -10043,9 +10043,9 @@ "license": "MIT" }, "node_modules/bch-dex-lib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bch-dex-lib/-/bch-dex-lib-2.2.0.tgz", - "integrity": "sha512-SORqn4qNmbxfL2SbbapOpbcCB+FtqasR+GT0XRifdkXFjA3aDL0gwMsHjh8IzLZnKtPYSBcfgzKQFxEsXCJNug==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bch-dex-lib/-/bch-dex-lib-2.3.1.tgz", + "integrity": "sha512-HlY21BpUUaSsuZNWF5LGPwSJU7m2kYbNMcS36o22RSHuO1kiBMONHwkV+v22kdbDk3T/Iz+AZN0mzJvH5neCXw==", "license": "MIT", "dependencies": { "@chris.troutner/retry-queue": "1.0.10", diff --git a/package.json b/package.json index 016fd99..dcb8d71 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@fortawesome/react-fontawesome": "0.2.2", "@noble/hashes": "1.8.0", "axios": "0.27.2", - "bch-dex-lib": "2.2.0", + "bch-dex-lib": "2.3.1", "bch-message-lib": "2.2.1", "bch-nostr": "1.3.4", "bch-token-sweep": "2.2.1", diff --git a/src/components/app-body/nfts-for-sale/buy-button.js b/src/components/app-body/nfts-for-sale/buy-button.js index 9f6d418..8c7e7a7 100644 --- a/src/components/app-body/nfts-for-sale/buy-button.js +++ b/src/components/app-body/nfts-for-sale/buy-button.js @@ -6,6 +6,7 @@ // Global npm libraries import React, { useState } from 'react' import { Button, Modal, Container, Row, Col, Spinner } from 'react-bootstrap' +import AsyncLoad from '../../../services/async-load' function BuyButton (props) { const { token, appData, onSuccess } = props @@ -45,10 +46,19 @@ function BuyButton (props) { // Generate a counter offer. const bchDexLib = appData.dexLib - const { offerData, partialHex } = await bchDexLib.take.takeOffer( + const { offerData, partialHex, counterOfferUtxo } = await bchDexLib.take.takeOffer( targetOffer ) + // Get counter offer data + const asyncLoad = new AsyncLoad() + const { takerAddr, takerNpub, counterOfferAddr } = await asyncLoad.getCounterOfferMetadata(appData) + + offerData.takerAddr = takerAddr + offerData.takerNpub = takerNpub + offerData.counterOfferAddr = counterOfferAddr + offerData.counterOfferUtxo = counterOfferUtxo.txid + progress.push(
Uploading counter offer to Nostr...
) setProgressMsg(progress) diff --git a/src/components/app-body/offers/index.js b/src/components/app-body/offers/index.js index 32db9f3..116bc25 100644 --- a/src/components/app-body/offers/index.js +++ b/src/components/app-body/offers/index.js @@ -8,7 +8,7 @@ import React, { useState, useEffect, useCallback } from 'react' import { Container, Row, Col, Table, Button, Spinner } from 'react-bootstrap' import axios from 'axios' import { DatatableWrapper, TableBody, TableHeader } from 'react-bs-datatable' - +import AsyncLoad from '../../../services/async-load' // Local libraries import config from '../../../config' import WaitingModal from '../../waiting-modal' @@ -100,10 +100,19 @@ function Offers (props) { // Generate a counter offer. const bchDexLib = appData.dexLib - const { offerData, partialHex } = await bchDexLib.take.takeOffer( + const { offerData, partialHex, counterOfferUtxo } = await bchDexLib.take.takeOffer( targetOfferEventId ) + // Get counter offer data + const asyncLoad = new AsyncLoad() + const { takerAddr, takerNpub, counterOfferAddr } = await asyncLoad.getCounterOfferMetadata(appData) + + offerData.takerAddr = takerAddr + offerData.takerNpub = takerNpub + offerData.counterOfferAddr = counterOfferAddr + offerData.counterOfferUtxo = counterOfferUtxo.txid + // Upload the counter offer to Nostr. const nostr = appData.nostr const { eventId, noteId } = await nostr.testNostrUpload({ diff --git a/src/services/async-load.js b/src/services/async-load.js index e0a77b4..cac4adb 100644 --- a/src/services/async-load.js +++ b/src/services/async-load.js @@ -334,7 +334,7 @@ class AsyncLoad { } } - async getDerivatedWallet (restURL, mnemonic, hdPath = "m/44'/245'/0'/0/0") { + async getDerivatedWallet (restURL, mnemonic, hdPath = "m/44'/245'/0'/0/0", initialize = true) { try { const options = { interface: 'consumer-api', @@ -347,7 +347,9 @@ class AsyncLoad { // Wait for wallet to initialize. await wallet.walletInfoPromise - await wallet.initialize() + if (initialize) { + await wallet.initialize() + } return wallet } catch (error) { @@ -355,6 +357,35 @@ class AsyncLoad { throw error } } + + // Get buyer and counter offer data. + async getCounterOfferMetadata (appData) { + try { + const { bchWalletState, serverUrl } = appData + // Start async load lib + const asyncLoad = new AsyncLoad() + await asyncLoad.loadWalletLib() + + // Buyer wallet data + const buyerWallet = await asyncLoad.getDerivatedWallet(serverUrl, bchWalletState.mnemonic, "m/44'/245'/0'/0/0", false) + const buyerAddr = buyerWallet.walletInfo.cashAddress + const buyerKeyPair = asyncLoad.nostrKeyPairFromWIF(buyerWallet.walletInfo.privateKey) + const buyerNpub = buyerKeyPair.npub + + // Counter offer wallet data + const counterOfferWallet = await asyncLoad.getDerivatedWallet(serverUrl, bchWalletState.mnemonic, "m/44'/245'/0'/0/1", false) + const counterOfferAddr = counterOfferWallet.walletInfo.cashAddress + + return { + takerAddr: buyerAddr, + takerNpub: buyerNpub, + counterOfferAddr + } + } catch (error) { + console.error('Error getCounterOfferMetadata()', error) + throw error + } + } } function sleep (ms) {