:: Mock Azimuth :: /+ ph, ph-util, ph-philter =, ph =, ph-util =, ph-philter => |% +$ az-log [topics=(lest @) data=@t] -- =| logs=(list az-log) :: oldest logs first =| lives=(map ship [lyfe=life rut=rift]) =| $= eth-filters $: next=_1 :: jael assumes != 0 all=(map @ud [from-block=@ud last-block=@ud address=@ux]) == |% ++ this-az . ++ add-logs |= new-logs=(list az-log) ^+ this-az =. logs (weld logs new-logs) this-az :: ++ router =/ n (philter ,_this-az) ^- form:n |% ++ stay this-az ++ run |= pin=ph-input ^- output:n =, enjs:format =/ thus (extract-thus-to uf.pin 'http://localhost:8545') ?~ thus [& ~ %wait ~] ?~ r.mot.u.thus [& ~ %wait ~] =/ req q.u.r.mot.u.thus |^ ^- output:n =/ method (get-method req) ?: =(method 'eth_blockNumber') :- | :_ [%wait ~] %+ answer-request req s+(crip (num-to-hex:ethereum latest-block)) ?: =(method 'eth_getLogs') :- | :_ [%wait ~] %+ answer-request req %+ logs-to-json (get-param-obj req 'fromBlock') (get-param-obj req 'toBlock') ?: =(method 'eth_newFilter') :+ | (answer-request req s+(scot %ux next.eth-filters)) =. all.eth-filters %+ ~(put by all.eth-filters) next.eth-filters :+ (get-param-obj req 'fromBlock') (get-param-obj req 'fromBlock') (get-param-obj req 'address') =. next.eth-filters +(next.eth-filters) [%cont ..stay] ?: =(method 'eth_getFilterLogs') =/ fil (~(get by all.eth-filters) (get-filter-id req)) ?~ fil ~|(%no-filter-not-implemented !!) :+ | %+ answer-request req ~| [eth-filters latest-block] (logs-to-json from-block.u.fil latest-block) =. last-block.u.fil latest-block [%cont ..stay] ?: =(method 'eth_getFilterChanges') =/ fil-id (get-filter-id req) =/ fil (~(get by all.eth-filters) fil-id) ?~ fil ~|(%no-filter-not-implemented !!) :+ | %+ answer-request req (logs-to-json last-block.u.fil latest-block) =. all.eth-filters %+ ~(put by all.eth-filters) fil-id u.fil(last-block latest-block) [%cont ..stay] [& ~ %wait ~] :: ++ latest-block (add launch:contracts:azimuth (lent logs)) :: ++ get-id |= req=@t =, dejs:format %. (need (de-json:html req)) (ot id+so ~) :: ++ get-method |= req=@t =, dejs:format %. (need (de-json:html req)) (ot method+so ~) :: ++ get-param-obj |= [req=@t param=@t] =, dejs:format %- hex-to-num:ethereum =/ array %. (need (de-json:html req)) (ot params+(ar (ot param^so ~)) ~) ?> ?=([* ~] array) i.array :: ++ get-filter-id |= req=@t =, dejs:format %- hex-to-num:ethereum =/ id %. (need (de-json:html req)) (ot params+(ar so) ~) ?> ?=([* ~] id) i.id :: ++ answer-request |= [req=@t result=json] ^- (list ph-event) =/ resp %- crip %- en-json:html %- pairs :~ id+s+(get-id req) jsonrpc+s+'2.0' result+result == :_ ~ :* %event who.pin //http/0v1n.2m9vh %they num.u.thus [200 ~ `(as-octs:mimes:html resp)] == :: ++ logs-to-json |= [from-block=@ud to-block=@ud] ^- json :- %a =/ selected-logs %+ swag [(sub from-block launch:contracts:azimuth) (sub to-block from-block)] logs =/ count from-block |- ^- (list json) ?~ selected-logs ~ :_ $(selected-logs t.selected-logs, count +(count)) %- pairs :~ 'logIndex'^s+'0x0' 'transactionIndex'^s+'0x0' :+ 'transactionHash' %s (crip (prefix-hex:ethereum (render-hex-bytes:ethereum 32 `@`0x5362))) :: :+ 'blockHash' %s (crip (prefix-hex:ethereum (render-hex-bytes:ethereum 32 `@`0x5363))) :: :+ 'blockNumber' %s (crip (num-to-hex:ethereum count)) :: :+ 'address' %s (crip (address-to-hex:ethereum azimuth:contracts:azimuth)) :: 'type'^s+'mined' :: 'data'^s+data.i.selected-logs :+ 'topics' %a %+ turn topics.i.selected-logs |= topic=@ux ^- json :- %s %- crip %- prefix-hex:ethereum (render-hex-bytes:ethereum 32 `@`topic) == -- -- :: ++ dawn |= who=ship ^- dawn-event =/ lyfe lyfe:(~(got by lives) who) :* [who lyfe sec:ex:(get-keys who lyfe) ~] (^sein:title who) get-czars ~[~['arvo' 'netw' 'ork']] 0 `(need (de-purl:html 'http://localhost:8545')) ~ == :: :: Should only do galaxies :: ++ get-czars ^- (map ship [life pass]) %- malt %+ murn ~(tap by lives) |= [who=ship lyfe=life rut=rift] ?. =(%czar (clan:title who)) ~ %- some :+ who lyfe %^ pass-from-eth:azimuth (as-octs:mimes:html (get-public who lyfe %crypt)) (as-octs:mimes:html (get-public who lyfe %auth)) 1 :: ++ spawn-galaxy |= who=@p ?< (~(has by lives) who) =. lives (~(put by lives) who [1 0]) %- add-logs :~ (activated:lo who) (owner-changed:lo who 0xdead.beef) %- changed-keys:lo :* who (get-public who 1 %crypt) (get-public who 1 %auth) 1 1 == == :: :: our: host ship :: who: cycle keys :: her: wait until hears about cycle :: ++ cycle-keys-and-hear |= [our=@p who=@p her=@p] =. this-az (cycle-keys who) =/ new-lyfe lyfe:(~(got by lives) who) =/ m (ph ,_this-az) ;< [this-az=_this-az ~] bind:m %+ (wrap-philter ,_this-az ,~) router:this-az ^+ *form:(ph ,~) |= pin=ph-input :+ & ~ =/ aqua-pax /i/j/(scot %p her)/life/(scot %da now.pin)/(scot %p who)/noun =/ lyfe (scry-aqua noun our now.pin aqua-pax) ~& [new-lyfe=[0 new-lyfe] lyfe=lyfe] ?: =([~ new-lyfe] lyfe) [%done ~] [%wait ~] (pure:m this-az) :: ++ cycle-keys |= who=@p =/ prev (~(got by lives) who) =/ lyfe +(lyfe.prev) =. lives (~(put by lives) who [lyfe rut.prev]) %- add-logs :_ ~ %- changed-keys:lo :* who (get-public who lyfe %crypt) (get-public who lyfe %auth) 1 lyfe == :: :: our: host ship :: who: breachee :: her: wait until hears about breach :: ++ breach-and-hear |= [our=@p who=@p her=@p] =. this-az (breach who) =/ new-rut rut:(~(got by lives) who) =/ m (ph ,_this-az) ;< [this-az=_this-az ~] bind:m %+ (wrap-philter ,_this-az ,~) router:this-az ^+ *form:(ph ,~) |= pin=ph-input :+ & ~ =/ aqua-pax /i/j/(scot %p her)/rift/(scot %da now.pin)/(scot %p who)/noun =/ rut (scry-aqua noun our now.pin aqua-pax) ~& [new-rut=[0 new-rut] rut=rut] ?: =([~ new-rut] rut) [%done ~] [%wait ~] (pure:m this-az) :: ++ breach |= who=@p =. this-az (cycle-keys who) =/ prev (~(got by lives) who) =/ rut +(rut.prev) =. lives (~(put by lives) who [lyfe.prev rut]) %- add-logs :_ ~ (broke-continuity:lo who rut) :: ++ get-keys |= [who=@p lyfe=life] ^- acru:ames %+ pit:nu:crub:crypto 32 (can 5 [1 (scot %p who)] [1 (scot %ud lyfe)] ~) :: ++ get-public |= [who=@p lyfe=life typ=?(%auth %crypt)] =/ bod (rsh 3 1 pub:ex:(get-keys who lyfe)) =+ [enc=(rsh 8 1 bod) aut=(end 8 1 bod)] ?: =(%auth typ) aut enc :: :: Generate logs :: ++ lo =, azimuth-events:azimuth |% ++ activated |= who=ship ^- az-log [~[^activated who] ''] :: ++ owner-changed |= [who=ship owner=@ux] ^- az-log [~[^owner-changed who owner] ''] :: ++ changed-keys |= [who=ship enc=@ux aut=@ux crypto=@ud lyfe=life] ^- az-log :- ~[^changed-keys who] %- crip %- prefix-hex:ethereum ;: welp (render-hex-bytes:ethereum 32 `@`enc) (render-hex-bytes:ethereum 32 `@`aut) (render-hex-bytes:ethereum 32 `@`crypto) (render-hex-bytes:ethereum 32 `@`lyfe) == :: ++ broke-continuity |= [who=ship rut=rift] ^- az-log :- ~[^broke-continuity who] %- crip %- prefix-hex:ethereum (render-hex-bytes:ethereum 32 `@`rut) -- --