WIP Horton implementation in Goblins

I’ve been working on an implementation of Horton in Goblins lately. The code lives here: ~jfred/goblins-test (master): horton.rkt - sourcehut git

It’s still only slightly more sophisticated than the barebones version described in the Horton paper, but I think I’ve cleaned up the worst hacks I used to get it initially working.

What it does:

  • Automatically triggers an introduction flow when references to other proxies are passed as arguments to a proxy
  • Logs introductions and method invocations on both sides (albeit not yet with a human-readable name, because Goblins sealers (maybe unlike E’s?) don’t have a distinguishable human-readable representation, and because I don’t have a petname system hooked in here yet)

What it does not yet do:

  • Keep track of which targets already have stubs for a given principal so as not to recreate new ones each time and to be able to look them up later
  • Allow revocation
  • Do any sort of validation that the arguments you’re passing to a proxy are actually themselves proxies before attempting to call (get-guts) on them

It’s definitely not done and could certainly use some more work, but it’s now far enough along that I figured I’d show it off here :slight_smile:


Wonderful to see Horton work proceeding! Thanks!

Architectures of Robust Openness -- Mark S. Miller keynote at ActivityPub 2019 - YouTube covers many things. But it is also my best talk on Horton, as well as my only recorded talk on Horton. The other things I cover in that talk are all relevant to our shared concerns, so I’ll recommend the whole thing :wink:


Yeah, I referred back to that talk a few times while working on it - thanks for the talk! Definitely helped me grok parts of Horton in a way I couldn’t quite by just reading the paper.

…I haven’t attempted four-party intermediation yet though!

1 Like

Was inspired to get back to working on this recently. Of course, as things have mostly moved on to Guile-Goblins lately, I needed to port it over. I used the opportunity to package it up for Guix for ease of distribution and development; here’s what I have so far: Jonathan Frederickson / guile-horton · GitLab

Basically equivalent to the Racket version in functionality at the moment, which is to say not very mature at all! But I now have a good starting point for future work on this again.

(There is now finally some documentation to show what it looks like to use, though!)

1 Like