Add SNIP draft: Pluggable Signer Interface for Smart Accounts#175
Open
haycarlitos wants to merge 1 commit into
Open
Add SNIP draft: Pluggable Signer Interface for Smart Accounts#175haycarlitos wants to merge 1 commit into
haycarlitos wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a Draft SNIP defining a curve-agnostic
ISignertrait, a canonical kind-tag registry, and a tagged signature envelope so that one Starknet smart-account class can verify signatures from Phantom (Ed25519), MetaMask (secp256k1 / EIP-191 / EIP-712), passkeys (WebAuthn P-256), hardware wallets (P-256), OAuth providers (JWT-ES256), email (DKIM-RSA), validator keys (BLS12-381), and native STARK wallets — without forking the account contract per curve.Motivation
Every Starknet account that ships a non-STARK signer today forks a reference implementation and writes curve-specific validation inline, so no two account classes interoperate. The April 2026 security review of the Shhh wallet (report) found three issues (H-2 SRC-5 interface mismatch, M-1 caller-sentinel ambiguity, I-1 custom calls-hash) that all traced to the same root cause: there is no standard way for an account to declare which curve its owner uses. This SNIP is that standard.
It is the authentication-layer companion to the Session Keys SNIP (PR #163, co-authored by @omarespejel), which standardizes authorization. Session keys answer "what may this delegated key do?"; this SNIP answers "which curve is the owner on, and how is it verified?" The two compose into a complete modular-account stack.
What's in the SNIP
ISignertrait (verify/kind/validate_pubkey).[kind_tag, payload...]so paymasters dispatch without off-chain negotiation.poseidon(primary_kind, owner_commitment)to prevent cross-kind collisions.Non-normative exclusions: TOTP, SMS, passwords — documented as authentication methods that need a ZK envelope to become signers.
Reference implementation
haycarlitos/shhh-wallet-cairoat tagv8.4(commit3975532), the V8.4ShhhAccountdeclared on Starknet mainnet 2026-05-15:library_call_syscall.docs/class-hashes.md.Linked discussion
Note on file name and number
SNIPS/snip-x.mdis already occupied by the pending Session Keys SNIP, so this draft is filed asSNIPS/snip-pluggable-signer.mdwithsnip: Xin the preamble, pending an editor-assigned number (generally the PR number per SNIP-1). Happy to rename tosnip-NNN.mdon assignment.Authors
Status
Draft — open to community review. Not finalized until the reference implementation completes an independent external audit.