Invariant Labs
invariant.app · Other · Solana · data checked 2026-10-20 21:56 (Stockholm)
Contact route: not found
Not claimed Automated from public data
Produced automatically from public data on 2026-10-20 (method v0.2.7). It shows how much of this project’s control structure, code and contact information could be checked from public sources. No person selected or adjusted it, and nothing a project does or pays changes it. It is not a security audit.
Beta: the method is still being calibrated, so this automated score may contain errors. Send a correction.
Transparency score, not a security audit. Scores are generated automatically from public data (Solana RPC, OtterSec build registry, GitHub, project websites). Projects are not involved unless a page is marked “Claimed”, and claiming never changes a score. Nothing here says a project is safe. How scores are made → · Corrections, right of reply & opt-out →
- Onchain: strongest Onchain history; weakest Contract control; missing data in Code openness, Team & contact, Legal documents, Domain.
Something wrong on this page? Dispute a check or send a correction · opt-out. We re-run the check and correct the page.
What was checked: addresses & sources
HyaB3W9q6XdA5xwpU4XnSZV94htfmbmqJXZcEbRaJutt(program) — source: https://github.com/invariant-labs/protocol/blob/master/sdk/src/network.tsMJ6WF1tpEJ7Gk8ULqejDJapRfqBwBEp1dH5QvAgYxu9(program) — source: https://github.com/invariant-labs/protocol/blob/master/staker-sdk/src/network.ts
Website invariant.app · GitHub https://github.com/invariant-labs. Addresses are used only if they appear verbatim on an official project page.
Programs taken from the project's own official address list or repository (process v1, docs/program-discovery-process.md); each exists on mainnet as an executable program.
Onchain track
Contract control weight 300/30
- ✕ Not met
Upgrade authority HyaB3W…
Upgrade authority is 3tAwiKReJVi11vG8ME79sog5QtUmuhcoUypR4K2T7Zrc: a single key (on-curve address). On Solana, the holder of this key can upgrade the program. Address taken from official source: https://github.com/invariant-labs/protocol/blob/master/sdk/src/network.tsWhat would show up as met
- If the program is final, revoke the upgrade authority. It then reads as immutable.
- Otherwise move the authority to a multisig or a DAO. For a multisig, use a threshold of at least 2, add a time lock, and do not keep a separate config authority that can change members without a vote.
- Publish the multisig or DAO address on your own website so the page and the on-chain account can be tied together.
How we check: We read the program’s upgrade authority on Solana (public RPC) and recognise Squads, Serum-style multisigs and SPL Governance accounts. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- ✕ Not met
Build matches source (OtterSec registry) HyaB3W…
OtterSec registry answered: no build was ever submitted for this program (no submission).What would show up as met
- Build the program reproducibly from your public source with the Solana verifiable-build tooling (
solana-verify). - Submit the build to the registry so that it appears in the OtterSec registry (verify.osec.io). The check reads that registry; it does not rebuild anything itself.
How we check: We ask the OtterSec build registry (verify.osec.io, a third party) whether the deployed program matches a build from the public source. We report what the registry says; we do not rebuild or vouch for anything ourselves. Any registry entry that matches the program’s current on-chain hash counts, not only the registry’s default entry (method 0.2.5). This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- Build the program reproducibly from your public source with the Solana verifiable-build tooling (
- ✕ Not met
Upgrade authority MJ6WF1…
Upgrade authority is 3tAwiKReJVi11vG8ME79sog5QtUmuhcoUypR4K2T7Zrc: a single key (on-curve address). On Solana, the holder of this key can upgrade the program. Address taken from official source: https://github.com/invariant-labs/protocol/blob/master/staker-sdk/src/network.tsWhat would show up as met
- If the program is final, revoke the upgrade authority. It then reads as immutable.
- Otherwise move the authority to a multisig or a DAO. For a multisig, use a threshold of at least 2, add a time lock, and do not keep a separate config authority that can change members without a vote.
- Publish the multisig or DAO address on your own website so the page and the on-chain account can be tied together.
How we check: We read the program’s upgrade authority on Solana (public RPC) and recognise Squads, Serum-style multisigs and SPL Governance accounts. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- ✕ Not met
Build matches source (OtterSec registry) MJ6WF1…
OtterSec registry answered: no build was ever submitted for this program (no submission).What would show up as met
- Build the program reproducibly from your public source with the Solana verifiable-build tooling (
solana-verify). - Submit the build to the registry so that it appears in the OtterSec registry (verify.osec.io). The check reads that registry; it does not rebuild anything itself.
How we check: We ask the OtterSec build registry (verify.osec.io, a third party) whether the deployed program matches a build from the public source. We report what the registry says; we do not rebuild or vouch for anything ourselves. Any registry entry that matches the program’s current on-chain hash counts, not only the registry’s default entry (method 0.2.5). This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- Build the program reproducibly from your public source with the Solana verifiable-build tooling (
- – N/A
Mint/freeze authority
No token mint submitted.source: calculated from the other checks checked 2026-10-20
Audits weight 157.5/15
- ◐ Partial
Audits found at official sources
Discovered automatically (method 0.2.2): 1 document(s) in invariant-labs/webapp (public): Soteria; 1 document(s) in invariant-labs/webapp-fogo (public): Soteria; 1 document(s) in invariant-labs/webapp-sonic (public): Soteria. Rated partial: found at the project's own GitHub organisation or website and naming Soteria, but the program ID was not found in the readable text (PDF text is parsed when possible). Date vs. last upgrade not checked. Quality, scope and findings not assessed. Searched: GitHub invariant-labs: 21 of 21 non-fork repositories file-listed via GitHub API | invariant.app: 32 audit/security page address(es) fetched (docs sub-domains and homepage audit links included).GitHub ↗GitHub ↗GitHub ↗api.github.com ↗ checked 2026-10-20sha256 d745580443a2…sha256 c78ee41e2f3c…What would show up as met
- Link each audit report from an official page: your docs, your website or an audits folder in your GitHub repository.
- Tell us the page through the corrections form so it can be added. The check only confirms that the document is reachable. It does not assess the audit’s quality or whether it covers the current code.
How we check: Audit links come from official pages found for the project, not from a search of the web. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
Code openness weight 15 · 1 not read10/15
- ✓ Met
Public repository
invariant-labs/decimal public, created 2022-02-04, 5 contributor(s) (count only).GitHub ↗api.github.com ↗api.github.com ↗api.github.com ↗ checked 2026-10-20sha256 89645775f411…sha256 dc0fecf63f73… - ✕ Not met
Licence
SPDX: none detected.GitHub ↗api.github.com ↗api.github.com ↗api.github.com ↗ checked 2026-10-20sha256 89645775f411…sha256 dc0fecf63f73…What would show up as met
- Add a standard licence file (for example Apache-2.0 or MIT) that GitHub recognises.
- Custom or source-available terms are shown as partial: we do not judge them.
How we check: We read the licence field GitHub detects. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- ✓ Met
Activity last 90 days
Last push 2026-09-25 (25 d ago), latest across the invariant-labs organisation's non-fork repositories.GitHub ↗api.github.com ↗api.github.com ↗api.github.com ↗ checked 2026-10-20sha256 89645775f411…sha256 dc0fecf63f73… - ⊘ Not read
On-chain program source public
Program ID not found in the submitted repo or the security.txt source_code repo. Source may exist elsewhere — counted as unknown, not as closed. Repos searched (shallow clone, text search for the program ID): https://github.com/https://github.com/invariant-labs (clone failed). Does not prove the deployed binary matches (see the build check). (reason: unreadable)What would show up as met
Nothing for the project to do. Our checker could not read the source this time, so the check is “Not read”: no points are lost. It is tried again at the next run. If you think the data behind it is wrong, send a correction.
Onchain history weight 1010/10
- ✓ Met
Last deploy HyaB3W…
Last deploy 2025-05-29 (509 d ago).Explorer ↗RPC call (getAccountInfo)RPC call (getBlockTime)OtterSec registry ↗ checked 2026-10-20sha256 0e0f5c643592…sha256 9ee3732a8c61… - ○ Not built
Program age / upgrade count HyaB3W…
Full history scan (first deploy, upgrades in 30 d, authority changes) needs an indexer (e.g. Helius); not available on public RPC.Explorer ↗RPC call (getAccountInfo)RPC call (getBlockTime)OtterSec registry ↗ checked 2026-10-20sha256 0e0f5c643592…sha256 9ee3732a8c61… - ✓ Met
Last deploy MJ6WF1…
Last deploy 2022-08-24 (1518 d ago).Explorer ↗RPC call (getAccountInfo)RPC call (getBlockTime)OtterSec registry ↗ checked 2026-10-20sha256 b6c1cd4a6ebe…sha256 8337617dc9c4… - ○ Not built
Program age / upgrade count MJ6WF1…
Full history scan (first deploy, upgrades in 30 d, authority changes) needs an indexer (e.g. Helius); not available on public RPC.Explorer ↗RPC call (getAccountInfo)RPC call (getBlockTime)OtterSec registry ↗ checked 2026-10-20sha256 b6c1cd4a6ebe…sha256 8337617dc9c4…
Team & contact weight 15 · 1 unknown0/15
- ✕ Not met
Security contact (security.txt)
No valid security.txt at /.well-known/security.txt or /security.txt (200).What would show up as met
- Publish a text file at https://your-domain/.well-known/security.txt (or /security.txt) with a
Contact:line, for exampleContact: mailto:security@your-domain. - RFC 9116 also asks for an
Expires:line. We look only forContact:, but addExpires:too so the file stays correct.
How we check: We fetch the two standard locations over HTTPS. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- Publish a text file at https://your-domain/.well-known/security.txt (or /security.txt) with a
- ? Unknown
Bug bounty programme linked
No bug-bounty link found on homepage (raw + rendered), sitemap or security.txt. Not checked deeper (docs sites, Immunefi search) — counted as unknown, not as missing. Also checked: Immunefi public list: no active programme matched; no on-chain security.txt in HyaB3W…; no on-chain security.txt in MJ6WF1….invariant.app ↗invariant.app ↗invariant.app ↗invariant.app ↗ checked 2026-10-20sha256 bf3aeb8e8a46…sha256 bf3aeb8e8a46…What would show up as met
- Link your bug bounty (for example an Immunefi, HackerOne or Cantina page, or a /bug-bounty page of your own) from the homepage, the sitemap or your security.txt.
- “Unknown” here means we found no link. It does not mean you have no programme.
How we check: We look at the homepage links (also as rendered in a browser), sitemap.xml and security.txt, and at Immunefi’s public list for on-chain security.txt names. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- ℹ Status only
Claimed / not claimed
Status only, not scored: claiming proves control of an authority, domain or GitHub organisation and never changes a score. The status is shown in the page header.source: calculated from the other checks checked 2026-10-20 - ○ Not built
Team declared (voluntary, with consent)
Team declaration + consent flow not built — excluded.source: calculated from the other checks checked 2026-10-20 - ℹ Status only
Components declared complete by the project
Status only, not scored (it used to be scored, which made pages that are not claimed systematically lower; removed 2026-10-15). Other programs/packages may exist that were not submitted.source: calculated from the other checks checked 2026-10-20 - ✕ Not met
Program embeds security.txt
0/2 own program(s) embed a solana-security-txt block with contacts.What would show up as met
- Embed a security.txt block in the program with the
solana-security-txtcrate: name, project_url, contacts and policy. Redeploy to publish it. - This also tells us which programs belong to you, and which are shared programs that do not.
How we check: We read the program account on Solana (public RPC). This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- Embed a security.txt block in the program with the
- ✕ Not met
Official program address list
HyaB3W… published on third-party page (https://github.com/invariant-labs/protocol/blob/master/sdk/src/network.ts); MJ6WF1… published on third-party page (https://github.com/invariant-labs/protocol/blob/master/staker-sdk/src/network.ts).What would show up as met
- List your official program addresses on a page of your own domain (for example a docs page called “Addresses”). A list only on GitHub reads as partial, and one only on a third-party page as not met.
How we check: We use the pages the project itself publishes. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
Legal documents weight 10 · 1 unknown10/10
- ✓ Met
Terms & privacy policy present
Terms: https://purl.org/dc/terms/; privacy: https://invariant.app/privacy (homepage links, sitemap.xml, common paths). Content not assessed. - ○ Not built
Registered legal entity
Not stated.source: calculated from the other checks checked 2026-10-20 - ? Unknown
Legal entity named in terms
No legal-entity name (Inc/Ltd/LLC/GmbH/AG/Foundation …) recognised in the terms/privacy text. May be phrased differently — counted as unknown.What would show up as met
- Name the legal entity behind the project in the terms or privacy text, for example “Example Labs Ltd” or “Example Foundation”.
- We do not check a company registry.
How we check: We read the terms and privacy text and look for a company-style name. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
Domain weight 5 · 2 unknown3.8/5
- ✓ Met
HTTPS
https://invariant.app answered HTTP 200 over TLS.invariant.app ↗invariant.app ↗invariant.app ↗invariant.app ↗ checked 2026-10-20sha256 bf3aeb8e8a46…sha256 bf3aeb8e8a46… - ◐ Partial
Security headers
Present: HSTS. Missing: CSP, X-Content-Type-Options, X-Frame-Options.invariant.app ↗invariant.app ↗invariant.app ↗invariant.app ↗ checked 2026-10-20sha256 bf3aeb8e8a46…sha256 bf3aeb8e8a46…What would show up as met
- Send these four response headers on your homepage: Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options and X-Frame-Options.
- The check looks only at whether each header is present, not how strict it is.
How we check: We read the headers of one homepage request. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- ? Unknown
Domain age
Registered 2021-10-06 (~1840 d), source: RDAP (rdap.org). Registrant data ignored. Not credited: the domain is not shown to belong to the submitted components.What would show up as met
- Nothing to configure: a domain registered more than a year ago reads as met, 90 days to a year as partial.
How we check: We read the registration date from the public domain registry (RDAP). This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
- ? Unknown
Domain ↔ components consistency
Linked: GitHub org name matches domain (weak)source: calculated from the other checks checked 2026-10-20What would show up as met
- Publish your official program addresses on your own domain and link your GitHub organisation from the website, so the three can be tied together.
How we check: We compare what the project’s own pages say with the on-chain addresses and the GitHub organisation. This is what the check looks for. It makes no promise about a score or grade, and claiming or paying never changes a score.
Snapshot hash of monitored fields: b38b28df6cffb75c
AI summaries
Generated with Grok 4.7 (xAI), Claude sonnet-5-5 (Anthropic) and GPT-6.1-sol (OpenAI) via their APIs. xAI, Anthropic and OpenAI have not reviewed, approved or sponsored Recheckable. AI-generated text; models see only extracted check results, never project-supplied text or personal names. They do not affect the score. Some text on this site (summaries and reports) is AI-generated and labelled where it appears. Scores and check results come from fixed code, not from AI. Scores are produced automatically from public data and are not reviewed by hand before they are shown; cases that the automatic checks flag are held for a person.
Template summary (deterministic)
Onchain track: band D (35/100, coverage 76 %, onchain v0.2.7). Strongest: Onchain history, Legal documents. Weakest: Contract control, Team & contact. 4 check(s) unknown (each costs 1.5 points); 1 not read (no points lost, lowers coverage); 4 not built yet (excluded).
Regulatory information
The project has not declared any regulated-activity types, so no rules are listed.
Law firms (free listing, alphabetical, no ranking)
- Delphi — Stockholm, Blockchain law (self-described)
- Gernandt & Danielsson — Stockholm, Fintech (self-described)
- Magnusson — Stockholm, Fintech (self-described)
- Mannheimer Swartling — Stockholm, Fintech (own practice page to be confirmed) (self-described)
- Setterwalls — Stockholm, Fintech (self-described)
- Vinge — Stockholm, MiCA (own practice page to be confirmed) (self-described)
Recheckable has no financial relationship with the listed firms and receives no fee per contact. Paid placements, if ever introduced, are marked “Ad” and never shown next to low scores.
Score history
Automated score at each published review, newest on the right. The line steps at the date of a review; between reviews the score is unchanged.
Solid line: offchain track. Dashed line: onchain track. ◆ = the method changed at that review.
◆ 2026-10-18: the scoring method changed from v0.2.3 to v0.2.5. A score change at that point can come from the method and not from the project.
◆ 2026-10-19: the scoring method changed from v0.2.5 to v0.2.6. A score change at that point can come from the method and not from the project.
◆ 2026-10-20: the scoring method changed from v0.2.6 to v0.2.7. A score change at that point can come from the method and not from the project.
Data table
| Review | Track | Score | Grade | Coverage | Method |
|---|---|---|---|---|---|
| 2026-10-17 | offchain | 69/100 | no grade | 58 % | v0.2.3 |
| 2026-10-18 | onchain | 35/100 | D | 76 % | v0.2.5 |
| 2026-10-18 | onchain | 35/100 | D | 76 % | v0.2.5 |
| 2026-10-19 | onchain | 35/100 | D | 76 % | v0.2.6 |
| 2026-10-20 | onchain | 35/100 | D | 76 % | v0.2.6 |
| 2026-10-20 | onchain | 35/100 | D | 76 % | v0.2.7 |
No check changed its result between the published reviews.
History
- 2026-10-20 21:56Forced fresh run (same result; fresh evidence snapshots): onchain D (35, coverage 76 %)
- 2026-10-20 13:04Forced fresh run (same result; fresh evidence snapshots): onchain D (35, coverage 76 %)
- 2026-10-19 12:45Forced fresh run (same result; fresh evidence snapshots): onchain D (35, coverage 76 %)
- 2026-10-18 13:06Forced re-run after renderer fix (Chromium reinstalled): onchain D (35, coverage 76 %)
- 2026-10-17 16:43Nightly re-run: onchain D (35, coverage 76 %)
- 2026-10-16 12:58Initial automatic review (indexed): offchain insufficient data (69, coverage 58 %)
Project's own statements and reply
Does your team control the upgrade authority, official domain or GitHub organisation of this project? Claim this page (free, about a minute; it never changes a score).
For project owners: badge
Status: Active. The badge says “no changes since review”, never “safe”.
Badges are for claimed projects. The embed code is available after the page has been claimed (free, about a minute; claiming never changes the score). Claim this page
Re-checks are rate-limited (once per 10 minutes). Restoring a grey badge requires a full review.