1
0
forked from GRIN/grim

docs: drop the Cash App comparison; remove avatar mentions from the README

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.
This commit is contained in:
2ro
2026-06-16 01:03:05 -04:00
parent 9dba2163fa
commit 7eb0683646
6 changed files with 11 additions and 11 deletions
+3 -3
View File
@@ -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).
+1 -1
View File
@@ -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<ThemeKind>);
+3 -3
View File
@@ -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.
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -50,7 +50,7 @@ pub struct WalletContent {
/// Send request creation [`Modal`] content.
send_content: Option<SendRequestContent>,
/// 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()
+1 -1
View File
@@ -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,