npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@hexora/tx-guard

v1.0.4

Published

Detect **malicious transactions and signatures** before users sign them.

Readme

@hexora/tx-guard

Detect malicious transactions and signatures before users sign them.

npm version license


The problem

In 2024, wallet drainers stole $494 million from 332,000 victims — a 67% increase year over year. Angel Drainer, Inferno Drainer, and Pink Drainer together account for 93.9% of stolen funds.

They all exploit the same weakness: users don't understand what they're signing.

A setApprovalForAll looks identical to a legitimate NFT listing. An EIP-2612 permit looks like a harmless "Sign this message" popup. A updateDelegate looks like a routine protocol interaction. tx-guard reads the calldata and tells users exactly what will happen.


Install

npm install @hexora/tx-guard
# or install everything
npm install hexora

Usage

import { checkTx } from "@hexora/tx-guard"

// Before showing the "Sign" button
const result = await checkTx({
  tx:       pendingTransaction,
  provider: window.ethereum,
})

if (result.scam) {
  alert(result.warning)
  return // block signing
}

EIP-712 typed data (permit, Seaport orders)

const result = await checkTx({
  tx,
  typedData: eip712SignatureRequest,
  provider:  window.ethereum,
})
// Detects: permit_drain, seaport_order_spoof, permit2_drain

Deep simulation with Alchemy/Infura

// Uses debug_traceCall — sees every storage write and internal call
// Works without rpcUrl too — falls back to basic eth_call simulation
const result = await checkTx({
  tx,
  provider: window.ethereum,
  rpcUrl:   "https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY",
})

Fake token airdrop detection

const result = await checkTx({
  tx,
  tokenName:   incomingToken.name,
  tokenSymbol: incomingToken.symbol,
})
// "Visit scam.xyz to claim $1000 USDT" → fake_token_airdrop

Detection patterns (13 total)

Critical

Unlimited Approvalapprove(spender, 2^256-1) to an unknown address grants permanent full access to your tokens. Drainers request this first, then drain at any time without another signature from you.

Delegation AbuseupdateDelegate and approveDelegation give another address the right to borrow and withdraw on your behalf in lending protocols (Venus, Aave, Compound). This was the exact mechanism used in the Venus Protocol $27M exploit — one signed transaction handed over full control.

EIP-2612 Permit — A gasless off-chain signature that grants token allowance without broadcasting a transaction. Inferno and Angel Drainer use this as their primary attack vector because the "Sign Message" popup feels safe compared to a transaction.

setApprovalForAll — One approval grants access to every NFT you own in an entire collection. Attackers spoof OpenSea and Blur listing pages to make users sign this instead of a legitimate sale.

Permit2 Drain — Uniswap's Permit2 contract allows a single signature to authorize spending across many tokens. Drainers spoof these requests to get blanket access — one signature drains USDC, WETH, and any other approved token simultaneously.

High

Ice Phishing — A malicious contract calls transferFrom(victim, attacker) using an old allowance you granted months ago and forgot about. Named "ice phishing" because the approval is frozen in your history until the attacker decides to act.

Proxy Recently Upgraded — Upgradeable proxy contracts can change their implementation (logic) at any time. If the implementation address changed less than 7 days ago, the new code may contain malicious logic added right before the attack.

Suspicious Multicall — A single transaction that bundles approve + transferFrom atomically. The user sees one confirmation but two operations execute — the approval and the drain happen in the same block with no time to react.

Seaport Order Spoof — Attackers forge Seaport marketplace orders where the consideration field routes assets to their address instead of the seller. Inferno Drainer specializes in this — victims think they're listing an NFT but actually send ETH to the attacker.

Fake Token Airdrop — Tokens with names like "Visit scam.xyz to claim $1000 USDT" are sent to wallets as a lure. The token itself is worthless — the scam is the website visit, which then requests a wallet signature.

New Contract + ETH — Legitimate protocols are battle-tested for months before handling real funds. A contract deployed less than 30 days ago requesting ETH is a strong indicator of a one-time attack contract.

Medium

ERC-4337 AA Suspicious — In Account Abstraction, user operations flow Bundler → EntryPoint → your wallet. If handleOps is called on an address that isn't the official ERC-4337 EntryPoint, someone is routing your transaction through custom logic to conceal the real operation.

Composite Scoring — Multiple weak signals that wouldn't trigger a flag individually are combined into a single risk verdict. A new contract + multicall + medium-confidence detection together cross the threshold.


API

checkTx(params): Promise<CheckTxResult>

Parameters

| Param | Type | Required | Description | |---|---|---|---| | tx | RawTransaction | ✓ | { to, from, data?, value?, chainId? } | | provider | EIP1193Provider | — | Enables contract age check + simulation | | typedData | TypedDataPayload | — | EIP-712 payload to analyze | | tokenName | string | — | Token name for fake airdrop detection | | tokenSymbol | string | — | Token symbol for fake airdrop detection | | rpcUrl | string | — | Alchemy/Infura URL for deep debug_traceCall simulation |

Result

{
  scam:       boolean
  reason:     TxScamReason | null
  riskLevel:  "none" | "low" | "medium" | "high" | "critical"
  confidence: number   // 0–100
  warning:    string | null  // human-readable explanation for UI
  details: {
    methodId:          string | null
    methodName:        string | null
    spender:           string | null
    amount:            bigint | null
    isUnlimitedAmount: boolean
    contractAge:       number | null   // days since deployment
    isProxy:           boolean
    proxyImplAge:      number | null   // days since last upgrade
    simulationResult:  SimulationResult | null
  }
  error: { code: string; message: string } | null
}

TxScamReason values

type TxScamReason =
  | "unlimited_approval"
  | "permit_drain"
  | "set_approval_for_all"
  | "ice_phishing"
  | "new_contract"
  | "eth_value_mismatch"
  | "suspicious_multicall"
  | "seaport_order_spoof"
  | "permit2_drain"
  | "proxy_recently_upgraded"
  | "simulation_loss"
  | "fake_token_airdrop"
  | "delegation_abuse"

Coverage

  • 13 attack patterns
  • $494M stolen in 2024 — the attacks we detect
  • 93.9% of top drainer families covered (Angel, Inferno, Pink)
  • 0 external API calls required
  • All EVM chains supported

Platform support

React · Next.js · Vue · Svelte · Angular · React Native · Browser Extensions · Node.js · Vanilla JS


License

MIT · GitHub