mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-11-10 10:05:09 +03:00
Merge remote-tracking branch 'origin/next/groups' into lf/no-perms-rejoin
This commit is contained in:
commit
f3da5488ce
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -8,4 +8,8 @@ pkg/arvo/tmp/landscape.jam filter=lfs diff=lfs merge=lfs -text
|
||||
pkg/arvo/tmp/base.jam filter=lfs diff=lfs merge=lfs -text
|
||||
pkg/arvo/tmp/bitcoin.jam filter=lfs diff=lfs merge=lfs -text
|
||||
pkg/arvo/tmp/webterm.jam filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
*.hoon text eol=lf
|
||||
*.kelvin text eol=lf
|
||||
*.bill text eol=lf
|
||||
*.docket-0 text eol=lf
|
||||
*.ship text eol=lf
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c29577dc949ac0689ba3c97ad13b812ea6c3c6cc9d255b770d2da95fd9af84b9
|
||||
size 23121802
|
||||
oid sha256:843387cce113f18b403f76b6ba97ddf1746a5436b107d087d1f33b38db6f8c1a
|
||||
size 26237959
|
||||
|
@ -54,13 +54,13 @@
|
||||
?: =(broke-continuity i.topics.event-log)
|
||||
=/ who=@ (decode-topics t.topics.event-log ~[%uint])
|
||||
=/ num=@ (decode-results data.event-log ~[%uint])
|
||||
`[who id %rift num]
|
||||
`[who id %rift num %.n]
|
||||
?: =(changed-keys i.topics.event-log)
|
||||
=/ who=@ (decode-topics t.topics.event-log ~[%uint])
|
||||
=/ [enc=octs aut=octs sut=@ud rev=@ud]
|
||||
%+ decode-results data.event-log
|
||||
~[[%bytes-n 32] [%bytes-n 32] %uint %uint]
|
||||
`[who id %keys rev sut (pass-from-eth:azimuth enc aut sut)]
|
||||
`[who id %keys [rev sut (pass-from-eth:azimuth enc aut sut)] %.n]
|
||||
?: =(lost-sponsor i.topics.event-log)
|
||||
=/ [who=@ pos=@]
|
||||
(decode-topics t.topics.event-log ~[%uint %uint])
|
||||
|
@ -7,24 +7,21 @@
|
||||
verb,
|
||||
dbug
|
||||
:: Generally don't update the snapshot until we have clay tombstoning.
|
||||
:: To update, run:
|
||||
:: =e -build-file %/lib/ethereum/hoon
|
||||
:: =l .^((list event-log:rpc:e) %gx /=azimuth=/logs/noun)
|
||||
:: */app/azimuth/logs/eth-logs ð-logs l
|
||||
::
|
||||
/* snap %eth-logs /app/azimuth/logs/eth-logs
|
||||
/* snap %azimuth-snapshot /app/azimuth/version-0/azimuth-snapshot
|
||||
:: To update, run from dojo:
|
||||
:: -azimuth-snap-state %default 'version-0'
|
||||
::
|
||||
=/ last-snap :: maybe just use the last one?
|
||||
%+ roll `(list event-log:rpc:ethereum)`snap ::~
|
||||
|= [log=event-log:rpc:ethereum last=@ud]
|
||||
?~ mined.log
|
||||
last
|
||||
(max block-number.u.mined.log last)
|
||||
:: To recreate from a full list of logs (at /app/azimuth/logs/eth-logs):
|
||||
:: -azimuth-snap-logs %default 'version-0'
|
||||
::
|
||||
=/ snap=snap-state snap
|
||||
=/ last-snap=@ number.id.snap
|
||||
::
|
||||
=, jael
|
||||
|%
|
||||
+$ app-state
|
||||
$: %2
|
||||
$: %5
|
||||
url=@ta
|
||||
=net
|
||||
whos=(set ship)
|
||||
@ -62,8 +59,14 @@
|
||||
::
|
||||
++ on-init
|
||||
^- (quip card _this)
|
||||
=/ points=@ud ~(wyt by points.nas.snap)
|
||||
%- %- slog
|
||||
[leaf+"ship: loading azimuth snapshot ({<points>} points)"]~
|
||||
::
|
||||
=: net.state %default
|
||||
logs.state snap
|
||||
nas.state nas.snap
|
||||
own.state owners.snap
|
||||
spo.state sponsors.snap
|
||||
url.state 'http://eth-mainnet.urbit.org:8545'
|
||||
==
|
||||
:_ this
|
||||
@ -89,18 +92,56 @@
|
||||
?. ?=(%1 -.old-state)
|
||||
`old-state
|
||||
%- %- slog :_ ~
|
||||
leaf+"azimuth: loading snapshot with {<(lent logs.old-state)>} events"
|
||||
leaf+"ship: loading snapshot with {<(lent logs.old-state)>} events"
|
||||
=. +.state +.old-state
|
||||
=^ cards state
|
||||
(%*(run-logs do nas.state *^state:naive) logs.state)
|
||||
[(jael-update:do (to-udiffs:do cards)) state]
|
||||
?> ?=(%2 -.old-state)
|
||||
[cards-1 this(state old-state)]
|
||||
=^ cards-2 old-state
|
||||
?. ?=(%2 -.old-state)
|
||||
`old-state
|
||||
~& > '%azimuth: updating to state 3'
|
||||
=. +.state +.old-state
|
||||
:: replace naive state and indices with snapshot
|
||||
::
|
||||
=: nas.state nas.snap
|
||||
own.state owners.snap
|
||||
spo.state sponsors.snap
|
||||
logs.state ~
|
||||
:: TODO: shouldn't be needed but have seen eth-watcher
|
||||
:: threads use a url='' if this is not used
|
||||
::
|
||||
url.state 'http://eth-mainnet.urbit.org:8545'
|
||||
==
|
||||
=/ points=@ud ~(wyt by points.nas.state)
|
||||
%- %- slog :_ ~
|
||||
leaf+"ship: processing azimuth snapshot ({<points>} points)"
|
||||
=/ snap-cards=udiffs:point (run-state:do id.snap points.nas.state)
|
||||
:_ [%3 +.state]
|
||||
%+ weld
|
||||
(jael-update:do snap-cards)
|
||||
:: start getting new logs after the last id:block in the snapshot
|
||||
::
|
||||
start:do
|
||||
=^ cards-3 old-state
|
||||
?. ?=(%3 -.old-state) [cards-2 old-state]
|
||||
:_ old-state(- %4)
|
||||
~& > '%azimuth: updating to state 4'
|
||||
[%pass /resend-pk %arvo %j %resend ~]^cards-2
|
||||
=^ cards-4 old-state
|
||||
?. ?=(%4 -.old-state) [cards-3 old-state]
|
||||
=^ cards this
|
||||
%- %*(. on-poke +.state.this +.old-state)
|
||||
[%azimuth-poke !>([%watch [url net]:old-state])]
|
||||
~& > '%azimuth: updating to state 5'
|
||||
[cards state.this(- %5)]
|
||||
?> ?=(%5 -.old-state)
|
||||
[cards-4 this(state old-state)]
|
||||
::
|
||||
++ app-states $%(state-0 state-1 app-state)
|
||||
++ app-states $%(state-0 state-1-2-3-4 app-state)
|
||||
::
|
||||
+$ state-1
|
||||
$: %1
|
||||
+$ state-1-2-3-4
|
||||
$: ?(%1 %2 %3 %4)
|
||||
url=@ta
|
||||
=net
|
||||
whos=(set ship)
|
||||
@ -126,12 +167,13 @@
|
||||
^- (quip card _this)
|
||||
?: =(%noun mark)
|
||||
?+ q.vase !!
|
||||
::
|
||||
%rerun
|
||||
~& [%rerunning (lent logs.state)]
|
||||
=. points.nas.state ~
|
||||
=. own.state ~
|
||||
=^ * state (run-logs:do logs.state)
|
||||
`this
|
||||
=/ points=@ud ~(wyt by points.nas.state)
|
||||
~& > "rerunning ({<points>} points)"
|
||||
=/ =udiffs:point
|
||||
(run-state:do (last-block-id:dice logs.state) points.nas.state)
|
||||
[(jael-update:do udiffs) this]
|
||||
::
|
||||
%resub
|
||||
:_ this :_ ~
|
||||
@ -140,13 +182,12 @@
|
||||
==
|
||||
::
|
||||
%resnap
|
||||
=. logs.state snap
|
||||
$(mark %noun, vase !>(%rerun))
|
||||
=: nas.state nas.snap
|
||||
own.state owners.snap
|
||||
spo.state sponsors.snap
|
||||
==
|
||||
`this
|
||||
==
|
||||
?: =(%eth-logs mark)
|
||||
=+ !<(logs=(list event-log:rpc:ethereum) vase)
|
||||
=. logs.state logs
|
||||
$(mark %noun, vase !>(%rerun))
|
||||
::
|
||||
?. ?=(%azimuth-poke mark)
|
||||
(on-poke:def mark vase)
|
||||
@ -156,15 +197,12 @@
|
||||
[[%pass /lo %arvo %j %listen (silt whos.poke) source.poke]~ this]
|
||||
::
|
||||
%watch
|
||||
:: TODO: only wipe out state when switching networks?
|
||||
:: ?: =(net.state net.poke)
|
||||
:: [~ this]
|
||||
=: nas.state *^state:naive
|
||||
=: nas.state ?:(?=(%default net.poke) nas.snap *^state:naive)
|
||||
own.state ?:(?=(%default net.poke) owners.snap ~)
|
||||
spo.state ?:(?=(%default net.poke) sponsors.snap ~)
|
||||
net.state net.poke
|
||||
url.state url.poke
|
||||
own.state ~
|
||||
spo.state ~
|
||||
logs.state ?:(?=(%default net.poke) snap ~)
|
||||
logs.state ~
|
||||
==
|
||||
[start:do this]
|
||||
==
|
||||
@ -188,11 +226,13 @@
|
||||
:: Slow to recalculate all the diffs, but this is necessary to make
|
||||
:: sure Jael gets the updates from the snapshot
|
||||
::
|
||||
=/ points=@ud ~(wyt by points.nas.state)
|
||||
%- %- slog :_ ~
|
||||
leaf+"azimuth: loading snapshot with {<(lent logs.state)>} events"
|
||||
=^ snap-cards state
|
||||
(%*(run-logs do nas.state *^state:naive) logs.state)
|
||||
[(weld (jael-update:do (to-udiffs:do snap-cards)) start:do) this]
|
||||
:- %leaf
|
||||
"ship: processing azimuth snapshot ({<points>} points)"
|
||||
=/ snap-cards=udiffs:point
|
||||
(%*(run-state do logs.state ~) id.snap points.nas.state)
|
||||
[(weld (jael-update:do snap-cards) start:do) this]
|
||||
::
|
||||
++ on-leave on-leave:def
|
||||
++ on-peek
|
||||
@ -237,9 +277,13 @@
|
||||
%history (welp logs.state loglist.diff)
|
||||
%logs (welp logs.state loglist.diff)
|
||||
==
|
||||
=? nas.state ?=(%history -.diff) *^state:naive
|
||||
=^ effects state (run-logs:do loglist.diff)
|
||||
:: doing :azimuth|watch caused a l2-sig-fail when using the eth-log
|
||||
:: snapshot because we were not updating nas with the saved logs.
|
||||
::
|
||||
:: now (L: 189) nas.state is loaded with the contents of the snapshot,
|
||||
:: if we are on the %default network.
|
||||
::
|
||||
=^ effects state (run-logs:do loglist.diff)
|
||||
:_ this
|
||||
%+ weld
|
||||
(event-update:do effects)
|
||||
@ -287,16 +331,27 @@
|
||||
^- (list ?(@ux (list @ux)))
|
||||
~
|
||||
::
|
||||
++ data-to-hex
|
||||
|= data=@t
|
||||
?~ data *@ux
|
||||
?: =(data '0x') *@ux
|
||||
(hex-to-num:ethereum data)
|
||||
++ run-state
|
||||
|= [=id:block =points:naive]
|
||||
::%- road |. :: count memory usage in a separate road
|
||||
^- =udiffs:point
|
||||
%- flop
|
||||
%+ roll (tap:orp:dice points)
|
||||
|= [[=ship naive-point=point:naive] =udiffs:point]
|
||||
=, naive-point
|
||||
=/ =pass
|
||||
(pass-from-eth:azimuth [32^crypt 32^auth suite]:keys.net)
|
||||
^- (list [@p udiff:point])
|
||||
:* [ship id %rift rift.net %.y]
|
||||
[ship id %keys [life.keys.net suite.keys.net pass] %.y]
|
||||
[ship id %spon ?:(has.sponsor.net `who.sponsor.net ~)]
|
||||
udiffs
|
||||
==
|
||||
::
|
||||
++ run-logs
|
||||
|= [logs=(list event-log:rpc:ethereum)]
|
||||
^- (quip tagged-diff _state)
|
||||
=+ net=(get-network net.state)
|
||||
=+ net=(get-network:dice net.state)
|
||||
=| effects=(list tagged-diff)
|
||||
!. :: saves 700MB replaying snapshot
|
||||
=- =/ res (mule -)
|
||||
@ -309,11 +364,12 @@
|
||||
[(flop effects) state]
|
||||
?~ mined.i.logs
|
||||
$(logs t.logs)
|
||||
=/ [raw-effects=effects:naive new-nas=_nas.state]
|
||||
=+ cache=nas.state
|
||||
=^ raw-effects nas.state
|
||||
=/ =^input:naive
|
||||
:- block-number.u.mined.i.logs
|
||||
?: =(azimuth.net address.i.logs)
|
||||
=/ data (data-to-hex data.i.logs)
|
||||
=/ data (data-to-hex:dice data.i.logs)
|
||||
=/ =event-log:naive
|
||||
[address.i.logs data topics.i.logs]
|
||||
[%log event-log]
|
||||
@ -321,28 +377,16 @@
|
||||
[%bat *@]
|
||||
[%bat u.input.u.mined.i.logs]
|
||||
(%*(. naive lac |) verifier chain-id.net nas.state input)
|
||||
:: TODO: move to /lib/dice ?
|
||||
:: TODO: make index update optional?
|
||||
::
|
||||
=/ [new-own=_own.state new-spo=_spo.state]
|
||||
=< [own spo]
|
||||
?. =(azimuth.net address.i.logs)
|
||||
%: apply-effects:dice
|
||||
chain-id.net
|
||||
raw-effects
|
||||
nas.state
|
||||
own.state
|
||||
spo.state
|
||||
==
|
||||
%: update-indices:dice
|
||||
raw-effects
|
||||
nas.state
|
||||
new-nas
|
||||
own.state
|
||||
spo.state
|
||||
==
|
||||
=: nas.state new-nas
|
||||
own.state new-own
|
||||
spo.state new-spo
|
||||
=/ =indices [own spo]:state
|
||||
=. indices
|
||||
?: =(naive.net address.i.logs)
|
||||
(tx-effects:dice chain-id.net raw-effects cache indices)
|
||||
=< indices
|
||||
(point-effects:dice raw-effects points.cache points.nas.state indices)
|
||||
=: own.state own.indices
|
||||
spo.state spo.indices
|
||||
==
|
||||
=/ effects-1
|
||||
=/ =id:block [block-hash block-number]:u.mined.i.logs
|
||||
@ -358,12 +402,12 @@
|
||||
^- (unit [=ship =udiff:point])
|
||||
?. ?=(%point +<.tag) ~
|
||||
?+ +>+<.tag ~
|
||||
%rift `[ship.tag id.tag %rift rift.tag]
|
||||
%rift `[ship.tag id.tag %rift rift.tag %.n]
|
||||
%sponsor `[ship.tag id.tag %spon sponsor.tag]
|
||||
%keys
|
||||
=/ =pass
|
||||
(pass-from-eth:azimuth 32^crypt.keys.tag 32^auth.keys.tag suite.keys.tag)
|
||||
`[ship.tag id.tag %keys life.keys.tag suite.keys.tag pass]
|
||||
`[ship.tag id.tag %keys [life.keys.tag suite.keys.tag pass] %.n]
|
||||
==
|
||||
::
|
||||
++ jael-update
|
||||
@ -391,26 +435,14 @@
|
||||
^- card
|
||||
[%give %fact ~[/event] %naive-diffs !>(+.tag)]
|
||||
::
|
||||
++ get-network
|
||||
|= =net
|
||||
^- [azimuth=@ux naive=@ux chain-id=@ launch=@]
|
||||
=< [azimuth naive chain-id launch]
|
||||
=, azimuth
|
||||
?- net
|
||||
%mainnet mainnet-contracts
|
||||
%ropsten ropsten-contracts
|
||||
%local local-contracts
|
||||
%default contracts
|
||||
==
|
||||
::
|
||||
++ start
|
||||
^- (list card)
|
||||
=+ net=(get-network net.state)
|
||||
=+ net=(get-network:dice net.state)
|
||||
=/ args=vase !>
|
||||
:+ %watch /[dap.bowl]
|
||||
^- config:eth-watcher
|
||||
:* url.state =(%czar (clan:title our.bowl)) refresh ~h30
|
||||
(max launch.net ?:(=(net.state %default) last-snap 0))
|
||||
(max launch.net ?:(=(net.state %default) +(last-snap) 0))
|
||||
~[azimuth.net]
|
||||
~[naive.net]
|
||||
(topics whos.state)
|
||||
|
Binary file not shown.
BIN
pkg/arvo/app/azimuth/version-0.azimuth-snapshot
Normal file
BIN
pkg/arvo/app/azimuth/version-0.azimuth-snapshot
Normal file
Binary file not shown.
@ -200,6 +200,9 @@
|
||||
=/ contracts (get-contracts network)
|
||||
?+ -.call ecliptic:contracts
|
||||
%send-point delegated-sending:contracts
|
||||
::
|
||||
?(%approve-batch-transfer %transfer-batch %withdraw)
|
||||
linear-star-release:contracts
|
||||
==
|
||||
::
|
||||
++ deed
|
||||
@ -379,7 +382,7 @@
|
||||
?> =(%king (clan:title s))
|
||||
(~(put in ss) (^sein:title s))
|
||||
|-
|
||||
?~ parents txs
|
||||
?~ parents !! ::txs
|
||||
=. txs
|
||||
%+ do-here ecliptic:mainnet-contracts
|
||||
(set-spawn-proxy:dat i.parents lockup-contract)
|
||||
@ -394,15 +397,18 @@
|
||||
=. txs
|
||||
%+ do-here ecliptic:mainnet-contracts
|
||||
(set-transfer-proxy:dat i.what lockup-contract)
|
||||
=. txs
|
||||
%+ do-here lockup-contract
|
||||
(deposit:dat to i.what)
|
||||
$(what t.what)
|
||||
==
|
||||
:: depositing
|
||||
::
|
||||
|-
|
||||
?~ what txs
|
||||
=. txs
|
||||
%+ do-here lockup-contract
|
||||
(deposit:dat to i.what)
|
||||
:: =. txs
|
||||
:: %+ do-here lockup-contract
|
||||
:: (deposit:dat to i.what)
|
||||
$(what t.what)
|
||||
++ do-here
|
||||
|= [contract=address dat=tape]
|
||||
|
@ -902,6 +902,9 @@
|
||||
%dv (dy-sing hand+q.bil %a p.bil (snoc q.bil %hoon))
|
||||
%ge (dy-run-generator (dy-cage p.p.p.bil) q.p.bil)
|
||||
%sa
|
||||
=/ has-mark .?((get-fit:clay he-beak %mar p.bil))
|
||||
?. has-mark
|
||||
(he-diff(poy ~) %tan leaf+"dojo: %{(trip p.bil)} missing" ~)
|
||||
=+ .^(=dais:clay cb+(en-beam he-beak /[p.bil]))
|
||||
(dy-hand p.bil *vale:dais)
|
||||
::
|
||||
@ -910,8 +913,12 @@
|
||||
=/ has-mark .?((get-fit:clay he-beak %mar p.bil))
|
||||
?. has-mark :: yolo
|
||||
(dy-hand p.bil q.cag)
|
||||
=+ .^(=tube:clay cc+(en-beam he-beak /[p.cag]/[p.bil]))
|
||||
(dy-hand p.bil (tube q.cag))
|
||||
=/ res
|
||||
=+ .^(=tube:clay cc+(en-beam he-beak /[p.cag]/[p.bil]))
|
||||
(mule |.((tube q.cag)))
|
||||
?: ?=(%| -.res)
|
||||
(he-diff(poy ~) %tan leaf+"dojo: %as %{(trip p.bil)} failed" p.res)
|
||||
(dy-hand p.bil p.res)
|
||||
::
|
||||
%do
|
||||
=/ gat (dy-eval p.bil)
|
||||
|
@ -462,9 +462,9 @@
|
||||
++ release-logs
|
||||
|= [=path dog=watchdog]
|
||||
^- (quip card watchdog)
|
||||
?: (lth number.dog 0) :: TODO: 30!
|
||||
?: (lth number.dog 30)
|
||||
`dog
|
||||
=/ rel-number (sub number.dog 0) :: TODO: 30!
|
||||
=/ rel-number (sub number.dog 30)
|
||||
=/ numbers=(list number:block) ~(tap in ~(key by pending-logs.dog))
|
||||
=. numbers (sort numbers lth)
|
||||
=^ logs=(list event-log:rpc:ethereum) dog
|
||||
|
@ -2,27 +2,28 @@
|
||||
/+ drum=hood-drum, helm=hood-helm, kiln=hood-kiln
|
||||
|%
|
||||
+$ state
|
||||
$~ [%22 *state:drum *state:helm *state:kiln]
|
||||
$>(%22 any-state)
|
||||
$~ [%23 *state:drum *state:helm *state:kiln]
|
||||
$>(%23 any-state)
|
||||
::
|
||||
+$ any-state
|
||||
$% [ver=?(%1 %2 %3 %4 %5 %6) lac=(map @tas fin-any-state)]
|
||||
[%7 drum=state-2:drum helm=state:helm kiln=state-0:kiln]
|
||||
[%8 drum=state-2:drum helm=state:helm kiln=state-0:kiln]
|
||||
[%9 drum=state-2:drum helm=state:helm kiln=state-0:kiln]
|
||||
[%10 drum=state-2:drum helm=state:helm kiln=state-0:kiln]
|
||||
[%11 drum=state-2:drum helm=state:helm kiln=state-0:kiln]
|
||||
[%12 drum=state-2:drum helm=state:helm kiln=state-0:kiln]
|
||||
[%13 drum=state-2:drum helm=state:helm kiln=state-1:kiln]
|
||||
[%14 drum=state-2:drum helm=state:helm kiln=state-1:kiln]
|
||||
[%15 drum=state-2:drum helm=state:helm kiln=state-2:kiln]
|
||||
[%16 drum=state-4:drum helm=state:helm kiln=state-3:kiln]
|
||||
[%17 drum=state-4:drum helm=state:helm kiln=state-4:kiln]
|
||||
[%18 drum=state-4:drum helm=state:helm kiln=state-5:kiln]
|
||||
[%19 drum=state-4:drum helm=state:helm kiln=state-6:kiln]
|
||||
[%20 drum=state-4:drum helm=state:helm kiln=state-7:kiln]
|
||||
[%21 drum=state-4:drum helm=state:helm kiln=state-8:kiln]
|
||||
[%22 drum=state-4:drum helm=state:helm kiln=state-9:kiln]
|
||||
[%7 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||
[%8 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||
[%9 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||
[%10 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||
[%11 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||
[%12 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||
[%13 drum=state-2:drum helm=state-1:helm kiln=state-1:kiln]
|
||||
[%14 drum=state-2:drum helm=state-1:helm kiln=state-1:kiln]
|
||||
[%15 drum=state-2:drum helm=state-1:helm kiln=state-2:kiln]
|
||||
[%16 drum=state-4:drum helm=state-1:helm kiln=state-3:kiln]
|
||||
[%17 drum=state-4:drum helm=state-1:helm kiln=state-4:kiln]
|
||||
[%18 drum=state-4:drum helm=state-1:helm kiln=state-5:kiln]
|
||||
[%19 drum=state-4:drum helm=state-1:helm kiln=state-6:kiln]
|
||||
[%20 drum=state-4:drum helm=state-1:helm kiln=state-7:kiln]
|
||||
[%21 drum=state-4:drum helm=state-1:helm kiln=state-8:kiln]
|
||||
[%22 drum=state-4:drum helm=state-1:helm kiln=state-9:kiln]
|
||||
[%23 drum=state-4:drum helm=state-2:helm kiln=state-9:kiln]
|
||||
==
|
||||
+$ any-state-tuple
|
||||
$: drum=any-state:drum
|
||||
@ -48,6 +49,7 @@
|
||||
++ on-fail on-fail:def
|
||||
++ on-init
|
||||
^- step:agent:gall
|
||||
=^ h helm.state on-init:helm-core
|
||||
=^ d drum.state on-init:drum-core
|
||||
=^ k kiln.state on-init:kiln-core
|
||||
[:(welp d k) this]
|
||||
|
@ -151,12 +151,16 @@
|
||||
?: ?=(l2-tx method)
|
||||
(process-rpc id +.params method over-quota:scry)
|
||||
?+ method [~ ~(method error:json-rpc id)]
|
||||
%cancel-transaction (cancel-tx id +.params)
|
||||
%when-next-batch `(next-timer id +.params next-batch:scry)
|
||||
%when-next-slice `(next-timer id +.params next-slice:scry)
|
||||
%spawns-remaining `(spawns-remaining id +.params unspawned:scry)
|
||||
%get-remaining-quota `(quota-remaining id +.params ship-quota:scry)
|
||||
%get-allowance `(ship-allowance id +.params allowance:scry)
|
||||
%get-point `(get-point id +.params point:scry)
|
||||
%get-ships `(get-ships id +.params ships:scry)
|
||||
%cancel-transaction (cancel-tx id +.params)
|
||||
%get-spawned `(get-spawned id +.params spawned:scry)
|
||||
%get-unspawned `(get-spawned id +.params unspawned:scry)
|
||||
%spawns-remaining `(spawns-remaining id +.params unspawned:scry)
|
||||
%get-sponsored-points `(sponsored-points id +.params sponsored:scry)
|
||||
%get-owned-points `(get-ships id +.params owned:scry)
|
||||
%get-transferring-for `(get-ships id +.params transfers:scry)
|
||||
@ -168,18 +172,13 @@
|
||||
%get-pending-by-address `(addr:pending id +.params addr:pending:scry)
|
||||
%get-pending-tx `(hash:pending id +.params hash:pending:scry)
|
||||
%get-transaction-status `(status id +.params tx-status:scry)
|
||||
%when-next-batch `(next-batch id +.params next-batch:scry)
|
||||
%get-predicted-state `(get-naive id +.params predicted:scry)
|
||||
%get-nonce `(nonce id +.params nonce:scry)
|
||||
%get-history `(history id +.params addr:history:scry)
|
||||
%get-roller-config `(get-config id +.params config:scry)
|
||||
%prepare-for-signing `(hash-transaction id +.params chain:scry | &)
|
||||
%get-unsigned-tx `(hash-transaction id +.params chain:scry & |)
|
||||
%get-predicted-state `(get-naive id +.params predicted:scry)
|
||||
%prepare-for-signing `(hash-transaction id +.params chain:scry | &)
|
||||
%hash-raw-transaction `(hash-raw-transaction id +.params)
|
||||
:: TODO: deprecated, remove (used together with personal_sign)
|
||||
::
|
||||
%hash-transaction ::`(hash-transaction id +.params chain:scry | &)
|
||||
`(hash-transaction id +.params chain:scry & |)
|
||||
==
|
||||
--
|
||||
::
|
||||
@ -307,7 +306,13 @@
|
||||
++ next-batch
|
||||
.^ time
|
||||
%gx
|
||||
(~(scry agentio bowl) %roller /next-batch/noun)
|
||||
(~(scry agentio bowl) %roller /next-batch/atom)
|
||||
==
|
||||
::
|
||||
++ next-slice
|
||||
.^ time
|
||||
%gx
|
||||
(~(scry agentio bowl) %roller /next-slice/atom)
|
||||
==
|
||||
::
|
||||
++ nonce
|
||||
@ -356,6 +361,20 @@
|
||||
(~(scry agentio bowl) %roller /over-quota/(scot %p ship)/atom)
|
||||
==
|
||||
::
|
||||
++ ship-quota
|
||||
|= =ship
|
||||
.^ @ud
|
||||
%gx
|
||||
(~(scry agentio bowl) %roller /ship-quota/(scot %p ship)/atom)
|
||||
==
|
||||
::
|
||||
++ allowance
|
||||
|= =ship
|
||||
.^ (unit @ud)
|
||||
%gx
|
||||
(~(scry agentio bowl) %roller /allowance/(scot %p ship)/noun)
|
||||
==
|
||||
::
|
||||
++ ready
|
||||
.^ ?
|
||||
%gx
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -30,4 +30,4 @@
|
||||
?. =(*^rift rift)
|
||||
rift
|
||||
+(.^(^rift j+/(scot %p our)/rift/(scot %da now)/(scot %p mon)))
|
||||
`[mon *id:block:jael %rift rift]
|
||||
`[mon *id:block:jael %rift rift %.n]
|
||||
|
@ -42,4 +42,4 @@
|
||||
leaf+(scow %uw (jam seed))
|
||||
==
|
||||
pub:ex:cub
|
||||
`[mon *id:block:jael %keys life 1 pass]
|
||||
`[mon *id:block:jael %keys [life 1 pass] %.n]
|
||||
|
@ -41,4 +41,4 @@
|
||||
leaf+(scow %uw (jam seed))
|
||||
==
|
||||
pub:ex:cub
|
||||
`[mon *id:block:jael %keys 1 1 pass]
|
||||
`[mon *id:block:jael %keys [1 1 pass] %.n]
|
||||
|
6
pkg/arvo/gen/roller/assign.hoon
Normal file
6
pkg/arvo/gen/roller/assign.hoon
Normal file
@ -0,0 +1,6 @@
|
||||
:: Assigns a specific quota to the given ship
|
||||
:: Not providing a quota allows the ship to submit any number of transactions
|
||||
::
|
||||
:- %say
|
||||
|= [* [=ship quota=(unit @ud) ~] ~]
|
||||
[%roller-action %assign ship quota]
|
5
pkg/arvo/gen/roller/refuel.hoon
Normal file
5
pkg/arvo/gen/roller/refuel.hoon
Normal file
@ -0,0 +1,5 @@
|
||||
:: Bumps the gas price for a sending transaction
|
||||
::
|
||||
:- %say
|
||||
|= [* [nonce=@ gas=@ud address=(unit @ux) ~] ~]
|
||||
[%roller-action %refuel nonce address gas]
|
@ -599,7 +599,7 @@
|
||||
~(parse error:json-rpc id)
|
||||
[%result id (tx-status:to-json (scry u.hash))]
|
||||
::
|
||||
++ next-batch
|
||||
++ next-timer
|
||||
|= [id=@t params=(map @t json) when=time]
|
||||
^- response:rpc
|
||||
?. =((lent ~(tap by params)) 0)
|
||||
@ -680,4 +680,25 @@
|
||||
?. =((lent ~(tap by params)) 0)
|
||||
~(params error:json-rpc id)
|
||||
[%result id (azimuth-config:to-json azimuth-config)]
|
||||
::
|
||||
++ quota-remaining
|
||||
|= [id=@t params=(map @t json) quota-left=$-(@p @ud)]
|
||||
^- response:rpc
|
||||
?. =((lent ~(tap by params)) 1)
|
||||
~(params error:json-rpc id)
|
||||
?~ ship=(ship:from-json params)
|
||||
~(params error:json-rpc id)
|
||||
[%result id (numb:enjs:format (quota-left u.ship))]
|
||||
::
|
||||
++ ship-allowance
|
||||
|= [id=@t params=(map @t json) allowance=$-(@p (unit @ud))]
|
||||
^- response:rpc
|
||||
?. =((lent ~(tap by params)) 1)
|
||||
~(params error:json-rpc id)
|
||||
?~ ship=(ship:from-json params)
|
||||
~(params error:json-rpc id)
|
||||
:+ %result id
|
||||
?^ allow=(allowance u.ship)
|
||||
(numb:enjs:format u.allow)
|
||||
s+(crip "No quota restrictions for {(scow %p u.ship)}")
|
||||
--
|
||||
|
@ -42,8 +42,14 @@
|
||||
%adopt (adopt:dat +.call)
|
||||
%start-document-poll (start-document-poll:dat +.call)
|
||||
%cast-document-vote (cast-document-vote:dat +.call)
|
||||
%start-upgrade-poll (start-upgrade-poll:dat +.call)
|
||||
%cast-upgrade-vote (cast-upgrade-vote:dat +.call)
|
||||
::
|
||||
%send-point (send-point:dat +.call)
|
||||
::
|
||||
%approve-batch-transfer (approve-batch-transfer:dat +.call)
|
||||
%transfer-batch (transfer-batch:dat +.call)
|
||||
%withdraw (withdraw:dat +.call)
|
||||
==
|
||||
::
|
||||
+$ call-data call-data:rpc
|
||||
@ -67,12 +73,18 @@
|
||||
++ adopt (enc adopt:cal)
|
||||
++ start-document-poll (enc start-document-poll:cal)
|
||||
++ cast-document-vote (enc cast-document-vote:cal)
|
||||
++ start-upgrade-poll (enc start-upgrade-poll:cal)
|
||||
++ cast-upgrade-vote (enc cast-upgrade-vote:cal)
|
||||
::
|
||||
++ register-linear (enc register-linear:cal)
|
||||
++ register-conditional (enc register-conditional:cal)
|
||||
++ deposit (enc deposit:cal)
|
||||
::
|
||||
++ send-point (enc send-point:cal)
|
||||
::
|
||||
++ approve-batch-transfer (enc approve-batch-transfer:cal)
|
||||
++ transfer-batch (enc transfer-batch:cal)
|
||||
++ withdraw (enc withdraw:cal)
|
||||
--
|
||||
::
|
||||
::TODO lib
|
||||
@ -170,6 +182,25 @@
|
||||
[%bool support]
|
||||
==
|
||||
::
|
||||
++ start-upgrade-poll
|
||||
|= [gal=ship =address]
|
||||
^- call-data
|
||||
?> =(%czar (clan:title gal))
|
||||
:- 'startUpgradePoll(uint8,address)'
|
||||
:~ [%uint `@`gal]
|
||||
[%address address]
|
||||
==
|
||||
::
|
||||
++ cast-upgrade-vote
|
||||
|= [gal=ship =address support=?]
|
||||
^- call-data
|
||||
?> =(%czar (clan:title gal))
|
||||
:- 'castUpgradeVote(uint8,address,bool)'
|
||||
:~ [%uint `@`gal]
|
||||
[%address address]
|
||||
[%bool support]
|
||||
==
|
||||
::
|
||||
::
|
||||
++ set-dns-domains
|
||||
|= [pri=tape sec=tape ter=tape]
|
||||
@ -252,6 +283,27 @@
|
||||
[%address to]
|
||||
==
|
||||
::
|
||||
++ approve-batch-transfer
|
||||
|= to=address
|
||||
^- call-data
|
||||
:- 'approveBatchTransfer(address)'
|
||||
:~ [%address to]
|
||||
==
|
||||
::
|
||||
++ transfer-batch
|
||||
|= from=address
|
||||
^- call-data
|
||||
:- 'transferBatch(address)'
|
||||
:~ [%address from]
|
||||
==
|
||||
::
|
||||
++ withdraw
|
||||
|= to=address
|
||||
^- call-data
|
||||
:- 'withdraw(address)'
|
||||
:~ [%address to]
|
||||
==
|
||||
::
|
||||
:: read calls
|
||||
::
|
||||
++ rights
|
||||
|
@ -1,207 +1,388 @@
|
||||
:: dice: helper functions for L2 Rollers
|
||||
::
|
||||
/- *dice
|
||||
/+ naive, *naive-transactions
|
||||
/+ naive, *naive-transactions, ethereum, azimuth
|
||||
:: verbose bit
|
||||
::
|
||||
=| verb=?
|
||||
::
|
||||
|%
|
||||
:: 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)
|
||||
::
|
||||
++ apply-effects
|
||||
|= [chain-t=@ =effects:naive =indices]
|
||||
++ data-to-hex
|
||||
|= data=@t
|
||||
?~ data *@ux
|
||||
?: =(data '0x') *@ux
|
||||
(hex-to-num:ethereum data)
|
||||
::
|
||||
++ get-network
|
||||
|= =net
|
||||
^- [azimuth=@ux naive=@ux chain-id=@ launch=@]
|
||||
=< [azimuth naive chain-id launch]
|
||||
=, azimuth
|
||||
?- net
|
||||
%mainnet mainnet-contracts
|
||||
%ropsten ropsten-contracts
|
||||
%local local-contracts
|
||||
%default contracts
|
||||
==
|
||||
::
|
||||
++ last-block-id
|
||||
|= logs=(list event-log:rpc:ethereum)
|
||||
^- id:block:jael
|
||||
%+ roll logs
|
||||
|= [log=event-log:rpc:ethereum =id:block:jael]
|
||||
?~ mined.log id
|
||||
?. (gth block-number.u.mined.log number.id)
|
||||
id
|
||||
[block-hash block-number]:u.mined.log
|
||||
::
|
||||
++ tx-effects
|
||||
|= [chain-t=@ =effects:naive nas=^state:naive =indices]
|
||||
^+ indices
|
||||
%+ roll effects
|
||||
|= [=diff:naive indices=_indices]
|
||||
?. ?=([%tx *] diff) indices::[nas own spo]
|
||||
=< indices
|
||||
(apply-raw-tx | chain-t raw-tx.diff indices)
|
||||
%+ roll effects
|
||||
|= [=diff:naive nas=_nas indices=_indices]
|
||||
?. ?=([%tx *] diff) [nas indices]
|
||||
=< [nas indices]
|
||||
%- %*(. apply-raw-tx verb |)
|
||||
[| chain-t raw-tx.diff nas indices]
|
||||
::
|
||||
++ apply-raw-tx
|
||||
|= [force=? chain-t=@ =raw-tx:naive =indices]
|
||||
^- [? ups=(list update) indices=_indices]
|
||||
=+ cache-nas=nas.indices
|
||||
|= [force=? chain-t=@ =raw-tx:naive nas=^state:naive =indices]
|
||||
^- [? (list update) nas=_nas indices=_indices]
|
||||
=+ cache=nas
|
||||
=/ chain-t=@t (ud-to-ascii:naive chain-t)
|
||||
?. (verify-sig-and-nonce:naive verifier chain-t nas.indices raw-tx)
|
||||
~& [%verify-sig-and-nonce %failed tx.raw-tx]
|
||||
[force ~ indices]
|
||||
=^ * points.nas.indices
|
||||
(increment-nonce:naive nas.indices from.tx.raw-tx)
|
||||
?~ nex=(receive-tx:naive nas.indices tx.raw-tx)
|
||||
~& [%receive-tx %failed]
|
||||
=? nas.indices !force cache-nas
|
||||
[force ~ indices]
|
||||
?. (verify-sig-and-nonce:naive verifier chain-t nas raw-tx)
|
||||
=+ [force ~ nas indices]
|
||||
?. verb -
|
||||
~& >>> [verb+verb %verify-sig-and-nonce %failed tx.raw-tx] -
|
||||
=^ effects-1 points.nas
|
||||
(increment-nonce:naive nas from.tx.raw-tx)
|
||||
?~ nex=(receive-tx:naive nas tx.raw-tx)
|
||||
=+ [force ~ ?:(force nas cache) indices]
|
||||
?. verb -
|
||||
~& >>> [verb+verb %receive-tx %failed] -
|
||||
=* new-nas +.u.nex
|
||||
=* effects -.u.nex
|
||||
=/ [updates=(list update) own=_own.indices spo=_spo.indices]
|
||||
(update-indices effects cache-nas new-nas [own spo]:indices)
|
||||
=: nas.indices new-nas
|
||||
own.indices own
|
||||
spo.indices spo
|
||||
==
|
||||
[& updates indices]
|
||||
=/ effects (welp effects-1 -.u.nex)
|
||||
=^ updates indices
|
||||
(point-effects effects points.cache points.new-nas [own spo]:indices)
|
||||
[& updates new-nas indices]
|
||||
::
|
||||
++ update-indices
|
||||
|= $: =effects:naive
|
||||
cache-nas=^state:naive
|
||||
nas=^state:naive
|
||||
=owners
|
||||
=sponsors
|
||||
==
|
||||
^- [(list update) own=_owners spo=_sponsors]
|
||||
%+ roll effects
|
||||
|= $: =diff:naive
|
||||
ups=(list update)
|
||||
owners=_owners
|
||||
sponsors=_sponsors
|
||||
==
|
||||
=, orm:naive
|
||||
?. ?=([%point *] diff) [ups owners sponsors]
|
||||
=* ship ship.diff
|
||||
=/ old=(unit point:naive)
|
||||
(get points.cache-nas ship)
|
||||
=/ new=point:naive
|
||||
(need (get points.nas ship))
|
||||
++ point-effects
|
||||
|= [=effects:naive cache=points:naive =points:naive =indices]
|
||||
^- [(list update) indices=_indices]
|
||||
=^ 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 diff ship new old sponsors)
|
||||
=^ update-2 owners
|
||||
(ownership-diff 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
|
||||
|= [=diff:naive =ship new=point:naive old=(unit point:naive) =sponsors]
|
||||
^- (quip update _sponsors)
|
||||
?. ?=([%point *] diff) `sponsors
|
||||
=* event +>.diff
|
||||
|^
|
||||
=^ updates owners ownership
|
||||
=+ sponsors=sponsorship
|
||||
:+ (weld ups updates)
|
||||
owners
|
||||
sponsors
|
||||
::
|
||||
++ 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))
|
||||
==
|
||||
[ups owners]
|
||||
?~ to [ups owners]
|
||||
:_ (~(put ju owners) u.to ship)
|
||||
(snoc ups [%point ship new u.to from])
|
||||
?+ -.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]
|
||||
=/ 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
|
||||
|= [=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]
|
||||
==
|
||||
::
|
||||
++ create-indices
|
||||
|= nas=^state:naive
|
||||
^- [sponsors owners]
|
||||
%+ roll (tap:orp points.nas)
|
||||
|= [[=ship =point:naive] =sponsors =owners]
|
||||
|^
|
||||
=? sponsors has.sponsor.net.point
|
||||
^+ sponsors
|
||||
(add-resident who.sponsor.net.point)
|
||||
=? sponsors ?=(^ escape.net.point)
|
||||
(add-request u.escape.net.point)
|
||||
[sponsors add-ownership]
|
||||
::
|
||||
++ add-resident
|
||||
|= sponsor=@p
|
||||
^+ sponsors
|
||||
:: galaxies have themselves as their sponsors
|
||||
::
|
||||
%spawn-proxy
|
||||
:- `[%spawn +.event]
|
||||
?~ old ~
|
||||
`[%spawn address.spawn-proxy.own.u.old]
|
||||
?: =(sponsor ship) sponsors
|
||||
%+ ~(put by sponsors) sponsor
|
||||
?~ sponsees=(~(get by sponsors) sponsor)
|
||||
:_ *(set @p)
|
||||
(~(put in *(set @p)) ship)
|
||||
:_ requests.u.sponsees
|
||||
(~(put in residents.u.sponsees) ship)
|
||||
::
|
||||
++ add-request
|
||||
|= sponsor=@p
|
||||
^+ sponsors
|
||||
:: galaxies have themselves as their sponsors
|
||||
::
|
||||
%voting-proxy
|
||||
:- `[%vote +.event]
|
||||
?~ old ~
|
||||
`[%vote address.voting-proxy.own.u.old]
|
||||
::
|
||||
%transfer-proxy
|
||||
:- `[%transfer +.event]
|
||||
?~ old ~
|
||||
`[%transfer address.transfer-proxy.own.u.old]
|
||||
==
|
||||
?: =(sponsor ship) sponsors
|
||||
%+ ~(put by sponsors) sponsor
|
||||
?~ receiver=(~(get by sponsors) sponsor)
|
||||
:- *(set @p)
|
||||
(~(put in *(set @p)) ship)
|
||||
:- residents.u.receiver
|
||||
(~(put in requests.u.receiver) ship)
|
||||
::
|
||||
++ add-ownership
|
||||
^+ owners
|
||||
=/ proxies=(list proxy:naive)
|
||||
~[%own %spawn %manage %vote %transfer]
|
||||
%+ roll proxies
|
||||
|= [=proxy:naive own=_owners]
|
||||
?~ owner=(get-owner point proxy)
|
||||
own
|
||||
(~(put ju own) u.owner ship)
|
||||
--
|
||||
::
|
||||
++ 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=@ _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]
|
||||
--
|
||||
|
@ -136,6 +136,7 @@
|
||||
::
|
||||
++ poke
|
||||
|= [=mark =vase]
|
||||
?> =(our src):hid
|
||||
?+ mark ~|([%poke-drum-bad-mark mark] !!)
|
||||
%drum-dill-belt =;(f (f !<(_+<.f vase)) poke-dill-belt)
|
||||
%drum-dill-blit =;(f (f !<(_+<.f vase)) poke-dill-blit)
|
||||
|
@ -1,27 +1,33 @@
|
||||
/+ pill
|
||||
=* card card:agent:gall
|
||||
|%
|
||||
+$ state state-1
|
||||
+$ state state-2
|
||||
+$ any-state
|
||||
$~ *state
|
||||
$% state-1
|
||||
$% state-2
|
||||
state-1
|
||||
state-0
|
||||
==
|
||||
+$ state-1
|
||||
$: %1
|
||||
mass-timer=[way=wire nex=@da tim=@dr]
|
||||
==
|
||||
+$ state-2 [%2 =mass-timer]
|
||||
+$ state-1 [%1 =mass-timer]
|
||||
+$ state-0 [%0 hoc=(map bone session-0)]
|
||||
+$ session-0
|
||||
$: say=*
|
||||
mud=*
|
||||
mass-timer=[way=wire nex=@da tim=@dr]
|
||||
=mass-timer
|
||||
==
|
||||
::
|
||||
+$ mass-timer [way=wire nex=@da tim=@dr]
|
||||
::
|
||||
++ state-0-to-1
|
||||
|= s=state-0
|
||||
^- state
|
||||
^- state-1
|
||||
[%1 mass-timer:(~(got by hoc.s) 0)]
|
||||
::
|
||||
++ state-1-to-2
|
||||
|= s=state-1
|
||||
^- state-2
|
||||
[%2 +.s]
|
||||
--
|
||||
|= [=bowl:gall sat=state]
|
||||
=| moz=(list card)
|
||||
@ -39,11 +45,17 @@
|
||||
^+ this
|
||||
?~(caz this $(caz t.caz, this (emit i.caz)))
|
||||
::
|
||||
++ on-init
|
||||
(poke-serve [~ /who] %base /gen/who/hoon ~)
|
||||
::
|
||||
++ on-load
|
||||
|= [hood-version=@ud old=any-state]
|
||||
=< abet
|
||||
=? old ?=(%0 -.old) (state-0-to-1 old)
|
||||
?> ?=(%1 -.old)
|
||||
=? old ?=(%0 -.old) (state-0-to-1 old)
|
||||
=? this ?=(%1 -.old)
|
||||
(emil -:(poke-serve [~ /who] %base /gen/who/hoon ~))
|
||||
=? old ?=(%1 -.old) (state-1-to-2 old)
|
||||
?> ?=(%2 -.old)
|
||||
this(sat old)
|
||||
::
|
||||
++ poke-rekey :: rotate private keys
|
||||
@ -199,6 +211,9 @@
|
||||
::
|
||||
++ poke
|
||||
|= [=mark =vase]
|
||||
?> ?| ?=(%helm-hi mark)
|
||||
=(our src):bowl
|
||||
==
|
||||
?+ mark ~|([%poke-helm-bad-mark mark] !!)
|
||||
%helm-ames-sift =;(f (f !<(_+<.f vase)) poke-ames-sift)
|
||||
%helm-ames-verb =;(f (f !<(_+<.f vase)) poke-ames-verb)
|
||||
|
20
pkg/arvo/mar/azimuth/snapshot.hoon
Normal file
20
pkg/arvo/mar/azimuth/snapshot.hoon
Normal file
@ -0,0 +1,20 @@
|
||||
:: /app/azimuth state snapshot
|
||||
::
|
||||
/- *dice
|
||||
::
|
||||
|_ snap=snap-state
|
||||
++ grab
|
||||
|%
|
||||
++ noun snap-state
|
||||
++ mime
|
||||
|= [mite =octs]
|
||||
(noun (cue q.octs))
|
||||
--
|
||||
::
|
||||
++ grow
|
||||
|%
|
||||
++ mime
|
||||
[/application/octet-stream (as-octs:mimes:html (jam snap))]
|
||||
--
|
||||
++ grad %mime
|
||||
--
|
@ -66,8 +66,14 @@
|
||||
[%adopt who=ship]
|
||||
[%start-document-poll gal=ship hash=@]
|
||||
[%cast-document-vote gal=ship hash=@ vote=?]
|
||||
[%start-upgrade-poll gal=ship =address]
|
||||
[%cast-upgrade-vote gal=ship =address vote=?]
|
||||
::
|
||||
[%send-point as=ship point=ship to=address]
|
||||
::
|
||||
[%approve-batch-transfer to=address]
|
||||
[%transfer-batch from=address]
|
||||
[%withdraw to=address]
|
||||
==
|
||||
::
|
||||
++ prep-result
|
||||
|
@ -1,15 +1,18 @@
|
||||
:: dice: structures for L2 rollers
|
||||
:: dice: structures for Azimuth L2 rollers
|
||||
::
|
||||
/+ naive, ethereum
|
||||
::
|
||||
|%
|
||||
+$ owner [=proxy:naive =address:naive]
|
||||
+$ owners (jug owner ship)
|
||||
+$ sponsors (map ship [residents=(set ship) requests=(set ship)])
|
||||
+$ net ?(%mainnet %ropsten %local %default)
|
||||
+$ 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)
|
||||
+$ snap-state [%0 =id:block:jael nas=^state:naive =owners =sponsors]
|
||||
::
|
||||
+$ config
|
||||
$% [%frequency frequency=@dr]
|
||||
[%fallback gas=@ud]
|
||||
[%setkey pk=@]
|
||||
[%endpoint endpoint=@t =net]
|
||||
[%resend-time time=@dr]
|
||||
@ -19,8 +22,7 @@
|
||||
==
|
||||
::
|
||||
+$ indices
|
||||
$: nas=^state:naive
|
||||
own=owners
|
||||
$: own=owners
|
||||
spo=sponsors
|
||||
==
|
||||
::
|
||||
@ -69,9 +71,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]
|
||||
@ -90,7 +99,12 @@
|
||||
pk=@
|
||||
::
|
||||
nonce=@ud
|
||||
fallback-gas-price=@ud
|
||||
next-gas-price=@ud
|
||||
txs=(list raw-tx:naive)
|
||||
==
|
||||
::
|
||||
+$ roller-data
|
||||
[chain-id=@ =points:naive history=(tree hist-tx) =owners =sponsors]
|
||||
::
|
||||
--
|
||||
|
@ -48,7 +48,7 @@
|
||||
+$ dock (pair @p term)
|
||||
+$ gang (unit (set ship))
|
||||
+$ mark @tas
|
||||
+$ mein [our=ship now=@da eny=@uvJ]
|
||||
+$ mien [our=ship now=@da eny=@uvJ]
|
||||
++ omen |$ [a] (pair path (cask a))
|
||||
+$ ship @p
|
||||
+$ sink (trel bone ship path)
|
||||
@ -214,7 +214,7 @@
|
||||
:: zen: Outside knowledge
|
||||
:: mod: internal modules
|
||||
::
|
||||
mein
|
||||
mien
|
||||
$= fad
|
||||
$: :: lac: not verbose
|
||||
::
|
||||
@ -1294,31 +1294,30 @@
|
||||
^- mass
|
||||
=; sam=(list mass)
|
||||
:+ %arvo %|
|
||||
:~ hoon+&+pit
|
||||
zuse+&+zus.mod
|
||||
:~ :+ %hoon %|
|
||||
:~ one+&+..bloq
|
||||
two+&+..turn
|
||||
tri+&+..year
|
||||
qua+&+..sane
|
||||
pen+&+..ride
|
||||
==
|
||||
hex+&+..part
|
||||
pit+&+pit
|
||||
lull+|+[dot+&+q typ+&+p ~]:lul.mod
|
||||
zuse+|+[dot+&+q typ+&+p ~]:zus.mod
|
||||
vane+|+sam
|
||||
==
|
||||
::
|
||||
=/ von
|
||||
%+ turn
|
||||
(sort ~(tap by van.mod) |=([[a=@tas *] [b=@tas *]] (aor a b)))
|
||||
::
|
||||
:~ :+ %reports %|
|
||||
=/ bem=beam [[our %home da+now] /whey] ::TODO %base?
|
||||
%+ turn von
|
||||
|= [nam=term =vane]
|
||||
=/ met (peek [~ ~] nam bem)
|
||||
~| mass/nam
|
||||
?> &(?=(^ met) ?=(^ u.met)) :: XX make optional
|
||||
nam^|+;;((list mass) q.q.u.u.met)
|
||||
::
|
||||
:+ %caches %|
|
||||
%+ turn von
|
||||
|=([nam=term =vane] nam^&+worm.vane)
|
||||
::
|
||||
:+ %dregs %|
|
||||
%+ turn von
|
||||
|=([nam=term =vane] nam^&+vase.vane)
|
||||
==
|
||||
=/ bem=beam [[our %home da+now] /whey] ::TODO %base?
|
||||
|= [nam=term =vane]
|
||||
=; mas=(list mass)
|
||||
nam^|+(welp mas [dot+&+q.vase typ+&+p.vase sac+&+worm ~]:vane)
|
||||
?~ met=(peek [~ ~] nam bem) ~
|
||||
?~ u.met ~
|
||||
~| mass+nam
|
||||
;;((list mass) q.q.u.u.met)
|
||||
:: +peek: read from the entire namespace
|
||||
::
|
||||
++ peek
|
||||
|
@ -1906,6 +1906,7 @@
|
||||
[%private-keys ~] :: sub to privates
|
||||
[%public-keys ships=(set ship)] :: sub to publics
|
||||
[%rekey =life =ring] :: update private keys
|
||||
[%resend ~] :: resend private key
|
||||
[%ruin ships=(set ship)] :: pretend breach
|
||||
$>(%trim vane-task) :: trim state
|
||||
[%turf ~] :: view domains
|
||||
@ -1980,8 +1981,8 @@
|
||||
+$ udiffs (list [=ship =udiff])
|
||||
+$ udiff
|
||||
$: =id:block
|
||||
$% [%rift =rift]
|
||||
[%keys key-update]
|
||||
$% [%rift =rift boot=?]
|
||||
[%keys key-update boot=?]
|
||||
[%spon sponsor=(unit @p)]
|
||||
[%disavow ~]
|
||||
== ==
|
||||
@ -1995,14 +1996,14 @@
|
||||
%rift
|
||||
?. (gth rift.a-udiff rift.a-point)
|
||||
~
|
||||
~? !=(rift.a-udiff +(rift.a-point))
|
||||
~? &(!=(rift.a-udiff +(rift.a-point)) !boot.a-udiff)
|
||||
[%udiff-to-diff-skipped-rift a-udiff a-point]
|
||||
`[%rift rift.a-point rift.a-udiff]
|
||||
::
|
||||
%keys
|
||||
?. (gth life.a-udiff life.a-point)
|
||||
~
|
||||
~? !=(life.a-udiff +(life.a-point))
|
||||
~? &(!=(life.a-udiff +(life.a-point)) !boot.a-udiff)
|
||||
[%udiff-to-diff-skipped-life a-udiff a-point]
|
||||
:^ ~ %keys
|
||||
[life.a-point (~(gut by keys.a-point) life.a-point *[@ud pass])]
|
||||
|
@ -1593,10 +1593,12 @@
|
||||
?~ sponsor
|
||||
~| %ames-lost-sponsor^our^ship !!
|
||||
::
|
||||
=/ =peer-state (got-peer-state ship)
|
||||
=. sponsor.peer-state u.sponsor
|
||||
::
|
||||
=. peers.ames-state (~(put by peers.ames-state) ship %known peer-state)
|
||||
=/ state=(unit peer-state) (get-peer-state ship)
|
||||
?~ state
|
||||
%- (slog leaf+"ames: missing peer-state, ignoring" ~)
|
||||
event-core
|
||||
=. sponsor.u.state u.sponsor
|
||||
=. peers.ames-state (~(put by peers.ames-state) ship %known u.state)
|
||||
event-core
|
||||
:: +on-publ-full: handle new pki data for peer(s)
|
||||
::
|
||||
|
@ -427,6 +427,13 @@
|
||||
%- curd =< abet
|
||||
(private-keys:~(feel su hen now pki etn) life.tac ring.tac)
|
||||
::
|
||||
:: resend private key to subscribers
|
||||
::
|
||||
%resend
|
||||
%- curd =< abet
|
||||
%- ~(exec su hen now pki etn)
|
||||
[yen.own.pki [%give %private-keys [lyf jaw]:own.pki]]
|
||||
::
|
||||
:: register moon keys
|
||||
::
|
||||
%moon
|
||||
@ -733,14 +740,18 @@
|
||||
=/ a-point=point (~(gut by pos.zim.pki) ship.i.udiffs *point)
|
||||
=/ a-diff=(unit diff:point) (udiff-to-diff:point udiff.i.udiffs a-point)
|
||||
=? this-su ?=(^ a-diff)
|
||||
:: if this about our keys, and we already know these, start using them
|
||||
::
|
||||
=? lyf.own
|
||||
=? this-su
|
||||
?& =(our ship.i.udiffs)
|
||||
?=(%keys -.u.a-diff)
|
||||
(~(has by jaw.own) life.to.u.a-diff)
|
||||
==
|
||||
life.to.u.a-diff
|
||||
:: if this about our keys, and we already know these, start using them
|
||||
::
|
||||
=. lyf.own life.to.u.a-diff
|
||||
:: notify subscribers (ames) to start using our new private keys
|
||||
::
|
||||
(exec yen.own [%give %private-keys [lyf jaw]:own])
|
||||
::
|
||||
(public-keys:feel original-pos %diff ship.i.udiffs u.a-diff)
|
||||
$(udiffs t.udiffs)
|
||||
::
|
||||
|
@ -4422,7 +4422,7 @@
|
||||
:: :: ++chrd:de-xml:html
|
||||
++ chrd :: character data
|
||||
%+ cook |=(a=tape ^-(mars ;/(a)))
|
||||
(plus ;~(less doq ;~(pose (just `@`10) escp)))
|
||||
(plus ;~(pose (just `@`10) escp))
|
||||
:: :: ++comt:de-xml:html
|
||||
++ comt :: comments
|
||||
=- (ifix [(jest '<!--') (jest '-->')] (star -))
|
||||
|
72
pkg/arvo/ted/azimuth/snap-logs.hoon
Normal file
72
pkg/arvo/ted/azimuth/snap-logs.hoon
Normal file
@ -0,0 +1,72 @@
|
||||
:: Creates a snapshot of the azimuth state and its indices
|
||||
:: (owners and sposnors) from a list of ethereum logs
|
||||
::
|
||||
/- spider, *dice
|
||||
/+ strand,
|
||||
azimuth,
|
||||
strandio,
|
||||
naive,
|
||||
lib=naive-transactions,
|
||||
ethereum,
|
||||
dice
|
||||
/* logs %eth-logs /app/azimuth/logs/eth-logs
|
||||
=, strand=strand:spider
|
||||
::
|
||||
=> |% +$ card card:agent:gall
|
||||
+$ task task:clay
|
||||
+$ id id:block:jael
|
||||
+$ events (list event-log:rpc:ethereum)
|
||||
--
|
||||
::
|
||||
^- thread:spider
|
||||
|= arg=vase
|
||||
=/ m (strand ,vase)
|
||||
^- form:m
|
||||
=+ !<([~ =net file-name=@t] arg)
|
||||
::
|
||||
=/ [azimuth-contract=@ux chain-id=@]
|
||||
[azimuth chain-id]:(get-network:dice net)
|
||||
::
|
||||
%- %- slog :_ ~
|
||||
leaf+"azimuth: creating snapshot with {<(lent logs)>} events"
|
||||
::
|
||||
=/ [=id nas=^state:naive]
|
||||
%+ roll `events`logs
|
||||
|= [log=event-log:rpc:ethereum =id nas=^state:naive]
|
||||
?~ mined.log
|
||||
id^nas
|
||||
=/ =^input:naive
|
||||
:- block-number.u.mined.log
|
||||
?: =(azimuth-contract address.log)
|
||||
:- %log
|
||||
[address.log (data-to-hex:dice data.log) topics.log]
|
||||
?~ input.u.mined.log
|
||||
[%bat *@]
|
||||
[%bat u.input.u.mined.log]
|
||||
=. id
|
||||
?. (gth block-number.u.mined.log number.id)
|
||||
id
|
||||
[block-hash block-number]:u.mined.log
|
||||
=^ * nas
|
||||
(%*(. naive lac |) verifier:lib chain-id nas input)
|
||||
id^nas
|
||||
::
|
||||
=/ [=sponsors =owners] (create-indices:dice nas)
|
||||
::
|
||||
%- %- slog
|
||||
:~ leaf+"points: {<~(wyt by points.nas)>}"
|
||||
leaf+"sponsors: {<~(wyt by sponsors)>}"
|
||||
leaf+"owners: {<~(wyt by owners)>}"
|
||||
leaf+"block-number: {<number.id>}"
|
||||
leaf+"block-hash: {<hash.id>}"
|
||||
==
|
||||
::
|
||||
=/ =path /app/azimuth/[file-name]/azimuth-snapshot
|
||||
=/ =cage
|
||||
:- %azimuth-snapshot
|
||||
!> ^- snap-state
|
||||
[%0 id nas owners sponsors]
|
||||
=/ =task [%info %base %& [path %ins cage]~]
|
||||
=/ =card [%pass /next %arvo %c task]
|
||||
;< ~ bind:m (send-raw-card:strandio card)
|
||||
(pure:m !>('azimuth logs processed'))
|
43
pkg/arvo/ted/azimuth/snap-state.hoon
Normal file
43
pkg/arvo/ted/azimuth/snap-state.hoon
Normal file
@ -0,0 +1,43 @@
|
||||
:: Creates a snapshot of the azimuth state and its indices
|
||||
:: (owners and sposnors) from scrying /app/azimuth
|
||||
::
|
||||
::
|
||||
/- spider, *dice
|
||||
/+ strand, strandio, naive, ethereum, dice
|
||||
=, strand=strand:spider
|
||||
=, jael
|
||||
::
|
||||
=> |% +$ card card:agent:gall
|
||||
+$ task task:clay
|
||||
+$ events (list event-log:rpc:ethereum)
|
||||
--
|
||||
::
|
||||
^- thread:spider
|
||||
|= arg=vase
|
||||
=/ m (strand ,vase)
|
||||
^- form:m
|
||||
=+ !<([~ file-name=@t] arg)
|
||||
::
|
||||
;< nas=^state:naive bind:m (scry:strandio ^state:naive /gx/azimuth/nas/noun)
|
||||
;< =owners bind:m (scry:strandio owners /gx/azimuth/own/noun)
|
||||
;< =sponsors bind:m (scry:strandio sponsors /gx/azimuth/spo/noun)
|
||||
;< =events bind:m (scry:strandio events /gx/azimuth/logs/noun)
|
||||
=/ =id:block (last-block-id:dice events)
|
||||
::
|
||||
%- %- slog
|
||||
:~ leaf+"points: {<~(wyt by points.nas)>}"
|
||||
leaf+"sponsors: {<~(wyt by sponsors)>}"
|
||||
leaf+"owners: {<~(wyt by owners)>}"
|
||||
leaf+"block-number: {<number.id>}"
|
||||
leaf+"block-hash: {<hash.id>}"
|
||||
==
|
||||
::
|
||||
=/ =path /app/azimuth/[file-name]/azimuth-snapshot
|
||||
=/ =cage
|
||||
:- %azimuth-snapshot
|
||||
!> ^- snap-state
|
||||
[%0 id nas owners sponsors]
|
||||
=/ =task [%info %base %& [path %ins cage]~]
|
||||
=/ =card [%pass /next %arvo %c task]
|
||||
;< ~ bind:m (send-raw-card:strandio card)
|
||||
(pure:m !>('azimuth state saved'))
|
@ -82,8 +82,8 @@
|
||||
|= [pup=watchpup =latest=number:block]
|
||||
=/ m (strand:strandio ,watchpup)
|
||||
^- form:m
|
||||
=/ zoom-margin=number:block 0 :: TODO: 30!
|
||||
=/ zoom-step=number:block 100.000
|
||||
=/ zoom-margin=number:block 30
|
||||
=/ zoom-step=number:block 100.000
|
||||
?: (lth latest-number (add number.pup zoom-margin))
|
||||
(pure:m pup)
|
||||
=/ up-to-number=number:block
|
||||
|
@ -9,32 +9,40 @@
|
||||
=/ m (strand:strandio ,vase)
|
||||
|^
|
||||
^- form:m
|
||||
:: =* not-sent (pure:m !>(%.n^next-gas-price))
|
||||
::
|
||||
=/ =address:ethereum (address-from-prv:key:ethereum pk)
|
||||
;< expected-nonce=@ud bind:m
|
||||
(get-next-nonce:ethio endpoint address)
|
||||
:: if chain expects a different nonce, don't send this transaction
|
||||
::
|
||||
?. =(nonce expected-nonce)
|
||||
~& [%unexpected-nonce nonce expected+expected-nonce]
|
||||
(pure:m !>(%.n^[%not-sent %unexpected-nonce]))
|
||||
:: if a gas-price of 0 was specified, fetch the recommended one
|
||||
::
|
||||
;< use-gas-price=@ud bind:m
|
||||
?: =(0 next-gas-price) fetch-gas-price
|
||||
(pure:(strand:strandio @ud) next-gas-price)
|
||||
::
|
||||
=/ batch-data=octs
|
||||
%+ cad:naive 3
|
||||
%- flop
|
||||
%+ roll txs
|
||||
|= [=raw-tx:naive out=(list octs)]
|
||||
[raw.raw-tx 65^sig.raw-tx out]
|
||||
:: TODO: keep this to avoid sending bad batches or disregard?
|
||||
:: if the batch is malformed, emit error to kick it out of sending
|
||||
::
|
||||
?~ (parse-roll:naive q.batch-data)
|
||||
(pure:m !>(%.n^[%not-sent %batch-parse-error]))
|
||||
:: if chain expects a different nonce, don't send this transaction
|
||||
::
|
||||
?. =(nonce expected-nonce)
|
||||
~& >>> [%unexpected-nonce nonce expected+expected-nonce]
|
||||
%- pure:m
|
||||
!> ^- [%.n @tas @t]
|
||||
:+ %.n
|
||||
%not-sent
|
||||
?: (lth expected-nonce nonce)
|
||||
:: if ahead, it will use the same next-gas-price when resending
|
||||
::
|
||||
%ahead-nonce
|
||||
:: if behind, start out-of-sync flow
|
||||
::
|
||||
%behind-nonce
|
||||
:: if a gas-price of 0 was specified, fetch the recommended one
|
||||
::
|
||||
;< use-gas-price=@ud bind:m
|
||||
?: =(0 next-gas-price) fetch-gas-price
|
||||
(pure:(strand:strandio @ud) next-gas-price)
|
||||
::
|
||||
:: each l2 signature is 65 bytes + XX bytes for the raw data
|
||||
:: from the ethereum yellow paper:
|
||||
@ -72,7 +80,8 @@
|
||||
:: log batch tx-hash to getTransactionReceipt(tx-hash)
|
||||
::
|
||||
~? &(?=(%result -.response) ?=(%s -.res.response))
|
||||
^-([nonce=@ud batch-hash=@t] nonce^(so:dejs:format res.response))
|
||||
^- [nonce=@ud batch-hash=@t gas=@ud]
|
||||
nonce^(so:dejs:format res.response)^use-gas-price
|
||||
%- pure:m
|
||||
!> ^- (each @ud [term @t])
|
||||
:: TODO: capture if the tx fails (e.g. Runtime Error: revert)
|
||||
@ -101,10 +110,13 @@
|
||||
;< rep=(unit client-response:iris) bind:m
|
||||
take-maybe-response:strandio
|
||||
=* fallback
|
||||
~& %fallback-gas-price
|
||||
(pure:m 10.000.000.000)
|
||||
~& >> %fallback-gas-price
|
||||
(pure:m fallback-gas-price)
|
||||
?. ?& ?=([~ %finished *] rep)
|
||||
?=(^ full-file.u.rep)
|
||||
:: get suggested price only for mainnet txs
|
||||
::
|
||||
=(chain-id 1)
|
||||
==
|
||||
fallback
|
||||
?~ jon=(de-json:html q.data.u.full-file.u.rep)
|
||||
@ -115,7 +127,7 @@
|
||||
(mul 1.000.000.000 u.res) ::NOTE gwei to wei
|
||||
%. u.jon
|
||||
=, dejs-soft:format
|
||||
(ot 'result'^(ot 'FastGasPrice'^ni ~) ~)
|
||||
(ot 'result'^(ot 'FastGasPrice'^(su dem) ~) ~)
|
||||
::
|
||||
++ send-batch
|
||||
|= [endpoint=@ta batch=@ux]
|
||||
|
@ -87,7 +87,7 @@
|
||||
0x223c.067f.8cf2.8ae1.73ee.5caf.ea60.ca44.c335.fecb
|
||||
::
|
||||
++ ecliptic
|
||||
0xa5b6.109a.d2d3.5191.b3bc.32c0.0e45.26be.56fe.321f
|
||||
0x33ee.cbf9.0847.8c10.6146.26a9.d304.bfe1.8b78.dd73
|
||||
::
|
||||
++ linear-star-release
|
||||
0x86cd.9cd0.992f.0423.1751.e376.1de4.5cec.ea5d.1801
|
||||
|
@ -1,5 +1,6 @@
|
||||
:: |pill: helper functions for making pills
|
||||
::
|
||||
/- dice
|
||||
^?
|
||||
|%
|
||||
::
|
||||
@ -80,7 +81,13 @@
|
||||
=/ pax (weld bas lyt)
|
||||
=/ lon .^(arch %cy pax)
|
||||
=? hav ?=(^ fil.lon)
|
||||
:_(hav [lyt mark=;;(@tas (head tyl)) noun=.^(* %cx pax)])
|
||||
:_ hav
|
||||
:- lyt
|
||||
?. ?=([%azimuth-snapshot *] tyl)
|
||||
[mark=;;(@tas (head tyl)) noun=.^(* %cx pax)]
|
||||
=; convert
|
||||
mime/(convert .^(snap-state:dice %cx pax))
|
||||
.^($-(snap-state:dice mime) %cf (weld bas /azimuth-snapshot/mime))
|
||||
=/ all ~(tap by dir.lon)
|
||||
|- ^+ hav
|
||||
?~ all hav
|
||||
|
@ -349,7 +349,7 @@
|
||||
++ on-peek
|
||||
|= =path
|
||||
^- (unit (unit cage))
|
||||
?. =(/x/dbug/state path) ~
|
||||
?. =(/x/dbug/state path) (on-peek:og path)
|
||||
``noun+(slop on-save:og !>(shoe=state))
|
||||
::
|
||||
++ on-agent
|
||||
|
@ -1,7 +1,7 @@
|
||||
import Urbit from '@urbit/http-api';
|
||||
const api = new Urbit('', '', (window as any).desk);
|
||||
api.ship = window.ship;
|
||||
api.verbose = true;
|
||||
// api.verbose = true;
|
||||
// @ts-ignore TODO window typings
|
||||
window.api = api;
|
||||
|
||||
|
@ -2,6 +2,7 @@ import useMetadataState from '../state/metadata';
|
||||
import ob from 'urbit-ob';
|
||||
import useInviteState from '../state/invite';
|
||||
import { deSig, resourceAsPath } from '@urbit/api';
|
||||
import { createJoinParams } from '~/views/landscape/components/Join/Join';
|
||||
|
||||
function getGroupResourceRedirect(key: string) {
|
||||
const graphs = useMetadataState.getState().associations.graph;
|
||||
@ -70,7 +71,7 @@ function getGraphRedirect(link: string) {
|
||||
function getInviteRedirect(link: string) {
|
||||
const [,,app,uid] = link.split('/');
|
||||
const invite = useInviteState.getState().invites[app][uid];
|
||||
if(!invite) {
|
||||
if(!invite || (app !== 'groups' && app !== 'graph')) {
|
||||
return '';
|
||||
}
|
||||
|
||||
@ -81,7 +82,7 @@ function getInviteRedirect(link: string) {
|
||||
return alreadyJoined;
|
||||
}
|
||||
|
||||
return { search: `?join-kind=${app}&join-path=${encodeURIComponent(resourceAsPath(invite.resource))}` };
|
||||
return { search: createJoinParams(app, resourceAsPath(invite.resource)) };
|
||||
}
|
||||
|
||||
function getDmRedirect(link: string) {
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { isChannelAdmin } from '~/logic/lib/group';
|
||||
import { cite } from '~/logic/lib/util';
|
||||
import { createJoinParams } from '~/views/landscape/components/Join/Join';
|
||||
|
||||
const makeIndexes = () => new Map([
|
||||
['ships', []],
|
||||
@ -55,7 +56,7 @@ const commandIndex = function (currentGroup, groups, associations) {
|
||||
if (canAdd) {
|
||||
commands.push(result('Channel: Create', `/~landscape${workspace}/new`, 'Groups', null));
|
||||
}
|
||||
commands.push(result('Groups: Join', '?join-kind=group', 'Groups', null));
|
||||
commands.push(result('Groups: Join', createJoinParams('groups'), 'Groups', null));
|
||||
|
||||
return commands;
|
||||
};
|
||||
|
@ -12,7 +12,7 @@ import ModalButton from "./components/ModalButton";
|
||||
import Tiles from "./components/tiles";
|
||||
import Tile from "./components/tiles/tile";
|
||||
import "./css/custom.css";
|
||||
import { Join, JoinRoute } from "~/views/landscape/components/Join/Join";
|
||||
import { createJoinParams, Join, JoinRoute } from "~/views/landscape/components/Join/Join";
|
||||
|
||||
const ScrollbarLessBox = styled(Box)`
|
||||
scrollbar-width: none !important;
|
||||
@ -94,7 +94,7 @@ export const LaunchApp = (props: LaunchAppProps): ReactElement | null => {
|
||||
border={0}
|
||||
p={0}
|
||||
borderRadius={2}
|
||||
onClick={() => history.push({ search: "?join-kind=groups" })}
|
||||
onClick={() => history.push({ search: createJoinParams('groups') })}
|
||||
>
|
||||
<Row backgroundColor="white" gapX="2" p={2} height="100%" width="100%" alignItems="center">
|
||||
<Icon icon="BootNode" />
|
||||
|
@ -22,6 +22,7 @@ import useSettingsState, {
|
||||
} from "~/logic/state/settings";
|
||||
import Tile from "../components/tiles/tile";
|
||||
import { useQuery } from "~/logic/lib/useQuery";
|
||||
import { createJoinParams } from "~/views/landscape/components/Join/Join";
|
||||
|
||||
const sortGroupsAlph = (a: Association, b: Association) =>
|
||||
alphabeticalOrder(a.metadata.title, b.metadata.title);
|
||||
@ -123,8 +124,7 @@ function PendingGroup(props: PendingGroupProps) {
|
||||
const title = preview?.metadata?.title || path;
|
||||
const { toQuery } = useQuery();
|
||||
const onClick = () => {
|
||||
const { ship, name } = resourceFromPath(path);
|
||||
history.push(toQuery({ "join-kind": "groups", "join-path": path }));
|
||||
history.push(toQuery(createJoinParams('groups', path, null, false)));
|
||||
};
|
||||
|
||||
const joining = useGroupState((s) => s.pendingJoin[path]?.progress);
|
||||
|
@ -16,6 +16,7 @@ import { TranscludedNode } from './TranscludedNode';
|
||||
import styled from 'styled-components';
|
||||
import Author from '~/views/components/Author';
|
||||
import useDocketState, { useTreaty } from '~/logic/state/docket';
|
||||
import { createJoinParams } from '~/views/landscape/components/Join/Join';
|
||||
|
||||
function Placeholder(type) {
|
||||
const lines = (type) => {
|
||||
@ -118,8 +119,7 @@ function GraphPermalink(
|
||||
const permalink = (() => {
|
||||
const link = `/perma${getPermalinkForGraph(group, graph, index).slice(16)}`;
|
||||
return (!association && !loading)
|
||||
? { search: `?join-kind=group&join-path=${encodeURIComponent(group)}&redir=${encodeURIComponent(link)}` }
|
||||
: link
|
||||
? { search: createJoinParams('groups', group, link) } : link;
|
||||
})();
|
||||
|
||||
const [nodeGroupHost, nodeGroupName] = association?.group.split('/').slice(-2) ?? ['Unknown', 'Unknown'];
|
||||
|
@ -3,6 +3,7 @@ import React, { ReactElement, useCallback } from 'react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import useMetadataState, { usePreview } from '~/logic/state/metadata';
|
||||
import { PropFunc } from '~/types';
|
||||
import { createJoinParams } from '../landscape/components/Join/Join';
|
||||
import { MetadataIcon } from '../landscape/components/MetadataIcon';
|
||||
|
||||
type GroupLinkProps = {
|
||||
@ -26,7 +27,7 @@ const { preview } = usePreview(resource);
|
||||
<Row
|
||||
{...rest}
|
||||
as={Link}
|
||||
to={joined ? `/~landscape/ship/${name}` : { search: `?join-kind=groups&join-path=/ship/${name}`}}
|
||||
to={joined ? `/~landscape/ship/${name}` : { search: createJoinParams('groups', `/ship/${name}`) }}
|
||||
flexShrink={1}
|
||||
alignItems="center"
|
||||
width="100%"
|
||||
|
@ -365,20 +365,46 @@ export function JoinDone(props: JoinDoneProps) {
|
||||
);
|
||||
}
|
||||
|
||||
export interface JoinParams extends Record<string, string> {
|
||||
'join-kind': JoinKind;
|
||||
'join-path'?: string;
|
||||
redir?: string;
|
||||
}
|
||||
|
||||
export function createJoinParams(kind: JoinKind, path?: string, redirect?: string, inLink?: true): string;
|
||||
export function createJoinParams(kind: JoinKind, path?: string, redirect?: string, inLink?: false): JoinParams;
|
||||
export function createJoinParams(kind: JoinKind, path?: string, redirect?: string, inLink = true) {
|
||||
const params = {
|
||||
'join-kind': kind
|
||||
};
|
||||
|
||||
if (path) {
|
||||
params['join-path'] = path;
|
||||
}
|
||||
|
||||
if (redirect) {
|
||||
params['redir'] = redirect;
|
||||
}
|
||||
|
||||
return inLink ? '?' + new URLSearchParams(params).toString() : params;
|
||||
}
|
||||
|
||||
export function JoinRoute() {
|
||||
const { query } = useQuery();
|
||||
const history = useHistory();
|
||||
const { pathname } = useLocation();
|
||||
const kind = query.get('join-kind');
|
||||
const path = query.get('join-path');
|
||||
const path = query.get('join-path')?.replace('web+urbitgraph://group/', '');
|
||||
const redir = query.get('redir');
|
||||
|
||||
if (!kind) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const desc: JoinDesc = path
|
||||
? {
|
||||
group: path,
|
||||
kind: kind as JoinKind
|
||||
kind: kind === 'graph' ? 'graph' : 'groups'
|
||||
}
|
||||
: undefined;
|
||||
|
||||
|
@ -45,7 +45,9 @@ const makeTheme = (dark: boolean): ITheme => {
|
||||
foreground: fg,
|
||||
background: bg,
|
||||
brightBlack: '#7f7f7f', // NOTE slogs
|
||||
cursor: fg
|
||||
cursor: fg,
|
||||
cursorAccent: bg,
|
||||
selection: fg
|
||||
};
|
||||
};
|
||||
|
||||
@ -66,7 +68,9 @@ const termConfig: ITerminalOptions = {
|
||||
bellSound: bel,
|
||||
//
|
||||
// allows text selection by holding modifier (option, or shift)
|
||||
macOptionClickForcesSelection: true
|
||||
macOptionClickForcesSelection: true,
|
||||
// prevent insertion of simulated arrow keys on-altclick
|
||||
altClickMovesCursor: false
|
||||
};
|
||||
|
||||
const csi = (cmd: string, ...args: number[]) => {
|
||||
|
@ -1,10 +1,10 @@
|
||||
:~ title+'Groups'
|
||||
info+'A suite of applications to communicate on Urbit'
|
||||
color+0xee.5432
|
||||
glob-http+['https://bootstrap.urbit.org/glob-0v7.i3htk.kflos.l8nic.q5u2o.v8oir.glob' 0v7.i3htk.kflos.l8nic.q5u2o.v8oir]
|
||||
glob-http+['https://bootstrap.urbit.org/glob-0v2.2tc97.h3e0k.7b26d.a0ma8.em5ce.glob' 0v2.2tc97.h3e0k.7b26d.a0ma8.em5ce]
|
||||
|
||||
base+'landscape'
|
||||
version+[1 0 5]
|
||||
version+[1 0 6]
|
||||
website+'https://tlon.io'
|
||||
license+'MIT'
|
||||
==
|
||||
|
@ -1,9 +1,9 @@
|
||||
:~ title+'Terminal'
|
||||
info+'A web interface to your Urbit\'s command line.'
|
||||
color+0x2e.4347
|
||||
glob-http+['https://bootstrap.urbit.org/glob-0v1.fgmgl.utdgt.kdu3r.4e5f9.v58rk.glob' 0v1.fgmgl.utdgt.kdu3r.4e5f9.v58rk]
|
||||
glob-http+['https://bootstrap.urbit.org/glob-0v7.1hgb7.euged.6oj3e.cdhdg.rah02.glob' 0v7.1hgb7.euged.6oj3e.cdhdg.rah02]
|
||||
base+'webterm'
|
||||
version+[1 0 0]
|
||||
version+[1 0 1]
|
||||
website+'https://tlon.io'
|
||||
license+'MIT'
|
||||
==
|
||||
|
Loading…
Reference in New Issue
Block a user