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:
@@ -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
@@ -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>);
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user