MarpaX-Hoonlint
view release on metacpan or search on metacpan
hoons/arvo/sys/vane/jael.hoon view on Meta::CPAN
+>.$
:: :: grow:ex:ur
++ grow :: merge wills
|= $: :: vie: data source
:: cod: merge context
:: gur: input will
::
vie/(unit (unit ship))
cod/farm
gur/will
==
?: |(=(~ gur) =(gur rug)) ..grow
|^ ^+ ..grow
::
:: wap: ascending list of new certs
:: pre: previous deed
::
=/ wap ~(forward we gur)
?~ wap ..grow
=/ pre
^- (unit deed)
?~ (dec p.i.wap) ~
`dat:(~(got by rug) (dec p.i.wap))
::
:: merge each life
::
|- ^+ ..grow
::
:: hub: changes
:: lub: merged deed
::
=+ [hub lub]=[p q]:(grow-mate p.i.wap q.i.wap pre)
?~ t.wap ..grow
?> =(p.i.t.wap +(p.i.wap))
%= $
wap t.wap
pre `dat.lub
rug (~(put by rug) p.i.wap lub)
hab (weld (flop hub) hab)
==
:: :: grow-lick/ex:ur
++ grow-lick :: check signature
|= {pub/pass ash/@ val/@}
^- ?
=+ ver=(sure:as:(com:nu:crub pub) *code:ames val)
?~ ver |
=(ash u.ver)
:: :: grow-like/ex:ur
++ grow-like :: verify signature
|= {myn/mind ash/@ val/@}
^- ?
=: ..able able(rex who.myn)
gur (fall (~(get by cod) who.myn) *will)
==
(grow-lick (grow-look lyf.myn) ash val)
:: :: grow-look/ex:ur
++ grow-look :: load public key
|= lyf/life
^- @
::
:: cascade search over old and new, new first
::
|^ %- (bond |.((need grow-look-find)))
grow-look-find(rug gur)
:: :: grow-look-find:ex:ur
++ grow-look-find ::
^- (unit @)
::
:: crash if this life is revoked
::
?< (~(has by rug) +(lyf))
%+ biff (~(get by rug) lyf)
|=(cert `pub.dat)
--
:: :: grow-mate/ex:ur
++ grow-mate :: merge lives
|= $: :: num: life we're merging
:: new: new deed
:: pre: previous deed
:: eld: old deed
::
num/@ud
new/cert
pre/(unit deed)
==
=+ :* eld=`(unit cert)`(~(get by rug) num)
==
^- (pair (list change) cert)
::
:: enforce artificial scarcity in lives
::
?> (lte num 9)
::
:: if no new information, do nothing
::
?: |(=(eld `new))
?> ?=(^ eld)
[~ u.eld]
::
:: ash: hash of deed content
:: def: our default parent
:: dad: our declared parent
:: mir: our rank
::
=/ ash (sham %urbit rex num dat.new)
=/ def (sein rex)
=* dad dad.doc.dat.new
=/ mir (clan rex)
?> ?: |(=(num 1) =(%earl mir) =(%pawn mir))
::
:: first parent must be default;
:: comets and moons may not migrate
::
=(def dad)
::
:: all others may migrate to parent of same rank
::
=((clan def) (clan dad))
::
:: if we have an old deed at this life, merge new signatures
::
( run in 2.861 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )