For projects, developers and support teams
A user says their tokens are stuck. Answer it in one paste.
Paste what the user sent you. We'll tell you who can move the funds, your team or the user, and the exact call to make. It only reads the chain: it can never sign or send a transaction. The check needs no account and no payment.
Pause readiness
Who can pause your contract
Before something goes wrong, find out whether your contract can be paused, who holds that power, and how many signatures it takes.
Read-only. No account, no cost.
A check shows what the chain answered when it was read. It is not an audit of the contract.
Alerts when any of these change are on our roadmap for teams. See the roadmap
Signing check
Before you approve a Safe transaction, see what it really does, worked out in this page and not on the wallet screen. The only lookup is the called contract's verified source, to name the function.
Read-only. No account, no cost. We never hold a key.
- Network
- Operation
- Gas and refund fields
Addresses this Safe has paid before, one per line. Used only to spot a look-alike address.
See what users sent to your contract by mistake
Paste a contract you run and we'll list the tokens stuck in it.
Part of the paid plans.
Watch your contract
We'll message you on Telegram or Discord when a user sends tokens to your contract by mistake, often before they open a ticket.
Part of the paid plans.
One contract per watch.
By default we watch all 8 main networks, and you can add the test networks.
You set an alert level for each token, in token amounts: 5 tokens on Ethereum, plus the network's own coin.
No alert doesn't always mean nothing arrived. Every alert says how many tokens and networks were checked.
Put it in your own stack
No key, no account, no call home.
SDK
Run the same diagnosis inside your own support tooling.
import { devmode } from '@sixstar/core'
const r = await devmode.diagnose({ address, chainId })
r.verdict // TEAM | UPGRADEABLE_NO_FN | THE_USER | CUSTODIAN | NO_PATH | …
r.whoCanAct // { role, kind, address?, citation? }
r.upgradeable // { kind, authority } | null
r.abiStatus // VERIFIED_FULL | VERIFIED_PARTIAL | UNVERIFIED | FETCH_FAILED
r.coverage // every read, what answered, what did not
r.remediation // CALL | UPGRADE_PATH | HAND_OVER_ONLY | NONECLI
Same engine, no browser. Exits non-zero when nothing is recoverable.
git clone https://gitlab.com/sixstarlab/sixstar-recovery.git cd sixstar-recovery pnpm install --frozen-lockfile pnpm exec turbo run build --filter=@sixstar/recovery-cli... node apps/recovery-cli/dist/cli.js check <address|tx> --chain <id> # a whole support queue node apps/recovery-cli/dist/cli.js batch tickets.csv --json > out.json
install it from the public repository
Tested with Node 20 and pnpm 9.
Support-docs widget
One line in your help centre.
<script src="/embed.js" data-chain="8453" defer></script>
the only requests it makes are public RPC reads and loading this script
/embed.js publishes with the first release
Talk to us
Questions about setting it up, or think we got a verdict wrong?
- Group
- t.me/sixstarrecoverypublic, for teams, developers and projects
- Anything private
- contact@sixstarlab.comFor anything private, like a data request or a takedown.
An empty table means we found nothing among the tokens we check, not that the contract is empty.