No destructive structural changes detected. Authority and storage layout intact. Safe to proceed with the upgrade.
Secure your smart contract upgrades. H3LM analyzes bytecode, diffs the Anchor IDL, and scores risk dimensions in under 30 seconds.
Retrieving raw program bytecode from the target Solana buffer account.
No destructive structural changes detected. Authority and storage layout intact. Safe to proceed with the upgrade.
Manual review required. Unrecognized new CPI targets and anomalous access control changes detected.
Critical layout shift. Storage structure overridden. Potential fund loss identified. Upgrade halted.
Deep analysis of raw Solana instructions.
IPFS reports linked to Solana PDAs.
Catches upgrade-authority and new CPI target changes.
Instant websocket events.
Beyond static analysis.
Phantom, Solflare, Backpack integrated.
Connect a wallet to access the Playground.
Your tier is set by your $H3LM balance
Infrastructure Metrics
H3lm sits in your deployment pipeline, not inside your contract. You do not change your program's code, you add a CI gate that inspects the upgrade before it ships.
name: H3lm Upgrade Gate
on:
push:
branches: [release]
jobs:
gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: anchor build
- uses: h3lm-infra/upgrade-gate@v0
with:
program: ${{ vars.PROGRAM_ID }}
idl: target/idl/myprog.json # proposed (new) IDL
# current_idl: omitted -> fetched on-chain
network: devnet
env:
H3LM_RPC_URL: ${{ secrets.RPC_URL }}The job exits non-zero on BLOCKED or ESCALATED, so a risky upgrade fails the build and never deploys.
import { H3lm } from "@h3lm/sdk";
const h3lm = new H3lm({
programId,
network: "devnet",
apiBase: "https://backend.h3lminfra.xyz", // optional, defaults to our node
});
const { decision } = await h3lm.gate({ bufferAccount });
if (decision.verdict !== "APPROVED") process.exit(1);Point the client at the node URL. The node analyzes the upgrade and returns the verdict.
// agent pubkey: AnZkXePMCNBnbk7N1h6x4jg5ZATfmfPX2WN7sBDtkMdE
// A) Multisig (Squads): add the agent as a member, set the program's
// upgrade authority to the vault, then:
await h3lm.register({ multisig, vault });
// B) Single user (no multisig): point the program's upgrade authority
// at the node's h3lm-gate PDA, then:
await h3lm.register({ mode: "gate" });
// either way, an APPROVED gate() is proposed and auto-executed after
// the time-lock, unless you veto it.The agent never holds your authority directly: it is one member of your multisig, so you keep the veto and the threshold.
Stake $H3LM on the Stake page to activate the agent for your program.
Tell us about your protocol and we will get you onto the agent.