BigBlocks

Transaction History

Transaction list with status indicators, amounts, relative dates, and pagination. Supports default and compact variants with inbound/outbound display.

Compact

Loading

Empty

Installation

bunx shadcn@latest add https://registry.bigblocks.dev/r/transaction-history.json

Usage

Pass a BSV address to auto-fetch from the 1sat API, or provide pre-loaded entries directly.

import { TransactionHistory } from "@/components/blocks/transaction-history"
 
export function WalletActivity() {
  return (
    <TransactionHistory
      address="1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
      onRowClick={(txid) => console.log("Clicked:", txid)}
      onExternalLink={(txid) =>
        window.open(`https://whatsonchain.com/tx/${txid}`, "_blank")
      }
    />
  )
}

Variants

Default

Full transaction rows with status badge, description, amount, and relative date.

<TransactionHistory address={address} variant="default" />

Compact

Condensed rows showing description and amount only.

<TransactionHistory address={address} variant="compact" />

Props

TransactionHistory

PropTypeDefaultDescription
addressstring | null--BSV address to fetch history for
entriesHistoryEntry[]--Pre-loaded entries (bypasses API)
apiUrlstring"https://api.1sat.app"Custom API base URL
pageSizenumber20Entries per page
autoFetchbooleantrueAuto-fetch on mount
onRowClick(txid: string) => void--Row click callback
onExternalLink(url: string) => void--External link callback
onSuccess(entries: HistoryEntry[]) => void--Called on successful fetch
onError(error: Error) => void--Called on fetch error
variant"default" | "compact""default"Visual variant
skeletonCountnumber5Skeleton rows while loading
classNamestring--Additional CSS classes

HistoryEntry

interface HistoryEntry {
  txid: string
  description: string
  satoshis: number       // Positive = inbound, negative = outbound
  status: TransactionStatus
  dateCreated: string    // ISO date string
}
 
type TransactionStatus = "completed" | "unproven" | "sending" | "failed"

Hook

useTransactionHistory manages fetching, pagination, and entry state.

import { useTransactionHistory } from "@/components/blocks/transaction-history"
 
function CustomHistory() {
  const { entries, isLoading, error, hasMore, loadMore } =
    useTransactionHistory({ address: "1A1zP1eP..." })
 
  return (
    <div>
      {entries.map((e) => (
        <div key={e.txid}>{e.description}: {e.satoshis} sats</div>
      ))}
      {hasMore && <button onClick={loadMore}>Load more</button>}
    </div>
  )
}