hackquest logo

Crosssign

CrossSign is a trustless cross-wallet verification layer that proves a user's wallet ownership through live cryptographic signatures and anchors verifications onchain.

Videos

Project image 1
Project image 2
Project image 3

Tech Stack

React
Next
Web3
Ethers
Javascript
Rust
Node

Description

CrossSign ownership proof that doesn't need a bridge.

CrossSign is a cross-wallet verification layer. It lets an application prove that a user controls a wallet by checking a live cryptographic signature on-chain, so the result can be read by anyone instead of being asserted by a private server.

How it works. The user selects a Solana wallet (Phantom, Solflare, Backpack, OKX any Wallet-Standard wallet) over Arbitrum/EVM wallets are used to pay for and submit the on-chain transaction. CrossSign re-reads the wallet's current account, mints a fresh challenge, and binds the chain id, verifier address, wallet public key, a single-use nonce and an expiry into one canonical message. The wallet signs it a message signature, never a transaction, so no funds move and no approvals are granted.

On-chain verification. The signature is submitted to CrossSignVerifier, a Rust contract deployed to Arbitrum Sepolia through Stylus (Rust WASM). It reconstructs the exact canonical message, verifies Ed25519 natively with ed25519-dalek, rejects expired challenges and replayed nonces, then mints a non-transferable badge through CrossSignBadgeRegistry. Arbitrum's Rust VM does natively what the EVM cannot which is why this is built on Stylus.

Security model. Fresh challenge per attempt; expiry enforced in the client and in the contract; nonce burned on first use; the signature is bound to this chain, this contract, this wallet and this nonce. The live account is re-read before signing, so switching wallets mid-flow is detected rather than accepted. The backend issues nonces and formats messages only it never performs or trusts a cryptographic decision.

Stack. Next.js 14 + TypeScript front end, ethers v6 for chain access, Rust/Stylus contracts with 28 unit tests, and a Playwright QA suite covering 67 wallet-state checks. Live: crosssign.vercel.app

Progress During Hackathon

CrossSign was built from scratch during the buildathon and is deployed and working end-to-end today.

Sep 10–15 Foundation. Repository created with the Next.js 14 / TypeScript application and the Rust Stylus contract workspace (verifier + registry). The wallet layer was rebuilt around open standards instead of blind provider access: EIP-6963 discovery for Arbitrum wallets and the Wallet Standard for Solana wallets, which removed hydration mismatches and multi-extension conflicts.

Sep 16 Contracts deployed to Arbitrum. Both contracts were deployed and activated on Arbitrum Sepolia with cargo-stylus (deploy + ProgramActivated events confirmed on Arbiscan): the badge registry at 0x2862cbdc… and the verifier at 0x39db2d89…. Deployment configuration was hardened (key handling, activation checks, deployment record) and the failure/recovery paths of the verification flow were fixed so no stale session or wallet can be reused across attempts.

Sep 17 Hardening + real-wallet fixes. Added generation-keyed in-flight protection (no stale or duplicate attempts), stricter signing-boundary validation (64-byte Ed25519, signature-type checks, live account re-read before signing), and fixed a real-browser issue found with Phantom: the app was calling solana:signMessage using the superseded draft signature while every current Wallet Standard wallet implements the current variadic form. The signing boundary is now convention-aware, so real Phantom signing works while legacy wallets stay supported.

QA + live deployment. tsc typecheck and production build are green; the Playwright wallet-state E2E suite grew from 55 to 67 checks (all passing) and now reproduces both real-browser bugs, failing 6 checks against the pre-fix build. 28 Rust unit tests cover the contract logic, and the JS↔Rust canonical message is checked byte-for-byte by script. The app is live at https://crosssign.vercel.app, connected to the deployed contracts

Fundraising Status

Not raising. CrossSign is a self-funded buildathon project , no external funding, no investors, and no token. Any future funding would be used to harden the contracts (external review, gas benchmarking) and to open the verification API to other applications.

Team Leader
OOluwatimilehin Sotonwa
Project Link
Deploy Ecosystem
Arbitrum OneArbitrum One
Sector
AI