From 6d8a33b85c5818b33c85da94d6a6226412b14ce1 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:33:09 +0530 Subject: [PATCH 01/13] sdk%lint(symlinks): prohibit symlinks in `pkgs/` --- maint/lint/lint_symlinks.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/maint/lint/lint_symlinks.py b/maint/lint/lint_symlinks.py index 355c02b4..79962306 100755 --- a/maint/lint/lint_symlinks.py +++ b/maint/lint/lint_symlinks.py @@ -15,6 +15,7 @@ - They must not dangle (i.e. point to non-existent resources) - They must not have a depth >1 (i.e. cannot point to another symlink) - They must not point to resources outside the repository (to prevent escapes) +- They must not appear inside a crate directory (`pkgs/`) """ from __future__ import annotations @@ -106,6 +107,10 @@ def main() -> int: fault = _link_fault(repo_root, modes, path, target) if fault is not None: faults.append(f"{path} -> {target}: {fault}") + elif path.startswith("pkgs/"): + faults.append( + f"{path} -> {target}: symlink inside a crate directory is prohibited", + ) elif mode in _MODE_FILE: fault = _hard_link_fault(repo_root, path) if fault is not None: From 0f49ed2f99636d3043ae2dd3aa95b62eef3f284e Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:37:13 +0530 Subject: [PATCH 02/13] sdk%lint(markdown): prohibit relative links in crate READMEs --- maint/lint/lint_markdown.py | 62 +++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/maint/lint/lint_markdown.py b/maint/lint/lint_markdown.py index 8fb85ab6..34530ac4 100755 --- a/maint/lint/lint_markdown.py +++ b/maint/lint/lint_markdown.py @@ -13,12 +13,68 @@ import subprocess import sys +from html.parser import HTMLParser +from typing import TYPE_CHECKING -from common import RETCODE_ERR, relay, require_bin, root_dir +import markdown +from common import ( + RETCODE_ERR, + RETCODE_PASS, + off_disk, + relay, + require_bin, + root_dir, +) + +if TYPE_CHECKING: + from pathlib import Path DISABLED_RULES = "md025,md033,md041" +class _LinkCollector(HTMLParser): + """Collect ``/`` targets, skipping code and comments.""" + + def __init__(self) -> None: + super().__init__() + self.targets: list[str] = [] + + def handle_starttag( + self, tag: str, attrs: list[tuple[str, str | None]], + ) -> None: + value = dict(attrs).get({"a": "href", "img": "src"}.get(tag)) + if value: + self.targets.append(value) + + +def _link_targets(text: str) -> list[str]: + """Return every link/image target rendering *text* as HTML exposes.""" + renderer = markdown.Markdown(extensions=["extra"]) + collector = _LinkCollector() + collector.feed(renderer.convert(text)) + return [*collector.targets, *(url for url, _ in renderer.references.values())] + + +def _check_crate_readmes(repo_root: Path) -> int: + """Reject relative links in crate READMEs, which crates.io can't resolve.""" + ok = True + for readme in sorted(repo_root.glob("pkgs/**/README.md")): + text = readme.read_text(encoding="utf-8") + rel = readme.relative_to(repo_root) + for target in _link_targets(text): + if off_disk(target): + continue + ok = False + lineno = next( + (n for n, line in enumerate(text.splitlines(), 1) if target in line), 1, + ) + print( + f"{rel}:{lineno}: relative link '{target}' won't resolve on crates.io", + file=sys.stderr, + ) + return RETCODE_PASS if ok else RETCODE_ERR + + def main() -> int: pymarkdown_bin = require_bin("pymarkdownlnt") repo_root = root_dir() @@ -41,7 +97,9 @@ def main() -> int: relay(result.stdout, repo_root) relay(result.stderr, repo_root, stream=sys.stderr) - return result.returncode + readme_retcode = _check_crate_readmes(repo_root) + + return result.returncode or readme_retcode if __name__ == "__main__": From 164b35b06605d14dff80f36d9dea6fee638c5b72 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:41:42 +0530 Subject: [PATCH 03/13] sdk%lint(cargo): use MSRV-conscious resolver, drop custom lint logic --- Cargo.toml | 2 +- docs/samples/Cargo.toml | 2 +- maint/README.md | 2 +- maint/lint/lint_cargo.py | 191 +-------------------------------------- 4 files changed, 4 insertions(+), 193 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0ee07e5f..fdd3b922 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ members = [ "pkgs/types", "pkgs/types/marker", ] -resolver = "2" +resolver = "3" [workspace.dependencies] base58ck = { version = "0.4.0", default-features = false } diff --git a/docs/samples/Cargo.toml b/docs/samples/Cargo.toml index 722b16ea..9688fed6 100644 --- a/docs/samples/Cargo.toml +++ b/docs/samples/Cargo.toml @@ -1,6 +1,6 @@ [workspace] members = ["parser", "solver"] -resolver = "2" +resolver = "3" [workspace.dependencies] bitcoin-consensus-encoding = { version = "1.2.0", default-features = false } diff --git a/maint/README.md b/maint/README.md index d2abdda8..f69a717e 100644 --- a/maint/README.md +++ b/maint/README.md @@ -14,7 +14,7 @@ use [`lint_all.py`](./lint_all.py). | Name | Purpose | Verbs | Depends on | | ---- | ------- | ---------- | ---------- | -| [`lint_cargo.py`](./lint/lint_cargo.py) | Enforce MSRV across Rust build dependency graph, deny dependencies per [`deny.toml`](../deny.toml), check/format TOML files against [`.taplo.toml`](../.taplo.toml) | `check` , `apply`, `apply-all` | `cargo` (MSRV enforcement), `cargo-deny` (deny dependencies), `taplo` (TOML formatting) | +| [`lint_cargo.py`](./lint/lint_cargo.py) | Deny dependencies per [`deny.toml`](../deny.toml), check/format TOML files against [`.taplo.toml`](../.taplo.toml) | `check` , `apply`, `apply-all` | `cargo-deny` (deny dependencies), `taplo` (TOML formatting) | | [`lint_codeql.py`](./lint/lint_codeql.py) | Query Rust sources against [`maint/codeql/rust/*.ql`](./codeql/rust) | `check`, `apply`, `apply-all`, `run`, `run-all` | `codeql`, `rustc` | | [`lint_javascript.py`](./lint/lint_javascript.py) | Lint Javascript sources against [`eslint.config.mjs`](js/eslint.config.mjs) | *None* | `npx` (part of Node.js), `eslint` (auto-retrieved by script) | | [`lint_markdown.py`](./lint/lint_markdown.py) | Lint Markdown [documentation](../docs/dev/about_docs.md) | *None* | `pymarkdownlnt` | diff --git a/maint/lint/lint_cargo.py b/maint/lint/lint_cargo.py index 969b526d..6db3988a 100755 --- a/maint/lint/lint_cargo.py +++ b/maint/lint/lint_cargo.py @@ -15,21 +15,16 @@ from __future__ import annotations -import json -import re import subprocess import sys -import tomllib from pathlib import Path from common import ( - CARGO_WORKSPACES, DEFAULT_BASE, RETCODE_ERR, RETCODE_PASS, RETCODE_SKIP, declare_verbs, - format_table, formatted, relay, require_bin, @@ -40,22 +35,6 @@ # Base name of this script (equivalent to argv[0]). SCRIPT = Path(__file__).stem -# Platforms the dependency graph is resolved for. -TARGET_TRIPLES: tuple[str, ...] = ( - "x86_64-unknown-linux-gnu", - "aarch64-unknown-linux-gnu", -) - -# Leading `name vX.Y.Z` of a `cargo tree --prefix none` line. Anything after -# the version (source, ` (*)` dedupe marker, feature list) is ignored. -TREE_ENTRY = re.compile(r"^(\S+) v(\S+)") - -# A package, named by its crate and the version resolved for it. -Coord = tuple[str, str] - -# A semantic version, held as its components. -Version = tuple[int, ...] - def _check_format( repo_root: Path, @@ -99,173 +78,6 @@ def shorten(out: str, err: str) -> None: ) -def _parse_version(text: str) -> Version: - """Return *text* as a comparable triple. - - Manifests write the same floor as `1.85` or `1.85.0`; padding to three - components keeps those two spellings equal. A prerelease is not a floor - cargo accepts, so it is raised on rather than trimmed to one. - """ - parts = text.split(".") - try: - fields = [int(p) for p in parts] - except ValueError as exc: - raise ValueError(f"malformed rust version {text!r}") from exc - if not 1 <= len(fields) <= 3: - raise ValueError(f"malformed rust version {text!r}") - return tuple(fields + [0] * (3 - len(fields))) - - -def _workspace_cap(repo_root: Path) -> tuple[str, Version]: - """Return the workspace `rust-version` as written and as a tuple.""" - manifest = tomllib.loads( - (repo_root / "Cargo.toml").read_text(encoding="utf-8"), - ) - declared = manifest.get("workspace", {}).get("package", {}).get( - "rust-version", - ) - if not isinstance(declared, str): - raise ValueError("workspace.package.rust-version is not set") - return declared, _parse_version(declared) - - -def _cargo(cargo_bin: str, repo_root: Path, args: list[str]) -> str: - """Run cargo with *args*, echoing stderr and raising on failure.""" - result = subprocess.run( # noqa: S603 - [cargo_bin, *args], - capture_output=True, - check=False, - cwd=str(repo_root), - text=True, - ) - relay(result.stderr, repo_root, stream=sys.stderr) - if result.returncode != 0: - raise RuntimeError(f"cargo {args[0]} failed with {result.returncode}") - return result.stdout - - -def _build_graph( - cargo_bin: str, - repo_root: Path, - workspace: str, - triple: str, -) -> set[Coord]: - """Return the crates cargo compiles, as `(name, version)` pairs.""" - stdout = _cargo(cargo_bin, repo_root, [ - "tree", - "--manifest-path", str(Path(workspace) / "Cargo.toml"), - "--workspace", - "--all-features", - "--locked", - "--target", triple, - "--edges", "normal,build,dev", - "--prefix", "none", - "--quiet", - ]) - graph: set[Coord] = set() - for raw in stdout.splitlines(): - line = raw.strip() - if not line: - continue - entry = TREE_ENTRY.match(line) - if entry is None: - raise ValueError(f"unparsed cargo tree line {line!r}") - graph.add((entry.group(1), entry.group(2))) - return graph - - -def _declared( - cargo_bin: str, - repo_root: Path, - workspace: str, - triple: str, -) -> dict[Coord, str]: - """Return the `rust-version` each resolved package declares.""" - stdout = _cargo(cargo_bin, repo_root, [ - "metadata", - "--manifest-path", str(Path(workspace) / "Cargo.toml"), - "--format-version", "1", - "--all-features", - "--locked", - "--filter-platform", triple, - "--quiet", - ]) - return { - (pkg["name"], pkg["version"]): pkg["rust_version"] - for pkg in json.loads(stdout)["packages"] - if pkg.get("rust_version") - } - - -def _check_msrv(repo_root: Path) -> int | None: - """Fail on a crate above the cap, or None when cargo is absent.""" - try: - cargo_bin = require_bin("cargo") - except FileNotFoundError as e: - print(f"{e}, skipping the msrv check", file=sys.stderr) - return None - - cap_text, cap = _workspace_cap(repo_root) - print(f"checking msrv: cap {cap_text} ({', '.join(TARGET_TRIPLES)})") - - graph: set[Coord] = set() - declared: dict[Coord, str] = {} - for workspace in CARGO_WORKSPACES: - for triple in TARGET_TRIPLES: - graph |= _build_graph(cargo_bin, repo_root, workspace, triple) - declared |= _declared(cargo_bin, repo_root, workspace, triple) - - # Parsed floor first, so that sorting a crate is sorting its rust-version - # and the name only breaks ties. - rated = sorted( - (_parse_version(text), name, version, text) - for (name, version), text in declared.items() - if (name, version) in graph - ) - if not rated: - raise ValueError("no crate in the build graph declares a rust-version") - - highest = max(rated)[0] - peak = [r for r in rated if r[0] == highest] - - # `rated` is already sorted, and this sort is stable, so the worst overrun - # leads and crates sharing a floor stay in name order. - over = sorted( - (r for r in rated if r[0] > cap), key=lambda r: r[0], reverse=True, - ) - summary = ", ".join(f"{n} {v}" for _, n, v, _ in peak[:3]) - if len(peak) > 3: - summary += f", +{len(peak) - 3} more" - top = ".".join(str(p) for p in highest) - silent = len(graph - declared.keys()) - print( - f"build graph of {len(graph)} crates ({silent} declaring no floor) " - f"peaks at {top}: {summary}", - ) - - if not over: - return RETCODE_PASS - - print( - format_table( - ("package", "version", "rust-version", "status"), - [(n, v, t, "fail") for _, n, v, t in over], - ), - file=sys.stderr, - ) - print( - f"error: {len(over)} crate(s) declare a rust-version above the " - f"{cap_text} cap", - file=sys.stderr, - ) - print( - "hint: pin the offending package with " - "'cargo update --precise '", - file=sys.stderr, - ) - return RETCODE_ERR - - def _check_yanked(repo_root: Path) -> int | None: """Fail on a yanked release, or None when cargo-deny is absent.""" try: @@ -289,7 +101,7 @@ def _check_yanked(repo_root: Path) -> int | None: def main() -> int: args = declare_verbs( - "Validate the crate graph against the MSRV and yanked releases.", + "Validate the crate graph against yanked releases.", { "check": "report every fault, changing nothing", "apply": f"also rewrite TOML this branch changed vs {DEFAULT_BASE}", @@ -302,7 +114,6 @@ def main() -> int: verdicts: list[int | None] = [ _check_format(repo_root, fix=fix, only=only), - _check_msrv(repo_root), _check_yanked(repo_root), ] ran = [v for v in verdicts if v is not None] From ac9112a729f5d20198b5b1a1297a3960d3b098f7 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:00:25 +0530 Subject: [PATCH 04/13] sdk%chore: bump `hex-conservative` to 1.3 --- Cargo.lock | 24 ++++++++++++------------ docs/samples/Cargo.lock | 22 +++++++++++----------- docs/samples/parser/Cargo.toml | 2 +- docs/samples/parser/parser.rs | 6 +++--- docs/samples/solver/Cargo.toml | 2 +- docs/samples/solver/solver.rs | 10 +++++----- pkgs/dev/Cargo.toml | 2 +- pkgs/dev/src/corpus.rs | 4 ++-- pkgs/dev/src/encode.rs | 6 +++--- pkgs/num/Cargo.toml | 2 +- pkgs/num/src/hash.rs | 9 +++++---- pkgs/p2p_core/Cargo.toml | 2 +- pkgs/p2p_core/tests/addrv2.rs | 10 +++++----- pkgs/pkc/Cargo.toml | 4 ++-- pkgs/primitives/Cargo.toml | 2 +- pkgs/primitives/src/types/addrv1.rs | 5 ++--- pkgs/script/Cargo.toml | 2 +- pkgs/types/Cargo.toml | 2 +- pkgs/types/src/entity.rs | 2 +- pkgs/types/src/serialize.rs | 4 ++-- 20 files changed, 61 insertions(+), 61 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95719ac5..a14339c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -82,7 +82,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6712f9c6fd6785b3b270884e57c441c403dc5d7e19ca45368c97c7a1de3000ec" dependencies = [ "bitcoin-internals 0.6.0", - "hex-conservative 1.2.0", + "hex-conservative 1.3.0", "serde", ] @@ -114,7 +114,7 @@ dependencies = [ "bitcoin-internals 0.6.0", "bitcoin-units", "bitcoin_hashes 1.2.0", - "hex-conservative 1.2.0", + "hex-conservative 1.3.0", "serde", ] @@ -148,7 +148,7 @@ checksum = "5304e53726dbe5f93141535e102ed97b5bf4714fbecefdda8f9fb98d7fdaff0e" dependencies = [ "bitcoin-consensus-encoding 1.2.0", "bitcoin-internals 0.6.0", - "hex-conservative 1.2.0", + "hex-conservative 1.3.0", "serde", ] @@ -472,7 +472,7 @@ dependencies = [ "dash-pow", "dash-primitives", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "indicatif", "json5", "proc-macro2", @@ -492,7 +492,7 @@ dependencies = [ "dash-dev", "dash-types", "divan", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "hex-literal", "rstest", "serde", @@ -512,7 +512,7 @@ dependencies = [ "dash-primitives", "dash-script", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "rstest", "serde", ] @@ -549,7 +549,7 @@ dependencies = [ "ff", "getrandom", "group", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "k256", "rand_core", "rstest", @@ -585,7 +585,7 @@ dependencies = [ "dash-pow", "dash-script", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "hex-literal", "libm", "rstest", @@ -601,7 +601,7 @@ dependencies = [ "dash-num", "dash-pkc", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "rstest", "serde", ] @@ -616,7 +616,7 @@ dependencies = [ "bitcoin_hashes 1.2.0", "cfg-if", "dash-types-marker", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "rstest", "serde", "subtle", @@ -926,9 +926,9 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10" +checksum = "271e0d19bcb473b6675739a2b536076b24a082316cb5199ad918edce10c599e8" dependencies = [ "arrayvec", ] diff --git a/docs/samples/Cargo.lock b/docs/samples/Cargo.lock index 81f0c10d..f897ab0d 100644 --- a/docs/samples/Cargo.lock +++ b/docs/samples/Cargo.lock @@ -34,7 +34,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6712f9c6fd6785b3b270884e57c441c403dc5d7e19ca45368c97c7a1de3000ec" dependencies = [ "bitcoin-internals 0.6.0", - "hex-conservative 1.2.0", + "hex-conservative 1.3.0", "serde", ] @@ -66,7 +66,7 @@ dependencies = [ "bitcoin-internals 0.6.0", "bitcoin-units", "bitcoin_hashes 1.2.0", - "hex-conservative 1.2.0", + "hex-conservative 1.3.0", "serde", ] @@ -100,7 +100,7 @@ checksum = "5304e53726dbe5f93141535e102ed97b5bf4714fbecefdda8f9fb98d7fdaff0e" dependencies = [ "bitcoin-consensus-encoding 1.2.0", "bitcoin-internals 0.6.0", - "hex-conservative 1.2.0", + "hex-conservative 1.3.0", "serde", ] @@ -122,7 +122,7 @@ version = "0.0.0" dependencies = [ "bitcoin-consensus-encoding 1.2.0", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "serde", ] @@ -135,7 +135,7 @@ dependencies = [ "cfg-if", "dash-num", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "serde", "subtle", "zeroize", @@ -160,7 +160,7 @@ dependencies = [ "dash-pow", "dash-script", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "libm", "serde", ] @@ -171,7 +171,7 @@ version = "0.0.0" dependencies = [ "dash-primitives", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "serde_json", "wasm-bindgen", ] @@ -188,7 +188,7 @@ dependencies = [ "dash-primitives", "dash-script", "dash-types", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "serde", "serde_json", "wasm-bindgen", @@ -216,7 +216,7 @@ dependencies = [ "bitcoin_hashes 1.2.0", "cfg-if", "dash-types-marker", - "hex-conservative 0.3.2", + "hex-conservative 1.3.0", "serde", "subtle", "zeroize", @@ -242,9 +242,9 @@ dependencies = [ [[package]] name = "hex-conservative" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35431185f361ccf3ffc58254628af5f1f5d5f28531da2e02e5d6c82bbc282a10" +checksum = "271e0d19bcb473b6675739a2b536076b24a082316cb5199ad918edce10c599e8" dependencies = [ "arrayvec", ] diff --git a/docs/samples/parser/Cargo.toml b/docs/samples/parser/Cargo.toml index 0df863a8..2cbccf8b 100644 --- a/docs/samples/parser/Cargo.toml +++ b/docs/samples/parser/Cargo.toml @@ -23,7 +23,7 @@ dash-primitives = { version = "0.0.0", path = "../../../pkgs/primitives", defaul "serde", ] } dash-types = { version = "0.0.0", path = "../../../pkgs/types", default-features = false } -hex-conservative = { version = "0.3", default-features = false, features = [ +hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } serde_json = { version = "1", default-features = false, features = ["alloc"] } diff --git a/docs/samples/parser/parser.rs b/docs/samples/parser/parser.rs index 83053a09..ea15bc18 100644 --- a/docs/samples/parser/parser.rs +++ b/docs/samples/parser/parser.rs @@ -12,7 +12,7 @@ extern crate alloc; use dash_primitives::{Block, BlockHeader, Transaction}; use dash_types::codec::BaseCodec; -use hex_conservative::FromHex; +use hex_conservative::decode_to_vec; use serde_json::Value; use wasm_bindgen::prelude::*; @@ -68,7 +68,7 @@ fn envelope(data: Value, warnings: Vec) -> Result { /// decoded as a full block. #[wasm_bindgen] pub fn parse_block_hex(hex_str: &str) -> Result { - let bytes = Vec::::from_hex(hex_str).map_err(|e| format!("invalid hex: {e}"))?; + let bytes = decode_to_vec(hex_str).map_err(|e| format!("invalid hex: {e}"))?; if bytes.is_empty() { return Err("no data provided".to_string()); @@ -90,7 +90,7 @@ pub fn parse_block_hex(hex_str: &str) -> Result { /// Parses a hex-encoded raw transaction and returns a JSON string. #[wasm_bindgen] pub fn parse_tx_hex(hex_str: &str) -> Result { - let bytes = Vec::::from_hex(hex_str).map_err(|e| format!("invalid hex: {e}"))?; + let bytes = decode_to_vec(hex_str).map_err(|e| format!("invalid hex: {e}"))?; if bytes.is_empty() { return Err("no data provided".to_string()); diff --git a/docs/samples/solver/Cargo.toml b/docs/samples/solver/Cargo.toml index e22450aa..2332516d 100644 --- a/docs/samples/solver/Cargo.toml +++ b/docs/samples/solver/Cargo.toml @@ -29,7 +29,7 @@ dash-pow = { version = "0.0.0", path = "../../../pkgs/pow", default-features = f dash-primitives = { version = "0.0.0", path = "../../../pkgs/primitives", default-features = false } dash-script = { version = "0.0.0", path = "../../../pkgs/script", default-features = false } dash-types = { version = "0.0.0", path = "../../../pkgs/types", default-features = false } -hex-conservative = { version = "0.3", default-features = false, features = [ +hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } serde = { version = "1", default-features = false, features = [ diff --git a/docs/samples/solver/solver.rs b/docs/samples/solver/solver.rs index a4381f72..06ad300c 100644 --- a/docs/samples/solver/solver.rs +++ b/docs/samples/solver/solver.rs @@ -16,7 +16,7 @@ use bitcoin_units::Amount; use dash_num::{Arith256, CompactTarget, Hash256}; use dash_primitives::{BlockHash, BlockHeader, MerkleRoot, OutPoint, Transaction, TxHash, TxIn, TxOut, TxType}; use dash_types::{Hashable, Numeric}; -use hex_conservative::FromHex; +use hex_conservative::decode_to_vec; use serde::{Deserialize, Serialize}; use wasm_bindgen::prelude::*; @@ -63,8 +63,8 @@ fn build_coinbase(script_sig: Vec, script_pubkey: Vec, amount_duffs: &st /// Compute the merkle root from coinbase parameters. #[wasm_bindgen] pub fn merkle_root(script_sig_hex: &str, script_pubkey_hex: &str, amount_duffs: &str) -> Result { - let sig_bytes = Vec::::from_hex(script_sig_hex).map_err(|e| format!("invalid scriptSig hex: {e}"))?; - let pk_bytes = Vec::::from_hex(script_pubkey_hex).map_err(|e| format!("invalid scriptPubKey hex: {e}"))?; + let sig_bytes = decode_to_vec(script_sig_hex).map_err(|e| format!("invalid scriptSig hex: {e}"))?; + let pk_bytes = decode_to_vec(script_pubkey_hex).map_err(|e| format!("invalid scriptPubKey hex: {e}"))?; let coinbase = build_coinbase(sig_bytes, pk_bytes, amount_duffs)?; let root = MerkleRoot::from_lendian(*coinbase.hash().as_bytes()); Ok(format!("{root}")) @@ -85,8 +85,8 @@ pub fn scanhash( nonce_count: u32, ) -> Result { let prev_hash = BlockHash::from_hex(prev_hash_hex).map_err(|e| format!("invalid prev_hash hex: {e}"))?; - let sig_bytes = Vec::::from_hex(script_sig_hex).map_err(|e| format!("invalid scriptSig hex: {e}"))?; - let pk_bytes = Vec::::from_hex(script_pubkey_hex).map_err(|e| format!("invalid scriptPubKey hex: {e}"))?; + let sig_bytes = decode_to_vec(script_sig_hex).map_err(|e| format!("invalid scriptSig hex: {e}"))?; + let pk_bytes = decode_to_vec(script_pubkey_hex).map_err(|e| format!("invalid scriptPubKey hex: {e}"))?; let coinbase = build_coinbase(sig_bytes, pk_bytes, amount_duffs)?; let merkle_root = MerkleRoot::from_lendian(*coinbase.hash().as_bytes()); diff --git a/pkgs/dev/Cargo.toml b/pkgs/dev/Cargo.toml index 6ef0d404..1de5eb9f 100644 --- a/pkgs/dev/Cargo.toml +++ b/pkgs/dev/Cargo.toml @@ -61,7 +61,7 @@ dash-primitives = { version = "0.0.0", path = "../primitives" } dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ "codec", ] } -hex-conservative = { version = "0.3", default-features = false, features = [ +hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } chrono = { version = "0.4", default-features = false, features = [ diff --git a/pkgs/dev/src/corpus.rs b/pkgs/dev/src/corpus.rs index 36ef1ce7..3ac42389 100644 --- a/pkgs/dev/src/corpus.rs +++ b/pkgs/dev/src/corpus.rs @@ -8,7 +8,7 @@ use crate::prelude::*; -use hex_conservative::FromHex; +use hex_conservative::decode_to_vec; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use core::fmt; @@ -114,7 +114,7 @@ impl Corpus { let mut result = BTreeMap::new(); for (label, entry) in entries { - let bytes = Vec::::from_hex(&entry.raw).unwrap_or_else(|e| panic!("{section}/{label}: hex: {e}")); + let bytes = decode_to_vec(&entry.raw).unwrap_or_else(|e| panic!("{section}/{label}: hex: {e}")); check(&bytes, &entry.details, &label); result.insert(label, entry.details); } diff --git a/pkgs/dev/src/encode.rs b/pkgs/dev/src/encode.rs index b284fa11..cf14a90a 100644 --- a/pkgs/dev/src/encode.rs +++ b/pkgs/dev/src/encode.rs @@ -8,7 +8,7 @@ use crate::prelude::*; -use hex_conservative::FromHex; +use hex_conservative::{decode_to_array, decode_to_vec}; /// Decodes a base-16 string into a fixed `N`-byte array. /// @@ -16,7 +16,7 @@ use hex_conservative::FromHex; /// /// Panics on a non-hex digit or unless the input decodes to exactly `N` bytes. pub fn arr_from_hex(s: &str) -> [u8; N] { - <[u8; N]>::from_hex(s).unwrap_or_else(|e| panic!("bad hex: {e}")) + decode_to_array(s).unwrap_or_else(|e| panic!("bad hex: {e}")) } /// Decodes a base-16 string into a byte vector. @@ -25,5 +25,5 @@ pub fn arr_from_hex(s: &str) -> [u8; N] { /// /// Panics if `s` has odd length or contains a non-hex digit. pub fn vec_from_hex(s: &str) -> Vec { - Vec::::from_hex(s).unwrap_or_else(|e| panic!("bad hex: {e}")) + decode_to_vec(s).unwrap_or_else(|e| panic!("bad hex: {e}")) } diff --git a/pkgs/num/Cargo.toml b/pkgs/num/Cargo.toml index 4a91b668..e5ad2ad3 100644 --- a/pkgs/num/Cargo.toml +++ b/pkgs/num/Cargo.toml @@ -23,7 +23,7 @@ serde = ["dep:serde", "dash-types/serde"] [dependencies] bitcoin-consensus-encoding = { workspace = true, optional = true } dash-types = { version = "0.0.0", path = "../types", default-features = false } -hex-conservative = { version = "0.3", default-features = false } +hex-conservative = { version = "1.3", default-features = false } serde = { version = "1", default-features = false, features = [ "derive", "alloc", diff --git a/pkgs/num/src/hash.rs b/pkgs/num/src/hash.rs index 552295e6..864949a5 100644 --- a/pkgs/num/src/hash.rs +++ b/pkgs/num/src/hash.rs @@ -9,7 +9,7 @@ #[cfg(feature = "codec")] use dash_types::impl_type; use dash_types::{type_cvrt, Numeric}; -use hex_conservative::{BytesToHexIter, Case, HexToBytesIter}; +use hex_conservative::{BytesToHexIter, Case, HexSliceToBytesIter}; use core::fmt::{self, Write as _}; use core::hash::Hash; @@ -158,7 +158,7 @@ impl HashBlob { }); } - let digits = HexToBytesIter::new(s).map_err(|_| ParseHexError::OddLength)?; + let digits = HexSliceToBytesIter::new(s).map_err(|_| ParseHexError::OddLength)?; let mut bytes = [0u8; N]; for (slot, byte) in bytes.iter_mut().zip(digits.rev()) { *slot = byte.map_err(|e| ParseHexError::InvalidChar(e.invalid_char()))?; @@ -200,8 +200,9 @@ fn write_hex(bytes: &[u8], case: Case, f: &mut fmt::Formatter<'_>) -> fmt::Resul if f.alternate() { f.write_str(if case == Case::Lower { "0x" } else { "0X" })?; } - for c in BytesToHexIter::new(bytes.iter().rev().copied(), case) { - f.write_char(c)?; + for [hi, lo] in BytesToHexIter::new(bytes.iter().rev().copied(), case) { + f.write_char(char::from(hi))?; + f.write_char(char::from(lo))?; } Ok(()) } diff --git a/pkgs/p2p_core/Cargo.toml b/pkgs/p2p_core/Cargo.toml index 893ae33a..3f3bb956 100644 --- a/pkgs/p2p_core/Cargo.toml +++ b/pkgs/p2p_core/Cargo.toml @@ -46,7 +46,7 @@ serde = { version = "1", default-features = false, features = [ [dev-dependencies] dash-dev = { version = "0.0.0", path = "../dev", features = ["full"] } -hex-conservative = "0.3" +hex-conservative = "1.3" rstest = "0.25" [lints] diff --git a/pkgs/p2p_core/tests/addrv2.rs b/pkgs/p2p_core/tests/addrv2.rs index 7d99f393..65f13c1e 100644 --- a/pkgs/p2p_core/tests/addrv2.rs +++ b/pkgs/p2p_core/tests/addrv2.rs @@ -11,7 +11,7 @@ use bitcoin_consensus_encoding::{decode_from_slice, encode_to_vec}; use dash_p2p_core::{Addr, AddrV2Entry, AddrV2Msg, ServiceFlags}; use dash_primitives::{AddrV2, NetworkType}; -use hex_conservative::FromHex; +use hex_conservative::{decode_to_array, decode_to_vec}; use rstest::rstest; fn ipv4_entry(ip: [u8; 4], port: u16, time: u32) -> AddrV2Entry { @@ -90,7 +90,7 @@ fn addrv2_bip155_wire_vector() { "f1f2", // port 0xf1f2 ); - let bytes = Vec::::from_hex(hex).unwrap_or_else(|e| panic!("bad hex: {e}")); + let bytes = decode_to_vec(hex).unwrap_or_else(|e| panic!("bad hex: {e}")); let decoded: AddrV2Msg = decode_from_slice(&bytes).unwrap_or_else(|e| panic!("decode failed: {e}")); assert_eq!(decoded.addrs.len(), 3); @@ -140,7 +140,7 @@ fn addr_v1_wire_vector() { "f1f2", // port ); - let bytes = Vec::::from_hex(hex).unwrap_or_else(|e| panic!("bad hex: {e}")); + let bytes = decode_to_vec(hex).unwrap_or_else(|e| panic!("bad hex: {e}")); let decoded: Addr = decode_from_slice(&bytes).unwrap_or_else(|e| panic!("decode failed: {e}")); assert_eq!(decoded.addrs.len(), 3); @@ -164,10 +164,10 @@ fn addr_v1_wire_vector() { /// round-trip correctly. #[rstest] fn addrv2_all_bip155_network_types() { - let torv3_bytes: [u8; 32] = <[u8; 32]>::from_hex("79bcc625184b05194975c28b66b66b0469f7f6556fb1ac3189a79b40dda32f1f") + let torv3_bytes: [u8; 32] = decode_to_array("79bcc625184b05194975c28b66b66b0469f7f6556fb1ac3189a79b40dda32f1f") .unwrap_or_else(|e| panic!("bad hex: {e}")); - let i2p_bytes: [u8; 32] = <[u8; 32]>::from_hex("a2894dabaec08c0051a481a6dac88b64f98232ae42d4b6fd2fa81952dfe36a87") + let i2p_bytes: [u8; 32] = decode_to_array("a2894dabaec08c0051a481a6dac88b64f98232ae42d4b6fd2fa81952dfe36a87") .unwrap_or_else(|e| panic!("bad hex: {e}")); let original = AddrV2Msg { diff --git a/pkgs/pkc/Cargo.toml b/pkgs/pkc/Cargo.toml index 383b663b..41efea1b 100644 --- a/pkgs/pkc/Cargo.toml +++ b/pkgs/pkc/Cargo.toml @@ -21,7 +21,7 @@ group = { version = "0.14", default-features = false, optional = true } cfg-if = "1" dash-num = { version = "0.0.0", path = "../num", default-features = false } dash-types = { version = "0.0.0", path = "../types", default-features = false } -hex-conservative = { version = "0.3", default-features = false, features = [ +hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } k256 = { version = "0.14", default-features = false, features = [ @@ -47,7 +47,7 @@ bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] } dash-dev = { version = "0.0.0", path = "../dev", features = ["full"] } divan = "0.1" getrandom = { version = "0.4", features = ["sys_rng"] } -hex-conservative = "0.3" +hex-conservative = "1.3" rand_core = { version = "0.10" } rstest = "0.25" serde = { version = "1", features = ["derive"] } diff --git a/pkgs/primitives/Cargo.toml b/pkgs/primitives/Cargo.toml index 6510d022..4584072d 100644 --- a/pkgs/primitives/Cargo.toml +++ b/pkgs/primitives/Cargo.toml @@ -51,7 +51,7 @@ dash-types = { version = "0.0.0", path = "../types", default-features = false, f "codec", ] } cfg-if = "1" -hex-conservative = { version = "0.3", default-features = false, features = [ +hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } libm = { version = "0.2", default-features = false } diff --git a/pkgs/primitives/src/types/addrv1.rs b/pkgs/primitives/src/types/addrv1.rs index 4b970310..247b762b 100644 --- a/pkgs/primitives/src/types/addrv1.rs +++ b/pkgs/primitives/src/types/addrv1.rs @@ -126,10 +126,9 @@ impl ::serde::Serialize for AddrV1 { #[cfg(feature = "serde")] impl<'de> ::serde::Deserialize<'de> for AddrV1 { fn deserialize>(deserializer: D) -> Result { + use dash_types::__private::hex_conservative::decode_to_array; let s = ::deserialize(deserializer)?; - <[u8; 16] as dash_types::__private::hex_conservative::FromHex>::from_hex(&s) - .map(Self) - .map_err(::serde::de::Error::custom) + decode_to_array::<16>(&s).map(Self).map_err(::serde::de::Error::custom) } } diff --git a/pkgs/script/Cargo.toml b/pkgs/script/Cargo.toml index 3bb0f570..502f437e 100644 --- a/pkgs/script/Cargo.toml +++ b/pkgs/script/Cargo.toml @@ -37,7 +37,7 @@ serde = { version = "1", default-features = false, features = [ ], optional = true } [dev-dependencies] -hex-conservative = "0.3" +hex-conservative = "1.3" rstest = "0.25" [lints] diff --git a/pkgs/types/Cargo.toml b/pkgs/types/Cargo.toml index d02f80ad..390ee09a 100644 --- a/pkgs/types/Cargo.toml +++ b/pkgs/types/Cargo.toml @@ -33,7 +33,7 @@ bitcoin_hashes = { workspace = true, optional = true, features = ["alloc"] } bitcoin-primitives = { workspace = true, optional = true, features = ["alloc"] } cfg-if = "1" dash-types-marker = { version = "0.0.0", path = "marker", optional = true } -hex-conservative = { version = "0.3", default-features = false, features = [ +hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ], optional = true } subtle = { version = "2", default-features = false } diff --git a/pkgs/types/src/entity.rs b/pkgs/types/src/entity.rs index 22043227..1d441a8e 100644 --- a/pkgs/types/src/entity.rs +++ b/pkgs/types/src/entity.rs @@ -349,7 +349,7 @@ macro_rules! derive_bytes { { use $crate::__private::serde::de::Error as _; let s = <::alloc::string::String as $crate::__private::serde::Deserialize>::deserialize(deserializer)?; - let mut bytes = <[u8; $n] as $crate::__private::hex_conservative::FromHex>::from_hex(&s) + let mut bytes = $crate::__private::hex_conservative::decode_to_array::<$n>(&s) .map_err(D::Error::custom)?; if $rev { bytes.reverse(); diff --git a/pkgs/types/src/serialize.rs b/pkgs/types/src/serialize.rs index 96a31659..d2886ad0 100644 --- a/pkgs/types/src/serialize.rs +++ b/pkgs/types/src/serialize.rs @@ -10,7 +10,7 @@ pub mod hex { use crate::prelude::*; - use hex_conservative::{DisplayHex, FromHex}; + use hex_conservative::{decode_to_vec, DisplayHex}; /// Serializes bytes as a wire-order hex string. /// @@ -29,7 +29,7 @@ pub mod hex { /// it is not valid hex. pub fn deserialize<'de, D: ::serde::Deserializer<'de>>(deserializer: D) -> Result, D::Error> { let s = ::deserialize(deserializer)?; - Vec::::from_hex(&s).map_err(::serde::de::Error::custom) + decode_to_vec(&s).map_err(::serde::de::Error::custom) } } From 43452747598f77127e4b4e4949d4d8be1e87e3b1 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:37:55 +0530 Subject: [PATCH 05/13] sdk%chore: unify `hex-conservative`, `rand_core`, `subtle`, `zeroize` --- Cargo.toml | 6 +++++- pkgs/dev/Cargo.toml | 2 +- pkgs/num/Cargo.toml | 2 +- pkgs/p2p_core/Cargo.toml | 2 +- pkgs/pkc/Cargo.toml | 15 ++++++--------- pkgs/primitives/Cargo.toml | 2 +- pkgs/script/Cargo.toml | 2 +- pkgs/types/Cargo.toml | 6 +++--- 8 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fdd3b922..e1f064b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,11 +15,15 @@ resolver = "3" [workspace.dependencies] base58ck = { version = "0.4.0", default-features = false } +bitcoin_hashes = { version = "1.2.0", default-features = false } bitcoin-consensus-encoding = { version = "1.2.0", default-features = false } bitcoin-internals = { version = "0.6.0", default-features = false } bitcoin-primitives = { version = "0.103.0", default-features = false } bitcoin-units = { version = "0.5.0", default-features = false } -bitcoin_hashes = { version = "1.2.0", default-features = false } +hex-conservative = { version = "1.3", default-features = false } +rand_core = { version = "0.10.1", default-features = false } +subtle = { version = "2.6.1", default-features = false } +zeroize = { version = "1.9.0", default-features = false } [workspace.lints.clippy] expect_used = "deny" diff --git a/pkgs/dev/Cargo.toml b/pkgs/dev/Cargo.toml index 1de5eb9f..254a6c00 100644 --- a/pkgs/dev/Cargo.toml +++ b/pkgs/dev/Cargo.toml @@ -61,7 +61,7 @@ dash-primitives = { version = "0.0.0", path = "../primitives" } dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ "codec", ] } -hex-conservative = { version = "1.3", default-features = false, features = [ +hex-conservative = { workspace = true, features = [ "alloc", ] } chrono = { version = "0.4", default-features = false, features = [ diff --git a/pkgs/num/Cargo.toml b/pkgs/num/Cargo.toml index e5ad2ad3..6636aabf 100644 --- a/pkgs/num/Cargo.toml +++ b/pkgs/num/Cargo.toml @@ -23,7 +23,7 @@ serde = ["dep:serde", "dash-types/serde"] [dependencies] bitcoin-consensus-encoding = { workspace = true, optional = true } dash-types = { version = "0.0.0", path = "../types", default-features = false } -hex-conservative = { version = "1.3", default-features = false } +hex-conservative = { workspace = true } serde = { version = "1", default-features = false, features = [ "derive", "alloc", diff --git a/pkgs/p2p_core/Cargo.toml b/pkgs/p2p_core/Cargo.toml index 3f3bb956..48c8a6e3 100644 --- a/pkgs/p2p_core/Cargo.toml +++ b/pkgs/p2p_core/Cargo.toml @@ -46,7 +46,7 @@ serde = { version = "1", default-features = false, features = [ [dev-dependencies] dash-dev = { version = "0.0.0", path = "../dev", features = ["full"] } -hex-conservative = "1.3" +hex-conservative = { workspace = true, features = ["std"] } rstest = "0.25" [lints] diff --git a/pkgs/pkc/Cargo.toml b/pkgs/pkc/Cargo.toml index 41efea1b..a62bed9e 100644 --- a/pkgs/pkc/Cargo.toml +++ b/pkgs/pkc/Cargo.toml @@ -21,7 +21,7 @@ group = { version = "0.14", default-features = false, optional = true } cfg-if = "1" dash-num = { version = "0.0.0", path = "../num", default-features = false } dash-types = { version = "0.0.0", path = "../types", default-features = false } -hex-conservative = { version = "1.3", default-features = false, features = [ +hex-conservative = { workspace = true, features = [ "alloc", ] } k256 = { version = "0.14", default-features = false, features = [ @@ -29,26 +29,23 @@ k256 = { version = "0.14", default-features = false, features = [ "ecdsa", "sha256", ], optional = true } -rand_core = { version = "0.10", default-features = false, optional = true } +rand_core = { workspace = true, optional = true } rstest = { version = "0.25", optional = true } serde = { version = "1", default-features = false, features = [ "alloc", "derive", ], optional = true } sha2 = { version = "0.10", default-features = false, optional = true } -subtle = { version = "2", default-features = false } -zeroize = { version = "1", default-features = false, features = [ - "alloc", - "derive", -] } +subtle = { workspace = true } +zeroize = { workspace = true, features = ["alloc", "derive"] } [dev-dependencies] bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] } dash-dev = { version = "0.0.0", path = "../dev", features = ["full"] } divan = "0.1" getrandom = { version = "0.4", features = ["sys_rng"] } -hex-conservative = "1.3" -rand_core = { version = "0.10" } +hex-conservative = { workspace = true, features = ["std"] } +rand_core = { workspace = true } rstest = "0.25" serde = { version = "1", features = ["derive"] } diff --git a/pkgs/primitives/Cargo.toml b/pkgs/primitives/Cargo.toml index 4584072d..ba1b26bc 100644 --- a/pkgs/primitives/Cargo.toml +++ b/pkgs/primitives/Cargo.toml @@ -51,7 +51,7 @@ dash-types = { version = "0.0.0", path = "../types", default-features = false, f "codec", ] } cfg-if = "1" -hex-conservative = { version = "1.3", default-features = false, features = [ +hex-conservative = { workspace = true, features = [ "alloc", ] } libm = { version = "0.2", default-features = false } diff --git a/pkgs/script/Cargo.toml b/pkgs/script/Cargo.toml index 502f437e..95aeb72c 100644 --- a/pkgs/script/Cargo.toml +++ b/pkgs/script/Cargo.toml @@ -37,7 +37,7 @@ serde = { version = "1", default-features = false, features = [ ], optional = true } [dev-dependencies] -hex-conservative = "1.3" +hex-conservative = { workspace = true, features = ["std"] } rstest = "0.25" [lints] diff --git a/pkgs/types/Cargo.toml b/pkgs/types/Cargo.toml index 390ee09a..2a616f60 100644 --- a/pkgs/types/Cargo.toml +++ b/pkgs/types/Cargo.toml @@ -33,15 +33,15 @@ bitcoin_hashes = { workspace = true, optional = true, features = ["alloc"] } bitcoin-primitives = { workspace = true, optional = true, features = ["alloc"] } cfg-if = "1" dash-types-marker = { version = "0.0.0", path = "marker", optional = true } -hex-conservative = { version = "1.3", default-features = false, features = [ +hex-conservative = { workspace = true, features = [ "alloc", ], optional = true } -subtle = { version = "2", default-features = false } +subtle = { workspace = true } serde = { version = "1", default-features = false, features = [ "derive", "alloc", ], optional = true } -zeroize = { version = "1", default-features = false } +zeroize = { workspace = true } [dev-dependencies] rstest = "0.25" From ba43f2f210af60e3979dbbe138287eb49512c15c Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 03:24:10 +0530 Subject: [PATCH 06/13] sdk%lint(cargo): allowlist permissively licensed deps, warn multivers --- deny.toml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/deny.toml b/deny.toml index 89c16658..e2f148e3 100644 --- a/deny.toml +++ b/deny.toml @@ -3,3 +3,19 @@ all-features = true [advisories] yanked = "deny" + +[bans] +multiple-versions = "warn" + +[licenses] +allow = [ + "Apache-2.0", + "BSD-2-Clause", + "BSD-3-Clause", + "BSL-1.0", + "CC0-1.0", + "ISC", + "MIT", + "Unicode-3.0", + "Unlicense", +] From bdafda0d24acea69ef1284a9e3b9d203e058b483 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:43:01 +0530 Subject: [PATCH 07/13] types%chore: hide publicly exposed but non-public definitions from docs --- pkgs/types/src/codec.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/types/src/codec.rs b/pkgs/types/src/codec.rs index efaf9b50..f68d2dd5 100644 --- a/pkgs/types/src/codec.rs +++ b/pkgs/types/src/codec.rs @@ -363,10 +363,12 @@ cfg_if::cfg_if! { if #[cfg(feature = "serde")] { use serde::{Serialize, de::DeserializeOwned}; + #[doc(hidden)] pub trait Codec: BaseCodec + Hashable + TypeId + Serialize + DeserializeOwned {} impl + Hashable + TypeId + Serialize + DeserializeOwned, E> Codec for T {} } else { + #[doc(hidden)] pub trait Codec: BaseCodec + Hashable + TypeId {} impl + Hashable + TypeId, E> Codec for T {} From 46c64da86f0257dd384c269133152970a138757e Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 06:05:06 +0530 Subject: [PATCH 08/13] sdk%doc(zen): enable emojis --- docs/zensical.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/zensical.toml b/docs/zensical.toml index 907fc245..13df2591 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -76,6 +76,9 @@ permalink = true [project.markdown_extensions.pymdownx.betterem] [project.markdown_extensions.pymdownx.caret] [project.markdown_extensions.pymdownx.details] +[project.markdown_extensions.pymdownx.emoji] +emoji_generator = "zensical.extensions.emoji.to_svg" +emoji_index = "zensical.extensions.emoji.twemoji" [project.markdown_extensions.pymdownx.highlight] anchor_linenums = true line_spans = "__span" From 0bf2e2e452091c9dfe515eb13561e7243dfd13e4 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 05:25:25 +0530 Subject: [PATCH 09/13] types%doc: flesh out basic README, link to Zensical, clarify feat policy --- docs/types/README.md | 9 ++++++ docs/types/changelog.md | 9 ++++++ docs/zensical.toml | 4 +++ pkgs/types/Cargo.toml | 23 ++++++++++++---- pkgs/types/README.md | 55 +++++++++++++++++++++++++++++++++++++ pkgs/types/marker/README.md | 2 ++ 6 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 docs/types/README.md create mode 100644 docs/types/changelog.md diff --git a/docs/types/README.md b/docs/types/README.md new file mode 100644 index 00000000..85bb81d6 --- /dev/null +++ b/docs/types/README.md @@ -0,0 +1,9 @@ + + +> [!NOTE] +> This is a spliced page meant for publication on Zensical. See [`pkgs/types`](../../pkgs/types/) for available +> documentation. + + + + diff --git a/docs/types/changelog.md b/docs/types/changelog.md new file mode 100644 index 00000000..a7b0f2d1 --- /dev/null +++ b/docs/types/changelog.md @@ -0,0 +1,9 @@ + + +> [!NOTE] +> This is a spliced page meant for publication on Zensical. See [`pkgs/types`](../../pkgs/types/) for available +> documentation. + + + + diff --git a/docs/zensical.toml b/docs/zensical.toml index 13df2591..78f59b15 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -24,6 +24,10 @@ nav = [ { "Maintenance" = "dev/maintenance.md" }, { "Style Guide (Rust)" = "dev/guide_rust.md" }, ] }, + { "dash-types" = [ + { "Overview" = "types/README.md" }, + { "Changelog" = "types/changelog.md" }, + ] }, { "Samples" = [ { "Genesis Solver" = "samples/solver/README.md" }, { "Object Parser" = "samples/parser/README.md" }, diff --git a/pkgs/types/Cargo.toml b/pkgs/types/Cargo.toml index 2a616f60..bd1a0e23 100644 --- a/pkgs/types/Cargo.toml +++ b/pkgs/types/Cargo.toml @@ -10,21 +10,34 @@ repository.workspace = true rust-version.workspace = true [features] -default = [] +default = ["codec"] std = [ "bitcoin-consensus-encoding?/std", "bitcoin-primitives?/std", "hex-conservative?/std", ] -full = ["std", "codec", "serde", "bitcoin-primitives"] -codec = ["dep:bitcoin-consensus-encoding", "dep:dash-types-marker"] + bitcoin-primitives = [ "codec", "dep:base58ck", - "dep:bitcoin-primitives", "dep:bitcoin_hashes", + "dep:bitcoin-primitives", +] +codec = [ + "dep:bitcoin-consensus-encoding", + "dep:dash-types-marker", +] +full = [ + "bitcoin-primitives", + "codec", + "serde", + "std", +] +serde = [ + "codec", + "dep:hex-conservative", + "dep:serde", ] -serde = ["dep:serde", "dep:hex-conservative"] [dependencies] base58ck = { workspace = true, optional = true, features = ["alloc"] } diff --git a/pkgs/types/README.md b/pkgs/types/README.md index 532aa85d..88b74d6f 100644 --- a/pkgs/types/README.md +++ b/pkgs/types/README.md @@ -2,3 +2,58 @@ [![dash-types](https://img.shields.io/codecov/c/github/dashpay/base-sdk/develop?flag=dash-types&style=flat&logo=codecov&logoColor=white&label=types)](https://app.codecov.io/github/dashpay/base-sdk/tree/develop/pkgs%2Ftypes) # dash-types + +This crate supplies shared definitions and +[procedural macros](https://github.com/dashpay/base-sdk/tree/develop/pkgs/types/marker) that build the foundation +for the Base SDK's higher level types, including + +* Support for Bitcoin-based consensus encoding (using [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin)'s + [`bitcoin-consensus-encoding`](https://docs.rs/bitcoin-consensus-encoding)) +* Standardized `serde` formatting routines for common types (long integers, UTF-8 bytes, hex bytes) +* Growable (`Vec{De,En}coder`) and fixed sized (`Arr{De,En}coder`) codecs, fixed size buffers (`ArrayBuf`) +* Macro definitions to reduce routine boilerplate +* Name-stable programmatic identifiers (`TypeId`) for consensus types + +## Usage + +To import `dash-types` to your project, add the following to the `[dependencies]` section in `Cargo.toml` + +```toml +dash-types = "0.1.0-beta" +``` + +To use an unpublished revision of this crate, identify the commit hash to pin against and use the following replacing +the value of `rev`. + +```toml +dash-types = { git = "https://github.com/dashpay/base-sdk", rev = "a1b2c3d4e5f67890abcdef1234567890abcdef" } +``` + +To build this crate on a clone of the repository, at the repository root, run the following + +```bash +cargo build --package dash-types --all-features +``` + +## Features + +This crate is `#![no_std]` + `alloc` by default. + +| Feature | Default | Description | +| ------- | ------- | ----------- | +| `bitcoin-primitives` | | Enables [adapters](https://github.com/dashpay/base-sdk/blob/develop/pkgs/types/src/adapters.rs) for types defined in [`bitcoin-primitives`](https://docs.rs/bitcoin-primitives). _Implies `codec`._ | +| `codec` | :white_check_mark: | Enables support for encoding and decoding types using [`bitcoin-consensus-encoding`](https://docs.rs/bitcoin-consensus-encoding) | +| `full` | | Enables all features and `std` support. | +| `serde` | | Enables support for encoding and decoding `codec`-backed types using [`serde`](https://github.com/serde-rs/serde). _Implies `codec`._ | + +## Documentation + + +Documentation for the most recent release of `dash-types` is available at https://dashpay.github.io/base-sdk/types and +changes between versions are recorded in the [changelog](https://dashpay.github.io/base-sdk/types/changelog). + +## License + + +`dash-types` is released under the terms of the MIT license. Copyright © 2026-present, The Dash Core developers. +To read a copy of the license terms, visit https://opensource.org/license/MIT. diff --git a/pkgs/types/marker/README.md b/pkgs/types/marker/README.md index 98938647..888b800e 100644 --- a/pkgs/types/marker/README.md +++ b/pkgs/types/marker/README.md @@ -2,3 +2,5 @@ [![dash-types](https://img.shields.io/codecov/c/github/dashpay/base-sdk/develop?flag=dash-types&style=flat&logo=codecov&logoColor=white&label=types)](https://app.codecov.io/github/dashpay/base-sdk/tree/develop/pkgs%2Ftypes) # dash-types-marker + +This crate supplies procedural macros to the `dash-types` crate. From 9923979af294f39075dcfc2d5f80939190db5b15 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 05:26:21 +0530 Subject: [PATCH 10/13] types%chore: prepare crate for initial release, update changelog --- Cargo.lock | 4 ++-- docs/samples/Cargo.lock | 4 ++-- docs/samples/parser/Cargo.toml | 2 +- docs/samples/solver/Cargo.toml | 2 +- pkgs/dev/Cargo.toml | 4 ++-- pkgs/num/Cargo.toml | 2 +- pkgs/p2p_core/Cargo.toml | 2 +- pkgs/params/Cargo.toml | 2 +- pkgs/pkc/Cargo.toml | 2 +- pkgs/primitives/Cargo.toml | 2 +- pkgs/script/Cargo.toml | 2 +- pkgs/types/CHANGELOG.md | 2 ++ pkgs/types/Cargo.toml | 20 ++++++++++++++++++-- pkgs/types/LICENSE | 21 +++++++++++++++++++++ pkgs/types/marker/Cargo.toml | 13 ++++++++++++- pkgs/types/marker/LICENSE | 21 +++++++++++++++++++++ 16 files changed, 88 insertions(+), 17 deletions(-) create mode 100644 pkgs/types/LICENSE create mode 100644 pkgs/types/marker/LICENSE diff --git a/Cargo.lock b/Cargo.lock index a14339c5..8554caf7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -608,7 +608,7 @@ dependencies = [ [[package]] name = "dash-types" -version = "0.0.0" +version = "0.1.0-beta" dependencies = [ "base58ck", "bitcoin-consensus-encoding 1.2.0", @@ -625,7 +625,7 @@ dependencies = [ [[package]] name = "dash-types-marker" -version = "0.0.0" +version = "0.1.0-beta" dependencies = [ "quote", "syn 2.0.119", diff --git a/docs/samples/Cargo.lock b/docs/samples/Cargo.lock index f897ab0d..d3d99e63 100644 --- a/docs/samples/Cargo.lock +++ b/docs/samples/Cargo.lock @@ -208,7 +208,7 @@ dependencies = [ [[package]] name = "dash-types" -version = "0.0.0" +version = "0.1.0-beta" dependencies = [ "base58ck", "bitcoin-consensus-encoding 1.2.0", @@ -224,7 +224,7 @@ dependencies = [ [[package]] name = "dash-types-marker" -version = "0.0.0" +version = "0.1.0-beta" dependencies = [ "quote", "syn 2.0.119", diff --git a/docs/samples/parser/Cargo.toml b/docs/samples/parser/Cargo.toml index 2cbccf8b..d3a2052d 100644 --- a/docs/samples/parser/Cargo.toml +++ b/docs/samples/parser/Cargo.toml @@ -22,7 +22,7 @@ full = ["std"] dash-primitives = { version = "0.0.0", path = "../../../pkgs/primitives", default-features = false, features = [ "serde", ] } -dash-types = { version = "0.0.0", path = "../../../pkgs/types", default-features = false } +dash-types = { version = "0.1.0-beta", path = "../../../pkgs/types", default-features = false } hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } diff --git a/docs/samples/solver/Cargo.toml b/docs/samples/solver/Cargo.toml index 2332516d..79270b44 100644 --- a/docs/samples/solver/Cargo.toml +++ b/docs/samples/solver/Cargo.toml @@ -28,7 +28,7 @@ dash-pow = { version = "0.0.0", path = "../../../pkgs/pow", default-features = f ] } dash-primitives = { version = "0.0.0", path = "../../../pkgs/primitives", default-features = false } dash-script = { version = "0.0.0", path = "../../../pkgs/script", default-features = false } -dash-types = { version = "0.0.0", path = "../../../pkgs/types", default-features = false } +dash-types = { version = "0.1.0-beta", path = "../../../pkgs/types", default-features = false } hex-conservative = { version = "1.3", default-features = false, features = [ "alloc", ] } diff --git a/pkgs/dev/Cargo.toml b/pkgs/dev/Cargo.toml index 254a6c00..4d58b3e4 100644 --- a/pkgs/dev/Cargo.toml +++ b/pkgs/dev/Cargo.toml @@ -42,7 +42,7 @@ bin = [ [build-dependencies] built = { version = "0.7", features = ["dependency-tree", "git2"] } -dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ "codec", ] } proc-macro2 = "1" @@ -58,7 +58,7 @@ dash-num = { version = "0.0.0", path = "../num", optional = true, features = [ dash-params = { version = "0.0.0", path = "../params", optional = true } dash-pow = { version = "0.0.0", path = "../pow", optional = true } dash-primitives = { version = "0.0.0", path = "../primitives" } -dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ "codec", ] } hex-conservative = { workspace = true, features = [ diff --git a/pkgs/num/Cargo.toml b/pkgs/num/Cargo.toml index 6636aabf..7f4b0a5f 100644 --- a/pkgs/num/Cargo.toml +++ b/pkgs/num/Cargo.toml @@ -22,7 +22,7 @@ serde = ["dep:serde", "dash-types/serde"] [dependencies] bitcoin-consensus-encoding = { workspace = true, optional = true } -dash-types = { version = "0.0.0", path = "../types", default-features = false } +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false } hex-conservative = { workspace = true } serde = { version = "1", default-features = false, features = [ "derive", diff --git a/pkgs/p2p_core/Cargo.toml b/pkgs/p2p_core/Cargo.toml index 48c8a6e3..48b80e2d 100644 --- a/pkgs/p2p_core/Cargo.toml +++ b/pkgs/p2p_core/Cargo.toml @@ -36,7 +36,7 @@ dash-pkc = { version = "0.0.0", path = "../pkc", features = ["codec"] } dash-script = { version = "0.0.0", path = "../script" } dash-params = { version = "0.0.0", path = "../params" } dash-primitives = { version = "0.0.0", path = "../primitives" } -dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ "codec", ] } serde = { version = "1", default-features = false, features = [ diff --git a/pkgs/params/Cargo.toml b/pkgs/params/Cargo.toml index 0f16b904..ff88a4c5 100644 --- a/pkgs/params/Cargo.toml +++ b/pkgs/params/Cargo.toml @@ -20,7 +20,7 @@ bitcoin-units = { workspace = true, features = ["alloc"] } dash-num = { version = "0.0.0", path = "../num", features = ["codec"] } dash-primitives = { version = "0.0.0", path = "../primitives" } dash-script = { version = "0.0.0", path = "../script" } -dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ "codec", ] } hex-literal = "0.4" diff --git a/pkgs/pkc/Cargo.toml b/pkgs/pkc/Cargo.toml index a62bed9e..8eb3251e 100644 --- a/pkgs/pkc/Cargo.toml +++ b/pkgs/pkc/Cargo.toml @@ -20,7 +20,7 @@ ff = { version = "0.14", default-features = false, optional = true } group = { version = "0.14", default-features = false, optional = true } cfg-if = "1" dash-num = { version = "0.0.0", path = "../num", default-features = false } -dash-types = { version = "0.0.0", path = "../types", default-features = false } +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false } hex-conservative = { workspace = true, features = [ "alloc", ] } diff --git a/pkgs/primitives/Cargo.toml b/pkgs/primitives/Cargo.toml index ba1b26bc..87fbb03a 100644 --- a/pkgs/primitives/Cargo.toml +++ b/pkgs/primitives/Cargo.toml @@ -46,7 +46,7 @@ dash-pkc = { version = "0.0.0", path = "../pkc", default-features = false, featu ] } dash-pow = { version = "0.0.0", path = "../pow" } dash-script = { version = "0.0.0", path = "../script" } -dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ "bitcoin-primitives", "codec", ] } diff --git a/pkgs/script/Cargo.toml b/pkgs/script/Cargo.toml index 95aeb72c..d55b5315 100644 --- a/pkgs/script/Cargo.toml +++ b/pkgs/script/Cargo.toml @@ -27,7 +27,7 @@ dash-num = { version = "0.0.0", path = "../num", default-features = false } dash-pkc = { version = "0.0.0", path = "../pkc", default-features = false, features = [ "codec", ] } -dash-types = { version = "0.0.0", path = "../types", default-features = false, features = [ +dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ "bitcoin-primitives", "codec", ] } diff --git a/pkgs/types/CHANGELOG.md b/pkgs/types/CHANGELOG.md index dd8dd35c..aaa3e795 100644 --- a/pkgs/types/CHANGELOG.md +++ b/pkgs/types/CHANGELOG.md @@ -7,4 +7,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +## [0.1.0-beta] - 2026-09-14 + - Initial release. diff --git a/pkgs/types/Cargo.toml b/pkgs/types/Cargo.toml index bd1a0e23..e84091ce 100644 --- a/pkgs/types/Cargo.toml +++ b/pkgs/types/Cargo.toml @@ -1,6 +1,19 @@ [package] name = "dash-types" -version = "0.0.0" +version = "0.1.0-beta" +description = "Fixed-width and buffered type (de)serialization for the Dash Base SDK" +keywords = ["base-sdk", "dash", "dashcore", "dashpay"] +categories = [ + "cryptography::cryptocurrencies", + "encoding", + "no-std", + "wasm", +] +exclude = [ + "bench", + "corpus", + "tests", +] readme = "README.md" authors.workspace = true edition.workspace = true @@ -45,7 +58,7 @@ bitcoin-consensus-encoding = { workspace = true, optional = true } bitcoin_hashes = { workspace = true, optional = true, features = ["alloc"] } bitcoin-primitives = { workspace = true, optional = true, features = ["alloc"] } cfg-if = "1" -dash-types-marker = { version = "0.0.0", path = "marker", optional = true } +dash-types-marker = { version = "0.1.0-beta", path = "marker", optional = true } hex-conservative = { workspace = true, features = [ "alloc", ], optional = true } @@ -62,3 +75,6 @@ serde = { version = "1", features = ["derive"] } [lints] workspace = true + +[package.metadata.docs.rs] +all-features = true diff --git a/pkgs/types/LICENSE b/pkgs/types/LICENSE new file mode 100644 index 00000000..a2b849b2 --- /dev/null +++ b/pkgs/types/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2026-present, The Dash Core developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/pkgs/types/marker/Cargo.toml b/pkgs/types/marker/Cargo.toml index aed30cb6..b8dfb2b8 100644 --- a/pkgs/types/marker/Cargo.toml +++ b/pkgs/types/marker/Cargo.toml @@ -1,6 +1,14 @@ [package] name = "dash-types-marker" -version = "0.0.0" +version = "0.1.0-beta" +description = "Procedural macros for the Dash Base SDK" +keywords = ["base-sdk", "dash", "dashcore", "dashpay"] +categories = ["development-tools::procedural-macro-helpers"] +exclude = [ + "bench", + "corpus", + "tests", +] readme = "README.md" authors.workspace = true edition.workspace = true @@ -19,3 +27,6 @@ xxhash-rust = { version = "0.8", features = ["xxh32"] } [lints] workspace = true + +[package.metadata.docs.rs] +all-features = true diff --git a/pkgs/types/marker/LICENSE b/pkgs/types/marker/LICENSE new file mode 100644 index 00000000..a2b849b2 --- /dev/null +++ b/pkgs/types/marker/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2026-present, The Dash Core developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. From e458776e525f563487a900fbbb338cb14aade7ac Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 05:28:25 +0530 Subject: [PATCH 11/13] num%doc: flesh out basic README, link to Zensical, clarify feat policy --- docs/num/README.md | 9 ++++++++ docs/num/changelog.md | 9 ++++++++ docs/zensical.toml | 4 ++++ pkgs/num/Cargo.toml | 20 +++++++++++++---- pkgs/num/README.md | 50 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 docs/num/README.md create mode 100644 docs/num/changelog.md diff --git a/docs/num/README.md b/docs/num/README.md new file mode 100644 index 00000000..ab52afec --- /dev/null +++ b/docs/num/README.md @@ -0,0 +1,9 @@ + + +> [!NOTE] +> This is a spliced page meant for publication on Zensical. See [`pkgs/num`](../../pkgs/num/) for available +> documentation. + + + + diff --git a/docs/num/changelog.md b/docs/num/changelog.md new file mode 100644 index 00000000..ca950f31 --- /dev/null +++ b/docs/num/changelog.md @@ -0,0 +1,9 @@ + + +> [!NOTE] +> This is a spliced page meant for publication on Zensical. See [`pkgs/num`](../../pkgs/num/) for available +> documentation. + + + + diff --git a/docs/zensical.toml b/docs/zensical.toml index 78f59b15..95baa935 100644 --- a/docs/zensical.toml +++ b/docs/zensical.toml @@ -28,6 +28,10 @@ nav = [ { "Overview" = "types/README.md" }, { "Changelog" = "types/changelog.md" }, ] }, + { "dash-num" = [ + { "Overview" = "num/README.md" }, + { "Changelog" = "num/changelog.md" }, + ] }, { "Samples" = [ { "Genesis Solver" = "samples/solver/README.md" }, { "Object Parser" = "samples/parser/README.md" }, diff --git a/pkgs/num/Cargo.toml b/pkgs/num/Cargo.toml index 7f4b0a5f..a83fc020 100644 --- a/pkgs/num/Cargo.toml +++ b/pkgs/num/Cargo.toml @@ -10,15 +10,27 @@ repository.workspace = true rust-version.workspace = true [features] -default = [] +default = ["codec"] std = [ "bitcoin-consensus-encoding?/std", "dash-types/std", "hex-conservative/std", ] -full = ["std", "codec", "serde"] -codec = ["dep:bitcoin-consensus-encoding", "dash-types/codec"] -serde = ["dep:serde", "dash-types/serde"] + +codec = [ + "dash-types/codec", + "dep:bitcoin-consensus-encoding", +] +full = [ + "codec", + "serde", + "std", +] +serde = [ + "codec", + "dash-types/serde", + "dep:serde", +] [dependencies] bitcoin-consensus-encoding = { workspace = true, optional = true } diff --git a/pkgs/num/README.md b/pkgs/num/README.md index 1754a97e..a285bafb 100644 --- a/pkgs/num/README.md +++ b/pkgs/num/README.md @@ -2,3 +2,53 @@ [![dash-num](https://img.shields.io/codecov/c/github/dashpay/base-sdk/develop?flag=dash-num&style=flat&logo=codecov&logoColor=white&label=num)](https://app.codecov.io/github/dashpay/base-sdk/tree/develop/pkgs%2Fnum) # dash-num + +This crate supplies the wide blob and arithmetic types used by the Dash Base SDK for consensus-stable types, including + +* Fixed-width `HashBlob`s stored in little endian and rendered in big endian format for 160-bit (`Hash160`) and 256-bit + width (`Hash256`) +* Unsigned 256-bit arithmetic (`Arith256`) with consensus-compatible behavior (e.g. wrapping operators) +* Compact representation of difficulty targets (`CompactTarget`) and bidirectional conversion with `Arith256` + +## Usage + +To import `dash-num` to your project, add the following to the `[dependencies]` section in `Cargo.toml` + +```toml +dash-num = "0.1.0-beta" +``` + +To use an unpublished revision of this crate, identify the commit hash to pin against and use the following replacing +the value of `rev`. + +```toml +dash-num = { git = "https://github.com/dashpay/base-sdk", rev = "a1b2c3d4e5f67890abcdef1234567890abcdef" } +``` + +To build this crate on a clone of the repository, at the repository root, run the following + +```bash +cargo build --package dash-num --all-features +``` + +## Features + +This crate is `#![no_std]` + `alloc` by default. + +| Feature | Default | Description | +| ------- | ------- | ----------- | +| `codec` | :white_check_mark: | Enables support for encoding and decoding types using [`bitcoin-consensus-encoding`](https://docs.rs/bitcoin-consensus-encoding) | +| `full` | | Enables all features and `std` support. | +| `serde` | | Enables support for encoding and decoding `codec`-backed types using [`serde`](https://github.com/serde-rs/serde). _Implies `codec`._ | + +## Documentation + + +Documentation for the most recent release of `dash-num` is available at https://dashpay.github.io/base-sdk/num and +changes between versions are recorded in the [changelog](https://dashpay.github.io/base-sdk/num/changelog). + +## License + + +`dash-num` is released under the terms of the MIT license. Copyright © 2026-present, The Dash Core developers. +To read a copy of the license terms, visit https://opensource.org/license/MIT. From f07ced6c3f7ac5b3d89a9fe5d2fbaa537b7b9e4e Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 04:17:17 +0530 Subject: [PATCH 12/13] num%chore: prepare crate for initial release, update changelog --- Cargo.lock | 2 +- docs/samples/Cargo.lock | 2 +- docs/samples/solver/Cargo.toml | 2 +- pkgs/dev/Cargo.toml | 2 +- pkgs/num/CHANGELOG.md | 2 ++ pkgs/num/Cargo.toml | 20 ++++++++++++++++++-- pkgs/num/LICENSE | 21 +++++++++++++++++++++ pkgs/p2p_core/Cargo.toml | 2 +- pkgs/params/Cargo.toml | 2 +- pkgs/pkc/Cargo.toml | 2 +- pkgs/primitives/Cargo.toml | 2 +- pkgs/script/Cargo.toml | 2 +- 12 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 pkgs/num/LICENSE diff --git a/Cargo.lock b/Cargo.lock index 8554caf7..45a9ff09 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -486,7 +486,7 @@ dependencies = [ [[package]] name = "dash-num" -version = "0.0.0" +version = "0.1.0-beta" dependencies = [ "bitcoin-consensus-encoding 1.2.0", "dash-dev", diff --git a/docs/samples/Cargo.lock b/docs/samples/Cargo.lock index d3d99e63..79a66edc 100644 --- a/docs/samples/Cargo.lock +++ b/docs/samples/Cargo.lock @@ -118,7 +118,7 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "dash-num" -version = "0.0.0" +version = "0.1.0-beta" dependencies = [ "bitcoin-consensus-encoding 1.2.0", "dash-types", diff --git a/docs/samples/solver/Cargo.toml b/docs/samples/solver/Cargo.toml index 79270b44..c69296a5 100644 --- a/docs/samples/solver/Cargo.toml +++ b/docs/samples/solver/Cargo.toml @@ -22,7 +22,7 @@ full = ["std"] bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] } bitcoin-primitives = { workspace = true, features = ["alloc"] } bitcoin-units = { workspace = true, features = ["alloc"] } -dash-num = { version = "0.0.0", path = "../../../pkgs/num", default-features = false } +dash-num = { version = "0.1.0-beta", path = "../../../pkgs/num", default-features = false } dash-pow = { version = "0.0.0", path = "../../../pkgs/pow", default-features = false, features = [ "simd", ] } diff --git a/pkgs/dev/Cargo.toml b/pkgs/dev/Cargo.toml index 4d58b3e4..02913c68 100644 --- a/pkgs/dev/Cargo.toml +++ b/pkgs/dev/Cargo.toml @@ -52,7 +52,7 @@ xxhash-rust = { version = "0.8", features = ["xxh32"] } [dependencies] bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] } cfg-if = "1" -dash-num = { version = "0.0.0", path = "../num", optional = true, features = [ +dash-num = { version = "0.1.0-beta", path = "../num", optional = true, features = [ "codec", ] } dash-params = { version = "0.0.0", path = "../params", optional = true } diff --git a/pkgs/num/CHANGELOG.md b/pkgs/num/CHANGELOG.md index 609f3fbb..6f8f64e9 100644 --- a/pkgs/num/CHANGELOG.md +++ b/pkgs/num/CHANGELOG.md @@ -7,4 +7,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +## [0.1.0-beta] - 2026-09-14 + - Initial release. diff --git a/pkgs/num/Cargo.toml b/pkgs/num/Cargo.toml index a83fc020..1f3391b8 100644 --- a/pkgs/num/Cargo.toml +++ b/pkgs/num/Cargo.toml @@ -1,6 +1,19 @@ [package] name = "dash-num" -version = "0.0.0" +version = "0.1.0-beta" +description = "Wide-integer blob and arithmetic types for the Dash Base SDK" +keywords = ["base-sdk", "dash", "dashcore", "dashpay"] +categories = [ + "cryptography::cryptocurrencies", + "encoding", + "no-std", + "wasm", +] +exclude = [ + "bench", + "corpus", + "tests", +] readme = "README.md" authors.workspace = true edition.workspace = true @@ -42,7 +55,7 @@ serde = { version = "1", default-features = false, features = [ ], optional = true } [dev-dependencies] -dash-dev = { version = "0.0.0", path = "../dev", features = ["full"] } +dash-dev = { path = "../dev", features = ["full"] } divan = "0.1" hex-literal = "0.4" rstest = "0.25" @@ -72,3 +85,6 @@ harness = false [lints] workspace = true + +[package.metadata.docs.rs] +all-features = true diff --git a/pkgs/num/LICENSE b/pkgs/num/LICENSE new file mode 100644 index 00000000..a2b849b2 --- /dev/null +++ b/pkgs/num/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2026-present, The Dash Core developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/pkgs/p2p_core/Cargo.toml b/pkgs/p2p_core/Cargo.toml index 48b80e2d..cbf71742 100644 --- a/pkgs/p2p_core/Cargo.toml +++ b/pkgs/p2p_core/Cargo.toml @@ -31,7 +31,7 @@ full = ["std", "serde"] bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] } bitcoin-internals = { workspace = true } cfg-if = "1" -dash-num = { version = "0.0.0", path = "../num", features = ["codec"] } +dash-num = { version = "0.1.0-beta", path = "../num", features = ["codec"] } dash-pkc = { version = "0.0.0", path = "../pkc", features = ["codec"] } dash-script = { version = "0.0.0", path = "../script" } dash-params = { version = "0.0.0", path = "../params" } diff --git a/pkgs/params/Cargo.toml b/pkgs/params/Cargo.toml index ff88a4c5..9461bedf 100644 --- a/pkgs/params/Cargo.toml +++ b/pkgs/params/Cargo.toml @@ -17,7 +17,7 @@ full = ["std"] [dependencies] bitcoin-primitives = { workspace = true, features = ["alloc"] } bitcoin-units = { workspace = true, features = ["alloc"] } -dash-num = { version = "0.0.0", path = "../num", features = ["codec"] } +dash-num = { version = "0.1.0-beta", path = "../num", features = ["codec"] } dash-primitives = { version = "0.0.0", path = "../primitives" } dash-script = { version = "0.0.0", path = "../script" } dash-types = { version = "0.1.0-beta", path = "../types", default-features = false, features = [ diff --git a/pkgs/pkc/Cargo.toml b/pkgs/pkc/Cargo.toml index 8eb3251e..c4b8b681 100644 --- a/pkgs/pkc/Cargo.toml +++ b/pkgs/pkc/Cargo.toml @@ -19,7 +19,7 @@ blst = { version = "0.3", default-features = false, optional = true } ff = { version = "0.14", default-features = false, optional = true } group = { version = "0.14", default-features = false, optional = true } cfg-if = "1" -dash-num = { version = "0.0.0", path = "../num", default-features = false } +dash-num = { version = "0.1.0-beta", path = "../num", default-features = false } dash-types = { version = "0.1.0-beta", path = "../types", default-features = false } hex-conservative = { workspace = true, features = [ "alloc", diff --git a/pkgs/primitives/Cargo.toml b/pkgs/primitives/Cargo.toml index 87fbb03a..de07db68 100644 --- a/pkgs/primitives/Cargo.toml +++ b/pkgs/primitives/Cargo.toml @@ -40,7 +40,7 @@ bitcoin-internals = { workspace = true } bitcoin-primitives = { workspace = true, features = ["alloc"] } bitcoin_hashes = { workspace = true, features = ["alloc"] } bitcoin-units = { workspace = true, features = ["alloc"] } -dash-num = { version = "0.0.0", path = "../num", features = ["codec"] } +dash-num = { version = "0.1.0-beta", path = "../num", features = ["codec"] } dash-pkc = { version = "0.0.0", path = "../pkc", default-features = false, features = [ "codec", ] } diff --git a/pkgs/script/Cargo.toml b/pkgs/script/Cargo.toml index d55b5315..f6d0a716 100644 --- a/pkgs/script/Cargo.toml +++ b/pkgs/script/Cargo.toml @@ -23,7 +23,7 @@ serde = ["dep:serde", "dash-pkc/serde", "dash-types/serde"] [dependencies] base58ck = { workspace = true, features = ["alloc"] } bitcoin-consensus-encoding = { workspace = true, features = ["alloc"] } -dash-num = { version = "0.0.0", path = "../num", default-features = false } +dash-num = { version = "0.1.0-beta", path = "../num", default-features = false } dash-pkc = { version = "0.0.0", path = "../pkc", default-features = false, features = [ "codec", ] } From bf9e85545c0d60013ca2cf3750d15f4409f95486 Mon Sep 17 00:00:00 2001 From: Kittywhiskers Van Gogh <63189531+kwvg@users.noreply.github.com> Date: Tue, 15 Sep 2026 05:15:05 +0530 Subject: [PATCH 13/13] sdk%chore: refresh lockfile in preparation for release --- Cargo.lock | 326 ++++++++++++++++++---------------------- docs/samples/Cargo.lock | 24 +-- 2 files changed, 160 insertions(+), 190 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 45a9ff09..db771ae4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -154,9 +154,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.13.1" +version = "2.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" [[package]] name = "block-buffer" @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.0" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" dependencies = [ "find-msvc-tools", "jobserver", @@ -279,15 +279,15 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common 0.1.6", + "crypto-common 0.1.7", "inout", ] [[package]] name = "clap" -version = "4.6.5" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301b56658598e48f3648647ac6fc887be7e7108eddfa4e9b63fcf3ec58c0cadf" +checksum = "aa8876b300ab35ba921adea3dfd70157a46249b33f95c9084ae5709785478946" dependencies = [ "clap_builder", "clap_derive", @@ -295,9 +295,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.5" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a65403d1a1bd28f7dc68eb8506e8874808ee5eecb59298de588e2e1407a078" +checksum = "ec0797fb7aeb1406c84efac526901f7ec3ead2124f946b494e72879d4b54704d" dependencies = [ "anstyle", "clap_lex", @@ -306,21 +306,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.4" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" +checksum = "f9c751b79415d4e559e3d1fcf128e09e720eb673a06d26cf6f392d37d75b66e0" dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.5", ] [[package]] name = "clap_lex" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +checksum = "1c133bc6a41be0d194c306b5506d15e6feeea7b1d6604bd3f8310dfb2ca96486" [[package]] name = "cmov" @@ -336,9 +336,9 @@ checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af" [[package]] name = "console" -version = "0.16.4" +version = "0.16.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fe5f465a4f6fee88fad41b85d990f84c835335e85b5d9e6e63e0d06d28cba7c" +checksum = "e96a4956774c13c126a8b5af4daa79384f4d826534c95a02d76afb39e2ab64e3" dependencies = [ "encode_unicode", "libc", @@ -374,18 +374,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" dependencies = [ "libc", ] [[package]] name = "crossbeam-deque" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" +checksum = "622f3fc73690be383c7214310406f28a90e6edeadc3cea882f9d71e495b9711a" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -393,18 +393,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.20" +version = "0.9.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" +checksum = "dc74980687109a3b14c72fd458107bf0baa1da1a1a805e178d15501ba9b86d9d" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.22" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" [[package]] name = "crunchy" @@ -429,9 +429,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", "typenum", @@ -634,9 +634,9 @@ dependencies = [ [[package]] name = "der" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" +checksum = "a878c850e9e421b20262e9b41f9c860e4785fa07541c266b62ff9d1ef998a80a" dependencies = [ "const-oid", "zeroize", @@ -649,7 +649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "crypto-common 0.1.6", + "crypto-common 0.1.7", ] [[package]] @@ -672,7 +672,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.5", ] [[package]] @@ -716,9 +716,9 @@ dependencies = [ [[package]] name = "either" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "elliptic-curve" @@ -773,9 +773,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" [[package]] name = "fixedbitset" @@ -794,26 +794,26 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.5", ] [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-timer" @@ -823,9 +823,9 @@ checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-macro", @@ -836,9 +836,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -911,9 +911,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" [[package]] name = "hex-conservative" @@ -950,9 +950,9 @@ dependencies = [ [[package]] name = "hybrid-array" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707114b52a152fa7bdb290cd7cd5912d9467273b6d74e21b8d81aca1f8533f6b" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" dependencies = [ "subtle", "typenum", @@ -985,21 +985,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" dependencies = [ "displaydoc", "litemap", @@ -1008,99 +1009,61 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" dependencies = [ - "displaydoc", "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ - "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", + "icu_locale_core", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "idna" version = "1.1.0" @@ -1114,9 +1077,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1124,9 +1087,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.14.0" +version = "2.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" dependencies = [ "equivalent", "hashbrown", @@ -1170,9 +1133,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" dependencies = [ "cfg-if", "futures-util", @@ -1212,9 +1175,9 @@ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libgit2-sys" -version = "0.18.7+1.9.6" +version = "0.18.8+1.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c7391e4b9f4ffab1a624223cc1d7385ff9a678f490768add717de7ea2f4d89" +checksum = "7f7c568b25d7489bc3fb2988ed69ab111d2944d2f5fec3d5c987fe545ea97b50" dependencies = [ "cc", "libc", @@ -1248,15 +1211,15 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" @@ -1306,9 +1269,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.8" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7df728be843c7070fab6ab7c328c4e9e9d78e23bf749c0669c86ee7ebfa050a2" +checksum = "6d45aeb61b4bf818e12d4205f2466f8c4748f85f4fce0146d1c03d69d753f0ad" dependencies = [ "memchr", "ucd-trie", @@ -1316,9 +1279,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.8" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e2dd6fc3b26b3462ee188aac870f5a41d398f1cd5e2408d16531bd71c9591fd" +checksum = "89cc5a242e25ed4e7704d0be240f2cfbe20a8c27e7e252d94835be93d92dc39f" dependencies = [ "pest", "pest_generator", @@ -1326,9 +1289,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.8" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a7a9205cfb6f596a9e8b689c0a15f9ceb7a1aafae7aaf788150ac65b29975b6" +checksum = "7abf21475cc3820fe4b2ca2dc2142902f67a02189f3b5b3a229f4febc01a43e5" dependencies = [ "pest", "pest_meta", @@ -1339,9 +1302,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.8.8" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85abd351c0de1e8384fc791a0737111a350394937e92b956b743dac12429f57c" +checksum = "adba4db388f687393c18c51348d44a41d870ca9df71a2c98172ea3035dc6936e" dependencies = [ "pest", ] @@ -1364,15 +1327,24 @@ checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "portable-atomic" -version = "1.14.0" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "potential_utf" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "zerovec", +] [[package]] name = "primefield" @@ -1405,7 +1377,7 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.13+spec-1.1.0", + "toml_edit 0.25.15+spec-1.1.0", ] [[package]] @@ -1618,7 +1590,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.5", ] [[package]] @@ -1661,7 +1633,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" dependencies = [ "cfg-if", - "cpufeatures 0.3.0", + "cpufeatures 0.3.1", "digest 0.11.3", ] @@ -1689,9 +1661,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.15.2" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" [[package]] name = "stable_deref_trait" @@ -1718,9 +1690,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" dependencies = [ "proc-macro2", "quote", @@ -1772,9 +1744,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "zerovec", @@ -1826,9 +1798,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.13+spec-1.1.0" +version = "0.25.15+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", @@ -1887,12 +1859,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -1913,9 +1879,9 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -1926,9 +1892,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1936,22 +1902,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.5", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ] @@ -2193,17 +2159,11 @@ dependencies = [ "primefield", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "xxhash-rust" @@ -2213,11 +2173,10 @@ checksum = "aee1b19627c7c60102ab80d3a9cbe18de90bfe03bfa6c3715447681f0e8c8af6" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ - "serde", "stable_deref_trait", "yoke-derive", "zerofrom", @@ -2225,9 +2184,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", @@ -2237,18 +2196,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.55" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.55" +version = "0.8.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" dependencies = [ "proc-macro2", "quote", @@ -2296,11 +2255,22 @@ dependencies = [ "syn 2.0.119", ] +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "yoke", "zerofrom", @@ -2309,13 +2279,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3c6377872d72510393f688a555d7097b0f741995c7a00f0407f786dd486b2d" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.5", ] [[package]] diff --git a/docs/samples/Cargo.lock b/docs/samples/Cargo.lock index 79a66edc..ae12d31e 100644 --- a/docs/samples/Cargo.lock +++ b/docs/samples/Cargo.lock @@ -324,7 +324,7 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.3", + "syn 3.0.5", ] [[package]] @@ -359,9 +359,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.3" +version = "3.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" dependencies = [ "proc-macro2", "quote", @@ -376,9 +376,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" dependencies = [ "cfg-if", "once_cell", @@ -389,9 +389,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -399,22 +399,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.5", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" dependencies = [ "unicode-ident", ]