3
0
Fork
You've already forked interfaces-writeup
0
Writeup on how to use content-addressed terms and interfaces with Spritely Goblins
  • Racket 100%
2021年07月30日 12:40:29 -04:00
examples Add bootstrap require 2021年07月28日 21:29:57 -04:00
cad.rkt Add cad.rkt 2021年07月26日 13:45:43 -04:00
interfaces.org Also thank the FOSS & Crafts Studios patreon account supporters 2021年07月30日 12:40:29 -04:00
LICENSE.txt Add LICENSE.txt 2021年07月28日 18:19:34 -04:00
README.org Fix case-sensitive spelling of NLnet 2021年07月29日 15:01:27 -04:00

This repository shows approaches to handling distributed interfaces and descriptors using Spritely Goblins as an example. It also has a paper!

This work was funded by NLnet and NGI Zero. The bulk of CapTP, the implementation of invokers/incanters, and the design of Content Addressed Terms (not to mention the paper!) has happened under the work of this funding. Thank you!

The core ideas / developments

The main idea here is to enable exploring how another object behaves over a network. This paper, and associated code, do so by taking advantage of distributed object communication using CapTP (more on CapTP). Descriptions are content-addressed permitting definitions to exist anywhere, and querying mechanisms are done through invoker capabilities. But really, read the paper.

Running the examples

Really there are two examples you might want to try:

Running the CAD examples

Pretty simple:

$ cd examples
$ racket cad-examples.rkt

It's pretty simple, it just shows how various kinds of descriptors can be content-addressed in a consistent way.

Running the rich interface examples

You'll need to launch the Tor daemon for Goblins. It's mildly annoying to set up at the time of writing, but the instructions are on the Goblins CapTP documentation page.

Okay, done? Then open two terminals. In the first one:

$ cd examples
$ racket rich-interface-server.rkt

That'll print out two "sturdyrefs", one for the parrot, one for the describe incanter, that you want to paste to rich-interface-client.rkt.1 But actually, the last line it spits out is just the whole command you want to copy-paste to run the entirety of that command for your convenience.

Anyway, once you do so it'll do a few things:

  • Fetch and print the structured representation of the parrot's remote interface
  • Print that out in a human-meaningful form
  • Invoke the parrot and print out its result

Legal stuff

Code is licensed under Apache v2, see LICENSE.txt. The paper and this document are dual-licensed under and Apache v2 and CC BY 4.0 International.


1

By the way, Goblins with Tor Onion Services is peer to peer so client to server so this is kind of a misnomer. But it's the eaiest way to say "here's the thing that will be connecting, and here's the thing it will connect to" in familiar language I know of.