Skip to content

Commit 8e81a38

Browse files
authored
Merge pull request #100 from bitsnark/fix/tracker-confs
confirmations value tracker
2 parents e81b931 + 4d68a02 commit 8e81a38

8 files changed

Lines changed: 31 additions & 43 deletions

File tree

src/components/transaction-tracker/btc-completion-card.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { CheckCircledIcon } from '@radix-ui/react-icons';
33
import { getExplorerUrl, truncateAddress } from '@/lib/utils';
44
import bitcoinLogo from '@/assets/bitcoin-logo.png';
55
import ethLogo from '@/assets/eth-logo.png';
6+
import { formatConfirmations } from '@/utils/format';
67

78
export interface BtcCompletionCardProps {
89
amount: string;
@@ -62,7 +63,7 @@ export function BtcCompletionCard({
6263
<span className="text-[#888888] text-[13px]">Confirmations</span>
6364
<div className="flex items-center gap-2">
6465
<span className="text-white text-[13px] font-medium">
65-
{confirmations}
66+
{formatConfirmations(confirmations || 0)}
6667
</span>
6768
<CheckCircledIcon className="w-4 h-4 text-green-500" />
6869
</div>

src/components/transaction-tracker/btc-transaction-card.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import React from 'react';
21
import { Card } from '@/components/ui/card';
32
import { RefreshCw } from 'lucide-react';
43
import EthLogo from '@/assets/eth-logo.png';
54
import BtcLogo from '@/assets/bitcoin-logo.png';
65
import { CheckCircledIcon } from '@radix-ui/react-icons';
76
import { getExplorerUrl, truncateAddress } from '@/lib/utils';
87
import { InfoField } from './info-field';
8+
import { formatConfirmations } from '@/utils/format';
99

1010
export interface BtcTransactionCardProps {
1111
data: {
@@ -14,7 +14,7 @@ export interface BtcTransactionCardProps {
1414
recipientAddress?: string;
1515
reservationTx?: string;
1616
txid?: string;
17-
confirmations?: number | React.ReactNode;
17+
confirmations?: number;
1818
maxConfirmations?: number;
1919
};
2020
isStepThree?: boolean;
@@ -28,7 +28,7 @@ export function BtcTransactionCard({
2828
return (
2929
<div className="flex items-center justify-center gap-1">
3030
<span className="text-white text-[12px] font-medium">
31-
{data.confirmations}
31+
{formatConfirmations(data.confirmations || 0)}
3232
</span>
3333
{Number(data?.confirmations) >= Number(data?.maxConfirmations) ? (
3434
<CheckCircledIcon className="text-green-600 w-4 h-4" />

src/components/transaction-tracker/eth-completion-card.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { CheckCircledIcon } from '@radix-ui/react-icons';
33
import { getExplorerUrl, truncateAddress } from '@/lib/utils';
44
import bitcoinLogo from '@/assets/bitcoin-logo.png';
55
import ethLogo from '@/assets/eth-logo.png';
6+
import { formatConfirmations } from '@/utils/format';
67

78
export interface EthCompletionCardProps {
89
amount: string;
@@ -62,7 +63,7 @@ export function EthCompletionCard({
6263
<span className="text-[#888888] text-[13px]">Confirmations</span>
6364
<div className="flex items-center gap-2">
6465
<span className="text-white text-[13px] font-medium">
65-
{confirmations}
66+
{formatConfirmations(confirmations || 0)}
6667
</span>
6768
<CheckCircledIcon className="w-4 h-4 text-green-500" />
6869
</div>

src/components/transaction-tracker/eth-transaction-card.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import React from 'react';
21
import { Card } from '@/components/ui/card';
32
import { RefreshCw } from 'lucide-react';
43
import EthLogo from '@/assets/eth-logo.png';
54
import { CheckCircledIcon } from '@radix-ui/react-icons';
65
import { getExplorerUrl, truncateAddress } from '@/lib/utils';
6+
import { formatConfirmations } from '@/utils/format';
77
import { InfoField } from './info-field';
88

99
export interface EthTransactionCardProps {
@@ -13,8 +13,8 @@ export interface EthTransactionCardProps {
1313
recipientAddress?: string;
1414
reservationTx?: string;
1515
txid?: string;
16-
confirmations?: number | React.ReactNode;
17-
maxConfirmations?: number;
16+
confirmations: number;
17+
maxConfirmations: number;
1818
};
1919
isStepThree?: boolean;
2020
}
@@ -26,9 +26,9 @@ export function EthTransactionCard({
2626
const renderConfirmations = () => (
2727
<div className="flex items-center justify-center gap-1">
2828
<span className="text-white text-[12px] font-medium">
29-
{data.confirmations}
29+
{formatConfirmations(data.confirmations || 0)}
3030
</span>
31-
{data.confirmations === data.maxConfirmations ? (
31+
{data.confirmations && Number(data.confirmations) >= data.maxConfirmations ? (
3232
<CheckCircledIcon className="text-green-600 w-4 h-4" />
3333
) : (
3434
<RefreshCw className="text-foreground w-4 h-4 animate-[spin_2s_linear_infinite]" />

src/components/transaction-tracker/position-tracker.tsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,8 @@ export function PositionTracker({
4747
return usdValue.toFixed(2);
4848
}, [evmPosition?.originalAmount, bitcoinPrice?.bitcoin?.usd]);
4949

50-
const maxConfirmations = Number(env.VITE_EVM_CONFIRMATIONS);
51-
5250
const confirmations = useTxConfirmations({
5351
isActive: open,
54-
maxConfirmations: maxConfirmations,
5552
transactionHash: txHash,
5653
});
5754

@@ -63,18 +60,13 @@ export function PositionTracker({
6360
setShouldPoll(should);
6461
}, [isPositionCompleted, open]);
6562

66-
const displayConfirmations = isPositionCompleted
67-
? maxConfirmations
68-
: confirmations;
69-
63+
7064
const targetConfirmations = useBtcBlockConfirmations({
7165
isActive: isPositionCompleted,
7266
blockNumber: position?.targetBlockNumber,
7367
});
7468

75-
const displayTargetConfirmations = isPositionCompleted
76-
? env.VITE_BTC_CONFIRMATIONS
77-
: targetConfirmations;
69+
const displayTargetConfirmations = targetConfirmations;
7870

7971
return (
8072
<BaseTransactionTracker
@@ -98,9 +90,9 @@ export function PositionTracker({
9890
amount: amount,
9991
recipientAddress: evmPosition.ownerAddress,
10092
reservationTx: position?.registrationTxhash || '',
101-
confirmations: displayConfirmations,
93+
confirmations: confirmations,
10294
fiatAmount: fiatAmount,
103-
maxConfirmations: maxConfirmations,
95+
maxConfirmations: Number(env.VITE_EVM_CONFIRMATIONS),
10496
}}
10597
/>
10698
</TransactionStep>

src/components/transaction-tracker/reservation-tracker.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ export function ReservationTracker({
5555

5656
const confirmations = useTxConfirmations({
5757
isActive: open,
58-
maxConfirmations: maxConfirmations,
5958
transactionHash: txHash,
6059
});
6160

@@ -72,7 +71,6 @@ export function ReservationTracker({
7271

7372
const targetConfirmations = useTxConfirmations({
7473
isActive: open && bridgingCompleted,
75-
maxConfirmations: maxConfirmations,
7674
transactionHash: reservation?.targetTxhash,
7775
});
7876

src/hooks/useTxConfirmations.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
import { env } from "@/config/env";
2-
import { ContractManager } from "@/services/ContractManager";
3-
import { useEffect, useRef, useState } from "react";
1+
2+
import { ContractManager } from '@/services/ContractManager';
3+
import { useEffect, useRef, useState } from 'react';
44

55
interface UseTxConfirmationsProps {
66
isActive: boolean;
7-
maxConfirmations?: number;
87
transactionHash?: string;
98
}
109

1110
export function useTxConfirmations({
1211
isActive,
13-
maxConfirmations = env.VITE_EVM_CONFIRMATIONS,
1412
transactionHash,
1513
}: UseTxConfirmationsProps) {
1614
const [confirmations, setConfirmations] = useState(0);
@@ -29,20 +27,15 @@ export function useTxConfirmations({
2927
const checkConfirmations = async () => {
3028
try {
3129
const contractManager = await ContractManager.getInstance();
32-
const receipt = await contractManager.publicClient.getTransactionReceipt({
33-
hash: transactionHash as `0x${string}`,
34-
});
30+
const receipt =
31+
await contractManager.publicClient.getTransactionReceipt({
32+
hash: transactionHash as `0x${string}`,
33+
});
3534
if (receipt) {
36-
const currentBlock = await contractManager.publicClient.getBlockNumber();
35+
const currentBlock =
36+
await contractManager.publicClient.getBlockNumber();
3737
const confirmations = Number(currentBlock - receipt.blockNumber);
38-
setConfirmations(Math.min(confirmations, maxConfirmations));
39-
40-
if (confirmations >= maxConfirmations) {
41-
if (intervalRef.current) {
42-
clearInterval(intervalRef.current);
43-
intervalRef.current = null;
44-
}
45-
}
38+
setConfirmations(confirmations);
4639
}
4740
} catch (error) {
4841
console.error('Error checking confirmations:', error);
@@ -59,7 +52,7 @@ export function useTxConfirmations({
5952
intervalRef.current = null;
6053
}
6154
};
62-
}, [isActive, transactionHash, maxConfirmations]);
55+
}, [isActive, transactionHash]);
6356

6457
return confirmations;
65-
}
58+
}

src/utils/format.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function formatConfirmations(confirmations: number): string {
2+
return confirmations >= 1000 ? '+1000' : confirmations.toString();
3+
}

0 commit comments

Comments
 (0)