Skip to content

Repository files navigation

ScamShield

ScamShield helps users decide whether a link or website is trustworthy before they click deeper, enter a password, approve a wallet action, or make a payment. It includes a public web scanner for pasted links and a browser extension for checking the active tab. Each scan is sent through a public relay and the final verdict is recorded through GenLayer consensus.

GitHub repository description: GenLayer-powered browser extension for scam detection, website risk checks, and consensus-backed safety verdicts.

Live Testnet Deployment

  • Live web scanner: https://scamshield-relay.vercel.app
  • Public relay/API base: https://scamshield-relay.vercel.app
  • Health checks: https://scamshield-relay.vercel.app/api and https://scamshield-relay.vercel.app/health
  • GenLayer contract: 0x0d0E704daB5Db76937631b4bA9ABCDddc02baDb7
  • Tester package: release/tester-extension.zip
  • Unpacked tester folder: release/tester-extension

The submitted Vercel URL now serves the ScamShield web scanner at /, while the relay remains available at /api. The current tester extension build is configured to use the public relay above, so testers do not need to run the backend locally.

What ScamShield Does

  • Checks a pasted public URL from the web scanner.
  • Analyzes the active website from the browser extension popup.
  • Extracts limited page context such as title, meta description, and visible text excerpt.
  • Submits the scan to a relay API that coordinates with GenLayer.
  • Returns a verdict of SAFE, SUSPICIOUS, or SCAM.
  • Shows confidence, a short summary, and key risk flags in the web frontend and extension popup.
  • Keeps browser-internal pages, local files, and private authenticated pages outside the supported public test flow.

Tester Guide

Option 1: Web Scanner

Use this path if you want to verify the submitted frontend URL directly.

  1. Open https://scamshield-relay.vercel.app.
  2. Paste a public http:// or https:// URL into the scanner.
  3. Click Check link.
  4. Wait for the GenLayer-backed verdict.
  5. Review the verdict, confidence score, summary, risk flags, and transaction reference.

Option 2: Desktop Chrome, Brave, or Edge

Use this path if you want to test the browser extension experience.

  1. Download tester-extension.zip from the project release or shared test package.
  2. Unzip the file.
  3. Open chrome://extensions in Chrome, Brave, or Edge.
  4. Turn on Developer mode.
  5. Click Load unpacked.
  6. Select the unzipped tester-extension folder.
  7. Open any normal public website tab, then click the ScamShield extension icon.
  8. Click Check current tab and wait for the GenLayer verdict.

Option 3: Mises Browser on Mobile

Regular Chrome mobile does not support loading unpacked extensions. If testing on Android with Mises Browser, use its zip import flow.

  1. Download tester-extension.zip onto the phone.
  2. Open Mises Browser.
  3. Go to mises://extensions.
  4. Turn on Developer mode if it is not already enabled.
  5. Tap + (from .zip/.crx/.user.js).
  6. Select tester-extension.zip.
  7. Open a website, then launch ScamShield from the extension menu.

Mobile extension support can vary by browser. If a scan fails on mobile, retest the same site on desktop Chrome to confirm whether the issue is browser compatibility or the scan itself.

Expected Test Flow

Web Scanner Flow

  1. Open https://scamshield-relay.vercel.app.
  2. Confirm the page shows Know before you click. and the relay status is online.
  3. Paste a public URL.
  4. Click Check link.
  5. Wait while the scan is submitted and finalized through GenLayer consensus.
  6. Review the verdict, confidence score, summary, risk flags, and transaction reference.

Extension Flow

  1. Open a normal http:// or https:// website.
  2. Open the ScamShield extension popup.
  3. Confirm the current URL appears in the popup.
  4. Click Check current tab.
  5. Wait while the scan is submitted and finalized through GenLayer consensus.
  6. Review the verdict, confidence score, summary, and risk flags.
  7. Click Scan again to clear the current result and test another page.

The extension does not analyze browser settings pages, local files, or internal pages such as chrome://extensions.

Project Structure

apps/extension        Browser extension popup and manifest
apps/relay            Relay API for scan submission and status polling
api                   Vercel serverless entrypoints
contracts/genlayer    GenLayer intelligent contract and deploy scripts
packages/shared       Shared schemas, types, and constants
public                Vercel web scanner frontend and public assets
release               Generated tester builds
scripts               Release automation

Local Development

Install dependencies:

npm install

Create a local environment file:

cp .env.example .env

Required relay values:

PORT=8787
SCAMSHIELD_PUBLIC_BASE_URL=http://localhost:8787
GENLAYER_RPC_URL=https://studio.genlayer.com/api
GENLAYER_EXPLORER_URL=https://explorer-studio.genlayer.com
GENLAYER_PRIVATE_KEY=0xyour_private_key
GENLAYER_CONTRACT_ADDRESS=0xyour_contract_address

Optional rate limiting values:

UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=

Start the relay:

npm run dev:relay

Start the extension dev server:

npm run dev:extension

Build and Release

Build all workspaces:

npm run build

Build a tester release against the public relay:

$env:VITE_SCAMSHIELD_RELAY_URL="https://scamshield-relay.vercel.app"
npm run release:tester

This generates:

  • release/tester-extension
  • release/tester-extension/INSTALL.txt
  • release/tester-extension.zip

The release command rejects localhost relay URLs unless SCAMSHIELD_ALLOW_LOCAL_RELAY_RELEASE=1 is set for private local testing.

Relay API

Health check:

GET /api

Submit a scan:

POST /api/scan
Content-Type: application/json
{
  "url": "https://example.com",
  "pageContext": {
    "title": "Example Domain",
    "metaDescription": "",
    "visibleTextExcerpt": "Example Domain"
  }
}

Check scan status:

GET /api/scan-status?scanKey=...&txHash=...&sanitizedUrl=...

Deployment

The web frontend is served from public/index.html, with public assets in public/. The relay is deployed on Vercel through the root api entrypoints:

  • api/index.ts
  • api/scan.ts
  • api/scan-status.ts

vercel.json keeps /health mapped to /api and leaves / available for the web scanner.

Production environment variables required on Vercel:

SCAMSHIELD_PUBLIC_BASE_URL=https://scamshield-relay.vercel.app
GENLAYER_RPC_URL=https://studio.genlayer.com/api
GENLAYER_EXPLORER_URL=https://explorer-studio.genlayer.com
GENLAYER_PRIVATE_KEY=0xyour_private_key
GENLAYER_CONTRACT_ADDRESS=0xyour_contract_address
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=

Do not commit real private keys or production secrets.

Contract Workflow

Lint the GenLayer contract:

npm run lint:contract

Deploy the GenLayer contract:

npm run deploy:contract

The current public tester release already points to the deployed contract listed in the Live Testnet Deployment section.

Notes for Testers

  • ScamShield is a testnet build and is not yet published on the Chrome Web Store.
  • Results are generated through the configured relay and GenLayer contract.
  • Scans may take a few seconds while consensus finalizes.
  • Avoid submitting private pages, authenticated dashboards, or sensitive content during public testing.
  • If the extension appears inactive, open a normal website tab and try again.

About

GenLayer-powered browser extension for scam detection, website risk checks, and consensus-backed safety verdicts.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages