mirror of
https://github.com/urbit/shrub.git
synced 2024-12-24 20:47:27 +03:00
naive: add index of points by ethereum address
This commit is contained in:
parent
e05234c179
commit
d03d710796
@ -16,8 +16,6 @@
|
|||||||
:: when retrying, only do so if l2 txs remain in the "frozen" txs group.
|
:: when retrying, only do so if l2 txs remain in the "frozen" txs group.
|
||||||
:: on %tx diff from naive, remove the matching tx from the frozen group.
|
:: on %tx diff from naive, remove the matching tx from the frozen group.
|
||||||
::
|
::
|
||||||
::TODO remaining general work:
|
|
||||||
::
|
|
||||||
::TODO questions:
|
::TODO questions:
|
||||||
:: - it's a bit weird how we just assume the raw and tx in raw-tx to match...
|
:: - it's a bit weird how we just assume the raw and tx in raw-tx to match...
|
||||||
::
|
::
|
||||||
@ -48,7 +46,7 @@
|
|||||||
%+ map l1-tx-pointer
|
%+ map l1-tx-pointer
|
||||||
[next-gas-price=@ud txs=(list raw-tx:naive)]
|
[next-gas-price=@ud txs=(list raw-tx:naive)]
|
||||||
::
|
::
|
||||||
finding=(map keccak $?(%confirmed %failed l1-tx-pointer))
|
finding=(map keccak ?(%confirmed %failed l1-tx-pointer))
|
||||||
history=(jug address:ethereum roller-tx)
|
history=(jug address:ethereum roller-tx)
|
||||||
next-nonce=(unit @ud)
|
next-nonce=(unit @ud)
|
||||||
next-batch=time
|
next-batch=time
|
||||||
@ -138,6 +136,8 @@
|
|||||||
:: /x/nonce/[~ship]/[proxy] -> %noun (unit @)
|
:: /x/nonce/[~ship]/[proxy] -> %noun (unit @)
|
||||||
:: /x/spawned/[~ship] -> %noun (list [ship address])
|
:: /x/spawned/[~ship] -> %noun (list [ship address])
|
||||||
:: /x/next-batch -> %atom time
|
:: /x/next-batch -> %atom time
|
||||||
|
:: /x/point/[~ship] -> %noun point:naive
|
||||||
|
:: /x/points/[0xadd.ress] -> %noun (list [ship point:naive])
|
||||||
::
|
::
|
||||||
++ on-peek
|
++ on-peek
|
||||||
|= =path
|
|= =path
|
||||||
@ -152,6 +152,7 @@
|
|||||||
[%x %spawned @ ~] (spawned i.t.t.path)
|
[%x %spawned @ ~] (spawned i.t.t.path)
|
||||||
[%x %next-batch ~] ``noun+!>(next-batch)
|
[%x %next-batch ~] ``noun+!>(next-batch)
|
||||||
[%x %point @ ~] (point i.t.t.path)
|
[%x %point @ ~] (point i.t.t.path)
|
||||||
|
[%x %points @ ~] (points i.t.t.path)
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ pending-by
|
++ pending-by
|
||||||
@ -222,8 +223,8 @@
|
|||||||
?~ star=(slaw %p wat) ~
|
?~ star=(slaw %p wat) ~
|
||||||
=/ range
|
=/ range
|
||||||
%+ lot:orm:naive points.pre
|
%+ lot:orm:naive points.pre
|
||||||
:: range exclusive [star first-planet-next-star]
|
:: range exclusive [star next-star-first-planet-]
|
||||||
:: TODO: make range inclusive? [first-planet last-planet]
|
:: TODO: make range inclusive ([first-planet last-planet])?
|
||||||
::
|
::
|
||||||
[`u.star `(cat 3 +(u.star) 0x1)]
|
[`u.star `(cat 3 +(u.star) 0x1)]
|
||||||
%+ turn (tap:orm:naive range)
|
%+ turn (tap:orm:naive range)
|
||||||
@ -237,6 +238,16 @@
|
|||||||
?~ ship=(rush wat ;~(pfix sig fed:ag))
|
?~ ship=(rush wat ;~(pfix sig fed:ag))
|
||||||
``noun+!>(*(unit point:naive))
|
``noun+!>(*(unit point:naive))
|
||||||
``noun+!>((get:orm:naive points.pre u.ship))
|
``noun+!>((get:orm:naive points.pre u.ship))
|
||||||
|
::
|
||||||
|
++ points
|
||||||
|
|= wat=@t
|
||||||
|
:+ ~ ~
|
||||||
|
:- %noun
|
||||||
|
!> ^- (list [ship point:naive])
|
||||||
|
?~ addr=(slaw %ux wat)
|
||||||
|
~
|
||||||
|
%~ tap in
|
||||||
|
(~(get ju owners.pre) u.addr)
|
||||||
--
|
--
|
||||||
::
|
::
|
||||||
++ on-arvo
|
++ on-arvo
|
||||||
|
@ -127,6 +127,7 @@
|
|||||||
[~ ~(parse error:json-rpc id)]
|
[~ ~(parse error:json-rpc id)]
|
||||||
?+ method [~ ~(method error:json-rpc id)]
|
?+ method [~ ~(method error:json-rpc id)]
|
||||||
%get-point [~ (get-point id +.params point:scry)]
|
%get-point [~ (get-point id +.params point:scry)]
|
||||||
|
%get-points [~ (get-points id +.params points:scry)]
|
||||||
%transfer-point (transfer-point id +.params)
|
%transfer-point (transfer-point id +.params)
|
||||||
%cancel-tx (cancel-tx id +.params)
|
%cancel-tx (cancel-tx id +.params)
|
||||||
%get-spawned [~ (get-spawned id +.params spawned:scry)]
|
%get-spawned [~ (get-spawned id +.params spawned:scry)]
|
||||||
@ -158,6 +159,13 @@
|
|||||||
(~(scry agentio bowl) %aggregator /point/(scot %p ship)/noun)
|
(~(scry agentio bowl) %aggregator /point/(scot %p ship)/noun)
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
++ points
|
||||||
|
|= =address:naive
|
||||||
|
.^ (list [ship point:naive])
|
||||||
|
%gx
|
||||||
|
(~(scry agentio bowl) %aggregator /points/(scot %ux address)/noun)
|
||||||
|
==
|
||||||
|
::
|
||||||
++ spawned
|
++ spawned
|
||||||
|= =ship
|
|= =ship
|
||||||
.^ (list [@p @ux])
|
.^ (list [@p @ux])
|
||||||
|
@ -259,6 +259,17 @@
|
|||||||
['escape' (ship u.escape.net)]~
|
['escape' (ship u.escape.net)]~
|
||||||
== ==
|
== ==
|
||||||
::
|
::
|
||||||
|
++ points
|
||||||
|
|= points=(list [@p point:naive])
|
||||||
|
^- json
|
||||||
|
:- %a
|
||||||
|
%+ turn points
|
||||||
|
|= [ship=@p =point:naive]
|
||||||
|
%- pairs
|
||||||
|
:~ ['ship' (^ship ship)]
|
||||||
|
['point' (^point point)]
|
||||||
|
==
|
||||||
|
::
|
||||||
++ ownership
|
++ ownership
|
||||||
|= [=address:naive =nonce:naive]
|
|= [=address:naive =nonce:naive]
|
||||||
^- json
|
^- json
|
||||||
@ -369,6 +380,16 @@
|
|||||||
~(not-found error:json-rpc id)
|
~(not-found error:json-rpc id)
|
||||||
[%result id (point:to-json u.point)]
|
[%result id (point:to-json u.point)]
|
||||||
::
|
::
|
||||||
|
++ get-points
|
||||||
|
|= [id=@t params=(map @t json) scry=$-(@ux (list [@p point:naive]))]
|
||||||
|
^- response:rpc
|
||||||
|
~& ~(wyt by params)
|
||||||
|
?. =(~(wyt by params) 1)
|
||||||
|
~(params error:json-rpc id)
|
||||||
|
?~ address=(address:from-json params)
|
||||||
|
~(parse error:json-rpc id)
|
||||||
|
[%result id (points:to-json (scry u.address))]
|
||||||
|
::
|
||||||
++ transfer-point
|
++ transfer-point
|
||||||
|= [id=@t params=(map @t json)]
|
|= [id=@t params=(map @t json)]
|
||||||
^- [(unit cage) response:rpc]
|
^- [(unit cage) response:rpc]
|
||||||
|
@ -176,10 +176,12 @@
|
|||||||
+$ state
|
+$ state
|
||||||
$: =points
|
$: =points
|
||||||
=operators
|
=operators
|
||||||
|
=owners
|
||||||
dns=(list @t)
|
dns=(list @t)
|
||||||
==
|
==
|
||||||
+$ points (tree [ship point])
|
+$ points (tree [ship point])
|
||||||
+$ operators (jug address address)
|
+$ operators (jug address address)
|
||||||
|
+$ owners (jug address [ship point])
|
||||||
+$ effects (list diff)
|
+$ effects (list diff)
|
||||||
+$ proxy ?(%own %spawn %manage %vote %transfer)
|
+$ proxy ?(%own %spawn %manage %vote %transfer)
|
||||||
+$ roll (list raw-tx)
|
+$ roll (list raw-tx)
|
||||||
@ -466,6 +468,35 @@
|
|||||||
==
|
==
|
||||||
==
|
==
|
||||||
==
|
==
|
||||||
|
::
|
||||||
|
++ is-ownership-log
|
||||||
|
|= log=@ux
|
||||||
|
^- ?
|
||||||
|
=, log-names
|
||||||
|
?| =(log owner-changed)
|
||||||
|
=(log changed-transfer-proxy)
|
||||||
|
=(log changed-management-proxy)
|
||||||
|
=(log changed-voting-proxy)
|
||||||
|
=(log changed-spawn-proxy)
|
||||||
|
==
|
||||||
|
::
|
||||||
|
++ address-from-log
|
||||||
|
|= [log=@ux point]
|
||||||
|
^- (unit address)
|
||||||
|
=, log-names
|
||||||
|
?: =(log owner-changed)
|
||||||
|
`address.owner.own
|
||||||
|
?: =(log changed-transfer-proxy)
|
||||||
|
`address.transfer-proxy.own
|
||||||
|
?: =(log changed-management-proxy)
|
||||||
|
`address.management-proxy.own
|
||||||
|
?: =(log changed-voting-proxy)
|
||||||
|
`address.voting-proxy.own
|
||||||
|
?. =(log changed-spawn-proxy)
|
||||||
|
:: TODO: better way to handle this?
|
||||||
|
::
|
||||||
|
~>(%slog.[0 %unknown-log] ~)
|
||||||
|
`address.spawn-proxy.own
|
||||||
-- =>
|
-- =>
|
||||||
|%
|
|%
|
||||||
:: Receive log from L1 transaction
|
:: Receive log from L1 transaction
|
||||||
@ -508,8 +539,19 @@
|
|||||||
=/ the-point (get-point state ship)
|
=/ the-point (get-point state ship)
|
||||||
?> ?=(^ the-point)
|
?> ?=(^ the-point)
|
||||||
=* point u.the-point
|
=* point u.the-point
|
||||||
=- [effects state(points (put:orm points.state ship new-point))]
|
=; [=effects new-point=^point]
|
||||||
^- [=effects new-point=^point]
|
=? owners.state (is-ownership-log log-name)
|
||||||
|
?> ?=([@ ~] t.t.topics.log)
|
||||||
|
=* to i.t.t.topics.log
|
||||||
|
?~ address=(address-from-log log-name new-point)
|
||||||
|
owners.state
|
||||||
|
?: =(deposit-address to)
|
||||||
|
(~(put ju owners.state) u.address [ship new-point])
|
||||||
|
:: remove point from previous owner and add it to new one
|
||||||
|
::
|
||||||
|
%. [to ship new-point]
|
||||||
|
~(put ju (~(del ju owners.state) u.address [ship point]))
|
||||||
|
[effects state(points (put:orm points.state ship new-point))]
|
||||||
::
|
::
|
||||||
?: =(log-name changed-spawn-proxy:log-names)
|
?: =(log-name changed-spawn-proxy:log-names)
|
||||||
?> ?=(%l1 -.point)
|
?> ?=(%l1 -.point)
|
||||||
@ -696,7 +738,9 @@
|
|||||||
=/ res=(unit [=effects new-point=^point]) (fun u.point rest)
|
=/ res=(unit [=effects new-point=^point]) (fun u.point rest)
|
||||||
?~ res
|
?~ res
|
||||||
~
|
~
|
||||||
`[effects.u.res state(points (put:orm points.state ship new-point.u.res))]
|
:- ~
|
||||||
|
:- effects.u.res
|
||||||
|
state(points (put:orm points.state ship new-point.u.res))
|
||||||
::
|
::
|
||||||
++ process-transfer-point
|
++ process-transfer-point
|
||||||
|= [=point to=address reset=?]
|
|= [=point to=address reset=?]
|
||||||
@ -705,6 +749,7 @@
|
|||||||
::
|
::
|
||||||
?. |(=(%own proxy.from.tx) =(%transfer proxy.from.tx))
|
?. |(=(%own proxy.from.tx) =(%transfer proxy.from.tx))
|
||||||
(debug %bad-permission ~)
|
(debug %bad-permission ~)
|
||||||
|
=/ previous-owner address.owner.own.point
|
||||||
:: Execute transfer
|
:: Execute transfer
|
||||||
::
|
::
|
||||||
=/ effects-1
|
=/ effects-1
|
||||||
@ -712,10 +757,17 @@
|
|||||||
=: address.owner.own.point to
|
=: address.owner.own.point to
|
||||||
address.transfer-proxy.own.point *address
|
address.transfer-proxy.own.point *address
|
||||||
==
|
==
|
||||||
|
=; [=effects new-point=^point]
|
||||||
|
=. owners.state
|
||||||
|
:: remove point from previous owner and add it to new one
|
||||||
|
::
|
||||||
|
%. [to ship new-point]
|
||||||
|
~(put ju (~(del ju owners.state) previous-owner [ship point]))
|
||||||
|
`[effects point]
|
||||||
:: Execute reset if requested
|
:: Execute reset if requested
|
||||||
::
|
::
|
||||||
?. reset
|
?. reset
|
||||||
`[effects-1 point]
|
[effects-1 point]
|
||||||
::
|
::
|
||||||
=^ effects-2 net.point
|
=^ effects-2 net.point
|
||||||
?: =([0 0 0] +.keys.net.point)
|
?: =([0 0 0] +.keys.net.point)
|
||||||
@ -739,7 +791,7 @@
|
|||||||
address.voting-proxy.own.point *address
|
address.voting-proxy.own.point *address
|
||||||
address.transfer-proxy.own.point *address
|
address.transfer-proxy.own.point *address
|
||||||
==
|
==
|
||||||
`[:(welp effects-1 effects-2 effects-3 effects-4) point]
|
[:(welp effects-1 effects-2 effects-3 effects-4) point]
|
||||||
::
|
::
|
||||||
++ process-spawn
|
++ process-spawn
|
||||||
|= [=ship to=address]
|
|= [=ship to=address]
|
||||||
@ -766,7 +818,7 @@
|
|||||||
?. =(+((ship-rank parent)) (ship-rank ship)) (debug %bad-rank ~)
|
?. =(+((ship-rank parent)) (ship-rank ship)) (debug %bad-rank ~)
|
||||||
:: TODO check spawnlimit
|
:: TODO check spawnlimit
|
||||||
::
|
::
|
||||||
=/ [=effects new-point=point]
|
=^ [=effects new-point=point] owners.state
|
||||||
=/ point=(unit point) (get-point state ship)
|
=/ point=(unit point) (get-point state ship)
|
||||||
?> ?=(^ point) :: only parsed 4 bytes
|
?> ?=(^ point) :: only parsed 4 bytes
|
||||||
:: If spawning to self, just do it
|
:: If spawning to self, just do it
|
||||||
@ -778,20 +830,31 @@
|
|||||||
=(to address.spawn-proxy.own.u.parent-point)
|
=(to address.spawn-proxy.own.u.parent-point)
|
||||||
==
|
==
|
||||||
==
|
==
|
||||||
|
=+ new-point=u.point(address.owner.own to)
|
||||||
:: TODO: use get-point or duplicate sponsor logic
|
:: TODO: use get-point or duplicate sponsor logic
|
||||||
::
|
::
|
||||||
:- ~[[%point ship %dominion %l2] [%point ship %owner to]]
|
:_ (~(put ju owners.state) to [ship new-point])
|
||||||
u.point(address.owner.own to)
|
:_ new-point
|
||||||
|
~[[%point ship %dominion %l2] [%point ship %owner to]]
|
||||||
:: Else spawn to parent and set transfer proxy
|
:: Else spawn to parent and set transfer proxy
|
||||||
::
|
::
|
||||||
:- :~ [%point ship %dominion %l2]
|
=* parent-address address.owner.own.u.parent-point
|
||||||
[%point ship %owner address.owner.own.u.parent-point]
|
=/ new-point
|
||||||
[%point ship %transfer-proxy to]
|
|
||||||
==
|
|
||||||
%= u.point
|
%= u.point
|
||||||
address.owner.own address.owner.own.u.parent-point
|
address.owner.own parent-address
|
||||||
address.transfer-proxy.own to
|
address.transfer-proxy.own to
|
||||||
==
|
==
|
||||||
|
:: TODO: use put instead so gas is not in /lib/std?
|
||||||
|
::
|
||||||
|
:_ %- ~(gas ju owners.state)
|
||||||
|
:~ [to [ship new-point]]
|
||||||
|
[parent-address [ship new-point]]
|
||||||
|
==
|
||||||
|
:_ new-point
|
||||||
|
:~ [%point ship %dominion %l2]
|
||||||
|
[%point ship %owner parent-address]
|
||||||
|
[%point ship %transfer-proxy to]
|
||||||
|
==
|
||||||
`[effects state(points (put:orm points.state ship new-point))]
|
`[effects state(points (put:orm points.state ship new-point))]
|
||||||
::
|
::
|
||||||
++ process-configure-keys
|
++ process-configure-keys
|
||||||
@ -872,24 +935,42 @@
|
|||||||
|= [=point =address]
|
|= [=point =address]
|
||||||
?. |(=(%own proxy.from.tx) =(%manage proxy.from.tx))
|
?. |(=(%own proxy.from.tx) =(%manage proxy.from.tx))
|
||||||
(debug %bad-permission ~)
|
(debug %bad-permission ~)
|
||||||
::
|
=* ship ship.from.tx
|
||||||
:+ ~ [%point ship.from.tx %management-proxy address]~
|
=/ previous address.management-proxy.own.point
|
||||||
|
=; [=effects new-point=^point]
|
||||||
|
=. owners.state
|
||||||
|
%. [address ship new-point]
|
||||||
|
~(put ju (~(del ju owners.state) previous [ship point]))
|
||||||
|
`[effects new-point]
|
||||||
|
:- [%point ship.from.tx %management-proxy address]~
|
||||||
point(address.management-proxy.own address)
|
point(address.management-proxy.own address)
|
||||||
::
|
::
|
||||||
++ process-set-spawn-proxy
|
++ process-set-spawn-proxy
|
||||||
|= [=point =address]
|
|= [=point =address]
|
||||||
?. |(=(%own proxy.from.tx) =(%spawn proxy.from.tx))
|
?. |(=(%own proxy.from.tx) =(%spawn proxy.from.tx))
|
||||||
(debug %bad-permission ~)
|
(debug %bad-permission ~)
|
||||||
::
|
=* ship ship.from.tx
|
||||||
:+ ~ [%point ship.from.tx %spawn-proxy address]~
|
=/ previous address.spawn-proxy.own.point
|
||||||
|
=; [=effects new-point=^point]
|
||||||
|
=. owners.state
|
||||||
|
%. [address ship new-point]
|
||||||
|
~(put ju (~(del ju owners.state) previous [ship point]))
|
||||||
|
`[effects new-point]
|
||||||
|
:- [%point ship.from.tx %spawn-proxy address]~
|
||||||
point(address.spawn-proxy.own address)
|
point(address.spawn-proxy.own address)
|
||||||
::
|
::
|
||||||
++ process-set-transfer-proxy
|
++ process-set-transfer-proxy
|
||||||
|= [=point =address]
|
|= [=point =address]
|
||||||
?. |(=(%own proxy.from.tx) =(%transfer proxy.from.tx))
|
?. |(=(%own proxy.from.tx) =(%transfer proxy.from.tx))
|
||||||
(debug %bad-permission ~)
|
(debug %bad-permission ~)
|
||||||
::
|
=* ship ship.from.tx
|
||||||
:+ ~ [%point ship.from.tx %transfer-proxy address]~
|
=/ previous address.transfer-proxy.own.point
|
||||||
|
=; [=effects new-point=^point]
|
||||||
|
=. owners.state
|
||||||
|
%. [address ship new-point]
|
||||||
|
~(put ju (~(del ju owners.state) previous [ship point]))
|
||||||
|
`[effects new-point]
|
||||||
|
:- [%point ship.from.tx %transfer-proxy address]~
|
||||||
point(address.transfer-proxy.own address)
|
point(address.transfer-proxy.own address)
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
|
Loading…
Reference in New Issue
Block a user