git ssb

2+

dust / spaceship



Tree: 53e67762a66a4a0951f34296ecec4ecc6899a4f5

Files: 53e67762a66a4a0951f34296ecec4ecc6899a4f5 / docs / 04engines.md

9204 bytesRaw

spaceship engine spec

following the schema, a spaceship needs an engine to travel a cypherspace galaxy. an engine is constructed from a set of functions that realise the spaceship schema. this resembles an API. unlike an API though, these requirements are not set out by a central server and presented to clients--spaceships own their engines and technicians/mechanics may customise them as they like.

what we present here is a limited set of functions a codebase should provide to properly function as a spaceship engine. not all of these functions need implementing on their own--many of them are easily realised as compositions.

general remarks:

spec details

pilot/spaceship internal functions

createIdentifier

generates a keypair that can be used to identify the pilot to others.

destroyIdentifier

permanently destroys a keypair. Naturally, only the private key can actually be destroyed, if the public key has seen any replication.

listIdentifiers

lists the identifiers available to a spaceship for use.

entombData

encrypts a set of stored identifiers for out-of-universe export, deleting them from storage.

importData

decrypts a set of stored identifiers and places them into the underlying filesystem, and makes them available to listIdentifiers().

notes

record functions

createRecord

creates a record. a record is a performative atom for spaceships--it's a single communication at an experiential level. records are non-ephemeral. they may be linked to orbitals, encrypted to orbital residents or other recipients, or broadcast galaxywide. their position in the galaxy is thus expressed by their linkage.

editRecord

submits a record linked to an already-existing one, with an explicit identifier indicating that it's an edit.

throws an error if the existing record is not known to the spaceship.

viewRecord

retrieves a record from the space.

notes

orbital functions

createOrbital

creates an orbital, with a unique key, name, and a description of its security policy.

security policy descriptors may vary from galaxy to galaxy, but here is a example set of keys:

viewOrbital

this function performs the task polls the orbital for records

hailOrbital

signals to an orbital that a spaceship and pilot would like to enter the orbital.

orbital entry may consist of the following things, in order of increasing commitment:

  1. orbital residents involving the entrant in orbital record traffic (only meaningful if traffic routing in the current galaxy has any structural concept of spatial priority).
  2. orbital residents adding (one of) the entrant's public keys to the list of orbital recipients, allowing the entrant to read records posted thereafter.
  3. orbital residents doing the computational work of re-encrypting records reaching into the past with the entrant's public key, allowing the entrant participation in the orbital's past.
  4. political enfranchisement in the orbital, if there is any to be had
  5. and so on, and so on...

this function is the intransitive counterpart to inviteTraveller

inviteTraveller

transitive counterpart to hailOrbital; expresses endorsement for entry by an orbital resident. has similar effects.

emigrateOrbital

requests that an orbital's residents roll back the entry steps outlined above.

intransitive counterpart to deportResident.

deportResident

transitive counterpart to emigrateOrbital; expresses endorsement for the expulsion of a resident from an orbital.

notes

galaxy functions

enterGalaxy

leaveGalaxy

dereferences a galaxy connection object and halts replication activity.

notes

since cypherspace galaxies are nearly or totally topologically independent from terrestrial space, a terrestrial connection is never needed to see a galaxy's "past", that is, the store of galaxy data that has already been replicated onto the local spaceship's hardware. likewise, galaxy data is not expected to be deleted (at least, not consistently). both the concepts of "entering" and "leaving" become dubious in this case, but we think they are schematically useful.

Built with git-ssb-web