An open API service indexing awesome lists of open source software.

https://github.com/warengonzaga/is-it-relay

Detect if a wallet address is part of Relay Protocol infrastructure
https://github.com/warengonzaga/is-it-relay

Last synced: 2 months ago
JSON representation

Detect if a wallet address is part of Relay Protocol infrastructure

Awesome Lists containing this project

README

          

# Is It Relay?

A web app to detect if an address is part of [Relay Protocol](https://relay.link) infrastructure. Checks solver addresses, depository contracts, and protocol contracts across all supported chains.

[![Deploy to GitHub Pages](https://github.com/warengonzaga/is-it-relay/actions/workflows/deploy.yml/badge.svg)](https://github.com/warengonzaga/is-it-relay/actions/workflows/deploy.yml)

## Features

- **Address Detection** — Identifies solver addresses, depository contracts, and protocol contracts (multicall, routers, receivers, etc.) from the Relay Protocol API.
- **Batch Processing** — Check multiple addresses at once by pasting comma, newline, or space-separated lists.
- **Multi-chain Support** — Scans across all chains returned by the `/chains` endpoint.
- **EVM, SVM & BTC** — Supports EVM (`0x...`), Solana (base58), and Bitcoin (Legacy, SegWit, Taproot) addresses.
- **Detection Summary** — Shows match type (solver, depository, contract) with per-chain breakdown.
- **Collapsible Chain Lists** — Matches grouped by type with expandable details.
- **Block Explorer Links** — Direct links to view the address on each chain's explorer.
- **Shareable URLs** — Results are linkable via `?address=` query parameter.
- **Privacy Toggle** — Address visibility toggle with truncated display by default.
- **Pixel Avatars** — Unique pixel-based avatars generated per address.

## Tech Stack

- [React 19](https://react.dev/) with [TypeScript](https://www.typescriptlang.org/)
- [Vite 7](https://vite.dev/)
- [Tailwind CSS 3](https://tailwindcss.com/)
- [Axios](https://axios-http.com/)
- [Boring Avatars](https://boringavatars.com/)
- [Lucide React](https://lucide.dev/)
- [Relay API](https://api.relay.link)

## Getting Started

### Prerequisites

- [Node.js](https://nodejs.org/) v18+
- [pnpm](https://pnpm.io/)

### Installation

```bash
git clone https://github.com/warengonzaga/is-it-relay.git
cd is-it-relay
pnpm install
```

### Development

```bash
pnpm dev
```

### Build

```bash
pnpm build
```

### Preview

```bash
pnpm preview
```

## How It Works

1. User enters one or multiple EVM, Solana, or Bitcoin addresses (comma, newline, or space-separated).
2. The app fetches all chains from `https://api.relay.link/chains`.
3. For each chain, it checks:
- `solverAddresses[]` — solver addresses
- `protocol.v2.depository` — v2 depository contract address
- `contracts.*` — protocol contracts (multicall3, erc20Router, relayReceiver, etc.)
4. Matching uses case-insensitive comparison for EVM and exact match for SVM/BTC (base58/bech32 is case-sensitive).
5. Results display the match type, matched chains, and explorer links.
6. For batch processing, results are organized by Relay and Non-Relay addresses with summary statistics.

## Project Structure

```
src/
├── components/
│ ├── ui/ # Reusable UI primitives (Button, Card, Input, Textarea)
│ ├── AddressInput.tsx # Address input form with validation
│ ├── DetectionResult.tsx # Result display with chain details
│ ├── BatchDetectionResult.tsx # Batch results display with summary
│ ├── Footer.tsx # Footer with repo links
│ └── IsItRelayLogo.tsx # Custom logo component
├── services/
│ └── relayApi.ts # API client and detection logic
├── types/
│ └── relay.ts # TypeScript interfaces
├── lib/
│ └── utils.ts # Utility functions
├── App.tsx # Main app component
├── main.tsx # Entry point
└── index.css # Global styles and theme
```

## License

GPL-3.0 © [Waren Gonzaga](https://github.com/warengonzaga)