-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feedback from adin #38
Comments
Hey @aschmahmann, thank you very much for the detailed feedback! I'm in a holding pattern while we finish a POC implementation. There are already a number of changes that I'll try to summarize while addressing your feedback next week. |
Hey again @aschmahmann — thanks again for the review! We've been making some solid progress over at https://github.com/textileio/go-textile-threads/. There are some examples in the Adding some inline comments below...
This is great. We will definitely play with it. By way of finding some concrete points of integration, you can consider Threads to be operating under the assumption that:
Currently, "joining" a thread is done by simply navigating to a host's adresss, e.g., Edit: ticket added to track -> textileio/go-threads#105
Makes sense! The mechanism sounds similar to something that was landed on during implementation, namely, "pull records" from another peer starting from some offset and going forward (like a pull-down menu, it's gives you latest).
Great, this is super helpful!
+1. We've moved to a more pluggable approach that would put these requirements on what we've been calling the Here's an issue to track: #48
Yep, but I think we've so far hand-waved over the details that are not clear in favor of focusing on the model and event store mechanics. cc/ @carsonfarmer who has been doing some research into the types of ACLs we will actually need to develop. |
Delayed follow up here @aschmahmann , but where might I learn more about the persistent pubsub work? How usable is the pubsub router stuff for things other than IPNS over pubsub? I'm reading through this and related PRs etc. https://github.com/ipfs/specs/pull/218/files |
Closing this in favour of more specific sub-issues and some previous work on resolving this, now in master. |
@sanderpick the paper is looking good! Thanks for asking me to review 😃
There's a lot of information below, which I hope is helpful to you. I'm also happy to go into more detail either on Github or on a call.
IPNS-over-PubSub and Persistent PubSub summary
IPNS over PubSub now exists as an IPNS transport that can be used totally independently of a DHT ipfs/specs#218, ipfs/kubo#6447
The main change that enables this to work is that when a node first connects to another node in a persistent pubsub channel it asks/pulls from them the latest state of the channel
hash("pubsub:IPNS Key")
, this will be much more performant than a standard IPNS DHT lookup. In particular, it will have the performance of an IPFS DHT lookup instead of the performance of an IPNS DHT lookup)Multi-writer IPNS
Unfortunately, other more pressing needs have taken my time away from this. However, a large chunk of the work is already handled by persistent pubsub and could be utilized by Threads.
The TLDR on how I'm thinking this would work is that the data being persisted via PubSub is a DAG where the heads of the DAG are all the places where users' state diverges (e.g. two users made changes unaware of each other). If a user ever received a head where it didn't know about the previous link it would directly query the peer that sent them the head for rest of the graph behind that link (this mechanism would be swappable for GraphSync). Once you have the graph you can do with it whatever you want (e.g. if it has some automatic merge function like a CRDT or OT then merge it, otherwise show the user the conflicts/options).
I know the summary above is fairly terse, but I'm happy to go into more detail here if there's interest.
DAT Similarities
As you mentioned in #35 I'd look at DAT and write up some of the comparisons, since there are definitely some similarities. In particular, hypermerge and the multiwriter DEP should be of use
root = (latest entry, pointer to previous root)
ACLs
It'd be great to have a more fleshed out consistency model for the ACL + data. Some examples:
If I understood correctly it seems like one of the big ideas of this Threads proposal is that we can create eventually consistent ACLs for use in non-malicious environments. Given the possible attacks on this scheme I think defining the threat model (i.e. what a non-malicious environment is) is important.
The text was updated successfully, but these errors were encountered: