/- 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]] == -- --