mirror of
https://github.com/urbit/shrub.git
synced 2024-12-15 04:22:48 +03:00
125 lines
3.4 KiB
Plaintext
125 lines
3.4 KiB
Plaintext
/- constitution, ethereum
|
|
/+ ethereum
|
|
=> [^constitution ethereum]
|
|
|%
|
|
++ event-log-to-hull-diffs
|
|
::=, ships-events
|
|
=> [ships-events .]
|
|
|= log=event-log
|
|
^- (list (pair ship diff-hull))
|
|
~? ?=(~ mined.log) %processing-unmined-event
|
|
::
|
|
?: =(event.log transferred)
|
|
=+ ^- [who=@ wer=address] ::TODO should we make @p work here?
|
|
(decode-results data.log ~[%uint %address])
|
|
[who %owner wer]~
|
|
::
|
|
?: =(event.log activated)
|
|
=+ ^- [who=@ wer=address]
|
|
(decode-results data.log ~[%uint %address])
|
|
:* ^- (pair ship diff-hull)
|
|
:+ who %full
|
|
%*(. *hull owner wer, sponsor (sein:title who))
|
|
::
|
|
?: =(%czar (clan:title who)) ~
|
|
:_ ~
|
|
^- (pair ship diff-hull)
|
|
[(sein:title who) %spawned who]
|
|
==
|
|
::
|
|
?: =(event.log escape-requested)
|
|
=+ ^- [who=@ wer=@]
|
|
(decode-results data.log ~[%uint %uint])
|
|
[who %escape `wer]~
|
|
::
|
|
?: =(event.log escape-canceled)
|
|
=/ who=@ (decode-results data.log ~[%uint])
|
|
[who %escape ~]~
|
|
::
|
|
?: =(event.log escape-accepted)
|
|
=+ ^- [who=@ wer=@]
|
|
(decode-results data.log ~[%uint %uint])
|
|
[who %sponsor wer]~
|
|
::
|
|
?: =(event.log changed-keys)
|
|
=+ ^- [who=@ enc=octs aut=octs rev=@ud]
|
|
%+ decode-results data.log
|
|
~[%uint [%bytes-n 32] [%bytes-n 32] %uint]
|
|
?> &(=(p.enc 32) =(p.aut 32)) :: sanity
|
|
[who %keys q.enc q.aut rev]~
|
|
::
|
|
?: =(event.log changed-spawn-proxy)
|
|
=+ ^- [who=@ sox=address]
|
|
(decode-results data.log ~[%uint %address])
|
|
[who %spawn-proxy sox]~
|
|
::
|
|
?: =(event.log changed-transfer-proxy)
|
|
=+ ^- [who=@ tox=address]
|
|
(decode-results data.log ~[%uint %address])
|
|
[who %transfer-proxy tox]~
|
|
::
|
|
::NOTE 0x8be0...57e0 is Owneable's OwnershipTransferred(address,address).
|
|
:: changed-dns is handled separately since it doesn't affect hulls.
|
|
~& [%unimplemented-event event.log]
|
|
~
|
|
::
|
|
++ apply-hull-diff
|
|
|= [hul=hull dif=diff-hull]
|
|
^- hull
|
|
?- -.dif
|
|
%full new.dif
|
|
%owner hul(owner new.dif)
|
|
%spawned =+ (~(put in spawned.hul) who.dif)
|
|
hul(spawn-count +(spawn-count.hul), spawned -)
|
|
%keys %_ hul
|
|
encryption-key enc.dif
|
|
authentication-key aut.dif
|
|
key-revision rev.dif
|
|
==
|
|
%sponsor hul(sponsor new.dif, escape ~)
|
|
%escape hul(escape new.dif)
|
|
%spawn-proxy hul(spawn-proxy new.dif)
|
|
%transfer-proxy hul(transfer-proxy new.dif)
|
|
==
|
|
::
|
|
++ parse-id
|
|
|= id=@t
|
|
^- ships:function
|
|
|^
|
|
~| id
|
|
%+ rash id
|
|
;~ pose
|
|
(function %ships 'ships' shipname)
|
|
(function %get-spawned 'getSpawned' shipname)
|
|
(function %dns-domains 'dnsDomains' dem:ag)
|
|
==
|
|
::
|
|
++ function
|
|
|* [tag=@tas fun=@t rul=rule]
|
|
;~(plug (cold tag (jest fun)) (ifix [pel per] rul))
|
|
::
|
|
++ shipname
|
|
;~(pfix sig fed:ag)
|
|
--
|
|
::
|
|
++ function-to-call
|
|
|%
|
|
++ ships
|
|
|= cal=ships:function
|
|
^- [id=@t dat=call-data]
|
|
?- -.cal
|
|
%ships
|
|
:- (crip "ships({(scow %p who.cal)})")
|
|
['ships(uint32)' ~[uint+`@`who.cal]]
|
|
::
|
|
%get-spawned
|
|
:- (crip "getSpawned({(scow %p who.cal)})")
|
|
['getSpawned(uint32)' ~[uint+`@`who.cal]]
|
|
::
|
|
%dns-domains
|
|
:- (crip "dnsDomains({(scow %ud ind.cal)})")
|
|
['dnsDomains(uint256)' ~[uint+ind.cal]]
|
|
==
|
|
--
|
|
--
|