Repository navigation
Conversation
The pool sends "dropped" and "invalid" as bare strings, which the status matcher only recognised as object keys, so a rejection surfaced as the submit timeout about two minutes later.
An override set to a URL the preset uses for another chain skipped the genesis check, so People pointed at the preset's Asset Hub node ran unchecked.
The 50 s read timeout covered the wait for one whole message, so a 13 MiB Bulletin block body on a link under about 0.3 MB/s ended a healthy connection. The backend now dials the socket itself, records every read, and ends the stream only after 50 s with no bytes at all. TLS uses the crate's own client config, so jsonrpsee's tls feature is no longer needed. Redirects are not followed.
…node A genesis nobody registered was resolved from the bundled catalog on every provider, so a host on RPC nodes that asked for an unrouted chain started the light client. A provider with a remote node registered now answers only for what was registered on it. The gateway example serves its catalog chains from a provider of their own.
…ctions smoldot stops a chain once its last connection closes, so a host that connects once per use started each chain again with no peers. A provider built with keep_chains_running() adds each chain once more on its own account, JSON-RPC disabled, and never removes it; a parachain's hold also holds its relay. The CLI's shared light client uses it instead of keeping an idle connection per chain open.
The node's proof is complete for what it reads: the claim's validation checks that the PGAS asset exists, which a node proves with the asset's trie entry and its value hash. smoldot answers the check by reading the whole value, so it rejects that proof.
Adds changesets for the catalog rule in @parity/truapi-provider and the CLI and allowance fixes, and states the read timeout in the CLI's existing changeset as silence on the socket rather than between frames.
Contributor
Bundle size reportCompared with
WebAssembly modules
Changed files (3)
Commit: 79f58a2 |
Dialing the socket in the crate dropped behaviour jsonrpsee's own dial had. Each address a host resolves to is tried in turn with its own timeout, so a dead IPv6 route or a backend that refuses the upgrade falls back to the next address. Redirects are followed up to five times, a URL that is not ws or wss is refused before anything is dialed, and vectored writes reach the socket. The jsonrpsee tls feature is declared again: the transport accepts a wss URL only with it on, which another crate in the CLI build had been enabling.
Whether a provider resolved an unregistered genesis from the bundled catalog was inferred from whether any registration was a remote node, so a provider with nothing registered still started the light client for any bundled genesis. The catalog is now an explicit builder option, catalog(), which the native bindings and the gateway example set. The JS builder sets it until the first addRpcChain, as before. load_database reads nothing for a chain the provider cannot connect to, and relay_of consults the catalog only on a provider that uses it. The changeset states the order addNetwork and addRpcChain have to be called in.
The submission watch reads each notification as subxt's TransactionStatus, which models both the bare-string and the object forms the pool sends, instead of matching JSON keys by hand.
…r path A failed hold and a failed add of the connection's own chain release the relay reference through the same branch, and LightState::new documents what keep_running does.
load_database answers false for a chain the provider cannot connect to, so the storage tests register the chain they load and save, as a host does before connecting to it.
Contributor
|
CI Status: 24 required jobs green, 22 passed and 2 skipped by path filter. All job results
Signing credentials: valid as of 2026-10-30 Commit |
A failure after a redirect names the redirected URL, redacted, since the caller reports only the URL it asked for, and a redirect location never reaches an error unredacted. A dial timeout names the step that hung: resolving the host, connecting, or the TLS handshake. The slow message test trickles bytes at an interval that does not divide the read timeout.
…ect to load_database fails as unknown for a chain connect would refuse, rather than answering as if nothing were stored, and the JS connect path returns that error instead of logging it as unavailable storage. Whether the catalog covers a chain is read from the catalog's statics. SPEC.md states that neither CLI backend resolves from the catalog.
Each comment says what the code cannot, once, instead of restating the mechanism or the reason a second time.
… entry default The catalog tests look up Paseo Next v2's genesis hashes through one helper, and an AddedChain entry starts from its derived default.
…feature The EmbeddedChainProvider doc linked to catalog(), which only exists with networks, so rustdoc failed on the default features that codegen documents the crate with.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-ups from #1715, stacked on #1664.
catalog()resolves an unregistered genesis from the bundled catalog, so one for remote nodes never starts smoldot. The native bindings and the gateway set it. The JS builder sets it until the firstaddRpcChain.keep_chains_running(): a light-client chain stays running after its last connection closes. The CLI uses it instead of keeping an idle connection per chain.TransactionStatus, so"dropped"and"invalid"fail the submission at once instead of at the two-minute timeout.PGAS on the light client (item 4): a smoldot bug. The claim's validation checks that the PGAS asset exists, and the node correctly proves that with the value's hash. smoldot treats the check as a full read, wants the value too, and drops the transaction. Item 4 stays open until smoldot is fixed. SPEC.md now explains this.
Breaking: a JS host that uses
addRpcChainand relies on the catalog for other chains has to calladdNetworkfor those, beforeaddRpcChain.Testing: workspace build, clippy, tests and
make wasmpass, and the host bun tests and provider browser tests pass. The live RPC and light-client tests pass on Paseo Next v2, and the standalone gateway example reaches a realwss://node. One unrelated macOS temp-path test fails locally.Refs #1715