Verified Calls docs
v1.1.0
Live demo Get help
● Reference · Versions

Changelog
what changed, when.

Every release, newest first, and how to update. Read the entry for your target version before you update.

011.1.0 · build, checks and limits

Current A maintenance release. The scoring method, the seal format, the database schema and every setting are unchanged, so no recompute is needed and nothing in .env has to change.

Changed

  • Production runs compiled JavaScript. pnpm build compiles the server, the recompute script and the bundled Admin Kit to dist/; pnpm start runs node dist/src/index.js. No TypeScript loader runs in production; tsx is a development dependency for pnpm dev only.
  • Admin Kit 0.5.0 (the operator console): compiled with the product. Same screens, settings, storage and HTTP API. Its Content-Security-Policy allows no inline styles (style-src 'self' plus a per-response nonce), and the console header shows the release version.
  • Development dependency: TypeScript 6.0, the version typescript-eslint supports. The application code is unchanged.

Added

  • pnpm check: type check, ESLint, the Prettier format check and the whole test suite in one command. Also pnpm lint, pnpm format and pnpm format:check.
  • pnpm recompute runs the outcome recompute script and reads ./.env like the service.
  • FRAME_ANCESTORS: the public read-only pages may be shown in a frame by the https:// origins you list (your own website, a marketplace live preview). Forms, payment pages, /link, /api, /export and the console are never frameable (Configuration).
  • Limits on the full-record downloads /export/calls.jsonl and /export/seals.json: 20 downloads a minute per visitor (429 with Retry-After) and 4 at once site-wide (503 with Retry-After).
  • A database filled by the development seed script is marked on machine-readable outputs too: X-Synthetic-Data: 1 on exports, syntheticData in /api/v1/health, "demo data" on the badge.
  • The /linkwallet reply tells the caller not to forward the one-time link.

Improved

  • /export/seals.json streams seals in chunks and /api/v1/seals pages with one indexed query, so both stay fast on a record with tens of thousands of seals.
  • Configuration: ALLOWED_CHAT_IDS and SEAL_POST_CHAT_IDS must be numeric chat ids, EXIT_LIQUIDITY_USE_RPC must be a true/false word, and every invalid value is reported in one start-up message (names and rules, never values).
  • The process logs unhandled promise rejections and exits with an error code on an uncaught exception, so systemd restarts it cleanly.
  • SPEC.md is the current specification, one section per feature. Tests are grouped by module and behaviour; the suite has a 30-second test timeout and timing checks that hold on a busy machine.

Update from 1.0.0

Follow Updating: after pnpm install --frozen-lockfile run pnpm build, and change the systemd ExecStart to /usr/bin/node dist/src/index.js (unit). The database and .env stay as they are.

Scope

  • 856 automated tests pass with pnpm check (type check, lint and format clean). Price and chain responses in the tests are recorded fixtures, so the suite needs no network and no keys.
  • The parts that talk to an outside service run on your own accounts: your Telegram bot token, your wallet for Stars or Solana Pay payments and Jupiter swaps, and your RPC for the on-chain memo. Post one call and make one small payment on your own setup before you announce the site (checklist).
  • The console's Access settings (maintenance, announcement, blocked countries), tagline, support email, website and legal URLs are not used by the public site.

021.0.0 · first marketplace release

First marketplace release. It contains everything in 0.3.0 below (public record, proof, follower tools, integrity flags, earning options, operator console) plus the changes listed here. The scoring method and the seal format are unchanged, so no recompute is needed.

Changed

  • Console navigation. The console is now the MIKODES Admin Kit 0.4.0. The record's data screens open inside it, in the sidebar: Monitor → Chats (was Operations → Sources), Callers, Calls, Seals (was Operations → Proof), Integrity review, Logs; Money → Revenue centre, VIP members; System → Backup (owners). The addresses under /admin/ops/… are unchanged and still open on their own.
  • Setup wizard. Get started asks for the Telegram bot token, with a Test button that asks Telegram who the bot is. A new status check, A chat is recording, stays on the Overview until an approved chat records and names the chats waiting for approval.
  • Seal interval wording. README and site texts now say "every 10 minutes" (the default since 0.2.0), not "every hour".

Security

  • One on-chain transaction pays one request only, across VIP checkouts and paid listings.
  • Paid listings: a request is reused only when the same form is sent twice; the review and the pay page show the description and the join link, with a warning when the link names another public @username than the recorded group's own.
  • At most 5 payment requests per visitor in 30 minutes; payment status polls share one chain read, with a site-wide cap.
  • Behind a trusted proxy the visitor is the rightmost X-Forwarded-For entry; a flood of new addresses can no longer reset the API limits.
  • Console viewers see that a VIP invite was sent, not the invite link.
  • Share-card images have a site-wide render budget (503 with Retry-After above it); cached cards still load.
  • Trading-link clicks count once per visitor, venue, token and UTC day.

Fixed

  • Share-card images on the hosted live demo returned an error (the demo build did not include the share-card fonts). A self-hosted install was not affected.

Update from 0.3.0

Follow Updating. The database upgrades itself on start; nothing in .env changes.

Scope

  • 837 automated tests at the time (type check and licence check clean).
  • The Axiom, Bloom and Trojan presets open the venue with your referral code; click each saved link once to check it.
  • The console's Access settings (maintenance, announcement, blocked countries), tagline, support email, website and legal URLs are not used by the public site.

030.3.0 · development version (not sold)

Added

  • Admin console: the MIKODES Admin Kit 0.2.0 at /admin with roles (owner, manager, viewer), two-factor, audit log, history with rollback, export and import, status checks and realised revenue. Settings and secrets are edited there; most apply without a restart. Operations screens at /admin/ops: Sources, Callers (notes, merge), Calls, Proof, Integrity, Revenue, Members, Logs, Backup.
  • Earning options, all off by default: trading links with referral presets and click counting, Jupiter swap with a referral fee, VIP membership (Telegram Stars and Solana Pay), paid listings, sponsored slot, API keys and limits, a calculator.
  • Followers: live feed, token pages, tokens list, search, follower simulator, groups directory, share cards, follow alerts by Telegram DM with quiet hours, new bot commands (/top, /caller, /follow, /token, /settings), an optional reply card in groups.
  • Integrity flags: coordinated calls, paid promotions (not scored), VIP-lead comparison.
  • Design: new public pages and Operations screens, dark and light themes.

Changed

  • ADMIN_SECRET_KEY is required for the console. ADMIN_TOKEN from 0.2 is no longer a login: remove it from .env.
  • Chats must be approved (or listed in ALLOWED_CHAT_IDS) before anything is recorded.

Scope

  • 823 automated tests at the time.
  • The console's Access settings (maintenance, announcement, blocked countries), tagline, support email, website and legal URLs are not used by the public site.

Migration from 0.2

  1. Back upThe database and .env (how).
  2. Add the console keyADMIN_SECRET_KEY from openssl rand -hex 32 in .env; remove ADMIN_TOKEN.
  3. Approve chatsList your chat ids in ALLOWED_CHAT_IDS, or approve them under Operations → Sources after the update.
  4. Update and startAs in Updating. The schema upgrades itself; your .env values keep working until you save the same setting in the console.
  5. Create the console ownerWith the setup code from the log (how).

040.2.0 · development version (not sold)

  • Price correctness on every Solana pool type; a cross-check between price sources (disagreement = unpriceable); migrated tokens re-checked.
  • Scoring method 2: volume-weighted exits, liquidity-aware slippage, "low liquidity" and "called after a run-up" labels, scripts/recompute.ts.
  • Seals every 10 minutes by default; coverage events sealed; all verifiers reject gaps and overlaps.
  • Security fixes: chat approval, sign-in throttle, name sanitizing, wallet validation.

050.1.0 · first release

Telegram recorder, GeckoTerminal and DexScreener prices, follower results and median ranking, Merkle seals with Telegram posts, the operator-signed Solana memo, caller wallet linking and the exit-liquidity check, the public site with proof pages, the offline verifier, exports, the badge and the API.