diff --git a/contracts/stream_contract/src/events.rs b/contracts/stream_contract/src/events.rs index bd2f18d1..944411b8 100644 --- a/contracts/stream_contract/src/events.rs +++ b/contracts/stream_contract/src/events.rs @@ -106,7 +106,6 @@ pub struct AdminTransferredEvent { pub new_admin: Address, } -/// Emitted when a stream is paused. /// Emitted when a sender pauses an active stream. /// /// Topic: `("stream_paused", stream_id)` diff --git a/frontend/src/components/TransactionTracker.tsx b/frontend/src/components/TransactionTracker.tsx index 370157fe..eed3978c 100644 --- a/frontend/src/components/TransactionTracker.tsx +++ b/frontend/src/components/TransactionTracker.tsx @@ -4,6 +4,7 @@ import React, { useEffect, useState, useCallback } from "react"; import { Loader2, CheckCircle, XCircle, ExternalLink, RefreshCw, Clock, Ban, FileSearch } from "lucide-react"; import toast from "react-hot-toast"; import type { BackendStream } from "@/lib/api-types"; +import { formatAmount } from "@/utils/amount"; /** * TransactionTracker - Shared component for tracking on-chain transaction lifecycle @@ -426,14 +427,6 @@ function renderChanges(prev: BackendStream, current: BackendStream) { return changes; } -// Helper to format amounts -function formatAmount(raw: bigint, decimals: number): string { - const divisor = BigInt(10 ** decimals); - const whole = raw / divisor; - const fraction = (raw % divisor).toString().padStart(decimals, "0").replace(/0+$/, ""); - return fraction ? `${whole}.${fraction}` : whole.toString(); -} - // Hook for using transaction tracker in components export function useTransactionTracker() { const [status, setStatus] = useState("idle"); diff --git a/frontend/src/components/dashboard/StreamDetailsModal.tsx b/frontend/src/components/dashboard/StreamDetailsModal.tsx index 66acdce0..e960fc21 100644 --- a/frontend/src/components/dashboard/StreamDetailsModal.tsx +++ b/frontend/src/components/dashboard/StreamDetailsModal.tsx @@ -26,7 +26,7 @@ export const StreamDetailsModal: React.FC = ({ return () => window.removeEventListener("keydown", handleEscape); }, [onClose]); - const progress = (stream.withdrawn / stream.deposited) * 100; + const progress = stream.deposited > 0 ? Math.min(100, Math.max(0, (stream.withdrawn / stream.deposited) * 100)) : 0; const remaining = stream.deposited - stream.withdrawn; return ( @@ -45,6 +45,7 @@ export const StreamDetailsModal: React.FC = ({