ExploreTrendingAnalytics
Nostr Archives
ExploreTrendingAnalytics
Freakoverse4d ago
Seems like there's discourse with NIP-29 again? Yea it's still bad, at least in the sense of building a product for the general public. I think I don't like it because it makes me thing of ActivityPub/Mastodon (it's not it, but it's decently leaning towards it). The Discord alt I'll be building won't follow this NIP at all.📝 049ce57e…
💬 20 replies

Replies (20)

verbiricha4d ago
what is your argument here? "it's bad" or "don't like it" doesn't count. server-enforced moderation is needed for a Discord alt. av rooms with member list aware access control too. how do you plan to solve those? asking in good faith.
0000 sats
Freakoverse4d ago
Based on my understanding of NIP-29, one thing I didn't like about it is if the relay goes then the created hub goes with it. If the relay doesn't like the hub I created, then they'd just block it and then i have to create the same hub again on a differen't relay as the new home. I'm relay hoping my hub now basically. Unless I misunderstood how NIP-29, that's how I'm seeing it at the moment. In regards to how I'm planning to build that Discord alt differently, when you make a hub, it's an event with relay hints inside it (multiples), and posts reference the hub ID and push posts to those hint relays. For moderation, it'd be based on whitelists and/or blacklists, or rather depending on the hub structure then basically a 'access control' list (in regards to encryption / what can be seen, tree-like access tokens / similar to how MLS works if i remember right), basically client side showing/hiding based on access control list, and encryption/decryption based on who's in the tree and then token always gets updated everytime the tree gets updated and participants would know/get informed of the token. I hope I explained things well, sorry if I didn't.
00
ly4d ago
Agreed. That's the reason I stopped using Mastodon/Lemmy... Nostr original idea of publishing to and consuming from multiple relays is what sets it apart from the centralized platforms.
0000 sats
0
0 sats
Niel Liesmons4d ago
You might like this: https://www.chateau.community/wiki/naddr1qvzqqqrcvgpzqesd… nostr:naddr1qvzqqqrcvgpzqesd33ux28msfplvnwxac2p7988j2ctf8hdrhgjx607nczxmkuyrqq8kummnw3ez6cm0d4kh2mnfw3useql3jw
0000 sats
Niel Liesmons4d ago
Private version also pretty much what you describe nostr:naddr1qvzqqqrcvgpzqesd33ux28msfplvnwxac2p7988j2ctf8hdrhgjx607nczxmkuyrqqfkummnw3ez6urjd9mxzar994nhymm4wqenrru4
0000 sats
fiatjaf4d ago
Take a look at this: 📝 e23206e9… NIP-29 needs to be better explained.
0000 sats
fiatjaf4d ago
Your scheme also seems to work at a first glance, but it's computationally expensive and cannot be used to do "private" groups, unless you introduce encryption, then it gets more even more complex and inefficient. I believe a similar approach was attempted at NIP-87 (which was never merged but was implemented in Coracle and somewhere else I forgot and actually used for a while). The biggest problem with it, though, is that in order to get a consistent view of who is in the group you need someone controlling it. In the most obvious scheme that would be the pubkey that created the group -- or you can come up with something else like a threshold scheme or some form of democracy, at the cost of complexity -- in any case there is always still a group of people that controls everything. In NIP-29 the group has admins, but they don't own the group. The relay enforces the admin's policies, but if a part of the members is unhappy with the administration they can fork the group and move it to another relay that will pledge to serving them, then the group can continue there. For small friends groups this isn't a concern, but it solves many issues that have happened in big Reddit communities, for example.
00
0
0 sats
Freakoverse4d ago
Took a bit of time to understand what you said in the quoted post, and I think I understand now where you're comming from regarding the design of NIP-29, where the best management and moderation flows happen on a centralized system, but when other protocols tried to do that but in a decentralized manner, they still end up with the flaws of centralization, but because of nostr's unique structure, it allows the possibility of migration from the original relay to another, in case it shuts down or starts censoring the group. Most other protocols (or all?) can't easily do this in comparison. I understand the logic of where you're coming from now, and I'm not against it, however... I guess I would be more of a fan of NIP-29 if there was a good flow for migration steps, and more so if there was less dependancy on one relay (so a group would post on 2-5 relays that enforce admin policies) and decoupling the relay address from the group address. I think at that point I'd be happy to use NIP-29. (and in regards to actual privacy, so not even the relay knows about the content of the group posts, we'd have that tree-based encryption, so i guess no worries there, it wouldn't be that high of a cost even at scale) Also, yes you're correct that what I thought of (or what Niel linked to) has high processing, where the bigger the group the bigger the procesing needs to be done on the client side and that is definitely an issue. I guess that's the cost of if we want to persue the core nostr flow that has been done for most NIPs and what most people love about it. (Moderation management with shared pseudo-powers can be done here, but yea, more client-side processing as a result, and full final actual moderation is done by the creator of the group) I'll explore and think about NIP-29, to understand it more properly but to also see how can it be adjust to improve the hiccups i see in it (addressing the part where i said "I would be more of a fan of NIP-29" in this same post). Basically lossening up NIP-29 a bit more (probably not the correct wording here but i'm hoping I'm understood) would probably make those that don't like it reverse their thoughts on it and embrace it.
0000 sats
Niel Liesmons4d ago
With a relay that enforces (which bigger groups should def use) what we do is in no way more computationally expensive. Exact same requesting. All events of kind X with Y h tag. Only for non enforcing relays (smaller bootstrapping groups, or when main relay is offline) do you filter with the actual white list (authors in the req).
0000 sats
Freakoverse4d ago
So it seems like things could work with NIP-29 for me (and others?) to build on it, but a bit of changes would be needed in my opinion: I don't see how it's good not to have a link to the practical (actual) creator of a group. The relay can remain an 'action' authority, but the creator needs to act as the higher/'actual' authority as a link of sorts. Meaning I'd publish the creation event (mandetory, not optional, and if privacy is a concern then a deterministic derivation from the creator's pubkey can be used) and whatever i change with the rules, or who is allowed to change the rules (admins, moderators) is published by me, and the relay enforces them. This gives a proper view of who controls what, and it would be visible if a relay misbehaves / becomes malicious (if the relay changes the rules and does other enforcements that they creator did not publish, then it reveals for everyone that the relay is misbehaving / is malicious). Regarding the d tag, it shouldn't be <host>'<group-id> but rather <creator-pubkey>'<group-id> where relays must not create a group without seeing a creation event with that same d tag published by the same author as <creator-pubkey>, this prevents a malicious user(s) from preventing a creator from migrating their group from one relay to another because of d tag colision. The cost of doing this, however, is that it would not allow the functionality of forking a group, but that can easily happen fixed by adding a tag to tell relays "this is a forked group, so grab grab posts with this d tag as well". With that in mind, the h tag would also have to have the <creator-pubkey>'<group-id> value. Considering the removal of <host> from the d-tag, we'd utilize the order of the r tag to identify the current relay authority, if that even matters, where we can just have multiple authorities ("enforced") considering that we'd now have the 'actual' authority being the creator. That [private] part is a protection from the general public, but not from the relays, so the solution here is tree encryption / mls-ish (optional). No new kinds, just tweaking the flows and assumptions. This gives power to the user/creator, while complexity and processing remains with relays and enforcement remains on the relay side as well, and there wouldn't need to be a 'migration' because of this anymore, you'd just add/remove relays from the creation event and rebroadcast events. To me this seems like the best of both worlds, but perhaps i'm not seeing something or have misunderstood aspects of it. Thoughts @verbiricha @fiatjaf @Niel Liesmons ?
0000 sats
Niel Liesmons4d ago
More or less what we do. Yes.
0000 sats
Niel Liesmons4d ago
Make it work for multiple content types first. With community moderated comments on all of them. Then see if you even need rooms. We, for now, do not. So the ID = the pubkey.
0000 sats
Niel Liesmons4d ago
Example if you want to discuss the planning of a certain event on Slack, you'd create a new #channel for it. But here it's like, why would you do that if you can instead work with discussions on any content type you can imagine (including the draft event itself, the tasks related to it, etc...)+ use labels for categorizing all of them.
0000 sats
fiatjaf4d ago
The "d" tag doesn't include the relay, only the group identifier. The relay is implied from the context (where you heard about the group, to what relay was it linking, etc). I think that should remain like that, makes migrations very seamless (again, not implemented yet, we'll get to that soon). The group creator is already exposed, although that's not mandatory, there exists a "create-group" event, and whoever published that is the creator. In any case for most groups it will be clear who is the creator because he will be tagged as an admin by the relay (and in groups smaller than 1000 users it will be obvious that he is an owner regardless of anything) -- of course that won't be true if the group has forked, but in that case I don't know if knowing the creator is still relevant (still, the "create-group" event should probably remain there, although we cannot enforce that it won't be deleted). I don't like having huge link to a group, because public keys are huge, but I'm not opposed to having the public key added to the "<relay>'<identifier>" address, and I'm not attached to that format either, maybe add just a prefix to the public key? I don't see how that helps anyone though. But can't you also imagine a group that doesn't have a master public key? Maybe the group is an equal partnership between 3 people, they own the group together, it isn't clear who is the "creator", and it shouldn't be? Or maybe the group is owned by an organization, but the organization doesn't have a public key, only people who act on behalf of the organization have, so they're granted temporary admin powers. Maybe the creator died, in that case having the group attached to him would only be history, not useful in practice. I don't know, I guess I just don't understand why you're so attached to the idea of a group having a specific owner written in them.
0000 sats
Freakoverse4d ago
The reason why I suggested having the pubkey in the d tag is because I'm following along with NIP-29's flow of having the relay as the enforcer/manager keypair, because without that (the pubkey in the d tag and doing a check) then a malicious user create a group a group event with the same d tag then have it everywhere, hogging relays wherever they can which prevents the normal users from having their created group be on other relays as a result of each of the other relays' keypair utilizing the same d tag by the malicious user, resulting in a centralization chocking attack (now that specific group is stuck in the relay or to a small few options, where the only solution now is to create a completely new group). I'm basically trying to push for increasing decentralization as much as I can with the benefits of control brought in by NIP-29's management goals. The desire to have multiple admins that are equal to each other without a creator/super-admin is more complex than having a creator/super-admin above those multiple admins, as that raises the question of who should the relays listen to when there's a dispute? We'd either end up having chaotic battles of constant back and forth changes, or there needs to be a voting system for consensus, and the other issue is if one admin wants to kick another admin, is that respected? what system should handle this? I hope I managed to explain well what the issues of not having a creator/super-admin that relays listen to as the final authority. It's not that there can't be equal admins, but that there must be a super admin (creator) above them to not have such complexities and potentials issues. If there's a desire to fork the group, then that can be done by just mentioning the original group id (d tag) under a new tag, when the new creator publishes their group, and the relay grabs the relavent events.
0
fiatjaf4d ago
About the private stuff: I do think doing some kind of MLS or Signal on top of NIP-29 is a good idea. I didn't try to do it because it would be too much for me and because I think "soft-private" is fine for most cases. But if you're interested in doing "really-private" I think it would probably work pretty well on NIP-29 because it would be efficient. Probably something like leaking the metadata to the relay but encrypting the contents with a shared key for much more simplicity.
0000 sats
Niel Liesmons4d ago
Yup, only encrypt content with epoch key. Expose all metadata to relay. Group key manages (and can presign) epochs. I'm testing that.
0000 sats
0
0
0 sats
fiatjaf3d ago
Thank you, I think I get it now. I think your scheme works, but I don't think it is better than the current NIP-29. I think it has one advantage, but sacrifices other things. Overall I'm glad we're pretty close to agreement here. I think you're approaching it from a perspective that the relays will all be running the exact same software and will be blind about who is creating groups in them. That can't be true: relays will have to authorize and monitor who has groups. If someone can spam all relays with groups with the same "d" tag those relays have serious problems and can't be trusted anyway. The market will select for relays that offer a nice service, that can't be easily spammed and therefore have more staying power, that can exclude bad actors and delete their squatted groups. A squatter won't have access to all relays in the first place, it won't even know what are all these relays. For example, just now there exists 10+ #pyramid relay instances out there with NIP-29 group support, but only a few members can host groups in them. Some people are members of more than one of these, so if one of these goes offline they can migrate the group to the other. (That brings me to another point I forgot to mention: that you can easily publish to more than one relay, as a backup, in the current NIP-29, we just need the tools to do it right, but should be doable in a few minutes once there is demand.) Your comments about there needing to be a voting system or stuff like that also reflect this idea that all relay will be the same: they don't have to be. There could be relays that are hardcoded to support multiple group owners, others that don't, others that do something else entirely; relays that charge for groups, others that don't; custom implementations done only to allow a certain group to have weird custom admin rules; and so on. The groups will have to pick and choose the relay that better suits them to host their group.
0000 sats
Freakoverse3d ago
Aye this was a good discussion. I'm not sure if I'll go with NIP-29 as it is or not, or go with something custom, or perhaps a meshmash of things (and present the user with "here are your options with their pros/cons"), to eventually reach discord's level of service, all the while considering the nature of nostr, is definitely a challenge, with different trade-offs depending on what's chosen. It's definitely worth exploring different solutions i'd say, where a bunch would make products based on NIP-29 and advance it, others might build on top of a modified NIP-29, others might try something completely different, and I guess we'll see how it fares as we play with all of them and see what works best in practice. I'll probably spend a few days thinking what I'll do on my end, digesting this discussion before moving forward.
000
Niel Liesmons3d ago
Yup, final authority = keypair = identifier. Solutions are being built in any case for sharing a keypair, handing out allowances, etc... Because it is already needed for Company and Brand profiles in literally all other use cases of Nostr right now.
0000 sats
0 sats