mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-19 04:41:37 +03:00
Merge remote-tracking branch 'origin/yu/dangling-bone' into lf/content-dist-rc
This commit is contained in:
commit
49e53290a1
@ -9,8 +9,12 @@ interface, see its [contribution guidelines][interface].
|
|||||||
|
|
||||||
For information on Arvo's maintainers, see [pkg/arvo][main].
|
For information on Arvo's maintainers, see [pkg/arvo][main].
|
||||||
|
|
||||||
|
For more extensive information on Urbit development, such as how to set up an
|
||||||
|
environment and how to submit a grant, see the [developer documentation][dev].
|
||||||
|
|
||||||
[start]: https://urbit.org/using/install
|
[start]: https://urbit.org/using/install
|
||||||
[interface]: /pkg/interface/CONTRIBUTING.md
|
[interface]: /pkg/interface/CONTRIBUTING.md
|
||||||
|
[dev]: https://urbit.org/docs/development
|
||||||
|
|
||||||
## Fake ships
|
## Fake ships
|
||||||
|
|
||||||
@ -55,8 +59,9 @@ urbit -F zod -B "bin/solid.pill" -A "pkg/arvo"
|
|||||||
|
|
||||||
The canonical source tree is the `master` branch of
|
The canonical source tree is the `master` branch of
|
||||||
[https://github.com/urbit/urbit][repo]. You should typically branch off of
|
[https://github.com/urbit/urbit][repo]. You should typically branch off of
|
||||||
`master` when commencing new work; similarly, when we pull in your
|
`master` when commencing new work. Most pull requests should be merging into
|
||||||
contribution, we'll do so by merging it to `master`.
|
one of the `next/*` branches, depending on what part of the system the pull
|
||||||
|
request is targeting.
|
||||||
|
|
||||||
Since we use GitHub, we request you contribute via a GitHub pull request. Tag
|
Since we use GitHub, we request you contribute via a GitHub pull request. Tag
|
||||||
the [maintainer][main] for the component. If you have a question for the
|
the [maintainer][main] for the component. If you have a question for the
|
||||||
@ -294,5 +299,5 @@ Questions or other communications about contributing to Urbit can go to
|
|||||||
[repo]: https://github.com/urbit/urbit
|
[repo]: https://github.com/urbit/urbit
|
||||||
[reba]: https://git-rebase.io/
|
[reba]: https://git-rebase.io/
|
||||||
[issu]: https://github.com/urbit/urbit/issues
|
[issu]: https://github.com/urbit/urbit/issues
|
||||||
[hoon]: https://urbit.org/docs/learn/hoon/style/
|
[hoon]: https://urbit.org/docs/hoon/reference/style
|
||||||
[main]: https://github.com/urbit/urbit/tree/master/pkg/arvo#maintainers
|
[main]: https://github.com/urbit/urbit/tree/master/pkg/arvo#maintainers
|
120
MAINTAINERS.md
120
MAINTAINERS.md
@ -29,7 +29,7 @@ released.
|
|||||||
### Release branches
|
### Release branches
|
||||||
|
|
||||||
Release branches are code that is ready to release. All release branch names
|
Release branches are code that is ready to release. All release branch names
|
||||||
should start with `release/`.
|
should start with `next/`.
|
||||||
|
|
||||||
All code must be reviewed before being pushed to a release branch. Thus,
|
All code must be reviewed before being pushed to a release branch. Thus,
|
||||||
feature branches should be PR'd against a release branch, not master.
|
feature branches should be PR'd against a release branch, not master.
|
||||||
@ -41,57 +41,55 @@ be released together -- unless one of the underlying commits is separately put
|
|||||||
on a release branch.
|
on a release branch.
|
||||||
|
|
||||||
Here's a worked example. The rule is to make however many branches are useful,
|
Here's a worked example. The rule is to make however many branches are useful,
|
||||||
and no more. This example is not prescriptive, the developers making the
|
and no more. This example is not prescriptive; the developers making the
|
||||||
changes may add, remove, or rename branches in this flow at will.
|
changes may add, remove, or rename branches in this flow at will.
|
||||||
|
|
||||||
Suppose you (plural, the dev community at large) complete some work in a
|
Suppose you (plural, the dev community at large) complete some work in a
|
||||||
userspace app, and you put it in `release/next-userspace`. Separately, you make
|
userspace app, and you put it in `next/landscape`. Separately, you make a small
|
||||||
a small JS change. If you PR it to `release/next-userspace`, then it will only
|
JS change. If you PR it to `next/landscape`, then it will only be released at
|
||||||
be released at the same time as the app changes. Maybe this is fine, or maybe
|
the same time as the app changes. Maybe this is fine, or maybe you want this
|
||||||
you want this change to go out quickly, and the change in
|
change to go out quickly, and the change in `next/landscape` is relatively
|
||||||
`release/next-userspace` is relatively risky, so you don't want to push it out
|
risky, so you don't want to push it out on Friday afternoon. In this case, put
|
||||||
on Friday afternoon. In this case, put the change in another release branch,
|
the change in another release branch, say `next/js`. Now either can be released
|
||||||
say `release/next-js`. Now either can be released independently.
|
independently.
|
||||||
|
|
||||||
Suppose you do further work that you want to PR to `release/next-userspace`, but
|
Suppose you do further work that you want to PR to `next/landscape`, but it
|
||||||
it depends on your fixes in `release/next-js`. Simply merge `release/next-js`
|
depends on your fixes in `next/js`. Simply merge `next/js` into either your
|
||||||
into either your feature branch or `release/next-userspace` and PR your finished
|
feature branch or `next/landscape` and PR your finished work to
|
||||||
work to `release/next-userspace`. Now there is a one-way coupling:
|
`next/landscape`. Now there is a one-way coupling: `next/landscape` contains
|
||||||
`release/next-userspace` contains `release/next-js`, so releasing it will
|
`next/js`, so releasing it will implicitly release `next/js`. However, you can
|
||||||
implicitly release `release/next-js`. However, you can still release
|
still release `next/js` independently.
|
||||||
`release/next-js` independently.
|
|
||||||
|
|
||||||
This scheme extends to other branches, like `release/next-kernel` or
|
This scheme extends to other branches, like `next/base` or `next/os1.1` or
|
||||||
`release/os1.1` or `release/ford-fusion`. Some branches may be long-lived and
|
`next/ford-fusion`. Some branches may be long-lived and represent simply the
|
||||||
represent simply the "next" release of something, while others will have a
|
"next" release of something, while others will have a definite lifetime that
|
||||||
definite lifetime that corresponds to development of a particular feature or
|
corresponds to development of a particular feature or numbered release.
|
||||||
numbered release.
|
|
||||||
|
|
||||||
Since they are "done", release branches should be considered "public", in the
|
Since they are "done", release branches should be considered "public", in the
|
||||||
sense that others may depend on them at will. Thus, never rebase a release
|
sense that others may depend on them at will. Thus, never rebase a release
|
||||||
branch.
|
branch.
|
||||||
|
|
||||||
When cutting a new release, you can filter branches with `git branch --list
|
When cutting a new release, you can filter branches with `git branch --list
|
||||||
'release/*'` or by typing "release/" in the branch filter on Github. This will
|
'next/*'` or by typing "next/" in the branch filter on Github. This will give
|
||||||
give you the list of branches which have passed review and may be merged to
|
you the list of branches which have passed review and may be merged to master
|
||||||
master and released. When choosing which branches to release, make sure you
|
and released. When choosing which branches to release, make sure you understand
|
||||||
understand the risks of releasing them immediately. If merging these produces
|
the risks of releasing them immediately. If merging these produces nontrivial
|
||||||
nontrivial conflicts, consider asking the developers on those branches to merge
|
conflicts, consider asking the developers on those branches to merge between
|
||||||
between themselves. In many cases a developer can do this directly, but if it's
|
themselves. In many cases a developer can do this directly, but if it's
|
||||||
sufficiently nontrivial, this may be a reviewed PR of one release branch into
|
sufficiently nontrivial, this may be a reviewed PR of one release branch into
|
||||||
another.
|
another.
|
||||||
|
|
||||||
### Non-OTAable release branches
|
#### Standard release branches
|
||||||
|
|
||||||
In some cases, work is completed which cannot be OTA'd as written. For example,
|
While you can always create non-standard release branches to stage for a
|
||||||
the code may lack state adapters, or it may not properly handle outstanding
|
particular release, most changes should go through the following:
|
||||||
subscriptions. It could also be code which is planned to be released only upon
|
|
||||||
a breach (network-wide or rolling).
|
|
||||||
|
|
||||||
In this case, the code may be PR'd to a `na-release/` branch. All rules are the
|
- next/base -- changes to the %base desk in pkg/arvo
|
||||||
same as for release branches, except that the code does not need to apply
|
- next/garden -- changes to the %garden desk
|
||||||
cleanly to an existing ship. If you later write state adapter or otherwise make
|
- next/landscape -- changes to the %landscape desk
|
||||||
it OTAable, then you may PR it to a release branch.
|
- next/bitcoin -- changes to the %bitcoin desk
|
||||||
|
- next/webterm -- changes to the %webterm desk
|
||||||
|
- next/vere -- changes to the runtime
|
||||||
|
|
||||||
### Other cases
|
### Other cases
|
||||||
|
|
||||||
@ -163,9 +161,10 @@ If you're making a Vere release, just play it safe and update all the pills.
|
|||||||
|
|
||||||
For an Urbit OS release, after all the merge commits, make a release with the
|
For an Urbit OS release, after all the merge commits, make a release with the
|
||||||
commit message "release: urbit-os-v1.0.xx". This commit should have up-to-date
|
commit message "release: urbit-os-v1.0.xx". This commit should have up-to-date
|
||||||
artifacts from pkg/interface and a new solid pill. If neither the pill nor the
|
artifacts from pkg/interface and a new version number in the desk.docket-0 of
|
||||||
JS need to be updated (e.g if the pill was already updated in the previous merge
|
any desk which changed. If neither the pill nor the JS need to be updated (e.g
|
||||||
commit), consider making the release commit with --allow-empty.
|
if the pill was already updated in the previous merge commit), consider making
|
||||||
|
the release commit with --allow-empty.
|
||||||
|
|
||||||
If anything in `pkg/interface` has changed, ensure it has been built and
|
If anything in `pkg/interface` has changed, ensure it has been built and
|
||||||
deployed properly. You'll want to do this before making a pill, since you want
|
deployed properly. You'll want to do this before making a pill, since you want
|
||||||
@ -191,21 +190,23 @@ What you should do here depends on the type of release being made.
|
|||||||
|
|
||||||
First, for Urbit OS releases:
|
First, for Urbit OS releases:
|
||||||
|
|
||||||
If it's a very trivial hotfix that you know isn't going to break
|
If it's a very trivial hotfix that you know isn't going to break anything, tag
|
||||||
anything, tag it as `urbit-os-vx.y.z`. Here 'x' refers to the product version
|
it as `urbit-os-vx.y`. Here 'x' is the major version and 'y' is an OTA patch
|
||||||
(e.g. OS1, OS2..), 'y' to the continuity era in that version, and 'z' to an
|
counter. Change `urbit-os` to e.g. `landscape` or another desk if that's what you're
|
||||||
OTA patch counter. So for a hotfix version, you'll just want to increment 'z'.
|
releasing. If you're releasing changes to more than one desk, add a separate
|
||||||
|
tag for each desk (but only make one announcment email/post, with all of the
|
||||||
|
desks listed).
|
||||||
|
|
||||||
Use an annotated tag, i.e.
|
Use an annotated tag, i.e.
|
||||||
|
|
||||||
```
|
```
|
||||||
git tag -a urbit-os-vx.y.z
|
git tag -a urbit-os-vx.y
|
||||||
```
|
```
|
||||||
|
|
||||||
The tag format should look something like this:
|
The tag format should look something like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
urbit-os-vx.y.z
|
urbit-os-vx.y
|
||||||
|
|
||||||
This release will be pushed to the network as an over-the-air update.
|
This release will be pushed to the network as an over-the-air update.
|
||||||
|
|
||||||
@ -236,17 +237,17 @@ If the commit descriptions are too poor to easily do this, then again, yell at
|
|||||||
your fellow contributors to make them better in the future.
|
your fellow contributors to make them better in the future.
|
||||||
|
|
||||||
If it's *not* a trivial hotfix, you should probably make any number of release
|
If it's *not* a trivial hotfix, you should probably make any number of release
|
||||||
candidate tags (e.g. `urbit-os-vx.y.z.rc1`, `urbit-os-vx.y.z.rc2`, ..), test
|
candidate tags (e.g. `urbit-os-vx.y.rc1`, `urbit-os-vx.y.rc2`, ..), test
|
||||||
them, and after you confirm one of them is good, tag the release as
|
them, and after you confirm one of them is good, tag the release as
|
||||||
`urbit-os-vx.y.z`.
|
`urbit-os-vx.y`.
|
||||||
|
|
||||||
For Vere releases:
|
For Vere releases:
|
||||||
|
|
||||||
Tag the release as `urbit-vx.y.z`. The tag format should look something like
|
Tag the release as `urbit-vx.y`. The tag format should look something like
|
||||||
this:
|
this:
|
||||||
|
|
||||||
```
|
```
|
||||||
urbit-vx.y.z
|
urbit-vx.y
|
||||||
|
|
||||||
Note that this Vere release will by default boot fresh ships using an Urbit OS
|
Note that this Vere release will by default boot fresh ships using an Urbit OS
|
||||||
va.b.c pill.
|
va.b.c pill.
|
||||||
@ -254,10 +255,10 @@ va.b.c pill.
|
|||||||
Release binaries:
|
Release binaries:
|
||||||
|
|
||||||
(linux64)
|
(linux64)
|
||||||
https://bootstrap.urbit.org/urbit-vx.y.z-linux64.tgz
|
https://bootstrap.urbit.org/urbit-vx.y-linux64.tgz
|
||||||
|
|
||||||
(macOS)
|
(macOS)
|
||||||
https://bootstrap.urbit.org/urbit-vx.y.z-darwin.tgz
|
https://bootstrap.urbit.org/urbit-vx.y-darwin.tgz
|
||||||
|
|
||||||
Release notes:
|
Release notes:
|
||||||
|
|
||||||
@ -295,10 +296,10 @@ and stars to the rest of the network.
|
|||||||
For consistency, I create a release tarball and then rsync the files in.
|
For consistency, I create a release tarball and then rsync the files in.
|
||||||
|
|
||||||
```
|
```
|
||||||
$ wget https://github.com/urbit/urbit/archive/urbit-os-vx.y.z.tar.gz
|
$ wget https://github.com/urbit/urbit/archive/urbit-os-vx.y.tar.gz
|
||||||
$ tar xzf urbit-os-vx.y.z.tar.gz
|
$ tar xzf urbit-os-vx.y.tar.gz
|
||||||
$ herb zod -p hood -d "+hood/mount /=home="
|
$ herb zod -p hood -d "+hood/mount /=home="
|
||||||
$ rsync -zr --delete urbit-urbit-os-vx.y.z/pkg/arvo/ zod/home
|
$ rsync -zr --delete urbit-urbit-os-vx.y/pkg/arvo/ zod/home
|
||||||
$ herb zod -p hood -d "+hood/commit %home"
|
$ herb zod -p hood -d "+hood/commit %home"
|
||||||
$ herb zod -p hood -d "+hood/merge %kids our %home"
|
$ herb zod -p hood -d "+hood/merge %kids our %home"
|
||||||
```
|
```
|
||||||
@ -306,16 +307,11 @@ $ herb zod -p hood -d "+hood/merge %kids our %home"
|
|||||||
For Vere updates, this means simply shutting down each desired ship, installing
|
For Vere updates, this means simply shutting down each desired ship, installing
|
||||||
the new binary, and restarting the pier with it.
|
the new binary, and restarting the pier with it.
|
||||||
|
|
||||||
#### Continuous deployment
|
|
||||||
|
|
||||||
A subset of release branches are deployed continuously to the network. Thus far
|
|
||||||
this only includes `release/next-userspace`, which deploys livenet-compatible
|
|
||||||
changes to select QA ships. Any push to master will automatically
|
|
||||||
merge master into `release/next-userspace` to keep the streams at parity.
|
|
||||||
|
|
||||||
### Announce the update
|
### Announce the update
|
||||||
|
|
||||||
Post an announcement to urbit-dev. The tag annotation, basically, is fine here
|
Post an announcement to urbit-dev. The tag annotation, basically, is fine here
|
||||||
-- I usually add the %base hash (for Urbit OS releases) and the release binary
|
-- I usually add the %cz hash (for Urbit OS releases) and the release binary
|
||||||
URLs (for Vere releases). Check the urbit-dev archives for examples of these
|
URLs (for Vere releases). Check the urbit-dev archives for examples of these
|
||||||
announcements.
|
announcements.
|
||||||
|
|
||||||
|
Post the same announcement to the group feed of Urbit Community.
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:9a56f675d2a6c5dafa92a9e2d55040d994f3d3d27a1ed827bd87d1158b1e69d0
|
oid sha256:c4247c64a7d9fc0c0f1d2f017c21dd3464ddfe56529c7d6eef0e64554bd453e8
|
||||||
size 3749183
|
size 7611162
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:f59ec4eaf907227a1fd64e1d54810b769b5d39f6811c6bb254b2e89de528ca04
|
oid sha256:dc76fbf64ab20512842c5c87e5302cd8a70141fe4b5a1e4ba086221f36e406a0
|
||||||
size 1209494
|
size 1894727
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:6f48518fe49584a6532a20018f4ac4eae3817b25d85d60536a99643eb5d65b2b
|
oid sha256:204056f6c140a8d5329f78e149a318bc85190d2aaab73204249d39a12d0353e0
|
||||||
size 22872573
|
size 9296839
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c27cdb47bccda98ba68556181cae6cd845c6daf8d7426d82adf67c1e8f532be9
|
oid sha256:187ea751a274dba7ed69df3a5b8f6f7ac620e3f9787abd75b18cf494d0c41f05
|
||||||
size 7454265
|
size 11174099
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:b570e46a0aa4cce20b341835e62a7f1c2d8a0fe73b1e170570b91988199c8351
|
oid sha256:7d3ed6dfa5218a8cde06f4c85b710681a236ba8ad65929c04bb567520e848d1c
|
||||||
size 23402668
|
size 9313238
|
||||||
|
@ -54,13 +54,13 @@
|
|||||||
?: =(broke-continuity i.topics.event-log)
|
?: =(broke-continuity i.topics.event-log)
|
||||||
=/ who=@ (decode-topics t.topics.event-log ~[%uint])
|
=/ who=@ (decode-topics t.topics.event-log ~[%uint])
|
||||||
=/ num=@ (decode-results data.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)
|
?: =(changed-keys i.topics.event-log)
|
||||||
=/ who=@ (decode-topics t.topics.event-log ~[%uint])
|
=/ who=@ (decode-topics t.topics.event-log ~[%uint])
|
||||||
=/ [enc=octs aut=octs sut=@ud rev=@ud]
|
=/ [enc=octs aut=octs sut=@ud rev=@ud]
|
||||||
%+ decode-results data.event-log
|
%+ decode-results data.event-log
|
||||||
~[[%bytes-n 32] [%bytes-n 32] %uint %uint]
|
~[[%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)
|
?: =(lost-sponsor i.topics.event-log)
|
||||||
=/ [who=@ pos=@]
|
=/ [who=@ pos=@]
|
||||||
(decode-topics t.topics.event-log ~[%uint %uint])
|
(decode-topics t.topics.event-log ~[%uint %uint])
|
||||||
|
@ -7,24 +7,21 @@
|
|||||||
verb,
|
verb,
|
||||||
dbug
|
dbug
|
||||||
:: Generally don't update the snapshot until we have clay tombstoning.
|
:: 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?
|
:: To recreate from a full list of logs (at /app/azimuth/logs/eth-logs):
|
||||||
%+ roll `(list event-log:rpc:ethereum)`snap ::~
|
:: -azimuth-snap-logs %default 'version-0'
|
||||||
|= [log=event-log:rpc:ethereum last=@ud]
|
::
|
||||||
?~ mined.log
|
=/ snap=snap-state snap
|
||||||
last
|
=/ last-snap=@ number.id.snap
|
||||||
(max block-number.u.mined.log last)
|
|
||||||
::
|
::
|
||||||
=, jael
|
=, jael
|
||||||
|%
|
|%
|
||||||
+$ app-state
|
+$ app-state
|
||||||
$: %2
|
$: %5
|
||||||
url=@ta
|
url=@ta
|
||||||
=net
|
=net
|
||||||
whos=(set ship)
|
whos=(set ship)
|
||||||
@ -62,8 +59,14 @@
|
|||||||
::
|
::
|
||||||
++ on-init
|
++ on-init
|
||||||
^- (quip card _this)
|
^- (quip card _this)
|
||||||
|
=/ points=@ud ~(wyt by points.nas.snap)
|
||||||
|
%- %- slog
|
||||||
|
[leaf+"ship: loading azimuth snapshot ({<points>} points)"]~
|
||||||
|
::
|
||||||
=: net.state %default
|
=: 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'
|
url.state 'http://eth-mainnet.urbit.org:8545'
|
||||||
==
|
==
|
||||||
:_ this
|
:_ this
|
||||||
@ -89,18 +92,56 @@
|
|||||||
?. ?=(%1 -.old-state)
|
?. ?=(%1 -.old-state)
|
||||||
`old-state
|
`old-state
|
||||||
%- %- slog :_ ~
|
%- %- slog :_ ~
|
||||||
leaf+"azimuth: loading snapshot with {<(lent logs.old-state)>} events"
|
leaf+"ship: loading snapshot with {<(lent logs.old-state)>} events"
|
||||||
=. +.state +.old-state
|
=. +.state +.old-state
|
||||||
=^ cards state
|
=^ cards state
|
||||||
(%*(run-logs do nas.state *^state:naive) logs.state)
|
(%*(run-logs do nas.state *^state:naive) logs.state)
|
||||||
[(jael-update:do (to-udiffs:do cards)) state]
|
[(jael-update:do (to-udiffs:do cards)) state]
|
||||||
?> ?=(%2 -.old-state)
|
=^ cards-2 old-state
|
||||||
[cards-1 this(state 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
|
+$ state-1-2-3-4
|
||||||
$: %1
|
$: ?(%1 %2 %3 %4)
|
||||||
url=@ta
|
url=@ta
|
||||||
=net
|
=net
|
||||||
whos=(set ship)
|
whos=(set ship)
|
||||||
@ -126,12 +167,13 @@
|
|||||||
^- (quip card _this)
|
^- (quip card _this)
|
||||||
?: =(%noun mark)
|
?: =(%noun mark)
|
||||||
?+ q.vase !!
|
?+ q.vase !!
|
||||||
|
::
|
||||||
%rerun
|
%rerun
|
||||||
~& [%rerunning (lent logs.state)]
|
=/ points=@ud ~(wyt by points.nas.state)
|
||||||
=. points.nas.state ~
|
~& > "rerunning ({<points>} points)"
|
||||||
=. own.state ~
|
=/ =udiffs:point
|
||||||
=^ * state (run-logs:do logs.state)
|
(run-state:do (last-block-id:dice logs.state) points.nas.state)
|
||||||
`this
|
[(jael-update:do udiffs) this]
|
||||||
::
|
::
|
||||||
%resub
|
%resub
|
||||||
:_ this :_ ~
|
:_ this :_ ~
|
||||||
@ -140,13 +182,12 @@
|
|||||||
==
|
==
|
||||||
::
|
::
|
||||||
%resnap
|
%resnap
|
||||||
=. logs.state snap
|
=: nas.state nas.snap
|
||||||
$(mark %noun, vase !>(%rerun))
|
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)
|
?. ?=(%azimuth-poke mark)
|
||||||
(on-poke:def mark vase)
|
(on-poke:def mark vase)
|
||||||
@ -156,15 +197,12 @@
|
|||||||
[[%pass /lo %arvo %j %listen (silt whos.poke) source.poke]~ this]
|
[[%pass /lo %arvo %j %listen (silt whos.poke) source.poke]~ this]
|
||||||
::
|
::
|
||||||
%watch
|
%watch
|
||||||
:: TODO: only wipe out state when switching networks?
|
=: nas.state ?:(?=(%default net.poke) nas.snap *^state:naive)
|
||||||
:: ?: =(net.state net.poke)
|
own.state ?:(?=(%default net.poke) owners.snap ~)
|
||||||
:: [~ this]
|
spo.state ?:(?=(%default net.poke) sponsors.snap ~)
|
||||||
=: nas.state *^state:naive
|
|
||||||
net.state net.poke
|
net.state net.poke
|
||||||
url.state url.poke
|
url.state url.poke
|
||||||
own.state ~
|
logs.state ~
|
||||||
spo.state ~
|
|
||||||
logs.state ?:(?=(%default net.poke) snap ~)
|
|
||||||
==
|
==
|
||||||
[start:do this]
|
[start:do this]
|
||||||
==
|
==
|
||||||
@ -188,11 +226,13 @@
|
|||||||
:: Slow to recalculate all the diffs, but this is necessary to make
|
:: Slow to recalculate all the diffs, but this is necessary to make
|
||||||
:: sure Jael gets the updates from the snapshot
|
:: sure Jael gets the updates from the snapshot
|
||||||
::
|
::
|
||||||
|
=/ points=@ud ~(wyt by points.nas.state)
|
||||||
%- %- slog :_ ~
|
%- %- slog :_ ~
|
||||||
leaf+"azimuth: loading snapshot with {<(lent logs.state)>} events"
|
:- %leaf
|
||||||
=^ snap-cards state
|
"ship: processing azimuth snapshot ({<points>} points)"
|
||||||
(%*(run-logs do nas.state *^state:naive) logs.state)
|
=/ snap-cards=udiffs:point
|
||||||
[(weld (jael-update:do (to-udiffs:do snap-cards)) start:do) this]
|
(%*(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-leave on-leave:def
|
||||||
++ on-peek
|
++ on-peek
|
||||||
@ -237,9 +277,13 @@
|
|||||||
%history (welp logs.state loglist.diff)
|
%history (welp logs.state loglist.diff)
|
||||||
%logs (welp logs.state loglist.diff)
|
%logs (welp logs.state loglist.diff)
|
||||||
==
|
==
|
||||||
=? nas.state ?=(%history -.diff) *^state:naive
|
:: doing :azimuth|watch caused a l2-sig-fail when using the eth-log
|
||||||
=^ effects state (run-logs:do loglist.diff)
|
:: 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
|
:_ this
|
||||||
%+ weld
|
%+ weld
|
||||||
(event-update:do effects)
|
(event-update:do effects)
|
||||||
@ -287,16 +331,27 @@
|
|||||||
^- (list ?(@ux (list @ux)))
|
^- (list ?(@ux (list @ux)))
|
||||||
~
|
~
|
||||||
::
|
::
|
||||||
++ data-to-hex
|
++ run-state
|
||||||
|= data=@t
|
|= [=id:block =points:naive]
|
||||||
?~ data *@ux
|
::%- road |. :: count memory usage in a separate road
|
||||||
?: =(data '0x') *@ux
|
^- =udiffs:point
|
||||||
(hex-to-num:ethereum data)
|
%- 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 %keys [life.keys.net suite.keys.net pass] %.y]
|
||||||
|
[ship id %rift rift.net %.y]
|
||||||
|
[ship id %spon ?:(has.sponsor.net `who.sponsor.net ~)]
|
||||||
|
udiffs
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ run-logs
|
++ run-logs
|
||||||
|= [logs=(list event-log:rpc:ethereum)]
|
|= [logs=(list event-log:rpc:ethereum)]
|
||||||
^- (quip tagged-diff _state)
|
^- (quip tagged-diff _state)
|
||||||
=+ net=(get-network net.state)
|
=+ net=(get-network:dice net.state)
|
||||||
=| effects=(list tagged-diff)
|
=| effects=(list tagged-diff)
|
||||||
!. :: saves 700MB replaying snapshot
|
!. :: saves 700MB replaying snapshot
|
||||||
=- =/ res (mule -)
|
=- =/ res (mule -)
|
||||||
@ -309,11 +364,12 @@
|
|||||||
[(flop effects) state]
|
[(flop effects) state]
|
||||||
?~ mined.i.logs
|
?~ mined.i.logs
|
||||||
$(logs t.logs)
|
$(logs t.logs)
|
||||||
=/ [raw-effects=effects:naive new-nas=_nas.state]
|
=+ cache=nas.state
|
||||||
|
=^ raw-effects nas.state
|
||||||
=/ =^input:naive
|
=/ =^input:naive
|
||||||
:- block-number.u.mined.i.logs
|
:- block-number.u.mined.i.logs
|
||||||
?: =(azimuth.net address.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
|
=/ =event-log:naive
|
||||||
[address.i.logs data topics.i.logs]
|
[address.i.logs data topics.i.logs]
|
||||||
[%log event-log]
|
[%log event-log]
|
||||||
@ -321,28 +377,16 @@
|
|||||||
[%bat *@]
|
[%bat *@]
|
||||||
[%bat u.input.u.mined.i.logs]
|
[%bat u.input.u.mined.i.logs]
|
||||||
(%*(. naive lac |) verifier chain-id.net nas.state input)
|
(%*(. 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]
|
=/ =indices [own spo]:state
|
||||||
=< [own spo]
|
=. indices
|
||||||
?. =(azimuth.net address.i.logs)
|
?: =(naive.net address.i.logs)
|
||||||
%: apply-effects:dice
|
(tx-effects:dice chain-id.net raw-effects cache indices)
|
||||||
chain-id.net
|
=< indices
|
||||||
raw-effects
|
(point-effects:dice raw-effects points.cache points.nas.state indices)
|
||||||
nas.state
|
=: own.state own.indices
|
||||||
own.state
|
spo.state spo.indices
|
||||||
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
|
|
||||||
==
|
==
|
||||||
=/ effects-1
|
=/ effects-1
|
||||||
=/ =id:block [block-hash block-number]:u.mined.i.logs
|
=/ =id:block [block-hash block-number]:u.mined.i.logs
|
||||||
@ -358,12 +402,12 @@
|
|||||||
^- (unit [=ship =udiff:point])
|
^- (unit [=ship =udiff:point])
|
||||||
?. ?=(%point +<.tag) ~
|
?. ?=(%point +<.tag) ~
|
||||||
?+ +>+<.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]
|
%sponsor `[ship.tag id.tag %spon sponsor.tag]
|
||||||
%keys
|
%keys
|
||||||
=/ =pass
|
=/ =pass
|
||||||
(pass-from-eth:azimuth 32^crypt.keys.tag 32^auth.keys.tag suite.keys.tag)
|
(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
|
++ jael-update
|
||||||
@ -391,26 +435,14 @@
|
|||||||
^- card
|
^- card
|
||||||
[%give %fact ~[/event] %naive-diffs !>(+.tag)]
|
[%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
|
++ start
|
||||||
^- (list card)
|
^- (list card)
|
||||||
=+ net=(get-network net.state)
|
=+ net=(get-network:dice net.state)
|
||||||
=/ args=vase !>
|
=/ args=vase !>
|
||||||
:+ %watch /[dap.bowl]
|
:+ %watch /[dap.bowl]
|
||||||
^- config:eth-watcher
|
^- config:eth-watcher
|
||||||
:* url.state =(%czar (clan:title our.bowl)) refresh ~h30
|
:* 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]
|
~[azimuth.net]
|
||||||
~[naive.net]
|
~[naive.net]
|
||||||
(topics whos.state)
|
(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.
@ -531,6 +531,7 @@
|
|||||||
:: where an index is specified, the array is generally sorted by those.
|
:: where an index is specified, the array is generally sorted by those.
|
||||||
::
|
::
|
||||||
:: { life: 123,
|
:: { life: 123,
|
||||||
|
:: rift: 0,
|
||||||
:: route: { direct: true, lane: 'something' },
|
:: route: { direct: true, lane: 'something' },
|
||||||
:: qos: { kind: 'status', last-contact: 123456 }, // ms timestamp
|
:: qos: { kind: 'status', last-contact: 123456 }, // ms timestamp
|
||||||
:: flows: { forward: [snd, rcv, ...], backward: [snd, rcv, ...] }
|
:: flows: { forward: [snd, rcv, ...], backward: [snd, rcv, ...] }
|
||||||
@ -591,6 +592,9 @@
|
|||||||
|= peer-state
|
|= peer-state
|
||||||
%- pairs
|
%- pairs
|
||||||
:~ 'life'^(numb life)
|
:~ 'life'^(numb life)
|
||||||
|
:: TODO: needs to be updated in /pkg/interface/dbug
|
||||||
|
::
|
||||||
|
'rift'^(numb rift)
|
||||||
::
|
::
|
||||||
:- 'route'
|
:- 'route'
|
||||||
%+ maybe route
|
%+ maybe route
|
||||||
|
@ -462,9 +462,9 @@
|
|||||||
++ release-logs
|
++ release-logs
|
||||||
|= [=path dog=watchdog]
|
|= [=path dog=watchdog]
|
||||||
^- (quip card watchdog)
|
^- (quip card watchdog)
|
||||||
?: (lth number.dog 0) :: TODO: 30!
|
?: (lth number.dog 30)
|
||||||
`dog
|
`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=(list number:block) ~(tap in ~(key by pending-logs.dog))
|
||||||
=. numbers (sort numbers lth)
|
=. numbers (sort numbers lth)
|
||||||
=^ logs=(list event-log:rpc:ethereum) dog
|
=^ logs=(list event-log:rpc:ethereum) dog
|
||||||
|
@ -2,27 +2,28 @@
|
|||||||
/+ drum=hood-drum, helm=hood-helm, kiln=hood-kiln
|
/+ drum=hood-drum, helm=hood-helm, kiln=hood-kiln
|
||||||
|%
|
|%
|
||||||
+$ state
|
+$ state
|
||||||
$~ [%22 *state:drum *state:helm *state:kiln]
|
$~ [%23 *state:drum *state:helm *state:kiln]
|
||||||
$>(%22 any-state)
|
$>(%23 any-state)
|
||||||
::
|
::
|
||||||
+$ any-state
|
+$ any-state
|
||||||
$% [ver=?(%1 %2 %3 %4 %5 %6) lac=(map @tas fin-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]
|
[%7 drum=state-2:drum helm=state-1:helm kiln=state-0:kiln]
|
||||||
[%8 drum=state-2:drum helm=state: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: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: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: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: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:helm kiln=state-1:kiln]
|
[%13 drum=state-2:drum helm=state-1:helm kiln=state-1:kiln]
|
||||||
[%14 drum=state-2:drum helm=state: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:helm kiln=state-2:kiln]
|
[%15 drum=state-2:drum helm=state-1:helm kiln=state-2:kiln]
|
||||||
[%16 drum=state-4:drum helm=state:helm kiln=state-3:kiln]
|
[%16 drum=state-4:drum helm=state-1:helm kiln=state-3:kiln]
|
||||||
[%17 drum=state-4:drum helm=state:helm kiln=state-4:kiln]
|
[%17 drum=state-4:drum helm=state-1:helm kiln=state-4:kiln]
|
||||||
[%18 drum=state-4:drum helm=state:helm kiln=state-5:kiln]
|
[%18 drum=state-4:drum helm=state-1:helm kiln=state-5:kiln]
|
||||||
[%19 drum=state-4:drum helm=state:helm kiln=state-6:kiln]
|
[%19 drum=state-4:drum helm=state-1:helm kiln=state-6:kiln]
|
||||||
[%20 drum=state-4:drum helm=state:helm kiln=state-7:kiln]
|
[%20 drum=state-4:drum helm=state-1:helm kiln=state-7:kiln]
|
||||||
[%21 drum=state-4:drum helm=state:helm kiln=state-8:kiln]
|
[%21 drum=state-4:drum helm=state-1:helm kiln=state-8:kiln]
|
||||||
[%22 drum=state-4:drum helm=state:helm kiln=state-9: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
|
+$ any-state-tuple
|
||||||
$: drum=any-state:drum
|
$: drum=any-state:drum
|
||||||
@ -48,6 +49,7 @@
|
|||||||
++ on-fail on-fail:def
|
++ on-fail on-fail:def
|
||||||
++ on-init
|
++ on-init
|
||||||
^- step:agent:gall
|
^- step:agent:gall
|
||||||
|
=^ h helm.state on-init:helm-core
|
||||||
=^ d drum.state on-init:drum-core
|
=^ d drum.state on-init:drum-core
|
||||||
=^ k kiln.state on-init:kiln-core
|
=^ k kiln.state on-init:kiln-core
|
||||||
[:(welp d k) this]
|
[:(welp d k) this]
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
easy-print=language-server-easy-print,
|
easy-print=language-server-easy-print,
|
||||||
rune-snippet=language-server-rune-snippet,
|
rune-snippet=language-server-rune-snippet,
|
||||||
build=language-server-build,
|
build=language-server-build,
|
||||||
default-agent, verb
|
default-agent, verb, dbug
|
||||||
|%
|
|%
|
||||||
+$ card card:agent:gall
|
+$ card card:agent:gall
|
||||||
+$ lsp-req
|
+$ lsp-req
|
||||||
@ -44,6 +44,7 @@
|
|||||||
==
|
==
|
||||||
--
|
--
|
||||||
^- agent:gall
|
^- agent:gall
|
||||||
|
%- agent:dbug
|
||||||
%+ verb |
|
%+ verb |
|
||||||
=| state-zero
|
=| state-zero
|
||||||
=* state -
|
=* state -
|
||||||
@ -196,7 +197,7 @@
|
|||||||
%+ turn
|
%+ turn
|
||||||
~(tap in ~(key by builds))
|
~(tap in ~(key by builds))
|
||||||
|= uri=@t
|
|= uri=@t
|
||||||
[%pass /ford/[uri] %arvo %c %warp our.bow %home ~]
|
[%pass /ford/[uri] %arvo %c %warp our.bow %base ~]
|
||||||
::
|
::
|
||||||
++ handle-did-close
|
++ handle-did-close
|
||||||
|= [uri=@t version=(unit @)]
|
|= [uri=@t version=(unit @)]
|
||||||
@ -208,7 +209,7 @@
|
|||||||
=. builds
|
=. builds
|
||||||
(~(del by builds) uri)
|
(~(del by builds) uri)
|
||||||
:_ state
|
:_ state
|
||||||
[%pass /ford/[uri] %arvo %c %warp our.bow %home ~]~
|
[%pass /ford/[uri] %arvo %c %warp our.bow %base ~]~
|
||||||
::
|
::
|
||||||
++ handle-did-save
|
++ handle-did-save
|
||||||
|= [uri=@t version=(unit @)]
|
|= [uri=@t version=(unit @)]
|
||||||
@ -240,18 +241,29 @@
|
|||||||
?> ?=([%writ *] gift)
|
?> ?=([%writ *] gift)
|
||||||
=/ uri=@t
|
=/ uri=@t
|
||||||
(snag 1 path)
|
(snag 1 path)
|
||||||
=; res=(quip card _state)
|
=/ loc=^path (uri-to-path:build uri)
|
||||||
[(snoc -.res (build-file | uri path)) +.res]
|
=; [res=(quip card _state) dek=desk]
|
||||||
|
[(snoc -.res (build-file | uri loc `dek)) +.res]
|
||||||
?~ p.gift
|
?~ p.gift
|
||||||
[~ state]
|
[[~ state] %base]
|
||||||
=. builds
|
=. builds
|
||||||
(~(put by builds) uri q.r.u.p.gift)
|
(~(put by builds) uri q.r.u.p.gift)
|
||||||
=. ford-diagnostics
|
=. ford-diagnostics
|
||||||
(~(del by ford-diagnostics) uri)
|
(~(del by ford-diagnostics) uri)
|
||||||
=+ .^(=open:clay %cs /(scot %p our.bow)/home/(scot %da now.bow)/open/foo)
|
=/ bek byk.bow(r da+now.bow)
|
||||||
=/ =type -:(open (uri-to-path:build uri))
|
=/ desks=(list desk) ~(tap in .^((set desk) %cd (en-beam bek /)))
|
||||||
|
=| dek=desk
|
||||||
|
|-
|
||||||
|
?~ desks [[~ state] %base]
|
||||||
|
=. dek ?: =(%kids i.desks) %base i.desks
|
||||||
|
=/ exists=? .^(? %cu (en-beam bek(q dek) loc))
|
||||||
|
?. exists $(desks t.desks)
|
||||||
|
=+ .^(=open:clay %cs /(scot %p our.bow)/[dek]/(scot %da now.bow)/open/foo)
|
||||||
|
=/ =type -:(open loc)
|
||||||
|
|
||||||
=. preludes
|
=. preludes
|
||||||
(~(put by preludes) uri type)
|
(~(put by preludes) uri type)
|
||||||
|
:_ dek
|
||||||
:_ state
|
:_ state
|
||||||
(give-rpc-notification (get-diagnostics uri))
|
(give-rpc-notification (get-diagnostics uri))
|
||||||
::
|
::
|
||||||
@ -265,19 +277,28 @@
|
|||||||
(get-parser-diagnostics uri)
|
(get-parser-diagnostics uri)
|
||||||
::
|
::
|
||||||
++ build-file
|
++ build-file
|
||||||
|= [eager=? uri=@t =path]
|
|= [eager=? uri=@t =path desk=(unit desk)]
|
||||||
^- card
|
^- card
|
||||||
=/ =rave:clay
|
=/ =rave:clay
|
||||||
?: eager
|
?: eager
|
||||||
[%sing %a da+now.bow path]
|
[%sing %a da+now.bow path]
|
||||||
[%next %a da+now.bow path]
|
[%next %a da+now.bow path]
|
||||||
[%pass /ford/[uri] %arvo %c %warp our.bow %home `rave]
|
=/ des=^desk ?^ desk u.desk %base
|
||||||
|
[%pass /ford/[uri] %arvo %c %warp our.bow des `rave]
|
||||||
::
|
::
|
||||||
++ handle-did-open
|
++ handle-did-open
|
||||||
|= item=text-document-item:lsp-sur
|
|= item=text-document-item:lsp-sur
|
||||||
^- (quip card _state)
|
^- (quip card _state)
|
||||||
=/ =path
|
=/ =path
|
||||||
(uri-to-path:build uri.item)
|
(uri-to-path:build uri.item)
|
||||||
|
=/ bek byk.bow
|
||||||
|
=/ desks=(list desk) ~(tap in .^((set desk) %cd (en-beam bek /)))
|
||||||
|
=| dek=desk
|
||||||
|
|-
|
||||||
|
?~ desks [~ state]
|
||||||
|
=. dek ?: =(%kids i.desks) %base i.desks
|
||||||
|
=/ exists=? .^(? %cu (en-beam bek(q dek) path))
|
||||||
|
?. exists $(desks t.desks)
|
||||||
?: ?=(%sys -.path)
|
?: ?=(%sys -.path)
|
||||||
`state
|
`state
|
||||||
=/ buf=wall
|
=/ buf=wall
|
||||||
@ -287,7 +308,7 @@
|
|||||||
:_ state
|
:_ state
|
||||||
%+ weld
|
%+ weld
|
||||||
(give-rpc-notification (get-diagnostics uri.item))
|
(give-rpc-notification (get-diagnostics uri.item))
|
||||||
[(build-file & uri.item path) ~]
|
[(build-file & uri.item path `dek) ~]
|
||||||
::
|
::
|
||||||
++ get-parser-diagnostics
|
++ get-parser-diagnostics
|
||||||
|= uri=@t
|
|= uri=@t
|
||||||
|
@ -151,12 +151,16 @@
|
|||||||
?: ?=(l2-tx method)
|
?: ?=(l2-tx method)
|
||||||
(process-rpc id +.params method over-quota:scry)
|
(process-rpc id +.params method over-quota:scry)
|
||||||
?+ method [~ ~(method error:json-rpc id)]
|
?+ 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-point `(get-point id +.params point:scry)
|
||||||
%get-ships `(get-ships id +.params ships:scry)
|
%get-ships `(get-ships id +.params ships:scry)
|
||||||
%cancel-transaction (cancel-tx id +.params)
|
|
||||||
%get-spawned `(get-spawned id +.params spawned:scry)
|
%get-spawned `(get-spawned id +.params spawned:scry)
|
||||||
%get-unspawned `(get-spawned id +.params unspawned: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-sponsored-points `(sponsored-points id +.params sponsored:scry)
|
||||||
%get-owned-points `(get-ships id +.params owned:scry)
|
%get-owned-points `(get-ships id +.params owned:scry)
|
||||||
%get-transferring-for `(get-ships id +.params transfers: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-by-address `(addr:pending id +.params addr:pending:scry)
|
||||||
%get-pending-tx `(hash:pending id +.params hash:pending:scry)
|
%get-pending-tx `(hash:pending id +.params hash:pending:scry)
|
||||||
%get-transaction-status `(status id +.params tx-status: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-nonce `(nonce id +.params nonce:scry)
|
||||||
%get-history `(history id +.params addr:history:scry)
|
%get-history `(history id +.params addr:history:scry)
|
||||||
%get-roller-config `(get-config id +.params config: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-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)
|
%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
|
++ next-batch
|
||||||
.^ time
|
.^ time
|
||||||
%gx
|
%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
|
++ nonce
|
||||||
@ -356,6 +361,20 @@
|
|||||||
(~(scry agentio bowl) %roller /over-quota/(scot %p ship)/atom)
|
(~(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
|
++ ready
|
||||||
.^ ?
|
.^ ?
|
||||||
%gx
|
%gx
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -648,7 +648,6 @@
|
|||||||
::
|
::
|
||||||
++ yarn-to-byk
|
++ yarn-to-byk
|
||||||
|= [=yarn =bowl:gall]
|
|= [=yarn =bowl:gall]
|
||||||
|
|
||||||
=/ [* * =desk]
|
=/ [* * =desk]
|
||||||
~| "no desk associated with {<tid>}"
|
~| "no desk associated with {<tid>}"
|
||||||
%- ~(got by serving.state) (yarn-to-tid yarn)
|
%- ~(got by serving.state) (yarn-to-tid yarn)
|
||||||
@ -666,5 +665,4 @@
|
|||||||
%cc
|
%cc
|
||||||
/(scot %p our.bowl)/[desk]/(scot %da now.bowl)/[from]/[to]
|
/(scot %p our.bowl)/[desk]/(scot %da now.bowl)/[from]/[to]
|
||||||
==
|
==
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -30,4 +30,4 @@
|
|||||||
?. =(*^rift rift)
|
?. =(*^rift rift)
|
||||||
rift
|
rift
|
||||||
+(.^(^rift j+/(scot %p our)/rift/(scot %da now)/(scot %p mon)))
|
+(.^(^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))
|
leaf+(scow %uw (jam seed))
|
||||||
==
|
==
|
||||||
pub:ex:cub
|
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))
|
leaf+(scow %uw (jam seed))
|
||||||
==
|
==
|
||||||
pub:ex:cub
|
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)
|
~(parse error:json-rpc id)
|
||||||
[%result id (tx-status:to-json (scry u.hash))]
|
[%result id (tx-status:to-json (scry u.hash))]
|
||||||
::
|
::
|
||||||
++ next-batch
|
++ next-timer
|
||||||
|= [id=@t params=(map @t json) when=time]
|
|= [id=@t params=(map @t json) when=time]
|
||||||
^- response:rpc
|
^- response:rpc
|
||||||
?. =((lent ~(tap by params)) 0)
|
?. =((lent ~(tap by params)) 0)
|
||||||
@ -680,4 +680,25 @@
|
|||||||
?. =((lent ~(tap by params)) 0)
|
?. =((lent ~(tap by params)) 0)
|
||||||
~(params error:json-rpc id)
|
~(params error:json-rpc id)
|
||||||
[%result id (azimuth-config:to-json azimuth-config)]
|
[%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)}")
|
||||||
--
|
--
|
||||||
|
@ -1,207 +1,388 @@
|
|||||||
:: dice: helper functions for L2 Rollers
|
:: dice: helper functions for L2 Rollers
|
||||||
::
|
::
|
||||||
/- *dice
|
/- *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
|
++ nonce-order
|
||||||
|= [a=[* =nonce:naive] b=[* =nonce:naive]]
|
|= [a=[* =nonce:naive] b=[* =nonce:naive]]
|
||||||
(lte nonce.a nonce.b)
|
(lte nonce.a nonce.b)
|
||||||
::
|
::
|
||||||
++ apply-effects
|
++ data-to-hex
|
||||||
|= [chain-t=@ =effects:naive =indices]
|
|= 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
|
^+ indices
|
||||||
%+ roll effects
|
|
||||||
|= [=diff:naive indices=_indices]
|
|
||||||
?. ?=([%tx *] diff) indices::[nas own spo]
|
|
||||||
=< indices
|
=< 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
|
++ apply-raw-tx
|
||||||
|= [force=? chain-t=@ =raw-tx:naive =indices]
|
|= [force=? chain-t=@ =raw-tx:naive nas=^state:naive =indices]
|
||||||
^- [? ups=(list update) indices=_indices]
|
^- [? (list update) nas=_nas indices=_indices]
|
||||||
=+ cache-nas=nas.indices
|
=+ cache=nas
|
||||||
=/ chain-t=@t (ud-to-ascii:naive chain-t)
|
=/ 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:naive verifier chain-t nas raw-tx)
|
||||||
~& [%verify-sig-and-nonce %failed tx.raw-tx]
|
=+ [force ~ nas indices]
|
||||||
[force ~ indices]
|
?. verb -
|
||||||
=^ * points.nas.indices
|
~& >>> [verb+verb %verify-sig-and-nonce %failed tx.raw-tx] -
|
||||||
(increment-nonce:naive nas.indices from.tx.raw-tx)
|
=^ effects-1 points.nas
|
||||||
?~ nex=(receive-tx:naive nas.indices tx.raw-tx)
|
(increment-nonce:naive nas from.tx.raw-tx)
|
||||||
~& [%receive-tx %failed]
|
?~ nex=(receive-tx:naive nas tx.raw-tx)
|
||||||
=? nas.indices !force cache-nas
|
=+ [force ~ ?:(force nas cache) indices]
|
||||||
[force ~ indices]
|
?. verb -
|
||||||
|
~& >>> [verb+verb %receive-tx %failed] -
|
||||||
=* new-nas +.u.nex
|
=* new-nas +.u.nex
|
||||||
=* effects -.u.nex
|
=/ effects (welp effects-1 -.u.nex)
|
||||||
=/ [updates=(list update) own=_own.indices spo=_spo.indices]
|
=^ updates indices
|
||||||
(update-indices effects cache-nas new-nas [own spo]:indices)
|
(point-effects effects points.cache points.new-nas [own spo]:indices)
|
||||||
=: nas.indices new-nas
|
[& updates new-nas indices]
|
||||||
own.indices own
|
|
||||||
spo.indices spo
|
|
||||||
==
|
|
||||||
[& updates indices]
|
|
||||||
::
|
::
|
||||||
++ update-indices
|
++ point-effects
|
||||||
|= $: =effects:naive
|
|= [=effects:naive cache=points:naive =points:naive =indices]
|
||||||
cache-nas=^state:naive
|
^- [(list update) indices=_indices]
|
||||||
nas=^state:naive
|
=^ updates=(list update) indices
|
||||||
=owners
|
%+ roll effects
|
||||||
=sponsors
|
|= [=diff:naive updates=(list update) indices=_indices]
|
||||||
==
|
?. |(?=([%point *] diff) ?=([%nonce *] diff))
|
||||||
^- [(list update) own=_owners spo=_sponsors]
|
[updates indices]
|
||||||
%+ roll effects
|
?: ?=([%nonce *] diff)
|
||||||
|= $: =diff:naive
|
:_ indices
|
||||||
ups=(list update)
|
(welp (nonce-updates diff cache points) updates)
|
||||||
owners=_owners
|
?> ?=([%point *] diff)
|
||||||
sponsors=_sponsors
|
=* ship ship.diff
|
||||||
==
|
=* sponsors spo.indices
|
||||||
=, orm:naive
|
=* owners own.indices
|
||||||
?. ?=([%point *] diff) [ups owners sponsors]
|
=/ old=(unit point:naive) (get:orp cache ship)
|
||||||
=* ship ship.diff
|
=/ new=point:naive (need (get:orp points ship))
|
||||||
=/ old=(unit point:naive)
|
=^ update-1 sponsors
|
||||||
(get points.cache-nas ship)
|
(sponsorship-diff diff ship new old sponsors)
|
||||||
=/ new=point:naive
|
=^ update-2 owners
|
||||||
(need (get points.nas ship))
|
(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
|
=* event +>.diff
|
||||||
|^
|
?+ -.event `sponsors
|
||||||
=^ updates owners ownership
|
%owner
|
||||||
=+ sponsors=sponsorship
|
?^ old
|
||||||
:+ (weld ups updates)
|
:: ownership change
|
||||||
owners
|
|
||||||
sponsors
|
|
||||||
::
|
|
||||||
++ sponsorship
|
|
||||||
^+ sponsors
|
|
||||||
?+ -.event sponsors
|
|
||||||
%owner
|
|
||||||
?^ old
|
|
||||||
:: ownership change
|
|
||||||
::
|
|
||||||
sponsors
|
|
||||||
:: owner event with ?=(~ old) is a spawn
|
|
||||||
::
|
::
|
||||||
=* parent who.sponsor.net.new
|
`sponsors
|
||||||
?: =(parent ship) sponsors
|
:: owner event with ?=(~ old) is a spawn
|
||||||
%+ ~(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
|
=* parent who.sponsor.net.new
|
||||||
?~ old sponsors
|
?: =(parent ship) `sponsors
|
||||||
=* from who.sponsor.net.u.old
|
:: updates for proxy %own are taken care of
|
||||||
=* to to.event
|
:: in +sponsorship to avoid duplicates
|
||||||
=* escape escape.net.u.old
|
::
|
||||||
?~ to
|
:- ~
|
||||||
:: cancel/reject escape
|
%+ ~(put by sponsors) parent
|
||||||
::
|
?~ sponsor=(~(get by sponsors) parent)
|
||||||
?~ escape sponsors
|
:_ *(set @p)
|
||||||
?~ receiver=(~(get by sponsors) u.escape)
|
(~(put in *(set @p)) ship)
|
||||||
sponsors
|
:_ requests.u.sponsor
|
||||||
%+ ~(put by sponsors) u.escape
|
(~(put in residents.u.sponsor) ship)
|
||||||
:- residents.u.receiver
|
::
|
||||||
(~(del in requests.u.receiver) ship)
|
%escape
|
||||||
:: normal 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
|
?~ escape `sponsors
|
||||||
?~ receiver=(~(get by sponsors) u.to)
|
?~ receiver=(~(get by sponsors) u.escape)
|
||||||
:- *(set @p)
|
`sponsors
|
||||||
(~(put in *(set @p)) ship)
|
::
|
||||||
|
:- (proxy-updates diff ship new old)
|
||||||
|
::
|
||||||
|
%+ ~(put by sponsors) u.escape
|
||||||
:- residents.u.receiver
|
:- residents.u.receiver
|
||||||
(~(put in requests.u.receiver) ship)
|
(~(del in requests.u.receiver) ship)
|
||||||
|
:: normal escape
|
||||||
::
|
::
|
||||||
%sponsor
|
:- (proxy-updates diff ship new old)
|
||||||
?~ old sponsors
|
::
|
||||||
=* from who.sponsor.net.u.old
|
%+ ~(put by sponsors) u.to
|
||||||
=* to sponsor.event
|
?~ receiver=(~(get by sponsors) u.to)
|
||||||
=/ previous (~(get by sponsors) from)
|
:- *(set @p)
|
||||||
?~ to
|
(~(put in *(set @p)) ship)
|
||||||
:: detach
|
:- residents.u.receiver
|
||||||
::
|
(~(put in requests.u.receiver) ship)
|
||||||
?~ 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
|
|
||||||
==
|
|
||||||
::
|
::
|
||||||
++ ownership
|
%sponsor
|
||||||
^- (quip update _owners)
|
?~ old `sponsors
|
||||||
=; [to=(unit owner) from=(unit owner)]
|
=* from who.sponsor.net.u.old
|
||||||
=? owners &(?=(^ from) !=(address.u.from 0x0))
|
=* to sponsor.event
|
||||||
(~(del ju owners) u.from ship)
|
=/ previous (~(get by sponsors) from)
|
||||||
?: ?| =(~ to)
|
?~ to
|
||||||
&(?=(^ to) =(address.u.to 0x0))
|
:: detach
|
||||||
==
|
::
|
||||||
[ups owners]
|
?~ previous `sponsors
|
||||||
?~ to [ups owners]
|
::
|
||||||
:_ (~(put ju owners) u.to ship)
|
:- (proxy-updates diff ship new old)
|
||||||
(snoc ups [%point ship new u.to from])
|
::
|
||||||
?+ -.event [~ ~]
|
%+ ~(put by sponsors) from
|
||||||
%owner
|
:_ requests.u.previous
|
||||||
:- `[%own +.event]
|
(~(del in residents.u.previous) ship)
|
||||||
?~ old ~
|
:: accepted
|
||||||
`[%own address.owner.own.u.old]
|
|
||||||
::
|
::
|
||||||
%management-proxy
|
=/ receiver (~(get by sponsors) u.to)
|
||||||
:- `[%manage +.event]
|
=? sponsors ?=(^ receiver)
|
||||||
?~ old ~
|
%+ ~(put by sponsors) u.to
|
||||||
`[%manage address.management-proxy.own.u.old]
|
:- (~(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
|
?: =(sponsor ship) sponsors
|
||||||
:- `[%spawn +.event]
|
%+ ~(put by sponsors) sponsor
|
||||||
?~ old ~
|
?~ sponsees=(~(get by sponsors) sponsor)
|
||||||
`[%spawn address.spawn-proxy.own.u.old]
|
:_ *(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
|
?: =(sponsor ship) sponsors
|
||||||
:- `[%vote +.event]
|
%+ ~(put by sponsors) sponsor
|
||||||
?~ old ~
|
?~ receiver=(~(get by sponsors) sponsor)
|
||||||
`[%vote address.voting-proxy.own.u.old]
|
:- *(set @p)
|
||||||
::
|
(~(put in *(set @p)) ship)
|
||||||
%transfer-proxy
|
:- residents.u.receiver
|
||||||
:- `[%transfer +.event]
|
(~(put in requests.u.receiver) ship)
|
||||||
?~ old ~
|
::
|
||||||
`[%transfer address.transfer-proxy.own.u.old]
|
++ 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
|
++ get-owner
|
||||||
|= [=point:naive =proxy:naive]
|
|= [=point:naive =proxy:naive]
|
||||||
^- [nonce=@ _point]
|
^- (unit owner)
|
||||||
=* own own.point
|
=, own.point
|
||||||
?- proxy
|
?- proxy
|
||||||
%own
|
%own
|
||||||
:- nonce.owner.own
|
?:(=(address.owner 0x0) ~ `own+address.owner)
|
||||||
point(nonce.owner.own +(nonce.owner.own))
|
|
||||||
::
|
::
|
||||||
%spawn
|
%spawn
|
||||||
:- nonce.spawn-proxy.own
|
?:(=(address.spawn-proxy 0x0) ~ `spawn+address.spawn-proxy)
|
||||||
point(nonce.spawn-proxy.own +(nonce.spawn-proxy.own))
|
|
||||||
::
|
::
|
||||||
%manage
|
%manage
|
||||||
:- nonce.management-proxy.own
|
?:(=(address.management-proxy 0x0) ~ `manage+address.management-proxy)
|
||||||
point(nonce.management-proxy.own +(nonce.management-proxy.own))
|
|
||||||
::
|
::
|
||||||
%vote
|
%vote
|
||||||
:- nonce.voting-proxy.own
|
?:(=(address.voting-proxy 0x0) ~ `vote+address.voting-proxy)
|
||||||
point(nonce.voting-proxy.own +(nonce.voting-proxy.own))
|
|
||||||
::
|
::
|
||||||
%transfer
|
%transfer
|
||||||
:- nonce.transfer-proxy.own
|
?:(=(address.transfer-proxy 0x0) ~ `transfer+address.transfer-proxy)
|
||||||
point(nonce.transfer-proxy.own +(nonce.transfer-proxy.own))
|
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
++ 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
|
++ poke
|
||||||
|= [=mark =vase]
|
|= [=mark =vase]
|
||||||
|
?> =(our src):hid
|
||||||
?+ mark ~|([%poke-drum-bad-mark mark] !!)
|
?+ mark ~|([%poke-drum-bad-mark mark] !!)
|
||||||
%drum-dill-belt =;(f (f !<(_+<.f vase)) poke-dill-belt)
|
%drum-dill-belt =;(f (f !<(_+<.f vase)) poke-dill-belt)
|
||||||
%drum-dill-blit =;(f (f !<(_+<.f vase)) poke-dill-blit)
|
%drum-dill-blit =;(f (f !<(_+<.f vase)) poke-dill-blit)
|
||||||
|
@ -1,27 +1,33 @@
|
|||||||
/+ pill
|
/+ pill
|
||||||
=* card card:agent:gall
|
=* card card:agent:gall
|
||||||
|%
|
|%
|
||||||
+$ state state-1
|
+$ state state-2
|
||||||
+$ any-state
|
+$ any-state
|
||||||
$~ *state
|
$~ *state
|
||||||
$% state-1
|
$% state-2
|
||||||
|
state-1
|
||||||
state-0
|
state-0
|
||||||
==
|
==
|
||||||
+$ state-1
|
+$ state-2 [%2 =mass-timer]
|
||||||
$: %1
|
+$ state-1 [%1 =mass-timer]
|
||||||
mass-timer=[way=wire nex=@da tim=@dr]
|
|
||||||
==
|
|
||||||
+$ state-0 [%0 hoc=(map bone session-0)]
|
+$ state-0 [%0 hoc=(map bone session-0)]
|
||||||
+$ session-0
|
+$ session-0
|
||||||
$: say=*
|
$: say=*
|
||||||
mud=*
|
mud=*
|
||||||
mass-timer=[way=wire nex=@da tim=@dr]
|
=mass-timer
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
+$ mass-timer [way=wire nex=@da tim=@dr]
|
||||||
|
::
|
||||||
++ state-0-to-1
|
++ state-0-to-1
|
||||||
|= s=state-0
|
|= s=state-0
|
||||||
^- state
|
^- state-1
|
||||||
[%1 mass-timer:(~(got by hoc.s) 0)]
|
[%1 mass-timer:(~(got by hoc.s) 0)]
|
||||||
|
::
|
||||||
|
++ state-1-to-2
|
||||||
|
|= s=state-1
|
||||||
|
^- state-2
|
||||||
|
[%2 +.s]
|
||||||
--
|
--
|
||||||
|= [=bowl:gall sat=state]
|
|= [=bowl:gall sat=state]
|
||||||
=| moz=(list card)
|
=| moz=(list card)
|
||||||
@ -39,27 +45,46 @@
|
|||||||
^+ this
|
^+ this
|
||||||
?~(caz this $(caz t.caz, this (emit i.caz)))
|
?~(caz this $(caz t.caz, this (emit i.caz)))
|
||||||
::
|
::
|
||||||
|
++ on-init
|
||||||
|
(poke-serve [~ /who] %base /gen/who/hoon ~)
|
||||||
|
::
|
||||||
++ on-load
|
++ on-load
|
||||||
|= [hood-version=@ud old=any-state]
|
|= [hood-version=@ud old=any-state]
|
||||||
=< abet
|
=< abet
|
||||||
=? old ?=(%0 -.old) (state-0-to-1 old)
|
=? old ?=(%0 -.old) (state-0-to-1 old)
|
||||||
?> ?=(%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)
|
this(sat old)
|
||||||
::
|
::
|
||||||
++ poke-rekey :: rotate private keys
|
++ poke-rekey :: rotate private keys
|
||||||
|= des=@t
|
|= des=@t
|
||||||
=/ sed=(unit seed:jael)
|
=/ fud=(unit feed:jael)
|
||||||
%+ biff
|
%+ biff
|
||||||
(bind (slaw %uw des) cue)
|
(bind (slaw %uw des) cue)
|
||||||
(soft seed:jael)
|
(soft feed:jael)
|
||||||
=< abet
|
=< abet
|
||||||
?~ sed
|
?~ fud
|
||||||
~& %invalid-private-key
|
~& %invalid-private-key
|
||||||
this
|
this
|
||||||
?. =(our.bowl who.u.sed)
|
=/ fed (need fud)
|
||||||
~& [%wrong-private-key-ship who.u.sed]
|
?@ -.fed
|
||||||
|
?. =(our.bowl who.fed)
|
||||||
|
~& [%wrong-private-key-ship who.fed]
|
||||||
|
this
|
||||||
|
(emit %pass / %arvo %j %rekey lyf.fed key.fed)
|
||||||
|
?. =(our.bowl who.fed)
|
||||||
|
~& [%wrong-private-key-ship who.fed]
|
||||||
this
|
this
|
||||||
(emit %pass / %arvo %j %rekey lyf.u.sed key.u.sed)
|
=| caz=(list card)
|
||||||
|
%- emil
|
||||||
|
|-
|
||||||
|
?~ kyz.fed (flop caz)
|
||||||
|
%= $
|
||||||
|
kyz.fed t.kyz.fed
|
||||||
|
caz [[%pass / %arvo %j %rekey i.kyz.fed] caz]
|
||||||
|
==
|
||||||
::
|
::
|
||||||
++ ames-secret
|
++ ames-secret
|
||||||
^- @t
|
^- @t
|
||||||
@ -199,6 +224,9 @@
|
|||||||
::
|
::
|
||||||
++ poke
|
++ poke
|
||||||
|= [=mark =vase]
|
|= [=mark =vase]
|
||||||
|
?> ?| ?=(%helm-hi mark)
|
||||||
|
=(our src):bowl
|
||||||
|
==
|
||||||
?+ mark ~|([%poke-helm-bad-mark mark] !!)
|
?+ mark ~|([%poke-helm-bad-mark mark] !!)
|
||||||
%helm-ames-sift =;(f (f !<(_+<.f vase)) poke-ames-sift)
|
%helm-ames-sift =;(f (f !<(_+<.f vase)) poke-ames-sift)
|
||||||
%helm-ames-verb =;(f (f !<(_+<.f vase)) poke-ames-verb)
|
%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
|
||||||
|
--
|
@ -1,15 +1,18 @@
|
|||||||
:: dice: structures for L2 rollers
|
:: dice: structures for Azimuth L2 rollers
|
||||||
::
|
::
|
||||||
/+ naive, ethereum
|
/+ naive, ethereum
|
||||||
::
|
::
|
||||||
|%
|
|%
|
||||||
+$ owner [=proxy:naive =address:naive]
|
+$ owner [=proxy:naive =address:naive]
|
||||||
+$ owners (jug owner ship)
|
+$ owners (jug owner ship)
|
||||||
+$ sponsors (map ship [residents=(set ship) requests=(set ship)])
|
+$ sponsors (map ship [residents=(set ship) requests=(set ship)])
|
||||||
+$ net ?(%mainnet %ropsten %local %default)
|
+$ history (map address:ethereum (tree hist-tx))
|
||||||
|
+$ net ?(%mainnet %ropsten %local %default)
|
||||||
|
+$ snap-state [%0 =id:block:jael nas=^state:naive =owners =sponsors]
|
||||||
::
|
::
|
||||||
+$ config
|
+$ config
|
||||||
$% [%frequency frequency=@dr]
|
$% [%frequency frequency=@dr]
|
||||||
|
[%fallback gas=@ud]
|
||||||
[%setkey pk=@]
|
[%setkey pk=@]
|
||||||
[%endpoint endpoint=@t =net]
|
[%endpoint endpoint=@t =net]
|
||||||
[%resend-time time=@dr]
|
[%resend-time time=@dr]
|
||||||
@ -19,8 +22,7 @@
|
|||||||
==
|
==
|
||||||
::
|
::
|
||||||
+$ indices
|
+$ indices
|
||||||
$: nas=^state:naive
|
$: own=owners
|
||||||
own=owners
|
|
||||||
spo=sponsors
|
spo=sponsors
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
@ -69,9 +71,16 @@
|
|||||||
==
|
==
|
||||||
::
|
::
|
||||||
+$ update
|
+$ update
|
||||||
$% [%point =ship =point:naive new=owner old=(unit owner)]
|
$% [%tx =pend-tx =status]
|
||||||
[%tx =address:ethereum =roll-tx]
|
::
|
||||||
==
|
$: %point
|
||||||
|
=diff:naive
|
||||||
|
=ship
|
||||||
|
new=point:naive
|
||||||
|
old=(unit point:naive)
|
||||||
|
to=owner
|
||||||
|
from=(unit owner)
|
||||||
|
== ==
|
||||||
::
|
::
|
||||||
+$ hist-tx [p=time q=roll-tx]
|
+$ hist-tx [p=time q=roll-tx]
|
||||||
+$ roll-tx [=ship =status hash=keccak type=l2-tx]
|
+$ roll-tx [=ship =status hash=keccak type=l2-tx]
|
||||||
@ -90,7 +99,12 @@
|
|||||||
pk=@
|
pk=@
|
||||||
::
|
::
|
||||||
nonce=@ud
|
nonce=@ud
|
||||||
|
fallback-gas-price=@ud
|
||||||
next-gas-price=@ud
|
next-gas-price=@ud
|
||||||
txs=(list raw-tx:naive)
|
txs=(list raw-tx:naive)
|
||||||
==
|
==
|
||||||
|
::
|
||||||
|
+$ roller-data
|
||||||
|
[chain-id=@ =points:naive history=(tree hist-tx) =owners =sponsors]
|
||||||
|
::
|
||||||
--
|
--
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
:: $gang: infinite set of peers
|
:: $gang: infinite set of peers
|
||||||
:: $mark: symbolic content type
|
:: $mark: symbolic content type
|
||||||
:: $mien: orientation
|
:: $mien: orientation
|
||||||
|
:: $page: untyped cage
|
||||||
:: +omen: namespace path and data
|
:: +omen: namespace path and data
|
||||||
:: $ship: network identity
|
:: $ship: network identity
|
||||||
:: $sink: subscription
|
:: $sink: subscription
|
||||||
@ -49,6 +50,7 @@
|
|||||||
+$ gang (unit (set ship))
|
+$ gang (unit (set ship))
|
||||||
+$ mark @tas
|
+$ mark @tas
|
||||||
+$ mien [our=ship now=@da eny=@uvJ]
|
+$ mien [our=ship now=@da eny=@uvJ]
|
||||||
|
+$ page (cask)
|
||||||
++ omen |$ [a] (pair path (cask a))
|
++ omen |$ [a] (pair path (cask a))
|
||||||
+$ ship @p
|
+$ ship @p
|
||||||
+$ sink (trel bone ship path)
|
+$ sink (trel bone ship path)
|
||||||
@ -86,7 +88,7 @@
|
|||||||
:: +wite: kernel action/error builder
|
:: +wite: kernel action/error builder
|
||||||
::
|
::
|
||||||
+$ ball (wite [vane=term task=maze] maze)
|
+$ ball (wite [vane=term task=maze] maze)
|
||||||
+$ card (cask)
|
+$ card (pair @tas *)
|
||||||
+$ duct (list wire)
|
+$ duct (list wire)
|
||||||
++ hobo
|
++ hobo
|
||||||
|$ [a]
|
|$ [a]
|
||||||
@ -1677,6 +1679,7 @@
|
|||||||
%g %gall
|
%g %gall
|
||||||
%i %iris
|
%i %iris
|
||||||
%j %jael
|
%j %jael
|
||||||
|
%k %khan
|
||||||
==
|
==
|
||||||
-- =>
|
-- =>
|
||||||
::
|
::
|
||||||
|
@ -8580,15 +8580,7 @@
|
|||||||
==
|
==
|
||||||
::
|
::
|
||||||
[%mcfs *] =+(zoy=[%rock %ta %$] [%clsg [zoy [%clsg [zoy p.gen] ~]] ~])
|
[%mcfs *] =+(zoy=[%rock %ta %$] [%clsg [zoy [%clsg [zoy p.gen] ~]] ~])
|
||||||
[%mcgl *]
|
[%mcgl *] [%cnls [%cnhp q ktcl+p] r [%brts p [%tsgr $+3 s]]]:gen
|
||||||
:^ %cnls
|
|
||||||
:+ %cnhp
|
|
||||||
q.gen
|
|
||||||
[%ktcl p.gen]
|
|
||||||
r.gen
|
|
||||||
:+ %brts
|
|
||||||
p.gen
|
|
||||||
s.gen
|
|
||||||
::
|
::
|
||||||
[%mcsg *] :: ;~
|
[%mcsg *] :: ;~
|
||||||
|- ^- hoon
|
|- ^- hoon
|
||||||
|
@ -768,7 +768,7 @@
|
|||||||
[r=@uxD g=@uxD b=@uxD] :: 24bit true color
|
[r=@uxD g=@uxD b=@uxD] :: 24bit true color
|
||||||
+$ turf (list @t) :: domain, tld first
|
+$ turf (list @t) :: domain, tld first
|
||||||
:: ::::
|
:: ::::
|
||||||
:::: ++ethereum-types :: eth surs for jael
|
:::: ++ethereum-types :: eth surs for jael
|
||||||
:: ::::
|
:: ::::
|
||||||
++ ethereum-types
|
++ ethereum-types
|
||||||
|%
|
|%
|
||||||
@ -782,7 +782,7 @@
|
|||||||
++ events (set event-id)
|
++ events (set event-id)
|
||||||
--
|
--
|
||||||
:: ::::
|
:: ::::
|
||||||
:::: ++azimuth-types :: az surs for jael
|
:::: ++azimuth-types :: az surs for jael
|
||||||
:: ::::
|
:: ::::
|
||||||
++ azimuth-types
|
++ azimuth-types
|
||||||
=, ethereum-types
|
=, ethereum-types
|
||||||
@ -862,7 +862,7 @@
|
|||||||
[%plea =ship =plea:ames]
|
[%plea =ship =plea:ames]
|
||||||
==
|
==
|
||||||
:: ::::
|
:: ::::
|
||||||
:::: ++http ::
|
:::: ++http ::
|
||||||
:: ::::
|
:: ::::
|
||||||
:: http: shared representations of http concepts
|
:: http: shared representations of http concepts
|
||||||
::
|
::
|
||||||
@ -1049,7 +1049,7 @@
|
|||||||
==
|
==
|
||||||
--
|
--
|
||||||
:: ::::
|
:: ::::
|
||||||
:::: ++ames :: (1a) network
|
:::: ++ames :: (1a) network
|
||||||
:: ::::
|
:: ::::
|
||||||
++ ames ^?
|
++ ames ^?
|
||||||
|%
|
|%
|
||||||
@ -1246,6 +1246,7 @@
|
|||||||
+$ peer-state
|
+$ peer-state
|
||||||
$: $: =symmetric-key
|
$: $: =symmetric-key
|
||||||
=life
|
=life
|
||||||
|
=rift
|
||||||
=public-key
|
=public-key
|
||||||
sponsor=ship
|
sponsor=ship
|
||||||
==
|
==
|
||||||
@ -1619,7 +1620,6 @@
|
|||||||
[%| p=@tas] :: label
|
[%| p=@tas] :: label
|
||||||
== ::
|
== ::
|
||||||
+$ open $-(path vase) :: get prelude
|
+$ open $-(path vase) :: get prelude
|
||||||
+$ page (cask *) :: untyped cage
|
|
||||||
+$ plop blob :: unvalidated blob
|
+$ plop blob :: unvalidated blob
|
||||||
+$ rang :: repository
|
+$ rang :: repository
|
||||||
$: hut=(map tako yaki) :: changes
|
$: hut=(map tako yaki) :: changes
|
||||||
@ -2668,6 +2668,7 @@
|
|||||||
[%private-keys ~] :: sub to privates
|
[%private-keys ~] :: sub to privates
|
||||||
[%public-keys ships=(set ship)] :: sub to publics
|
[%public-keys ships=(set ship)] :: sub to publics
|
||||||
[%rekey =life =ring] :: update private keys
|
[%rekey =life =ring] :: update private keys
|
||||||
|
[%resend ~] :: resend private key
|
||||||
[%ruin ships=(set ship)] :: pretend breach
|
[%ruin ships=(set ship)] :: pretend breach
|
||||||
$>(%trim vane-task) :: trim state
|
$>(%trim vane-task) :: trim state
|
||||||
[%turf ~] :: view domains
|
[%turf ~] :: view domains
|
||||||
@ -2742,8 +2743,8 @@
|
|||||||
+$ udiffs (list [=ship =udiff])
|
+$ udiffs (list [=ship =udiff])
|
||||||
+$ udiff
|
+$ udiff
|
||||||
$: =id:block
|
$: =id:block
|
||||||
$% [%rift =rift]
|
$% [%rift =rift boot=?]
|
||||||
[%keys key-update]
|
[%keys key-update boot=?]
|
||||||
[%spon sponsor=(unit @p)]
|
[%spon sponsor=(unit @p)]
|
||||||
[%disavow ~]
|
[%disavow ~]
|
||||||
== ==
|
== ==
|
||||||
@ -2757,14 +2758,14 @@
|
|||||||
%rift
|
%rift
|
||||||
?. (gth rift.a-udiff rift.a-point)
|
?. (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]
|
[%udiff-to-diff-skipped-rift a-udiff a-point]
|
||||||
`[%rift rift.a-point rift.a-udiff]
|
`[%rift rift.a-point rift.a-udiff]
|
||||||
::
|
::
|
||||||
%keys
|
%keys
|
||||||
?. (gth life.a-udiff life.a-point)
|
?. (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]
|
[%udiff-to-diff-skipped-life a-udiff a-point]
|
||||||
:^ ~ %keys
|
:^ ~ %keys
|
||||||
[life.a-point (~(gut by keys.a-point) life.a-point *[@ud pass])]
|
[life.a-point (~(gut by keys.a-point) life.a-point *[@ud pass])]
|
||||||
@ -2853,6 +2854,32 @@
|
|||||||
+$ oath @ :: signature
|
+$ oath @ :: signature
|
||||||
-- :: pki
|
-- :: pki
|
||||||
-- :: jael
|
-- :: jael
|
||||||
|
:: ::::
|
||||||
|
:::: ++khan :: (1i) threads
|
||||||
|
:: ::::
|
||||||
|
++ khan ^?
|
||||||
|
|%
|
||||||
|
+$ gift :: out result <-$
|
||||||
|
$% [%arow p=(avow cage)] :: in-arvo result
|
||||||
|
[%avow p=(avow page)] :: external result
|
||||||
|
== ::
|
||||||
|
+$ task :: in request ->$
|
||||||
|
$~ [%vega ~] ::
|
||||||
|
$% $>(%born vane-task) :: new unix process
|
||||||
|
[%done ~] :: socket closed
|
||||||
|
:: XX mark ignored
|
||||||
|
::
|
||||||
|
[%fard p=(fyrd cage)] :: in-arvo thread
|
||||||
|
[%fyrd p=(fyrd cast)] :: external thread
|
||||||
|
$>(%trim vane-task) :: trim state
|
||||||
|
$>(%vega vane-task) :: report upgrade
|
||||||
|
== ::
|
||||||
|
:: ::
|
||||||
|
++ avow |$ [a] (each a goof) :: $fyrd result
|
||||||
|
+$ bear $@(desk beak) :: partial $beak
|
||||||
|
+$ cast (pair mark page) :: output mark + input
|
||||||
|
++ fyrd |$ [a] [=bear name=term args=a] :: thread run request
|
||||||
|
-- ::khan
|
||||||
::
|
::
|
||||||
+$ gift-arvo :: out result <-$
|
+$ gift-arvo :: out result <-$
|
||||||
$~ [%doze ~]
|
$~ [%doze ~]
|
||||||
@ -2864,6 +2891,7 @@
|
|||||||
gift:gall
|
gift:gall
|
||||||
gift:iris
|
gift:iris
|
||||||
gift:jael
|
gift:jael
|
||||||
|
gift:khan
|
||||||
==
|
==
|
||||||
+$ task-arvo :: in request ->$
|
+$ task-arvo :: in request ->$
|
||||||
$% task:ames
|
$% task:ames
|
||||||
@ -2874,6 +2902,7 @@
|
|||||||
task:gall
|
task:gall
|
||||||
task:iris
|
task:iris
|
||||||
task:jael
|
task:jael
|
||||||
|
task:khan
|
||||||
==
|
==
|
||||||
+$ note-arvo :: out request $->
|
+$ note-arvo :: out request $->
|
||||||
$~ [%b %wake ~]
|
$~ [%b %wake ~]
|
||||||
@ -2885,6 +2914,7 @@
|
|||||||
[%g task:gall]
|
[%g task:gall]
|
||||||
[%i task:iris]
|
[%i task:iris]
|
||||||
[%j task:jael]
|
[%j task:jael]
|
||||||
|
[%k task:khan]
|
||||||
[%$ %whiz ~]
|
[%$ %whiz ~]
|
||||||
[@tas %meta vase]
|
[@tas %meta vase]
|
||||||
==
|
==
|
||||||
@ -2906,6 +2936,7 @@
|
|||||||
[%gall gift:gall]
|
[%gall gift:gall]
|
||||||
[%iris gift:iris]
|
[%iris gift:iris]
|
||||||
[%jael gift:jael]
|
[%jael gift:jael]
|
||||||
|
[%khan gift:khan]
|
||||||
==
|
==
|
||||||
:: $unix-task: input from unix
|
:: $unix-task: input from unix
|
||||||
::
|
::
|
||||||
|
@ -201,22 +201,41 @@
|
|||||||
:+ (add 4 next-bone.ossuary)
|
:+ (add 4 next-bone.ossuary)
|
||||||
(~(put by by-duct.ossuary) duct next-bone.ossuary)
|
(~(put by by-duct.ossuary) duct next-bone.ossuary)
|
||||||
(~(put by by-bone.ossuary) next-bone.ossuary duct)
|
(~(put by by-bone.ossuary) next-bone.ossuary duct)
|
||||||
:: +make-bone-wire: encode ship and bone in wire for sending to vane
|
:: +make-bone-wire: encode ship, rift and bone in wire for sending to vane
|
||||||
::
|
::
|
||||||
++ make-bone-wire
|
++ make-bone-wire
|
||||||
|= [her=ship =bone]
|
|= [her=ship =rift =bone]
|
||||||
^- wire
|
^- wire
|
||||||
::
|
::
|
||||||
/bone/(scot %p her)/(scot %ud bone)
|
/bone/(scot %p her)/(scot %ud rift)/(scot %ud bone)
|
||||||
:: +parse-bone-wire: decode ship and bone from wire from local vane
|
:: +parse-bone-wire: decode ship, bone and rift from wire from local vane
|
||||||
::
|
::
|
||||||
++ parse-bone-wire
|
++ parse-bone-wire
|
||||||
|= =wire
|
|= =wire
|
||||||
^- [her=ship =bone]
|
^- %- unit
|
||||||
|
$% [%old her=ship =bone]
|
||||||
|
[%new her=ship =rift =bone]
|
||||||
|
==
|
||||||
|
?. ?| ?=([%bone @ @ @ ~] wire)
|
||||||
|
?=([%bone @ @ ~] wire)
|
||||||
|
==
|
||||||
|
:: ignore malformed wires
|
||||||
|
::
|
||||||
|
~
|
||||||
|
?+ wire ~
|
||||||
|
[%bone @ @ ~]
|
||||||
|
:: later on we drop events that come in an old wire but
|
||||||
|
:: tracking it here let us print a notification to the user
|
||||||
|
::
|
||||||
|
`[%old `@p`(slav %p i.t.wire) `@ud`(slav %ud i.t.t.wire)]
|
||||||
::
|
::
|
||||||
~| %ames-wire-bone^wire
|
[%bone @ @ @ ~]
|
||||||
?> ?=([%bone @ @ ~] wire)
|
%- some
|
||||||
[`@p`(slav %p i.t.wire) `@ud`(slav %ud i.t.t.wire)]
|
:^ %new
|
||||||
|
`@p`(slav %p i.t.wire)
|
||||||
|
`@ud`(slav %ud i.t.t.wire)
|
||||||
|
`@ud`(slav %ud i.t.t.t.wire)
|
||||||
|
==
|
||||||
:: +make-pump-timer-wire: construct wire for |packet-pump timer
|
:: +make-pump-timer-wire: construct wire for |packet-pump timer
|
||||||
::
|
::
|
||||||
++ make-pump-timer-wire
|
++ make-pump-timer-wire
|
||||||
@ -446,6 +465,8 @@
|
|||||||
::
|
::
|
||||||
++ encode-shut-packet
|
++ encode-shut-packet
|
||||||
~/ %encode-shut-packet
|
~/ %encode-shut-packet
|
||||||
|
:: TODO add rift to signed messages to prevent replay attacks?
|
||||||
|
::
|
||||||
|= $: =shut-packet
|
|= $: =shut-packet
|
||||||
=symmetric-key
|
=symmetric-key
|
||||||
sndr=ship
|
sndr=ship
|
||||||
@ -550,6 +571,7 @@
|
|||||||
::
|
::
|
||||||
$: =symmetric-key
|
$: =symmetric-key
|
||||||
=her=life
|
=her=life
|
||||||
|
=her=rift
|
||||||
=her=public-key
|
=her=public-key
|
||||||
her-sponsor=ship
|
her-sponsor=ship
|
||||||
== ==
|
== ==
|
||||||
@ -577,6 +599,8 @@
|
|||||||
:: This data structure gets signed and jammed to form the .contents
|
:: This data structure gets signed and jammed to form the .contents
|
||||||
:: field of a $packet.
|
:: field of a $packet.
|
||||||
::
|
::
|
||||||
|
:: TODO add rift to prevent replay attacks
|
||||||
|
::
|
||||||
+$ open-packet
|
+$ open-packet
|
||||||
$: =public-key
|
$: =public-key
|
||||||
sndr=ship
|
sndr=ship
|
||||||
@ -613,36 +637,27 @@
|
|||||||
::
|
::
|
||||||
+$ naxplanation [=message-num =error]
|
+$ naxplanation [=message-num =error]
|
||||||
::
|
::
|
||||||
+| %statics
|
+$ ames-state-4 ames-state-5
|
||||||
::
|
+$ ames-state-5
|
||||||
:: $ames-state: state for entire vane
|
$: peers=(map ship ship-state-5)
|
||||||
::
|
|
||||||
:: peers: states of connections to other ships
|
|
||||||
:: unix-duct: handle to give moves to unix
|
|
||||||
:: life: our $life; how many times we've rekeyed
|
|
||||||
:: crypto-core: interface for encryption and signing
|
|
||||||
:: bug: debug printing configuration
|
|
||||||
::
|
|
||||||
+$ ames-state
|
|
||||||
$: peers=(map ship ship-state)
|
|
||||||
=unix=duct
|
=unix=duct
|
||||||
=life
|
=life
|
||||||
crypto-core=acru:ames
|
crypto-core=acru:ames
|
||||||
=bug
|
=bug
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
+$ ames-state-5
|
+$ ship-state-4 ship-state-5
|
||||||
$: peers=(map ship ship-state-5)
|
|
||||||
=unix=duct
|
|
||||||
=life
|
|
||||||
crypto-core=acru-5
|
|
||||||
=bug
|
|
||||||
==
|
|
||||||
+$ ship-state-5
|
+$ ship-state-5
|
||||||
$% [%alien alien-agenda-5]
|
$% [%alien alien-agenda-6]
|
||||||
[%known peer-state-5]
|
[%known peer-state-5]
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
|
+$ alien-agenda-6
|
||||||
|
$: messages=(list [=duct =plea])
|
||||||
|
packets=(set =blob)
|
||||||
|
heeds=(set duct)
|
||||||
|
==
|
||||||
|
::
|
||||||
+$ peer-state-5
|
+$ peer-state-5
|
||||||
$: $: =symmetric-key
|
$: $: =symmetric-key
|
||||||
=life
|
=life
|
||||||
@ -658,11 +673,53 @@
|
|||||||
heeds=(set duct)
|
heeds=(set duct)
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
+$ alien-agenda-5
|
+$ ship-state-6
|
||||||
$: messages=(list [=duct =plea])
|
$% [%alien alien-agenda-6]
|
||||||
packets=(set =blob)
|
[%known peer-state-6]
|
||||||
|
==
|
||||||
|
::
|
||||||
|
+$ peer-state-6
|
||||||
|
$: $: =symmetric-key
|
||||||
|
=life
|
||||||
|
=rift
|
||||||
|
=public-key
|
||||||
|
sponsor=ship
|
||||||
|
==
|
||||||
|
route=(unit [direct=? =lane])
|
||||||
|
=qos
|
||||||
|
=ossuary
|
||||||
|
snd=(map bone message-pump-state)
|
||||||
|
rcv=(map bone message-sink-state)
|
||||||
|
nax=(set [=bone =message-num])
|
||||||
heeds=(set duct)
|
heeds=(set duct)
|
||||||
==
|
==
|
||||||
|
+$ ames-state-6
|
||||||
|
$: peers=(map ship ship-state-6)
|
||||||
|
=unix=duct
|
||||||
|
=life
|
||||||
|
crypto-core=acru:ames
|
||||||
|
=bug
|
||||||
|
==
|
||||||
|
::
|
||||||
|
+| %statics
|
||||||
|
::
|
||||||
|
:: $ames-state: state for entire vane
|
||||||
|
::
|
||||||
|
:: peers: states of connections to other ships
|
||||||
|
:: unix-duct: handle to give moves to unix
|
||||||
|
:: life: our $life; how many times we've rekeyed
|
||||||
|
:: crypto-core: interface for encryption and signing
|
||||||
|
:: bug: debug printing configuration
|
||||||
|
::
|
||||||
|
+$ ames-state
|
||||||
|
$: peers=(map ship ship-state)
|
||||||
|
=unix=duct
|
||||||
|
=life
|
||||||
|
=rift
|
||||||
|
crypto-core=acru:ames
|
||||||
|
=bug
|
||||||
|
==
|
||||||
|
::
|
||||||
++ acru-5 $_ ^?
|
++ acru-5 $_ ^?
|
||||||
|%
|
|%
|
||||||
++ as ^?
|
++ as ^?
|
||||||
@ -877,7 +934,6 @@
|
|||||||
|= [=duct dud=(unit goof) wrapped-task=(hobo task)]
|
|= [=duct dud=(unit goof) wrapped-task=(hobo task)]
|
||||||
::
|
::
|
||||||
=/ =task ((harden task) wrapped-task)
|
=/ =task ((harden task) wrapped-task)
|
||||||
::
|
|
||||||
:: reject larval error notifications
|
:: reject larval error notifications
|
||||||
::
|
::
|
||||||
?^ dud
|
?^ dud
|
||||||
@ -967,15 +1023,15 @@
|
|||||||
:: lifecycle arms; mostly pass-throughs to the contained adult ames
|
:: lifecycle arms; mostly pass-throughs to the contained adult ames
|
||||||
::
|
::
|
||||||
++ scry scry:adult-core
|
++ scry scry:adult-core
|
||||||
++ stay [%6 %larva queued-events ames-state.adult-gate]
|
++ stay [%7 %larva queued-events ames-state.adult-gate]
|
||||||
++ load
|
++ load
|
||||||
|= $= old
|
|= $= old
|
||||||
$% $: %4
|
$% $: %4
|
||||||
$% $: %larva
|
$% $: %larva
|
||||||
events=(qeu queued-event)
|
events=(qeu queued-event)
|
||||||
state=ames-state-5
|
state=ames-state-4
|
||||||
==
|
==
|
||||||
[%adult state=ames-state-5]
|
[%adult state=ames-state-4]
|
||||||
== ==
|
== ==
|
||||||
$: %5
|
$: %5
|
||||||
$% $: %larva
|
$% $: %larva
|
||||||
@ -985,13 +1041,19 @@
|
|||||||
[%adult state=ames-state-5]
|
[%adult state=ames-state-5]
|
||||||
== ==
|
== ==
|
||||||
$: %6
|
$: %6
|
||||||
|
$% $: %larva
|
||||||
|
events=(qeu queued-event)
|
||||||
|
state=ames-state-6
|
||||||
|
==
|
||||||
|
[%adult state=ames-state-6]
|
||||||
|
== ==
|
||||||
|
$: %7
|
||||||
$% $: %larva
|
$% $: %larva
|
||||||
events=(qeu queued-event)
|
events=(qeu queued-event)
|
||||||
state=_ames-state.adult-gate
|
state=_ames-state.adult-gate
|
||||||
==
|
==
|
||||||
[%adult state=_ames-state.adult-gate]
|
[%adult state=_ames-state.adult-gate]
|
||||||
== ==
|
== == ==
|
||||||
==
|
|
||||||
?- old
|
?- old
|
||||||
[%4 %adult *] (load:adult-core %4 state.old)
|
[%4 %adult *] (load:adult-core %4 state.old)
|
||||||
::
|
::
|
||||||
@ -1001,12 +1063,14 @@
|
|||||||
=. adult-gate (load:adult-core %4 state.old)
|
=. adult-gate (load:adult-core %4 state.old)
|
||||||
larval-gate
|
larval-gate
|
||||||
::
|
::
|
||||||
[%5 %adult *] (load:adult-core %5 state.old)
|
[%5 %adult *]
|
||||||
|
~> %slog.1^leaf/"ames: larva reload"
|
||||||
|
=. adult-gate (load:adult-core %5 state.old)
|
||||||
|
larval-gate
|
||||||
::
|
::
|
||||||
[%5 %larva *]
|
[%5 %larva *]
|
||||||
~> %slog.1^leaf/"ames: larva: load"
|
~> %slog.1^leaf/"ames: larva: load"
|
||||||
=. queued-events events.old
|
=. queued-events events.old
|
||||||
=. adult-gate (load:adult-core %5 state.old)
|
|
||||||
larval-gate
|
larval-gate
|
||||||
::
|
::
|
||||||
[%6 %adult *] (load:adult-core %6 state.old)
|
[%6 %adult *] (load:adult-core %6 state.old)
|
||||||
@ -1016,6 +1080,14 @@
|
|||||||
=. queued-events events.old
|
=. queued-events events.old
|
||||||
=. adult-gate (load:adult-core %6 state.old)
|
=. adult-gate (load:adult-core %6 state.old)
|
||||||
larval-gate
|
larval-gate
|
||||||
|
::
|
||||||
|
[%7 %adult *] (load:adult-core %7 state.old)
|
||||||
|
::
|
||||||
|
[%7 %larva *]
|
||||||
|
~> %slog.1^leaf/"ames: larva: load"
|
||||||
|
=. queued-events events.old
|
||||||
|
=. adult-gate (load:adult-core %7 state.old)
|
||||||
|
larval-gate
|
||||||
==
|
==
|
||||||
--
|
--
|
||||||
:: adult ames, after metamorphosis from larva
|
:: adult ames, after metamorphosis from larva
|
||||||
@ -1099,34 +1171,62 @@
|
|||||||
++ load
|
++ load
|
||||||
|^
|
|^
|
||||||
|= $= old-state
|
|= $= old-state
|
||||||
$% [%4 ames-state-5]
|
$% [%4 ames-state-4]
|
||||||
[%5 ames-state-5]
|
[%5 ames-state-5]
|
||||||
[%6 ^ames-state]
|
[%6 ames-state-6]
|
||||||
|
[%7 ^ames-state]
|
||||||
==
|
==
|
||||||
^+ ames-gate
|
^+ ames-gate
|
||||||
=? old-state ?=(%4 -.old-state) %5^(state-4-to-5 +.old-state)
|
=? old-state ?=(%4 -.old-state) %5^(state-4-to-5 +.old-state)
|
||||||
=? old-state ?=(%5 -.old-state) %6^(state-5-to-6 +.old-state)
|
=? old-state ?=(%5 -.old-state) %6^(state-5-to-6 +.old-state)
|
||||||
|
=? old-state ?=(%6 -.old-state) %7^(state-6-to-7 +.old-state)
|
||||||
::
|
::
|
||||||
?> ?=(%6 -.old-state)
|
?> ?=(%7 -.old-state)
|
||||||
ames-gate(ames-state +.old-state)
|
ames-gate(ames-state +.old-state)
|
||||||
::
|
::
|
||||||
++ state-5-to-6
|
++ state-6-to-7
|
||||||
|= old=ames-state-5
|
|= old=ames-state-6
|
||||||
^- ^ames-state
|
^- ^ames-state
|
||||||
:* peers=(~(run by peers.old) ship-state-5-to-6)
|
=+ !< =rift
|
||||||
|
q:(need (need (rof ~ %j `beam`[[our %rift %da now] /(scot %p our)])))
|
||||||
|
:* peers=(~(run by peers.old) ship-state-6-to-7)
|
||||||
unix-duct.old
|
unix-duct.old
|
||||||
life.old
|
life.old
|
||||||
|
rift
|
||||||
crypto-core=(nol:nu:crub:crypto sec:ex:crypto-core.old)
|
crypto-core=(nol:nu:crub:crypto sec:ex:crypto-core.old)
|
||||||
bug.old
|
bug.old
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ ship-state-5-to-6
|
++ ship-state-6-to-7
|
||||||
|= old=ship-state-5
|
|= old=ship-state-6
|
||||||
^- ship-state
|
^- ship-state
|
||||||
?: ?=(%alien -.old)
|
?: ?=(%alien -.old)
|
||||||
old(heeds [heeds.old ~])
|
old(heeds [heeds.old ~])
|
||||||
old(heeds [heeds.old *scry-state])
|
old(heeds [heeds.old *scry-state])
|
||||||
::
|
::
|
||||||
|
++ state-5-to-6
|
||||||
|
|= ames-state=ames-state-5
|
||||||
|
^- ames-state-6
|
||||||
|
:_ +.ames-state
|
||||||
|
%- ~(rut by peers.ames-state)
|
||||||
|
|= [=ship ship-state=ship-state-5]
|
||||||
|
^- ship-state-6
|
||||||
|
?. ?=(%known -.ship-state)
|
||||||
|
ship-state
|
||||||
|
=/ peer-state=peer-state-5 +.ship-state
|
||||||
|
=| =rift
|
||||||
|
=/ scry=(unit (unit cage))
|
||||||
|
(rof ~ %j `beam`[[our %rift %da now] /(scot %p ship)])
|
||||||
|
=? rift ?=([~ ~ ^] scry)
|
||||||
|
;;(@ud q.q:u.u.scry)
|
||||||
|
=/ peer-state=peer-state-6
|
||||||
|
:_ +.peer-state
|
||||||
|
=, -.peer-state
|
||||||
|
[symmetric-key life rift public-key sponsor]
|
||||||
|
^- ship-state-6
|
||||||
|
[-.ship-state peer-state]
|
||||||
|
|
||||||
|
::
|
||||||
++ state-4-to-5
|
++ state-4-to-5
|
||||||
|= ames-state=ames-state-5
|
|= ames-state=ames-state-5
|
||||||
^- ames-state-5
|
^- ames-state-5
|
||||||
@ -1311,31 +1411,61 @@
|
|||||||
^+ event-core
|
^+ event-core
|
||||||
:: relay the vane ack to the foreign peer
|
:: relay the vane ack to the foreign peer
|
||||||
::
|
::
|
||||||
=+ ^- [her=ship =bone] (parse-bone-wire wire)
|
?~ parsed=(parse-bone-wire wire)
|
||||||
::
|
:: no-op?
|
||||||
|
::
|
||||||
|
=/ =tape "; ames dropping malformed wire"
|
||||||
|
(emit duct %pass /parse-wire %d %flog %text tape)
|
||||||
|
?> ?=([@ her=ship *] u.parsed)
|
||||||
|
=* her her.u.parsed
|
||||||
=/ =peer-state (got-peer-state her)
|
=/ =peer-state (got-peer-state her)
|
||||||
=/ =channel [[our her] now channel-state -.peer-state]
|
=/ =channel [[our her] now channel-state -.peer-state]
|
||||||
|
|
||||||
=/ peer-core (make-peer-core peer-state channel)
|
=/ peer-core (make-peer-core peer-state channel)
|
||||||
|
|^
|
||||||
|
?- u.parsed
|
||||||
|
[%old *]
|
||||||
|
:: ignore events from old wire
|
||||||
|
::
|
||||||
|
=/ =tape "; ames dropping old wire format"
|
||||||
|
(emit duct %pass /parse-wire %d %flog %text tape)
|
||||||
|
::
|
||||||
|
[%new *]
|
||||||
|
?: (lth rift.u.parsed rift.peer-state)
|
||||||
|
:: ignore events from an old rift
|
||||||
|
::
|
||||||
|
=/ =tape "; ames dropping wire with old rift ({<rift.u.parsed>})"
|
||||||
|
(emit duct %pass /parse-wire %d %flog %text tape)
|
||||||
|
?~ error
|
||||||
|
(send-ack bone.u.parsed)
|
||||||
|
(send-nack bone.u.parsed u.error)
|
||||||
|
==
|
||||||
:: if processing succeded, send positive ack packet and exit
|
:: if processing succeded, send positive ack packet and exit
|
||||||
::
|
::
|
||||||
?~ error
|
++ send-ack
|
||||||
|
|= =bone
|
||||||
|
^+ event-core
|
||||||
abet:(run-message-sink:peer-core bone %done ok=%.y)
|
abet:(run-message-sink:peer-core bone %done ok=%.y)
|
||||||
:: failed; send message nack packet
|
:: failed; send message nack packet
|
||||||
::
|
::
|
||||||
=. event-core abet:(run-message-sink:peer-core bone %done ok=%.n)
|
++ send-nack
|
||||||
=/ =^peer-state (got-peer-state her)
|
|= [=bone =^error]
|
||||||
=/ =^channel [[our her] now channel-state -.peer-state]
|
^+ event-core
|
||||||
:: construct nack-trace message, referencing .failed $message-num
|
=. event-core abet:(run-message-sink:peer-core bone %done ok=%.n)
|
||||||
::
|
=/ =^peer-state (got-peer-state her)
|
||||||
=/ failed=message-num last-acked:(~(got by rcv.peer-state) bone)
|
=/ =^channel [[our her] now channel-state -.peer-state]
|
||||||
=/ =naxplanation [failed u.error]
|
:: construct nack-trace message, referencing .failed $message-num
|
||||||
=/ =message-blob (jam naxplanation)
|
::
|
||||||
:: send nack-trace message on associated .nack-trace-bone
|
=/ failed=message-num last-acked:(~(got by rcv.peer-state) bone)
|
||||||
::
|
=/ =naxplanation [failed error]
|
||||||
=. peer-core (make-peer-core peer-state channel)
|
=/ =message-blob (jam naxplanation)
|
||||||
=/ nack-trace-bone=^bone (mix 0b10 bone)
|
:: send nack-trace message on associated .nack-trace-bone
|
||||||
::
|
::
|
||||||
abet:(run-message-pump:peer-core nack-trace-bone %memo message-blob)
|
=. peer-core (make-peer-core peer-state channel)
|
||||||
|
=/ nack-trace-bone=^bone (mix 0b10 bone)
|
||||||
|
::
|
||||||
|
abet:(run-message-pump:peer-core nack-trace-bone %memo message-blob)
|
||||||
|
--
|
||||||
:: +on-sift: handle request to filter debug output by ship
|
:: +on-sift: handle request to filter debug output by ship
|
||||||
::
|
::
|
||||||
++ on-sift
|
++ on-sift
|
||||||
@ -1596,12 +1726,28 @@
|
|||||||
|= [=wire payload=*]
|
|= [=wire payload=*]
|
||||||
^+ event-core
|
^+ event-core
|
||||||
::
|
::
|
||||||
=+ ^- [her=ship =bone] (parse-bone-wire wire)
|
?~ parsed=(parse-bone-wire wire)
|
||||||
|
=/ =tape "; ames dropping malformed wire"
|
||||||
|
(emit duct %pass /parse-wire %d %flog %text tape)
|
||||||
::
|
::
|
||||||
=/ =peer-state (got-peer-state her)
|
?> ?=([@ her=ship *] u.parsed)
|
||||||
=/ =channel [[our her] now channel-state -.peer-state]
|
=/ =peer-state (got-peer-state her.u.parsed)
|
||||||
|
=/ =channel [[our her.u.parsed] now channel-state -.peer-state]
|
||||||
::
|
::
|
||||||
abet:(on-memo:(make-peer-core peer-state channel) bone payload %boon)
|
?- u.parsed
|
||||||
|
[%old *]
|
||||||
|
=/ =tape "; ames dropping old wire"
|
||||||
|
(emit duct %pass /parse-wire %d %flog %text tape)
|
||||||
|
::
|
||||||
|
[%new *]
|
||||||
|
=, u.parsed
|
||||||
|
?: (lth rift rift.peer-state)
|
||||||
|
:: ignore events from an old rift
|
||||||
|
::
|
||||||
|
=/ =tape "; ames dropping wire with old rift ({<rift>})"
|
||||||
|
(emit duct %pass /parse-wire %d %flog %text tape)
|
||||||
|
abet:(on-memo:(make-peer-core peer-state channel) bone payload %boon)
|
||||||
|
==
|
||||||
:: +on-plea: handle request to send message
|
:: +on-plea: handle request to send message
|
||||||
::
|
::
|
||||||
++ on-plea
|
++ on-plea
|
||||||
@ -1693,7 +1839,8 @@
|
|||||||
::
|
::
|
||||||
?- public-keys-result
|
?- public-keys-result
|
||||||
[%diff @ %rift *]
|
[%diff @ %rift *]
|
||||||
event-core
|
:: event-core
|
||||||
|
(on-publ-rift [who to.diff]:public-keys-result)
|
||||||
::
|
::
|
||||||
[%diff @ %keys *]
|
[%diff @ %keys *]
|
||||||
(on-publ-rekey [who to.diff]:public-keys-result)
|
(on-publ-rekey [who to.diff]:public-keys-result)
|
||||||
@ -1808,10 +1955,12 @@
|
|||||||
?~ sponsor
|
?~ sponsor
|
||||||
~| %ames-lost-sponsor^our^ship !!
|
~| %ames-lost-sponsor^our^ship !!
|
||||||
::
|
::
|
||||||
=/ =peer-state (got-peer-state ship)
|
=/ state=(unit peer-state) (get-peer-state ship)
|
||||||
=. sponsor.peer-state u.sponsor
|
?~ state
|
||||||
::
|
%- (slog leaf+"ames: missing peer-state, ignoring" ~)
|
||||||
=. peers.ames-state (~(put by peers.ames-state) ship %known peer-state)
|
event-core
|
||||||
|
=. sponsor.u.state u.sponsor
|
||||||
|
=. peers.ames-state (~(put by peers.ames-state) ship %known u.state)
|
||||||
event-core
|
event-core
|
||||||
:: +on-publ-full: handle new pki data for peer(s)
|
:: +on-publ-full: handle new pki data for peer(s)
|
||||||
::
|
::
|
||||||
@ -1873,6 +2022,24 @@
|
|||||||
::
|
::
|
||||||
event-core(duct original-duct)
|
event-core(duct original-duct)
|
||||||
--
|
--
|
||||||
|
:: on-publ-rift: XX
|
||||||
|
::
|
||||||
|
++ on-publ-rift
|
||||||
|
|= [=ship =rift]
|
||||||
|
^+ event-core
|
||||||
|
?~ ship-state=(~(get by peers.ames-state) ship)
|
||||||
|
:: print error here? %rift was probably called before %keys
|
||||||
|
::
|
||||||
|
~> %slog.1^leaf/"ames: missing peer-state on-publ-rift"
|
||||||
|
event-core
|
||||||
|
?: ?=([%alien *] u.ship-state)
|
||||||
|
:: ignore aliens
|
||||||
|
::
|
||||||
|
event-core
|
||||||
|
=/ =peer-state +.u.ship-state
|
||||||
|
=. rift.peer-state rift
|
||||||
|
=. peers.ames-state (~(put by peers.ames-state) ship %known peer-state)
|
||||||
|
event-core
|
||||||
::
|
::
|
||||||
++ insert-peer-state
|
++ insert-peer-state
|
||||||
|= [=ship =point]
|
|= [=ship =point]
|
||||||
@ -1921,7 +2088,6 @@
|
|||||||
(rof ~ %j `beam`[[our %turf %da now] /])
|
(rof ~ %j `beam`[[our %turf %da now] /])
|
||||||
::
|
::
|
||||||
(emit unix-duct.ames-state %give %turf turfs)
|
(emit unix-duct.ames-state %give %turf turfs)
|
||||||
:: +on-trim: handle request to free memory
|
|
||||||
:: +on-vega: handle kernel reload
|
:: +on-vega: handle kernel reload
|
||||||
:: +on-trim: handle request to free memory
|
:: +on-trim: handle request to free memory
|
||||||
::
|
::
|
||||||
@ -2505,7 +2671,7 @@
|
|||||||
::
|
::
|
||||||
=+ ;; =plea message
|
=+ ;; =plea message
|
||||||
::
|
::
|
||||||
=/ =wire (make-bone-wire her.channel bone)
|
=/ =wire (make-bone-wire her.channel her-rift.channel bone)
|
||||||
::
|
::
|
||||||
?+ vane.plea ~| %ames-evil-vane^our^her.channel^vane.plea !!
|
?+ vane.plea ~| %ames-evil-vane^our^her.channel^vane.plea !!
|
||||||
%a (emit duct %pass wire %a %plea her.channel plea)
|
%a (emit duct %pass wire %a %plea her.channel plea)
|
||||||
@ -3212,6 +3378,8 @@
|
|||||||
++ on-done
|
++ on-done
|
||||||
|= [=message-num =ack]
|
|= [=message-num =ack]
|
||||||
^+ message-pump
|
^+ message-pump
|
||||||
|
~? (gte message-num next.state)
|
||||||
|
"unsent message from the future"^[message-num next.state current.state]
|
||||||
:: unsent messages from the future should never get acked
|
:: unsent messages from the future should never get acked
|
||||||
::
|
::
|
||||||
?> (lth message-num next.state)
|
?> (lth message-num next.state)
|
||||||
|
@ -427,6 +427,13 @@
|
|||||||
%- curd =< abet
|
%- curd =< abet
|
||||||
(private-keys:~(feel su hen now pki etn) life.tac ring.tac)
|
(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
|
:: register moon keys
|
||||||
::
|
::
|
||||||
%moon
|
%moon
|
||||||
@ -733,14 +740,18 @@
|
|||||||
=/ a-point=point (~(gut by pos.zim.pki) ship.i.udiffs *point)
|
=/ 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)
|
=/ a-diff=(unit diff:point) (udiff-to-diff:point udiff.i.udiffs a-point)
|
||||||
=? this-su ?=(^ a-diff)
|
=? this-su ?=(^ a-diff)
|
||||||
:: if this about our keys, and we already know these, start using them
|
=? this-su
|
||||||
::
|
|
||||||
=? lyf.own
|
|
||||||
?& =(our ship.i.udiffs)
|
?& =(our ship.i.udiffs)
|
||||||
?=(%keys -.u.a-diff)
|
?=(%keys -.u.a-diff)
|
||||||
(~(has by jaw.own) life.to.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)
|
(public-keys:feel original-pos %diff ship.i.udiffs u.a-diff)
|
||||||
$(udiffs t.udiffs)
|
$(udiffs t.udiffs)
|
||||||
::
|
::
|
||||||
|
222
pkg/arvo/sys/vane/khan.hoon
Normal file
222
pkg/arvo/sys/vane/khan.hoon
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
:: %khan, thread runner
|
||||||
|
::
|
||||||
|
:: this vane presents a command/response interface for running
|
||||||
|
:: threads. two modes are supported: %fard for intra-arvo
|
||||||
|
:: requests (i.e. within the same kernel space) and %fyrd for
|
||||||
|
:: external requests (e.g. from the unix control plane.)
|
||||||
|
::
|
||||||
|
:: both modes take a thread start request consisting of a
|
||||||
|
:: namespace, thread name, and input data; they respond over the
|
||||||
|
:: same duct with either success or failure. %fard takes its
|
||||||
|
:: input arguments as a cage and produces %arow, which contains
|
||||||
|
:: a cage on success (or tang on failure). %fyrd takes an output
|
||||||
|
:: mark and input page; it produces %avow, which contains a page
|
||||||
|
:: on success.
|
||||||
|
::
|
||||||
|
:: threads currently expect input and produce output as vase,
|
||||||
|
:: not cage. %fard/%arow use cage instead since this is the
|
||||||
|
:: eventual desired thread API; however, the input mark is
|
||||||
|
:: currently ignored, and the output mark is always %noun. (for
|
||||||
|
:: forward compatibility, it is safe to specify %noun as the
|
||||||
|
:: input mark.)
|
||||||
|
::
|
||||||
|
:: %fyrd does mark conversion on both ends, and additionally
|
||||||
|
:: lifts its input into a $unit. this second step is done
|
||||||
|
:: because threads conventionally take their input as a unit,
|
||||||
|
:: with ~ for the case of "no arguments".
|
||||||
|
::
|
||||||
|
:: n.b. the current convention for threads is to use !< to
|
||||||
|
:: unpack their input vase. !< imposes the requirement that the
|
||||||
|
:: input type nests within the specified type. this limits %fyrd
|
||||||
|
:: to threads with inputs for which a named mark exists; it is
|
||||||
|
:: impossible to use %noun in general since it does not nest.
|
||||||
|
:: threads written against the current vase-based API could use
|
||||||
|
:: ;; instead of !< to unpack their input, thus allowing the
|
||||||
|
:: use of %fyrd with %noun. however the eventual solution is
|
||||||
|
:: probably to make threads consume and produce cages, and do
|
||||||
|
:: mark conversion where appropriate.
|
||||||
|
!:
|
||||||
|
!? 164
|
||||||
|
::
|
||||||
|
=, khan
|
||||||
|
|= our=ship
|
||||||
|
=> |% :: %khan types
|
||||||
|
+$ move [p=duct q=(wite note gift)] ::
|
||||||
|
+$ note :: out request $->
|
||||||
|
$~ [%g %deal *sock *term *deal:gall] ::
|
||||||
|
$% $: %g :: to %gall
|
||||||
|
$>(%deal task:gall) :: full transmission
|
||||||
|
== ::
|
||||||
|
$: %k :: to self
|
||||||
|
$>(%fard task) :: internal thread
|
||||||
|
== == ::
|
||||||
|
+$ sign :: in response $<-
|
||||||
|
$% $: %gall :: from %gall
|
||||||
|
$>(%unto gift:gall) :: update
|
||||||
|
== ::
|
||||||
|
$: %khan :: from self
|
||||||
|
$>(?(%arow %avow) gift) :: thread result
|
||||||
|
== == ::
|
||||||
|
+$ khan-state ::
|
||||||
|
$: %0 :: state v0
|
||||||
|
hey=duct :: unix duct
|
||||||
|
tic=@ud :: tid counter
|
||||||
|
== ::
|
||||||
|
-- ::
|
||||||
|
=>
|
||||||
|
|%
|
||||||
|
++ get-beak
|
||||||
|
|= [=bear now=@da]
|
||||||
|
?@(bear [our bear %da now] bear)
|
||||||
|
::
|
||||||
|
++ get-dais
|
||||||
|
|= [=beak =mark rof=roof]
|
||||||
|
^- dais:clay
|
||||||
|
?~ ret=(rof ~ %cb beak /[mark])
|
||||||
|
~|(mark-unknown+mark !!)
|
||||||
|
?~ u.ret
|
||||||
|
~|(mark-invalid+mark !!)
|
||||||
|
?> =(%dais p.u.u.ret)
|
||||||
|
!<(dais:clay q.u.u.ret)
|
||||||
|
::
|
||||||
|
++ get-tube
|
||||||
|
|= [=beak =mark =out=mark rof=roof]
|
||||||
|
^- tube:clay
|
||||||
|
?~ ret=(rof ~ %cc beak /[mark]/[out-mark])
|
||||||
|
~|(tube-unknown+[mark out-mark] !!)
|
||||||
|
?~ u.ret
|
||||||
|
~|(tube-invalid+[mark out-mark] !!)
|
||||||
|
?> =(%tube p.u.u.ret)
|
||||||
|
!<(tube:clay q.u.u.ret)
|
||||||
|
::
|
||||||
|
++ make-wire
|
||||||
|
|= [=beak =mark]
|
||||||
|
^- wire
|
||||||
|
[%fyrd (en-beam beak mark ~)]
|
||||||
|
::
|
||||||
|
++ read-wire
|
||||||
|
|= =wire
|
||||||
|
^- (pair beak mark)
|
||||||
|
~| khan-read-wire+wire
|
||||||
|
?> ?=([%fyrd ^] wire)
|
||||||
|
=/ =beam (need (de-beam t.wire))
|
||||||
|
?>(?=([@ ~] s.beam) beam(s i.s.beam))
|
||||||
|
::
|
||||||
|
++ start-spider
|
||||||
|
|= =vase
|
||||||
|
^- note
|
||||||
|
[%g %deal [our our] %spider %poke %spider-start vase]
|
||||||
|
::
|
||||||
|
++ watch-spider
|
||||||
|
|= =path
|
||||||
|
^- note
|
||||||
|
[%g %deal [our our] %spider %watch path]
|
||||||
|
--
|
||||||
|
=| khan-state
|
||||||
|
=* state -
|
||||||
|
|= [now=@da eny=@uvJ rof=roof]
|
||||||
|
=* khan-gate .
|
||||||
|
^?
|
||||||
|
|%
|
||||||
|
:: +call: handle a +task request
|
||||||
|
::
|
||||||
|
++ call
|
||||||
|
|= $: hen=duct
|
||||||
|
dud=(unit goof)
|
||||||
|
wrapped-task=(hobo task)
|
||||||
|
==
|
||||||
|
^- [(list move) _khan-gate]
|
||||||
|
::
|
||||||
|
=/ =task ((harden task) wrapped-task)
|
||||||
|
?^ dud
|
||||||
|
~|(%khan-call-dud (mean tang.u.dud))
|
||||||
|
?+ -.task [~ khan-gate]
|
||||||
|
%born
|
||||||
|
[~ khan-gate(hey hen, tic 0)]
|
||||||
|
::
|
||||||
|
%fard
|
||||||
|
=/ tid=@ta
|
||||||
|
%^ cat 3
|
||||||
|
'khan-fyrd--'
|
||||||
|
(scot %uv (sham (mix tic eny)))
|
||||||
|
=. tic +(tic)
|
||||||
|
=* fyd p.task
|
||||||
|
=/ =beak (get-beak bear.fyd now)
|
||||||
|
=/ args [~ `tid beak name.fyd q.args.fyd]
|
||||||
|
:_ khan-gate
|
||||||
|
%+ turn
|
||||||
|
:~ (watch-spider /thread-result/[tid])
|
||||||
|
(start-spider !>(args))
|
||||||
|
==
|
||||||
|
|=(=note ^-(move [hen %pass //g note]))
|
||||||
|
::
|
||||||
|
%fyrd
|
||||||
|
=* fyd p.task
|
||||||
|
=/ =beak (get-beak bear.fyd now)
|
||||||
|
=/ =wire (make-wire beak p.args.fyd)
|
||||||
|
=/ =dais:clay
|
||||||
|
(get-dais beak p.q.args.fyd rof)
|
||||||
|
=/ =vase
|
||||||
|
(slap (vale.dais q.q.args.fyd) !,(*hoon [~ u=.]))
|
||||||
|
=- [[hen %pass wire -]~ khan-gate]
|
||||||
|
[%k %fard bear.fyd name.fyd p.q.args.fyd vase]
|
||||||
|
==
|
||||||
|
:: +load: migrate an old state to a new khan version
|
||||||
|
::
|
||||||
|
++ load
|
||||||
|
|= old=khan-state
|
||||||
|
^+ khan-gate
|
||||||
|
khan-gate(state old)
|
||||||
|
:: +scry: nothing to see as yet
|
||||||
|
::
|
||||||
|
++ scry
|
||||||
|
^- roon
|
||||||
|
|= [lyc=gang car=term bem=beam]
|
||||||
|
^- (unit (unit cage))
|
||||||
|
~
|
||||||
|
++ stay state
|
||||||
|
:: +take: handle responses.
|
||||||
|
::
|
||||||
|
++ take
|
||||||
|
|= [tea=wire hen=duct dud=(unit goof) hin=sign]
|
||||||
|
^- [(list move) _khan-gate]
|
||||||
|
?^ dud
|
||||||
|
~|(%khan-take-dud (mean tang.u.dud))
|
||||||
|
:_ khan-gate
|
||||||
|
?- -.hin
|
||||||
|
%gall
|
||||||
|
?+ -.p.hin ~
|
||||||
|
?(%poke-ack %watch-ack)
|
||||||
|
?~ p.p.hin ~
|
||||||
|
%- (slog 'khan-ack' u.p.p.hin)
|
||||||
|
[hen %give %arow %| -.p.hin u.p.p.hin]~
|
||||||
|
::
|
||||||
|
%fact
|
||||||
|
=* cag cage.p.hin
|
||||||
|
?+ p.cag ~&(bad-fact+p.cag !!)
|
||||||
|
%thread-fail
|
||||||
|
=/ =tang !<(tang q.cag)
|
||||||
|
%- (slog 'khan-fact' tang)
|
||||||
|
[hen %give %arow %| p.cag tang]~
|
||||||
|
::
|
||||||
|
%thread-done
|
||||||
|
[hen %give %arow %& %noun q.cag]~
|
||||||
|
==
|
||||||
|
==
|
||||||
|
::
|
||||||
|
%khan
|
||||||
|
?. ?=(%arow +<.hin) ~
|
||||||
|
?~ tea ~
|
||||||
|
?. ?=(%fyrd -.tea) ~
|
||||||
|
=* row p.hin
|
||||||
|
?. ?=(%& -.row)
|
||||||
|
[hen %give %avow row]~
|
||||||
|
=/ [=beak =mark]
|
||||||
|
(read-wire tea)
|
||||||
|
=/ =tube:clay
|
||||||
|
(get-tube beak p.p.row mark rof)
|
||||||
|
=/ =vase
|
||||||
|
(tube q.p.row)
|
||||||
|
[hen %give %avow %& mark q.vase]~
|
||||||
|
==
|
||||||
|
--
|
@ -2245,6 +2245,112 @@
|
|||||||
=/ pub (from.j qj)
|
=/ pub (from.j qj)
|
||||||
?< =([0 0] pub)
|
?< =([0 0] pub)
|
||||||
pub
|
pub
|
||||||
|
++ schnorr
|
||||||
|
~% %schnorr ..schnorr ~
|
||||||
|
=> |%
|
||||||
|
++ tagged-hash
|
||||||
|
|= [tag=@ [l=@ x=@]]
|
||||||
|
=+ hat=(sha-256:sha (swp 3 tag))
|
||||||
|
%- sha-256l:sha
|
||||||
|
:- (add 64 l)
|
||||||
|
(can 3 ~[[l x] [32 hat] [32 hat]])
|
||||||
|
++ lift-x
|
||||||
|
|= x=@I
|
||||||
|
^- (unit point)
|
||||||
|
=/ c curve
|
||||||
|
?. (lth x p.domain.c)
|
||||||
|
~
|
||||||
|
=/ fop field-p.c
|
||||||
|
=+ [fadd fpow]=[sum.fop exp.fop]
|
||||||
|
=/ cp (fadd (fpow 3 x) 7)
|
||||||
|
=/ y (fpow (rsh [0 2] +(p.domain.c)) cp)
|
||||||
|
?. =(cp (fpow 2 y))
|
||||||
|
~
|
||||||
|
%- some :- x
|
||||||
|
?: =(0 (mod y 2))
|
||||||
|
y
|
||||||
|
(sub p.domain.c y)
|
||||||
|
--
|
||||||
|
|%
|
||||||
|
::
|
||||||
|
++ sign :: schnorr signature
|
||||||
|
~/ %sosi
|
||||||
|
|= [sk=@I m=@I a=@I]
|
||||||
|
^- @J
|
||||||
|
?> (gte 32 (met 3 m))
|
||||||
|
?> (gte 32 (met 3 a))
|
||||||
|
=/ c curve
|
||||||
|
:: implies (gte 32 (met 3 sk))
|
||||||
|
::
|
||||||
|
?< |(=(0 sk) (gte sk n.domain.c))
|
||||||
|
=/ pp
|
||||||
|
(mul-point-scalar g.domain.c sk)
|
||||||
|
=/ d
|
||||||
|
?: =(0 (mod y.pp 2))
|
||||||
|
sk
|
||||||
|
(sub n.domain.c sk)
|
||||||
|
=/ t
|
||||||
|
%+ mix d
|
||||||
|
(tagged-hash 'BIP0340/aux' [32 a])
|
||||||
|
=/ rand
|
||||||
|
%+ tagged-hash 'BIP0340/nonce'
|
||||||
|
:- 96
|
||||||
|
(rep 8 ~[m x.pp t])
|
||||||
|
=/ kp (mod rand n.domain.c)
|
||||||
|
?< =(0 kp)
|
||||||
|
=/ rr (mul-point-scalar g.domain.c kp)
|
||||||
|
=/ k
|
||||||
|
?: =(0 (mod y.rr 2))
|
||||||
|
kp
|
||||||
|
(sub n.domain.c kp)
|
||||||
|
=/ e
|
||||||
|
%- mod
|
||||||
|
:_ n.domain.c
|
||||||
|
%+ tagged-hash 'BIP0340/challenge'
|
||||||
|
:- 96
|
||||||
|
(rep 8 ~[m x.pp x.rr])
|
||||||
|
=/ sig
|
||||||
|
%^ cat 8
|
||||||
|
(mod (add k (mul e d)) n.domain.c)
|
||||||
|
x.rr
|
||||||
|
?> (verify x.pp m sig)
|
||||||
|
sig
|
||||||
|
::
|
||||||
|
++ verify :: schnorr verify
|
||||||
|
~/ %sove
|
||||||
|
|= [pk=@I m=@I sig=@J]
|
||||||
|
^- ?
|
||||||
|
?> (gte 32 (met 3 pk))
|
||||||
|
?> (gte 32 (met 3 m))
|
||||||
|
?> (gte 64 (met 3 sig))
|
||||||
|
=/ c curve
|
||||||
|
=/ pup (lift-x pk)
|
||||||
|
?~ pup
|
||||||
|
%.n
|
||||||
|
=/ pp u.pup
|
||||||
|
=/ r (cut 8 [1 1] sig)
|
||||||
|
?: (gte r p.domain.c)
|
||||||
|
%.n
|
||||||
|
=/ s (end 8 sig)
|
||||||
|
?: (gte s n.domain.c)
|
||||||
|
%.n
|
||||||
|
=/ e
|
||||||
|
%- mod
|
||||||
|
:_ n.domain.c
|
||||||
|
%+ tagged-hash 'BIP0340/challenge'
|
||||||
|
:- 96
|
||||||
|
(rep 8 ~[m x.pp r])
|
||||||
|
=/ aa
|
||||||
|
(mul-point-scalar g.domain.c s)
|
||||||
|
=/ bb
|
||||||
|
(mul-point-scalar pp (sub n.domain.c e))
|
||||||
|
?: &(=(x.aa x.bb) !=(y.aa y.bb)) :: infinite?
|
||||||
|
%.n
|
||||||
|
=/ rr (add-points aa bb)
|
||||||
|
?. =(0 (mod y.rr 2))
|
||||||
|
%.n
|
||||||
|
=(r x.rr)
|
||||||
|
--
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
::
|
::
|
||||||
|
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]
|
|= [pup=watchpup =latest=number:block]
|
||||||
=/ m (strand:strandio ,watchpup)
|
=/ m (strand:strandio ,watchpup)
|
||||||
^- form:m
|
^- form:m
|
||||||
=/ zoom-margin=number:block 0 :: TODO: 30!
|
=/ zoom-margin=number:block 30
|
||||||
=/ zoom-step=number:block 100.000
|
=/ zoom-step=number:block 100.000
|
||||||
?: (lth latest-number (add number.pup zoom-margin))
|
?: (lth latest-number (add number.pup zoom-margin))
|
||||||
(pure:m pup)
|
(pure:m pup)
|
||||||
=/ up-to-number=number:block
|
=/ up-to-number=number:block
|
||||||
|
@ -9,32 +9,40 @@
|
|||||||
=/ m (strand:strandio ,vase)
|
=/ m (strand:strandio ,vase)
|
||||||
|^
|
|^
|
||||||
^- form:m
|
^- form:m
|
||||||
:: =* not-sent (pure:m !>(%.n^next-gas-price))
|
|
||||||
::
|
::
|
||||||
=/ =address:ethereum (address-from-prv:key:ethereum pk)
|
=/ =address:ethereum (address-from-prv:key:ethereum pk)
|
||||||
;< expected-nonce=@ud bind:m
|
;< expected-nonce=@ud bind:m
|
||||||
(get-next-nonce:ethio endpoint address)
|
(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
|
=/ batch-data=octs
|
||||||
%+ cad:naive 3
|
%+ cad:naive 3
|
||||||
%- flop
|
%- flop
|
||||||
%+ roll txs
|
%+ roll txs
|
||||||
|= [=raw-tx:naive out=(list octs)]
|
|= [=raw-tx:naive out=(list octs)]
|
||||||
[raw.raw-tx 65^sig.raw-tx out]
|
[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)
|
?~ (parse-roll:naive q.batch-data)
|
||||||
(pure:m !>(%.n^[%not-sent %batch-parse-error]))
|
(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
|
:: each l2 signature is 65 bytes + XX bytes for the raw data
|
||||||
:: from the ethereum yellow paper:
|
:: from the ethereum yellow paper:
|
||||||
@ -72,7 +80,8 @@
|
|||||||
:: log batch tx-hash to getTransactionReceipt(tx-hash)
|
:: log batch tx-hash to getTransactionReceipt(tx-hash)
|
||||||
::
|
::
|
||||||
~? &(?=(%result -.response) ?=(%s -.res.response))
|
~? &(?=(%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
|
%- pure:m
|
||||||
!> ^- (each @ud [term @t])
|
!> ^- (each @ud [term @t])
|
||||||
:: TODO: capture if the tx fails (e.g. Runtime Error: revert)
|
:: TODO: capture if the tx fails (e.g. Runtime Error: revert)
|
||||||
@ -101,10 +110,13 @@
|
|||||||
;< rep=(unit client-response:iris) bind:m
|
;< rep=(unit client-response:iris) bind:m
|
||||||
take-maybe-response:strandio
|
take-maybe-response:strandio
|
||||||
=* fallback
|
=* fallback
|
||||||
~& %fallback-gas-price
|
~& >> %fallback-gas-price
|
||||||
(pure:m 10.000.000.000)
|
(pure:m fallback-gas-price)
|
||||||
?. ?& ?=([~ %finished *] rep)
|
?. ?& ?=([~ %finished *] rep)
|
||||||
?=(^ full-file.u.rep)
|
?=(^ full-file.u.rep)
|
||||||
|
:: get suggested price only for mainnet txs
|
||||||
|
::
|
||||||
|
=(chain-id 1)
|
||||||
==
|
==
|
||||||
fallback
|
fallback
|
||||||
?~ jon=(de-json:html q.data.u.full-file.u.rep)
|
?~ 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
|
(mul 1.000.000.000 u.res) ::NOTE gwei to wei
|
||||||
%. u.jon
|
%. u.jon
|
||||||
=, dejs-soft:format
|
=, dejs-soft:format
|
||||||
(ot 'result'^(ot 'FastGasPrice'^ni ~) ~)
|
(ot 'result'^(ot 'FastGasPrice'^(su dem) ~) ~)
|
||||||
::
|
::
|
||||||
++ send-batch
|
++ send-batch
|
||||||
|= [endpoint=@ta batch=@ux]
|
|= [endpoint=@ta batch=@ux]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/+ *test
|
/+ *test
|
||||||
/= ames /sys/vane/ames
|
/= ames /sys/vane/ames
|
||||||
|
/= jael /sys/vane/jael
|
||||||
:: construct some test fixtures
|
:: construct some test fixtures
|
||||||
::
|
::
|
||||||
=/ nec ^$:((ames ~nec))
|
=/ nec ^$:((ames ~nec))
|
||||||
@ -44,6 +45,7 @@
|
|||||||
=. -.peer-state
|
=. -.peer-state
|
||||||
:* symmetric-key=bud-sym
|
:* symmetric-key=bud-sym
|
||||||
life=3
|
life=3
|
||||||
|
rift=0
|
||||||
public-key=bud-pub
|
public-key=bud-pub
|
||||||
sponsor=~nec
|
sponsor=~nec
|
||||||
==
|
==
|
||||||
@ -56,6 +58,7 @@
|
|||||||
=. -.peer-state
|
=. -.peer-state
|
||||||
:* symmetric-key=nec-sym
|
:* symmetric-key=nec-sym
|
||||||
life=2
|
life=2
|
||||||
|
rift=0
|
||||||
public-key=nec-pub
|
public-key=nec-pub
|
||||||
sponsor=~nec
|
sponsor=~nec
|
||||||
==
|
==
|
||||||
@ -200,7 +203,7 @@
|
|||||||
=^ moves1 bud (call bud ~[//unix] %hear lane-foo blob)
|
=^ moves1 bud (call bud ~[//unix] %hear lane-foo blob)
|
||||||
=^ moves2 bud
|
=^ moves2 bud
|
||||||
=/ =point:ames
|
=/ =point:ames
|
||||||
:* rift=1
|
:* rift=0
|
||||||
life=4
|
life=4
|
||||||
keys=[[life=4 [crypto-suite=1 `@`nec-pub]] ~ ~]
|
keys=[[life=4 [crypto-suite=1 `@`nec-pub]] ~ ~]
|
||||||
sponsor=`~bus
|
sponsor=`~bus
|
||||||
@ -218,7 +221,7 @@
|
|||||||
::
|
::
|
||||||
%+ expect-eq
|
%+ expect-eq
|
||||||
!> %- sy
|
!> %- sy
|
||||||
:~ :^ ~[//unix] %pass /bone/~bus/1
|
:~ :^ ~[//unix] %pass /bone/~bus/0/1
|
||||||
[%g %plea ~bus %g /talk [%first %post]]
|
[%g %plea ~bus %g /talk [%first %post]]
|
||||||
::
|
::
|
||||||
:^ ~[//unix] %pass /qos
|
:^ ~[//unix] %pass /qos
|
||||||
@ -272,7 +275,7 @@
|
|||||||
!> :~ :* ~[//unix] %pass /qos %d %flog %text
|
!> :~ :* ~[//unix] %pass /qos %d %flog %text
|
||||||
"; {<our.comet>} is your neighbor"
|
"; {<our.comet>} is your neighbor"
|
||||||
==
|
==
|
||||||
:* ~[//unix] %pass /bone/(scot %p our.comet)/1
|
:* ~[//unix] %pass /bone/(scot %p our.comet)/0/1
|
||||||
%g %plea our.comet plea
|
%g %plea our.comet plea
|
||||||
== ==
|
== ==
|
||||||
!> moves1
|
!> moves1
|
||||||
@ -285,11 +288,11 @@
|
|||||||
=^ moves2 bud (call bud ~[//unix] %hear (snag-packet 0 moves1))
|
=^ moves2 bud (call bud ~[//unix] %hear (snag-packet 0 moves1))
|
||||||
:: ~bud -> %done -> ~nec
|
:: ~bud -> %done -> ~nec
|
||||||
::
|
::
|
||||||
=^ moves3 bud (take bud /bone/~nec/1 ~[//unix] %g %done ~)
|
=^ moves3 bud (take bud /bone/~nec/0/1 ~[//unix] %g %done ~)
|
||||||
=^ moves4 nec (call nec ~[//unix] %hear (snag-packet 0 moves3))
|
=^ moves4 nec (call nec ~[//unix] %hear (snag-packet 0 moves3))
|
||||||
:: ~bud -> %boon -> ~nec
|
:: ~bud -> %boon -> ~nec
|
||||||
::
|
::
|
||||||
=^ moves5 bud (take bud /bone/~nec/1 ~[//unix] %g %boon [%post 'first1!!'])
|
=^ moves5 bud (take bud /bone/~nec/0/1 ~[//unix] %g %boon [%post 'first1!!'])
|
||||||
=^ moves6 nec (call nec ~[//unix] %hear (snag-packet 0 moves5))
|
=^ moves6 nec (call nec ~[//unix] %hear (snag-packet 0 moves5))
|
||||||
:: ~nec -> %done -> ~bud (just make sure ~bud doesn't crash on ack)
|
:: ~nec -> %done -> ~bud (just make sure ~bud doesn't crash on ack)
|
||||||
::
|
::
|
||||||
@ -298,7 +301,7 @@
|
|||||||
;: weld
|
;: weld
|
||||||
%+ expect-eq
|
%+ expect-eq
|
||||||
!> :~ [~[//unix] %pass /qos %d %flog %text "; ~nec is your neighbor"]
|
!> :~ [~[//unix] %pass /qos %d %flog %text "; ~nec is your neighbor"]
|
||||||
[~[//unix] %pass /bone/~nec/1 %g %plea ~nec %g /talk [%get %post]]
|
[~[//unix] %pass /bone/~nec/0/1 %g %plea ~nec %g /talk [%get %post]]
|
||||||
==
|
==
|
||||||
!> moves2
|
!> moves2
|
||||||
::
|
::
|
||||||
@ -323,7 +326,7 @@
|
|||||||
:: ~bud -> nack -> ~nec
|
:: ~bud -> nack -> ~nec
|
||||||
::
|
::
|
||||||
=/ =error:ames [%flub [%leaf "sinusoidal repleneration"]~]
|
=/ =error:ames [%flub [%leaf "sinusoidal repleneration"]~]
|
||||||
=^ moves3 bud (take bud /bone/~nec/1 ~[/bud] %g %done `error)
|
=^ moves3 bud (take bud /bone/~nec/0/1 ~[/bud] %g %done `error)
|
||||||
=^ moves4 nec (call nec ~[//unix] %hear (snag-packet 0 moves3))
|
=^ moves4 nec (call nec ~[//unix] %hear (snag-packet 0 moves3))
|
||||||
:: ~bud -> nack-trace -> ~nec
|
:: ~bud -> nack-trace -> ~nec
|
||||||
::
|
::
|
||||||
@ -399,5 +402,87 @@
|
|||||||
|= [fra=@ud sig=@ siz=@ud byts]
|
|= [fra=@ud sig=@ siz=@ud byts]
|
||||||
%+ expect-eq !>(%.y)
|
%+ expect-eq !>(%.y)
|
||||||
!>((veri-fra:keys:fine:event-core ~bud life.ames-state.bud want fra dat sig))
|
!>((veri-fra:keys:fine:event-core ~bud life.ames-state.bud want fra dat sig))
|
||||||
|
::
|
||||||
|
++ test-old-ames-wire ^- tang
|
||||||
|
=^ moves1 bud (take bud /bone/~nec/1 ~[//unix] %g %done ~)
|
||||||
|
%+ expect-eq
|
||||||
|
!> %- sy
|
||||||
|
:_ ~
|
||||||
|
[~[//unix] %pass /parse-wire %d %flog %text "; ames dropping old wire format"]
|
||||||
|
!> (sy ,.moves1)
|
||||||
|
:: ::
|
||||||
|
++ test-dangling-bone ^- tang
|
||||||
|
:: ~nec -> %plea -> ~bud
|
||||||
|
::
|
||||||
|
=^ moves1 nec (call nec ~[/g/talk] %plea ~bud %g /talk [%get %post])
|
||||||
|
=^ moves2 bud (call bud ~[//unix] %hear (snag-packet 0 moves1))
|
||||||
|
:: ~bud receives a gift from %jael with ~nec's new rift
|
||||||
|
::
|
||||||
|
=^ moves3 bud
|
||||||
|
%- take
|
||||||
|
:^ bud /public-keys ~[//unix]
|
||||||
|
^- sign:ames
|
||||||
|
[%jael %public-keys %diff who=~nec %rift from=0 to=1]
|
||||||
|
:: %gall has a pending wire with the old rift, so sending a gift to
|
||||||
|
:: %ames on it will drop that request, and print a message to the user
|
||||||
|
::
|
||||||
|
=^ moves3 bud (take bud /bone/~nec/0/1 ~[//unix] %g %done ~)
|
||||||
|
::
|
||||||
|
%+ expect-eq
|
||||||
|
!> %- sy
|
||||||
|
:_ ~
|
||||||
|
:* ~[//unix]
|
||||||
|
%pass
|
||||||
|
/parse-wire
|
||||||
|
%d
|
||||||
|
%flog
|
||||||
|
%text
|
||||||
|
"; ames dropping wire with old rift (0)"
|
||||||
|
==
|
||||||
|
!> (sy ,.moves3)
|
||||||
|
::
|
||||||
|
++ test-ames-flow-with-new-rift ^- tang
|
||||||
|
:: ~bunecd receives a gift from %jael with ~bud's new rift
|
||||||
|
::
|
||||||
|
=^ moves1 nec
|
||||||
|
%- take
|
||||||
|
:^ nec /public-keys ~[//unix]
|
||||||
|
^- sign:ames
|
||||||
|
[%jael %public-keys %diff who=~bud %rift from=0 to=1]
|
||||||
|
:: now we try a normal message flow using the new rift in the wire
|
||||||
|
:: ~nec -> %plea -> ~bud
|
||||||
|
::
|
||||||
|
=^ moves2 nec (call nec ~[/g/talk] %plea ~bud %g /talk [%get %post])
|
||||||
|
=^ moves3 bud (call bud ~[//unix] %hear (snag-packet 0 moves2))
|
||||||
|
:: ~bud -> %done -> ~nec
|
||||||
|
::
|
||||||
|
=^ moves4 bud (take bud /bone/~nec/1/1 ~[//unix] %g %done ~)
|
||||||
|
=^ moves5 nec (call nec ~[//unix] %hear (snag-packet 0 moves4))
|
||||||
|
:: ~bud -> %boon -> ~nec
|
||||||
|
::
|
||||||
|
=^ moves6 bud (take bud /bone/~nec/1/1 ~[//unix] %g %boon [%post '¡hola!'])
|
||||||
|
=^ moves7 nec (call nec ~[//unix] %hear (snag-packet 0 moves6))
|
||||||
|
:: ~nec -> %done -> ~bud (just make sure ~bud doesn't crash on ack)
|
||||||
|
::
|
||||||
|
=^ moves8 bud (call bud ~[//unix] %hear (snag-packet 0 moves7))
|
||||||
|
::
|
||||||
|
;: weld
|
||||||
|
%+ expect-eq
|
||||||
|
!> :~ [~[//unix] %pass /qos %d %flog %text "; ~nec is your neighbor"]
|
||||||
|
[~[//unix] %pass /bone/~nec/0/1 %g %plea ~nec %g /talk [%get %post]]
|
||||||
|
==
|
||||||
|
!> moves3
|
||||||
|
::
|
||||||
|
%+ expect-eq
|
||||||
|
!> %- sy
|
||||||
|
:~ [~[/ames] %pass /pump/~bud/0 %b %rest ~1111.1.1..00.00.03]
|
||||||
|
[~[//unix] %pass /qos %d %flog %text "; ~bud is your neighbor"]
|
||||||
|
[~[/g/talk] %give %done error=~]
|
||||||
|
==
|
||||||
|
!> (sy ,.moves5)
|
||||||
|
::
|
||||||
|
%+ expect-eq
|
||||||
|
!> [~[/g/talk] %give %boon [%post '¡hola!']]
|
||||||
|
!> (snag 0 `(list move:ames)`moves7)
|
||||||
|
==
|
||||||
--
|
--
|
||||||
|
476
pkg/arvo/tests/sys/vane/khan.hoon
Normal file
476
pkg/arvo/tests/sys/vane/khan.hoon
Normal file
@ -0,0 +1,476 @@
|
|||||||
|
:: remaining cases to test:
|
||||||
|
:: call dud
|
||||||
|
:: take dud
|
||||||
|
:: TODO when can dud happen?
|
||||||
|
::
|
||||||
|
/+ *test
|
||||||
|
/= khan-raw /sys/vane/khan
|
||||||
|
=/ khan-gate (khan-raw ~nul)
|
||||||
|
|%
|
||||||
|
++ test-khan-fyrd-start-args
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=~1162.1.1
|
||||||
|
scry=scry-provides-mark
|
||||||
|
call-args=[duct=~[/initial-born-duct] ~ [%born ~]]
|
||||||
|
==
|
||||||
|
=/ results-0 (expect-eq !>(~) !>(born-moves))
|
||||||
|
=/ fyrd=(fyrd:khan cast:khan) [%base %nonexistent %noun %noun ~]
|
||||||
|
=/ now=@da (add ~1162.1.1 ~s1)
|
||||||
|
=^ start-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now
|
||||||
|
scry=scry-provides-mark
|
||||||
|
^= call-args
|
||||||
|
:* duct=~[//khan/1/0vsome.ductt] ~
|
||||||
|
%fyrd fyrd
|
||||||
|
== ==
|
||||||
|
=/ results-1 (expect !>(=(1 (lent start-moves))))
|
||||||
|
=/ mev (head start-moves)
|
||||||
|
=/ results-2
|
||||||
|
%+ expect-eq
|
||||||
|
!> ~[//khan/1/0vsome.ductt]
|
||||||
|
!> p.mev
|
||||||
|
?> ?=(%pass -.q.mev)
|
||||||
|
=/ results-3
|
||||||
|
%+ expect-eq
|
||||||
|
!> /fyrd/~nul/base/~1162.1.1..00.00.01/noun
|
||||||
|
!> wire.q.mev
|
||||||
|
=/ results-4 (expect-eq !>(%k) !>(-.note.q.mev))
|
||||||
|
?> ?=(%fard +<.note.q.mev)
|
||||||
|
=/ fad p.note.q.mev
|
||||||
|
;: weld
|
||||||
|
results-0 results-1 results-2
|
||||||
|
results-3 results-4
|
||||||
|
(expect-eq !>(%base) !>(bear.fad))
|
||||||
|
(expect-eq !>(%nonexistent) !>(name.fad))
|
||||||
|
(expect-eq !>(%noun) !>(p.args.fad))
|
||||||
|
(expect-eq !>(`~) q.args.fad)
|
||||||
|
==
|
||||||
|
++ test-khan-fard-start-args
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=~1162.1.1
|
||||||
|
scry=scry-provides-mark
|
||||||
|
call-args=[duct=~[/initial-born-duct] ~ [%born ~]]
|
||||||
|
==
|
||||||
|
=/ fard=(fyrd:khan cage) [%base %nonexistent %noun !>(~)]
|
||||||
|
=/ now=@da (add ~1162.1.1 ~s1)
|
||||||
|
=^ start-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now
|
||||||
|
scry=scry-provides-mark
|
||||||
|
^= call-args
|
||||||
|
:* duct=~[//khan/1/0vthat.ductt] ~
|
||||||
|
%fard fard
|
||||||
|
== ==
|
||||||
|
=/ results-0 (expect !>(=(2 (lent start-moves))))
|
||||||
|
:: XX overspecified
|
||||||
|
::
|
||||||
|
=/ expected-tid (cat 3 'khan-fyrd--' (scot %uv (sham 0xdead.beef)))
|
||||||
|
=/ results-1
|
||||||
|
%+ expect-eq
|
||||||
|
!> :* ~[//khan/1/0vthat.ductt]
|
||||||
|
%pass //g %g %deal
|
||||||
|
[~nul ~nul] %spider %watch
|
||||||
|
/thread-result/[expected-tid]
|
||||||
|
==
|
||||||
|
!> (head start-moves)
|
||||||
|
=/ mev (rear start-moves)
|
||||||
|
=/ results-2 (expect-eq !>(~[//khan/1/0vthat.ductt]) !>(p.mev))
|
||||||
|
?> ?=(%pass -.q.mev)
|
||||||
|
=/ results-3 (expect-eq !>(//g) !>(wire.q.mev))
|
||||||
|
=* not note.q.mev
|
||||||
|
=/ results-4 (expect-eq !>(%g) !>(-.not))
|
||||||
|
?> ?=(%deal +<.not)
|
||||||
|
=/ results-5 (expect-eq !>([~nul ~nul]) !>(p.not))
|
||||||
|
=/ results-6 (expect-eq !>(%spider) !>(q.not))
|
||||||
|
?> ?=(%poke -.r.not)
|
||||||
|
=* cag cage.r.not
|
||||||
|
?> ?=(%spider-start p.cag)
|
||||||
|
=/ rag
|
||||||
|
:: XX $start-args in %/app/spider/hoon
|
||||||
|
::
|
||||||
|
!< [p=(unit @ta) q=(unit @ta) r=beak s=term t=vase]
|
||||||
|
q.cag
|
||||||
|
=/ results-7
|
||||||
|
%+ expect-eq
|
||||||
|
!> :* ~ `expected-tid
|
||||||
|
[~nul %base %da now] %nonexistent ~
|
||||||
|
==
|
||||||
|
!>(rag(t ~))
|
||||||
|
=/ results-8 (expect-eq !>(~) t.rag)
|
||||||
|
;: weld
|
||||||
|
results-0 results-1 results-2
|
||||||
|
results-3 results-4 results-5
|
||||||
|
results-6 results-7 results-8
|
||||||
|
==
|
||||||
|
++ test-khan-take-full-run-fard
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=~1162.1.1
|
||||||
|
scry=scry-provides-mark
|
||||||
|
call-args=[duct=~[/a] ~ [%born ~]]
|
||||||
|
==
|
||||||
|
=/ results-0 (expect-eq !>(~) !>(born-moves))
|
||||||
|
=/ fard=(fyrd:khan cage) [%base %fake %noun !>(~)]
|
||||||
|
=^ start-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=(add ~1162.1.1 ~s1)
|
||||||
|
scry=scry-provides-mark
|
||||||
|
^= call-args
|
||||||
|
:* duct=~[//khan/2/0v0] ~
|
||||||
|
%fard fard
|
||||||
|
== ==
|
||||||
|
=^ take-moves khan-gate
|
||||||
|
%- khan-take-all :*
|
||||||
|
khan-gate now=~1162.1.2 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [//g ~[//khan/2/0v0] ~ %gall %unto %watch-ack ~]
|
||||||
|
[//g ~[//khan/2/0v0] ~ %gall %unto %poke-ack ~]
|
||||||
|
[//g ~[//khan/2/0v0] ~ %gall %unto %fact %thread-done !>(%res)]
|
||||||
|
[//g ~[//khan/2/0v0] ~ %gall %unto %kick ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=/ results-1
|
||||||
|
%- expect !>(=(1 (lent take-moves)))
|
||||||
|
=/ results-2
|
||||||
|
%+ expect-eq
|
||||||
|
!>([~[//khan/2/0v0] %give %arow %& %noun !>(%res)])
|
||||||
|
!>((head take-moves))
|
||||||
|
:(weld results-0 results-1 results-2)
|
||||||
|
++ test-khan-multi-fard
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=~1162.1.1
|
||||||
|
scry=scry-provides-mark
|
||||||
|
call-args=[duct=~[/a] ~ [%born ~]]
|
||||||
|
==
|
||||||
|
=/ fard=(fyrd:khan cage) [%base %fake %noun !>(~)]
|
||||||
|
=/ khan-call-args :*
|
||||||
|
now=(add ~1162.1.1 ~s1)
|
||||||
|
scry=scry-provides-mark
|
||||||
|
^= call-args :*
|
||||||
|
duct=~[//khan/2/0va] ~ %fard fard
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=^ start-1-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
khan-call-args
|
||||||
|
==
|
||||||
|
=^ start-2-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
khan-call-args
|
||||||
|
==
|
||||||
|
=/ results-1
|
||||||
|
%+ expect-spider-start-tid
|
||||||
|
'khan-fyrd--0vir6kv.ci3nm.a8rcs.kua3e.9sp7o'
|
||||||
|
start-1-moves
|
||||||
|
=/ results-2
|
||||||
|
%+ expect-spider-start-tid
|
||||||
|
'khan-fyrd--0v4.la9d1.uc5cu.ngv3f.pbo8a.mlc5f'
|
||||||
|
start-2-moves
|
||||||
|
(weld results-1 results-2)
|
||||||
|
++ test-khan-take-full-run-fyrd
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=~1162.1.1
|
||||||
|
scry=scry-provides-mark
|
||||||
|
call-args=[duct=~[/a] ~ [%born ~]]
|
||||||
|
==
|
||||||
|
=^ fyrd-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=(add ~1162.1.1 ~s1)
|
||||||
|
scry=scry-provides-mark
|
||||||
|
^= call-args
|
||||||
|
duct=~[//khan/0v0/1/0v2] ~
|
||||||
|
%fyrd [%base %fake %noun %noun ~]
|
||||||
|
==
|
||||||
|
=/ results-0 (expect !>(=(1 (lent fyrd-moves))))
|
||||||
|
=/ fard-move (head fyrd-moves)
|
||||||
|
?> ?=(%pass -.q.fard-move)
|
||||||
|
?> ?=(%k -.note.q.fard-move)
|
||||||
|
=* wir wire.q.fard-move
|
||||||
|
:: XX may erroneously break if %khan keeps state dependent on
|
||||||
|
:: its inner %fard.
|
||||||
|
::
|
||||||
|
=^ arow-moves khan-gate
|
||||||
|
%- khan-take :*
|
||||||
|
khan-gate
|
||||||
|
now=(add ~1162.1.1 ~s3)
|
||||||
|
scry=scry-provides-mark
|
||||||
|
^= take-args
|
||||||
|
wire=wir
|
||||||
|
duct=~[//khan/0v0/1/0v2]
|
||||||
|
dud=~
|
||||||
|
[%khan %arow %& %noun !>(%res)]
|
||||||
|
==
|
||||||
|
=/ results-1 (expect !>(=(1 (lent arow-moves))))
|
||||||
|
=/ row (head arow-moves)
|
||||||
|
=/ results-2
|
||||||
|
%+ expect-eq
|
||||||
|
!>(~[//khan/0v0/1/0v2])
|
||||||
|
!>(p.row)
|
||||||
|
=/ results-3
|
||||||
|
%+ expect-eq
|
||||||
|
!>([%give %avow %& %noun %res])
|
||||||
|
!>(q.row)
|
||||||
|
:(weld results-0 results-1 results-2 results-3)
|
||||||
|
++ test-khan-fard-watch-ack-fail
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call-all :*
|
||||||
|
khan-gate now=~1162.1.1 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [~[/a] ~ %born ~]
|
||||||
|
[~[//khan/0v0/1/0v0] ~ %fard %base %hi %noun %noun ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=^ watch-ack-moves khan-gate
|
||||||
|
%- khan-take :*
|
||||||
|
khan-gate now=~1162.1.2 scry=scry-provides-mark
|
||||||
|
^= take-args
|
||||||
|
//g ~[//khan/0v0/1/0v0] ~
|
||||||
|
%gall %unto %watch-ack `~['fail']
|
||||||
|
==
|
||||||
|
=/ results-0 (expect !>(=(1 (lent watch-ack-moves))))
|
||||||
|
=/ mev (head watch-ack-moves)
|
||||||
|
=/ results-1
|
||||||
|
%+ expect-eq
|
||||||
|
!>([~[//khan/0v0/1/0v0] %give %arow %| %watch-ack ~['fail']])
|
||||||
|
!>(mev)
|
||||||
|
(weld results-0 results-1)
|
||||||
|
++ test-khan-fard-poke-ack-fail
|
||||||
|
=^ call-moves khan-gate
|
||||||
|
%- khan-call-all :*
|
||||||
|
khan-gate now=~1162.1.1 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [~[/a] ~ %born ~]
|
||||||
|
[~[//khan/0v0/1/0v0] ~ %fard %base %hi %noun %noun ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=^ take-moves khan-gate
|
||||||
|
%- khan-take-all :*
|
||||||
|
khan-gate now=~1162.1.2 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [//g ~[//khan/0v0/1/0v0] ~ %gall %unto %watch-ack ~]
|
||||||
|
:* //g ~[//khan/0v0/1/0v0] ~
|
||||||
|
%gall %unto %poke-ack `~['fail']
|
||||||
|
==
|
||||||
|
[//g ~[//khan/0v0/1/0v0] ~ %gall %unto %kick ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=/ results-0 (expect !>(=(1 (lent take-moves))))
|
||||||
|
=/ mev (head take-moves)
|
||||||
|
=/ results-1
|
||||||
|
%+ expect-eq
|
||||||
|
!>([~[//khan/0v0/1/0v0] %give %arow %| %poke-ack ~['fail']])
|
||||||
|
!>(mev)
|
||||||
|
(weld results-0 results-1)
|
||||||
|
++ test-khan-fard-thread-fail
|
||||||
|
=^ call-moves khan-gate
|
||||||
|
%- khan-call-all :*
|
||||||
|
khan-gate now=~1162.1.1 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [~[/a] ~ %born ~]
|
||||||
|
[~[//khan/0v0/1/0v0] ~ %fard %base %hi %noun %noun ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=^ take-moves khan-gate
|
||||||
|
%- khan-take-all :*
|
||||||
|
khan-gate now=~1162.1.2 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [//g ~[//khan/0v0/1/0v0] ~ %gall %unto %watch-ack ~]
|
||||||
|
[//g ~[//khan/0v0/1/0v0] ~ %gall %unto %poke-ack ~]
|
||||||
|
:* //g ~[//khan/0v0/1/0v0] ~
|
||||||
|
%gall %unto %fact %thread-fail
|
||||||
|
!>([%woops ~['fail']])
|
||||||
|
==
|
||||||
|
[//g ~[//khan/0v0/1/0v0] ~ %gall %unto %kick ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=/ results-0 (expect !>(=(1 (lent take-moves))))
|
||||||
|
=/ mev (head take-moves)
|
||||||
|
=/ results-1
|
||||||
|
%+ expect-eq
|
||||||
|
!> :* ~[//khan/0v0/1/0v0] %give
|
||||||
|
%arow %| %thread-fail ~['woops' 'fail']
|
||||||
|
==
|
||||||
|
!>(mev)
|
||||||
|
(weld results-0 results-1)
|
||||||
|
++ test-khan-fyrd-arow-fail
|
||||||
|
=^ call-moves khan-gate
|
||||||
|
%- khan-call-all :*
|
||||||
|
khan-gate now=~1162.1.1 sep=~s1 scry=scry-provides-mark
|
||||||
|
:~ [~[/a] ~ %born ~]
|
||||||
|
[~[//khan/0v0/1/0v0] ~ %fyrd %base %a %noun %noun ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=/ results-0 (expect !>(=(1 (lent call-moves))))
|
||||||
|
=/ fard-move (head call-moves)
|
||||||
|
?> ?=(%pass -.q.fard-move)
|
||||||
|
=* wir wire.q.fard-move
|
||||||
|
=^ arow-moves khan-gate
|
||||||
|
%- khan-take :*
|
||||||
|
khan-gate now=~1162.1.2 scry=scry-provides-mark
|
||||||
|
^= take-args
|
||||||
|
wir ~[//khan/0v0/1/0v0] ~
|
||||||
|
%khan %arow %| %watch-ack ~['fail']
|
||||||
|
==
|
||||||
|
=/ results-1 (expect !>(=(1 (lent arow-moves))))
|
||||||
|
=/ mev (head arow-moves)
|
||||||
|
=/ results-2
|
||||||
|
%+ expect-eq
|
||||||
|
!>([~[//khan/0v0/1/0v0] %give %avow %| %watch-ack ~['fail']])
|
||||||
|
!>(mev)
|
||||||
|
:(weld results-0 results-1 results-2)
|
||||||
|
++ test-khan-fyrd-no-input-mark
|
||||||
|
=^ born-moves khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
~1162.1.1
|
||||||
|
scry-provides-mark
|
||||||
|
~[/a] ~ %born ~
|
||||||
|
==
|
||||||
|
%- expect-fail
|
||||||
|
|.
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
(add ~1162.1.1 ~s1)
|
||||||
|
scry-provides-mark
|
||||||
|
~[//khan/0v0/1/0v0] ~
|
||||||
|
%fyrd %base %a %noun %bad-mark ~
|
||||||
|
==
|
||||||
|
++ test-khan-fyrd-no-output-mark
|
||||||
|
=^ call-moves khan-gate
|
||||||
|
%- khan-call-all :*
|
||||||
|
khan-gate ~1162.1.1 ~s1 scry-provides-mark
|
||||||
|
:~ [~[/a] ~ %born ~]
|
||||||
|
[~[//khan/0v0/1/0v0] ~ %fyrd %base %a %bad-mark %noun ~]
|
||||||
|
==
|
||||||
|
==
|
||||||
|
%- expect-fail
|
||||||
|
|.
|
||||||
|
%- khan-take :*
|
||||||
|
khan-gate
|
||||||
|
~1162.1.2
|
||||||
|
scry-provides-mark
|
||||||
|
/fyrd/~nul/base/da/~1162.1.1..00.00.01/bad-mark
|
||||||
|
~[//khan/0v0/1/0v0] ~
|
||||||
|
[%khan %arow %& %noun !>(~)]
|
||||||
|
==
|
||||||
|
++ expect-spider-start-tid
|
||||||
|
|= [tid=@ta mev=(list move:khan-gate)]
|
||||||
|
?> ?=([^ ^ ~] mev)
|
||||||
|
=* watch-move i.mev
|
||||||
|
=* start-move i.t.mev
|
||||||
|
?> ?=([* %pass * %g %deal * %spider %watch *] watch-move)
|
||||||
|
=/ results-1
|
||||||
|
%+ expect-eq
|
||||||
|
!>(/thread-result/[tid])
|
||||||
|
!>(path.r.note.q.watch-move)
|
||||||
|
?> ?=([* %pass * %g %deal * %spider %poke %spider-start *] start-move)
|
||||||
|
=/ start-args
|
||||||
|
!< [p=(unit @ta) q=(unit @ta) r=beak s=term t=vase]
|
||||||
|
q.cage.r.note.q.start-move
|
||||||
|
=/ results-2
|
||||||
|
%+ expect-eq
|
||||||
|
!> `tid
|
||||||
|
!> q.start-args
|
||||||
|
(weld results-1 results-2)
|
||||||
|
++ khan-call
|
||||||
|
|= $: khan-gate=_khan-gate
|
||||||
|
now=@da
|
||||||
|
scry=roof
|
||||||
|
$= call-args
|
||||||
|
$: =duct
|
||||||
|
dud=(unit goof)
|
||||||
|
wrapped-task=(hobo task:khan)
|
||||||
|
== ==
|
||||||
|
^- [(list move:khan-gate) _khan-gate]
|
||||||
|
=/ khan-core
|
||||||
|
(khan-gate now eny=`@uvJ`0xdead.beef scry=scry)
|
||||||
|
(call:khan-core [duct dud wrapped-task]:call-args)
|
||||||
|
++ khan-call-all
|
||||||
|
|= $: khan-gate=_khan-gate
|
||||||
|
now=@da
|
||||||
|
sep=@dr
|
||||||
|
scry=roof
|
||||||
|
call-list=(list [p=duct q=(unit goof) r=(hobo task:khan)])
|
||||||
|
==
|
||||||
|
^- [(list move:khan-gate) _khan-gate]
|
||||||
|
=+ i=0
|
||||||
|
=/ mev=(list move:khan-gate) ~
|
||||||
|
|-
|
||||||
|
?~ call-list [mev khan-gate]
|
||||||
|
=^ mov khan-gate
|
||||||
|
%- khan-call :*
|
||||||
|
khan-gate
|
||||||
|
now=(add now (mul sep i))
|
||||||
|
scry=scry
|
||||||
|
call-args=i.call-list
|
||||||
|
==
|
||||||
|
$(i +(i), call-list t.call-list, mev (weld mev mov))
|
||||||
|
++ khan-take
|
||||||
|
|= $: khan-gate=_khan-gate
|
||||||
|
now=@da
|
||||||
|
scry=roof
|
||||||
|
$= take-args
|
||||||
|
$: =wire
|
||||||
|
=duct
|
||||||
|
dud=(unit goof)
|
||||||
|
=sign:khan-gate
|
||||||
|
== ==
|
||||||
|
^- [(list move:khan-gate) _khan-gate]
|
||||||
|
=/ khan-core
|
||||||
|
(khan-gate now eny=`@uvJ`0xdead.beef scry=scry)
|
||||||
|
(take:khan-core [wire duct dud sign]:take-args)
|
||||||
|
++ khan-take-all
|
||||||
|
|= $: khan-gate=_khan-gate
|
||||||
|
now=@da
|
||||||
|
sep=@dr
|
||||||
|
scry=roof
|
||||||
|
take-list=(list [p=wire q=duct r=(unit goof) s=sign:khan-gate])
|
||||||
|
==
|
||||||
|
^- [(list move:khan-gate) _khan-gate]
|
||||||
|
=+ i=0
|
||||||
|
=/ mev=(list move:khan-gate) ~
|
||||||
|
|-
|
||||||
|
?~ take-list [mev khan-gate]
|
||||||
|
=^ mov khan-gate
|
||||||
|
%- khan-take :*
|
||||||
|
khan-gate
|
||||||
|
now=(add now (mul sep i))
|
||||||
|
scry=scry
|
||||||
|
take-args=i.take-list
|
||||||
|
==
|
||||||
|
$(i +(i), take-list t.take-list, mev (weld mev mov))
|
||||||
|
++ dais-noun ^- dais:clay
|
||||||
|
|_ sam=vase
|
||||||
|
++ diff !!
|
||||||
|
++ form !!
|
||||||
|
++ join !!
|
||||||
|
++ mash !!
|
||||||
|
++ pact !!
|
||||||
|
++ vale |=(=noun !>(;;(^noun noun)))
|
||||||
|
--
|
||||||
|
++ tube-noun-noun ^- tube:clay
|
||||||
|
|= =vase
|
||||||
|
!>(!<(noun vase))
|
||||||
|
++ scry-provides-mark ^- roof
|
||||||
|
|= [gang =view =beam]
|
||||||
|
^- (unit (unit cage))
|
||||||
|
?: &(=(%cb view) =(/noun s.beam))
|
||||||
|
:^ ~ ~ %dais
|
||||||
|
!> ^- dais:clay
|
||||||
|
dais-noun
|
||||||
|
?: &(=(%cc view) =(/noun/noun s.beam))
|
||||||
|
:^ ~ ~ %tube
|
||||||
|
!> ^- tube:clay
|
||||||
|
tube-noun-noun
|
||||||
|
~
|
||||||
|
--
|
@ -116,4 +116,237 @@
|
|||||||
3d07.03a9.9925.0581.
|
3d07.03a9.9925.0581.
|
||||||
f7de.cd5e.f0f4.f809
|
f7de.cd5e.f0f4.f809
|
||||||
==
|
==
|
||||||
|
++ test-schnorr
|
||||||
|
=> |%
|
||||||
|
+$ case-sec
|
||||||
|
$: sec=@
|
||||||
|
pub=@
|
||||||
|
aux=@
|
||||||
|
mes=@
|
||||||
|
sig=@
|
||||||
|
==
|
||||||
|
+$ case-pub
|
||||||
|
$: pub=@
|
||||||
|
mes=@
|
||||||
|
sig=@
|
||||||
|
res=?
|
||||||
|
==
|
||||||
|
--
|
||||||
|
=< %+ category "bip-0340 vectors"
|
||||||
|
(zing :(weld t1 t2 t3))
|
||||||
|
=/ cases-sec=(list case-sec)
|
||||||
|
:~
|
||||||
|
:* 0x3
|
||||||
|
0xf930.8a01.9258.c310.4934.4f85.f89d.5229.
|
||||||
|
b531.c845.836f.99b0.8601.f113.bce0.36f9
|
||||||
|
0
|
||||||
|
0
|
||||||
|
0xe907.831f.8084.8d10.69a5.371b.4024.1036.
|
||||||
|
4bdf.1c5f.8307.b008.4c55.f1ce.2dca.8215.
|
||||||
|
25f6.6a4a.85ea.8b71.e482.a74f.382d.2ce5.
|
||||||
|
ebee.e8fd.b217.2f47.7df4.900d.3105.36c0
|
||||||
|
==
|
||||||
|
:* 0xb7e1.5162.8aed.2a6a.bf71.5880.9cf4.f3c7.
|
||||||
|
62e7.160f.38b4.da56.a784.d904.5190.cfef
|
||||||
|
0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
1
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x6896.bd60.eeae.296d.b48a.229f.f71d.fe07.
|
||||||
|
1bde.413e.6d43.f917.dc8d.cf8c.78de.3341.
|
||||||
|
8906.d11a.c976.abcc.b20b.0912.92bf.f4ea.
|
||||||
|
897e.fcb6.39ea.871c.fa95.f6de.339e.4b0a
|
||||||
|
==
|
||||||
|
:* 0xc90f.daa2.2168.c234.c4c6.628b.80dc.1cd1.
|
||||||
|
2902.4e08.8a67.cc74.020b.bea6.3b14.e5c9
|
||||||
|
0xdd30.8afe.c577.7e13.121f.a72b.9cc1.b7cc.
|
||||||
|
0139.7153.09b0.86c9.60e1.8fd9.6977.4eb8
|
||||||
|
0xc87a.a538.24b4.d7ae.2eb0.35a2.b5bb.bccc.
|
||||||
|
080e.76cd.c6d1.692c.4b0b.62d7.98e6.d906
|
||||||
|
0x7e2d.58d8.b3bc.df1a.bade.c782.9054.f90d.
|
||||||
|
da98.05aa.b56c.7733.3024.b9d0.a508.b75c
|
||||||
|
0x5831.aaee.d7b4.4bb7.4e5e.ab94.ba9d.4294.
|
||||||
|
c49b.cf2a.6072.8d8b.4c20.0f50.dd31.3c1b.
|
||||||
|
ab74.5879.a5ad.954a.72c4.5a91.c3a5.1d3c.
|
||||||
|
7ade.a98d.82f8.481e.0e1e.0367.4a6f.3fb7
|
||||||
|
==
|
||||||
|
:* 0xb43.2b26.7793.7381.aef0.5bb0.2a66.ecd0.
|
||||||
|
1277.3062.cf3f.a254.9e44.f58e.d240.1710
|
||||||
|
0x25d1.dff9.5105.f525.3c40.22f6.28a9.96ad.
|
||||||
|
3a0d.95fb.f21d.468a.1b33.f8c1.60d8.f517
|
||||||
|
0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff
|
||||||
|
0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff
|
||||||
|
0x7eb0.5097.57e2.46f1.9449.8856.5161.1cb9.
|
||||||
|
65ec.c1a1.87dd.51b6.4fda.1edc.9637.d5ec.
|
||||||
|
9758.2b9c.b13d.b393.3705.b32b.a982.af5a.
|
||||||
|
f25f.d788.81eb.b327.71fc.5922.efc6.6ea3
|
||||||
|
==
|
||||||
|
==
|
||||||
|
=/ t1
|
||||||
|
%+ turn cases-sec
|
||||||
|
|= case-sec
|
||||||
|
^- tang
|
||||||
|
%+ expect-eq
|
||||||
|
!> sig
|
||||||
|
!> (sign:schnorr:ecc sec mes aux)
|
||||||
|
=/ t2
|
||||||
|
%+ turn cases-sec
|
||||||
|
|= case-sec
|
||||||
|
^- tang
|
||||||
|
%- expect
|
||||||
|
!> (verify:schnorr:ecc pub mes sig)
|
||||||
|
=/ cases-pub=(list case-pub)
|
||||||
|
:~
|
||||||
|
:* 0xd69c.3509.bb99.e412.e68b.0fe8.544e.7283.
|
||||||
|
7dfa.3074.6d8b.e2aa.6597.5f29.d22d.c7b9
|
||||||
|
0x4df3.c3f6.8fcc.83b2.7e9d.42c9.0431.a724.
|
||||||
|
99f1.7875.c81a.599b.566c.9889.b969.6703
|
||||||
|
0x3b.78ce.563f.89a0.ed94.14f5.aa28.ad0d.
|
||||||
|
96d6.795f.9c63.76af.b154.8af6.03b3.eb45.
|
||||||
|
c9f8.207d.ee10.60cb.71c0.4e80.f593.060b.
|
||||||
|
07d2.8308.d7f4
|
||||||
|
%.y
|
||||||
|
==
|
||||||
|
:* 0xeefd.ea4c.db67.7750.a420.fee8.07ea.cf21.
|
||||||
|
eb98.98ae.79b9.7687.66e4.faa0.4a2d.4a34
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x6cff.5c3b.a86c.69ea.4b73.76f3.1a9b.cb4f.
|
||||||
|
74c1.9760.89b2.d996.3da2.e554.3e17.7769.
|
||||||
|
69e8.9b4c.5564.d003.4910.6b84.9778.5dd7.
|
||||||
|
d1d7.13a8.ae82.b32f.a79d.5f7f.c407.d39b
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0xfff9.7bd5.755e.eea4.2045.3a14.3552.35d3.
|
||||||
|
82f6.472f.8568.a18b.2f05.7a14.6029.7556.
|
||||||
|
3cc2.7944.640a.c607.cd10.7ae1.0923.d9ef.
|
||||||
|
7a73.c643.e166.be5e.beaf.a34b.1ac5.53e2
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x1fa6.2e33.1edb.c21c.3947.92d2.ab11.00a7.
|
||||||
|
b432.b013.df3f.6ff4.f99f.cb33.e0e1.515f.
|
||||||
|
2889.0b3e.db6e.7189.b630.448b.515c.e4f8.
|
||||||
|
622a.954c.fe54.5735.aaea.5134.fccd.b2bd
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x6cff.5c3b.a86c.69ea.4b73.76f3.1a9b.cb4f.
|
||||||
|
74c1.9760.89b2.d996.3da2.e554.3e17.7769.
|
||||||
|
9617.64b3.aa9b.2ffc.b6ef.947b.6887.a226.
|
||||||
|
e8d7.c93e.00c5.ed0c.1834.ff0d.0c2e.6da6
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x123d.da83.28af.9c23.a94c.1fee.cfd1.23ba.
|
||||||
|
4fb7.3476.f0d5.94dc.b65c.6425.bd18.6051
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x1.7615.fbaf.5ae2.8864.013c.0997.42de.
|
||||||
|
adb4.dba8.7f11.ac67.54f9.3780.d5a1.837c.
|
||||||
|
f197
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x4a29.8dac.ae57.395a.15d0.795d.dbfd.1dcb.
|
||||||
|
564d.a82b.0f26.9bc7.0a74.f822.0429.ba1d.
|
||||||
|
69e8.9b4c.5564.d003.4910.6b84.9778.5dd7.
|
||||||
|
d1d7.13a8.ae82.b32f.a79d.5f7f.c407.d39b
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.fffe.ffff.fc2f.
|
||||||
|
69e8.9b4c.5564.d003.4910.6b84.9778.5dd7.
|
||||||
|
d1d7.13a8.ae82.b32f.a79d.5f7f.c407.d39b
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xdff1.d77f.2a67.1c5f.3618.3726.db23.41be.
|
||||||
|
58fe.ae1d.a2de.ced8.4324.0f7b.502b.a659
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x6cff.5c3b.a86c.69ea.4b73.76f3.1a9b.cb4f.
|
||||||
|
74c1.9760.89b2.d996.3da2.e554.3e17.7769.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.fffe.
|
||||||
|
baae.dce6.af48.a03b.bfd2.5e8c.d036.4141
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
:* 0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.fffe.ffff.fc30
|
||||||
|
0x243f.6a88.85a3.08d3.1319.8a2e.0370.7344.
|
||||||
|
a409.3822.299f.31d0.082e.fa98.ec4e.6c89
|
||||||
|
0x6cff.5c3b.a86c.69ea.4b73.76f3.1a9b.cb4f.
|
||||||
|
74c1.9760.89b2.d996.3da2.e554.3e17.7769.
|
||||||
|
69e8.9b4c.5564.d003.4910.6b84.9778.5dd7.
|
||||||
|
d1d7.13a8.ae82.b32f.a79d.5f7f.c407.d39b
|
||||||
|
%.n
|
||||||
|
==
|
||||||
|
==
|
||||||
|
:_ .
|
||||||
|
^= t3
|
||||||
|
%+ turn cases-pub
|
||||||
|
|= case-pub
|
||||||
|
^- tang
|
||||||
|
%+ expect-eq
|
||||||
|
!> res
|
||||||
|
!> (verify:schnorr:ecc pub mes sig)
|
||||||
|
++ test-schnorr-bounds
|
||||||
|
=> |% +$ case [sec=@ pub=@ aux=@ mes=@ sig=@] --
|
||||||
|
=< %+ category "bounds"
|
||||||
|
(zing (weld t1 t2))
|
||||||
|
=/ too-big
|
||||||
|
0xff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff
|
||||||
|
=/ big-sig
|
||||||
|
0xff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff.
|
||||||
|
ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff
|
||||||
|
=/ cases-big-sec=(list case)
|
||||||
|
:~ [too-big 0 0 0 0]
|
||||||
|
[1 0 too-big 0 0]
|
||||||
|
[1 0 0 too-big 0]
|
||||||
|
==
|
||||||
|
=/ cases-big-pub=(list case)
|
||||||
|
:~ [0 too-big 0 0 0]
|
||||||
|
[0 0 0 too-big 0]
|
||||||
|
[0 0 0 0 big-sig]
|
||||||
|
==
|
||||||
|
=/ t1
|
||||||
|
%+ turn cases-big-sec
|
||||||
|
|= case
|
||||||
|
%- expect-fail
|
||||||
|
|. (sign:schnorr:ecc sec mes aux)
|
||||||
|
:_ .
|
||||||
|
^= t2
|
||||||
|
%+ turn cases-big-pub
|
||||||
|
|= case
|
||||||
|
%- expect-fail
|
||||||
|
|. (verify:schnorr:ecc pub mes sig)
|
||||||
--
|
--
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
:: |pill: helper functions for making pills
|
:: |pill: helper functions for making pills
|
||||||
::
|
::
|
||||||
|
/- dice
|
||||||
^?
|
^?
|
||||||
|%
|
|%
|
||||||
::
|
::
|
||||||
@ -60,10 +61,10 @@
|
|||||||
=; hav ~& user-files+(lent hav)
|
=; hav ~& user-files+(lent hav)
|
||||||
=/ =yuki:clay
|
=/ =yuki:clay
|
||||||
:- *(list tako:clay)
|
:- *(list tako:clay)
|
||||||
%- ~(gas by *(map path (each page:clay lobe:clay)))
|
%- ~(gas by *(map path (each page lobe:clay)))
|
||||||
(turn hav |=([=path =page:clay] [path &+page]))
|
(turn hav |=([=path =page] [path &+page]))
|
||||||
[/c/sync [%park des &+yuki *rang:clay]]
|
[/c/sync [%park des &+yuki *rang:clay]]
|
||||||
=| hav=(list [path page:clay])
|
=| hav=(list [path page])
|
||||||
|- ^+ hav
|
|- ^+ hav
|
||||||
?~ sal ~
|
?~ sal ~
|
||||||
=. hav $(sal t.sal)
|
=. hav $(sal t.sal)
|
||||||
@ -80,7 +81,13 @@
|
|||||||
=/ pax (weld bas lyt)
|
=/ pax (weld bas lyt)
|
||||||
=/ lon .^(arch %cy pax)
|
=/ lon .^(arch %cy pax)
|
||||||
=? hav ?=(^ fil.lon)
|
=? 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)
|
=/ all ~(tap by dir.lon)
|
||||||
|- ^+ hav
|
|- ^+ hav
|
||||||
?~ all hav
|
?~ all hav
|
||||||
|
@ -168,6 +168,11 @@
|
|||||||
%+ turn ~(tap by charges)
|
%+ turn ~(tap by charges)
|
||||||
|= [=desk =charge]
|
|= [=desk =charge]
|
||||||
[desk (get-light-charge charge)]
|
[desk (get-light-charge charge)]
|
||||||
|
::
|
||||||
|
[%x %charges @ %version ~]
|
||||||
|
?~ charge=(~(get by charges) i.t.t.path)
|
||||||
|
[~ ~]
|
||||||
|
``noun+!>(version.docket.u.charge)
|
||||||
==
|
==
|
||||||
::
|
::
|
||||||
++ on-agent
|
++ on-agent
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
:~ title+'System'
|
:~ title+'System'
|
||||||
info+'An app launcher for Urbit.'
|
info+'An app launcher for Urbit.'
|
||||||
color+0xee.5432
|
color+0xee.5432
|
||||||
glob-http+['https://bootstrap.urbit.org/glob-0v4.64ana.19ug9.ik7l6.og080.68ce4.glob' 0v4.64ana.19ug9.ik7l6.og080.68ce4]
|
glob-http+['https://bootstrap.urbit.org/glob-0v5.1o2c9.g1btf.nandl.703oh.40up1.glob' 0v5.1o2c9.g1btf.nandl.703oh.40up1]
|
||||||
::glob-ames+~zod^0v0
|
::glob-ames+~zod^0v0
|
||||||
base+'grid'
|
base+'grid'
|
||||||
version+[1 0 2]
|
version+[1 0 3]
|
||||||
website+'https://tlon.io'
|
website+'https://tlon.io'
|
||||||
license+'MIT'
|
license+'MIT'
|
||||||
==
|
==
|
||||||
|
1
pkg/garden/lib/hark-store.hoon
Symbolic link
1
pkg/garden/lib/hark-store.hoon
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../garden-dev/lib/hark-store.hoon
|
@ -5,3 +5,4 @@ bin/
|
|||||||
.husky/
|
.husky/
|
||||||
*.config.js
|
*.config.js
|
||||||
*.config.ts
|
*.config.ts
|
||||||
|
package.json
|
47
pkg/grid/CONTRIBUTING.md
Normal file
47
pkg/grid/CONTRIBUTING.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Contributing to Landscape
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to the Urbit ecosystem.
|
||||||
|
|
||||||
|
Landscape is entirely open to contributions from the community. We mainly organize through our [project board], [issues], and [weekly call].
|
||||||
|
|
||||||
|
For now our code is stored in the main [urbit repo]. If you would like to contribute feel free to open up a PR there.
|
||||||
|
|
||||||
|
## Git Conventions
|
||||||
|
|
||||||
|
For Landscape we follow the same conventions as the main repo which can be found in it's [contributing doc]. This can be summarized as the following:
|
||||||
|
|
||||||
|
Commits should try to be atomic and focused on one feature at a time. Work-in-progress commits should be rebased and combined into one so that the commit history stays clean.
|
||||||
|
|
||||||
|
Commits should follow this format:
|
||||||
|
|
||||||
|
> component: short description
|
||||||
|
>
|
||||||
|
> long description
|
||||||
|
|
||||||
|
Where `component` is the closest most relevant area of the code base written as concisely as possible. The short description that accompanies should be a super concise summary of the changes. The total length of the commit message should strive to be 50 characters or less. The long description is optional, but should be used if further explanation is necessary.
|
||||||
|
|
||||||
|
### Pull Requests
|
||||||
|
|
||||||
|
A pull request (PR) should have a title similar in structure to our commit messages where it has a short identifier component followed by a very concise summary of the PR's intent. All PRs should have a description further laying out what it accomplishes. If the PR addresses certain Github issues, those should be referenced in the body of the description so they get linked.
|
||||||
|
|
||||||
|
PRs to this repo should currently tag (or request review) from one of the following contributors:
|
||||||
|
|
||||||
|
- [Liam - @liam-fitzgerald](https://github.com/liam-fitzgerald)
|
||||||
|
- [Hunter - @arthyn](https://github.com/arthyn)
|
||||||
|
- [James - @nerveharp](https://github.com/nerveharp)
|
||||||
|
|
||||||
|
If design or visual changes are made, please provide screenshots and also tag (or request a review) from one of the following contributors:
|
||||||
|
|
||||||
|
- [Éd - @urcades](https://github.com/urcades)
|
||||||
|
- [Gavin - @g-a-v-i-n](https://github.com/g-a-v-i-n)
|
||||||
|
|
||||||
|
## Further Information
|
||||||
|
|
||||||
|
If you haven't yet, check out the main [contributing doc] at the base of the repo for information on how to get started developing on Urbit. Also you can find a host of resources on [developers.urbit.org], including ways to earn address space by contributing.
|
||||||
|
|
||||||
|
[project board]: https://github.com/orgs/urbit/projects/17
|
||||||
|
[issues]: https://github.com/urbit/landscape/issues
|
||||||
|
[weekly call]: https://github.com/urbit/landscape/issues/792
|
||||||
|
[urbit repo]: https://github.com/urbit/urbit
|
||||||
|
[contributing doc]: ../../CONTRIBUTING.md
|
||||||
|
[developers.urbit.org]: https://developers.urbit.org/
|
43
pkg/grid/README.md
Normal file
43
pkg/grid/README.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Landscape
|
||||||
|
|
||||||
|
Landscape provides the primary launching interface for Tlon's suite of userspace applications. This directory contains the front-end web application to power said interface.
|
||||||
|
|
||||||
|
Landscape is built primarily using [React], [Typescript], and [Tailwind CSS]. [Vite] ensures that all code and assets are loaded appropriately, bundles the application for distribution and provides a functional dev environment.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
To get started using Landscape first you need to run, `npm i && npm run bootstrap` at the top level of the greater urbit repo. This will install your npm dependencies and correctly link the current implementation of the packages at `pkg/npm/*` to your dependencies.
|
||||||
|
|
||||||
|
If you intend to edit those packages will developing on Landscape, you should also have `npm run watch-libs` running to build and re-link them after every change.
|
||||||
|
|
||||||
|
Once that's done, you can then run `npm run mock` if you'd like to get started immediately. This will use hard-coded mock data to power the interface so you can work on the interface without being connected to a ship.
|
||||||
|
|
||||||
|
To develop against a working ship, you first need to add a `.env.local` file to the root of this directory. This file will not be committed. Adding `VITE_SHIP_URL={URL}` where **{URL}** is the URL of the ship you would like to point to, will allow you to run `npm run dev`. This will proxy all requests to the ship except for those powering the interface, allowing you to see live data.
|
||||||
|
|
||||||
|
Regardless of what you run to develop, Vite will hot-reload code changes as you work so you don't have to constantly refresh.
|
||||||
|
|
||||||
|
## Deploying
|
||||||
|
|
||||||
|
To deploy, run `npm run build` which will bundle all the code and assets into the `dist/` folder. This can then be made into a glob by doing the following:
|
||||||
|
|
||||||
|
1. Create or launch an urbit using the -F flag
|
||||||
|
2. On that urbit, if you don't already have a desk to run from, run `|merge %work our %base` to create a new desk and mount it with `|mount %work`.
|
||||||
|
3. Now the `%work` desk is accessible through the host OS's filesystem as a directory of that urbit's pier ie `~/zod/work`.
|
||||||
|
4. From the directory of grid you can run `rsync -avL --delete dist/ ~/zod/work/grid` where `~/zod` is your fake urbit's pier.
|
||||||
|
5. Once completed you can then run `|commit %work` on your urbit and you should see your files logged back out from the dojo.
|
||||||
|
6. Now run `=dir /=garden` to switch to the garden desk directory
|
||||||
|
7. You can now run `-make-glob %work /grid` which will take the grid folder where you just added files and create a glob which can be thought of as a sort of bundle. It will be output to `~/zod/.urb/put`.
|
||||||
|
8. If you navigate to `~/zod/.urb/put` you should see a file that looks like this `glob-0v5.fdf99.nph65.qecq3.ncpjn.q13mb.glob`. The characters between `glob-` and `.glob` are a hash of the glob's contents.
|
||||||
|
9. If you're working at Tlon, you can upload this to our Google storage using `gsutil cp glob-*.* gs://bootstrap.urbit.org`. Otherwise any publicly available HTTP endpoint that can serve files should be sufficient for distributing the glob.
|
||||||
|
10. Once you've uploaded the glob, you should then update the corresponding entry in the docket file that represents Landscape which currently resides at `pkg/garden/desk.docket-0`. Both the full URL and the hash should be updated to match the glob we just created, on the line that looks like this:
|
||||||
|
|
||||||
|
```hoon
|
||||||
|
glob-http+['https://bootstrap.urbit.org/glob-0v5.fdf99.nph65.qecq3.ncpjn.q13mb.glob' 0v5.fdf99.nph65.qecq3.ncpjn.q13mb]
|
||||||
|
```
|
||||||
|
|
||||||
|
11. This can now be safely committed and deployed.
|
||||||
|
|
||||||
|
[react]: https://reactjs.org/
|
||||||
|
[typescript]: https://www.typescriptlang.org/
|
||||||
|
[tailwind css]: https://tailwindcss.com/
|
||||||
|
[vite]: https://vitejs.dev/
|
@ -3,12 +3,14 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Urbit • Home</title>
|
<title>Urbit • Home</title>
|
||||||
<meta name="theme-color" content="#ffffff" />
|
|
||||||
<link rel="icon" href="/src/assets/favicon.svg" sizes="any" type="image/svg+xml" />
|
<link rel="icon" href="/src/assets/favicon.svg" sizes="any" type="image/svg+xml" />
|
||||||
<link rel="mask-icon" href="/src/assets/safari-pinned-tab.svg" color="#000000" />
|
<link rel="mask-icon" href="/src/assets/safari-pinned-tab.svg" color="#000000" />
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="/src/assets/apple-touch-icon.png" />
|
<link rel="apple-touch-icon" sizes="180x180" href="/src/assets/apple-touch-icon.png" />
|
||||||
<link rel="manifest" href="/src/assets/manifest.json" />
|
<link rel="manifest" href="/src/assets/manifest.json" />
|
||||||
|
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
|
||||||
|
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)" />
|
||||||
|
<meta name="theme-color" content="#ffffff" />
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
<link
|
<link
|
||||||
|
27529
pkg/grid/package-lock.json
generated
27529
pkg/grid/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "landscape",
|
"name": "landscape",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"mock": "vite --mode mock",
|
"mock": "vite --mode mock",
|
||||||
@ -21,8 +22,8 @@
|
|||||||
"@radix-ui/react-toggle": "^0.0.10",
|
"@radix-ui/react-toggle": "^0.0.10",
|
||||||
"@tlon/sigil-js": "^1.4.4",
|
"@tlon/sigil-js": "^1.4.4",
|
||||||
"@types/lodash": "^4.14.172",
|
"@types/lodash": "^4.14.172",
|
||||||
"@urbit/api": "^1.4.0",
|
"@urbit/api": "^2.1.0",
|
||||||
"@urbit/http-api": "^1.3.1",
|
"@urbit/http-api": "^2.1.0",
|
||||||
"big-integer": "^1.6.48",
|
"big-integer": "^1.6.48",
|
||||||
"classnames": "^2.3.1",
|
"classnames": "^2.3.1",
|
||||||
"clipboard-copy": "^4.0.1",
|
"clipboard-copy": "^4.0.1",
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { chadIsRunning, Treaty } from '@urbit/api';
|
import { chadIsRunning, Treaty, Vat } from '@urbit/api';
|
||||||
import clipboardCopy from 'clipboard-copy';
|
import clipboardCopy from 'clipboard-copy';
|
||||||
import React, { FC, useCallback, useState } from 'react';
|
import React, { FC, useCallback, useState } from 'react';
|
||||||
import cn from 'classnames';
|
import cn from 'classnames';
|
||||||
import { Vat } from '@urbit/api/hood';
|
|
||||||
import { Button, PillButton } from './Button';
|
import { Button, PillButton } from './Button';
|
||||||
import { Dialog, DialogClose, DialogContent, DialogTrigger } from './Dialog';
|
import { Dialog, DialogClose, DialogContent, DialogTrigger } from './Dialog';
|
||||||
import { DocketHeader } from './DocketHeader';
|
import { DocketHeader } from './DocketHeader';
|
||||||
@ -137,19 +136,19 @@ export const AppInfo: FC<AppInfoProps> = ({ docket, vat, className }) => {
|
|||||||
</div>
|
</div>
|
||||||
</DocketHeader>
|
</DocketHeader>
|
||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
{vat ? (
|
{vat ? (
|
||||||
<>
|
<>
|
||||||
<hr className="-mx-5 sm:-mx-8 border-gray-50" />
|
<hr className="-mx-5 sm:-mx-8 border-gray-50" />
|
||||||
<VatMeta vat={vat} />
|
<VatMeta vat={vat} />
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
{!treaty ? null : (
|
{!treaty ? null : (
|
||||||
<>
|
<>
|
||||||
<hr className="-mx-5 sm:-mx-8 border-gray-50" />
|
<hr className="-mx-5 sm:-mx-8 border-gray-50" />
|
||||||
<TreatyMeta treaty={treaty} />
|
<TreatyMeta treaty={treaty} />
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { Docket } from '@urbit/api/docket';
|
import { Docket } from '@urbit/api';
|
||||||
import cn from 'classnames';
|
import cn from 'classnames';
|
||||||
import { useTileColor } from '../tiles/useTileColor';
|
import { useTileColor } from '../tiles/useTileColor';
|
||||||
|
|
||||||
|
@ -7,7 +7,13 @@ type ShipNameProps = {
|
|||||||
|
|
||||||
export const ShipName = ({ name, ...props }: ShipNameProps) => {
|
export const ShipName = ({ name, ...props }: ShipNameProps) => {
|
||||||
const separator = /([_^-])/;
|
const separator = /([_^-])/;
|
||||||
const parts = cite(name).replace('~', '').split(separator);
|
const citedName = cite(name);
|
||||||
|
|
||||||
|
if (!citedName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parts = citedName.replace('~', '').split(separator);
|
||||||
const first = parts.shift();
|
const first = parts.shift();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Vat } from '@urbit/api/hood';
|
import { Vat } from '@urbit/api';
|
||||||
|
|
||||||
import { Attribute } from './Attribute';
|
import { Attribute } from './Attribute';
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import classNames from 'classnames';
|
|||||||
import clipboardCopy from 'clipboard-copy';
|
import clipboardCopy from 'clipboard-copy';
|
||||||
import React, { HTMLAttributes, useCallback, useState } from 'react';
|
import React, { HTMLAttributes, useCallback, useState } from 'react';
|
||||||
import { Link, Route, useHistory } from 'react-router-dom';
|
import { Link, Route, useHistory } from 'react-router-dom';
|
||||||
import { Vat } from '@urbit/api/hood';
|
import { Vat } from '@urbit/api';
|
||||||
import { Adjust } from '../components/icons/Adjust';
|
import { Adjust } from '../components/icons/Adjust';
|
||||||
import { useVat } from '../state/kiln';
|
import { useVat } from '../state/kiln';
|
||||||
import { disableDefault, handleDropdownLink } from '../state/util';
|
import { disableDefault, handleDropdownLink } from '../state/util';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { pick, pickBy, partition } from 'lodash';
|
import { pick, pickBy, partition } from 'lodash';
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
import { kilnBump } from '@urbit/api/hood';
|
import { kilnBump } from '@urbit/api';
|
||||||
import { AppList } from '../../components/AppList';
|
import { AppList } from '../../components/AppList';
|
||||||
import { Button } from '../../components/Button';
|
import { Button } from '../../components/Button';
|
||||||
import { Dialog, DialogClose, DialogContent, DialogTrigger } from '../../components/Dialog';
|
import { Dialog, DialogClose, DialogContent, DialogTrigger } from '../../components/Dialog';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { setMentions } from '@urbit/api/dist';
|
import { setMentions } from '@urbit/api';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Setting } from '../../components/Setting';
|
import { Setting } from '../../components/Setting';
|
||||||
import { pokeOptimisticallyN } from '../../state/base';
|
import { pokeOptimisticallyN } from '../../state/base';
|
||||||
|
@ -4,7 +4,7 @@ import { compose } from 'lodash/fp';
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import create, { GetState, SetState, UseStore } from 'zustand';
|
import create, { GetState, SetState, UseStore } from 'zustand';
|
||||||
import { persist } from 'zustand/middleware';
|
import { persist } from 'zustand/middleware';
|
||||||
import Urbit, { SubscriptionRequestInterface } from '@urbit/http-api';
|
import Urbit, { FatalError, SubscriptionRequestInterface } from '@urbit/http-api';
|
||||||
import { Poke } from '@urbit/api';
|
import { Poke } from '@urbit/api';
|
||||||
import api from './api';
|
import api from './api';
|
||||||
import { clearStorageMigration, createStorageKey, storageVersion, useMockData } from './util';
|
import { clearStorageMigration, createStorageKey, storageVersion, useMockData } from './util';
|
||||||
@ -107,7 +107,9 @@ export function createSubscription(
|
|||||||
path,
|
path,
|
||||||
event: e,
|
event: e,
|
||||||
err: () => {},
|
err: () => {},
|
||||||
quit: () => {}
|
quit: () => {
|
||||||
|
throw new FatalError("subscription clogged");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
// TODO: err, quit handling (resubscribe?)
|
// TODO: err, quit handling (resubscribe?)
|
||||||
return request;
|
return request;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* eslint-disable no-param-reassign */
|
/* eslint-disable no-param-reassign */
|
||||||
import {
|
import {
|
||||||
|
BigIntOrderedMap,
|
||||||
makePatDa,
|
makePatDa,
|
||||||
decToUd,
|
decToUd,
|
||||||
unixToDa,
|
unixToDa,
|
||||||
@ -13,7 +14,6 @@ import {
|
|||||||
NotificationGraphConfig,
|
NotificationGraphConfig,
|
||||||
archiveAll
|
archiveAll
|
||||||
} from '@urbit/api';
|
} from '@urbit/api';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
/* eslint-disable-next-line camelcase */
|
/* eslint-disable-next-line camelcase */
|
||||||
import { unstable_batchedUpdates } from 'react-dom';
|
import { unstable_batchedUpdates } from 'react-dom';
|
||||||
import produce from 'immer';
|
import produce from 'immer';
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
import { getVats, Vats, scryLag, getBlockers, Vat, kilnInstall } from '@urbit/api';
|
import {
|
||||||
import { kilnPause, kilnResume } from '@urbit/api/hood';
|
getVats,
|
||||||
|
Vats,
|
||||||
|
scryLag,
|
||||||
|
getBlockers,
|
||||||
|
Vat,
|
||||||
|
kilnInstall,
|
||||||
|
kilnPause,
|
||||||
|
kilnResume
|
||||||
|
} from '@urbit/api';
|
||||||
import create from 'zustand';
|
import create from 'zustand';
|
||||||
import produce from 'immer';
|
import produce from 'immer';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
|
@ -5,7 +5,7 @@ import {
|
|||||||
putEntry as doPutEntry,
|
putEntry as doPutEntry,
|
||||||
getDeskSettings,
|
getDeskSettings,
|
||||||
DeskData
|
DeskData
|
||||||
} from '@urbit/api/settings';
|
} from '@urbit/api';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import {
|
import {
|
||||||
BaseState,
|
BaseState,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Docket, DocketHref, Treaty } from '@urbit/api/docket';
|
import { Docket, DocketHref, Treaty } from '@urbit/api';
|
||||||
import { hsla, parseToHsla } from 'color2k';
|
import { hsla, parseToHsla } from 'color2k';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
@ -9,15 +9,14 @@ const { execSync } = require('child_process');
|
|||||||
const GIT_DESC = execSync('git describe --always', { encoding: 'utf8' }).trim();
|
const GIT_DESC = execSync('git describe --always', { encoding: 'utf8' }).trim();
|
||||||
|
|
||||||
let devServer = {
|
let devServer = {
|
||||||
contentBase: path.join(__dirname, '../public'),
|
|
||||||
hot: true,
|
hot: true,
|
||||||
port: 9000,
|
port: 9000,
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
disableHostCheck: true,
|
disableHostCheck: true,
|
||||||
historyApiFallback: {
|
historyApiFallback: {
|
||||||
|
index: '/apps/landscape/index.html',
|
||||||
disableDotRule: true
|
disableDotRule: true
|
||||||
},
|
}
|
||||||
publicPath: '/apps/landscape/'
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const router = _.mapKeys(urbitrc.FLEET || {}, (value, key) => `${key}.localhost:9000`);
|
const router = _.mapKeys(urbitrc.FLEET || {}, (value, key) => `${key}.localhost:9000`);
|
||||||
@ -25,7 +24,6 @@ const router = _.mapKeys(urbitrc.FLEET || {}, (value, key) => `${key}.localhost
|
|||||||
if(urbitrc.URL) {
|
if(urbitrc.URL) {
|
||||||
devServer = {
|
devServer = {
|
||||||
...devServer,
|
...devServer,
|
||||||
index: 'index.html',
|
|
||||||
// headers: {
|
// headers: {
|
||||||
// 'Service-Worker-Allowed': '/'
|
// 'Service-Worker-Allowed': '/'
|
||||||
// },
|
// },
|
||||||
@ -73,7 +71,7 @@ module.exports = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react)\/).*/
|
exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react|@urbit\/api)\/).*/
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/i,
|
test: /\.css$/i,
|
||||||
|
@ -30,7 +30,7 @@ module.exports = {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react)\/).*/
|
exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react|@urbit\/api)\/).*/
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/i,
|
test: /\.css$/i,
|
||||||
|
112291
pkg/interface/package-lock.json
generated
112291
pkg/interface/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -15,8 +15,8 @@
|
|||||||
"@tlon/indigo-light": "^1.0.7",
|
"@tlon/indigo-light": "^1.0.7",
|
||||||
"@tlon/indigo-react": "^1.2.27",
|
"@tlon/indigo-react": "^1.2.27",
|
||||||
"@tlon/sigil-js": "^1.4.3",
|
"@tlon/sigil-js": "^1.4.3",
|
||||||
"@urbit/api": "^1.4.0",
|
"@urbit/api": "^2.1.0",
|
||||||
"@urbit/http-api": "^1.2.1",
|
"@urbit/http-api": "^2.1.0",
|
||||||
"any-ascii": "^0.1.7",
|
"any-ascii": "^0.1.7",
|
||||||
"aws-sdk": "^2.830.0",
|
"aws-sdk": "^2.830.0",
|
||||||
"big-integer": "^1.6.48",
|
"big-integer": "^1.6.48",
|
||||||
@ -25,6 +25,7 @@
|
|||||||
"css-loader": "^3.6.0",
|
"css-loader": "^3.6.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
"formik": "^2.1.5",
|
"formik": "^2.1.5",
|
||||||
|
"fuzzy": "^0.1.3",
|
||||||
"immer": "^9.0.2",
|
"immer": "^9.0.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"moment": "^2.29.1",
|
"moment": "^2.29.1",
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
content="width=device-width, initial-scale=1, shrink-to-fit=no,maximum-scale=1"/>
|
content="width=device-width, initial-scale=1, shrink-to-fit=no,maximum-scale=1"/>
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
<meta name="apple-touch-fullscreen" content="yes" />
|
<meta name="apple-touch-fullscreen" content="yes" />
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
||||||
<link rel="manifest"
|
<link rel="manifest"
|
||||||
href='data:application/manifest+json,{
|
href='data:application/manifest+json,{
|
||||||
"name": "Groups",
|
"name": "Groups",
|
||||||
@ -16,6 +15,9 @@
|
|||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"background_color": "%23FFFFFF",
|
"background_color": "%23FFFFFF",
|
||||||
"theme_color": "%23000000"}' />
|
"theme_color": "%23000000"}' />
|
||||||
|
<meta name="theme-color" content="#FFFFFF" media="(prefers-color-scheme: light)">
|
||||||
|
<meta name="theme-color" content="#1A1A1A" media="(prefers-color-scheme: dark)">
|
||||||
|
<meta name="theme-color" content="#FFFFFF">
|
||||||
<script src="/apps/landscape/desk.js"></script>
|
<script src="/apps/landscape/desk.js"></script>
|
||||||
<script src="/session.js"></script>
|
<script src="/session.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Urbit from '@urbit/http-api';
|
import Urbit from '@urbit/http-api';
|
||||||
const api = new Urbit('', '', (window as any).desk);
|
const api = new Urbit('', '', (window as any).desk);
|
||||||
api.ship = window.ship;
|
api.ship = window.ship;
|
||||||
api.verbose = true;
|
// api.verbose = true;
|
||||||
// @ts-ignore TODO window typings
|
// @ts-ignore TODO window typings
|
||||||
window.api = api;
|
window.api = api;
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Content, GraphNode, unixToDa } from '@urbit/api';
|
import { BigIntOrderedMap, Content, GraphNode, unixToDa } from '@urbit/api';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import bigInt, { BigInteger } from 'big-integer';
|
import bigInt, { BigInteger } from 'big-integer';
|
||||||
|
|
||||||
export const makeComment = (
|
export const makeComment = (
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { deSig, Path, PatpNoSig } from '@urbit/api';
|
import { deSig, Path, PatpNoSig, Group, Resource, roleTags, RoleTags } from '@urbit/api';
|
||||||
import { Group, Resource, roleTags, RoleTags } from '@urbit/api/groups';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
|
||||||
export function roleForShip(
|
export function roleForShip(
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
import useMetadataState from '../state/metadata';
|
import useMetadataState from '../state/metadata';
|
||||||
import ob from 'urbit-ob';
|
import ob from 'urbit-ob';
|
||||||
import useInviteState from '../state/invite';
|
import useInviteState from '../state/invite';
|
||||||
import {resourceAsPath} from '../../../../npm/api/dist';
|
import { deSig, resourceAsPath } from '@urbit/api';
|
||||||
|
import { createJoinParams } from '~/views/landscape/components/Join/Join';
|
||||||
|
|
||||||
function getGroupResourceRedirect(key: string) {
|
function getGroupResourceRedirect(key: string) {
|
||||||
const association = useMetadataState.getState().associations.graph[`/ship/${key}`];
|
const graphs = useMetadataState.getState().associations.graph;
|
||||||
const { metadata } = association;
|
const association = graphs[`/ship/${key}`];
|
||||||
if(!association || !('graph' in metadata.config)) {
|
if(!association || !('graph' in association.metadata.config)) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
const section = association.group === association.resource ? '/messages' : association.group;
|
const section = association.group === association.resource ? '/messages' : association.group;
|
||||||
return `/~landscape${section}/resource/${metadata.config.graph}${association.resource}`;
|
return `/~landscape${section}/resource/${association.metadata.config.graph}${association.resource}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPostRedirect(key: string, segs: string[]) {
|
function getPostRedirect(key: string, segs: string[]) {
|
||||||
@ -70,8 +71,18 @@ function getGraphRedirect(link: string) {
|
|||||||
function getInviteRedirect(link: string) {
|
function getInviteRedirect(link: string) {
|
||||||
const [,,app,uid] = link.split('/');
|
const [,,app,uid] = link.split('/');
|
||||||
const invite = useInviteState.getState().invites[app][uid];
|
const invite = useInviteState.getState().invites[app][uid];
|
||||||
if(!invite) { return ''; }
|
if(!invite || (app !== 'groups' && app !== 'graph')) {
|
||||||
return { search: `?join-kind=${app}&join-path=${encodeURIComponent(resourceAsPath(invite.resource))}` };
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
const { ship, name } = invite.resource;
|
||||||
|
const alreadyJoined = getGroupResourceRedirect(`~${deSig(ship)}/${name}`);
|
||||||
|
|
||||||
|
if (alreadyJoined) {
|
||||||
|
return alreadyJoined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return { search: createJoinParams(app, resourceAsPath(invite.resource)) };
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDmRedirect(link: string) {
|
function getDmRedirect(link: string) {
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { isChannelAdmin } from '~/logic/lib/group';
|
import { isChannelAdmin } from '~/logic/lib/group';
|
||||||
import { cite } from '~/logic/lib/util';
|
import { cite } from '~/logic/lib/util';
|
||||||
|
import { createJoinParams } from '~/views/landscape/components/Join/Join';
|
||||||
|
|
||||||
const makeIndexes = () => new Map([
|
const makeIndexes = () => new Map([
|
||||||
['ships', []],
|
['ships', []],
|
||||||
['commands', []],
|
['commands', []],
|
||||||
['subscriptions', []],
|
['subscriptions', []],
|
||||||
['groups', []],
|
['groups', []],
|
||||||
['apps', []],
|
|
||||||
['other', []]
|
['other', []]
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -56,34 +56,11 @@ const commandIndex = function (currentGroup, groups, associations) {
|
|||||||
if (canAdd) {
|
if (canAdd) {
|
||||||
commands.push(result('Channel: Create', `/~landscape${workspace}/new`, 'Groups', null));
|
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;
|
return commands;
|
||||||
};
|
};
|
||||||
|
|
||||||
const appIndex = function (apps) {
|
|
||||||
// all apps are indexed from launch data
|
|
||||||
// indexed into 'apps'
|
|
||||||
const applications = [];
|
|
||||||
Object.keys(apps)
|
|
||||||
.filter((e) => {
|
|
||||||
return !['weather','clock'].includes(e);
|
|
||||||
})
|
|
||||||
.sort((a, b) => {
|
|
||||||
return a.localeCompare(b);
|
|
||||||
})
|
|
||||||
.map((e) => {
|
|
||||||
const obj = result(
|
|
||||||
apps[e].type?.basic?.title || apps[e].type.custom?.tile || e,
|
|
||||||
apps[e]?.type.basic?.linkedUrl || apps[e]?.type.custom?.linkedUrl || '',
|
|
||||||
apps[e]?.type?.basic?.title || apps[e].type.custom?.tile || e,
|
|
||||||
null
|
|
||||||
);
|
|
||||||
applications.push(obj);
|
|
||||||
});
|
|
||||||
return applications;
|
|
||||||
};
|
|
||||||
|
|
||||||
const otherIndex = function(config) {
|
const otherIndex = function(config) {
|
||||||
const other = [];
|
const other = [];
|
||||||
const idx = {
|
const idx = {
|
||||||
@ -102,7 +79,7 @@ const otherIndex = function(config) {
|
|||||||
return other;
|
return other;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function index(contacts, associations, apps, currentGroup, groups, hide): Map<string, OmniboxItem[]> {
|
export default function index(contacts, associations, currentGroup, groups, hide): Map<string, OmniboxItem[]> {
|
||||||
const indexes = makeIndexes();
|
const indexes = makeIndexes();
|
||||||
indexes.set('ships', shipIndex(contacts));
|
indexes.set('ships', shipIndex(contacts));
|
||||||
// all metadata from all apps is indexed
|
// all metadata from all apps is indexed
|
||||||
@ -164,7 +141,6 @@ export default function index(contacts, associations, apps, currentGroup, groups
|
|||||||
indexes.set('commands', commandIndex(currentGroup, groups, associations));
|
indexes.set('commands', commandIndex(currentGroup, groups, associations));
|
||||||
indexes.set('subscriptions', subscriptions);
|
indexes.set('subscriptions', subscriptions);
|
||||||
indexes.set('groups', landscape);
|
indexes.set('groups', landscape);
|
||||||
indexes.set('apps', appIndex(apps));
|
|
||||||
indexes.set('other', otherIndex(hide));
|
indexes.set('other', otherIndex(hide));
|
||||||
|
|
||||||
return indexes;
|
return indexes;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Content, GraphNode, Post, TextContent } from '@urbit/api';
|
import { BigIntOrderedMap, Content, GraphNode, Post, TextContent } from '@urbit/api';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import bigInt, { BigInteger } from 'big-integer';
|
import bigInt, { BigInteger } from 'big-integer';
|
||||||
import { buntPost } from '~/logic/lib/post';
|
import { buntPost } from '~/logic/lib/post';
|
||||||
import { unixToDa } from '~/logic/lib/util';
|
import { unixToDa } from '~/logic/lib/util';
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
import { GraphNode } from '@urbit/api';
|
import { arrToString, stringToArr, BigIntOrderedMap, BigIntArrayOrderedMap, GraphNode } from '@urbit/api';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import BigIntArrayOrderedMap, {
|
|
||||||
arrToString,
|
|
||||||
stringToArr
|
|
||||||
} from '@urbit/api/lib/BigIntArrayOrderedMap';
|
|
||||||
import bigInt, { BigInteger } from 'big-integer';
|
import bigInt, { BigInteger } from 'big-integer';
|
||||||
import produce from 'immer';
|
import produce from 'immer';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
import { Enc } from '@urbit/api';
|
|
||||||
import {
|
import {
|
||||||
|
Enc,
|
||||||
Group,
|
Group,
|
||||||
|
|
||||||
GroupPolicy, GroupUpdate,
|
GroupPolicy, GroupUpdate,
|
||||||
|
|
||||||
InvitePolicy, InvitePolicyDiff, OpenPolicy, OpenPolicyDiff, Tags
|
InvitePolicy, InvitePolicyDiff, OpenPolicy, OpenPolicyDiff, Tags
|
||||||
} from '@urbit/api/groups';
|
} from '@urbit/api';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { Cage } from '~/types/cage';
|
import { Cage } from '~/types/cage';
|
||||||
import { resourceAsPath } from '../lib/util';
|
import { resourceAsPath } from '../lib/util';
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import {
|
import {
|
||||||
|
BigIntOrderedMap,
|
||||||
HarkPlace,
|
HarkPlace,
|
||||||
Timebox,
|
Timebox,
|
||||||
HarkStats,
|
HarkStats,
|
||||||
harkBinToId,
|
harkBinToId,
|
||||||
makePatDa
|
makePatDa
|
||||||
} from '@urbit/api';
|
} from '@urbit/api';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { compose } from 'lodash/fp';
|
import { compose } from 'lodash/fp';
|
||||||
import { BaseState } from '../state/base';
|
import { BaseState } from '../state/base';
|
||||||
@ -210,6 +210,9 @@ function more(json: any, state: HarkState): HarkState {
|
|||||||
function added(json: any, state: HarkState): HarkState {
|
function added(json: any, state: HarkState): HarkState {
|
||||||
if('added' in json) {
|
if('added' in json) {
|
||||||
const { bin } = json.added;
|
const { bin } = json.added;
|
||||||
|
if(bin.place.desk !== window.desk) {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
const binId = harkBinToId(bin);
|
const binId = harkBinToId(bin);
|
||||||
state.unseen[binId] = json.added;
|
state.unseen[binId] = json.added;
|
||||||
}
|
}
|
||||||
@ -239,6 +242,9 @@ function timebox(json: any, state: HarkState): HarkState {
|
|||||||
const time = makePatDa(lid.archive);
|
const time = makePatDa(lid.archive);
|
||||||
const old = state.archive.get(time) || {};
|
const old = state.archive.get(time) || {};
|
||||||
notifications.forEach((note: any) => {
|
notifications.forEach((note: any) => {
|
||||||
|
if(note.bin.place.desk !== window.desk) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const binId = harkBinToId(note.bin);
|
const binId = harkBinToId(note.bin);
|
||||||
old[binId] = note;
|
old[binId] = note;
|
||||||
});
|
});
|
||||||
@ -246,6 +252,9 @@ function timebox(json: any, state: HarkState): HarkState {
|
|||||||
} else {
|
} else {
|
||||||
const seen = 'seen' in lid ? 'seen' : 'unseen';
|
const seen = 'seen' in lid ? 'seen' : 'unseen';
|
||||||
notifications.forEach((note: any) => {
|
notifications.forEach((note: any) => {
|
||||||
|
if(note.bin.place.desk !== window.desk) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const binId = harkBinToId(note.bin);
|
const binId = harkBinToId(note.bin);
|
||||||
state[seen][binId] = note;
|
state[seen][binId] = note;
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { InviteUpdate } from '@urbit/api/invite';
|
import { InviteUpdate } from '@urbit/api';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { BaseState } from '../state/base';
|
import { BaseState } from '../state/base';
|
||||||
import { InviteState as State } from '../state/invite';
|
import { InviteState as State } from '../state/invite';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { MetadataUpdate, Associations, ResourceAssociations } from '@urbit/api/metadata';
|
import { MetadataUpdate, Associations, ResourceAssociations } from '@urbit/api';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { Cage } from '~/types/cage';
|
import { Cage } from '~/types/cage';
|
||||||
import { BaseState } from '../state/base';
|
import { BaseState } from '../state/base';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { SettingsUpdate } from '@urbit/api/settings';
|
import { SettingsUpdate } from '@urbit/api';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { SettingsState as State } from '~/logic/state/settings';
|
import { SettingsState as State } from '~/logic/state/settings';
|
||||||
import { BaseState } from '../state/base';
|
import { BaseState } from '../state/base';
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import { patp2dec } from 'urbit-ob';
|
import { patp2dec } from 'urbit-ob';
|
||||||
import shallow from 'zustand/shallow';
|
import shallow from 'zustand/shallow';
|
||||||
|
import {
|
||||||
import { Association, deSig, GraphNode, Graphs, FlatGraphs, resourceFromPath, ThreadGraphs, getGraph, getShallowChildren, setScreen } from '@urbit/api';
|
Association, BigIntOrderedMap, deSig, GraphNode, Graphs, FlatGraphs, resourceFromPath, ThreadGraphs, getGraph, getShallowChildren, setScreen,
|
||||||
|
addDmMessage, addPost, Content, getDeepOlderThan, getFirstborn, getNewest, getNode, getOlderSiblings, getYoungerSiblings, markPending, Post, addNode, GraphNodePoke
|
||||||
|
} from '@urbit/api';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { createState, createSubscription, reduceStateN, pokeOptimisticallyN } from './base';
|
import { createState, createSubscription, reduceStateN, pokeOptimisticallyN } from './base';
|
||||||
import airlock from '~/logic/api';
|
import airlock from '~/logic/api';
|
||||||
import { addDmMessage, addPost, Content, getDeepOlderThan, getFirstborn, getNewest, getNode, getOlderSiblings, getYoungerSiblings, markPending, Post, addNode, GraphNodePoke } from '@urbit/api/graph';
|
|
||||||
import { GraphReducer, reduceDm } from '../reducers/graph-update';
|
import { GraphReducer, reduceDm } from '../reducers/graph-update';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { clone } from '../lib/util';
|
import { clone } from '../lib/util';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
archive,
|
archive,
|
||||||
|
BigIntOrderedMap,
|
||||||
HarkBin,
|
HarkBin,
|
||||||
markCountAsRead,
|
markCountAsRead,
|
||||||
NotificationGraphConfig,
|
NotificationGraphConfig,
|
||||||
@ -15,7 +16,6 @@ import {
|
|||||||
import { Poke } from '@urbit/http-api';
|
import { Poke } from '@urbit/http-api';
|
||||||
import { patp2dec } from 'urbit-ob';
|
import { patp2dec } from 'urbit-ob';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import api from '~/logic/api';
|
import api from '~/logic/api';
|
||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Association, Associations, MetadataUpdatePreview } from '@urbit/api/metadata';
|
import { Association, Associations, MetadataUpdatePreview } from '@urbit/api';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
|
@ -16,8 +16,7 @@ import {
|
|||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { reduceUpdate } from '../reducers/settings-update';
|
import { reduceUpdate } from '../reducers/settings-update';
|
||||||
import airlock from '~/logic/api';
|
import airlock from '~/logic/api';
|
||||||
import { Contact, getDeskSettings, Value } from '@urbit/api';
|
import { Contact, getDeskSettings, putEntry, Value } from '@urbit/api';
|
||||||
import { putEntry } from '@urbit/api/settings';
|
|
||||||
|
|
||||||
export interface ShortcutMapping {
|
export interface ShortcutMapping {
|
||||||
cycleForward: string;
|
cycleForward: string;
|
||||||
@ -41,6 +40,7 @@ export interface SettingsState {
|
|||||||
hideUnreads: boolean;
|
hideUnreads: boolean;
|
||||||
hideGroups: boolean;
|
hideGroups: boolean;
|
||||||
hideUtilities: boolean;
|
hideUtilities: boolean;
|
||||||
|
disableSpellcheck: boolean;
|
||||||
};
|
};
|
||||||
keyboard: ShortcutMapping;
|
keyboard: ShortcutMapping;
|
||||||
remoteContentPolicy: RemoteContentPolicy;
|
remoteContentPolicy: RemoteContentPolicy;
|
||||||
@ -73,7 +73,8 @@ const useSettingsState = createState<SettingsState>(
|
|||||||
hideAvatars: false,
|
hideAvatars: false,
|
||||||
hideUnreads: false,
|
hideUnreads: false,
|
||||||
hideGroups: false,
|
hideGroups: false,
|
||||||
hideUtilities: false
|
hideUtilities: false,
|
||||||
|
disableSpellcheck: false
|
||||||
},
|
},
|
||||||
remoteContentPolicy: {
|
remoteContentPolicy: {
|
||||||
imageShown: true,
|
imageShown: true,
|
||||||
|
@ -3,7 +3,7 @@ import { Meta, Story } from '@storybook/react';
|
|||||||
|
|
||||||
import { Box } from '@tlon/indigo-react';
|
import { Box } from '@tlon/indigo-react';
|
||||||
import { InviteItem, InviteItemProps } from '~/views/components/Invite';
|
import { InviteItem, InviteItemProps } from '~/views/components/Invite';
|
||||||
import { JoinProgress } from '@urbit/api/groups';
|
import { JoinProgress } from '@urbit/api';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
title: 'Notifications/Invite',
|
title: 'Notifications/Invite',
|
||||||
|
@ -4,8 +4,7 @@ import { withDesign } from 'storybook-addon-designs';
|
|||||||
|
|
||||||
import { Col, Row } from '@tlon/indigo-react';
|
import { Col, Row } from '@tlon/indigo-react';
|
||||||
import { LinkBlockItem } from '~/views/apps/links/components/LinkBlockItem';
|
import { LinkBlockItem } from '~/views/apps/links/components/LinkBlockItem';
|
||||||
import { createPost, GraphNode } from '@urbit/api';
|
import { BigIntOrderedMap, createPost, GraphNode } from '@urbit/api';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
title: 'Collections/BlockItem',
|
title: 'Collections/BlockItem',
|
||||||
|
@ -4,8 +4,7 @@ import { withDesign } from 'storybook-addon-designs';
|
|||||||
|
|
||||||
import { Box } from '@tlon/indigo-react';
|
import { Box } from '@tlon/indigo-react';
|
||||||
import { LinkDetail } from '~/views/apps/links/components/LinkDetail';
|
import { LinkDetail } from '~/views/apps/links/components/LinkDetail';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
import { BigIntOrderedMap, GraphNode } from '@urbit/api';
|
||||||
import { GraphNode } from '@urbit/api';
|
|
||||||
import useMetadataState from '~/logic/state/metadata';
|
import useMetadataState from '~/logic/state/metadata';
|
||||||
import { makeComment } from '~/logic/lib/fixtures';
|
import { makeComment } from '~/logic/lib/fixtures';
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { ContactUpdate, GroupUpdate, InviteUpdate, MetadataUpdate } from '@urbit/api';
|
import { ContactUpdate, GroupUpdate, InviteUpdate, MetadataUpdate, SettingsUpdate } from '@urbit/api';
|
||||||
import { SettingsUpdate } from '@urbit/api/settings';
|
|
||||||
import { ConnectionStatus } from './connection';
|
import { ConnectionStatus } from './connection';
|
||||||
import { LaunchUpdate, WeatherState } from './launch-update';
|
import { LaunchUpdate, WeatherState } from './launch-update';
|
||||||
import { LocalUpdate } from './local-update';
|
import { LocalUpdate } from './local-update';
|
||||||
|
@ -27,7 +27,7 @@ import './css/indigo-static.css';
|
|||||||
import { Content } from './landscape/components/Content';
|
import { Content } from './landscape/components/Content';
|
||||||
import './landscape/css/custom.css';
|
import './landscape/css/custom.css';
|
||||||
import { bootstrapApi } from '~/logic/api/bootstrap';
|
import { bootstrapApi } from '~/logic/api/bootstrap';
|
||||||
import { uxToHex } from '@urbit/api/dist';
|
import { uxToHex } from '@urbit/api';
|
||||||
|
|
||||||
function ensureValidHex(color) {
|
function ensureValidHex(color) {
|
||||||
if (!color)
|
if (!color)
|
||||||
@ -43,7 +43,11 @@ const Root = withState(styled.div`
|
|||||||
font-family: ${p => p.theme.fonts.sans};
|
font-family: ${p => p.theme.fonts.sans};
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0;
|
padding-left: env(safe-area-inset-left, 0px);
|
||||||
|
padding-right: env(safe-area-inset-right, 0px);
|
||||||
|
padding-top: env(safe-area-inset-top, 0px);
|
||||||
|
padding-bottom: env(safe-area-inset-bottom, 0px);
|
||||||
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
${p => p.display.backgroundType === 'url' ? `
|
${p => p.display.backgroundType === 'url' ? `
|
||||||
background-image: url('${p.display.background}');
|
background-image: url('${p.display.background}');
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Content, createPost, fetchIsAllowed, Post, removePosts, deSig } from '@urbit/api';
|
import { Association, Content, createPost, fetchIsAllowed, Post, removePosts, deSig } from '@urbit/api';
|
||||||
import { Association } from '@urbit/api/metadata';
|
|
||||||
import { BigInteger } from 'big-integer';
|
import { BigInteger } from 'big-integer';
|
||||||
import React, {
|
import React, {
|
||||||
ReactElement, useCallback,
|
ReactElement, useCallback,
|
||||||
@ -90,7 +89,7 @@ const ChatResource = (props: ChatResourceProps): ReactElement => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const isAdmin = useMemo(
|
const isAdmin = useMemo(
|
||||||
() => (group ? group.tags.role.admin.has(`~${window.ship}`) : false),
|
() => group ? group.tags.role.admin.has(deSig(window.ship)) : false,
|
||||||
[group]
|
[group]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { acceptDm, cite, Content, declineDm, deSig, Post, removeDmMessage } from '@urbit/api';
|
import { acceptDm, cite, Content, declineDm, deSig, Post } from '@urbit/api';
|
||||||
import React, { useCallback, useEffect } from 'react';
|
import React, { useCallback, useEffect } from 'react';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import bigInt from 'big-integer';
|
import bigInt from 'big-integer';
|
||||||
@ -77,8 +77,10 @@ export function DmResource(props: DmResourceProps) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getNewest(`~${window.ship}`, 'dm-inbox', 100, `/${patp2dec(ship)}`);
|
if(dm.size === 0 && !pending) {
|
||||||
}, [ship]);
|
getNewest(`~${window.ship}`, 'dm-inbox', 100, `/${patp2dec(ship)}`);
|
||||||
|
}
|
||||||
|
}, [ship, dm]);
|
||||||
|
|
||||||
const fetchMessages = useCallback(
|
const fetchMessages = useCallback(
|
||||||
async (newer: boolean) => {
|
async (newer: boolean) => {
|
||||||
@ -125,10 +127,6 @@ export function DmResource(props: DmResourceProps) {
|
|||||||
[ship, addDmMessage]
|
[ship, addDmMessage]
|
||||||
);
|
);
|
||||||
|
|
||||||
const onDelete = useCallback((msg: Post) => {
|
|
||||||
airlock.poke(removeDmMessage(`~${window.ship}`, msg.index));
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const onAccept = async () => {
|
const onAccept = async () => {
|
||||||
await airlock.poke(acceptDm(ship));
|
await airlock.poke(acceptDm(ship));
|
||||||
};
|
};
|
||||||
@ -136,6 +134,7 @@ export function DmResource(props: DmResourceProps) {
|
|||||||
history.push('/~landscape/messages');
|
history.push('/~landscape/messages');
|
||||||
await airlock.poke(declineDm(ship));
|
await airlock.poke(declineDm(ship));
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Col width="100%" height="100%" overflow="hidden">
|
<Col width="100%" height="100%" overflow="hidden">
|
||||||
<Row
|
<Row
|
||||||
@ -206,7 +205,6 @@ export function DmResource(props: DmResourceProps) {
|
|||||||
onReply={quoteReply}
|
onReply={quoteReply}
|
||||||
fetchMessages={fetchMessages}
|
fetchMessages={fetchMessages}
|
||||||
dismissUnread={dismissUnread}
|
dismissUnread={dismissUnread}
|
||||||
onDelete={onDelete}
|
|
||||||
getPermalink={() => undefined}
|
getPermalink={() => undefined}
|
||||||
isAdmin={false}
|
isAdmin={false}
|
||||||
onSubmit={onSubmit}
|
onSubmit={onSubmit}
|
||||||
|
@ -8,6 +8,7 @@ import React, { useRef, ClipboardEvent, useEffect, useImperativeHandle } from 'r
|
|||||||
import { Controlled as CodeEditor } from 'react-codemirror2';
|
import { Controlled as CodeEditor } from 'react-codemirror2';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { MOBILE_BROWSER_REGEX } from '~/logic/lib/util';
|
import { MOBILE_BROWSER_REGEX } from '~/logic/lib/util';
|
||||||
|
import useSettingsState from '~/logic/state/settings';
|
||||||
import '../css/custom.css';
|
import '../css/custom.css';
|
||||||
import { useChatStore } from './ChatPane';
|
import { useChatStore } from './ChatPane';
|
||||||
|
|
||||||
@ -131,6 +132,8 @@ const ChatEditor = React.forwardRef<CodeMirrorShim, ChatEditorProps>(({ inCodeMo
|
|||||||
useImperativeHandle(ref, () => editorRef.current);
|
useImperativeHandle(ref, () => editorRef.current);
|
||||||
const editor = editorRef.current;
|
const editor = editorRef.current;
|
||||||
|
|
||||||
|
const disableSpellcheck = useSettingsState(s => s.calm.disableSpellcheck);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
message,
|
message,
|
||||||
setMessage
|
setMessage
|
||||||
@ -234,6 +237,7 @@ const ChatEditor = React.forwardRef<CodeMirrorShim, ChatEditorProps>(({ inCodeMo
|
|||||||
fontFamily={inCodeMode ? 'Source Code Pro' : 'Inter'}
|
fontFamily={inCodeMode ? 'Source Code Pro' : 'Inter'}
|
||||||
fontSize={1}
|
fontSize={1}
|
||||||
lineHeight="tall"
|
lineHeight="tall"
|
||||||
|
spellCheck={!disableSpellcheck}
|
||||||
value={message}
|
value={message}
|
||||||
rows={1}
|
rows={1}
|
||||||
style={{ width: '100%', background: 'transparent', color: 'currentColor' }}
|
style={{ width: '100%', background: 'transparent', color: 'currentColor' }}
|
||||||
|
@ -284,6 +284,9 @@ const MessageActionItem = (props) => {
|
|||||||
const MessageActions = ({ onReply, onDelete, msg, isAdmin, permalink }) => {
|
const MessageActions = ({ onReply, onDelete, msg, isAdmin, permalink }) => {
|
||||||
const isOwn = () => msg.author === window.ship;
|
const isOwn = () => msg.author === window.ship;
|
||||||
const { doCopy, copyDisplay } = useCopy(permalink, 'Copy Message Link');
|
const { doCopy, copyDisplay } = useCopy(permalink, 'Copy Message Link');
|
||||||
|
const showCopyMessageLink = Boolean(permalink);
|
||||||
|
const showDelete = (isAdmin || isOwn()) && onDelete;
|
||||||
|
const showDropdown = showCopyMessageLink || showDelete;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
@ -304,49 +307,46 @@ const MessageActions = ({ onReply, onDelete, msg, isAdmin, permalink }) => {
|
|||||||
>
|
>
|
||||||
<Icon icon='Chat' size={3} />
|
<Icon icon='Chat' size={3} />
|
||||||
</Box>
|
</Box>
|
||||||
<Dropdown
|
{showDropdown && (
|
||||||
dropWidth='250px'
|
<Dropdown
|
||||||
width='auto'
|
dropWidth='250px'
|
||||||
alignY='top'
|
width='auto'
|
||||||
alignX='right'
|
alignY='top'
|
||||||
flexShrink={0}
|
alignX='right'
|
||||||
offsetY={8}
|
flexShrink={0}
|
||||||
offsetX={-24}
|
offsetY={8}
|
||||||
options={
|
offsetX={-24}
|
||||||
<Col
|
options={
|
||||||
py={2}
|
<Col
|
||||||
backgroundColor='white'
|
py={2}
|
||||||
color='washedGray'
|
backgroundColor='white'
|
||||||
border={1}
|
color='washedGray'
|
||||||
borderRadius={2}
|
border={1}
|
||||||
borderColor='lightGray'
|
borderRadius={2}
|
||||||
boxShadow='0px 0px 0px 3px'
|
borderColor='lightGray'
|
||||||
>
|
boxShadow='0px 0px 0px 3px'
|
||||||
<MessageActionItem onClick={() => onReply(msg)}>
|
>
|
||||||
Reply
|
<MessageActionItem onClick={() => onReply(msg)}>
|
||||||
</MessageActionItem>
|
Reply
|
||||||
{permalink ? (
|
|
||||||
<MessageActionItem onClick={doCopy}>
|
|
||||||
{copyDisplay}
|
|
||||||
</MessageActionItem>
|
</MessageActionItem>
|
||||||
) : null }
|
{showCopyMessageLink && (
|
||||||
{(isAdmin || isOwn()) ? (
|
<MessageActionItem onClick={doCopy}>
|
||||||
<MessageActionItem onClick={e => onDelete(msg)} color='red'>
|
{copyDisplay}
|
||||||
Delete Message
|
</MessageActionItem>
|
||||||
</MessageActionItem>
|
)}
|
||||||
) : null}
|
{showDelete && (
|
||||||
{false && (
|
<MessageActionItem onClick={e => onDelete(msg)} color='red'>
|
||||||
<MessageActionItem onClick={e => console.log(e)}>
|
Delete Message
|
||||||
View Signature
|
</MessageActionItem>
|
||||||
</MessageActionItem>
|
)}
|
||||||
)}
|
</Col>
|
||||||
</Col>
|
}
|
||||||
}
|
>
|
||||||
>
|
<Box padding={1} size={'24px'} cursor='pointer'>
|
||||||
<Box padding={1} size={'24px'} cursor='pointer'>
|
<Icon icon='Menu' size={3} />
|
||||||
<Icon icon='Menu' size={3} />
|
</Box>
|
||||||
</Box>
|
</Dropdown>
|
||||||
</Dropdown>
|
)}
|
||||||
</Row>
|
</Row>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
@ -418,7 +418,7 @@ function ChatMessage(props: ChatMessageProps) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onReply = props?.onReply || emptyCallback;
|
const onReply = props?.onReply || emptyCallback;
|
||||||
const onDelete = props?.onDelete || emptyCallback;
|
const onDelete = props?.onDelete; // If missing hide delete action
|
||||||
const transcluded = props?.transcluded || 0;
|
const transcluded = props?.transcluded || 0;
|
||||||
const renderSigil = props.renderSigil || (Boolean(nextMsg && msg.author !== nextMsg.author) ||
|
const renderSigil = props.renderSigil || (Boolean(nextMsg && msg.author !== nextMsg.author) ||
|
||||||
!nextMsg
|
!nextMsg
|
||||||
@ -513,111 +513,3 @@ function ChatMessage(props: ChatMessageProps) {
|
|||||||
export default React.memo(React.forwardRef((props: Omit<ChatMessageProps, 'innerRef'>, ref: any) => (
|
export default React.memo(React.forwardRef((props: Omit<ChatMessageProps, 'innerRef'>, ref: any) => (
|
||||||
<ChatMessage {...props} innerRef={ref} />
|
<ChatMessage {...props} innerRef={ref} />
|
||||||
)));
|
)));
|
||||||
|
|
||||||
export const MessagePlaceholder = ({
|
|
||||||
height,
|
|
||||||
index,
|
|
||||||
className = '',
|
|
||||||
style = {},
|
|
||||||
...props
|
|
||||||
}) => (
|
|
||||||
<Box
|
|
||||||
width='100%'
|
|
||||||
fontSize={2}
|
|
||||||
pl={3}
|
|
||||||
pt={4}
|
|
||||||
pr={3}
|
|
||||||
display='flex'
|
|
||||||
lineHeight='tall'
|
|
||||||
className={className}
|
|
||||||
style={{ height, ...style }}
|
|
||||||
{...props}
|
|
||||||
>
|
|
||||||
<Box
|
|
||||||
pr={3}
|
|
||||||
verticalAlign='top'
|
|
||||||
backgroundColor='white'
|
|
||||||
style={{ float: 'left' }}
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
display='block'
|
|
||||||
background='washedGray'
|
|
||||||
width='24px'
|
|
||||||
height='24px'
|
|
||||||
borderRadius='50%'
|
|
||||||
style={{
|
|
||||||
visibility: index % 5 == 0 ? 'initial' : 'hidden'
|
|
||||||
}}
|
|
||||||
></Text>
|
|
||||||
</Box>
|
|
||||||
<Box
|
|
||||||
style={{ float: 'right', flexGrow: 1 }}
|
|
||||||
color='black'
|
|
||||||
className='clamp-message'
|
|
||||||
>
|
|
||||||
<Box
|
|
||||||
className='hide-child'
|
|
||||||
paddingTop={4}
|
|
||||||
style={{ visibility: index % 5 == 0 ? 'initial' : 'hidden' }}
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
display='inline-block'
|
|
||||||
verticalAlign='middle'
|
|
||||||
fontSize={0}
|
|
||||||
color='washedGray'
|
|
||||||
cursor='default'
|
|
||||||
>
|
|
||||||
<Text maxWidth='32rem' display='block'>
|
|
||||||
<Text
|
|
||||||
backgroundColor='washedGray'
|
|
||||||
borderRadius={2}
|
|
||||||
display='block'
|
|
||||||
width='100%'
|
|
||||||
height='100%'
|
|
||||||
></Text>
|
|
||||||
</Text>
|
|
||||||
</Text>
|
|
||||||
<Text
|
|
||||||
display='inline-block'
|
|
||||||
mono
|
|
||||||
verticalAlign='middle'
|
|
||||||
fontSize={0}
|
|
||||||
color='washedGray'
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
background='washedGray'
|
|
||||||
borderRadius={2}
|
|
||||||
display='block'
|
|
||||||
height='1em'
|
|
||||||
style={{ width: `${((index % 3) + 1) * 3}em` }}
|
|
||||||
></Text>
|
|
||||||
</Text>
|
|
||||||
<Text
|
|
||||||
mono
|
|
||||||
verticalAlign='middle'
|
|
||||||
fontSize={0}
|
|
||||||
ml={2}
|
|
||||||
color='washedGray'
|
|
||||||
borderRadius={2}
|
|
||||||
display={['none', 'inline-block']}
|
|
||||||
className='child'
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
backgroundColor='washedGray'
|
|
||||||
borderRadius={2}
|
|
||||||
display='block'
|
|
||||||
width='100%'
|
|
||||||
height='100%'
|
|
||||||
></Text>
|
|
||||||
</Text>
|
|
||||||
</Box>
|
|
||||||
<Text
|
|
||||||
display='block'
|
|
||||||
backgroundColor='washedGray'
|
|
||||||
borderRadius={2}
|
|
||||||
height='1em'
|
|
||||||
style={{ width: `${(index % 5) * 20}%` }}
|
|
||||||
></Text>
|
|
||||||
</Box>
|
|
||||||
</Box>
|
|
||||||
);
|
|
||||||
|
@ -161,6 +161,13 @@ class ChatWindow extends Component<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onTopLoaded = () => {
|
||||||
|
const { graphSize, unreadCount } = this.props;
|
||||||
|
if(graphSize >= unreadCount) {
|
||||||
|
this.props.dismissUnread();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
onBottomLoaded = () => {
|
onBottomLoaded = () => {
|
||||||
if(this.state.unreadIndex.eq(bigInt.zero)) {
|
if(this.state.unreadIndex.eq(bigInt.zero)) {
|
||||||
this.calculateUnreadIndex();
|
this.calculateUnreadIndex();
|
||||||
@ -274,6 +281,7 @@ class ChatWindow extends Component<
|
|||||||
origin='bottom'
|
origin='bottom'
|
||||||
style={virtScrollerStyle}
|
style={virtScrollerStyle}
|
||||||
onBottomLoaded={this.onBottomLoaded}
|
onBottomLoaded={this.onBottomLoaded}
|
||||||
|
onTopLoaded={this.onTopLoaded}
|
||||||
// @ts-ignore paging @liam-fitzgerald on virtualscroller props
|
// @ts-ignore paging @liam-fitzgerald on virtualscroller props
|
||||||
onScroll={this.onScroll}
|
onScroll={this.onScroll}
|
||||||
data={graph}
|
data={graph}
|
||||||
|
@ -12,7 +12,7 @@ import ModalButton from "./components/ModalButton";
|
|||||||
import Tiles from "./components/tiles";
|
import Tiles from "./components/tiles";
|
||||||
import Tile from "./components/tiles/tile";
|
import Tile from "./components/tiles/tile";
|
||||||
import "./css/custom.css";
|
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)`
|
const ScrollbarLessBox = styled(Box)`
|
||||||
scrollbar-width: none !important;
|
scrollbar-width: none !important;
|
||||||
@ -40,7 +40,7 @@ export const LaunchApp = (props: LaunchAppProps): ReactElement | null => {
|
|||||||
</title>
|
</title>
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<Route path="/join/:ship/:name">
|
<Route path="/join/:ship/:name">
|
||||||
<JoinRoute modal />
|
<JoinRoute />
|
||||||
</Route>
|
</Route>
|
||||||
<ScrollbarLessBox
|
<ScrollbarLessBox
|
||||||
height="100%"
|
height="100%"
|
||||||
@ -94,7 +94,7 @@ export const LaunchApp = (props: LaunchAppProps): ReactElement | null => {
|
|||||||
border={0}
|
border={0}
|
||||||
p={0}
|
p={0}
|
||||||
borderRadius={2}
|
borderRadius={2}
|
||||||
onClick={() => history.push({ search: "?join-kind=group" })}
|
onClick={() => history.push({ search: createJoinParams('groups') })}
|
||||||
>
|
>
|
||||||
<Row backgroundColor="white" gapX="2" p={2} height="100%" width="100%" alignItems="center">
|
<Row backgroundColor="white" gapX="2" p={2} height="100%" width="100%" alignItems="center">
|
||||||
<Icon icon="BootNode" />
|
<Icon icon="BootNode" />
|
||||||
|
@ -22,6 +22,7 @@ import useSettingsState, {
|
|||||||
} from "~/logic/state/settings";
|
} from "~/logic/state/settings";
|
||||||
import Tile from "../components/tiles/tile";
|
import Tile from "../components/tiles/tile";
|
||||||
import { useQuery } from "~/logic/lib/useQuery";
|
import { useQuery } from "~/logic/lib/useQuery";
|
||||||
|
import { createJoinParams } from "~/views/landscape/components/Join/Join";
|
||||||
|
|
||||||
const sortGroupsAlph = (a: Association, b: Association) =>
|
const sortGroupsAlph = (a: Association, b: Association) =>
|
||||||
alphabeticalOrder(a.metadata.title, b.metadata.title);
|
alphabeticalOrder(a.metadata.title, b.metadata.title);
|
||||||
@ -123,8 +124,7 @@ function PendingGroup(props: PendingGroupProps) {
|
|||||||
const title = preview?.metadata?.title || path;
|
const title = preview?.metadata?.title || path;
|
||||||
const { toQuery } = useQuery();
|
const { toQuery } = useQuery();
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
const { ship, name } = resourceFromPath(path);
|
history.push(toQuery(createJoinParams('groups', path, null, false)));
|
||||||
history.push(toQuery({ "join-kind": "groups", "join-path": path }));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const joining = useGroupState((s) => s.pendingJoin[path]?.progress);
|
const joining = useGroupState((s) => s.pendingJoin[path]?.progress);
|
||||||
@ -143,6 +143,8 @@ function PendingGroup(props: PendingGroupProps) {
|
|||||||
<Box>
|
<Box>
|
||||||
{!joining ? (
|
{!joining ? (
|
||||||
<Text color="blue">Invited</Text>
|
<Text color="blue">Invited</Text>
|
||||||
|
) : joining === 'no-perms' || joining == 'strange' ? (
|
||||||
|
<Text color="red">Join Failed</Text>
|
||||||
) : joining !== "done" ? (
|
) : joining !== "done" ? (
|
||||||
<Text gray>Joining...</Text>
|
<Text gray>Joining...</Text>
|
||||||
) : (
|
) : (
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { Box, Center, Col, LoadingSpinner, Text } from '@tlon/indigo-react';
|
import { Box, Center, Col, LoadingSpinner, Text } from '@tlon/indigo-react';
|
||||||
import { deSig, Group } from '@urbit/api';
|
import { Association, deSig, Group } from '@urbit/api';
|
||||||
import { Association } from '@urbit/api/metadata';
|
|
||||||
import bigInt from 'big-integer';
|
import bigInt from 'big-integer';
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { Link, Route, Switch, useLocation } from 'react-router-dom';
|
import { Link, Route, Switch, useLocation } from 'react-router-dom';
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
import { Col, Row, Text } from '@tlon/indigo-react';
|
import { Col, Row, Text } from '@tlon/indigo-react';
|
||||||
import { Association, Graph, GraphNode, markEachAsRead } from '@urbit/api';
|
import { Association, BigIntOrderedMap, Graph, GraphNode, markEachAsRead } from '@urbit/api';
|
||||||
import React, { useCallback, useState, useMemo, useEffect } from 'react';
|
import React, { useCallback, useState, useMemo, useEffect } from 'react';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { useResize } from '~/logic/lib/useResize';
|
import { useResize } from '~/logic/lib/useResize';
|
||||||
import { LinkBlockItem } from './LinkBlockItem';
|
import { LinkBlockItem } from './LinkBlockItem';
|
||||||
import { LinkBlockInput } from './LinkBlockInput';
|
import { LinkBlockInput } from './LinkBlockInput';
|
||||||
import useLocalState from '~/logic/state/local';
|
import useLocalState from '~/logic/state/local';
|
||||||
import BigIntOrderedMap from '@urbit/api/lib/BigIntOrderedMap';
|
|
||||||
import bigInt from 'big-integer';
|
import bigInt from 'big-integer';
|
||||||
import airlock from '~/logic/api';
|
import airlock from '~/logic/api';
|
||||||
import useHarkState, { selHarkGraph } from '~/logic/state/hark';
|
import useHarkState, { selHarkGraph } from '~/logic/state/hark';
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user