Setup
Unified scan
Filter custom announcement rows
If you have indexer JSON instead of adapters:Cross-chain only
Balances
Per-output native balances (multichain):Sweep
Sweep tokens
Passtoken to sweep the full ERC-20 / SPL balance instead of the native asset. On
Ethereum the stealth address must hold native gas (see gasDrop on the send, or use the
gasless sweep below); on Solana set closeAccount to reclaim the token-account rent.
Gasless token sweep
When the stealth address holds a token but no native gas, build a relayer-submittable sweep. The stealth key authorizes it offline; a relayer pays the gas and takesfee in the
token (spec/relayer-market.md §9).
feePayer; the returned transaction is partially signed by
the stealth key, and the relayer co-signs as fee payer:
Manual key reconstruction
When you need custom signing logic instead ofsweep:
PrivateKeyAccount from the bytes and sign a transfer from output.stealthAddress.
PSR trait discovery
Fetch native announcement rows for the chain and scan V2 attestation markers:DiscoveredTrait includes the shared fields (attestationId, stealthAddress, txHash,
blockNumber, discoveredAt, ephemeralPubkey) plus V2 fields (schemaId,
schemaName, issuer, attestationUid, dataHex, nonce, merkleLeafPreimage,
isValid, issuerAuthorized). getStealthSignerPrivateKeyForReputationTrait needs the
ephemeralPubkey field returned by the scanner.
Use discoverTraits(rows) or its alias getReputationTraitsFromAnnouncements(rows) only
for legacy V1 0xA7 markers. New attestations created by issueAttestation use V2.
Low-level witness JSON for custom prover flows: