Docs · Getting started▾
Use Winternitz

Getting started

There are three ways to use Winternitz: the web wallet, the Chrome extension, and the command-line tool. All three use the same account model, and the same seed opens the same account everywhere.

Testnet only

Winternitz runs on Robinhood Chain Testnet by default. Get free test ETH and Stock Tokens from the Robinhood Chain faucet. Never send real funds to this prototype.

Before you start: the network#

Robinhood Chain Testnet
Chain ID46630
Public RPChttps://rpc.testnet.chain.robinhood.com
Explorerexplorer.testnet.chain.robinhood.com
Faucetfaucet.testnet.chain.robinhood.com

Option 1: Web wallet#

Open the wallet

Go to /wallet, choose a password and select Create wallet. A seed is generated in your browser, encrypted with your password, and your address appears immediately.

Write down your recovery phrase

Your seed is shown once as 24 words when you create the wallet; you can reveal it again under Recovery phrase in the Security tab, with your password. Store it offline: anyone with the phrase controls the account.

Fund your address

Use Receive to copy the address or scan the QR code, then request test ETH from the faucet.

Send

Choose Send, enter a recipient and amount, and confirm. The first send also deploys your account. Every send uses the next one-time key.

The web wallet encrypts your seed with the password you choose (PBKDF2 and AES-256-GCM) before storing it in the browser. After a reload, or 15 minutes without activity, it locks and asks for the password again. Wallets created before encryption existed are asked to set a password the next time they are opened. Your password cannot recover the wallet; only the seed can.

Option 2: Chrome extension#

The extension works like MetaMask: a popup or a side panel, password-protected, and connectable from dApps. See Chrome extension for installation and details.

Option 3: Command line#

Requirements: Node.js 24+ (it runs TypeScript directly) and a clone of the repository.

npm install

npm run wallet -- init                    # create a wallet and show its 24-word recovery phrase
npm run wallet -- init --import "word1 … word24"   # or restore one
npm run wallet -- address                 # fund this address from the faucet
npm run wallet -- status                  # key index, balance, pending operations
npm run wallet -- send 0xRecipient 0.001  # sends with the next one-time key
npm run wallet -- send 0xRecipient 1 --token 0xC9f9c86933092BbbfFF3CCb4b105A4A94bf3Bd4E   # 1 TSLA
npm run wallet -- history                 # KeyRotated events from the chain

To send, the CLI needs a way to reach the network: either an ERC-4337 bundler (ROBINHOOD_TESTNET_BUNDLER_URL, for example Alchemy) or a funded relayer account (RELAYER_PRIVATE_KEY) that submits the operation itself. Put them in a .env file at the repository root; .env.example lists every option.

Contracts not deployed yet?

Until the Winternitz factory is deployed on a network, you can still create a wallet and receive funds: your address is final. Sending opens as soon as the contracts are live. The deployment guide explains how.

If something goes wrong#

"Key #n has an unconfirmed operation." A transaction was signed but has not landed yet. Signing something new with the same key would weaken it, so the wallet only lets you re-send the same operation unchanged (winternitz resend, or the button in the wallet).

"Winternitz is not deployed on this network yet." The factory contract isn't on this chain. Receiving works; sending waits for deployment.

"No relay configured." Add a bundler URL or a relayer key (extension: Settings; CLI: .env).