mirror of
https://github.com/urbit/shrub.git
synced 2025-01-01 17:16:47 +03:00
roller: refactor and clean up
This commit is contained in:
parent
8c8aef96aa
commit
d5c44598ba
@ -130,6 +130,7 @@
|
||||
~& [%rerunning (lent logs.state)]
|
||||
=. points.nas.state ~
|
||||
=. own.state ~
|
||||
=. spo.state ~
|
||||
=^ * state (run-logs:do logs.state)
|
||||
`this
|
||||
::
|
||||
@ -329,7 +330,7 @@
|
||||
?: =(naive.net address.i.logs)
|
||||
(tx-effects:dice chain-id.net raw-effects cache indices)
|
||||
=< indices
|
||||
(point-effects:dice raw-effects cache nas.state indices)
|
||||
(point-effects:dice raw-effects points.cache points.nas.state indices)
|
||||
=: own.state own.indices
|
||||
spo.state spo.indices
|
||||
==
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,16 @@
|
||||
/+ naive, *naive-transactions
|
||||
::
|
||||
|%
|
||||
:: orp: ordered points in naive state by parent ship
|
||||
::
|
||||
++ orp ((on ship point:naive) por:naive)
|
||||
:: ors: ordered sending map by (increasing) L1 nonce
|
||||
::
|
||||
++ ors ((on l1-tx-pointer send-tx) nonce-order)
|
||||
:: orh: ordered tx history by (decreasing) timestamp
|
||||
::
|
||||
++ orh ((on time roll-tx) gth)
|
||||
::
|
||||
++ nonce-order
|
||||
|= [a=[* =nonce:naive] b=[* =nonce:naive]]
|
||||
(lte nonce.a nonce.b)
|
||||
@ -26,171 +36,270 @@
|
||||
?. (verify-sig-and-nonce:naive verifier chain-t nas raw-tx)
|
||||
~& >>> [%verify-sig-and-nonce %failed tx.raw-tx]
|
||||
[force ~ nas indices]
|
||||
=^ * points.nas
|
||||
=^ effects-1 points.nas
|
||||
(increment-nonce:naive nas from.tx.raw-tx)
|
||||
?~ nex=(receive-tx:naive nas tx.raw-tx)
|
||||
~& >>> [%receive-tx %failed]
|
||||
[force ~ ?:(force nas cache) indices]
|
||||
=* new-nas +.u.nex
|
||||
=* effects -.u.nex
|
||||
=/ effects (welp effects-1 -.u.nex)
|
||||
=^ updates indices
|
||||
(point-effects effects cache new-nas [own spo]:indices)
|
||||
(point-effects effects points.cache points.new-nas [own spo]:indices)
|
||||
[& updates new-nas indices]
|
||||
::
|
||||
++ point-effects
|
||||
|= [=effects:naive cache=^state:naive nas=^state:naive =indices]
|
||||
|= [=effects:naive cache=points:naive =points:naive =indices]
|
||||
^- [(list update) indices=_indices]
|
||||
=; [updates=(list update) indices=_indices]
|
||||
[(flop updates) indices]
|
||||
%+ roll effects
|
||||
|= [=diff:naive updates=(list update) indices=_indices]
|
||||
=, orm:naive
|
||||
?. ?=([%point *] diff) [updates indices]
|
||||
=* ship ship.diff
|
||||
=* sponsors spo.indices
|
||||
=* owners own.indices
|
||||
=/ old=(unit point:naive)
|
||||
(get points.cache ship)
|
||||
=/ new=point:naive
|
||||
(need (get points.nas ship))
|
||||
=^ updates=(list update) indices
|
||||
%+ roll effects
|
||||
|= [=diff:naive updates=(list update) indices=_indices]
|
||||
?. |(?=([%point *] diff) ?=([%nonce *] diff))
|
||||
[updates indices]
|
||||
?: ?=([%nonce *] diff)
|
||||
:_ indices
|
||||
(welp (nonce-updates diff cache points) updates)
|
||||
?> ?=([%point *] diff)
|
||||
=* ship ship.diff
|
||||
=* sponsors spo.indices
|
||||
=* owners own.indices
|
||||
=/ old=(unit point:naive) (get:orp cache ship)
|
||||
=/ new=point:naive (need (get:orp points ship))
|
||||
=^ update-1 sponsors
|
||||
(sponsorship diff ship new old sponsors)
|
||||
=^ update-2 owners
|
||||
(ownership diff ship new old owners)
|
||||
=/ update-3=_updates
|
||||
(point-data-updates diff ship new old)
|
||||
:_ indices
|
||||
:(welp update-3 update-2 update-1 updates)
|
||||
[(flop updates) indices]
|
||||
::
|
||||
++ sponsorship
|
||||
|= [=diff:naive =ship new=point:naive old=(unit point:naive) =sponsors]
|
||||
::^+ sponsors
|
||||
^- (quip update _sponsors)
|
||||
?. ?=([%point *] diff) `sponsors
|
||||
=* event +>.diff
|
||||
|^
|
||||
=. sponsors sponsorship
|
||||
=^ update owners ownership
|
||||
[(welp update updates) indices]
|
||||
::
|
||||
++ sponsorship
|
||||
^+ sponsors
|
||||
?+ -.event sponsors
|
||||
%owner
|
||||
?^ old
|
||||
:: ownership change
|
||||
::
|
||||
sponsors
|
||||
:: owner event with ?=(~ old) is a spawn
|
||||
?+ -.event `sponsors
|
||||
%owner
|
||||
?^ old
|
||||
:: ownership change
|
||||
::
|
||||
=* parent who.sponsor.net.new
|
||||
?: =(parent ship) sponsors
|
||||
%+ ~(put by sponsors) parent
|
||||
?~ sponsor=(~(get by sponsors) parent)
|
||||
:_ *(set @p)
|
||||
(~(put in *(set @p)) ship)
|
||||
:_ requests.u.sponsor
|
||||
(~(put in residents.u.sponsor) ship)
|
||||
`sponsors
|
||||
:: owner event with ?=(~ old) is a spawn
|
||||
::
|
||||
%escape
|
||||
?~ old sponsors
|
||||
=* from who.sponsor.net.u.old
|
||||
=* to to.event
|
||||
=* escape escape.net.u.old
|
||||
?~ to
|
||||
:: cancel/reject escape
|
||||
::
|
||||
?~ escape sponsors
|
||||
?~ receiver=(~(get by sponsors) u.escape)
|
||||
sponsors
|
||||
%+ ~(put by sponsors) u.escape
|
||||
:- residents.u.receiver
|
||||
(~(del in requests.u.receiver) ship)
|
||||
:: normal escape
|
||||
=* parent who.sponsor.net.new
|
||||
?: =(parent ship) `sponsors
|
||||
:: updates for proxy %own are taken care of
|
||||
:: in +sponsorship to avoid duplicates
|
||||
::
|
||||
:- ~
|
||||
%+ ~(put by sponsors) parent
|
||||
?~ sponsor=(~(get by sponsors) parent)
|
||||
:_ *(set @p)
|
||||
(~(put in *(set @p)) ship)
|
||||
:_ requests.u.sponsor
|
||||
(~(put in residents.u.sponsor) ship)
|
||||
::
|
||||
%escape
|
||||
?~ old `sponsors
|
||||
=* from who.sponsor.net.u.old
|
||||
=* to to.event
|
||||
=* escape escape.net.u.old
|
||||
?~ to
|
||||
:: cancel/reject escape
|
||||
::
|
||||
%+ ~(put by sponsors) u.to
|
||||
?~ receiver=(~(get by sponsors) u.to)
|
||||
:- *(set @p)
|
||||
(~(put in *(set @p)) ship)
|
||||
?~ escape `sponsors
|
||||
?~ receiver=(~(get by sponsors) u.escape)
|
||||
`sponsors
|
||||
::
|
||||
:- (proxy-updates diff ship new old)
|
||||
::
|
||||
%+ ~(put by sponsors) u.escape
|
||||
:- residents.u.receiver
|
||||
(~(put in requests.u.receiver) ship)
|
||||
(~(del in requests.u.receiver) ship)
|
||||
:: normal escape
|
||||
::
|
||||
%sponsor
|
||||
?~ old sponsors
|
||||
=* from who.sponsor.net.u.old
|
||||
=* to sponsor.event
|
||||
=/ previous (~(get by sponsors) from)
|
||||
?~ to
|
||||
:: detach
|
||||
::
|
||||
?~ previous sponsors
|
||||
%+ ~(put by sponsors) from
|
||||
:_ requests.u.previous
|
||||
(~(del in residents.u.previous) ship)
|
||||
:: accepted
|
||||
::
|
||||
=/ receiver (~(get by sponsors) u.to)
|
||||
=? sponsors ?=(^ receiver)
|
||||
%+ ~(put by sponsors) u.to
|
||||
:- (~(put in residents.u.receiver) ship)
|
||||
(~(del in requests.u.receiver) ship)
|
||||
=? sponsors ?=(^ previous)
|
||||
%+ ~(put by sponsors) from
|
||||
:_ requests.u.previous
|
||||
(~(del in residents.u.previous) ship)
|
||||
sponsors
|
||||
==
|
||||
:- (proxy-updates diff ship new old)
|
||||
::
|
||||
%+ ~(put by sponsors) u.to
|
||||
?~ receiver=(~(get by sponsors) u.to)
|
||||
:- *(set @p)
|
||||
(~(put in *(set @p)) ship)
|
||||
:- residents.u.receiver
|
||||
(~(put in requests.u.receiver) ship)
|
||||
::
|
||||
++ ownership
|
||||
^- (quip update _owners)
|
||||
=; [to=(unit owner) from=(unit owner)]
|
||||
=? owners &(?=(^ from) !=(address.u.from 0x0))
|
||||
(~(del ju owners) u.from ship)
|
||||
?: ?| =(~ to)
|
||||
&(?=(^ to) =(address.u.to 0x0))
|
||||
==
|
||||
[~ owners]
|
||||
?~ to [~ owners]
|
||||
:- [%point ship new u.to from]~
|
||||
(~(put ju owners) u.to ship)
|
||||
?+ -.event [~ ~]
|
||||
%owner
|
||||
:- `[%own +.event]
|
||||
?~ old ~
|
||||
`[%own address.owner.own.u.old]
|
||||
%sponsor
|
||||
?~ old `sponsors
|
||||
=* from who.sponsor.net.u.old
|
||||
=* to sponsor.event
|
||||
=/ previous (~(get by sponsors) from)
|
||||
?~ to
|
||||
:: detach
|
||||
::
|
||||
?~ previous `sponsors
|
||||
::
|
||||
:- (proxy-updates diff ship new old)
|
||||
::
|
||||
%+ ~(put by sponsors) from
|
||||
:_ requests.u.previous
|
||||
(~(del in residents.u.previous) ship)
|
||||
:: accepted
|
||||
::
|
||||
%management-proxy
|
||||
:- `[%manage +.event]
|
||||
?~ old ~
|
||||
`[%manage address.management-proxy.own.u.old]
|
||||
::
|
||||
%spawn-proxy
|
||||
:- `[%spawn +.event]
|
||||
?~ old ~
|
||||
`[%spawn address.spawn-proxy.own.u.old]
|
||||
::
|
||||
%voting-proxy
|
||||
:- `[%vote +.event]
|
||||
?~ old ~
|
||||
`[%vote address.voting-proxy.own.u.old]
|
||||
::
|
||||
%transfer-proxy
|
||||
:- `[%transfer +.event]
|
||||
?~ old ~
|
||||
`[%transfer address.transfer-proxy.own.u.old]
|
||||
==
|
||||
--
|
||||
=/ receiver (~(get by sponsors) u.to)
|
||||
=? sponsors ?=(^ receiver)
|
||||
%+ ~(put by sponsors) u.to
|
||||
:- (~(put in residents.u.receiver) ship)
|
||||
(~(del in requests.u.receiver) ship)
|
||||
=? sponsors ?=(^ previous)
|
||||
%+ ~(put by sponsors) from
|
||||
:_ requests.u.previous
|
||||
(~(del in residents.u.previous) ship)
|
||||
:_ sponsors
|
||||
(proxy-updates diff ship new old)
|
||||
==
|
||||
::
|
||||
++ ownership
|
||||
|= [=diff:naive =ship new=point:naive old=(unit point:naive) =owners]
|
||||
^- (quip update _owners)
|
||||
?. ?=([%point *] diff) `owners
|
||||
=* event +>.diff
|
||||
=; [to=(unit owner) from=(unit owner)]
|
||||
=? owners &(?=(^ from) !=(address.u.from 0x0))
|
||||
(~(del ju owners) u.from ship)
|
||||
?: ?| =(~ to)
|
||||
&(?=(^ to) =(address.u.to 0x0))
|
||||
==
|
||||
[~ owners]
|
||||
?~ to [~ owners]
|
||||
:_ (~(put ju owners) u.to ship)
|
||||
[%point diff ship new old u.to from]~
|
||||
?+ -.event [~ ~]
|
||||
%owner
|
||||
:- `[%own +.event]
|
||||
?~ old ~
|
||||
`[%own address.owner.own.u.old]
|
||||
::
|
||||
%management-proxy
|
||||
:- `[%manage +.event]
|
||||
?~ old ~
|
||||
`[%manage address.management-proxy.own.u.old]
|
||||
::
|
||||
%spawn-proxy
|
||||
:- `[%spawn +.event]
|
||||
?~ old ~
|
||||
`[%spawn address.spawn-proxy.own.u.old]
|
||||
::
|
||||
%voting-proxy
|
||||
:- `[%vote +.event]
|
||||
?~ old ~
|
||||
`[%vote address.voting-proxy.own.u.old]
|
||||
::
|
||||
%transfer-proxy
|
||||
:- `[%transfer +.event]
|
||||
?~ old ~
|
||||
`[%transfer address.transfer-proxy.own.u.old]
|
||||
==
|
||||
::
|
||||
++ proxy-updates
|
||||
|= [=diff:naive =ship =point:naive old=(unit point:naive)]
|
||||
^- (list update)
|
||||
=/ proxies=(list proxy:naive)
|
||||
~[%own %spawn %manage %vote %transfer]
|
||||
?~ old ~
|
||||
%- flop
|
||||
%+ roll proxies
|
||||
|= [=proxy:naive updates=(list update)]
|
||||
?~ owner=(get-owner u.old proxy) updates
|
||||
:_ updates
|
||||
[%point diff ship point old u.owner ~]
|
||||
::
|
||||
++ nonce-updates
|
||||
|= [=diff:naive cache=points:naive =points:naive]
|
||||
^- (list update)
|
||||
?. ?=([%nonce *] diff) ~
|
||||
=/ old=(unit point:naive) (get:orp cache ship.diff)
|
||||
=/ new=point:naive (need (get:orp points ship.diff))
|
||||
(point-data-updates diff ship.diff new old)
|
||||
::
|
||||
++ point-data-updates
|
||||
|= [=diff:naive =ship =point:naive old=(unit point:naive)]
|
||||
^- (list update)
|
||||
?. ?=([%point *] diff) ~
|
||||
=* event +>.diff
|
||||
?+ -.event ~
|
||||
%rift (proxy-updates +<)
|
||||
%keys (proxy-updates +<)
|
||||
%dominion (proxy-updates +<)
|
||||
==
|
||||
::
|
||||
++ get-owner
|
||||
|= [=point:naive =proxy:naive]
|
||||
^- [=nonce:naive _point]
|
||||
=* own own.point
|
||||
^- (unit owner)
|
||||
=, own.point
|
||||
?- proxy
|
||||
%own
|
||||
:- nonce.owner.own
|
||||
point(nonce.owner.own +(nonce.owner.own))
|
||||
?:(=(address.owner 0x0) ~ `own+address.owner)
|
||||
::
|
||||
%spawn
|
||||
:- nonce.spawn-proxy.own
|
||||
point(nonce.spawn-proxy.own +(nonce.spawn-proxy.own))
|
||||
?:(=(address.spawn-proxy 0x0) ~ `spawn+address.spawn-proxy)
|
||||
::
|
||||
%manage
|
||||
:- nonce.management-proxy.own
|
||||
point(nonce.management-proxy.own +(nonce.management-proxy.own))
|
||||
?:(=(address.management-proxy 0x0) ~ `manage+address.management-proxy)
|
||||
::
|
||||
%vote
|
||||
:- nonce.voting-proxy.own
|
||||
point(nonce.voting-proxy.own +(nonce.voting-proxy.own))
|
||||
?:(=(address.voting-proxy 0x0) ~ `vote+address.voting-proxy)
|
||||
::
|
||||
%transfer
|
||||
:- nonce.transfer-proxy.own
|
||||
point(nonce.transfer-proxy.own +(nonce.transfer-proxy.own))
|
||||
?:(=(address.transfer-proxy 0x0) ~ `transfer+address.transfer-proxy)
|
||||
==
|
||||
::
|
||||
++ get-nonce
|
||||
|= [=point:naive =proxy:naive]
|
||||
^- nonce:naive
|
||||
=, own.point
|
||||
?- proxy
|
||||
%own nonce.owner
|
||||
%spawn nonce.spawn-proxy
|
||||
%manage nonce.management-proxy
|
||||
%vote nonce.voting-proxy
|
||||
%transfer nonce.transfer-proxy
|
||||
==
|
||||
::
|
||||
++ controlled-ships
|
||||
|= [=address:ethereum =owners]
|
||||
^- (list [=proxy:naive =ship])
|
||||
=/ proxies=(list proxy:naive)
|
||||
~[%own %spawn %manage %vote %transfer]
|
||||
%+ roll proxies
|
||||
|= [=proxy:naive ships=(list [=proxy:naive ship])]
|
||||
%+ welp
|
||||
%+ turn
|
||||
~(tap in (~(get ju owners) [proxy address]))
|
||||
(lead proxy)
|
||||
ships
|
||||
:: +update-history: updates status for all given list of transaction
|
||||
::
|
||||
++ update-history
|
||||
|= [=history txs=(list pend-tx) =status]
|
||||
^- (quip update _history)
|
||||
=^ updates=(list update) history
|
||||
%+ roll txs
|
||||
|= [=pend-tx ups=(list update) history=_history]
|
||||
=, pend-tx
|
||||
=/ =roll-tx
|
||||
=, pend-tx
|
||||
:* ship.from.tx.raw-tx
|
||||
status
|
||||
(hash-raw-tx raw-tx)
|
||||
(l2-tx +<.tx.raw-tx)
|
||||
==
|
||||
=/ txs=(tree hist-tx)
|
||||
?~ txs=(~(get by history) address) ~
|
||||
u.txs
|
||||
=? txs ?=(^ txs) +:(del:orh txs time)
|
||||
:- [tx+[pend-tx status] ups]
|
||||
%+ ~(put by history) address
|
||||
(put:orh txs [time roll-tx])
|
||||
[(flop updates) history]
|
||||
--
|
||||
|
@ -6,6 +6,7 @@
|
||||
+$ owner [=proxy:naive =address:naive]
|
||||
+$ owners (jug owner ship)
|
||||
+$ sponsors (map ship [residents=(set ship) requests=(set ship)])
|
||||
+$ history (map address:ethereum (tree hist-tx))
|
||||
+$ net ?(%mainnet %ropsten %local %default)
|
||||
::
|
||||
+$ config
|
||||
@ -68,9 +69,16 @@
|
||||
==
|
||||
::
|
||||
+$ update
|
||||
$% [%point =ship =point:naive new=owner old=(unit owner)]
|
||||
[%tx =address:ethereum =roll-tx]
|
||||
==
|
||||
$% [%tx =pend-tx =status]
|
||||
::
|
||||
$: %point
|
||||
=diff:naive
|
||||
=ship
|
||||
new=point:naive
|
||||
old=(unit point:naive)
|
||||
to=owner
|
||||
from=(unit owner)
|
||||
== ==
|
||||
::
|
||||
+$ hist-tx [p=time q=roll-tx]
|
||||
+$ roll-tx [=ship =status hash=keccak type=l2-tx]
|
||||
@ -92,4 +100,8 @@
|
||||
next-gas-price=@ud
|
||||
txs=(list raw-tx:naive)
|
||||
==
|
||||
::
|
||||
+$ roller-data
|
||||
[chain-id=@ =points:naive history=(tree hist-tx) =owners =sponsors]
|
||||
::
|
||||
--
|
||||
|
@ -101,7 +101,7 @@
|
||||
;< rep=(unit client-response:iris) bind:m
|
||||
take-maybe-response:strandio
|
||||
=* fallback
|
||||
~& %fallback-gas-price
|
||||
~& >> %fallback-gas-price
|
||||
(pure:m 10.000.000.000)
|
||||
?. ?& ?=([~ %finished *] rep)
|
||||
?=(^ full-file.u.rep)
|
||||
|
Loading…
Reference in New Issue
Block a user