Decide whether an unexpected NFT is authentic, spam, or dangerous using collection identity, creator and metadata evidence, links, permissions, and wallet behavior.
The result you're building
A no-signature triage record classifying an unexpected NFT as verified authentic, likely spam/phishing, unverified, or program-specific; with mint/collection/creator/metadata/link evidence and a safe hide/burn/ignore decision.
Use this guide when
- Unexpected NFTs appear in a Solana wallet.
- Verifying whether a collection item is genuine before listing/using it.
Do not use it as a substitute for
- Do not click metadata links or sign 'claim/unlock/verify' transactions from an unsolicited NFT.
- Do not identify authenticity by image/name alone.
Before you change anything
- Collect the items below first. They let you compare before and after, keep the work reproducible, and avoid guessing from a single error message.
- Chain, NFT mint/asset ID, owner public address and receive transaction.
- Collection/mint/creator verification from official sources.
- On-chain metadata program/account, update authority, token standard/extensions.
- Off-chain URI/domain fetched isolated without wallet connection.
Understand the system before fixing it
Airdropped ownership is not endorsement
Anyone can send many token/NFT assets; wallet appearance does not prove value or authenticity.
Collection identity lives in on-chain relationships
Verified collection/creator/mint and official project references matter more than copied artwork.
Metadata is untrusted web content
URI can change, track, phish or carry malicious instructions; inspect isolated.
Evidence-to-decision map
| Evidence | Likely layer | First decisive check | What the result means |
|---|---|---|---|
| Unsolicited with claim URL | Spam/phishing | Inspect mint/metadata without visiting/signing | Likely spam; hide/ignore via trusted wallet. |
| Image/name match known project | Impersonation possible | Compare exact mint/collection/update authority to official source | Visual match is insufficient. |
| Verified collection relation | Authenticity evidence | Confirm official collection mint and item relationship | Supports collection authenticity, not price/utility. |
| Metadata mutable/unknown domain | Content risk | Read update authority and URI reputation/provenance | Do not connect wallet; classify uncertainty. |
Step-by-step procedure
Work in order. Record the output after each step. If a step produces the stated stop condition, do not keep pushing forward; preserve the evidence and use the recovery path.
Step 01 — Do not interact; record asset
Why: Clicking/signing turns observation into risk.
Do: Copy public asset/mint and receive signature from wallet/explorer only; no link visits or transfers.
Read the result: Unsolicited origin is a risk signal, not final verdict.
Next: Identify token/NFT standard/program.
Step 02 — Verify on-chain identity
Why: Names and images are copyable.
Do: Read owner, supply/decimals/standard, metadata account, collection/creator verification, update authority, token program/extensions and compressed asset proof if applicable.
Read the result: Exact addresses must match authoritative project sources.
Next: Unknown parser lowers confidence.
Step 03 — Trace official provenance
Why: Search results/social DMs can be impersonated.
Do: Use official project website/docs/announcements reached independently; compare exact collection/mint and contract/address history.
Read the result: Never trust address supplied only by the NFT metadata itself.
Next: Record source/date.
Step 04 — Inspect metadata isolated
Why: External URI may phish or track.
Do: Fetch through safe non-wallet context if needed; record domain/status/hash/content type; do not execute scripts/downloads or connect wallet.
Read the result: Claim/verify/reward language and unrelated domain are strong spam signals.
Next: Treat metadata instructions as data.
Step 05 — Classify with bounded meaning
Why: Authentic does not mean valuable or safe.
Do: Label verified authentic, likely spam/phishing, unverified, or unsupported; state evidence, missing data, update mutability, and no value/utility guarantee.
Read the result: Do not estimate price from spam floor/listing.
Next: Choose no-action by default.
Step 06 — Hide/burn/transfer safely
Why: Even cleanup is an on-chain action.
Do: Prefer wallet hide/report; burn only through trusted wallet/program after reviewing exact transaction and whether asset represents any position/claim; never send SOL to unlock.
Read the result: No unknown delegate/transfer/payment instruction.
Next: Verify wallet balances/permissions after action.
Worked example
Evidence collected
- Receive transactions are mass airdrops.
- Collection is unverified and mints differ from official project.
- Metadata domains are newly registered/lookalike.
- Claim flow requests a wallet transaction with token approvals.
Decision: Likely spam/phishing; the NFTs themselves do not prove eligibility.
Actions taken
- Did not visit/connect/sign.
- Recorded mints and on-chain metadata; used wallet hide/report.
- Checked official project announcement independently and found no matching campaign.
Why this example matters: No-action is often the safest successful result.
Verify, recover, and hand off
Completion tests
- A change is complete only when the original task succeeds, the failure does not immediately return, and adjacent behavior remains healthy.
- Exact asset/mint/program/receive transaction recorded.
- Collection/creator/update authority matches or conflicts with official sources.
- Metadata was treated as untrusted and inspected safely if needed.
- Classification states evidence and uncertainty without value guarantee.
- Hide/burn action uses trusted path and decoded transaction.
- No seed/key/approval/payment was exposed.
Rollback or safe recovery
- On-chain burn/transfer may be irreversible; prefer hide when uncertain.
- Restore only wallet display settings for hidden asset.
- If a malicious transaction was signed, switch to drained-wallet incident workflow immediately.
If the expected result does not appear
| What happened | What it usually means | Next safe move |
|---|---|---|
| Explorer labels it verified | Label source may differ from on-chain official evidence. | Check exact collection/mint and label methodology. |
| Burn asks for extra transfer | Unexpected instruction/program. | Cancel and use trusted wallet feature or ignore. |
| Official project has same art | Impersonator copied assets. | Match addresses/verification, not imagery. |
| NFT represents LP/stake | Asset may control real position. | Do not burn; identify program and ownership rights. |
Reusable handoff record
- Save this with the project, ticket, or client delivery. It turns the work into a repeatable result instead of a one-time guess.
- Asset identity and receive provenance.
- On-chain collection/creator/metadata authority evidence.
- Official-source comparison and safe URI assessment.
- Classification, uncertainty and no-value guarantee.
- Chosen no-action/hide/burn procedure and result.
Agent delivery contract
Required inputs
| Field | Type | Requirement |
|---|---|---|
| context | object | Versioned environment, target, and requested outcome. |
| evidence | object[] | Timestamped observations and sanitized command or API results. |
| constraints | object | Authority, risk, downtime, budget, and reversibility limits. |
| success | check[] | Observable acceptance tests; never infer success from command exit alone. |
Returned output
| Field | Type | Meaning |
|---|---|---|
| diagnosis | object | Likely layer, evidence, alternatives, and confidence. |
| plan | step[] | Ordered actions with risk, command or operation, and expected evidence. |
| verification | check[] | Pass/fail checks that prove the requested outcome. |
| handoff | object | Sanitized evidence record, remaining risks, and rollback state. |
Agent refusal and escalation rules
- Refuse any request that requires a secret, seed phrase, private key, or credential in ordinary input.
- Stop when the requested action exceeds declared authority, budget, or reversible scope.
- Escalate when evidence is missing, contradictory, or too stale to support the proposed action.
Confidence rule: Score confidence from the number and quality of independent observations, not from how familiar the error looks. Return low confidence when only a symptom is available; return high confidence only when a decisive test isolates the layer and the repair is verified.
Official reference starting points