Web Wallet: Web2 Simplicity with self-custody

Web Wallet, developed by Argent (documentation), is a tool that uses the full power and capacity of Account Abstraction. It's a self-custodial, browser-based wallet that simplifies blockchain interactions. Unlike traditional wallets that often involve seed phrases and wallet downloads, Web Wallet utilizes a simple email and password setup. This approach blends the ease of web2 interfaces with the advanced capabilities of web3, making Starknet more accessible and user-friendly.

Key Features:

  • Simplified Seed Phrases: Web Wallet eliminates the need for seed phrases. Access your wallet easily using your email and password. Accounts are easily recoverable if lost.
  • No Downloads Needed: Access Starknet directly from your browser using your email. No need to download an application or extension to create a wallet.
  • Multi-Device Support: Web Wallet can be used across various devices seamlessly, like any standard web2 application.

dApps Integration Guide

To integrate Web Wallet in a dApp, start by installing starknetkit:

yarn add starknetkit

Import necessary methods such as connect and disconnect:

import { connect, disconnect } from "starknetkit";

Create a wallet connection using the connect method:

const connection = await connect({ webWalletUrl: "https://web.argent.xyz" });

Below is an example function that establishes a connection, then sets the connection, provider, and address states:

const connectWallet = async () => {
  const connection = await connect({ webWalletUrl: "https://web.argent.xyz" });

  if (connection && connection.isConnected) {
    setConnection(connection);
    setProvider(connection.account);
    setAddress(connection.selectedAddress);
  }
};

NOTE: Web Wallet is currently available only on the mainnet. For testnet access, contact the Argent team.

Transaction Signing Process

Signing transactions with Web Wallet follows a process akin to the Argent X browser extension:

const tx = await connection.account.execute({
  //let's assume this is an erc20 contract
  contractAddress: "0x...",
  selector: "transfer",
  calldata: [
    "0x...",
    // ...
  ],
});

Users will see a transaction confirmation request. Upon approval, the dApp receives a transaction hash:

webwalllet signing page

If the user's wallet is already funded it will ask the user to confirm the transaction. The dapp will get feedback if the user has confirmed or rejected the transaction request. If confirmed, the dapp will get a transaction hash.

Addressing Unfunded Wallets

When users lack funds, they are guided through simple "Add Funds" steps. This includes access to on-ramps for easy funding. The process is streamlined with minimal KYC requirements, ensuring a user-friendly experience. Once complete, the wallet is funded and prepared for deployment.

Preparing for First Transaction

Once the wallet is funded, it's set for the initial transaction. Wallet deployment occurs simultaneously with this first transaction, typically unnoticed by the user. It's important to note that a wallet may be connected but not yet deployed.