A meeting around Secure Scuttlebutt

Butt-conf-notes

Things I want to go to:

  • how to get setup to contribute
  • sunrise choir stuff
  • peachcloud stuff
  • solarpunk vs lunarpunk
  • p2p mesh in the wild (Mesh Networking)

“Packet radio”? Maybe networks over HAM?

  • what would ssb be like over a packet network’s bandwidth?

One thing that makes a strong community, you should have a rich/strong vision of the future.

maybe ideas:

view scuttlebutt as time in $client.

Action items

implement a skip list in a few languages

look up:

  • book “The art of not being governed” by James Scott
  • Thermodynamic efficiencies of peer production - p2p foundation report
  • microsolidarity from Richard.
  • “should we look beyond our noses: need allocation near & far” by Emmi

Questions

Q: can we bridge masto into SSB? Is that good? Q: is there a rationalist community on butts?

  • A: Not really, they got pushed out for being jerks? But they might still be around.

Terms (I learned or are of interest)

Captured markets: where lobbists own the market “Quiet radicalism”

SunDIY lightning talk

  • sunbeam.city masto server
  • about solar punk and similar
  • there’s a thing we do there called SunDIY
  • the goal is to do a DIY thing every week that aligns with solarpunk ideals
  • examples:
    • make a zine about conserving water
    • a joint rolling pictographic tutorial
    • making a small towel rack hook instead of buying one
    • sprouting beans to eat
  • I really like it because it’s a way for me to show love and generosity to my house and family.
  • we have to imagine that if we want a solarpunk future, we are probably bad at it today (judging by the world). This is a means by which we make consistent progress and get better at it.

Thank yous

  • bringing people who aren’t scuttlers all the time.

content envelopes

today:

message_hash: 'sha(content, previousMessage)',
previous: ''
content: {...}

Tomorrow:

message_hash: 'sha (previous)'
previous: '',
content_hash: 'sha (content)',
content: {
  format: 'post',
  postData: ''
}

OR

message_hash: 'sha (previous)'
previous: '',
content_hash: 'sha (content)',
content: {
  format: 'dat',
  url: 'dat://...'
}

single-writer authenticated partially-replicable append-only logs

not a list, it’s append only.

1<-hash-2<-hash-3

authenticated = it’s cryptographically signed single-wrtier = require all messages are signed by the same person it preserves causal order = you get backlinks and can say that A follow B or 1 follows 2.

This is desirable for replication.

  • If you have up to message 3 and another version has 5, when you meet, you can communicate only a single integer for where you are in the stream.
  • it’s efficient for communicating feed state.

The problem is that you have to validate all messages (even ones you don’t care about) in order to validate that the one you want is valid.

Checking a message is valid is currently O(n) for space & time The new version will be O(log n)

maybe he’ll mention bloom filter as a possible path here?

what are the exact properties we want:

  • authenticated
  • append-only: make sure there are no deletions
  • we want to preserve causal order

Instead of needing 4 to verify 5, we can generate a skip list.

0<----2<----4 0<-1<-2<-3<-4<-5<-6<-7

skip lists allow you to do a binary search within a logarithmic set of steps

in practice, you often take a random path. default, they’re non-deterministic skip lists, which are advesarial-resistant

Crucial: Each prefix of a log is a valid log in itself for a valid point of time.

0th message just exists; binary 0 1st message: binary 0001 2nd message: binary 0010 3rd message: binary 0011 4th message: binary 0100 5th message: binary 0101 6th message: binary 0110 7th message: binary 0111 8th message: binary 1000

so each level is the number of 0’s at the end of the number. every entry: 0 zeros every other: 1 zero at the end etc

so 1 points to 0 2 points to 1 3 points to 2 4 points to 2 and 3 5 points to 3 6 points to 5 and 4 7 points to 6 8 points to 7, 6 and 4

~= log2(entries)

“certificate” is the sum of message numbers we need to verify it one peer has message 0 and 5 (incl the certificate for message 5)

peer a w/ 8 has {0,1,2,4,8} peer b w/ 5 has {01,2,3,4,5}

a wants 5. a cannot validate that 8 comes before 5 b/c 6 isn’t available.

To fix this, we need peers who have the full feed. This makes this approach an optimization not a solution.

there was a discussion about how the certificate for 5 needs the shortest path to the next power of 2. You can’t get that for messages don’t exist yet. certificates are metadata not part of the message 5.

it’s really “the certificate of 5, with respect to num.

? now: we instead of saying we have message 5 for user a, we now say we have certificate 5 up to 8 for user a.

  • this allows you to do things like requesting range queries (give me message 4 through 17)

This is a graph.

  • simply connected (a linked list at the end); ignoring it the end.
  • Q: why do certificates compose? A: anti-monotinicity

Antimonotone, binary graphs binary graph allows us only 2 outgoing edges (one for linked list, one for a big backlink) antimonitonicity allows you to compose the

antimonotone means: w x y z (z can -> x, but this disallows y -> w) w x y z (z can -> x, and y -> x is fine) w x y z (if y -> x, z->w is fine)

1 # the first graph we can define

<- 3 # a graph of 3 nodes, 2 and 3 point to 1. 1 <- 2

``` <- 6 <- 3 <- 4 <- 5 1 <- 2 ```

If instead of doubling, you triple it.. it’s optimial

optimal antimonotone binary graph is unique. There’s a paper. You get it by not doubling at each step, but rather tripling.

we want to define a function that says “hey 17, what’s your predecessor?”

f(n) which computes the non-trivial predecessor of n.

(2^n)-1 is the ridge of the data structure.

f(n) is:

  • 2^(k-1) if n = 2^k(-1)
  • n-(2^(h(k))-1) # Skipping over this calculation.

--- swapping to merkel trees (dat?)

3 1 2

3 = hash(concat(1,2))

7 3 6 10 1 2 4 5 8 9 11

Q: how do we validate 2 is in the feed A: we send 1, 2 & 6.

This doesn’t guarantee ordering.

7 3 6 10 1<2<4<5<8<-9<11

^ Now by having backlinks, we can get the causal ordering

the left spine of the merkel trees, we point to the next largest value on the left.

aka “merkel mountain range” maybe look at: threaded authenticated tree

certificate paths follow the skip list if you only go through the merkel tree, you don’t get the antimonotone property

skip list version & merkel tree are both log(n) merkel tree version has better constant 2x vs skip list version 2.?x dominic & alojosha both like the skip-list version b/c it’s more elegant and easier to program (iirc?)

diversifying life/work/income for freedom

enspiral: you can use the story to tell people what they need to hear to make it happen. e.g. “You are a co-founder of enspiral, so you can tell people that when they need to hear that”

Q: How much do you need to change your own skills to make these things fit?

  • I seem like I’m quite well suited to working on very large web applications.

Q: As a high income earner, I’m curious how others have made the jump to a smaller income and how that mental jump went.

Alanna, mix & piet formed a co-op and paid income into the middle.

  • When Alanna/Mix kid happened, they got money into the middle
  • When Piet got married, went for 6 week period & took money from the middle

Q: How does one decide how much $$ to allocate into the middle?

Discuss ERE

  • journeyman, salaryman, etc

Village issue tracker

idea for a specific app, but also a direction you can explore. “measuring resources, but without associating value because ‘it gets weird’”

Originally, there was dontations in an open collective of like $5, but they were also spending hours answering people’s questions.

^ More valuable than the tiny amounts of money.

More interested in coordinating time.

Originally gave grants for features, but features aren’t useful until they’re complete. Also, they incur maintenance stuff.

Instead of donating money via opencollective, you donate time.

You had a list of things you need done, especially if they’re incremental.

Hackerspace also has similar things w/r/t maintenance work (tidying, organizing) which often doesn’t get done. Can often get invisible labor.

Another important thing: notifications

I want this for my group house.

cryptix: not understanding where to open an issue.

luandro has a thing like this:

  • put things in, folks can take stuff out

people want respect out.

a list of things that need to be done.

  • maybe estimates for time so we can efficiently match people to time
  • good deduping logic to address death by 1k papercuts

dominic’s irks w/ github

  • email for everything that happens (incl. closing an issue, but this looks identical to comment ones)
  • would love ‘pending comment from issuer’ workflows
  • would love to categorize an issue as ‘this is 2 hrs of work’ bucket
  • recurring or time based automated tickets is really important

— triage these 20 tickets — review the current documentation — look at the issues who have been closed this week and see if they should be reopened

  • NTH: being able to see how busy someone is

Q: How do bots work? Who runs it?

to get us started:

  • github is code first, there are also people.
  • this: community first, there is also code

There’s a question of how does replication and discovery work if we were to do something like “close this issue with this message id; find more there”

“lets start on the message schema” ~mix

root message

``` type: issue recipients: [] # if you want to make it private ```

``` type: issue/edit root: ?ref up about: [… @dominic, git-ssb repo …] ```

``` type: post root: ?ref text: "" ```

or

``` type: village/project ```

Maybe the village can be joined / subscribed also leaving a catching ground for ‘I don’t know where this goes, but here you go’

maybe I should look into value flows?

Anarchist convo w/ mu

Radical Routes mietzal syndikat - http://syndikat.org/