From 885fc7e5180d20940d898558ce22cf0677881a32 Mon Sep 17 00:00:00 2001 From: Fara Woolf Date: Tue, 10 Dec 2024 17:56:47 -0500 Subject: [PATCH] refactor: use btc fee and compliance check --- .../assets/illustrations/sbtc-earn-promo.svg | 11 +++ .../stack-of-coins-with-hands-coming-out.png | Bin 78873 -> 0 bytes src/app/components/stacks-asset-avatar.tsx | 8 +-- src/app/components/tx-asset-item.tsx | 2 +- .../stacks-transaction/ft-transfer-item.tsx | 6 +- .../sip10-token-asset-item.tsx | 5 +- .../sbtc-promo-card/sbtc-promo-card.tsx | 16 +++-- .../sip10/sip10-token-send-form-container.tsx | 5 +- src/app/pages/swap/bitflow-swap-container.tsx | 19 ++++-- src/app/pages/swap/bitflow-swap.utils.ts | 11 +-- .../hooks/use-sbtc-deposit-transaction.tsx | 63 +++++++++++++----- src/app/pages/swap/hooks/use-swap-form.tsx | 9 +-- src/app/pages/swap/swap.context.ts | 1 + .../compliance-checker.query.ts | 2 +- 14 files changed, 99 insertions(+), 59 deletions(-) create mode 100644 public/assets/illustrations/sbtc-earn-promo.svg delete mode 100644 public/assets/illustrations/stack-of-coins-with-hands-coming-out.png diff --git a/public/assets/illustrations/sbtc-earn-promo.svg b/public/assets/illustrations/sbtc-earn-promo.svg new file mode 100644 index 00000000000..60ef4c7e85e --- /dev/null +++ b/public/assets/illustrations/sbtc-earn-promo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/assets/illustrations/stack-of-coins-with-hands-coming-out.png b/public/assets/illustrations/stack-of-coins-with-hands-coming-out.png deleted file mode 100644 index 4568e7f84e82695ea5b14b822fadf703d4be1743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78873 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 z 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 UWA5R%|G67gMGb`tx%VOe1IiJo{Qv*} diff --git a/src/app/components/stacks-asset-avatar.tsx b/src/app/components/stacks-asset-avatar.tsx index a6d1d8a47b3..84bd5467fa3 100644 --- a/src/app/components/stacks-asset-avatar.tsx +++ b/src/app/components/stacks-asset-avatar.tsx @@ -3,7 +3,7 @@ import { Box, BoxProps } from 'leather-styles/jsx'; import { Avatar, DynamicColorCircle, StxAvatarIcon, defaultFallbackDelay } from '@leather.io/ui'; interface StacksAssetAvatarProps extends BoxProps { - imageCanonicalUri?: string; + img?: string; gradientString: string; isStx?: boolean; size?: string; @@ -11,7 +11,7 @@ interface StacksAssetAvatarProps extends BoxProps { export function StacksAssetAvatar({ children, gradientString, - imageCanonicalUri, + img, isStx, size = '36', ...props @@ -20,10 +20,10 @@ export function StacksAssetAvatar({ const { color } = props; - if (imageCanonicalUri) + if (img) return ( - + FT ); diff --git a/src/app/components/tx-asset-item.tsx b/src/app/components/tx-asset-item.tsx index 13a06f2f713..be7e9fe051f 100644 --- a/src/app/components/tx-asset-item.tsx +++ b/src/app/components/tx-asset-item.tsx @@ -18,7 +18,7 @@ export function TxAssetItem(props: TxAssetItemProps) { diff --git a/src/app/features/activity-list/components/transaction-list/stacks-transaction/ft-transfer-item.tsx b/src/app/features/activity-list/components/transaction-list/stacks-transaction/ft-transfer-item.tsx index af332960f5f..d68b5f2c3a4 100644 --- a/src/app/features/activity-list/components/transaction-list/stacks-transaction/ft-transfer-item.tsx +++ b/src/app/features/activity-list/components/transaction-list/stacks-transaction/ft-transfer-item.tsx @@ -53,11 +53,7 @@ export function FtTransferItem({ ftTransfer, parentTx }: FtTransferItemProps) { const title = `${assetMetadata.name || 'Token'} Transfer`; const value = `${isOriginator ? '-' : ''}${displayAmount.toFormat()}`; const transferIcon = ftImageCanonicalUri ? ( - + {title} ) : ( diff --git a/src/app/features/asset-list/stacks/sip10-token-asset-list/sip10-token-asset-item.tsx b/src/app/features/asset-list/stacks/sip10-token-asset-list/sip10-token-asset-item.tsx index 125485821af..eb0ff4c5f60 100644 --- a/src/app/features/asset-list/stacks/sip10-token-asset-list/sip10-token-asset-item.tsx +++ b/src/app/features/asset-list/stacks/sip10-token-asset-list/sip10-token-asset-item.tsx @@ -1,3 +1,5 @@ +import SbtcAvatarIconSrc from '@assets/avatars/sbtc-avatar-icon.png'; + import type { CryptoAssetBalance, MarketData, Sip10CryptoAssetInfo } from '@leather.io/models'; import { convertAssetBalanceToFiat } from '@app/common/asset-utils'; @@ -35,13 +37,14 @@ export function Sip10TokenAssetItem({ const { isTokenEnabled } = useManageTokens(); const { contractId, imageCanonicalUri, name, symbol } = info; + const isSbtc = symbol === 'sBTC'; const icon = ( <> {name[0]} diff --git a/src/app/features/sbtc-promo-card/sbtc-promo-card.tsx b/src/app/features/sbtc-promo-card/sbtc-promo-card.tsx index 1212f2ed542..570c2b635a2 100644 --- a/src/app/features/sbtc-promo-card/sbtc-promo-card.tsx +++ b/src/app/features/sbtc-promo-card/sbtc-promo-card.tsx @@ -1,4 +1,3 @@ -import illustration from '@assets/illustrations/stack-of-coins-with-hands-coming-out.png'; import { Box, styled } from 'leather-styles/jsx'; import { Flag, type FlagProps } from '@leather.io/ui'; @@ -15,17 +14,24 @@ function SbtcPromoCardLayout(props: SbtcPromoCardContentProps) { return ( } + img={ + + } background="ink.background-secondary" borderRadius={8} {...props} > - + - Bridge BTC → sBTC + Earn rewards in BTC - And receive yields of 5% + Enroll your sBTC to unlock yields through the protocol. diff --git a/src/app/pages/send/send-crypto-asset-form/form/sip10/sip10-token-send-form-container.tsx b/src/app/pages/send/send-crypto-asset-form/form/sip10/sip10-token-send-form-container.tsx index 97a7059f7ca..19892f6e4b8 100644 --- a/src/app/pages/send/send-crypto-asset-form/form/sip10/sip10-token-send-form-container.tsx +++ b/src/app/pages/send/send-crypto-asset-form/form/sip10/sip10-token-send-form-container.tsx @@ -51,10 +51,7 @@ export function Sip10TokenSendFormContainer({ + ) : ( ) diff --git a/src/app/pages/swap/bitflow-swap-container.tsx b/src/app/pages/swap/bitflow-swap-container.tsx index 0c3b6b937b1..b9cbd5f00f3 100644 --- a/src/app/pages/swap/bitflow-swap-container.tsx +++ b/src/app/pages/swap/bitflow-swap-container.tsx @@ -10,7 +10,7 @@ import { serializePostCondition, } from '@stacks/transactions'; -import { isError, isUndefined } from '@leather.io/utils'; +import { isError, isUndefined, satToBtc } from '@leather.io/utils'; import { logger } from '@shared/logger'; import type { SwapFormValues } from '@shared/models/form.model'; @@ -24,7 +24,7 @@ import { useCurrentStacksAccount } from '@app/store/accounts/blockchain/stacks/s import { useGenerateStacksContractCallUnsignedTx } from '@app/store/transactions/contract-call.hooks'; import { useSignStacksTransaction } from '@app/store/transactions/transaction.hooks'; -import { getCrossChainSwapSubmissionData, getSwapSubmissionData } from './bitflow-swap.utils'; +import { getCrossChainSwapSubmissionData, getStacksSwapSubmissionData } from './bitflow-swap.utils'; import { SwapForm } from './components/swap-form'; import { generateSwapRoutes } from './generate-swap-routes'; import { useBitflowSwap } from './hooks/use-bitflow-swap'; @@ -45,7 +45,7 @@ function BitflowSwapContainer() { const generateUnsignedTx = useGenerateStacksContractCallUnsignedTx(); const signTx = useSignStacksTransaction(); const broadcastStacksSwap = useStacksBroadcastSwap(); - const { onDepositSbtc } = useSbtcDepositTransaction(); + const { onDepositSbtc, onReviewDepositSbtc } = useSbtcDepositTransaction(); const { fetchRouteQuote, @@ -71,9 +71,14 @@ function BitflowSwapContainer() { return; } - // TODO: Handle cross-chain swaps if (isCrossChainSwap) { - onSetSwapSubmissionData(getCrossChainSwapSubmissionData(values)); + const swapData = getCrossChainSwapSubmissionData(values); + const sBtcDepositData = await onReviewDepositSbtc(swapData); + onSetSwapSubmissionData({ + ...swapData, + fee: satToBtc(sBtcDepositData?.fee ?? 0).toNumber(), + txData: sBtcDepositData?.deposit, + }); swapNavigate(RouteUrls.SwapReview); return; } @@ -87,7 +92,7 @@ function BitflowSwapContainer() { if (!routeQuote) return; onSetSwapSubmissionData( - getSwapSubmissionData({ bitflowSwapAssets, routeQuote, slippage, values }) + getStacksSwapSubmissionData({ bitflowSwapAssets, routeQuote, slippage, values }) ); swapNavigate(RouteUrls.SwapReview); } finally { @@ -98,6 +103,7 @@ function BitflowSwapContainer() { bitflowSwapAssets, fetchRouteQuote, isCrossChainSwap, + onReviewDepositSbtc, onSetSwapSubmissionData, slippage, swapNavigate, @@ -122,7 +128,6 @@ function BitflowSwapContainer() { setIsLoading(); - // TODO: Handle cross-chain swaps if (isCrossChainSwap) { return await onDepositSbtc(swapSubmissionData); } diff --git a/src/app/pages/swap/bitflow-swap.utils.ts b/src/app/pages/swap/bitflow-swap.utils.ts index ccaf1138b8a..8a854269aad 100644 --- a/src/app/pages/swap/bitflow-swap.utils.ts +++ b/src/app/pages/swap/bitflow-swap.utils.ts @@ -5,7 +5,8 @@ import { BtcFeeType, FeeTypes } from '@leather.io/models'; import { type SwapAsset, defaultSwapFee } from '@leather.io/query'; import { capitalize, isDefined, microStxToStx } from '@leather.io/utils'; -import type { SwapFormValues } from './hooks/use-swap-form'; +import type { SwapFormValues } from '@shared/models/form.model'; + import type { SwapSubmissionData } from './swap.context'; function estimateLiquidityFee(dexPath: string[]) { @@ -17,18 +18,18 @@ function formatDexPathItem(dex: string) { return name === 'ALEX' ? name : capitalize(name.toLowerCase()); } -interface GetSwapSubmissionDataArgs { +interface getStacksSwapSubmissionDataArgs { bitflowSwapAssets: SwapAsset[]; routeQuote: RouteQuote; slippage: number; values: SwapFormValues; } -export function getSwapSubmissionData({ +export function getStacksSwapSubmissionData({ bitflowSwapAssets, routeQuote, slippage, values, -}: GetSwapSubmissionDataArgs): SwapSubmissionData { +}: getStacksSwapSubmissionDataArgs): SwapSubmissionData { return { fee: microStxToStx(defaultSwapFee.amount).toNumber(), feeCurrency: 'STX', @@ -55,7 +56,7 @@ export function getCrossChainSwapSubmissionData(values: SwapFormValues): SwapSub feeCurrency: 'BTC', feeType: BtcFeeType.Standard, liquidityFee: 0, - protocol: 'sBTC', + protocol: 'Bitcoin L2 Labs', dexPath: [], router: [values.swapAssetBase, values.swapAssetQuote].filter(isDefined), slippage: 0, diff --git a/src/app/pages/swap/hooks/use-sbtc-deposit-transaction.tsx b/src/app/pages/swap/hooks/use-sbtc-deposit-transaction.tsx index 834dc06d2dd..74db6a950c1 100644 --- a/src/app/pages/swap/hooks/use-sbtc-deposit-transaction.tsx +++ b/src/app/pages/swap/hooks/use-sbtc-deposit-transaction.tsx @@ -2,23 +2,38 @@ import { useNavigate } from 'react-router-dom'; import * as btc from '@scure/btc-signer'; +import type { P2TROut } from '@scure/btc-signer/payment'; import { REGTEST, SbtcApiClientTestnet, buildSbtcDepositTx } from 'sbtc'; import { useAverageBitcoinFeeRates } from '@leather.io/query'; import { btcToSat, createMoney } from '@leather.io/utils'; +import { logger } from '@shared/logger'; import { RouteUrls } from '@shared/route-urls'; import { LoadingKeys, useLoading } from '@app/common/hooks/use-loading'; import { determineUtxosForSpend } from '@app/common/transactions/bitcoin/coinselect/local-coin-selection'; import { useToast } from '@app/features/toasts/use-toast'; import { useCurrentNativeSegwitUtxos } from '@app/query/bitcoin/address/utxos-by-address.hooks'; +import { useBreakOnNonCompliantEntity } from '@app/query/common/compliance-checker/compliance-checker.query'; import { useBitcoinScureLibNetworkConfig } from '@app/store/accounts/blockchain/bitcoin/bitcoin-keychain'; import { useCurrentAccountNativeSegwitIndexZeroSigner } from '@app/store/accounts/blockchain/bitcoin/native-segwit-account.hooks'; import { useCurrentStacksAccount } from '@app/store/accounts/blockchain/stacks/stacks-account.hooks'; import type { SwapSubmissionData } from '../swap.context'; +const maxSignerFee = 80_000; +const reclaimLockTime = 6_000; + +interface SbtcDeposit { + address: string; + depositScript: string; + reclaimScript: string; + transaction: btc.Transaction; + trOut: P2TROut; +} + +// Check network for correct client const client = new SbtcApiClientTestnet(); export function useSbtcDepositTransaction() { @@ -31,22 +46,24 @@ export function useSbtcDepositTransaction() { const networkMode = useBitcoinScureLibNetworkConfig(); const navigate = useNavigate(); + // Check if the signer is compliant + useBreakOnNonCompliantEntity(); + return { - async onDepositSbtc(swapSubmissionData: SwapSubmissionData) { - if (!stacksAccount) throw new Error('No stacks account'); - if (!utxos) throw new Error('No utxos'); - console.log('amount', btcToSat(swapSubmissionData.swapAmountQuote).toNumber()); + async onReviewDepositSbtc(swapData: SwapSubmissionData) { + if (!stacksAccount || !utxos) return; + try { - const deposit = buildSbtcDepositTx({ - amountSats: btcToSat(swapSubmissionData.swapAmountQuote).toNumber(), - network: REGTEST, + const deposit: SbtcDeposit = buildSbtcDepositTx({ + amountSats: btcToSat(swapData.swapAmountQuote).toNumber(), + network: REGTEST, // TODO: Use current network, should be set by default on client stacksAddress: stacksAccount.address, signersPublicKey: await client.fetchSignersPublicKey(), - maxSignerFee: 80_000, - reclaimLockTime: 6_000, + maxSignerFee, + reclaimLockTime, }); - const { inputs, outputs } = determineUtxosForSpend({ + const { inputs, outputs, fee } = determineUtxosForSpend({ feeRate: feeRates?.halfHourFee.toNumber() ?? 0, recipients: [ { @@ -56,8 +73,7 @@ export function useSbtcDepositTransaction() { ], utxos, }); - console.log('inputs', inputs); - console.log('outputs', outputs); + const p2wpkh = btc.p2wpkh(signer.publicKey, networkMode); for (const input of inputs) { @@ -81,15 +97,26 @@ export function useSbtcDepositTransaction() { } }); - signer.sign(deposit.transaction); - deposit.transaction.finalize(); + return { deposit, fee }; + } catch (error) { + logger.error('Error generating deposit transaction', error); + return null; + } + }, + async onDepositSbtc(swapSubmissionData: SwapSubmissionData) { + if (!stacksAccount) return; + const sBtcDeposit = swapSubmissionData.txData?.deposit as SbtcDeposit; + + try { + signer.sign(sBtcDeposit.transaction); + sBtcDeposit.transaction.finalize(); - console.log('deposit tx', deposit.transaction); - console.log('tx hex', deposit.transaction.hex); + console.log('deposit tx', sBtcDeposit.transaction); + console.log('tx hex', sBtcDeposit.transaction.hex); - const txid = await client.broadcastTx(deposit.transaction); + const txid = await client.broadcastTx(sBtcDeposit.transaction); console.log('broadcasted tx', txid); - await client.notifySbtc(deposit); + await client.notifySbtc(sBtcDeposit); toast.success('Transaction submitted!'); setIsIdle(); navigate(RouteUrls.Activity); diff --git a/src/app/pages/swap/hooks/use-swap-form.tsx b/src/app/pages/swap/hooks/use-swap-form.tsx index d407f68a43b..9a23e348ebf 100644 --- a/src/app/pages/swap/hooks/use-swap-form.tsx +++ b/src/app/pages/swap/hooks/use-swap-form.tsx @@ -5,17 +5,10 @@ import { type SwapAsset } from '@leather.io/query'; import { convertAmountToFractionalUnit, createMoney } from '@leather.io/utils'; import { FormErrorMessages } from '@shared/error-messages'; -import { StacksTransactionFormValues } from '@shared/models/form.model'; +import { type SwapFormValues } from '@shared/models/form.model'; import { useSwapContext } from '../swap.context'; -export interface SwapFormValues extends StacksTransactionFormValues { - swapAmountBase: string; - swapAmountQuote: string; - swapAssetBase?: SwapAsset; - swapAssetQuote?: SwapAsset; -} - export function useSwapForm() { const { isFetchingExchangeRate } = useSwapContext(); diff --git a/src/app/pages/swap/swap.context.ts b/src/app/pages/swap/swap.context.ts index df4da74c5ff..223be30712a 100644 --- a/src/app/pages/swap/swap.context.ts +++ b/src/app/pages/swap/swap.context.ts @@ -12,6 +12,7 @@ export interface SwapSubmissionData extends SwapFormValues { slippage: number; sponsored?: boolean; timestamp: string; + txData?: Record; } export interface SwapContext { diff --git a/src/app/query/common/compliance-checker/compliance-checker.query.ts b/src/app/query/common/compliance-checker/compliance-checker.query.ts index 14bfb3f3e50..03622580460 100644 --- a/src/app/query/common/compliance-checker/compliance-checker.query.ts +++ b/src/app/query/common/compliance-checker/compliance-checker.query.ts @@ -75,7 +75,7 @@ function useCheckAddressComplianceQueries(addresses: string[]) { export const compliantErrorBody = 'Unable to handle request, errorCode: 1398'; -export function useBreakOnNonCompliantEntity(address: string | string[]) { +export function useBreakOnNonCompliantEntity(address: string | string[] = '') { const nativeSegwitSigner = useCurrentAccountNativeSegwitIndexZeroSignerNullable(); const complianceReports = useCheckAddressComplianceQueries([