diff --git a/src/common/services/FlyoverService.ts b/src/common/services/FlyoverService.ts index 97d839eb..a54cdd78 100644 --- a/src/common/services/FlyoverService.ts +++ b/src/common/services/FlyoverService.ts @@ -493,4 +493,29 @@ export default class FlyoverService { }); }); } + + public validatePegin(quote: PeginQuote, signature: string, depositAddress: string, tx: string) { + return new Promise((resolve, reject) => { + this.flyover?.validatePeginTransaction({ + quoteInfo: { + quote: quote.originalQuote, + quoteHash: quote.quoteHash, + }, + acceptInfo: { + signature, + bitcoinDepositAddressHash: depositAddress, + }, + btcTx: tx, + }) + .then(resolve) + .catch((error) => { + reject(new ServiceError( + 'FlyoverService', + 'validatePegin', + 'There was an error validating the peg-in transaction, can not be completed.', + error.message, + )); + }); + }); + } } diff --git a/src/common/types/Flyover/PeginQuote.ts b/src/common/types/Flyover/PeginQuote.ts index 5ef819c7..f7b1a32f 100644 --- a/src/common/types/Flyover/PeginQuote.ts +++ b/src/common/types/Flyover/PeginQuote.ts @@ -8,7 +8,10 @@ export default class PeginQuote implements QuotePegIn2WP { quoteHash: string; + originalQuote; + constructor({ quote, quoteHash }: Quote) { + this.originalQuote = quote; this.quote = { ...quote, timeForDepositInSeconds: quote.timeForDeposit, diff --git a/src/pegin/components/create/ConfirmTx.vue b/src/pegin/components/create/ConfirmTx.vue index bc1bc314..f72c55a5 100644 --- a/src/pegin/components/create/ConfirmTx.vue +++ b/src/pegin/components/create/ConfirmTx.vue @@ -29,7 +29,7 @@ import { import { Machine } from '@/common/utils'; import TxBuilder from '@/pegin/middleware/TxBuilder/TxBuilder'; import * as constants from '@/common/store/constants'; -import { ApiService, WalletService } from '@/common/services'; +import { ApiService, FlyoverService, WalletService } from '@/common/services'; import { useState, useGetter, useStateAttribute } from '@/common/store/helper'; import { LiquidityProvider2WP, @@ -67,6 +67,7 @@ export default defineComponent({ const recipientAddress = useStateAttribute('flyoverPegin', 'rootstockRecipientAddress'); const peginType = useStateAttribute('pegInTx', 'peginType'); const acceptedQuoteSignature = useStateAttribute('flyoverPegin', 'acceptedQuoteSignature'); + const flyoverService = useStateAttribute('flyoverPegin', 'flyoverService'); const isFlyover = computed(() => peginType.value === constants.peginType.FLYOVER); function getLPName(): string { @@ -128,8 +129,17 @@ export default defineComponent({ pegInTxState.value.selectedAccount, )) .then((tx) => walletService.value.sign(tx)) - .then(({ signedTx }) => ApiService - .broadcast(signedTx)) + .then(async ({ signedTx }) => { + if (isFlyover.value) { + await flyoverService.value.validatePegin( + selectedQuote.value, + acceptedQuoteSignature.value, + pegInTxState.value.normalizedTx.outputs[0].address as string, + signedTx, + ); + } + return ApiService.broadcast(signedTx); + }) .then((id) => { ApiService.registerTx({ txHash: id, diff --git a/src/pegin/components/create/SendBitcoin.vue b/src/pegin/components/create/SendBitcoin.vue index fee76347..34c7e08c 100644 --- a/src/pegin/components/create/SendBitcoin.vue +++ b/src/pegin/components/create/SendBitcoin.vue @@ -184,8 +184,8 @@ export default defineComponent({ ? selectedFlyoverQuote.value.quote.confirmations : 0, }, }); + clearWallets(); } - clearWallets(); } function closeErrorDialog() {