Starknet support is live on Starknet Sepolia (testnet). Native scanning,
stealth sends, sweeps, and PSR proof verification work end to end today; the
cross-chain UAB relay, ONS mirroring, and reference-app UI for Starknet are
still in progress. See the integration design.
How custody works
A Starknet stealth address is the counterfactual account address of a pinnedStealthAccount class (OpenZeppelin’s audited EthAccountComponent) whose sole
signer is the one-time secp256k1 key P_stealth. The sender computes this
address from the recipient’s meta-address and the announcement — no interaction —
and only the recipient can reconstruct the matching private key to spend.
The account does not need to be deployed to receive funds: an ERC-20 balance is
state in the token contract, so tokens wait at the counterfactual address until
the recipient deploys the account and sweeps.
The Opaque-assigned chain id for Starknet is 0x534e (“SN”); it is distinct
from the Wormhole ids used for Ethereum (2) and Solana (1).
Scan
getBalancesForOutputs, which reads STRK via balance_of and works for
undeployed accounts:
Send
buildStarknetStealthSend returns the unsigned calls to broadcast from a
Starknet wallet: an ERC-20 transfer to the stealth address, then the
announce. Signing and broadcasting stay with the app’s Starknet wallet (as on
Solana), so no Starknet signer is needed in the client config.
Sweep
The recipient reconstructs the one-time key that owns the stealth account and receives thedeploy_account parameters plus the transfer-out call.
Broadcasting uses an Eth signer (secp256k1); the account funds its own deploy
fee from its balance.
Programmable Stealth Reputation
The full PSR stack runs on Starknet: a Garaga-generated Groth16-BN254 verifier and theOpaqueReputationVerifierV2 wrapper (admin roots, nullifier set,
schema-liveness binding) are deployed on Sepolia, verifying proofs from the same
trusted setup as Ethereum and Solana. See Deployments
for addresses and PSR for the model.
Credential-gated actions
PsrGate is the reference consumer: an allowlist an actor may enter only by
proving, in zero knowledge, a valid attestation under a required schema, with
the proof’s nullifier consumed once so the same credential cannot enter the same
scope twice. It is the general form of “is this actor eligible?” — the gate a
STRK20 anonymizer or DeFi action points at so only credentialed stealth
identities transact, without revealing who they are.