From 7eb06836460844b6e97cf156f3536a2b6ae5caba Mon Sep 17 00:00:00 2001 From: 2ro <17595647+2ro@users.noreply.github.com> Date: Tue, 16 Jun 2026 01:03:05 -0400 Subject: [PATCH] docs: drop the Cash App comparison; remove avatar mentions from the README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rephrase the README as 'pay-by-username' and scrub the Cash App name from code comments. Also drop the leftover 'hosted avatar'/'avatars' wording — identities use generated identicons, not uploaded pictures. --- README.md | 6 +++--- src/gui/theme.rs | 2 +- src/gui/views/goblin/mod.rs | 6 +++--- src/gui/views/goblin/widgets.rs | 2 +- src/gui/views/wallets/wallet/content.rs | 4 ++-- src/nostr/config.rs | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3dc5d311..12533dec 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # Goblin -Goblin is a private, Cash App-style wallet for [GRIN ツ](https://grin.mw) — confidential digital cash on [Mimblewimble](https://github.com/mimblewimble/grin), with no amounts or addresses on the chain. +Goblin is a private, pay-by-username wallet for [GRIN ツ](https://grin.mw) — confidential digital cash on [Mimblewimble](https://github.com/mimblewimble/grin), with no amounts or addresses on the chain. Instead of passing slatepack files back and forth, you **pay a `username` (or an `npub`)** and the payment is delivered for you as an **end-to-end encrypted message over [nostr](https://github.com/nostr-protocol/nips), routed through the [Nym mixnet](https://nym.com)**. Relays only ever see ciphertext — never the amount, the sender, or the recipient — and the mixnet hides who is talking to whom at the network layer. @@ -14,8 +14,8 @@ Goblin is a fork of the **Grim** egui GRIN wallet: it keeps Grim's full GRIN nod - **Send to people** — pay a `username` or `npub`; the GRIN slatepack travels as a [NIP-17](https://nips.nostr.com/17) gift-wrapped DM ([kind 1059](https://nostrbook.dev/kinds/1059)) over the Nym mixnet and is applied automatically by the recipient's wallet. No files to swap, no need to both be online at once. - **Manual slatepacks too** — when you need to pay or get paid without a handle, **Settings → Wallet → Slatepacks** exposes the classic by-hand flow: create a slatepack to send, or paste one to receive, finalize, or pay. -- **In-app identity** — a nostr payment key that is deliberately *not* part of your seed, so you can rotate it any time to stay unlinkable without touching your funds. An optional human-readable `name` (and hosted avatar) comes from the goblin.st identity service. -- **Private by construction** — GRIN's address-less, confidential chain; your payments and identity (nostr relays, NIP-05 lookups, price, avatars) are routed through the [Nym mixnet](https://nym.com), so who-pays-whom never touches the clear net. The GRIN node connection — block sync and broadcasting your transaction — is direct: public chain data, the same for everyone, and not tied to your identity. Keys, names and history stay on your device. +- **In-app identity** — a nostr payment key that is deliberately *not* part of your seed, so you can rotate it any time to stay unlinkable without touching your funds. An optional human-readable `name` comes from the goblin.st identity service. +- **Private by construction** — GRIN's address-less, confidential chain; your payments and identity (nostr relays, NIP-05 lookups, price) are routed through the [Nym mixnet](https://nym.com), so who-pays-whom never touches the clear net. The GRIN node connection — block sync and broadcasting your transaction — is direct: public chain data, the same for everyone, and not tied to your identity. Keys, names and history stay on your device. - **Configurable amount pairing** — show balances against a world currency, Bitcoin, or sats (rates fetched over the mixnet), or turn the preview off. - **Cross-platform** — Linux, macOS, Windows, Android, built in pure Rust on [egui](https://github.com/emilk/egui). diff --git a/src/gui/theme.rs b/src/gui/theme.rs index f46a4127..fa00a8da 100644 --- a/src/gui/theme.rs +++ b/src/gui/theme.rs @@ -194,7 +194,7 @@ thread_local! { /// RAII guard that forces [`kind`]/[`tokens`] to a specific theme for its /// lifetime, restoring the previous value on drop (panic-safe). Used to paint /// one surface — the Pay tab — in the yellow theme regardless of the user's -/// chosen theme, à la Cash App's brand-colored pay screen. +/// chosen theme, à la a modern pay app's brand-colored pay screen. #[must_use = "the override only lasts while the guard is alive"] pub struct ScopedTheme(Option); diff --git a/src/gui/views/goblin/mod.rs b/src/gui/views/goblin/mod.rs index 354fb470..2a61412d 100644 --- a/src/gui/views/goblin/mod.rs +++ b/src/gui/views/goblin/mod.rs @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -//! The Goblin Cash App-style wallet surface for an open wallet. +//! The Goblin payment-app-style wallet surface for an open wallet. pub mod avatars; pub mod data; @@ -548,7 +548,7 @@ impl GoblinWalletView { } None => { // Center Pay action: accent ツ puck off the Pay surface; a - // chromeless dark ツ on it (Cash App style). + // chromeless dark ツ on it (payment-app style). if !pay { let grow = if active || resp.hovered() { 1.0 } else { 0.0 }; ui.painter().circle_filled( @@ -1733,7 +1733,7 @@ impl GoblinWalletView { ); ui.add_space(12.0); - // Recent contacts strip (Cash App-style row above the feed). + // Recent contacts strip (payment-app-style row above the feed). self.peers_strip_ui(ui, wallet, "goblin_peers_activity"); // Pending payment requests pinned on top. diff --git a/src/gui/views/goblin/widgets.rs b/src/gui/views/goblin/widgets.rs index 6dd8e5ec..b90682ac 100644 --- a/src/gui/views/goblin/widgets.rs +++ b/src/gui/views/goblin/widgets.rs @@ -775,7 +775,7 @@ pub fn numpad( let gap = 14.0; // Center a fixed-width pad so the three columns line up directly under // the centered amount above, on any width. Wider than before to give the - // columns more breathing room (Cash App-style). + // columns more breathing room (payment-app-style). let pad_w = ui.available_width().min(332.0); let key_w = (pad_w - 2.0 * gap) / 3.0; let side = ((ui.available_width() - pad_w) / 2.0).max(0.0); diff --git a/src/gui/views/wallets/wallet/content.rs b/src/gui/views/wallets/wallet/content.rs index c5f45dfd..58d51201 100644 --- a/src/gui/views/wallets/wallet/content.rs +++ b/src/gui/views/wallets/wallet/content.rs @@ -50,7 +50,7 @@ pub struct WalletContent { /// Send request creation [`Modal`] content. send_content: Option, - /// Goblin Cash App-style surface (primary UI). + /// Goblin payment-app-style surface (primary UI). goblin: crate::gui::views::goblin::GoblinWalletView, } @@ -84,7 +84,7 @@ impl WalletContentContainer for WalletContent { fn container_ui(&mut self, ui: &mut egui::Ui, wallet: &Wallet, cb: &dyn PlatformCallbacks) { // Goblin surface is the primary UI. Show a sync screen until data is - // ready, then hand the whole surface to the Cash App-style view. + // ready, then hand the whole surface to the payment-app-style view. let block_nav_goblin = self.block_navigation_on_sync(wallet); if block_nav_goblin || wallet.get_data().is_none() { egui::CentralPanel::default() diff --git a/src/nostr/config.rs b/src/nostr/config.rs index b8cb2c97..959fc5d4 100644 --- a/src/nostr/config.rs +++ b/src/nostr/config.rs @@ -23,7 +23,7 @@ use crate::nostr::relays::{DEFAULT_NIP05_SERVER, DEFAULT_RELAYS}; /// Policy for accepting incoming payments (Standard1 slates). #[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Debug)] pub enum AcceptPolicy { - /// Accept payments from anyone automatically (default, Cash App feel). + /// Accept payments from anyone automatically (default, instant-pay feel). Everyone, /// Auto-accept contacts, surface unknown senders for approval. Contacts,