Damus
SatsAndSports profile picture
SatsAndSports
@SatsAndSports

https://cashutube.satsandsports.cash/

Into bitcoin, specifically cashu.

When I'm not working in the fiat mines, I'm into cycling and camping

I'm trying to use White Noise (different npub), but don't have many contacts there yet!

npub1zthq85gksjsjthv8h6rec2qeqs2mu0emrm9xknkhgw7hfl7csrnq6wxm56@npub.cashlnurl
Relays (4)
  • wss://nos.lol/ – read & write
  • wss://nostr.land/ – read & write
  • wss://nostr.chaima.info/ – write
  • wss://nostr.bitcoiner.social/ – read

Recent Notes

note1vt4d5...
SatsAndSports profile picture
I know I'm reinventing things, but I don't mind doing so πŸ˜€. I'm learning lots

And my MONAD system allows all the relay operators to accept payment for providing the relay service. My hope is to motivate very large numbers of users to run these relays, to give the fastest and most reliable onion-based system
SatsAndSports profile picture
I worked out how to add "hidden services" to Monad while hiking with a few bitcoiners today

The hidden service will select a route from an arbitrary node back to itself, but encrypted such that even the client which is connecting to the hidden service doesn't know what the full route is

I think that's how Tor does it, but I should check before I reinvent the wheel (badly)!

But there are other things related to @FIPS that I'll finish first ...

1
SatsAndSports · 3d
I'm making great progress(*) working on MONAD, which I just seriously started researching and planning on Sunday night Monetized Onion Network Access Deamon It's like a VPN or Tor, but you pay the r...
SatsAndSports profile picture
If you use three relays, then you have three 'sessions' nested inside each other so that each relay learns very little about your connection. You have one session with the first relay, and you use that connection to open a second session with the second relay, and so on. Typical onion routing.

NoiseNK encryption+authentication in session, which itself wraps HTTP2 which can be used for multiplexing multiple requests. One of the streams inside HTTP2 is used to control the payments. So the client exposes a SOCKS5 proxy which might be processing multiple requests in parallel, which is responsible for setting up these nested sessions and making the payments, while all the relays (except the last) just see a single encrypted stream. The relays know the previous hop and the next hop, but that's it; except that the final relay might see you exiting to multiple 'normal' final connections.

Don't be misled by the 'HTTP' in 'HTTP2'; the multiplexed connections can be any arbitrary TCP session, I use it for 'ssh' and am happy with the latency

If there are multiple users, then a given pair of relays would have one connection per user, which has one of that user's sessions (which might itself be many managin multiple 'exit' connections). Those per-user connections are wrapped inside QUIC, which apparently is the very scalable way to multiplex large numbers of connections. This should help a little with privacy, as external viewers see all the traffic between two relays as just one QUIC connection, and QUIC itself adds another layer of encryption. Also, QUIC sometimes merges packets from separate user's streams into one packet, which might help a little with privacy too

I'm not implying QUIC is designed for privacy, but I find it a good place to start.

Links (I haven't pushed recently, trying to only push with each major update):

- MONAD itself: https://github.com/SatsAndSports/MONAD

- Cashu Spilman Channels: https://github.com/SatsAndSports/cashu_spilman_channels
SatsAndSports profile picture
I'm making great progress(*) working on MONAD, which I just seriously started researching and planning on Sunday night

Monetized
Onion
Network
Access
Deamon

It's like a VPN or Tor, but you pay the relays via Cashu Spilman Channel micropayments. You can connect through any number of relays, paying for more relays if that might help with privacy

I'm very happy with the networking design (**), and I have a working system where the sessions are paused when the client needs to 'top-up' the balance needed in the session. I'm just working now on getting it working well with the Cashu Spilman payment channels

I'll reply immediately with more of the internal details, including links to code that's already a few hours out of date (a long time when being a Slop Cannon)....

(*) having lots of fun mostly, and learning more networking stuff
(**) I have some relevant background in encryption and networking, but I'm not an expert in mixnets or traffic analysis
21❀️1⚑1πŸ‘1πŸ€™1
SatsAndSports · 3d
If you use three relays, then you have three 'sessions' nested inside each other so that each relay learns very little about your connection. You have one session with the first relay, and you use that connection to open a second session with the second relay, and so on. Typical onion routing. Nois...
tuma · 3d
That’s very cool! Congrats on new project! Btw, I remember someone is making a version of Tor with LN monetization, I don’t know if it could be of any inspiration for your project! It was called el-tor if I remember correctly!
alp · 3d
Yea, mine uses console logs in JS projects too. All the stuff that's actually considered not cool in modern development.
Tom · 3d
You don't test in production? Customers are the best bug hunters
calle · 3d
What does FIPS do?
SatsAndSports profile picture
(my attempt to explain, might be wrong)

A decentralised mesh, that should scale to very many users, where a packet can be routed from A to B. Each packet is forwarded to one neighbour, without source routing

A "spanning tree" over all nodes is formed. The purpose of this tree is that, for any edge on the spanning tree, the edge divides the entire network logically into two sections ("split-horizon"). There is then a bloom filter on each side of that edge which records the set of nodes that are reachable *in that one of the two sections*

The Bloom filters gradually fill, as they learn which nodes are where. A naive Bloom filter system would eventually result in every node being recorded in every Bloom filter and would therefore be useless. The spanning tree provides (arbitrary) two-section splits to ensure that doesn't happen. For any given edge of the spanning tree, each npub should be in just one of them. (For me, this was the main idea that hooked me on FIPS)

The Bloom filters are the main thing used for routing, although of course various network statistics are used to bias routing towards the best performing peer

There's lots more to say. Every direct link between two direct peers is encrypted and authenticated, as is the multi-hop session that forms between two nodes that are communicating

So that gives us an encrypted and authenticated datagram service between two nodes (nodes are identified by npubs). FIPS doesn't care how the peers directly communicate with each other (Bluetooth, WiFi, UDP, Tor, carrier pigeon)

But it's unreliable. Hence it's quite like IP (as opposed to TCP). Therefore, in order that all our IP software can be used as-is, there is a localhost-only IPv6 adaptor (and associated local DNS resolver, that maps each npub to a deterministically-derived ipv6 address) which allows us to treat any FIPS node as an IPv6 address. You can then run your legacy stack (using TCP for reliability) on top of that. When I connect my web browser to a cashu mint, the web browser thinks it's connecting to IPv6, but my machine immediately intercepts it and it goes through the FIPS system and it pops out inside the mint's machine as an ipv6 packet