Restructure Constitution app.

This commit is contained in:
Fang 2018-04-09 16:59:14 +02:00
parent 8af91e2af6
commit dba3936411
2 changed files with 185 additions and 105 deletions

View File

@ -5,13 +5,18 @@
=, eyre
|%
++ state
$: ships=registry
block=@ud
filter=(unit @ud)
ships-c=address
$: ships=(map @p hull)
block=@ud :: last heard
filter=(unit @ud) :: our filter id
==
::
++ move [bone card] :: [target side-effect]
++ complete-ship
$: state=hull
history=(list diff-hull) :: newest first
keys=(map @ud (pair @ @))
==
::
+= move [bone card] :: [target side-effect]
++ card :: side-effect
$% [%peer wire gill:gall path]
[%hiss wire (unit user:eyre) mark [%hiss hiss]]
@ -23,50 +28,129 @@
++ prep
|= old=(unit *)
:: ?~ old
init
ta-save:ta-init:ta
:: [~ ..prep(fid u.old)]
::
++ init
=/ sc=address
0xa9c7.9b9c.5e4e.1fdc.69c1.
9fc0.6232.64c8.da50.7a22
:_ ..init(ships-c sc)
=- [ost.bol -]~
%+ rpc-req /init
%- batch-read-request
%+ turn (gulf ~zod ~per) :: ~fes)
|= p=@p
:+ `(scot %p p) sc
['getShipData(uint32)' ~[uint+`@`p]]
++ ta
|_ $: moves=(list move) :: side-effects
reqs=(list (pair (unit @t) request)) :: rpc requests
wir=wire :: wire for reqs
==
+* this .
::
++ ta-save
^- (quip move _+>)
=- [[`move`- `(list move)`(flop moves)] ..ta]
^- move
:- `bone`ost.bol
^- card
%+ rpc-request:ca wir
`json`a+(turn (flop reqs) request-to-json)
::
++ ta-move
|= mov=move
%_(+> moves [mov moves])
::
++ ta-card
|= car=card
(ta-move [ost.bol car])
::
++ ta-request
|= [id=(unit @t) req=request]
%_(+> reqs [[id req] reqs])
::
++ ta-read
|= cal=ships:function
=- %+ ta-request `id
:+ %eth-call
[~ ships:contracts ~ ~ ~ (encode-call dat)]
[%label %latest]
::TODO probably turn the below into a lib arm
^- [id=@t dat=call-data]
?- -.cal
%ships
:- (crip "ships({(scow %p who.cal)})")
['ships(uint32)' ~[uint+`@`who.cal]]
==
::
++ ta-read-ships
|= who=(list @p)
~& [%ta-read-ships ~(key by ships)]
%^ spir who this
|=([p=@p _this] (ta-read %ships p))
::
::
++ ta-init
%- ta-read-ships(wir /init)
(gulf ~zod ~per) ::TODO ~fes)
::
++ ta-init-result
|= rep=response:json-rpc
^+ this
?> ?=(%batch -.rep)
=. wir /init
%^ spir bas.rep this
|= [r=response:json-rpc this=_this]
^+ this
?< ?=(%batch -.r)
~& id.r
?: ?=(%error -.r)
~& [%rpc-error message.r]
this
?> ?=(%s -.res.r)
=/ hul=hull:eth-noun
(decode-results p.res.r hull:eth-type)
?. active.hul this
=/ who=@p
%+ rash id.r
(ifix [(jest 'ships(~') (just ')')] fed:ag)
=. ships
%+ ~(put by ships) who
(hull-from-eth hul)
~& [%stored ~(key by ships)]
(ta-read-ships (kids who))
--
::
++ rpc-req
|= [w=wire j=json]
^- card
:^ %hiss w ~
:+ %json-rpc-response %hiss
=- (json-request - j)
=+ (need (de-purl:html 'http://localhost:8545'))
-(p.p |)
:: arms for card generation
++ ca
|%
++ rpc-request
|= [w=wire j=json]
^- card
:^ %hiss w ~
:+ %json-rpc-response %hiss
=- (json-request - j)
=+ (need (de-purl:html 'http://localhost:8545'))
-(p.p |)
--
::
++ sigh-json-rpc-response-init
|= [w=wire rep=response:json-rpc]
~& [%res rep]
?> ?=(%batch -.rep)
=- ~& [%ship-data `(list (pair ship hull))`-]
[~ +>.$(ships (~(gas in ships) -))]
%+ murn bas.rep
::TODO ++parse-ship-data into lib
|= r=response:json-rpc
^- (unit (pair ship hull))
?: ?=(%error -.r) ~ ::TODO retry on error?
?> ?=(%result -.r)
?> ?=(%s -.res.r)
=/ hul=hull:eth-noun
(decode-results p.res.r hull:eth-type)
:: don't care about latent ships.
?. active.hul ~
:+ ~ (slav %p id.r)
(hull-from-eth hul)
++ spir
:>
:> a: list
:> b: state
:> c: gate from list-item and state to new state
:> produces: new state
|* [a=(list) b=* c=_|=(^ +<+)]
=> .(c `$-([_?>(?=(^ a) i.a) _b] _b)`c)
:> transformed list and updated state
|- ^+ b
?~ a b
$(a t.a, b (c i.a b))
::
++ kids
|= pre=@p
^- (list @p)
=/ wyd=bloq
?+ (clan:title pre) 0
%czar 3
%king 4
%duke 5
==
%+ turn
(gulf 1 (dec (pow 2 (bex wyd))))
?: =(~zod pre)
|=(a=@p (lsh 3 1 a))
|=(a=@p (cat wyd pre a))
::
::TODO there definitely needs to be a helper function of some kind,
:: but is there a way for the type system to be aware of the return
@ -96,51 +180,22 @@
::
++ poke-noun
|= a/@
=+ ships-c=0xa9c7.9b9c.5e4e.1fdc.69c1.9fc0.6232.64c8.da50.7a22
?: =(a 1)
%+ send-rpc-req /block
(request-to-json `'eth-blocknum' [%eth-block-number ~])
?: =(a 2)
%+ send-rpc-req /call
%- batch-read-request
:~ :+ `'ships-of 0x0'
ships-c
['getOwnedShips(address)' ~[address+0x0]]
::
:+ `'ship-data 0'
ships-c
['getShipData(uint32)' ~[uint+0]]
==
?: =(a 3)
~& %making-filter
%+ send-rpc-req /new-filter
%+ request-to-json `'new-filter'
[%eth-new-filter ~ ~ ~[ships-c] ~]
?: =(a 4)
~& [%asking-filter-update (need filter)]
%+ send-rpc-req /filter-update
%+ request-to-json `'req-iq'
[%eth-get-filter-changes (need filter)]
?: =(a 0)
~& [%have-ships ~(key by ships)]
[~ +>.$]
[~ +>.$]
::
++ send-move
|= c/card
[[ost.bol c]~ +>.$]
::
++ send-rpc-req
|= [w=wire j=json]
%^ send-move %hiss w
:^ ~ %json-rpc-response %hiss
=- (json-request - j)
=+ (need (de-purl:html 'http://localhost:8545'))
-(p.p |)
::
++ sigh-tang
|= [w=wire t=tang]
~& [%failed-sigh]
~& (turn t (cury wash [0 80]))
[~ +>.$]
::
++ sigh-json-rpc-response-init
|= [w=wire r=response:json-rpc]
~& %got-init-response
ta-save:(ta-init-result:ta r)
::
++ sigh-json-rpc-response
|= [w=wire r=response:json-rpc]
~& [%rpc-resp w r]

View File

@ -2,9 +2,7 @@
=, ethereum
|%
::
:: shapes
::
++ registry (map @p hull)
:: # shapes
::
++ hull
$: owner=address
@ -51,37 +49,64 @@
transfer-proxy=address
==
--
::
++ function
|%
++ ships
$% [%ships who=@p]
==
--
::
:: # diffs
::
++ diff-hull
$% [%full new=hull]
[%owner new=address]
[%spawn-count ~] :: increments
[%keys enc=@ aut=@]
[%sponsor new=@p]
[%escape new=(unit @p)]
[%spawn-proxy new=address]
[%transfer-proxy new=address]
==
::
:: constants
:: # constants
::
:: contract addresses
++ contracts
|%
++ ships
0xe083.4579.269e.ac6b.eca2.
882a.6a21.f6fb.0b1d.7196
--
::
:: hashes of ship event signatures
++ ships-events
|%
::
:: ChangedPilot(uint32,address)
++ changed-pilot
0xb041.b798.8638.1a51.f9c6.29fb.4afc.6ab2.
5059.09f4.d12e.168d.0ffc.bcb9.d78c.9179
:: Transferred(uint32,address)
++ transferred
0x9014.bd16.807a.ce11.f497.2993.3667.4031.
8029.4d9f.0e4f.42a1.5be6.0d26.5369.171c
::
:: ChangedStatus(uint32,uint8,uint64)
++ changed-status
0x7d33.b6e7.2395.c6e3.c518.9773.7331.77c1.
5ba8.9ed5.0e0e.30ca.ebaa.3877.9a3e.1a79
:: Activated(uint32)
++ activated
0xe74c.0380.9d07.69e1.b1f7.06cc.8414.258c.
d1f3.b6fe.020c.d15d.0165.c210.ba50.3a0f
::
:: ChangedEscape(uint32,uint32)
++ changed-escape
0x7de2.bea0.d602.2858.c601.a403.71b6.3de0.
2940.cda9.6fef.97e4.318b.65cf.de91.5d79
:: EscapeRequested(uint32,uint32)
++ escape-requested
0xb4d4.850b.8f21.8218.141c.5665.cba3.79e5.
3e9b.b015.b51e.8d93.4be7.0210.aead.874a
::
:: ChangedSponsor(uint32,uint32)
++ changed-sponsor
0x7941.482b.dede.7ff1.c27c.f2c6.e768.2155.
a893.029d.c4a6.c619.8279.28fe.6031.9db4
:: EscapeAccepted(uint32,uint32)
++ escape-accepted
0x7e44.7c9b.1bda.4b17.4b07.96e1.00bf.7f34.
ebf3.6dbb.7fe6.6549.0b1b.fce6.246a.9da5
::
:: ChangedKey(uint32,bytes32,uint256)
:: ChangedKeys(uint32,bytes32,bytes32,uint32)
++ changed-key
0xadc9.fc32.173c.d091.e0d2.ee96.60b4.b67a.
586f.eb5a.0a30.e62c.5e9d.cfa3.573d.f8e4
0x6a39.f4e0.c935.b557.860d.3df3.9f1f.cb6b.
d63c.5a23.2d9e.fc28.5388.2994.f60c.708a
--
--