proof-of-stock

mcp
Guvenlik Denetimi
Basarisiz
Health Gecti
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 12 GitHub stars
Code Basarisiz
  • rm -rf — Recursive force deletion command in .github/workflows/exam.yml
  • fs.rmSync — Destructive file system operation in apps/fault-drills.test.mjs
  • network request — Outbound network request in apps/fault-drills.test.mjs
  • fs.rmSync — Destructive file system operation in apps/security.test.mjs
  • network request — Outbound network request in apps/security.test.mjs
  • exec() — Shell command execution in apps/stocks-analytics.mjs
  • fs.rmSync — Destructive file system operation in apps/stocks-analytics.mjs
  • process.env — Environment variable access in apps/stocks-analytics.mjs
  • network request — Outbound network request in apps/stocks-analytics.mjs
  • fs.rmSync — Destructive file system operation in apps/stocks-analytics.test.mjs
  • process.env — Environment variable access in apps/stocks-analytics.test.mjs
  • network request — Outbound network request in apps/stocks-analytics.test.mjs
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

Checks if a tokenized-stock contract is on the issuer's own registry, with the issuer price and the on-chain gap.

README.md

Proof of Stock™

CI
Licence: MIT

At a glance

Is this stock token the real one? Paste an address or a ticker; we check it against the issuer's own list on Base
(Coinbase) and Robinhood Chain (Robinhood).

Passport of NVDAc on Base: issuer-listed, issuer price and on-chain price
A token passport. NVDAc on Base, on Coinbase's list.
A contract named SNDKc that is not on the issuer's list
An impostor. Calls itself SNDKc; not on the issuer's list.
Table of look-alike tokens flagged this week
Look-alikes flagged. The weekly list; the archive is at /history.
Connect card with the MCP server URL and setup for Claude Code, ChatGPT and mcp.json
Ask it from your agent. A public MCP server, no key.
Status page: registries, price readings and impostor lists for both chains
Status. How fresh each registry, price and list is.
Links
Site · Passport · /verify · /history · /status · /anchors · Docs

MCP https://proofofstock.xyz/mcp
MCP registry xyz.proofofstock/proof-of-stock

Contact [email protected]

Proof of Stock tells you whether a tokenized-stock contract is the issuer's own. It looks the exact address up in the
issuer's registry: Coinbase's for Base, Robinhood's for Robinhood Chain. A name or a symbol proves nothing, so tokens
that copy a listed symbol are flagged and pointed at the listed contract.

For a listed token it also shows the issuer's price, how old that price is, and how far the deepest on-chain pool
trades from it.

It is for:

  • people buying stock tokens, who want to check a contract before they buy;
  • agent builders, whose agents need the same check before a swap.

Live at proofofstock.xyz. Documentation: proofofstock.xyz/docs.

Use it

No key and no sign-up for any of these.

Site proofofstock.xyz: paste an address or type a ticker.
MCP server https://proofofstock.xyz/mcp (Streamable HTTP, stateless). Six tools: find_stock_token, list_stock_tokens, stock_passport, verify_stock_tokens, recent_impostors, compare_venues.
JSON API GET /verify, GET /badge.svg, GET /api/passport and more. See the HTTP API reference.
Guard @proofofstock/guard, a pre-trade check for Node agents, with a Coinbase AgentKit action. npm install @proofofstock/guard, no dependencies. It lives in packages/proofofstock-guard.

Add the MCP server to Claude Code:

claude mcp add --transport http proofofstock https://proofofstock.xyz/mcp

Claude, ChatGPT, Cursor and raw JSON-RPC are covered in the tutorial.

Check us, not just our answers

A checker is worth something only if you do not have to take its word. Each of these works without trusting us:

  • The list behind a verdict. Every answer names the issuer list it was decided against by the SHA-256 of its
    sorted addresses, with a shell command that computes the same hash from the issuer's own API, and a URL of that
    exact list frozen.
  • A receipt to keep. /verify?...&receipt=1 returns a record of the check that
    scripts/receipt-check.mjs can check again months later, after the issuer's list has
    changed. See Keep a receipt of a check.
  • The issuer's factory, read from the chain. Each issuer creates its tokens from a factory that logs every one.
    We read those logs as a second source (issuer_factory in each answer, with the block and the transaction), so a
    verdict never rests on the issuer's HTTP list alone. The health check alerts if a listed token was never created by
    that factory. Today's counts are on the status page.
  • Prices you can replay. An on-chain price carries its block and the exact call; eth_call at that block returns
    the same bytes.
  • A public exam, every day. Every token on the issuers' lists, plus the week's look-alikes, strangers and tokens asked on the wrong chain: questions whose right answer comes from the issuers, not from us. The reports are in the
    exam branch.
  • An outside check every 30 minutes. It runs on GitHub's own runners, not on our host: it hashes each issuer's
    list straight from the issuer against our list_proof, and calls a passport's on-chain price evidence again at its
    block for the same bytes (scripts/canary.mjs).
  • History anchored in Bitcoin. Once a day, a manifest of every data file of the day is timestamped through
    OpenTimestamps. See Check that our data existed on a given day.

Example

Check one address on Base. This one calls itself SNDKc but is not on Coinbase's registry:

curl -s 'https://proofofstock.xyz/verify?chain=base&address=0x35b76a8fbfbac68c449a4a4a8d1bcda0d486f703' \
  | jq '{listed, impostor, listed_on_other_chain, registry_age_s}'
{
  "listed": false,
  "impostor": { "kinds": ["registry_symbol"], "imitates_symbol": "SNDKc", "listed_address": "0xb200000000000000000000397293cb8cda9a10c5" },
  "listed_on_other_chain": null,
  "registry_age_s": 112
}

listed is true only when this exact address is in the registry. impostor.listed_address is the contract the issuer
actually lists. A 503 means the registry could not be read: that is no answer, not "not listed". More in
Check a contract before listing or buying it.

What it does not do

  • It only reads. It never trades, has no accounts and no cookies, and holds no wallet. Its one key lives on our own server and writes our daily anchor hash to Base and Robinhood Chain, from its own address, value zero; it can do nothing else, and nothing you send can make it sign.
  • It is not advice. An answer is a fact about data at a stated time. See Legal.
  • "Not listed" is not "fake". A genuine token of another issuer answers the same. Only Coinbase on Base and
    Robinhood on Robinhood Chain are checked.
  • It is not a live quote. On-chain prices are recorded every 15 minutes, and every answer says how old it is.
  • It is not affiliated with Coinbase or Robinhood. Their names and tickers are their trademarks.

How the answers are computed, and the known limits: Methodology.

Run the tests

Node 20 or later.

npm install
npm test        # every suite, no network
npm run locks   # mutation locks: each breaks the code on purpose and needs a test to go red

To run the site locally, point it at the recorder's data and open 127.0.0.1:3005:

STOCKS_ROOT_BASE=<dir> STOCKS_ROOT_ROBINHOOD=<dir> npm start

The recorder (scripts/stocks/stock-peg.mjs --chain=base --root=<dir>) needs outbound HTTPS to the issuer APIs,
DexScreener and GeckoTerminal.

Layout

Path What
evm/core/stocks/ the logic, with no I/O: registries, impostors, premium, pool rules, NYSE calendar, passport, verify
apps/ the site, the JSON API and the MCP server
packages/proofofstock-guard/ the guard
scripts/stocks/ the recorder (every 15 min), the impostor list (every 6 h), CLIs
schemas/v2/ schemas of the recorded rows, checked on every write
tests/locks/ the mutation locks
deployment/ the nginx and systemd units the live site runs on
docs/ the documentation served at proofofstock.xyz/docs

Licence, security, contact

  • Code under the MIT licence.
  • The name is not the code. "Proof of Stock", the domain proofofstock.xyz and the badge are trademarks of the
    project's owner and are not covered by that licence. Fork the code, run it, sell what you build with it. What you
    may not do is publish it under this name or badge, or let a reader think an answer came from here when it did
    not: the whole point of this service is that a verdict can be traced to who made it.
  • Found a vulnerability? See SECURITY.md. Please do not open a public issue for it.
  • Contact: [email protected].
  • What changed in each release: CHANGELOG.md.

Yorumlar (0)

Sonuc bulunamadi