Skip to main content

Changelog

Docs: four-chain support documented

June 2026

Changed

  • Chain support pages now reflect the live set: Ethereum, Arbitrum, Monad, and Sui, running testnet-first (Sepolia, Arbitrum Sepolia, Monad Testnet, Sui testnet). Monad is described as the announcement registry chain. Base and Optimism remain on the roadmap.
  • Crypto domain separators now show their exact labels (SPECTER_VIEW_TAG_V1 for the view tag, SPECTER_STEALTH_TWEAK_V2 for the stealth-address tweak).

@specterpq/sdk v2.0.0

July 2026

Stealth-address derivation now matches the SPECTER backend byte-for-byte. Breaking: the addresses returned by deriveStealthPublic / deriveStealthKeys change, so upgrade to discover and spend real funds.

Fixed

  • The tweak scalar previously used the SPECTER_STEALTH_TWEAK_V1 domain, the bare shared secret, and modular reduction. The backend (which computes the address the sender actually funds) uses SPECTER_STEALTH_TWEAK_V2, hashes shared_secret || counter, and selects the scalar by rejection sampling. The mismatch resolved every payment to an unfunded address. The two implementations are now locked together by a cross-implementation known-answer test. No funds were lost — they sit at the backend-derived addresses and become visible again after upgrade.

@specterpq/sdk v1.0.0

July 2026

Hybrid recipient identity and a hardened HTTP client. Breaking change to the meta-address wire format and the spending-key type.

Changed

  • Recipients now hold a secp256k1 spending keypair plus the ML-KEM-768 viewing keypair. The meta-address wire format is v2 (1,218 bytes: version + 33-byte spending public key + 1,184-byte viewing public key). generateSpecterKeys() returns this hybrid identity.
  • Stealth derivation moved to an ERC-5564-style additive tweak (P = B + t·G, p = b + t mod n). The sender can compute the address but not the private key — fixing a flaw where the sender could reconstruct the recipient's stealth private key.

Security

  • Removed generateKeysRemote() and scanRemote() from the HTTP client, which could transmit secret keys. The client is now public-data only (createStealthPaymentRemote, publishAnnouncement). Generate keys and scan locally.

@specterpq/sdk v0.3.0

June 2026

Announcement metadata can now be encoded and encrypted client-side, matching the hosted backend. Backend synced to upstream 8294c2f.

Added

  • Announcement metadata API: sealAnnouncementMetadata, openAnnouncementMetadata, and the lower-level encodeAnnouncementMetadata, decodeAnnouncementMetadata, encryptAnnouncementMetadata, decryptAnnouncementMetadata.
  • Metadata size constants: PLAINTEXT_METADATA_SIZE (77), ENCRYPTED_METADATA_SIZE (93), METADATA_TX_HASH_SIZE, METADATA_AMOUNT_SIZE, METADATA_SOURCE_CHAIN_ID_SIZE.
  • Error codes: INVALID_METADATA_SIZE, INVALID_METADATA_FIELD, METADATA_DECRYPTION_FAILED.

Changed

  • Metadata txHash and amount inputs accept plain 0x hex strings (in addition to Uint8Array, and bigint for amount).

@specterpq/sdk v0.2.0

June 2026

The TypeScript SDK reaches the same protocol as the hosted API, with all cryptography running locally in WebAssembly. See the SDK section.

Added

  • ML-KEM-768 key generation, encapsulation, and decapsulation in browser and Node WebAssembly builds.
  • High-level flow: createStealthPayment and scanAnnouncement / scanAnnouncements.
  • Meta-address build and parse: metaAddressFromPublicKeys, parseMetaAddress.
  • Stealth derivation for Ethereum and Sui: deriveStealthAddress, deriveStealthSuiAddress, deriveStealthKeys.
  • View tag helpers: computeViewTag, verifyViewTag.
  • Opt-in trusted HTTP client: createSpecterApiClient.
  • Exported size constants and a typed SpecterSdkError with stable error codes.

Security

  • Secret-bearing fields (secretKey, sharedSecret, ethPrivateKey) are non-enumerable and redacted from JSON and console output.
  • Local crypto helpers make no network calls. Network access is limited to the trusted client you construct.

v0.1.0 - Initial Release

March 2026

The first public release of SPECTER, a post-quantum stealth address protocol for Ethereum and Sui.

Core

  • ML-KEM-768 key generation, encapsulation, and decapsulation
  • Stealth address derivation for Ethereum and Sui from one secp256k1 key (keccak256 for Ethereum, blake2b-256 with the secp256k1 scheme flag for Sui)
  • View tag computation and verification (1-byte, ~99.6% filter rate)
  • SHAKE-256 key derivation with domain separation
  • Batch scanning engine with progress callbacks
  • In-memory and Turso (libSQL) announcement registry backends
  • Lock-free concurrent caching

API

  • REST API server (Axum)
  • Key generation, stealth create, stealth scan, announcement registry
  • ENS and SuiNS name resolution
  • IPFS meta-address upload/fetch via Pinata
  • Rate limiting, CORS, security headers, API key auth

Frontend

  • React + TypeScript web application
  • Generate keys, send payments, scan payments
  • Encrypted browser vault for key storage (AES-GCM)
  • Wallet integration (Ethereum + Sui)

Infrastructure

  • Docker multi-stage builds
  • Google Cloud Run deployment with auto-scaling
  • GitHub Actions CI (fmt, clippy, test)
  • 195 tests across all crates

Note

For detailed commit history, see the GitHub repository.