Onboarding
Summary. First run walks you from nothing to a funded, named wallet: create or restore a wallet, confirm your recovery phrase, choose your network privacy, and optionally claim a username, with a prominent skip so you can stay anonymous. Goblin connects to a Grin node automatically, so there’s no node setup to wade through.
Motivation
Goblin’s audience isn’t only Grin veterans. The first-run flow has to teach just enough (a recovery phrase is your money; a username is optional and public) without burying a newcomer in node configuration or nostr jargon. It reuses GRIM’s proven mnemonic machinery so the security-critical parts are the upstream-tested ones.
How it works
The flow (OnboardingContent) steps through:
- Intro: what Goblin is (private, pay-by-username). Goblin connects to a default Grin node automatically, so there’s no node step to wade through; you can change the node later in Settings → Advanced.
- Wallet setup: name + password, or choose restore.
- Recovery phrase: generate (12–24 words) or import. Import supports paste, a SeedQR scan, and (Build 158) a Choose a .backup file picker: point it at a full wallet
.backup, unlock it with the wallet password, and it fills the 24-word grid for you. This step uses GRIM’sMnemonicSetupword grid and validation. - Confirm words: verify the phrase by re-entering it.
- Network privacy: choose whether the wallet’s Nostr traffic rides Tor. The step explains what goes over the network (“Goblin sends only a few things over the network, each sealed with end-to-end encryption so relays can’t read them or link them to you.”) and offers the “Route through Tor” switch, captioned “Hide your IP from relays.” A brand-new wallet defaults this off (clearnet); it applies to this wallet and is changeable later under Settings → Privacy → Tor routing. Wallets that update from an older version keep Tor on and don’t see this step.
- Identity: optionally claim a
username(reusing the name-authority claim flow) or import an existing identity (nsec/ backup). A prominent Skip keeps you anonymous.
On completion the new wallet is opened and its NostrService starts. Restoring from a bare seed phrase gives you a fresh random nostr identity by default; you bring an old one back via Import. Restoring from a full .backup file instead brings every identity it held back automatically once the wallet opens (a “Restoring your identities…” card shows the progress), with the previously active identity re-selected.
Reference
In goblin/src/gui/views/goblin/onboarding.rs:
OnboardingContent+Stepenum. The live flow is Intro → WalletSetup → Words → ConfirmWords → Network privacy → Identity; the legacyNodestep is retired (#[allow(dead_code)]) and the wallet auto-connects to a default public node, with node management in Settings → Advanced. The network-privacy step writes the wallet’s Tor-routing preference (default off for a fresh wallet); updated wallets keep their existing on setting and skip the step.OnbImport: optional identity import (nsec / backup, with password when sealed), async worker result.- Reuses GRIM
MnemonicSetup.word_list_ui(madepub(crate)), with SeedQR scan. - Hosted in
goblin/src/gui/views/wallets/content.rs(replaces only the empty-state branch; the stock GRIM wallet-creation path stays for later wallets).
References
- The identity it sets up: Identity.
- The username it can claim: Name authority.