Grim - cross-platform GUI for Grin

I see there is something wrong with data from peers, like Segment error , after this any data is getting declined and capacity overflow at peer read (happened to me long time ago).

there is no log config at GUI, can be added later.

1 Like

I uploaded new logs with level=trace, maybe useful to you https://filebin.net/c98gbt64q5nx9afb

Thanks

1 Like

I’m testing the some prune nodes and archive nodes at same time (different public IPs) , same data center region.

I observed that the archive node is generating a lot of snapshots while download blocks still in progress, is it logic that archive node creates snapshot when the sync has not finished completely?

In the mean time, I also see several prune nodes have difficulty of PIBD sync, is there a relation with those snapshots of the syncing archive node?

1 Like

Interesting catch. No, the node should not create any snapshots untill it is synced. So you detected a spam vector. I think you should turn this into a GitGub issue.

1 Like

Yes. I noticed this too, they are coming from attachement message, not sure if bug or feature yet :slight_smile:

This was discussed at our development channel while ago (November 2025), Telegram: View @grindevelopment

Release 0.3.0 is here!

Common changes:

  • Wallet GUI simplification
  • Integrated Webtunnel Tor support
  • Payment proofs
  • Updates checker
  • Bugfixes

Links:

7 Likes

as suggested in github, it’s great if grim allows to run mainnet/testnet in parallel in same machine, we can take advantage of extend the testnet nodes in the network.

Unlikely will do this for now, it will require changes in Rust grin node since chain type is global:

You can run testnet from grin cli using docker compose:
services:
grin_test:
image: ghcr.io/mimblewimble/grin:latest
restart: unless-stopped
container_name: grin_test
ports:
- "13413:13413"
- "13414:13414"
volumes:
- .:/root/.grin
command: ["–testnet", "server", "run"]

The thing I want to add is ability to deploy and control node at server from the app using ssh.

3 Likes

Grim 0.3.2 released :hammer_and_wrench:

  • Multiple bridges connections for Tor
  • Share/scan node connection QR code
  • Fix Android text input on some devices
  • Clickable list items for better usability on mobile
  • Transactions deletion from database
  • Logging to file (~/.grim/grim.log)
6 Likes

Nice update. (text must be 20 characters or more)

Grim 0.3.3 release :hammer_and_wrench:

  • Fix PIBD sync stuck
  • Node peers optimization
  • Fix connection with multiline Tor bridges
  • Fix fonts rendering (Use Glow renderer by default)
  • Do not send over Tor when service not launched (thx @bruges to catch this)

Please report bugs if you will catch them here or at:

4 Likes

Grim 0.3.4 release :hammer_and_wrench:

  • Fix transactions selection (thx to @bruges to catch this)
  • Save last scanned block info to not scan from the beginning after interruption
  • Update Tor Arti 0.41
  • Some UI fixes
7 Likes

As far as i tested a week, no more stuck of PIDB, bravo. :clinking_beer_mugs:

Please help to fix same for grin-node and compile for us. Thank you.

3 Likes

I noticed that the number of nodes in the network is decreasing fast. I don’t know because users are switching from grin++ to Grim or not, could you remind me if Grim is using same user agent name like MW/Grin 5.* ? Or Grim not broadcasting the user agent so my global statistics can’t crawl the data?

1 Like

Same agent, just more working peers at seed list. There are ~64 ipv4 publicly available peers at network atm (some info can be seen here Grin Blockchain Explorer ).

1 Like

AI found the root cause, Grim are using random high ports (in setting part P2P port) but without implementing UPnP unlike Grin++, that’s why Grim wallet is outbound-only by default

In src/node/config.rs

fn setup_default_ports(config: &mut ConfigMembers) {
    let (api, p2p) = match config.server.chain_type {
        ChainTypes::Mainnet => {
            let api  = rand::rng().random_range(30000..33000);
            let p2p  = rand::rng().random_range(33000..37000);  // NOT 3414
        },
        _ => {
            let api  = rand::rng().random_range(40000..43000);
            let p2p  = rand::rng().random_range(43000..47000);  // NOT 13414
        }
    };

Benefits:

  • IP not linkable to wallet activity — inbound nodes are publicly crawlable, so your IP gets logged by every crawler on the internet. Outbound-only means your IP never appears in peer lists or worldmaps
  • No fingerprinting — crawlers can’t correlate your node’s uptime, version, or peer connections to identify you as a wallet user
  • Transaction origin harder to trace — when you broadcast a transaction outbound to a peer you chose, it’s harder to determine the origin than if you’re a known listed node
  • No attack surface for inbound connections — every inbound connection is a potential vector (malformed P2P messages, DoS, exploit attempts against the node software). Outbound-only eliminates this entirely
  • No port exposure — random high port + no forwarding means nothing is listening on the public internet from the router’s perspective

Disadvantages:

  • Can’t serve chain data to new nodes syncing for the first time
  • Can’t relay transactions and blocks to peers that connect to them
  • Can’t act as “bridge” points — the more reachable nodes, the harder the network is to partition or attack
  • Can’t show up in peer discovery, so new nodes can find them via DNS seeds or peer exchange

So, there is a tradeoff between them, but IMO, since our network is pretty small, we should have stats of Grim users and by default ‘encourage’ Grim users to contribute to the network by the running node inside.

2 Likes

You can open this port at firewall, can be found at settings, generating random only on 1st launch (there is no difference with usual grin node for this):

Common problem is we can not run several nodes on single network, cause p2p server compares IPs ignoring ports. And users need to know how to setup ports forwarding, firewall etc (will not work at all with dynamic IP address). Solution is to get rid of IP addresses at all and use Tor/Reticulum for p2p server: Reticulum/Zen of Reticulum.md at master · markqvist/Reticulum · GitHub

4 Likes

Reticulum-rs?

2 Likes

Grim 0.3.5 release :hammer_and_wrench:

Please report all bugs here, at Telegram: View @grim_app or Issues · GetGrin/grim · GitHub

7 Likes