Various fixes and improvements.

This commit is contained in:
C. Guy Yarvin 2016-09-08 09:29:38 -07:00
parent d611d11189
commit bc0a56475e
2 changed files with 127 additions and 31 deletions

View File

@ -57,8 +57,6 @@
{$entry p/(map hand (pair @da code))} :: symmetric keys {$entry p/(map hand (pair @da code))} :: symmetric keys
{$final p/(map ship @uvG)} :: tickets {$final p/(map ship @uvG)} :: tickets
{$fungi p/(map term @ud)} :: fungibles {$fungi p/(map term @ud)} :: fungibles
{$funny p/(map term *)} :: extended
{$hello p/(set term)} :: usernames
{$lived p/life} :: PKI commitment {$lived p/life} :: PKI commitment
== :: == ::
++ jael-task :: operations on ++ jael-task :: operations on
@ -110,44 +108,131 @@
$% {$cold p/ship q/life} :: breach to life $% {$cold p/ship q/life} :: breach to life
{$helo p/ship} :: intro neighbor {$helo p/ship} :: intro neighbor
{$sign p/ship q/life} :: added signature {$sign p/ship q/life} :: added signature
{$stir p/ship q/life} :: updated signature
{$sure p/ship q/life} :: signature confirmed {$sure p/ship q/life} :: signature confirmed
{$warm p/ship q/life} :: advance to life {$warm p/ship q/life} :: advance to life
{$yell p/gree} :: propagate {$yell p/gree} :: propagate
== :: == ::
++ meet :: merge pkis ++ meet :: merge worlds
|= {via/@p new/gree old/gree} |= {via/@p new/gree old/gree}
^- (pair (list jael-effect) gree)
=+ wen=(~(tap by new)) =+ wen=(~(tap by new))
|^ ^- (pair (list jael-effect) gree) |^ ^- (pair (list jael-effect) gree)
?~ wen [~ old] ?~ wen [~ old]
=+ mor=$(wen t.wen) =+ mor=$(wen t.wen)
=+ dis=(boat(old p.mor) i.wen) =+ dis=(boat i.wen)
[(weld p.dis p.mor) q.dis] [(weld p.dis p.mor) (~(put by q.mor) p.i.wen q.dis)]
:: :: :: ::
++ boat :: merge per ship ++ boat :: merge per ship
|= {who/ship gur/grue} |= {who/ship gur/grue}
=+ [num=1 rug=((bond |.(*grue)) (~(get by old) who))] ^- (pair (list jael-effect) grue)
=| pre/(unit lama) =+ rug=((bond |.(*grue)) (~(get by old) who))
|- ^- (pair (list jael-effect) gree) ?: =(gur rug) [~ rug]
=+ :* num=1
end=(max p.gur p.rug)
==
=| $: pre/(unit lace)
fex/(list jael-effect)
gum/(list (pair life lace))
==
=- [(flop p) `grue`[end (~(gas by *(map life lace)) q]]
|- ^+ [p=fex q=gum]
:: ::
:: lives in gur/grue are 1 through n :: lives are 1 through n
:: ::
?: (gth num p.gur) [~ old] ?: (gth num end) [fex gum]
:: ::
:: lod is the old deed, wyn is the new deed :: `lod` is the old deed, `wan` the new deed
:: ::
=+ [lod=(~(get by q.rug) num) wyn=(~(get by q.gur) num)] =+ :- lod=(~(get by q.rug) num)
wan=(~(get by q.gur) num)
:: ::
:: if no new deed, or new deed matches old deed :: build a new deed and continue with it
:: ::
?: |(?=($~ wyn) =(wyn lod)) =- $(num +(num), fex p, pre `q, gum :_(gum [num q]))
^- (pair (list jael-effect) lace)
::
:: if no new information, do nothing
::
?: |(?=($~ wan) =(wan lod))
?> ?=(^ lod)
[fex u.lod]]
::
:: if we have an old deed at this life, merge them
::
=+ ash=(sham dat.u.wan)
?: ?=(^ lod)
:: ::
:: there's nothing to learn, move forward :: deed data must be identical
:: ::
$(num +(num), pre lod) ?> =(dat.u.wan dat.u.lod)
::
:: replace fresher signatures, add new ones
::
=+ sow=`(list (trel ship life @))`(~(tap by syg.u.wan))
|- ^- (pair (list jael-effect) lace)
?~ sow [fex u.lod]
=+ ect=(~(get by u.lod) p.i.sow)
::
:: ignore obsolete or equal signature
::
?. |(?=(~ ect) (gth q.i.sow p.u.ect))
$(sow t.sow)
::
:: merge new, or newer, signature
::
?> (good [p.i.sow q.i.sow] ash r.i.sow)
%= $
sow t.sow
fex [stir+who fex]
u.lod (~(put by u.lod) p.i.sow [q r]:i.sow)
==
:: ::
:: check all signatures in :: new deed, if for an existing ship
:: ::
?. =(1 num)
?> ?=(^ pre)
::
:: check that the previous deed has signed this one
::
=+ laz=(~(got by syg.u.wan) who)
?> =(p.laz (dec num))
?> =(ash (need (sure:as:(com:nu:crub pub.dat.u.pre) *code q.laz)))
::
:: check the parent has signed, if necessary
::
?> ?| ::
:: no parent signature if parent is unchanged, not a moon
::
?& (=(dad.dat.u.pre dad.dat.u.wan)
!=(%earl (clan who))
==
::
:: no parent signature if we got this deed from the parent
::
=(via dad.dat.u.wan)
::
:: valid parent signature required
::
=+ par=(~(got by syg.u.wan) dad.dat.u.wan)
(good [dad.dat.u.wan p.par] ash q.par)
==
u.wan
:: ::
:: new deed for new ship
::
?: (lth who 256)
::
:: initial galaxy public key must match hardcode
::
?> =(pub.dat.u.wan (zeno who))
::
:: initial parent is predefined
::
?> =(dad.dat.u.wan (sein who))
?> ?| =(via dad.dat.u.wan)
==
:: if there is an old deed :: if there is an old deed
:: ::
?^ lod ?^ lod
@ -163,23 +248,32 @@
:: :: :: ::
++ look :: get public key ++ look :: get public key
|= myn/mind |= myn/mind
^- (unit @) ^- @
|^ ((bond |.((find(old new) myn))) (find myn)) ::
:: first galaxy key is hardcoded
::
?: &((lth who.myn 256) =(1 lyf.myn))
(zeno who.myn)
::
:: cascade search over old and new, new first
::
|^ (need ((bond |.((find myn))) (find(old new) myn)))
++ find ++ find
^- (unit @) ^- (unit @)
%+ biff (~(get by old) who.myn) %+ biff (~(get by old) who.myn)
|= gur/grue |= gur/grue
::
:: crash if this life is revoked
::
?> =(p.gur lyf.myn)
%+ biff (~(get by q.gur) lyf.myn) %+ biff (~(get by q.gur) lyf.myn)
|=(lama `pub) |=(lace `pub.dat)
-- --
:: :: ::
++ good :: check signature ++ good :: verify signature
|= {myn/mind ash/@ val/@} |= {myn/mind ash/@ val/@}
^- %& ^- ?
=* pub ?>(=(ash (need (sure:as:(com:nu:crub (look myn)) *code val))) &)
=* pub
%. (~(get by
-- --
++ move {p/duct q/{$gift jael-gift}} :: local move ++ move {p/duct q/{$gift jael-gift}} :: local move

View File

@ -3629,14 +3629,16 @@
:: ::
++ lace (tale lama) :: signed deed ++ lace (tale lama) :: signed deed
++ lama :: certificate deed ++ lama :: certificate deed
doc/lamp :: metadata
pub/pass :: public key
== ::
++ lamp :: cert metadata
$: dad/@p :: parent $: dad/@p :: parent
dob/? :: & clean, | dirty dob/? :: & clean, | dirty
exp/@da :: expiration date exp/@da :: expiration date
nym/(map chip (pair @ta @t)) :: identity strings nym/(map chip (pair @ta @t)) :: identity strings
own/@p :: declared owner own/@p :: declared owner
pub/pass :: public key ==
== ::
+
++ chip :: standard identity ++ chip :: standard identity
$? $bus :: business name $? $bus :: business name
$giv :: given name $giv :: given name
@ -3651,7 +3653,7 @@
++ tale :: urbit-signed atom ++ tale :: urbit-signed atom
|* typ/mold :: |* typ/mold ::
$: dat/typ :: data $: dat/typ :: data
syg/(set safe) :: signatures syg/(map ship (pair life @)) :: signatures
== :: == ::
++ wyll :: linear will ++ wyll :: linear will
$: len/@ud :: $: len/@ud ::