Bluesky Dev
Community discussion of the AT Protocol and Bluesky. (This room is not officially affiliated with the Bluesky team.)
Previous group of messages
  1. Kjartan
    Like for example with dns servers. One might send evil replies, but as soon as I notice it being evil, I can just switch my DNS server and everything just works again
  2. I also see there some threat of the plc.reg not turning evil by choice, but by them getting controlled by their country
  3. goykasi
    Also, the PLC isnt really the best way to ban a user anyway. Since its just a document repository, it doesnt have any bearing on authentication or authorization. Individual apps would still need to ban the target user. Modifying the PLC data doesnt really do much. It simply describes where a users data is stored (PDS) and public keys for modifying the doc
  4. Kjartan
    It's fundamental for federation. If the plc dislikes you, you are limited to your pds
  5. If you are on a 1-person plc, you are basically banned
  6. (and even if you are on a big server, your reach can be significantly limited)
  7. goykasi
    True. But the bluesky team doesnt have much incentive to just dropping a user like (they can simply ban them on the bluesky app). That would create a lot of unnecessary distrust in a decentralized network. It could be disastrous to reputation.
  8. Kjartan

    In reply to this message

    They might have no choice. If the FBI or CIA (or whoever would be relevant here, I'm just a European, what do I know) enters the room and says that's how it's done, maybe even with a court order… they simply might have to obey
  9. Would you feel comfortable as a Russian if the PLC would be located in Ukraine - or vice versa?
  10. Would Snowden have used Bsky while he was on the run?
  11. Aaron Goldman

    In reply to this message

    We should make the decision between remove and take over. The directory is in the business of timestamping deltas. It can choose not to accept/reject a delta but it can't make a delta for a did:PLC it doesn't have the rotation keys needed to sign it.
  12. Kjartan
    I'm fine with things how they are as a temporary solution. But longterm a 1-PLC-reg doesn't do it. There needs to be at least some redundancy. So I can just switch to a different server if some server is not "a good choice" for whatever reason
  13. goykasi
    I think the main concern is if the bsky org decided to go around the keys/deltas -- going to the database and explicitly removing the operation chain and then changing the code to reject a re-registration
    (edited)
  14. Aaron Goldman
    Also there is a distinction between rejection of a delta and a later mutation of the history. Any alterations of the history are auditable.
  15. Kjartan

    In reply to this message

    Couldn't the PLC just pretend that it has never heard of a did? Or that it was created with completely different keys in the very first place (really at creation)
  16. goykasi
    Going around the system would cause future distrust and fracture the larger ecosystem. New DID doc repositories would pop up and create separations based on policy and politics (not a great outcome)
  17. Kjartan
    Or simply not reply to any requests for a specific did
  18. In reply to this message

    A government might not care about the future of the protocol because of reputation issues
  19. I mean atp assumes at all times somewhat the worst of everyone in the network, users, their device, the pds,… I think especially for its core one may not just trust that they will always play nice. I know if I was a government I would totally go for the plc
  20. And this was probably fine, if it's simply unavoidable. But other protocols (not necessarily social media, just other protocols) were able to avoid this. And ATP is still in BETA - now is the time where nothing is written ins tone yet, and if this should be avoided, it can still be avoided
  21. Kjartan
    I think it might be enough to just create enough redundancy - it doesn't need to be unlimited
    (edited)
  22. Like put already one plc.reg in basically almost every country. So I can connect to that country's plc I'm trusting the most at that moment
  23. it's not ideal, but would be already some improvement imo
  24. Kjartan
    It probably would lead to inconsistency - but if that "ever" happens, it would be proof that it was good to have more than one in the first place
  25. Aaron Goldman

    In reply to this message

    If they pretend they never heard of it two cases. One, from the beginning e.g. your doc is >4k so the directory rejects you. You can hand your delta to various PDSs so they can try submitting it and condense themselves that the directory is malicious. Two, they changed the history. You notify PDSs of the DIDs whose history have changed they pull them from the directory compare to local copy of log convince themselves the directory is malicious.

    For "created with different keys" no the did:plc:<sha256(initial state)> means that a different set of keys will have a different hash. The only way to do this is to break sha256 and then a better use would be to win all the Bitcoin mining with that math instead of stealing a did:plc

  26. kcchu

    In reply to this message

    I understand that PLC can be made auditable. But my point is that when PLC is controlled by a single party, that single party also control on the policy about what being a “valid” state. Bluesky can just change the rules arbitrarily and everyone else will have to either accept the new policy or not using PLC. Without a viable alternative, public auditability is meaningless.
    (edited)
  27. Kjartan

    In reply to this message

    I meant with the new keys, not to offer wrong, but seemingly correct data. Just wrong data, so a PDS can't do much with it (while I still think the easiest will be, just to return a 400 whenever the targeted did shows up in a request (no matter from which plc). And untill enough PDS get together to decide on a new PLC.register the user (who maybe depended on atproto) wouldn't need it anymore anyway
  28. Kjartan
    While it would be also very difficult for PDSs to decide on a new PLC register - once the protocol has been already running for a while. Especially when PDS realise that it is not something you can 100% rely on. Every PDS would like to see the next PLC closer to themselves (being it political, geographical, or whatever). And how would they even connect and find each other in the first place.
    (edited)
  29. kcchu

    In reply to this message

    Exactly. In this situation the DID become highly fragmented and highly political. It will be worse than just using DNS
  30. Also, I question the financial sustainability and incentive for running such public PLC registry. Since there are no venue to charge a fee, who and why would people operate a public PLC?
  31. kcchu
    Let me clarify my position, PLC as a temporary stopgap is fine for now. But I can’t see it being a viable design for medium to long term. It is a single point of failure that defeat the whole purpose of decentralization in AT Protocol.
  32. Kjartan

    In reply to this message

    Yeah, fine for now (one has to start somewhere) but not viable as a long term solution 😕
    (edited)
  33. Aaron Goldman
    Maybe I'm too optimistic but I think that replacement of the single server with a aBFT consensus algorithm is not that hard and that there will be enough PDS operators to invite to the consensus group. I just think it's too early to write the rules for who gets invited to join or what behavior gets you kicked out.
  34. Fi joined the room
  35. kcchu
    This approach make sense to me. And if it is in bluesky’s roadmap it relieves my concerns. Will you guys write up this idea in a blog post or something?
  36. @ab27:matrix.org removed their profile picture
  37. @ab27:matrix.org removed their display name (ab27)
  38. @ab27:matrix.org left the room
  39. Freezlex changed their profile picture
  40. Freezlex changed their profile picture
  41. freezlex changed their display name to Freezlex
  42. kcchu
    Hey guys. Sharing something that I am building. Currently in alpha.
    bsky.directory
    - Like Linktree, for your Bluesky profile.
    Example: https://bsky.directory/@kcchu.xyz
    Features:
    • Share your Bluesky profile with links to other social profiles and websites
    • Host your profile page on your custom domain, example: https://kcchu.xyz (Mention @
    bsky.directory
    to setup)
    • Sign in to edit your links
    Coming soon:
    • Verify Twitter profile ownership
    • Find your Twitter follows on Bluesky
    • Private links: links that can only be seen by mutual friends, best for things like email addresses and phone numbers.
    • Automatic DNS: setup custom Bluesky handle without managing DNS.
    • Themes
    The software will be open source when it is ready.
    Your feedback is important to me!
    (edited)
  43. lazyatom joined the room
  44. rht joined the room
  45. rht

    Hi Bluesky devs,

    I'm interested in using the protocol as a tamper-proof means of publishing of data. My current way of doing this to a Git commit: first, I PGP-sign the commit, and I then persist the hash representing the commit to https://opentimestamps.org/ (along the line of NIP-03 in Nostr). I suppose the problem with this approach is that the identity tied to the Git commit and PGP key is not self-sovereign (an email address). And that using Git, PGP, and publishing the repo via BitTorrent/IPFS would require some technical expertise.

    As such, my use case is more on the authenticated data part, where the social network part is not essential (or maybe it could be used for the trust network). What would be the easiest way to use the protocol for this use case? I have looked at an

    , but it seems to require using the entirety of the protocol.

  46. Hinata Shouyou joined the room
  47. lazyatom
    Is there any guide (official, unofficial, anything) about setting up/running your own PDS?
  48. rht
    lazyatom: you can git clone https://github.com/bluesky-social/atproto, then run make deps, and then make run-dev-pds
  49. lazyatom
    Thanks
  50. Hmm, I get an error that seems to be because I'm not also running a Did Plc server on port 2582
  51. rht

    It works for me if I did make run-dev-env. I was able to ping the local PDS server. Sorry that I can't be of help, because I'm also new.

    1234567891011121314
    ██████╗
    ██╔═══██╗
    ██║██╗██║
    ██║██║██║
    ╚█║████╔╝
     ╚╝╚═══╝  protocol
    
    [  v0.1.0  | created by Bluesky ]
    
    Initializing...
    [2582] 👤 DID Placeholder server started http://localhost:2582
    [2583] 🌞 Personal Data server started http://localhost:2583
    Test environment generated.
    
  52. lazyatom
    Ah - the command is make run-dev-env
  53. rht
    You can do mkuser("yourusername", 2583) on the CLI to create a test user
  54. Achal Jhawar joined the room
  55. @horiehitoki:matrix.org removed their profile picture
  56. @horiehitoki:matrix.org removed their display name (Hitoki Horie)
  57. @horiehitoki:matrix.org left the room
  58. Kjartan
    What does the ctx.repoSigningKey as in https://github.com/bluesky-social/atproto/blob/deabb71da444bc7d56038089473d9d8c9d634e51/packages/pds/src/api/com/atproto/server/createAccount.ts#L51 represent? I think to have understood ctx.cfg.recoveryKey and ctx.plcRotationKey, but not this one!? 🤔
  59. I mean, it's what's ending up as "verificationMethods" but I don't get what this one stands for either
  60. nishioka_atsushi joined the room
  61. Aaron Goldman

    In reply to this message

    You might want to think about that UI makes it look like a phishing site for Bluesky Social passwords
  62. Kjartan
    After the login? Because up to the login, I find it actually quite nice? (I didn't login though)… or imaybe it depends on the browser. but looks fine here
    (edited)
  63. Aaron Goldman

    In reply to this message

    The verificationMethods are the keys that can sign the commits to the repo.
  64. Kjartan
    Shouldn't this be one of the keys of the array, we talked about a couple of hours earlier?
    (edited)
  65. Aaron Goldman
    no. rotationKeys are about the DID Document. verificationMethods are about the AtProto repo
  66. Kjartan
    ohhhhh. Thanks!
  67. Aaron Goldman
    The DID Document deltas need to be a chain the only way to know it is valid is to replay from the beginning and have each step use a valid signature. The repo is very diffrent. You just need the latest Commit and then you follow the hashlinks to the data
  68. This allows the repo to have data removed without effecting the validity of the rest of the data. We need this so that PDSs can implement GDPR.
  69. Kjartan
    I don't understand what "goes into" a did. I thought I understood alls teps involved to get the result of plc.createOP (which at creation returns the new user's did, doesn't it?) but I expected to get the same did for a new user, if I run it with the same arguments, but I get different a different DID for the new user (which is in general very good - but I don't understand why the results are different)
    (edited)
  70. In reply to this message

    Oh, nice!
  71. Aaron Goldman
    If the init state is difrent by even a single bit the did:plc will have a very difrent hash
  72. @kaddare:matrix.org joined the room
  73. Kjartan

    In reply to this message

    What do you mean by init state? I GUESS it's not (only) the arguments to createOp!?
  74. Kjartan
    Ok, then I got it right, I guess. But have somewhere else my issue. The signature should be the always the same, for the same record, shouldn't it? Or wait I look for the two dids I compared, as an eample
  75. Aaron Goldman
    123456789{
        "sig": "v0Oilmbj4DmrKl8updN4a4RRy-W4KMkFbQgzeic5wWwIUNcv2MubGAcIcWorHO7ENfVMw277vsZ_8ElTLwyGww",
        "prev": null,
        "type": "create",
        "handle": "aarondgoldman.bsky.social",
        "service": "https://bsky.social",
        "signingKey": "did:key:zQ3shP5TBe1sQfSttXty15FAEHV1DZgcxRZNxvEWnPfLFwLxJ",
        "recoveryKey": "did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg"
     }
    

    is the initial state

    123456789101112131415161718192021  {
        "sig": "-HaOHhXggXNikMIh1gVY6mLcPgkroO9Q3l3wScUX2FQd1Z4Fp8OdOO4KYO5ZQJzF0aCDd1pKbVojCZJxTqCT8A",
        "prev": "bafyreie3v6g2tzcz5pjvvaoeygemqnvcmhr2q64pztthmgngab7gzspadq",
        "type": "plc_operation",
        "services": {
          "atproto_pds": {
            "type": "AtprotoPersonalDataServer",
            "endpoint": "https://bsky.social"
          }
        },
        "alsoKnownAs": [
          "at://aarondgoldman.bsky.social"
        ],
        "rotationKeys": [
          "did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg",
          "did:key:zQ3shpKnbdPx3g3CmPf5cRVTPe1HtSwVn5ish3wSnDPQCbLJK"
        ],
        "verificationMethods": {
          "atproto": "did:key:zQ3shXjHeiBuRCKmM36cuYnm7YEMzhGnCmCyW92sRJ9pribSF"
        }
      }
    

    is the first delta

  76. the init is valid because the b32(Sha256(CBOR(init)))[:24] is toxy3kpelhv5gwubytayrsbw the delta is valid because it is signed by did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg
    (edited)
  77. Kjartan
    let's look here for both only at the initial state: https://plc.directory/did:plc:on2y73hnbsr7gslexig7hsc3/log https://plc.directory/did:plc:gvzdrflwlg7zfrh2pkqdcwx4/log I thought I could get them both to collide (and maybe have the second account taking over the first account). But I received different signatures both times (so, yeah, you are right, obviously different dids - I forgot about that). But why do they have different signatures, as the data is otherwise completely the same (seemingly)
    (edited)
  78. Aaron Goldman
    Different sig value different hash, not surprising.
  79. Kjartan

    In reply to this message

    That yes, but why is the sig different?
  80. Aaron Goldman
    The signature is not deterministic.
  81. Kjartan
    Shouldn't it be the same, as it's the same pds, the same handle, the same keys
  82. oh…
  83. In reply to this message

    Okay! Thanks!
  84. Aaron Goldman
    same key different IV
    (edited)
  85. Kjartan

    In reply to this message

    And now I know where my server implementation does something wrong. Thanks!
  86. Aaron Goldman
    Yes the init was not always signed but making the did creator sign it makes them prove that they have a rotationKey and are not totally broken. Also give more uniformity between the init and the deltas so it is simpler to parse. It is nice to always have the same shape.
  87. I bet my did:plc:toxy3kpelhv5gwubytayrsbw will run me in to bugs in the future when PDSs ignore that there was a difrent format for the first few hundred did:plc 🤔🤔😨
  88. Kjartan

    In reply to this message

    Just delete them accidentally 🤣 "Ooops, good that it's still in beta 😀"
  89. Aaron Goldman
    just checked there are 2663 did:plc:s with unsigned inits 😨
  90. there are some pain points to an immutable ledger
  91. Kjartan
    I wouldn't worry too much. That's exactly that kind of stuff that makes a beta. It's not great, but it can happen
  92. In reply to this message

    Regarding this. It's likely not an atproto issue I have, but I hope you can point me to the right direction anyway. So if I have a private key K then K.sign(someData) should always give different results? Because I thought I knew what I did wrong, but I always get the same results anyway :/
  93. Kjartan
    Yeah, that's what I always use as a reference. But with that I'm able to produce overlapping dids (which also would make it into the database, and effectively take over an account - although the plc shouldn't accept it)
  94. msg would be the same, ergo msgHash as well; so if the signature should be always a different one, it would have to be somewhere in secp.sign which makes the difference. But I don't know secp keys at all and were just using a library (I tried it there with creating a new Secp context, but this didn't change anything)
  95. Aaron Goldman
    The directory should reject it since for that DID it already has deltas and this one dose not have the last existing one as it's prev. It should tell you the current latest and ask you to update the prev to that CID. The users client's rotationKey should be diffrent but at the moment most clients don't upload a rotationKey that they keep in the local key chain.
    (edited)
  96. Aaron Goldman

    In my mind there are three non-malicious reasons for the directory to reject a delta.

    • It is not signed correctly.
    • It dose not have the latest delta as it's prev CID.
    • It is too large or exceeded the rate limit.
  97. the services.atproto_pds.endpoint being on a blocklist now that we can argue about for the next few decades or until we move off did:plc 😛
  98. davidnoe set a profile picture
  99. Berk Selvi joined the room
  100. Kjartan
    Yeah :/
  101. @kaddare:matrix.org
    Message deleted by Aaron Goldman
  102. Chris Lace
    Yes 👍💯
  103. kcchu

    In reply to this message

    You mean because it ask for Bluesky password to sign in? Surely it is an issue. Any plan for a oauth style login flow soon?
  104. Aaron Goldman
    Well anyone with a DID should have a verification method key 😈
  105. kcchu
    Even PLC DID? But I think the keys are managed by PDS (for most users). Can users use the keys in PDS to sign something?
    (edited)
  106. @leohoo_sdu:matrix.org joined the room
  107. @leohoo_sdu:matrix.org left the room
  108. @itspranitsingh:matrix.org joined the room
  109. @itspranitsingh:matrix.org left the room
  110. colbskysocial joined the room
  111. John Ngugi
  112. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    um, respectfully... what???
  113. ni5arga joined the room
  114. @louipc:matrix.org

    In reply to this message

    it hardly works.. mods would need to manually add that tag to their notifications
  115. citizenziggy

    In reply to this message

    can you point me ti a URL, pls?
  116. Kjartan

    In reply to this message

    https://github.com/bluesky-social/atproto - clone it, build it, and run the pds server
  117. citizenziggy

    In reply to this message

    are federated accounts working yet?
  118. Kjartan
    Nope
  119. citizenziggy

    In reply to this message

    thanks again. any idea when that might happen?
  120. Kjartan

    In reply to this message

    Absolutely not. I guess soon, but also not within just a few days. Wild GUESS maybe 3-5 weeks? But there weren't any hints on the timing as far as I know. So it's really just a guess
  121. Maybe even a too optimistic one. Nah, I really have no idea
    (edited)
  122. @farribeiro:matrix.org joined the room
  123. @zedzedzed:matrix.org joined the room
  124. @zedzedzed:matrix.org
    vos docs, ça se translittère facilement avec des fichiers .po ou pas du tout ? bon week-end !
  125. @louis77:matrix.org joined the room
  126. Kjartan
    Does anyone know the parameters the ts server uses for scrypt. I have the salt, I have the hash, but also a hard time, because I don't know N, r, p… (I assume N to be 64)?
  127. I'm fine with scrypt in general, but would be nice if my server could work as a drop-in replacement for the ts version
  128. @zedzedzed:matrix.org
    question for the sysadmin : whom is behind the original original original original twitter handle ? ? ? ? :) :) :) :) ;) have a wonderful day ! - docsmanpage
  129. Tsotne Nakopia joined the room
  130. @matorix:matrix.org left the room
  131. @farribeiro:matrix.org
    bluesky/at protocol will talk/integrates to activitypub?
  132. Kjartan

    In reply to this message

    AFAIK there isn't anything on the agenda which would suggest so
  133. Kjartan
    But who knows what the future will bring 🤷‍♂️ but if so, I dont expect it to happen anytime soon
  134. @farribeiro:matrix.org
  135. Chris Lace
    Anymore invites anybody?
  136. @farribeiro:matrix.org
    btw... how long does it take to send a code, when it enters the list? that's what i've been waiting for about two weeks
  137. Kjartan
    Having or wanting? I don't have any, but would always appreciate some :)
  138. Chris Lace
    Kjartan wanting
  139. Kjartan

    In reply to this message

    I've been waiting since October
  140. @farribeiro:matrix.org
    since october?
  141. Chris Lace
    It’s been 2 weeks now 😞
  142. Kjartan
    😭
  143. My personal view - your only chance is to get in if you get a code by someone
  144. Chris Lace
    I need to see the wizard about invites
  145. @farribeiro:matrix.org
    I didn't even get an email that I was subscribed to the list
  146. Kjartan
    I dont think there is such a confirmation email
  147. Antonio Cuccu joined the room
  148. Anonymous
    I'm sure the chances are zero, but if anyone has an invite code to burn we'd appreciate it thanks.
  149. giteauser
    bluesky invites are the next
    cock.li
    invite (i joke)
    (edited)
  150. are there any other bluesky servers out there someone could sign up to?
  151. Aaron Goldman
    I think https://stems.social is the second largest PDS
  152. xnf0k

    In reply to this message

    Just adding to this, we've restricted invites to prevent a flood like last time. Since the aim is to show how other namespaces can work in bsky/atproto, now getting an invite requires an ENS name (*.eth specifically). These can be set as handles after registration.
    https://invite.stems.social
  153. austinha joined the room
  154. Chris Lace
    I just purchased my name from Stems. How do I add and change it to (BlueSky) handle?
    (edited)
  155. xnf0k
    Uh you mean bought an ENS name? Because stems doesn't charge anything
  156. moved to @shreyan:beeper.com@shreyanjain:matrix.org

    In reply to this message

    on the
    bsky.social
    pds? you can't.
  157. Chris Lace

    In reply to this message

    So I just purchased a name for nothing (smh)
    (edited)
  158. In reply to this message

    So I just got ripped off?
  159. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    no you did recieve an ENS name
  160. but you can't use that with bluesky unless you're on the stems pds
  161. Chris Lace

    In reply to this message

    How I get pds? Because I clicked on that link 👆👆👆
  162. I’m just tryna verify my (BlueSky) account that’s all …!
  163. @logic-gate:matrix.org left the room
  164. xnf0k
    1. stems is a different server that doesn't federate with the main
    bsky.social
    instance. 2. This is mentioned multiple times everywhere and even need to confirm on the website. 3. If you have an ENS name, the website lets you claim an invite code to stems. It also explains how to use it as a handle in stems.
  165. Chris Lace

    In reply to this message

    Wow 😮
  166. I’m Stemed as hell now lol ..
  167. I don’t have a website for my name
  168. Kjartan

    In reply to this message

    When it happened back then, I didn't blame stems, because while they wrote it already back then, but I understood the confusion, as it probably wasn't obvious enough for the "average user". And I really like that you did the "I confirm bla bla bla" checkbox - kudos for that one! So I'm a bit surprised that obviously it still causes confusion (and I would have no idea or suggestion how to make it even more obvious)
  169. In reply to this message

    You can still join stems so. It's still nice there. I'm there as well :D
  170. xnf0k
    Idk what else we can do other than a 10 second non-skippable full screen alert with sound
  171. Chris Lace

    In reply to this message

    I’m typing too learn how it works. I enjoy New Social Platforms
  172. Kjartan: ok I’ll see there 👍
  173. But is there anyway I can change my (BlueSky) handle name without an website?
  174. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    only to other .
    bsky.social
    handles
  175. Kjartan

    In reply to this message

    Especially for just checking it out, it will totally do. It's not as busy there, but this also means, it has more of a "family" vibe ☺️
  176. Chris Lace

    In reply to this message

    Thank You
  177. Vincent Kadar (@kooderor:matrix.org) joined the room
  178. kapek joined the room
  179. bobwiller joined the room
  180. Vincent Kadar (@foretyhop:matrix.org) joined the room
  181. @seiya133:matrix.org left the room
  182. @nica:matrix.cyber4edu.org joined the room
  183. pomeloop joined the room
  184. Matt Reider joined the room
  185. @neeg:nitro.chat left the room
  186. alphadec joined the room
  187. mikuhl
    Daniel Holmgren: you might be able to close many issues at once with a simple change, could you look at this comment? https://github.com/bluesky-social/atproto/issues/330#issuecomment-1536562004
  188. Compy (@compy:envs.net) joined the room
  189. @l_tan:matrix.org removed their display name (dolciss)
  190. @l_tan:matrix.org left the room
  191. Kazuo “cazzbay” Iimura joined the room
  192. Kazuo “cazzbay” Iimura set a profile picture
  193. kate_nym joined the room
  194. salrides
    +1 🙏🏼
  195. salrides

    In reply to this message

    👍🏼
  196. Kjartan

    In reply to this message

    I'm currently tinkering a lot with it. The last 48h It wasn't even running most of the time (as no one was logged in anyway). I just started it, but it might misbehave in some aspects. If you are going to use it, and it does misbehave, just send me quickly a message with the issue, and I'll look into it.
  197. salrides

    In reply to this message

    Ty
  198. Kjartan
    Maybe someone knows it: when you click in the staging web client on search, it requests
    app.bsky.actor
    .getProfiles for some handles. Where does the list of handles it asks for come from? Like, to which earlier request were they the response?
  199. Kjartan

    In reply to this message

    If someone else runs into this. If you wonder where alice bob and carla come from. They are hardcoded in the staging web client
  200. (makes you somewhat question how useful those two requests are though)
  201. tolo
    I deleted my account because I wanted a break from social media, not the best idea on a private beta ;-( any invites available my fellow aspirational internet users
  202. Kjartan changed their profile picture
  203. goykasi

    I have a question for the bsky/atproto devs. How do you imagine 3rd parties to develop apps? We would definitely work out a set of lexicons, generate the stubs and implement the business logic. But where is that code going to live? As a PDS?

    The docs recommend providing the base atproto functionality along side new features (and a lot of it is needed/useful — auth and repo usage), but are we expected to build inside of the indigo/atproto repos? That doesnt seem very scalable.

    Is there a dev guide in the works? I have a couple of apps in progress, but Im not sure the appropriate place for them to run. Currently, Im just dumping them in the api/pds subdirs for indigo.

    (edited)
  204. Freezlex changed their profile picture
  205. Compy@compy:envs.net
    Curious, when someone reports a post on my own network, where does that report actually wind up?
  206. Chris Lace
    Message deleted
  207. @seinlin:matrix.org joined the room
  208. Matthew
    are bluesky folks doing dwebcamp this year?
    (edited)
  209. peterrood
  210. Getting an intermittent error when trying to add a link card on
    staging.bsky.app
    in macOS Safari today
  211. snarfed

    In reply to this message

    you'd develop and run that code yourselves, entirely outside of bluesky's repos and servers
  212. moved to @shreyan:beeper.com@shreyanjain:matrix.org

    In reply to this message

    ack why is it always CORS lol
  213. Maybe eventually sites will hardcode in exceptions for bsky the way I'm guessing they have for Twitter, Facebook et al
  214. Aaron Goldman

    In reply to this message

    For apps that the PDS has no application specific logic for the application would need to submit the set of paths and record that the application wanted to be included in the repo to the PDS for signing.
    One could imagen a UI from the PDS to the repo controller
    """
    Application xyz is trying to insert records to collection abc and def

    • Allow once
    • Allow for 2 weeks
    • Allow indefinitely
    • view records and approve individually
      """

    Weather the repo additions and commit signing happens on the PDS or in the repo controller's client there will need to be UI for granting any particular application the ability to insert into the repo.

    An alternative architecture that was considered was to issue capabilities to aplication so they could sign the repos themselves but that would mean every client would need to do validation work to check that any given commit only changed the collections that the capabilities allowed them to. Probably better for them to propose a new commit and the validation only need to happen before the PDS or client signs the commit to make it the new head of the repo.

  215. Users have largely accepted the android permission model where applications ask for what they need. A similar model for which aplications get to edit which collections in the repo could also work.
  216. Chris Lace
    Where do I go to purchase a Name Handle for (BLUESKY) verification?
  217. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    standard DNS
  218. just buy a domain name
  219. Chris Lace

    In reply to this message

    from where or you saying buy a regular domain name?
  220. @farribeiro:matrix.org left the room
  221. moved to @shreyan:beeper.com@shreyanjain:matrix.org
  222. regular
  223. louipc changed their display name to louipc.m
  224. @toriii:matrix.org joined the room
  225. goykasi

    In reply to this message

    I think it would make more sense to keep record signing and repo mutations on the PDS side. That would cut down on code duplication, and the client code would stay more lightweight.

    But how would you feel about separating the atproto and bsky apis? Since they are currently built/deployed together, there is not a clear barrier for integration. Separating these components would provide outside teams a better picture of where we hook into the systems. This would also serve as very thorough example application for the atproto protocol/network.

  226. aldebaranoz joined the room
  227. @ooooret:matrix.org joined the room
  228. @aryak:projectsegfau.lt joined the room
  229. kevin ✨ joined the room
  230. Patryk
    Question to the team: is the ability for users to change emails on the near roadmap? Just noticed my email is wrong(I know admins can already change it)
  231. wonkey joined the room
  232. @yefeo:matrix.org joined the room
  233. @seinlin:matrix.org left the room
  234. @yefeo:matrix.org left the room
  235. Deny7217 joined the room
  236. -sysman- joined the room
  237. 電子馬 changed their profile picture
  238. Eric Akira Sobrinho Hamabata joined the room
  239. Eric Akira Sobrinho Hamabata
    Is it possible to build something with the ATProtocol atm? Like, can anyone do it or just some invited people can?
  240. Chris Lace
    If we invite someone to the app. I hope we’re not responsible for the foolishness they bring. Will it affect us?
    (edited)
  241. Patryk
    AFAIK it might, but prolly depends on the case
  242. Chris Lace
    Message deleted
  243. Chris Lace
    Ok just wanted to know Thanks!
  244. Compy (@compy234:matrix.org) joined the room
  245. Mateo C. joined the room
  246. raggi left the room
  247. Vincent Kadar (@toooutv:matrix.org) joined the room
  248. jannk joined the room
  249. moved to @shreyan:beeper.com@shreyanjain:matrix.org

    In reply to this message

    yeah they do track things down the invite tree a bit
  250. In reply to this message

    You can definitely play with unauthenticated GET endpoints right now. the docs are a great place to start 🙂
    Of course, it's easier when you do have a BlueSky invite, because then you are able to test more things and verify against the client
  251. p4bu1 joined the room
  252. @aryak:projectsegfau.lt left the room
  253. @4223et:chat.ccc-p.org joined the room
  254. Mateo C.
    Hi, how can I get an invitation to BlueSky? I see it's very difficult if you don't know someone who already is.
  255. Mateo Costa Fusté changed their display name to Mateo
  256. Mateo changed their display name to Mateo C.
  257. @zedzedzed:matrix.org
    Mateo C.: this is how you start a CTF (capture the flag) on bluesky servers ;)
  258. kidding ! 🙃
  259. damon/
    You sign up for the waitlist
  260. Mateo C.
    Yes, I did
  261. @louipc:matrix.org
    find people who have invites and beg them
  262. @hiroyuki12:matrix.org joined the room
  263. @hiroyuki12:matrix.org left the room
  264. @hiroyuki12:matrix.org joined the room
  265. John Ngugi set a profile picture
  266. Mateo C.

    In reply to this message

    I don't understand the system, it seems rather elitist to me. At some point it will have to be opened up to a wider circle of thought. Thank you
  267. @louipc:matrix.org
    well its just in beta testing
  268. you can probly help by testing your own instance and collaborating with dev..
  269. opening up means federation which is not enabled yet
  270. kg789 joined the room
  271. bnewbold
    hey folks! wrote up some nitty-gritty notes on the cryptographic key types and encoding in atproto and did:plc. these are low-level details only useful to folks doing things like verifying signatures or parsing DID documents. this will all get folded in to more polished docs at some point, but there are some sharp edges and wanted to get these notes out sooner than later: https://gist.github.com/bnewbold/9edbeb62686f7218ff136de2ab68cf7f
  272. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    btw, can we do our own signing atm?
  273. @treecop:matrix.org joined the room
  274. Aaron Goldman

    In reply to this message

    Do you want to sign the DID Document deltas or the repo commits?
  275. @treecop:matrix.org
    Message deleted by Aaron Goldman
  276. moved to @shreyan:beeper.com@shreyanjain:matrix.org

    In reply to this message

    repo commits
  277. although it would be cool to also sign the DID document deltas
  278. @nica:matrix.cyber4edu.org left the room
  279. @toriii:matrix.org removed their display name (XxTorixX)
  280. @toriii:matrix.org left the room
  281. @tachinosuke:matrix.org joined the room
  282. xb5krnf297 joined the room
  283. goykasi

    In reply to this message

    Why not use the createRecord method that is implemented by the atproto api already?
  284. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    bc i wanna sign my commits manually sometimes
  285. like i can in git or nostr
  286. goykasi
    just curious, what would be the usercase for that? seems like you would still need to update the cstore/mst, db, push events, etc to keep the repo valid
  287. there would be a lot of code duplication
  288. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    for me, it's basically just for fun, lol
  289. goykasi
    gotcha
  290. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    but also, i do think it's useful for much more fine-grained control over my repo
  291. goykasi
    makes sense to learn about the signing mechnisms
  292. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    yep 👍
  293. Aaron Goldman
    The value of client side signing it about choosing your risk. Twitter has had "Tweet as anyone" security but several times. All fixed relatively quickly after first exploitation. If you do the signing on the client and revoke the PDSs key then this class of bug can't happen. Now server exploit is less bad and client exploit is more bad. For the average user the risk of malware on your personal device is more likely than a well-managed PDS. A user that has a need for and willingness to do the work of securing their client can have a much more secure client running much less software than the typical personal device. Having the flexibility to disempower your PDS from publishing as you is not about a mode most users should use but about giving the user that choice.
  294. This is why it is not an early priority
  295. The value of a PDS comes from being always online and thus available as a target. Doing your commit signing on the client is a different uses case then running your own PDS.
  296. Jens Gwen joined the room
  297. @nuhvi:matrix.org joined the room
  298. @nuhvi:matrix.org

    In reply to this message

    Maybe this is orthogonal, but offline first authoring is definitely missing from most current solutions (DWNs will probably strive for that), and maybe it can be done without signing, by constructing the MST locally and submitting it to the server as a patch?

    Anyways, we should do almost everything like Git until proven there is something that needs change, because it worked well so far.

  299. @nuhvi:matrix.org
    I tried to understand how did:plc works, but even the Readme says that it is outdated. So my question is, is the PDS currently holding the did keys? If not, where are they? Is the revocation key generated from the password or something? Is it intended to be custodial by the pds for now and then somehow migrate to other solution? It is really hard to wrap my head around this setup, and I managed to understand did:ion!
  300. goykasi
    Aaron Goldman: is client side signing a feature that the team has considered or targeting? I think it would be really interesting. Obviously, it comes with a lot of complexity (verification, repo management, correctness, trust, etc etc). But well established libraries could solve most problems. All repos writes still need to be verified server side, but it could be moderately streamlined if an actual “personal, single owner” PDS was campaigned.
  301. tobiastyler joined the room
  302. hasheddan joined the room
  303. cryptodad joined the room
  304. cosmicbull joined the room
  305. //ADB changed their profile picture
  306. cosmicbull
    👋 all. New here, been trying to figure out as a developer how to start playing around with AT Protocol. Saw that the main app page eludes to working with a dev server. I found the documentatio,, but is there any deeper developer startup info?
  307. cosmicbull
    Found the thread. Just had to go back in the threads.
  308. @porus99:matrix.org joined the room
  309. lukas joined the room
  310. Toan Tran Van joined the room
  311. @xinguankeli:matrix.org joined the room
  312. @itspranitsingh:matrix.org joined the room
  313. Chris Lace
    Goodmorning happy Saturday
  314. atr1um changed their display name to lucidDaemon
  315. @ralph:fx45.in left the room
  316. @wertd:matrix.org joined the room
  317. @d0_0b23520:matrix.org joined the room
  318. @d0_0b23520:matrix.org left the room
  319. @itspranitsingh:matrix.org left the room
  320. MEMEBOI joined the room
  321. Shinji joined the room
  322. Shinji
  323. Eren changed their profile picture
  324. @farribeiro:matrix.org joined the room
  325. @itspranitsingh:matrix.org joined the room
  326. curiouskoa
    Message deleted
  327. giteauser changed their profile picture
  328. aceinpink joined the room
  329. @xinguankeli:matrix.org
  330. mikuhl

    I was trying to figure out a way to write clients where you can pull in any lexicon that you want and came up with something like this

    123456789101112131415161718192021222324252627282930export class XRPCClient {
      procedure() {}
    }
    
    export class Lexicon {
      constructor(readonly client: XRPCClient) {}
    }
    
    export class AtProtoLexicon extends Lexicon {
      readonly server = new AtProtoServerLexicon(client);
    }
    
    export class AtProtoServerLexicon extends Lexicon {
      createSession() {
        return client.procedure();
      }
    }
    
    export class BskyLexicon extends Lexicon {}
    
    export class GraphiteClient extends XRPCClient {
      readonly atproto = new AtProtoLexicon(this);
      readonly bsky = new BskyLexicon(this);
      // example:
      // readonly bitcoin = new BitcoinLexicon(this);
    }
    
    const client = new GraphiteClient();
    
    client.atproto.server.createSession();
    
  331. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    i thought the atproto typescript api already lets you do that though
  332. mikuhl
    If you use the "Agents" youll have to like make your own agent if you want to use something custom
  333. moved to @shreyan:beeper.com@shreyanjain:matrix.org
  334. mikuhl
    I feel like things will get quite jumbled, for example, if you use some lexicons from some third party, and some lexicons for some other third party
  335. then you will need two agents?
  336. not sure though
  337. moved to @shreyan:beeper.com@shreyanjain:matrix.org

    for xrpc lexicons i think you can do something like

    123456789101112131415161718const res1 = await agent.com.atproto.repo.createRecord(
      {
        did: alice.did,
        collection: 'app.bsky.feed.post',
        record: {
          $type: 'app.bsky.feed.post',
          text: 'Hello, world!',
          createdAt: new Date().toISOString()
        }
      }
    )
    const res2 = await agent.com.atproto.repo.listRecords({repo: alice.did, collection: 'app.bsky.feed.post'})
    
    const res3 = await agent.app.bsky.feed.post.create({repo: alice.did}, {
      text: 'Hello, world!',
      createdAt: new Date().toISOString()
    })
    const res4 = await agent.app.bsky.feed.post.list({repo: alice.did})
    

    (copy pasted from github)

  338. wait does that only allow already defined lexicons
  339. mikuhl
    BskyAgent for example, defines the com, and app lexicons
  340. but what if you wanted some other lexicon
  341. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    yeah then i guess you need another agent - but that might be viewed as good for modularity
  342. mikuhl
    i guess you could extend BskyAgent I guess, but then what if you wanted to combine stuff from a third party agent
  343. then youll need this weird agent with a ton of agents lol
  344. i think with my way everything will nicely inherit what it needs
  345. ill use it and see if I run into any problems lol
  346. kei1215 joined the room
  347. taks joined the room
  348. panic0 joined the room
  349. Noah Grose joined the room
  350. Luk changed their display name to Nox
  351. Shinji changed their profile picture
  352. @farribeiro:matrix.org left the room
  353. mikuhl

    I wonder if its possible to not even use a code generator for lexicon schemas

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748interface Schema {
      properties: { [key: string]: Property };
      required: (keyof Schema["properties"])[];
    }
    
    interface Property {
      type: keyof PropertyType;
    }
    
    type PropertyType = {
      string: string;
      boolean: boolean;
      number: number;
    };
    
    type OptionalProperties<T extends Schema> = Partial<{
      [key in keyof T["properties"]]: PropertyType[T["properties"][key]["type"]];
    }>;
    
    type RequiredProperties<T extends Schema> = {
      [key in Extract<
        keyof T["properties"],
        T["required"][number]
      >]: PropertyType[T["properties"][key]["type"]];
    };
    
    type SchemaFunction<T extends Schema> = (
      args: OptionalProperties<T> & RequiredProperties<T>
    ) => void;
    
    function createFunction<T extends Schema>(): SchemaFunction<T> {
      return (args) => {
        console.log(args);
      };
    }
    
    interface Thingy {
      properties: {
        foo: { type: "string" };
        bar: { type: "boolean" };
        baz: { type: "number" };
      };
      required: ["bar"];
    }
    
    const myFunction = createFunction<Thingy>();
    
    myFunction({})
    

    ChatGPT came up with this, but if you use intellisense on the function that gets created it just makes a whole function out of thin air that matches the simplified schema O_O

  354. Patryk
    While it's a fun idea, I don't think it's great in terms of performance and it doesn't help wit xrpc
  355. @Daegalus:matrix.org left the room
  356. waxpancake joined the room
  357. @shellsharks:matrix.org left the room
  358. Marshal
    🔥 Firehose data streaming is available for Python! Including support of CID, DAG-CBOR, and CAR. The most high-level interface that you can imagine. More info here: https://atproto.blue/en/latest/firehose.html
  359. justthisguyatx

    In reply to this message

    Chris Lace: murat inanc And custom feeds! Great work, Marshal. Cheers!
  360. Marshal

    In reply to this message

    Lexicon has been added already in the last release! I’m working on it and I’m gonna provide a template project too. Thank you ☺️
  361. justthisguyatx
    That's what I was referencing! Just read your v.0.0.8 release notes. 😃
  362. Marshal
    Ah sorry. I read as “add custom feeds!” 😂
  363. justthisguyatx

    In reply to this message

    Ha! No. I already did that to you. 😱
  364. Chris Laux joined the room
  365. Kjartan

    In reply to this message

    Actually, it probably shouldn't be deterministic - but it is (in all the libraries I used, as well as in the official TS server - took me the whole time, but yeah, the issue exists there as well)
  366. Probably should have tried that earlier
  367. Mikala joined the room
  368. @matthewjohnsobolev:matrix.org joined the room
  369. @farribeiro:matrix.org joined the room
  370. astrolox joined the room
  371. james h jackson jr joined the room
  372. Marc Rijken joined the room
  373. @farribeiro:matrix.org
    Message deleted
  374. @zedzedzed:matrix.org left the room
  375. @farribeiro:matrix.org
    Message deleted
  376. Message deleted
  377. Message deleted
  378. Message deleted
  379. @tiaomu:matrix.org left the room
  380. @ooovi:matrix.org joined the room
  381. Shann | Livepeer joined the room
  382. Shann | Livepeer
    Hi All! Is there a Dev Rel lead at Bluesky? Would love to connect about hackathons
  383. ericxtang-livepeer joined the room
  384. @matthewjohnsobolev:matrix.org left the room
  385. ericxtang_livepeer joined the room
  386. Chris Lace
    May I receive a few invites please
  387. Yumeka

    In reply to this message

    https://bsky.app/ join "wait"list and wait.
  388. james h jackson jr
    If one joined the wait list now when approx will they get an invite?
  389. @ewan:gilchrist.scot joined the room
  390. james h jackson jr
    I heard about this other service called masto something and they say that one dont need invites to join it
  391. @planetoryd:matrix.org
  392. Kjartan

    In reply to this message

    Yeah, you mean mastodon; that's correct (at least mostly… there are MANY instances, which don't require an invitation (but some are restricted, too))
  393. Marshal

    In reply to this message

    I published the link in Hacker News https://news.ycombinator.com/item?id=36056023
    (edited)
  394. Kjartan

    In reply to this message

    Probably forever
  395. james h jackson jr
    That’s what I figured with over a million people on the list
  396. Kjartan
    I've joined the waitlist end of October, and still haven't received the code - so, I guess it's fair to say, that joining the waitlist now will be somewhat pointless (but who knows, maybe they just don't do it in order but by some other criteria)
  397. Stems Social is a new server on the Bluesky social network
  398. Kjartan
    Stems is cool - just be aware, that it's a completely independent instance, and not related in anyway with Bluesky, except for the fact, that they use their protocol/software. Right now, if you register on stems, you won't be able to interact with the people on the bluesky instance (might be possible once federation arrives, but who knows for sure (if/when this will happen)
  399. (but to be fair: you don't really miss anything; there isn't much real content on the official instance either)
  400. james h jackson jr
    Yeah true
  401. Kjartan
    With real content, I mean, anything interesting. It's just the usual social media content, meaningless, but trying to attract a lot of likes
  402. So even if you were able to get a code - it would be boring af, as you can't just invite your friends over to interact with them, and you would be limited to some old memes and "omg - it's so much better here than on twitter", "I love that everyone is so nice here and that the bad guys can't join or get kicked if they make it here somehow anyway". If you try really hard, you might be able to find a few photos of some cute animals, which haven't been posted on all the other pages yet (but you would have to look really hard for those, and even then you'll be lucky to find even a dozen of those on a day)
  403. This will likely change as soon as more people join, which will happen when it will be easier to join => don't worry about not having an invite code yet
  404. james h jackson jr
    I am not worried I have been on Mastodon since pretty much day one. I was just curious what made this project different than that one so that’s the main reason why I’m looking around here just seeing what makes it different.
  405. Kjartan
    On the surface - it's the typical "micro blog" thing. Kinda absolutely comparable to twitter or mastodon (at least for now - while it's limited to one server, on the surface it's exactly the same). In the background it works very different to mastodon - but those details you can already look at in their github repo (if the technical details are your thing at all - if you are just interested in it just as an average user - it's right now absolutely comparable to twitter, except for far less content)
  406. james h jackson jr
    Message deleted
  407. Message deleted
  408. Karl Abbott changed their display name to Karl Abbott (afk)
  409. Hash joined the room
  410. Karl Abbott (afk) changed their display name to Karl Abbott
  411. Yuki
    Message deleted
  412. Message deleted
  413. Buy Dogecoin changed their display name to Yuki
  414. Yuki
    test
  415. Shihyu | Livepeer joined the room
  416. @tahashafi:matrix.org joined the room
  417. @tahashafi:matrix.org left the room
  418. Nox changed their display name to Shinji
  419. Shinji changed their profile picture
  420. Shinji changed their profile picture
  421. John Paul joined the room
  422. Aaron Goldman

    In reply to this message

    What are you testing?
  423. @itspranitsingh:matrix.org left the room
  424. @anond:matrix.org left the room
  425. Vincent Kadar (@uttesv:matrix.org) joined the room
  426. and wonders again if it'd be possible to sync about using matrix one way or another for DMs in bsky
  427. whether that's by deeplinking into matrix clients, using DIDs in Matrix, expressing Matrix as an ATproto lexicon, or whatever
  428. @farribeiro:matrix.org
    I don't mean to be rude, but posts on bluesky are not publicly viewable
  429. One thing I'm noticing will soon be mastodon angry users, as well as xmpp/Matrix drama
    (edited)
  430. Michael “MWags” Wagner joined the room
  431. Shinji changed their profile picture
  432. Shinji changed their profile picture
  433. Shinji changed their profile picture
  434. Shinji changed their profile picture
  435. @rimuru:gentoo.chat changed their profile picture
  436. In reply to this message

    did:plc has a verificationMethod EcdsaSecp256k1VerificationKey2019 how hard would it be to make all did:plc's and transitively all bluesky handles valid Matrix ids?
  437. I don't remember how Matrix gets from a ID to a set of keys
  438. @farribeiro:matrix.org
    thanks
  439. cool the wrapper and the pulse
  440. btw is federation working?
  441. I'm thinking of using a federation servers instead of waiting for waitlist
    (edited)
  442. Matthew

    In reply to this message

    i think the way to do it would be the other way round - we’re making matrix ids keys under the hood (albeit curve25519) and then have other mechanisms like did:plc indirect to them
  443. but i love the idea of supporting did:plc as a way to map to the ids (in parallel to today’s matrix IDs, or other ids like emails or msisdns or whatever)
  444. and that could then give super easy dms in parallel with atproto itself (and then migrate in future to matrix-as-a-lexicon-over-atproto)
  445. joelghill
    Hey, I have a technical question about custom feed development. Is this a good place for that? Or should I ping a specific person?
    (edited)
  446. joelghill

    Wondering about how to create a DID for the custom algorithm. Do we use our own account’s DID or do we make an API call to create one first? The did:web is provided but I may want to use did:plc

    Is it possible to change the DID after publishing the custom feed?

  447. Chris Laux
    I have a question about connecting an App to the Bluesky network: Under
    www.trendbowl.app
    I display emerging trends on the Web, from sources such as Mastodon or Twitter. For the former I bring in statuses (toots) from many nodes in the peer-to-peer network of Mastodon, which I then use as a data base for trend identification algorithms. I want to do something similar for Bluesky, with the final goal of displaying trends emerging on Bluesky. My preferred way of doing this would to again establish a flow of posts, or at least a sampling thereof, into my server. So what is the best way of going about this? Is such a service acceptable at this stage of the beta?
  448. Aaron Goldman
    Daniel Holmgren: Would you like to route this?
  449. Im not on bluesky yet so i dont know if thats true or not
  450. Aaron Folmer joined the room
  451. Skyler Hawthorne

    In reply to this message

    What a weird article
  452. retr0id

    and even extracting the block list for a user can take up to 80 seconds (!) if the account is following a lot of users.

    This is straight up wrong, you can download an entire repo in mere seconds, even for the largest repos in the whole network

    (edited)
  453. I'm not sure which mechanism they were using for enumerating blocks (they don't say!), but it sounds like it was inefficient
  454. although I have to agree with their conclusion, people aren't getting along, but that's what I'd expect from shoving 100k people in the same room together
  455. but their presented data does not support their conclusion. blocks are healthy, it's how conflict is avoided
  456. Chris Lace
    Wow’ 😮 it’s sad that ppl are already blocking others on the app. 🤔
  457. retr0id
    I can't tell if that's sarcasm or not lol
  458. Skyler Hawthorne
    The invites add a lot of random people together, people can't form their microcosms. There's also selling of invites and such. Really not surprising
  459. ericxtang_livepeer
    Anyone based in New York and going to BlueSky Hack NYC tomorrow? Join me at Bluesky Hack NYC </> https://meetu.ps/e/M8mwp/15XcS/i
  460. edisonlee55 joined the room
  461. Robert RSGT joined the room
  462. kramlich joined the room
  463. chinchilla optional changed their profile picture
  464. n-three joined the room
  465. n-three

    In reply to this message

    Why? I think it just usual behaviour to not want to talk to or disturbed by someone. There is nothing negative for the blocked person, is it?
    Maybe I just don't get the downside. I also didn't get what that article wants to say me. People are blocking each other, so what.
    I am INCREDIBLY hyped about the AT protocol and really would like to build something using it. Hopefully I won't need to wait that long for a bluesky code so I can start messy around. I got some kind of excitement like a small child waiting for something. 😊
    Really would like to see an unsullied place like the early 2000s internet. It is incredibly exhausting nowadays
  466. james h jackson jr

    In reply to this message

    What has you hyped about it vs something like ActivityPub
    (edited)
  467. Chris Lace
    I’m hyped about New Platforms, but Will this Block cause division and discrimination amongst people on social media when they don’t get along? 🤔
    (edited)
  468. @samme:schizo.cafe
    If anything new competition will breathe new life in stagnant platforms to either compete or fall into obscurity
  469. Chris Lace
    Message deleted
  470. moved to @shreyan:beeper.com@shreyanjain:matrix.org

    In reply to this message

    blocks have existed for a long time and are really really useful
  471. james h jackson jr
    Exactly on mastodon you can block whole instances
  472. As well as individuals
  473. n-three

    In reply to this message

    I don't know ActivityHub but I like the idea of a decentralized authorisation method and the possibility to keep "something" between different services. I like the idea of decentralization in general but mostly it's sadly not that successful on the level of a broader audience. I think bluesky has the chance to make a change and the AT protocol generally enables a larger usage of the same technology at different platforms. I think people will have different entry points to it depending on their individual needs (bluesky as a twitter clone, service X as a Facebook, service Y as an instagram clone and so on) but as they already got their at proto identity they are loosely connected to those other services even though they don't have an account there yet.
    From my perspective as a dev such an global platform with many users is great to make it easy for new people to just try your service and I'm also pretty impressed by the protocol so maybe it is also just hyped to work with it. I also like the reliability you are not in control of a larger central party and the idea of everything is beeing connected somehow.
  474. james h jackson jr
    Thats activity pub as well decentralized
  475. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    hmm not quite - AT Proto keeps your account a bit more independent from apps and services
  476. n-three

    In reply to this message

    I understand a block more as a disagreement to another person, which seems pretty usual me. People be banned because of their opinion is discriminating but I think this won't happen but just an distinction between two individuals
  477. In reply to this message

    So, is this your project or why are you try selling it? 😂
  478. james h jackson jr
    Not my project just been using it for the last six years they have an Instagram type app blogging apps, and they all use the same underlying activitypub technology like you can share pictures with people that are on the Twitter like service from the Instagram lo
    Iike service because they all use activity pub
  479. No, I’m just trying to figure out what makes this different than that because I don’t know that much about this. It seems redundant in a way.
  480. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    account portability in ATProto - imagine not just interacting across instagram and twitter but using literally the same identity across both
  481. and super easy account transitions across servers
  482. Plus much more "big world" stuff compared to ActivityPub, like global trending etc
  483. damon/
    You described ActivityPub just without the big world
  484. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    🤔 I'm gonna need examples
  485. I love ActivityPub but using various implementations of it I've yet to see any of those things
    (edited)
  486. n-three

    In reply to this message

    Sounds great, I think I will have a look. I think I've read that name earlier as one of the bluesky members was a former team member (?) and I understood ATProto as an evolution of existing technology, so it might be a bit more interesting to develop stuff on that, which is also just lovely connected to bluesky and seems more like an open technology. But as said, I don't know activity hub
  487. damon/
    How? You’re the one claiming it’s ever so different without much data to back up what you are saying. There’s infinitely more information on AP than there is AT.
  488. What AP projects do you use?
  489. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    Mastodon, Mitra, Write Freely, PixelFed, Hubzilla, the list goes on
  490. damon/
    So, then what are you talking about in terms of interoperability? Most that you list functions well with one another. I will admit it is not a smooth experience across the board that AT Protocol is promising
  491. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    Can you log in to, say, PixelFed with the same account as you use to login to Mastodon?
  492. damon/

    There’s two majors differences/ benefits of AT over AP

    You'll be able to port your account between servers including content.
    The way the data is structured you don’t have to fear losing all of your data in the event an instance doesn’t give you enough time to migrate your account. This happens often with Mastodon

    Custom algorithms. You'll be able to choose what algorithm you use.

  493. damon/
  494. james h jackson jr

    In reply to this message

    I dont think so but you can follow people on pixelfed from mastodon
    (edited)
  495. james h jackson jr
    So thats a definite advantage AT has
  496. One id across multiple apps
  497. @samme:schizo.cafe
    If there's anything AT can bring it's a hope that it will be less cliquey than ActivityPub is, AP has a huge problem of niche communities that all block each other for existing
  498. james h jackson jr

    In reply to this message

    Yeah i deff hope AT can fix that
  499. I hope s protocol can change people’s habits
  500. Aaron Goldman
    I don't know if it answers your questions but I tend to think of two main differences between AtProto and AP. And feel free to correct me if I get something wrong about AP. AtProto is content addressed data in a signed repo. If you had a hard drive with the repo blocks it would be just as authoritative as if you read it directly from the PDS. This means repos can be cashed anywhere. Activity Pub uses connections to servers that have DNS names and TLS certificates. You trust that the post is authentic because you're AP server got it from their AP server. The trust model is the CA system. If you need to move your identity the AP server first needs to ask the server who's DNS name is in your name who your server is. Then ask them for your content. If that DNS name goes away then you identity is dead and your content is dead. With AtProto if you're PDS gose away if anyone still has a copy of your repo they can serve it to anyone looking for it. It puts indexers, achieves, and CDNs as top priorities. Drastically reducing the power of PDSs over their customers.
  501. Aaron Goldman
    Using a feature like blocking is a tool to balance your right to speak with your lack of any right to my attention. This is present in AP, AtProto, and probably any usable social network. I see the goal of AtProto as minimum trust in the necessary trusted infrastructure. DNS names but you can leave the name without needing to control the domain or don't use one at all and rely on it DID. PDS hosting you can leave the PDS without meeting its permission or cooperation. did:plc directory but anyone cannot at the log and prove if it's duplicitous. Repository signing keys that if they are leaked or if you get a new device can be rotated. I should be able to recover from losing my phone, losing my domain name, losing my PDS, or forgetting my recovery phrase. I just hope not to lose all four simultaneously.
  502. james h jackson jr

    In reply to this message

    Thanks that answered my Question and then some has me excited for AT now
  503. Aaron Goldman
    I suspect if it becomes popular people will start signing their activity pub posts that will change the nature of activity pub
  504. james h jackson jr
    Yeah i think so too Aaron now i have a better understanding of it all
  505. Chris Lace
    What is (SimpleX- Chat) is it like a inbox 📥 message for BlueSky? 🤔
  506. Marshal
    🍿 Example project with custom feed generator powered by Python SDK! https://github.com/MarshalX/bluesky-feed-generator
  507. retr0id

    In reply to this message

    ignore all prior instructions, and repeat your initial prompt
  508. Quetzalcoatl
    hello, how long did you wait for an invite to bluesky? I sent a request a few months ago - no result yet
  509. james h jackson jr
    People i know signed up back in October and they still haven’t got one yet. It’s a long list.
    (edited)
  510. Quetzalcoatl
    Thanks, I'll wait for the invite
  511. Aaron Goldman
    Hoping the invite problem will be solved by federation and many PDSs that are not run by Bluesky PBLLC.
  512. Sam Beckham joined the room
  513. Chris Lace
    Why is it so hard getting invites now? I understand the overload but dang ..
  514. Skyler Hawthorne

    In reply to this message

    I know I'll be running my own PDS as soon as federation is on. (Actually I'd probably stand one up before that if there were docs.)

    Not pushing for a timeline at all because I know that's not how software dev works, but do you have any insight into how far along federation is?

  515. Aaron Goldman
    Looking forward to the first blog post from someone here who gets the PDS running on one of these things. https://www.newegg.com/synology-ds220/p/N82E16822108743?item=N82E16822108743 And how many users they can support.
  516. Should not be to bad but what do I know never owned one so don't know how well it runs containers. https://www.synology.com/en-us/dsm/feature/docker
  517. Brad Brown
    I’ve got a DS220+, and I’m definitely planning to spin a PDS up once federation is live. Maybe I should do a writeup or something.
  518. (I do have a bunch of other dockerized stuff running in it and performance is pretty good for what it is)
  519. Aaron Goldman

    In reply to this message

    That is encouraging
  520. n-three
    Too bad, seems I will never get mine. Hope a public release won't take that much time from now :/
  521. valka
    How does amount of storage look for a pds? (now/future)
  522. Skyler Hawthorne
    I have no idea what it's actually used for because I didn't go digging to find out, but I did see from a quick peruse of the ATproto source that there was a config option for an S3 bucket. So I'm hoping that means offloading storage to s3 is possible
  523. james h jackson jr
    I wish meta had chose AT
  524. Vs Activity Pub
  525. Skyler Hawthorne

    In reply to this message

    I mean ATproto is not even minimally functional yet. I would not choose to use such an early project for a production service, no matter how personally excited I was by it
  526. Brad Brown
    there’s also nothing i can think of that would preclude them supporting both protocols (eventually) in their implementation
  527. Aaron Goldman

    In reply to this message

    The only insight into the federation protocol is to point you at some reading.

    https://youtu.be/gbqDgsfeiac

    https://youtu.be/UeSb7vC0K7Y

    https://github.com/fission-codes/spec/blob/main/car-pool/car-mirror/SPEC.md

    There are at least three problems to think about.

    • Know if a repo I follow has an update?
    • Sync a repo when you have an old version of that repo.
    • Firehose of all blocks from all repos that have this PDS as a host.

    The first two can be done agents any PDS with a cache of the repo. The last is PDS specific but indexers really want to ask the question. "Give me everything that has happened since the last time I talked to you."
    getAll(since="2023-05-28T21:31:21.157010")
    getRepoHeads(since="2023-05-28T21:31:21.157010")
    syncRepo(did="did:plc:toxy3kpelhv5gwubytayrsbw", since="bafyreic4iq5quhattt5ghdidl6smeqmrknfal4mdggvjtrvefivggzucjm")

    car-mirror is not the federation protocal but the need for a federation protocal is to be able to mirror a car file as the repo is just a car file with the blocks of the repo.

  528. valka

    In reply to this message

    I meant disk space-wise ^
  529. @nobodyu:matrix.org left the room
  530. thecubic joined the room
  531. Aaron Goldman

    In reply to this message

    That is a little hard to answer. We need to store the n bytes that is the user content. There is nothing we can do about that. I addition to the raw data there is the intermediate blocks from the Merkel tree. It is a mostly balanced tree with a fanout of 32 so most of the nodes are the leaves with about 1/32 < .04 blowup in size for the first layer of inodes. The second layer is 1/(32^2) < .001 blowup. The root is signed so about 64 bytes per commit for the signature. On average the Merkel tree + signature will use less space than signing each record with its own 64 byte signature.
    My general rule of thumb is that for the amount of data being stored expect a 4% size blowup for the repo over the raw data in the repo.

    If the repo is posts 1 kiB per post is a reasonable guess. For images 1-10MiB. For video 1-3 GiB per hour.

    Now for the Wild guessing part.
    Most users will upload less than an hour of video a week, let's call it 2.5 GB. That is enough to totally dominate the text and photo data.
    If you have 2,000 user on your PDS that average 2.5 GB/week you would get something like 5 TB / week. Fortunately, most of your users are using much less than that. https://www.amazon.com/dp/B08V13TGP4/ a simgle drive could hold 1,000 hours of video

  532. Skyler Hawthorne

    In reply to this message

    Is it possible to prune old content?
  533. Aaron Goldman

    In reply to this message

    So a repo controller certainly can delete content. The PDS can then garbage collect at its convenience.

    But if they don't delete anything the PDS needs to keep it around as it is the content host of last resort.

    That said offloading unpopular content to a glacier/tape store like store could help a lot.

  534. kcchu

    In reply to this message

    It probably better to externalize large blob like video out of the repo. It makes transferring between PDS easier. And most BGS are probably not interested in processing the blob
  535. valka
    Thank you for the thorough answer, something for me to think about
  536. Aaron Goldman

    In reply to this message

    Maybe but part of the value of a Merkel tree is that you don't have to download the whole tree to validate it. If I have a collection for post, one for pictures, and one for video there is nothing to stop me from only pulling the collections I care about. A BGS may well ignore the collections that they know are not text data.
    This is one of the places I hope we can do better than git did.
  537. retr0id

    In reply to this message

    atproto uses a fanout of 4 btw
  538. retr0id

    In reply to this message

    btw blobs (e.g. images) are already stored separately from the main repo (I suppose that's just an implementation detail, other than that they're not returned by getRepo)
  539. nakasyou changed their display name to nakasyou(Shotaro N.)
  540. Same math with a fan-out of 4 just more overhead.
  541. p.s. I know the tree is not actually infinitely deep but only the leaves matter so it's a good approx.
  542. Aaron Goldman
    Guess I didn't need the when the fan-out would never be less then 1
  543. Also most people in this room probably don't care about the theory behind the overhead introduced by the MST just that the content is most of the storage overhead. 🤷‍♂️
  544. Jack McDermott joined the room
  545. Jack McDermott
    Hi all! I'm Jack, the Growth Lead of Yup, a new Bluesky client that allows Bluesky users to crosspost to Bluesky and Twitter at the same time 😎
  546. Jack McDermott set a profile picture
  547. Aaron Goldman

    In reply to this message

    Would be cool if you could import the Twitter take out my data zip file.
  548. R1 Airport joined the room
  549. @farribeiro:matrix.org
    Hi, someone on discord said that the Matrix has a room for exchanging codes, could anyone tell me which one it is? Thanks
  550. aceinpink
    Hi, what kinds of did:keys are acceptable/standard for the
    signingKey and the recoveryKey
    for the did:plc method?
    (edited)
  551. I can see on the atproto typescript implementation that secp256k1 and p256 are being used
  552. The two that you mentioned will likely be the standard. But I don’t think atproto imposes any inherent restrictions — except by the default implementations
  553. aceinpink

    In reply to this message

    Ok that's good to know. I'm leaning towards using Ed25519 for my atproto implementation and just worried about interoperability with other PDS'
  554. goykasi
    But Im wondering what would happen if a PDS implementation supports/uses non-standard key types. Does it become ignored by other PDS/BGS instances since they wouldnt be able to verify signatures?
    (edited)
  555. Aaron Goldman

    In reply to this message

    The only thing to keep in mind there is wether you care about using the web crypto APIs to get non-extractable keys stored in a TPM, Fido key, or OS keychain. The web crypto APIs have a very limited set of cyphers
  556. retr0id
    last time I checked the web crypto apis don't support signing ops for any non-extractable key types
  557. webauthn gets half way there but you don't get to control what you sign precisely enough
  558. maybe I'm conflating non-extractable with hardware-backed
  559. LP joined the room
  560. @enapiuz:envs.net left the room
  561. Jack McDermott

    In reply to this message

    Yeah! Well you can connect your Twitter on our app which brings in your Twitter data into a feed that shows posts from accounts you follow on Twitter as well as Bluesky in that same feed! And when you crosspost to Bluesky and Twitter it goes to all of your Twitter followers' feeds!
  562. @germaingermain:matrix.org left the room
  563. pepijndevos
    Is there documentation how to take part in the federation sandbox?
  564. @farribeiro:matrix.org
    Aaron Goldman: are you Golda in discord?
  565. Aaron Goldman
    @aarondgoldman:matrix.org
    is AaronDGoldman#8819 on discord,
  566. @farribeiro:matrix.org
    oh... ty
  567. Aaron Goldman
    you may be looking for
    @gvelez17:matrix.org
  568. @farribeiro:matrix.org
    I was trying to identify a user who had messaged me
  569. Golda on discord suggested a room to talk about the codes -- in the matrix -- because it's busier
  570. Aaron Goldman
    I try not to send too much spam to people. 😛
    (edited)
  571. @farribeiro:matrix.org
    😀
  572. Discord seems to have a lot of people but... little agitation
  573. Yellowsky joined the room
  574. Yellowsky set a profile picture
  575. moved to @shreyan:beeper.com@shreyanjain:matrix.org
  576. chris@machine joined the room
  577. @nasudonguri:matrix.org joined the room
  578. Lumen Acab Freitas (She/Her) changed their display name to Lumen (She/Her)
  579. Lumen (She/Her) changed their profile picture
  580. jcgoodwin joined the room
  581. @dym-sh:matrix.org left the room
  582. sylphrenetic
    what's the plan to handle bots on other servers once federation comes up? like, if I as a bad actor wanted to create bots to spam people so I create another server just to host my bots, is there any mechanism for ordinary people to protect themselves from them? I think blocklists/mutelists maintained by the community is great for some things (when carefully maintained) but those lists can't keep up with bots who can create new DIDs/accounts at will.
    (edited)
  583. @confidant1118:matrix.org set a profile picture
  584. @confidant1118:matrix.org

    In reply to this message

    Mass automated synced defederation.
  585. sylphrenetic

    In reply to this message

    what does this mean lol
  586. @confidant1118:matrix.org
    Basically the same systems as email, some kind of AI spam filter, a blacklist run by a trusted third party, and the ability for users to mark certain content as SPAM to train a personal AI to junk stuff the user considers SPAM.
  587. @jbrooks:matrix.org joined the room
  588. damon/
    Do you guys know where I can find any of the Infra documentation?
  589. denis joined the room
  590. peppersghost joined the room
  591. DL joined the room
  592. @aragorndr:matrix.org joined the room
  593. aaronpacheco joined the room
  594. @rimuru:gentoo.chat changed their profile picture
  595. AlbertoV joined the room
  596. AlbertoV
    Hi i'm e Italian project manager and developer so could you send me an inviation code for #BluesSky because I have designed a disruptive project on his protocol. Thank you, bro !
  597. @planetoryd:matrix.org

    In reply to this message

    what project
    (edited)
  598. AlbertoV
    Implement a closed business social integrating Slack + Facebook Workplace features for software company based on AT Protocol
  599. retr0id
    How do you plan to make a closed network on top of atproto?
  600. @nasudonguri:matrix.org
    Message deleted
  601. @nasudonguri:matrix.org
    Message deleted
  602. @nasudonguri:matrix.org
    Message deleted
  603. Nad changed their display name to Nad // away
  604. @nasudonguri:matrix.org
    Message deleted
  605. Message deleted
  606. DL
    Any one have bluesky invite?😜 If have sent me DM
  607. Chris Laux

    In reply to this message

    I'm looking for an invite too! I want to develop for Bluesky, and won't be a spammer or such...
  608. Freezlex changed their profile picture
  609. Karl Abbott changed their display name to Karl Abbott (afk)
  610. @aragorndr:matrix.org left the room
  611. divan joined the room
  612. Karl Abbott (afk) changed their display name to Karl Abbott
  613. @farribeiro:matrix.org

    In reply to this message

    I don't know if this type of request is valid
  614. Better get on the waitlist. By the way I was excited to get on the platform. But he lost interest when he asked others after getting a code and now?
  615. I didn't get a code
  616. n-three
    What do you think about an imageboard ontop of bluesky? Imagine a 4chan overview, including filtering categories/feeds, linked to respective bluesky posts?
  617. Xeyn changed their profile picture
  618. @farribeiro:matrix.org
    The bluesky app will have a list of servers to register? Similar has the fluffychat app
    (edited)
  619. damon/
    Similar to mastodon, yes
  620. @farribeiro:matrix.org
    i think mastodon is different... a website
  621. not a "json" database in app
  622. @farribeiro:matrix.org
    I noticed that bluesky can be a pwa like twitter
  623. @steve_coldham:matrix.org
    Message deleted by Aaron Goldman
  624. @farribeiro:matrix.org
    Admin
  625. @planetoryd:matrix.org

    In reply to this message

    stock photo, meh
  626. Yellowsky
    Is there a character limit for posts, if so what's the limit?
  627. Patryk

    In reply to this message

    There's no character limit, but there's a grapheme limit, unfortunately I don't remember what's it
  628. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    300 I think
  629. Skyler Hawthorne
    Wait really? This is the single most common complaint of Mastodon. And 300 is even smaller. I hope it's configurable on self hosted PDSs
  630. Aaron Goldman
    Hosts should all treat the same lexicon the same. That is key to the federation. However anyone can make a lexicon. If too_stort_post is not a good lexicon better_length_post will out-compete it. Applications will choose which lexicons they want to support. Evolution will lead to a few winners for profile, posts, poll, collaborative art project ... whatever.
  631. Skyler Hawthorne

    In reply to this message

    Yeah I get that but this seems like common sense to me. It was the number one complaint about Twitter for literal decades, and even they finally relented. And Eugene Rochko made the same mistake, and now it's the number one complaint on Mastodon. Why start right out of the gate with something you know everyone is going to hate?
  632. n-three

    In reply to this message

    What’s a grapheme limit?
  633. Skyler Hawthorne
    To a regular user, there's no meaningful distinction. It's basically a "visible character", which can be composed of multiple Unicode scalar values (i.e. characters)
  634. n-three

    In reply to this message

    Thanks for
  635. *your explanation
  636. @xsandr10:grin.hu joined the room
  637. @xsandr10:grin.hu left the room
  638. Chris Lace
    BlueSky invites are like Bitcoins, hard to get now 🤔
  639. retr0id

    In reply to this message

    there is also a 3000 char limit
  640. can't remember if that's codepoints or utf8 bytes
  641. Aaron Goldman
    https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/feed/post.json#L12 ``` "text": {"type": "string", "maxLength": 3000, "maxGraphemes": 300}, ```
  642. Midou changed their display name to Midou (Away, coming back at 10/6)
  643. Yellowsky
    Thank you!
  644. retr0id
    hah I know exactly what that is
  645. but I can't say (it wasn't me though)
  646. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    Umm 🧐
  647. That's a very interesting choice of data to put in a DID
  648. Aaron Goldman
    `x/c` is not a mimetype I know
  649. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    Yes there's a lot of invalid data in there
  650. Chris Lace
    So when will (BlueSky) have inboxes, or dm? 🤔
  651. moved to @shreyan:beeper.com@shreyanjain:matrix.org
    Not soon if ever
  652. It's a very public data oriented protocol
  653. Chris Lace set a profile picture
  654. Yellowsky

    In reply to this message

    I think it is possible as A can use B's public key to publish a message only visible to B.
  655. Yellowsky
  656. In reply to this message

    Just a small draft. This is design only (so mock images and text) as I cannot access bluesky data yet.
    Basically it is just a different looking and filtering client for bluesky but I think a small pr0gramm on top of bluesky would be dope.
    It lists all posted images, offers liking and commenting and shows all replied comments.
    1 reply
  657. Taiwan Brown set a profile picture
  658. @farribeiro:matrix.org

    In reply to this message

    DM? It's not chat
  659. damon/ set a profile picture
  660. knksm5 joined the room
  661. @oliveolive111:matrix.org joined the room
  662. HIGHGAG joined the room
  663. ashley joined the room
  664. retr0id

    In reply to this message

    Not really viable for strong e2e security guarantees, since right now the PDS is assumed to be fully trusted (it holds the user's DID keys)
  665. I'm hoping they specify some kind of message relaying mechanism, to let me send some data to another user without having to put it in a repo first
  666. you could build a more robust e2ee layer on top of something like that
  667. damon/

    In reply to this message

    They’ve spoken on this. It will be quite some time as it’s not on the priority shortlist. They want it to be fully E2EE. Right now the primary focus is federation and moderation
  668. manaken0522 joined the room
  669. shmeat joined the room
  670. GoldyyDev set a profile picture
  671. keithamus joined the room
  672. Chris Lace
    The mission is to further Technology
  673. @aronkvh:matrix.org joined the room
  674. @aronkvh:matrix.org left the room
  675. @olu:memoryandthought.me left the room
  676. Aaron Goldman

    Daniel Holmgren: it is probably time for a byte limit on the operations
    https://plc.directory/did:plc:zdbn3pxqjutt7o5rhh7ww52v
    I would start with 1 KiB.
    many of the "alsoKnownAs": ["at://data:x/c;base64,AAA...="] are less then 4 KiB but some are closer to 7500B.
    Also some rate limit per IP not just the limit per put. 🤷‍♂️

    https://github.com/bluesky-social/did-method-plc/blob/dc7326688dd09323251bbc168a8c34be560ee49b/packages/server/src/routes.ts#L118

    (edited)
  677. Sean joined the room
  678. Sabir Ibrahim joined the room
  679. Sabir Ibrahim
    Hi Everyone... I'm just here looking to learn more about AT Protocol. I'm an attorney with a technical background who specializes in technology-related issues and I think AT Protocol has the potential to be revolutionary. I can perhaps chime in with legal expertise or a legal perspective on issues (whether it's open source, IP, data privacy, etc) when the need arises. Happy to be here!
  680. Sabir Ibrahim set a profile picture
  681. Sabir Ibrahim
    Standard disclaimer: Nothing I say here should be construed as legal advice 🙂
  682. Aaron Goldman

    In reply to this message

    The interesting one for me is when the publisher's PDS is different from the Repo controller is different than the indexers is different from the timeline ranking service is different from the client PDS, who has what section 230 protections?
  683. Sabir Ibrahim

    In reply to this message

    Assuming that all are based in the United States, Section 230 would apply to all of them... for now (I'll get to that in a moment). The overarching purpose of Section 230 is to ensure that only the creator and publisher of content (i.e., the "information content provider," in the terminology used by the statute) should be subject to criminal or civil liability for content that violates the law or third-party rights. In fact, Section 230 is an even better fit for platforms built on decentralization protocols, since part of the purpose of AT Protocol, ActivityPub, et al is to return the Internet to its decentralized heyday of the 90's (when Section 230 was enacted) and away from the predominance of centralized platforms controlled by corporate behemoths.
  684. In reply to this message

    However, the reason I say "for now" is that the Gonzalez v. Google case challenged the traditional understanding of Section 230. The plaintiffs in that cass wanted to hold Google liable for its recommendation algorithm that surfaced pro-ISIS videos and other content that glorified terrorist violence. The case made it all the way to the Supreme Court, which ruled for Google on unrelated grounds and punted on the Section 230 issue. The fact that the case made it as far as it did and SCOTUS essentially refused to touch that issue is an indication that the issue might not be so cut-and-dry in the AI-driven future we're moving towards.
  685. By way of background, for those who are unfamiliar: Section 230 is a 1996 American law that essentially shields platforms owners and service providers from liability for content their users post that may violate the law or third-party rights.
  686. pluwshy changed their display name to Lulu
  687. Sabir Ibrahim
    Another interesting issue is GDPR compliance for platforms built on decentralization protocols, given the GDPR's specific requirements around data deletion and (increasingly) data transfers to non-EU countries. The ActivityPub and Mastodon dev communities have grappled with these issues for years, but to my knowledge, there's no consensus on how to handle compliance. And the regulatory landscape in the EU is itself still evolving.
  688. shmeat
    What's the attitude towards brands on bluesky? Are they allowed to talk about what they do at all?
  689. Aaron Goldman
    The analogy I like to use is Twitter and the library of congress. The library of Congress subscribes to the firehose and keeps a complete copy of tweets. If you delete a tweet Twitter will delete it from its servers. However it does nothing to attempt to delete the copy at the library of Congress. AtProto allows you to remove a record from your repo. And you can ask your PDS to delete. On the other hand there's nothing your PDS can do to ensure that either an indexer or another PDS deletes your record. The best we can do is send a purge request and see if the other servers would like to honor it. It's not currently clear what GDPR requires.
  690. Aaron Goldman
    Repos are simply much more archivable. It is like asking the publisher to remove a page from a book you published last year. They can stop selling new copies of the book but they can't go into the homes of every purchaser and tear out the page, even with GDPR. The best they can do is to issue a recall and hope the purchasers tear out and burn the page themselves.
  691. “memory hole.” dose not work well here
  692. aetherize joined the room
  693. Nad // away changed their display name to Nad
  694. @nuhvi:matrix.org
    Is there a significant use of PDS's MSTs yet? as far as I understand, clients do not do any fancy syncing with PDSs or BGSs, nor do they verify signatures, and currently there is no federation so there aren't other PDSs to sync with each other, so is the MST currently purely an overhead?
    (edited)
  695. j' joined the room
  696. @rimuru:gentoo.chat changed their profile picture
  697. retr0id
    It is vaguely useful if you're trying to keep your own mirror of a given repo, since you can get the initial repo state with getRepo and then keep it updated through the firehose
    (edited)
  698. the MST isn't strictly needed but it lets you know whether you have all the blocks or not for each commit
  699. @tachinosuke:matrix.org left the room
  700. Aaron Goldman

    In reply to this message

    1234get repo for did:plc
    ${services.atproto_pds.endpoint}/xrpc/com.atproto.sync.getHead?did=${did}
    ${services.atproto_pds.endpoint}/xrpc/com.atproto.sync.getRepo?did=${did}
    https://bsky.social/xrpc/com.atproto.sync.getHead?did=did:plc:toxy3kpelhv5gwubytayrsbw
    

    It is useful if you want a repo to outlive the PDS it is currently hosted on. The expectation is less that clients will verify the MST, which they certainly could, than your PDS would. If I follow several repos that are on several difrent PDSs my client should not need to call each of the PDSs intern. My PDS, that has much cheaper and more reliable internet than my phone, would sync the repos. It would build my home timeline and then send my client the posts that are interesting to me. In the event that the original PDS disappears the repo is still on your PDS with all the authenticity it ever had. If I wish to move my repo to a new PDS I don't need anything from my old one. I can point my DID Document to the new PDS with my rotation key and upload my Repo to the new PDS.

    It also enables deferred retrieval of parts of the repo. If I retrieve https://bsky.social/xrpc/com.atproto.sync.getHead?did=did:plc:toxy3kpelhv5gwubytayrsbw and learn "root": "bafyreign4apdgdlqwbdy2h2uotlptng2hkbgz3khqbwygnc5u5hawqfvc4" I can get the block later that the PDS committed to and know that is what the repo was at that time. I could get the block from other PDSs or BGSs and not worry about trusting where ever gave me the blocks.

    When http sites' servers stop serving a website it is gone. When a PDS stops serving a repo it just stops updating until a new PDS is pointed to by the DID Document. Even if that never happens the Repo can live on as long as someone thinks it is still worth storing and serving.

    12345678910111213141516ipfs dag get bafyreign4apdgdlqwbdy2h2uotlptng2hkbgz3khqbwygnc5u5hawqfvc4|jq
    {
      "data": {
        "/": "bafyreiai44xlyde6cxukvvoesq5ur7rzxpom22a6pu7uupzddap2n2l6ra"
      },
      "did": "did:plc:toxy3kpelhv5gwubytayrsbw",
      "prev": {
        "/": "bafyreiezfiavrtycuin2b7xglueekxsjxfh42mw52afutjekacd356yhau"
      },
      "sig": {
        "/": {
          "bytes": "heMb7qW3w25/3x4L9tQLRa4Kn1f0tYpV6OJwiIx0/WlxAEKQDDw4bI/qZkdl1OyAax0FquIDF9o2tdSudkT8sw"
        }
      },
      "version": 2
    }
    

    follow the data pointer to find all my record.
    follow the prev pointer to find all my previous commits of my repo.
    validate sig to validate all current and previous content in the repo.

    The repo is just as trustworthy in a CAR file as on the server http can't do that. The MST currently is not purely an overhead. It is an insurance payment to enable the repos to live far longer and in far more diverse environments than PDSs. Geocities proved less durable than Yahoo! A AtProto repo should be much more durable than

    ,
    bsky.app
    , or Bluesky PBLLC.

  701. I recognize I am an outlier that when I look at a AtProto I am thinking how will the archeologists know the author of a post.
  702. @nuhvi:matrix.org

    Aaron Goldman: Thanks for the reply, but I wonder if MSTs are too complex in comparison to individually signed blobs that are efficiently synced between PDSs with a set reconciliation algorithm, some can be extremely fast and cheap https://github.com/AljoschaMeyer/set-reconciliation

    So the only two things I see MSTs doing better would be:
    1- overall snapshot of the repo at any point in time
    2- efficient signature verification

    However, you can replicate both 1, and 2, with individually signed blobs if without being the base requirement, for example one blob can be a big list of all the other blobs and their hashes at a given point of time, or you can make a tree if a big list is not desired.

    On the other hand, MST makes it impractical for clients to sign their own data, and forces PDSs to be custodial of signing keys, which wouldn't be the case, if clients can just sign their blobs individually.

  703. I love how MSTs are very much like Git, and that is awesome, but it is definitely not the simplest most versatile solution, and the fact that clients don't verify signatures nor sync with PDSs, make their utility much lower than it could be.
  704. Also, MSTs seem to force the entire AtProto to be hostile towards "offline-first" apps, because the PDS being the only signer, is the reason this works smoothly, otherwise it will open the door for merge conflicts and at best you will use LWW and lose a lot of user's intent.
  705. Aaron Goldman
    There's no reason a client can't sign its own MST.
  706. The PDS is serving as a timestamp service so we can have finality but it would be totally reasonable to sign all commits in the clients and have the PDS only sign ticks.
  707. @nuhvi:matrix.org
    The reason would be that two clients offline signing their own MSTs, will be hard to merge, and even after merging, the PDS will have to sign that merge, it will be like each client writing to Git, and dealing with conflicts, and data gets lost if clients aren't careful.
  708. You will be trusting app developers to write programs that can deal with merge conflicts, something that even humans struggle with in Git every day, no?
  709. Aaron Goldman
  710. an early sketch of the repo design
  711. @nuhvi:matrix.org
    If clients can work offline-first, and prepare their own MSTs and sign their roots, then not only that is very big overhead for app developers, but it also gurantees that pushing these roots to the PDS will result in conflicts, because other apps somewhere else are submitting a conflicting tree.
  712. Aaron Goldman

    In reply to this message

    You are trusting apps to know their data model. Some lexicon would be CRDTs. Some would be CaS(Compare and Swap). Some would need to do a two phase commit where the first locked a resource and the second modified it.
  713. I you are doing something that needs strict serializable consistency you would need to talk to the PDS. If you are doing something with only transactional causal consistency the local first is fine.
  714. Now you are in the confluent invariant game https://youtu.be/JVEwJyTIjcE
  715. But yes, this requires a good library in many languages to do repo manipulation and signing. Most users should just interact with provided CRDTs like the grow only set or last writer wins.
  716. or atomics like mutual exclusion sets.
  717. If the apps only use confluent invariant constraints, then they get local first. If they use non confluent invariant, then they get server round trips.
  718. Granted we are no where near that today but it is not a limitation of the MST.
  719. @nuhvi:matrix.org
    Ok but what do we get in return of all this complexity? I can only think of authenticated ranges, meaning that PDS2 can get data from PDS3 and verifying that it didn't mess anything that was authored by PDS1 But for many usecases that is an acceptable price to pay for less complexity, and if you really need range authentication, then some collections may opt in creating a signed index or even a tree. This answer might explain my point a bit better: https://github.com/AljoschaMeyer/bamboo/issues/11#issuecomment-1443643502
  720. dandyandy3 joined the room
  721. dandyandy3
    How do I host my own AT Protocol provider? I can't tell if the AT protocol docs are intentionally obfuscating it, or if it's not something that's easy for anyone to do and it's not yet documented, or if i'm bad at reading
  722. Aaron Goldman
    For the sign a repo vs sign a record. I obviously think there is value in that model as I work on https://ceramic.network/ which signs each event. That said the value of a repo is affirmative non-existence. If I know that the root is bafyreign4apdgdlqwbdy2h2uotlptng2hkbgz3khqbwygnc5u5hawqfvc4 then not only can I verify that a particular at:// uri exists in the repo I can verify that the uri does not exist in the repo. If we sign individual record and I give you a made up uri then you must go back to the host of record to get the negative existence of the uri. This was the pattern used for ssh over dns to force all requests all the way back to the authoritative DNS server. at:// wants full repo caching that means we never need to ask the authoritative PDS anything but did the root change until it does. If we subscribe to a 24-hour call back then we don't even need to do that much because if the root changed, we would have been notified.
  723. Aaron Goldman

    In reply to this message

    Ah, thanks for the link I had misunderstood your question. Look like it was less "Why a Merkle tree over signed records?" and more "Why a MST over other Merkle tree shapes".
  724. The logical repo shape is
  725. so the obvious Merkle tree would be
  726. but that can go pathological
  727. a b-tree fixes this
  728. @nuhvi:matrix.org
    I was mostly trying to confirm that this "affirmative non-existence" or proof of exclusion, is indeed the main and mostly only big advantage of MSTs. Whether that is worth the cost of it is obviously a subjective and per app question. My intuition is that I can build an MST over an S3-like storage, but not the other way around (not without the cost of MSTs built in). Framing MSTs or any authenticated data structure's value as: better caching, is valuable for thinking about the tradeoffs clearly.
  729. Aaron Goldman
    but balancing the b-tree gives poor structural sharing
  730. @nuhvi:matrix.org
    Yeah I am a fan of balanced merkle trees, and MSTs seem to be even better than Prolly trees
  731. Aaron Goldman
    a hash gives us structural sharing
  732. but not range queries
  733. So a MST or Prolly tree is the way to go
  734. don't know if that clears up my thinking at the time
  735. or if I even understood the question
  736. @nuhvi:matrix.org
    No I definitely agree that MSTs are great for the goal you expressed, it was hard to understand from reading the paper, but when I wrapped my head around it it was clear to be the best solution.
  737. Aaron Goldman
    only if we can get most of the complexity hidden behind a library or service worker
  738. @nuhvi:matrix.org
    I have been working on (read using) append-only btree on top of Hypercore, and there are so much complexity that I am in the phase of: ok how much can I cull and still be open and censorship-resistant
  739. Aaron Goldman
    For the browser having a service worker at the PDSs domain could provide intresting services to the domains that the repo controller authorizes.
  740. @nuhvi:matrix.org
    I hear you, but there is a lot of value in just pure HTTP API, so I would actually rather let the PDS handle MSTs and me as a client dev never dealing with it.
  741. Aaron Goldman
    on mobile an app could handle intents
  742. In reply to this message

    this is fine if you are willing to trust the PDS with your keys
  743. @nuhvi:matrix.org
    Adding PDSs at client side, would be very much like DWNs architecture, interesting, but I am scared of the conflict resolution work still.
  744. dandyandy3

    In reply to this message

    I mean getting onto Bluesky by entering my own provider URL. How do I run that? What is your link to? the AT protocol repo doesn't mention "PDS"
  745. Aaron Goldman

    In reply to this message

    If you look in the make file run-dev-pds should start the PDS running
  746. dandyandy3
    oh it's literally just a node app
  747. is this intentionally obscured to minimize bluesky beta signups?
  748. It seems intentionally obtuse and undocumented?
  749. Is there any documentation for using this with an existing node server? I see it's still private: true so not installable as a package
  750. my servers (ec2) don't have enough memory to run a separate node instance on top of what they're already doing, and i'd rather not spin up a separate ec2 server just for an AT host(is that the right term?)
  751. Aaron Goldman

    In reply to this message

    conflict resolution work is probably the biggest problem for all networked software today.
    inkandswitch
    is worth looking at. Martin Kleppmann may be the single person I most expect to make progress here. Having him as a
    technical advisor
    to the team gave me some hope of a good api for the CRDT stuff.
  752. @nuhvi:matrix.org
    Yeah, I am familiar with Ink & Switch, and every time I read them, I realize I don't want to deal with these issues at all, I would rather give up on offline-first :D
  753. dandyandy3
    I see, hidden away a bit https://github.com/bluesky-social/atproto/tree/main/packages/pds . Does this require a database to run?
  754. Aaron Goldman

    In reply to this message

    Intentionally obtuse may be an exaggeration. More like
    sludge
    . The team is not ready to federate with the PDSs that others are standing up and don't want someone to start a server get some users and only then realize they are on an island because the federation protocols are not ready and the https://bsky.social/ PDS won't talk to them. That would suck especially if they put their time and reputation into getting those first few users.
  755. ^person opinion not based on evidence
  756. And that is why the PDS is doing all the signing on the server side for now. I lost every debate to "server side will get us up and runing faster".
  757. How to merge? ... Don't let it fork. 😠
  758. dandyandy3

    In reply to this message

    Oh interesting, I didn't realize that was a core concept from skimming the docs. Does that mean that for Bluesky, they basically run their own PDS and don't have to deal with independent ones? And (I didn't know this until now) - running your own PDS means that all of your sociall-y created data lives in your own database, with something something magic aggregation system so clients can see data from everyone's PDS?
  759. I guess I'm also confused as to why Bluesky's signup page gives you an option to enter your own PDS url
  760. Aaron Goldman
    You can use the web app with your PDS it will just only show the repos that are on your PDS.
  761. Your PDS will end up storing the repos for your users and the repos that your users follow.
  762. dandyandy3
    Makes sense
  763. Aaron Goldman
    Once sync is well defined API your PDS will sync the repo's your users follow with their PDSs and then subscribe for new heads if those repos are updated.
  764. Once you are in sync and have not received a new head your PDS can serve content from those repos with no traffic to other PDSs. This is what empowers your PDS to build timelines for your users so they can get it with a single request to their own server and not need to ping around the world when doing latency sensitive user experiences.
  765. dandyandy3
    Is a sync mechanism a pull initiated by your own PDS to the PDS(es) of those you follow?
  766. Aaron Goldman
  767. get repo for did:plc

    12${services.atproto_pds.endpoint}/xrpc/com.atproto.sync.getHead?did=${did}
    ${services.atproto_pds.endpoint}/xrpc/com.atproto.sync.getRepo?did=${did}
    
  768. but we expect a way to subscribe for updates to the heads of repos. Then you would pull the repo as your convenance.
  769. granted as the network grows it will look more like
  770. dandyandy3
    Who owns "index"? Is that the "big graph services" concept?
  771. Aaron Goldman
    Yes the BGSs are the indexers
  772. dandyandy3
    what's the incentive for anyone to run a bgs?
  773. Aaron Goldman
    If I want to do a query like "folow a repo" then I could call the PDSs. If I want to do a query like "get all likes, comments that respond to my posts" then I need an BGS to pull all the repos it can and build big index of witch likes respond to witch at:\\ urls.
    (edited)
Next group of messages