Re-implements the behavior of the previous azimuth-tracker as an app
that pokes and peers eth-watcher. Should have maintained identical
outward semantics to the original.
When configuring a watchdog on a path that already exists, we now
"overwrite" it, meaning we throw away all history and trawl the node
for logs again.
If the only config change is the url, however, we silently modify it,
and simply use it "from this point onward".
This matches the behavior of the original azimuth-tracker.
In order to give an initial response to incoming subscriptions (without
resorting to retrieving that data from chain again) we now store event
log history in state.
Instead of discarding pending-logs entirely after sending out updates,
we add them to the watchdog's history.
Just like pending-logs, we remove from the head during a rewind (though
not before exhausting the pending-logs).
Kicks the update timer on application start, then sets a new timer
whenever it's awoken. This aims to ensure eth-watcher never stops
looking for updates periodically.
No longer overwrite messages' timestamp on-receive, instead keeping whatever
timestamp was set by the sender.
This behavior matches that of the late Hall.
* jt/release-pills:
build: add ropsten-pills target to Makefile
build: add Ropsten derivations for arvo and pills
vere: change default bootstrap pill URI
Signed-off-by: Jared Tobin <jared@tlon.io>
Uses the logic existing in azimuth-tracker to implement a new
eth-watcher, which can look at Ethereum nodes for _any_ events, as
opposed to exclusively a subset of the Azimuth contract's events.
Azimuth-tracker will be reimplemented as a dependent of this in
forthcoming commits.
These were deprecated in favor of azimuth-tracker in #1320.
(Azimuth-tracker, however, isn't a general-purpose Ethereum log watcher
tool. Commits to transform it into a more broadly useful tool are
forthcoming.)
Until now, clients of Jael have had to store the first-seen rift if they
want to reliably detect breaches. Otherwise, they would get a false
positive if they heard an old message about a breach (eg if you kick
azimuth-tracker). Clay and Gall did this correctly, but Ames did not.
Jael already maintains this state, so I added a notification to the
existing subscription that happens whenever it notices a breach (a diff
or full where the new rift is greater than the old one).
Because this is an issue on the live network, I wrote state adapters
for Gall and Clay. The Gall one just removes the rift from our state,
but the Clay one is much more involved because we have to upgrade
instances of the clad monad that are possibly in progress.
Specifically, since more input is possible than before, we must wrap any
in-progress instances of the monad in a function that handles the
potential new input from Jael. This temporarily preservers a copy of
the old kernel, but only until the current commit/merge/update has
completed.
The real solution for Clay is to factor out those IO-heavy instances to
userspace tapp/async/imp/threads, and if an upgrade happens in the
middle, you should simply restart them.
Fixes#1852
Vere will attempt to download a pill from https://bootstrap.urbit.org if
not given one explicitly. These pill filenames have traditionally had
the format:
urbit-$URBIT_VERSION.pill
but this is inconsistent with the manner in which versions are referred
to elsewhere. For example, release binaries are packaged in tarballs
with the names:
urbit-linux64-v$URBIT_VERSION.tgz
urbit-darwin-v$URBIT_VERSION.tgz
Note the 'v' prepended to URBIT_VERSION.
From v0.9.2 forward it is expected that bootstrap pills will also use
the 'v' prefix, i.e.
urbit-v$URBIT_VERSION.pill
so this commit makes the appropriate change in the daemon.
* claz-invites-newline:
claz: do invite file reading in +read-invites
claz: ignore empty lines in invites file
Signed-off-by: Jared Tobin <jared@tlon.io>
* publish-fixes:
publish: auto-resubscribe on quit, crash on failed subscription
publish: added permission logic to %serve and import flows
Signed-off-by: Jared Tobin <jared@tlon.io>
fc7901d2 refactored much of +ap-peek, but introduced a bug in the
process. The relevant diff from that commit is as follows:
- =/ =path [ren tyl]
- =/ =vase !>((slag p.u.cug path))
- (ap-slam q.u.cug p.arm vase)
+ =/ index p.u.maybe-arm
+ =/ term q.u.maybe-arm
+ =/ =vase
+ =/ =path [term tyl]
+ =/ raw (slag index path)
+ !> raw
+ (ap-slam term p.arm vase)
Note that [ren tyl] was replaced with [term tyl], where 'term' and 'ren'
are not equal. This commit merely rights that wrong.
* worker-memory:
u3: removes "worker_send_replace" printf
u3: statically measure memory on startup if < 1/2 the loom is free
u3: restore memory reclamation every 1k events
u3: print the size of the free lists on |mass
Signed-off-by: Jared Tobin <jared@tlon.io>
* claz-checks:
claz: group state check arms together
claz: factor asserts out of callsites
claz: check pool sizes when inviting
claz: check planet availability for %invites
claz: print proper error messages
Signed-off-by: Jared Tobin <jared@tlon.io>
This test depends on the ames protocol version, and so should probably
be rewritten. It's currently holding up a breach, so it's most
expedient to just disable it for the time being.
09cb5f2 added a %send-point call, which is meant to target the delegated sending
contract. For %invites batches, this was the case. Handling of %single, however,
still sent all calls to the ecliptic contract.
This looks at the call tag to determine the target contract.
Per yosoyubik's commentary in urbit/urbit#1799:
The test is expecting that qeu to not be correct.. when it is.
The test [98 [97 ~ ~] [100 ~ [99 ~ ~]]] is a correct queue if we look at
vertical ordering: (mor 98 97), (mor 98 100) & (mor 100 99) all return
%.y, so vertical ordering is correct.
The previous implementation of +apt:to checked only horizontal ordering
between siblings, in this case that would fail: (mor 97 100) returns
%.n, but that is not how you check correctness of hoon treaps.
The solution is to modify that test with a proper "incorrect" +qeu, for
example: ((soft (qeu)) [97 [98 ~ ~] [100 ~ [99 ~ ~]]]). Vertical
ordering is not correct with any of the children.
* algorithm-tests:
pills: update solid
tests: unit tests for +in (set)
tests: unit tests for +to (queue)
tests: unit tests for +by (map)
tests: unit tests for +differ (diff/merge)
hoon: fix for +uno/uni (#1779) set/map union
hoon: fix for +apt:to (#1778) queue correctness
Signed-off-by: Jared Tobin <jared@tlon.io>
For generating many sendPoint() transactions for the Delegated Sending
contract. Specify what ship to send the invites as, and a path to a file
containing lines of "~ship,~ticket,0xaddress".
Comes with a generator, |claz-invites, for generating such files, given
a star and a range of its children (and an output path).
* odyssey-wip: (31 commits)
chat-cli: Add clarity
drum: Boot with %chat-cli, without %hall & %talk
chat-cli: Cosmetic improvements
chat: Move eval logic out of /lib/chat-json
chat-cli: Properly support deleting local chats
chat-cli: Subscribe to /updates instead of /all
chat: Move eval logic into lib
chat: removed unnecessary cast
chat: removed overly specific pattern match
chat: style fix for a comment
chat: remove poke-noun arms
chat: fixed eval function to disable scry
chat-cli: Simplify message command type & logic
chat-cli: Implement permission management
chat: /primary path provides truncated initial as well as updates
chat: style fixes, removed some redirect bugs from chat
chat-cli: Match store and hook's path handling
chat-cli: Update prompt on-create
chat: changed wire format and quitting subscription properly on ban
chat-cli: Add debug poke for connecting to store
...
Signed-off-by: Jared Tobin <jared@tlon.io>
Since the current implementation of ;leave is silently destroying state
instead of unsubscribing, we disallow running ;leave on local chats and
provide an explicit ;delete instead.
Set security type during ;create. Use ;invite and ;banish to dis/allow
ships from reading and/or writing.
Talks to the group-store to modify permission groups. Scries into
permission-store to check for white- vs blacklist.
Creating a mailbox would refresh the prompt before setting a new
audience, instead of after. This change corrects the behavior.
Also updates glyph binding code and print style.
Renames, refactors, and occasionally rewrites many of the arms used
within the application. Splits +sh into +sh-in and +sh-out, improves
naming for rendering cores, moves arms around for better organization,
and adds descriptions to all arms.
Brings it largely up to parity with Talk, save for features relating to:
- presence & nicknames
- circle management (permissions, sources)
- deprecated message types
In addition to implementing remaining functionality for basic usage
patterns, makes the following changes:
- glyphs per target, not multiple targets
- assume /~ship/path paths are created/used by the chat-hook
Code cleanup pending.
The ivory pill had not been rolled after the last changes to zuse,
meaning that you could no longer boot a ship. Also fixes .gitignore
so as to not hide old build artifacts which could interfere with
picking up changes to the ivory pill.
The subtree in pkg/arvo apparently still has a README in it, which had
gotten only slightly out of sync with the overall project README. This
commit updates its 'contributing' section to point at the appropriate
contributing document.
%gall currently prints
[%gall-booting <app> p=<ship> q=<desk>]
whenever it receives a %conf (i.e., when it boots an app). This turns
up in many of the places the old, less-informative '%mo-not-running'
printf did, but it's of similarly little use, and mainly serves to
create redundant line noise. This commit just removes it.
* reclamation:
solid pill
arvo: wires up %trim memory-pressure event stubs
u3: wires up the %trim event in the daemon
u3: adds %trim memory-pressure notification "effect"
u3: tweaks |mass output (and fixes inadvertent truncation)
u3: refactors periodic memory reclamation
u3: factors out u3a_idle() to measure free-lists in a road
u3: adds and uses u3a_full/heap/temp road macros
u3: cleans up whitespace, removes dead code in allocator