This is a temporary fix, and first part of the gall-request-queue-fix
release in two stages. This gives a publisher ship the ability to
understand a %cork and handle it properly, but no subscriber will
be sending %corks at this stage when leaving a subscription.
We still add a nonce to all subscription wires but it doesn't
increment it when resubscribing, allowing flows to be reused.
Tested locally with toy pub/sub agents and Group join/leaving
* master: (61 commits)
rich-text: removing broken plugin, reverting react-md to 5.0.3 for compat
graphcontent: blockquotes now correctly break paragraphs off
md-editor: fixing background in darkmode
landscape: [skip actions] update glob (0v5.kgrq2.gp725.bo5bk.dmr7d.h41qk)
ops: fixing build
meta: version bump for new changes from next/landscape
meta: package bump:
eventsource: prevent resetting event id counter
interface: fixing react-codemirror2 dep
groups: add webp to list of image types to check links for in chat
groups: fix issue where URL would be shown along with image in chat
groups: fix issue with chanel perms caused by use of Set()
groups: update glob (0v4.2se6m.fvv67.nn5e8.vfrv9.mmi88)[skip actions]
groups: updating package lock
groups: updating nvmrc
Fix webpack, build dependency issues
compat: fixing react-codemirror2 deps
compat: updating to latest sigil-js for react
compat: updating indigo, and removing unused deps
meta: fixing react version issue
...
Previously, the initial Azimuth snapshot was stored in Clay and shipped
in the pill. This causes several problems:
- It bloats the pill
- Updating the snapshot added large blobs to Clay's state. Even now
that tombstoning is possible, you don't want to have to do that
regularly.
- As a result, the snapshot was never updated.
- Even if you did tombstone those files, it could only be updated as
often as the pill
- And those updates would be sent over the network to people who didn't
need them
This moves the snapshot out of the pill and refactors Azimuth's
initialization process. On boot, when app/azimuth starts up, it first
downloads a snapshot from bootstrap.urbit.org and uses that to
initialize its state. As before, updates after this initial snapshot
come from an Ethereum node directly and are verified locally.
Relevant commands are:
- `-azimuth-snap-state %filename` creates a snapshot file
- `-azimuth-load "url"` downloads and inits from a snapshot, with url
defaulting to https://bootstrap.urbit.org/mainnet.azimuth-snapshot
- `:azimuth &azimuth-poke-data %load snap-state` takes a snap-state any
way you have it
Note the snapshot is downloaded from the same place as the pill, so this
doesn't introduce additional trust beyond what was already required.
When remote scry is released, we should consider allowing downloading
the snapshot in that way.
Because the publisher will send the cork plea back to the subscriber on
the next bone, we are not able to know the bone for the original cork.
To handle it, we add the cork bone to the plea path
still wip: it keeps resending the cork plea faster than its ~h1 timer