What if you could create a wallet instantly on any dapp, fund it & re-use it anywhere. 👀
SPC wallets are built ontop of Secure Payment Confirmation a web api designed to streamline web2 payments that leverages passkeys to authenticate the user.
We leverage the webauthn-side of the SPC protocol to create passkey wallets that are capable of securely signing transactions on any dapp.
This repo is a simple end-to-end implementation of SPC wallets, complete with passkey wallet contracts, a simple dapp frontend, wallet application & a library that lets you embed these wallets in your dapp.
Below is a demo journey of a user that has never used the wallet provider or the dapp frontend before.
- User clicks to claim but has no account -> dapp shows wallet creation popup
- User inputs a (globally unique to the wallet provider) username
- Counterfactual account is created linked to the public key of the passkey
- User again clicks to claim & is presented with an SPC confirmation modal
- User signs passkey, confirming that they have agreed to the transaction
- dapp check for stored credentials, fails to find any & falls back to showing wallet creation popup
- dapp & wallet provider communicate to ensure the username is available & create a passkey if so
- wallet provider stores the users credentials so they can be relayed to other dapps upon request
- dapp has prepared a
UserOp
representing theClaim Coupon
NFT, creates aPayment Request
to be signed by the passkey on confirmation of the SPC modal - dapp (or wallet) send the signed
UserOp
to a bundler for inclusion.
.
|
├── apps # Examples of implementations for wallets & dapps
│ ├── ...
│ ├── dapp # The dapp frontend responsible for creation & operation of the passkey operations
│ ├── wallet # The wallet provider responsible for registration of passkey credentials
│ └── ...
├── packages
│ ├── ...
│ ├── contracts # Contracts for the Safe 4337-module (V07 bundler) with passkey signers
│ ├── spc-lib # A utility library with functions for communication between the wallet provider and dapp
│ └── ...
└── ...
-
Dapp Frontend -> deployed at https://spc-dapp.web.app
-
Wallet Frontend -> deployed at https://spc-wallet.vercel.app
-
Contracts -> deployed at contracts#deployments