Jael's section in lull.hoon contains three ancillary cores with their own type definitions as well as Jael's general types.
$public-keys-result
+$ public-keys-result$% [%full points=(map ship point)][%diff who=ship =diff:point][%breach who=ship]==
This is what Jael gives (in a %public-keys gift) to subcribers who are tracking public key information for a set of ships.
Typically the %full kind with a map of ships to $point:points is given immediately upon subscription and contains all public key records for the ships in question. After the %full, a %diff (including a $diff:point) will be given whenever a change (such as the sponsor or pubkey) has occurred for one of the ships being tracked, and a %breach will be given whenever a continuity breach for a tracked ship occurs.
$seed
+$ seed [who=ship lyf=life key=ring sig=(unit oath:pki)]
Private boot parameters. The who field is the name of the ship, lyf is the life (key revision number), key is the private key and sig is the signature of the parent ship if it's a moon, and ~ otherwise.
$dawn-event
+$ dawn-event$: =seedspon=(list [=ship point:azimuth-types])czar=(map ship [=rift =life =pass])turf=(list turf)bloq=@udnode=(unit purl:eyre)==
Ship initialisation parameters.
- $seed contains the private boot parameters.
- sponis a- listof ships and their $points in the ship's sponsorship chain, all the way to the galaxy level.
- czaris a map from each galaxy's- @pto its- rift,- life, and public key (- pass).
- turfis a- listof DNS suffixes used for galaxies, which is- urbit.orgby default.
- bloqis the number of the Ethereum block in which the ship registered its keys with the Azimuth smart contract.
- nodeis the URL of the Ethereum node used to monitor Azimuth.
$source
+$ source (each ship term)
Source of public key updates for Jael. If it's a term it's a Gall agent e.g %azimuth-tracker. If it's a ship, Jael will subscribe to that ship's Jael for updates - e.g. Jael will subscribe to the parent planet of moons for updates about the moons.
$source-id
+$ source-id @udsourceid
Numerical index for Jael to organise its sources. Jael assigns its source-ids sequentially, starting from 0.
$state-eth-node
+$ state-eth-node :: node config + meta$: top-source-id=source-idsources=(map source-id source)sources-reverse=(map source source-id)default-source=source-idship-sources=(map ship source-id)ship-sources-reverse=(jug source-id ship)==
Jael's data about sources for PKI updates about ships.
- top-source-idtracks the highest- source-idso Jael can easily determine what the next- source-idshould be.
- sourcesis a- mapof $source-ids to $sources.
- sources-reversethe same as- sourcesbut in reverse.
- default-sourceis the default- sourceto use (typically- 0-- %azimuth-tracker).
- ship-sourcesis a- mapfrom- ships to- source-ids and records where to get updates from for the ships in question. Typically these will map moons to their parent ships.
- ship-sources-reverseis the same as- ship-sourcesbut in reverse.
block
Structures for Ethereum blocks.
$hash:block
+$ hash @uxblockhash
Ethereum block hash.
$number:block
+$ number @udblocknumber
Ethereum block number.
$id:block
+$ id [=hash =number]
Ethereum block identifier - contains both the $hash:block and $number:block.
$block:block
+$ block [=id =parent=hash]
A reference to an Ethereum block - contains the $id:block and the $hash:block of its parent for ordering purposes.
point
Structures for points (Ship IDs in Azimuth).
$point:point
+$ point$: =rift=lifekeys=(map life [crypto-suite=@ud =pass])sponsor=(unit @p)==
Public key data for a particular ship. The rift is the current continuity breach number and life is the current key revision number. The keys map contains the public key (pass) for each life up to the current one. The sponsor is the current sponsor of the ship in question, if it has one.
$key-update:point
+$ key-update [=life crypto-suite=@ud =pass]
An update to a ship's keys. The life is the key revision number, crypt-suite is a version number for the cryptographic suite used for keys in Azimuth, and pass is the public key itself.
$diffs:point
+$ diffs (list diff)
A list of invertible $diff:points.
$diff:point
+$ diff$% [%rift from=rift to=rift][%keys from=key-update to=key-update][%spon from=(unit @p) to=(unit @p)]==
An invertible diff for public key (and related) changes to the state of an Azimuth point (ship ID).
- %riftis a change to the- rift(continuity breach number) that occurs when a ship undergoes a continuity breach.
- %keysis a change to a ship's- lifeand public key, specified in the $key-update:point.
- %sponis a change to a ship's sponsor.
The from and to field specify the old a new values respectively.
$udiffs:point
+$ udiffs (list [=ship =udiff])
A list of non-invertible $udiff:points.
$udiff:point
+$ udiff$: =id:block$% [%rift =rift][%keys key-update][%spon sponsor=(unit @p)][%disavow ~]== ==
A non-invertible diff for public key (and related) changes to the state of an Azimuth point (ship ID).
The $id:block contains the block number and block hash of the Ethereum block in which the change occurred. The next part specifies what changed, where:
- %riftmeans the ship has undergone a continuity breach and therefore the- rift(continuity revision number) has changed.
- %keysmeans the ship's- life(key revision number) has changed, the $key-update:point contains the new- lifeand pubkeys.
- %sponmeans the ship's sponsor has changed.
- %disavowmeans a previous Ethereum block has been disavowed.
A udiff:point can be converted to a $diff:point with the +udiff-to-diff:point function.
pki
This structure is mostly a holdover from prior versions of Jael and is unused apart from $oath:pki.
$hand:pki
+$ hand @uvH
128-bit Hash.
$mind:pki
+$ mind [who=ship lyf=life]
Key identifier.
$name:pki
+$ name (pair @ta @t)
Name in both ASCII and Unicode.
$oath:pki
+$ oath @
Signature. This type is used in the $seed for moons as a signature from the moon's parent.