Verify a decision
Every moderation decision on AVOID.NET is anchored to the Solana blockchain. You don't have to trust us — you can verify cryptographically that we committed to a verdict at a specific moment and have not rewritten it.
How verification works
- We commit. When a moderator accepts/rejects a submission, we serialize the decision into deterministic UTF-8 bytes (
payload_canonical_string), hash it with SHA-256, encode the digest as base58, and write it to Solana inside an SPL Memo v2 transaction. - We store the bytes. The exact bytes we hashed are stored alongside the decision in our database. Anyone can read them and recompute the hash in any language.
- You compare three values. Database hash, your independently-recomputed hash, and the hash inside the on-chain memo. If all three match, the decision is authentic and timestamped.
The on-chain memo format is
AVOID.NET|v1|h:<b58-sha256>|d:<id>|t:<iso>Find a signature on any investigation page's decision log, or run python -m src.verify_decision --signature <sig> for a CLI check.
Decision
review_approve · Injective (npm SDK supply-chain attack)
- Sequence
- #3
- Score
- 62 → 62 (0)
- Cluster
- mainnet-beta
- Slot
- 443524220
- Off-chain at
- 2026-08-27T06:05:37.595Z
- Anchored at
- —
- Block time
- —
Independent verification
- 1. Database (off-chain)
- G1QW7eWav2385vMLwsuSMXniK2DC4fuBy31sjomsZrQz
- 2. Recomputed (your browser)
- computing…
- 3. On-chain (Solana memo)
- fetching…
Canonical bytes hashed (2738 chars)
{"actor":"judge","decided_at":"2026-08-27T06:05:37.378Z","decision":"review_approve","investigation_id":"7fcf4c4e-798e-4496-9187-53a8ab811cf1","new_score":62,"page_slug":"injective-npm-sdk-supply-chain-attack","prev_score":62,"reason":"The review found no disputed or unverifiable claims among 28 tested (disputed_pct = 0/28 = 0.0%), and this was independently recomputed rather than taken on faith. The reviewer specifically tested, and confirmed with named primary sources, the things most likely to be wrong on a page of this type: that the incident is correctly classified as a compromised-maintainer npm publish rather than a protocol-level exploit (claim_findings[4], [5]), that the propagation to 17 additional packages is correctly attributed to pinned-dependency mechanics rather than a self-propagating worm (claim_findings[11]), that no unsupported threat-actor attribution appears on the page, and that the core account -- date, package/version numbers, the ~49-minute exposure window, detection credited to Socket/Ox Security/StepSecurity, the Eric Chen 'no funds at risk' quote, and the absence of confirmed losses -- is verbatim-corroborated against primary vendor writeups such as StepSecurity and Datadog (claim_findings[0], [2], [3], [14]-[16], [18], [20]). All six cited URLs were confirmed live. Three claims were only partially supported (claim_findings[13], [17], [19]), and notably all three imprecisions run in the same direction, making the incident look smaller or better-handled than sources establish: a cumulative all-time download total is presented as a weekly rate and used as the denominator for a reassuring 'small fraction' comparison, an account-access revocation is asserted beyond what the cited primary source states, and an unsourced claim attributes suspicious downloads to bots or scanners. Even treating the weekly-rate mischaracterization as a disputed claim rather than partially supported -- which is arguably the more defensible read, since it is load-bearing for a minimizing conclusion rather than merely incomplete -- the disputed_pct rises only to 3.6% (1/28), still comfortably inside the 0-10% approve band. Coverage gaps are medium (no GHSA/npm advisory or Injective-authored post-mortem) and low priority only, so the high-priority escalation rule is not engaged, and a clean accepted_submissions result reflects a successful empty query rather than an inaccessible database. The page is approved as published; the reassuring-imprecision pattern should be corrected editorially but does not meet the bar for a score penalty or status change.","score_delta":0,"sequence_num":3,"submission_content_hash":null,"submission_id":null,"submission_kind":null,"submission_valence":null,"v":1}