diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..a62cf9c5 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,13 @@ +[target.x86_64-pc-windows-gnu] +linker = "x86_64-w64-mingw32-gcc" +runner = "wine64" +rustflags = [ + "-C", "debuginfo=0", + "-C", "opt-level=3", + "-C", "codegen-units=1", + # force dynamic CRT/winpthreads (do NOT use +crt-static) + "-C", "target-feature=-crt-static", + # make sure the linker flips back to dynamic for system libs + "-C", "link-arg=-Wl,-Bdynamic", + "-C", "link-arg=-Wl,--defsym,__ImageBase=0" +] \ No newline at end of file diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml new file mode 100644 index 00000000..c08731fe --- /dev/null +++ b/.github/workflows/reproducible-builds.yml @@ -0,0 +1,264 @@ +name: Reproducible Builds Verification + +# Platform coverage: +# - Linux: x86_64, ARM64 (aarch64), Windows cross-compile (via Nix) +# - Windows: Native build (x86_64-pc-windows-msvc via cargo) +# - macOS: Intel (x86_64), Apple Silicon (arm64) (via Nix) + +on: + pull_request: + branches: + - main + types: [opened, synchronize, reopened, ready_for_review] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + verify-reproducibility-windows: + name: Verify Reproducible Windows Build (Native) + runs-on: windows-latest + if: github.event.pull_request.draft == false + + steps: + - name: Collect Workflow Telemetry + uses: catchpoint/workflow-telemetry-action@v2 + with: + comment_on_pr: false + + - uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: "1.89.0" + components: rustfmt, rust-src + + - name: Build + shell: bash + env: + SOURCE_DATE_EPOCH: "1" + RUSTFLAGS: "-C debuginfo=0 -C opt-level=3 -C codegen-units=1 -C strip=none -C link-arg=/PDBALTPATH:clementine-cli.pdb -C link-arg=/Brepro" + run: | + echo "Building for Windows native (x86_64-pc-windows-msvc) with reproducible settings..." + cargo build --release + echo "Build complete" + + - name: Calculate build hash + id: hash + shell: bash + run: | + HASH=$(sha256sum target/release/clementine-cli.exe | awk '{print $1}') + echo "hash=$HASH" >> $GITHUB_OUTPUT + echo "Build hash: $HASH" + + - name: Upload binary artifact + if: success() + uses: actions/upload-artifact@v4 + with: + name: clementine-cli-windows-native + path: target/release/clementine-cli.exe + retention-days: 7 + + verify-hash-documentation-linux: + name: Build & Verify Documented Hashes (Linux/Windows-Nix) + runs-on: ubuntu-latest + if: github.event.pull_request.draft == false + strategy: + fail-fast: false + matrix: + platform: + - x86_64-linux-gnu + - aarch64-linux-gnu + - arm-linux-gnueabihf + - riscv64-linux-gnu + - win64 + + steps: + - name: Collect Workflow Telemetry + uses: catchpoint/workflow-telemetry-action@v2 + with: + comment_on_pr: false + + - uses: actions/checkout@v4 + + - name: Install Nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + experimental-features = nix-command flakes + + - name: Setup Cachix (optional binary cache) + uses: cachix/cachix-action@v13 + with: + name: clementine-cli + skipPush: true + continue-on-error: true + + - name: Build ${{ matrix.platform }} + run: | + echo "Building ${{ matrix.platform }} to verify documented hash..." + nix build .#${{ matrix.platform }} + echo "Build complete" + + - name: Upload binary artifact + if: success() + uses: actions/upload-artifact@v4 + with: + name: clementine-cli-${{ matrix.platform }} + path: result/bin/* + retention-days: 7 + + - name: Verify documented hash for ${{ matrix.platform }} + run: | + ACTUAL_HASH=$(nix hash path ./result) + + # Extract documented hash from reproducible-builds.md + # Platform names are in bold (**platform**) in the markdown table + # Table format: | **platform** | `hash` | + DOCUMENTED_HASH=$(grep "\*\*${{ matrix.platform }}\*\*" docs/reproducible-builds.md | sed 's/.*`\(sha256-[^`]*\)`.*/\1/') + + echo "Platform: ${{ matrix.platform }}" + echo "Documented hash: $DOCUMENTED_HASH" + echo "Actual hash: $ACTUAL_HASH" + echo "" + + if [ -z "$DOCUMENTED_HASH" ]; then + echo "ERROR: No documented hash found for ${{ matrix.platform }}" + echo "Please add the hash to docs/reproducible-builds.md Expected Hashes table:" + echo " $ACTUAL_HASH" + exit 1 + elif [ "$DOCUMENTED_HASH" != "$ACTUAL_HASH" ]; then + echo "ERROR: Documented hash does not match actual build hash!" + echo "The hash in docs/reproducible-builds.md is outdated." + echo "" + echo "Please update docs/reproducible-builds.md with the new hash:" + echo " Platform: ${{ matrix.platform }}" + echo " Old hash: $DOCUMENTED_HASH" + echo " New hash: $ACTUAL_HASH" + exit 1 + else + echo "OK: Documented hash matches actual build for ${{ matrix.platform }}" + fi + + verify-hash-documentation-macos: + name: Build & Verify Documented Hashes (macOS) + runs-on: macos-latest + if: github.event.pull_request.draft == false + strategy: + fail-fast: false + matrix: + platform: + - x86_64-apple-darwin + - arm64-apple-darwin + + steps: + - name: Collect Workflow Telemetry + uses: catchpoint/workflow-telemetry-action@v2 + with: + comment_on_pr: false + + - uses: actions/checkout@v4 + + - name: Install Nix + uses: cachix/install-nix-action@v31 + with: + extra_nix_config: | + experimental-features = nix-command flakes + + - name: Setup Cachix (optional binary cache) + uses: cachix/cachix-action@v13 + with: + name: clementine-cli + skipPush: true + continue-on-error: true + + - name: Build ${{ matrix.platform }} + run: | + echo "Building ${{ matrix.platform }} to verify documented hash..." + nix build .#${{ matrix.platform }} + echo "Build complete" + + - name: Upload binary artifact + if: success() + uses: actions/upload-artifact@v4 + with: + name: clementine-cli-${{ matrix.platform }} + path: result/bin/* + retention-days: 7 + + - name: Verify documented hash for ${{ matrix.platform }} + run: | + ACTUAL_HASH=$(nix hash path ./result) + + # Extract documented hash from reproducible-builds.md + # Platform names are in bold (**platform**) in the markdown table + # Table format: | **platform** | `hash` | + DOCUMENTED_HASH=$(grep "\*\*${{ matrix.platform }}\*\*" docs/reproducible-builds.md | sed 's/.*`\(sha256-[^`]*\)`.*/\1/') + + echo "Platform: ${{ matrix.platform }}" + echo "Documented hash: $DOCUMENTED_HASH" + echo "Actual hash: $ACTUAL_HASH" + echo "" + + if [ -z "$DOCUMENTED_HASH" ]; then + echo "ERROR: No documented hash found for ${{ matrix.platform }}" + echo "Please add the hash to docs/reproducible-builds.md Expected Hashes table:" + echo " $ACTUAL_HASH" + exit 1 + elif [ "$DOCUMENTED_HASH" != "$ACTUAL_HASH" ]; then + echo "ERROR: Documented hash does not match actual build hash!" + echo "The hash in docs/reproducible-builds.md is outdated." + echo "" + echo "Please update docs/reproducible-builds.md with the new hash:" + echo " Platform: ${{ matrix.platform }}" + echo " Old hash: $DOCUMENTED_HASH" + echo " New hash: $ACTUAL_HASH" + exit 1 + else + echo "OK: Documented hash matches actual build for ${{ matrix.platform }}" + fi + + build-summary: + name: Build Summary + runs-on: ubuntu-latest + needs: [verify-reproducibility-windows, verify-hash-documentation-linux, verify-hash-documentation-macos] + if: always() + + steps: + - name: Check results + run: | + WINDOWS_RESULT="${{ needs.verify-reproducibility-windows.result }}" + DOCS_LINUX_RESULT="${{ needs.verify-hash-documentation-linux.result }}" + DOCS_MACOS_RESULT="${{ needs.verify-hash-documentation-macos.result }}" + + echo "Build Results Summary:" + echo " Windows (native): $WINDOWS_RESULT" + echo " Nix Builds & Docs (Linux/Win): $DOCS_LINUX_RESULT" + echo " Nix Builds & Docs (macOS): $DOCS_MACOS_RESULT" + echo "" + + # All jobs must succeed + if [ "$WINDOWS_RESULT" = "success" ] && [ "$DOCS_LINUX_RESULT" = "success" ] && [ "$DOCS_MACOS_RESULT" = "success" ]; then + echo "OK: All verifications passed!" + echo "" + echo "Reproducible builds completed and verified:" + echo " - Windows (x86_64-pc-windows-msvc) native via cargo" + echo " - All Nix platforms (Linux, Windows-cross, macOS)" + echo "" + echo "Documentation verified:" + echo " - All platform hashes match docs/reproducible-builds.md" + exit 0 + else + echo "ERROR: Verification failed on one or more checks" + echo "" + if [ "$DOCS_LINUX_RESULT" != "success" ] || [ "$DOCS_MACOS_RESULT" != "success" ]; then + echo " Documentation hash mismatch detected!" + echo " This means the code/dependencies changed and docs need updating." + echo " Please update docs/reproducible-builds.md with new hashes." + echo "" + fi + echo "Check the individual job logs for details" + exit 1 + fi \ No newline at end of file diff --git a/.gitignore b/.gitignore index 559700e0..31ced5ee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,7 @@ /target ./bridge_cli_config.toml + +# Nix build artifacts +result +result-* +.direnv diff --git a/Cargo.lock b/Cargo.lock index ae357d2f..8d511fbc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -70,9 +70,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "392798983d70eb1d9f13082b600cc5fdae83579f916585b63f085c02797cff8f" +checksum = "ae62e633fa48b4190af5e841eb05179841bb8b713945103291e2c0867037c0d1" dependencies = [ "alloy-consensus", "alloy-contract", @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8ff73a143281cb77c32006b04af9c047a6b8fe5860e85a88ad325328965355" +checksum = "0bbb778f50ecb0cebfb5c05580948501927508da7bd628833a8c4bd8545e23e2" dependencies = [ "alloy-primitives", "num_enum", @@ -105,9 +105,9 @@ dependencies = [ [[package]] name = "alloy-consensus" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5541ba2004617b3360d6146bb6e82012b35b5d1e1850f89f1a1181af7f07c36e" +checksum = "b9b151e38e42f1586a01369ec52a6934702731d07e8509a7307331b09f6c46dc" dependencies = [ "alloy-eips", "alloy-primitives", @@ -124,15 +124,16 @@ dependencies = [ "rand 0.8.5", "secp256k1 0.30.0", "serde", + "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-consensus-any" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce9dae6e034e71fcc381ec7e9879ac368fbce68c8271aa1fd0e74bfbb88a156" +checksum = "6e2d5e8668ef6215efdb7dcca6f22277b4e483a5650e05f5de22b2350971f4b8" dependencies = [ "alloy-consensus", "alloy-eips", @@ -144,9 +145,9 @@ dependencies = [ [[package]] name = "alloy-contract" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d108741e855c10282392f46aeee235f76f77edeb99be5baf0ec31dddc278cb39" +checksum = "630288cf4f3a34a8c6bc75c03dce1dbd47833138f65f37d53a1661eafc96b83f" dependencies = [ "alloy-consensus", "alloy-dyn-abi", @@ -161,14 +162,14 @@ dependencies = [ "futures", "futures-util", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-core" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe6c56d58fbfa9f0f6299376e8ce33091fc6494239466814c3f54b55743cb09" +checksum = "5ca96214615ec8cf3fa2a54b32f486eb49100ca7fe7eb0b8c1137cd316e7250a" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -179,9 +180,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f56873f3cac7a2c63d8e98a4314b8311aa96adb1a0f82ae923eb2119809d2c" +checksum = "3fdff496dd4e98a81f4861e66f7eaf5f2488971848bb42d9c892f871730245c8" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -203,7 +204,7 @@ dependencies = [ "alloy-rlp", "crc", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] @@ -226,14 +227,14 @@ dependencies = [ "alloy-primitives", "alloy-rlp", "serde", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-eips" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50813581e248f91ea5c3fa60dd9d4898a013aba765251d8493f955f9dcdada46" +checksum = "e5434834adaf64fa20a6fb90877bc1d33214c41b055cc49f82189c98614368cc" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -248,14 +249,14 @@ dependencies = [ "serde", "serde_with", "sha2", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-genesis" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f8234970be4e5e6d9732456a1044e77775e523e48f7a0177faeac0923e5bc4f" +checksum = "919a8471cfbed7bcd8cf1197a57dda583ce0e10c6385f6ff4e8b41304b223392" dependencies = [ "alloy-eips", "alloy-primitives", @@ -267,9 +268,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125a1c373261b252e53e04d6e92c37d881833afc1315fceab53fd46045695640" +checksum = "5513d5e6bd1cba6bdcf5373470f559f320c05c8c59493b6e98912fbe6733943f" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -279,24 +280,24 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937ec0cecab5cefe7762d554aa9141d11b85745c734dcfc6307f364161926e47" +checksum = "d7c69f6c9c68a1287c9d5ff903d0010726934de0dac10989be37b75a29190d55" dependencies = [ "alloy-primitives", "alloy-sol-types", "http", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tracing", ] [[package]] name = "alloy-network" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2a1a4925856cdfb7a4be9d753ee4fecef6c08e5800069cd565ce31a2a07f88f" +checksum = "8eaf2ae05219e73e0979cb2cf55612aafbab191d130f203079805eaf881cca58" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -315,14 +316,14 @@ dependencies = [ "futures-utils-wasm", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-network-primitives" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298ca9ed1c28820dacf0eb66a5dd172ddce79c7933d171873c5039c92c1a15de" +checksum = "e58f4f345cef483eab7374f2b6056973c7419ffe8ad35e994b7a7f5d8e0c7ba4" dependencies = [ "alloy-consensus", "alloy-eips", @@ -333,18 +334,18 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc9485c56de23438127a731a6b4c87803d49faf1a7068dcd1d8768aca3a9edb9" +checksum = "355bf68a433e0fd7f7d33d5a9fc2583fde70bf5c530f63b80845f8da5505cf28" dependencies = [ "alloy-rlp", "bytes", "cfg-if", "const-hex", "derive_more", - "foldhash", - "hashbrown 0.15.5", - "indexmap 2.11.1", + "foldhash 0.2.0", + "hashbrown 0.16.0", + "indexmap 2.12.0", "itoa", "k256", "keccak-asm", @@ -360,9 +361,9 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0c621cea6ebe1889f286b7a70d85278cf8bb4be969614cd91d3f393ea1f150" +checksum = "de2597751539b1cc8fe4204e5325f9a9ed83fcacfb212018dfcfa7877e76de21" dependencies = [ "alloy-chains", "alloy-consensus", @@ -390,7 +391,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "url", @@ -416,14 +417,14 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "alloy-rpc-client" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2946537a67309b723b56979b42b0fca7aace7250df627448ed3748620ba57b0" +checksum = "edf8eb8be597cfa8c312934d2566ec4516f066d69164f9212d7a148979fdcfd8" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -444,9 +445,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e02e8d7c6eb9dddfbf84eb2a5e94e61c31fc1fa6218428295c1da06bcdef5547" +checksum = "339af7336571dd39ae3a15bde08ae6a647e62f75350bd415832640268af92c06" dependencies = [ "alloy-primitives", "alloy-rpc-types-eth", @@ -456,9 +457,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-any" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5582230030419bba654bb1fc6568e07efdb6021a7473158e4f67196edb8d27" +checksum = "fbde0801a32d21c5f111f037bee7e22874836fba7add34ed4a6919932dd7cf23" dependencies = [ "alloy-consensus-any", "alloy-rpc-types-eth", @@ -467,9 +468,9 @@ dependencies = [ [[package]] name = "alloy-rpc-types-eth" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bf512d8ea66186d1c500b185c50ba908c416d85569b96b9eab0d0bd652dcae" +checksum = "361cd87ead4ba7659bda8127902eda92d17fa7ceb18aba1676f7be10f7222487" dependencies = [ "alloy-consensus", "alloy-consensus-any", @@ -483,14 +484,14 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-serde" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98d19b51332c2880b10f5126257c481decbdfb48f95ecaa919b37dd0ac07c57d" +checksum = "64600fc6c312b7e0ba76f73a381059af044f4f21f43e07f51f1fa76c868fe302" dependencies = [ "alloy-primitives", "serde", @@ -499,9 +500,9 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bcd6636812e3f98f683e2024245438ea38075bf231e3de94b0867e1c161e0e8" +checksum = "5772858492b26f780468ae693405f895d6a27dea6e3eab2c36b6217de47c2647" dependencies = [ "alloy-primitives", "async-trait", @@ -509,14 +510,14 @@ dependencies = [ "either", "elliptic-curve", "k256", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-signer-local" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11ca57b1004deccec455adae9c963cf85b6c559e62dc1e986bf3d37e7ae0691" +checksum = "f4195b803d0a992d8dbaab2ca1986fc86533d4bc80967c0cce7668b26ad99ef9" dependencies = [ "alloy-consensus", "alloy-network", @@ -525,47 +526,47 @@ dependencies = [ "async-trait", "k256", "rand 0.8.5", - "thiserror 2.0.16", + "thiserror 2.0.17", ] [[package]] name = "alloy-sol-macro" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d20d867dcf42019d4779519a1ceb55eba8d7f3d0e4f0a89bcba82b8f9eb01e48" +checksum = "f3ce480400051b5217f19d6e9a82d9010cdde20f1ae9c00d53591e4a1afbb312" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "alloy-sol-macro-expander" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74e91b0b553c115d14bd0ed41898309356dc85d0e3d4b9014c4e7715e48c8ad" +checksum = "6d792e205ed3b72f795a8044c52877d2e6b6e9b1d13f431478121d8d4eaa9028" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", "const-hex", "heck", - "indexmap 2.11.1", + "indexmap 2.12.0", "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "syn-solidity", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84194d31220803f5f62d0a00f583fd3a062b36382e2bea446f1af96727754565" +checksum = "0bd1247a8f90b465ef3f1207627547ec16940c35597875cdc09c49d58b19693c" dependencies = [ "alloy-json-abi", "const-hex", @@ -575,15 +576,15 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.106", + "syn 2.0.107", "syn-solidity", ] [[package]] name = "alloy-sol-type-parser" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8c27b3cf6b2bb8361904732f955bc7c05e00be5f469cec7e2280b6167f3ff0" +checksum = "954d1b2533b9b2c7959652df3076954ecb1122a28cc740aa84e7b0a49f6ac0a9" dependencies = [ "serde", "winnow", @@ -591,9 +592,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5383d34ea00079e6dd89c652bcbdb764db160cef84e6250926961a0b2295d04" +checksum = "70319350969a3af119da6fb3e9bddb1bce66c9ea933600cb297c8b1850ad2a3c" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -603,9 +604,9 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a212f99bc960bf18f9f50ea658dc91f8ca32087defa4f5eecdea5b9ac55039c5" +checksum = "025a940182bddaeb594c26fe3728525ae262d0806fe6a4befdf5d7bc13d54bce" dependencies = [ "alloy-json-rpc", "alloy-primitives", @@ -617,7 +618,7 @@ dependencies = [ "parking_lot", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tower", "tracing", @@ -627,9 +628,9 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099e51af77e763f9731166715e5e9053f5f18d63ef08a62d421e81ac2ad146f6" +checksum = "e3b5064d1e1e1aabc918b5954e7fb8154c39e77ec6903a581b973198b26628fa" dependencies = [ "alloy-json-rpc", "alloy-transport", @@ -658,15 +659,15 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.0.31" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaad16a6909005cd94fdffac05e43366bf654a029f15f4633a191b9de84f951f" +checksum = "f8e52276fdb553d3c11563afad2898f4085165e4093604afe3d78b69afbf408f" dependencies = [ "alloy-primitives", - "darling 0.21.3", + "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -680,9 +681,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.20" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -695,9 +696,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" @@ -778,6 +779,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a177aba0ed1e0fbb62aa9f6d0502e9b46dad8c2eab04c14258a1212d2557ea70" +dependencies = [ + "ark-ff-asm 0.5.0", + "ark-ff-macros 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "educe", + "itertools 0.13.0", + "num-bigint", + "num-traits", + "paste", + "zeroize", +] + [[package]] name = "ark-ff-asm" version = "0.3.0" @@ -798,6 +819,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-asm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" +dependencies = [ + "quote", + "syn 2.0.107", +] + [[package]] name = "ark-ff-macros" version = "0.3.0" @@ -823,6 +854,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-ff-macros" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09be120733ee33f7693ceaa202ca41accd5653b779563608f1234f78ae07c4b3" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 2.0.107", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -844,6 +888,18 @@ dependencies = [ "num-bigint", ] +[[package]] +name = "ark-serialize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" +dependencies = [ + "ark-std 0.5.0", + "arrayvec", + "digest 0.10.7", + "num-bigint", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -864,6 +920,16 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-std" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a225cc6131e9ee4f24619af0f19d67761fff15d7ccc22e42b80846e69449a" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + [[package]] name = "arrayvec" version = "0.7.6" @@ -892,7 +958,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -903,7 +969,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -920,7 +986,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -931,9 +997,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -941,7 +1007,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -1113,9 +1179,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bitvec" @@ -1149,9 +1215,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fd49896f12ac9b6dcd7a5998466b9b58263a695a3dd1ecc1aaca2e12a90b080" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" dependencies = [ "cc", "glob", @@ -1188,9 +1254,9 @@ dependencies = [ [[package]] name = "c-kzg" -version = "2.1.1" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7318cfa722931cb5fe0838b98d3ce5621e75f6a6408abc21721d80de9223f2e4" +checksum = "e00bf4b112b07b505472dbefd19e37e53307e2bfed5a79e0cc161d58ccd0e687" dependencies = [ "blst", "cc", @@ -1203,9 +1269,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.37" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ "find-msvc-tools", "shlex", @@ -1213,9 +1279,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" @@ -1234,7 +1300,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -1249,9 +1315,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.47" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "0c2cfd7bf8a6017ddaa4e32ffe7403d547790db06bd171c1c53926faab501623" dependencies = [ "clap_builder", "clap_derive", @@ -1259,9 +1325,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "0a4c05b9e80c5ccd3a7ef080ad7b6ba7d6fc00a985b8b157197075677c82c7a0" dependencies = [ "anstream", "anstyle", @@ -1271,21 +1337,21 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "clap_lex" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "clementine-cli" @@ -1304,7 +1370,7 @@ dependencies = [ "crossterm", "dirs", "eyre", - "getrandom 0.3.3", + "getrandom 0.3.4", "hex", "open", "rand 0.9.2", @@ -1316,7 +1382,7 @@ dependencies = [ "serde_json", "sha2", "subtle", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "toml", "tracing", @@ -1370,9 +1436,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6407bff74dea37e0fa3dc1c1c974e5d46405f0c987bf9997a0762adce71eda6" +checksum = "3bb320cac8a0750d7f25280aa97b09c26edfe161164238ecbbb31092b079e735" dependencies = [ "cfg-if", "cpufeatures", @@ -1388,9 +1454,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.34" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +checksum = "7faa7469a93a566e9ccc1c73fe783b4a65c274c5ace346038dca9c39fe0030ad" dependencies = [ "const_format_proc_macros", ] @@ -1406,16 +1472,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1515,38 +1571,14 @@ dependencies = [ "cipher", ] -[[package]] -name = "darling" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" -dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - [[package]] name = "darling" version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "darling_core 0.21.3", - "darling_macro 0.21.3", -] - -[[package]] -name = "darling_core" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 2.0.106", + "darling_core", + "darling_macro", ] [[package]] @@ -1561,18 +1593,7 @@ dependencies = [ "quote", "serde", "strsim", - "syn 2.0.106", -] - -[[package]] -name = "darling_macro" -version = "0.20.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" -dependencies = [ - "darling_core 0.20.11", - "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1581,9 +1602,9 @@ version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ - "darling_core 0.21.3", + "darling_core", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1612,12 +1633,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", ] [[package]] @@ -1648,7 +1669,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "unicode-xid", ] @@ -1702,7 +1723,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1732,6 +1753,18 @@ dependencies = [ "spki", ] +[[package]] +name = "educe" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7bc049e1bd8cdeb31b68bbd586a9464ecf9f3944af3958a7a9d0f8b9799417" +dependencies = [ + "enum-ordinalize", + "proc-macro2", + "quote", + "syn 2.0.107", +] + [[package]] name = "either" version = "1.15.0" @@ -1762,12 +1795,23 @@ dependencies = [ ] [[package]] -name = "encoding_rs" -version = "0.8.35" +name = "enum-ordinalize" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +checksum = "fea0dcfa4e54eeb516fe454635a95753ddd39acda650ce703031c6973e315dd5" dependencies = [ - "cfg-if", + "enum-ordinalize-derive", +] + +[[package]] +name = "enum-ordinalize-derive" +version = "4.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d28318a75d4aead5c4db25382e8ef717932d0346600cacae6357eb5941bc5ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.107", ] [[package]] @@ -1783,7 +1827,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.0", + "windows-sys 0.61.2", ] [[package]] @@ -1836,9 +1880,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fixed-hash" @@ -1865,19 +1909,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "foldhash" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "form_urlencoded" @@ -1950,7 +1985,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1991,9 +2026,9 @@ checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -2009,21 +2044,21 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.5+wasi-0.2.4", + "wasip2", "wasm-bindgen", ] @@ -2039,9 +2074,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" @@ -2060,25 +2095,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "h2" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap 2.11.1", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -2099,7 +2115,16 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash", + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "foldhash 0.2.0", "serde", ] @@ -2201,7 +2226,6 @@ dependencies = [ "bytes", "futures-channel", "futures-core", - "h2", "http", "http-body", "httparse", @@ -2230,27 +2254,11 @@ dependencies = [ "webpki-roots", ] -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - [[package]] name = "hyper-util" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" dependencies = [ "base64", "bytes", @@ -2265,11 +2273,9 @@ dependencies = [ "percent-encoding", "pin-project-lite", "socket2", - "system-configuration", "tokio", "tower-service", "tracing", - "windows-registry", ] [[package]] @@ -2426,7 +2432,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2448,13 +2454,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -2466,17 +2473,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags", - "cfg-if", - "libc", -] - [[package]] name = "ipnet" version = "2.11.0" @@ -2514,9 +2510,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -2527,6 +2523,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -2544,9 +2549,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.78" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -2607,9 +2612,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libm" @@ -2647,11 +2652,10 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -2684,7 +2688,7 @@ checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -2698,15 +2702,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "mime" -version = "0.3.17" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" @@ -2725,34 +2723,17 @@ checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "windows-sys 0.59.0", ] -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2802,9 +2783,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" dependencies = [ "num_enum_derive", "rustversion", @@ -2812,20 +2793,20 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "nybbles" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0418987d1aaed324d95b4beffc93635e19be965ed5d63ec07a35980fe3b71a4" +checksum = "2c4b5ecbd0beec843101bffe848217f770e8b8da81d8355b7d6e226f2199b3dc" dependencies = [ "alloy-rlp", "cfg-if", @@ -2837,9 +2818,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -2852,9 +2833,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "once_cell_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "opaque-debug" @@ -2873,50 +2854,6 @@ dependencies = [ "pathdiff", ] -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "option-ext" version = "0.2.0" @@ -2925,9 +2862,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "owo-colors" -version = "4.2.2" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dd4f4a2c8405440fd0462561f0e5806bd0f77e86f51c761481bdd4018b545e" +checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" [[package]] name = "parity-scale-codec" @@ -2954,14 +2891,14 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -2969,15 +2906,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -3011,12 +2948,11 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror 2.0.16", "ucd-trie", ] @@ -3037,7 +2973,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3062,12 +2998,6 @@ dependencies = [ "spki", ] -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "polyval" version = "0.6.2" @@ -3117,9 +3047,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" dependencies = [ "toml_edit", ] @@ -3143,7 +3073,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3157,9 +3087,9 @@ dependencies = [ [[package]] name = "proptest" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" +checksum = "2bb0be07becd10686a0bb407298fb425360a5c44a663774406340c59a22de4ce" dependencies = [ "bit-set", "bit-vec", @@ -3195,7 +3125,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -3208,7 +3138,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.3", + "getrandom 0.3.4", "lru-slab", "rand 0.9.2", "ring", @@ -3216,7 +3146,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -3238,9 +3168,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -3315,7 +3245,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "serde", ] @@ -3330,9 +3260,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] @@ -3350,29 +3280,29 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.24" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -3381,34 +3311,29 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64", "bytes", - "encoding_rs", "futures-channel", "futures-core", "futures-util", - "h2", "http", "http-body", "http-body-util", "hyper", "hyper-rustls", - "hyper-tls", "hyper-util", "js-sys", "log", - "mime", - "native-tls", "percent-encoding", "pin-project-lite", "quinn", @@ -3419,7 +3344,6 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-native-tls", "tokio-rustls", "tower", "tower-http", @@ -3488,13 +3412,14 @@ dependencies = [ [[package]] name = "ruint" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecb38f82477f20c5c3d62ef52d7c4e536e38ea9b73fb570a20c5cae0e14bcf6" +checksum = "a68df0380e5c9d20ce49534f292a36a7514ae21350726efe1865bdb1fa91d278" dependencies = [ "alloy-rlp", "ark-ff 0.3.0", "ark-ff 0.4.2", + "ark-ff 0.5.0", "bytes", "fastrlp 0.3.1", "fastrlp 0.4.0", @@ -3508,7 +3433,7 @@ dependencies = [ "rand 0.9.2", "rlp", "ruint-macro", - "serde", + "serde_core", "valuable", "zeroize", ] @@ -3578,14 +3503,14 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "once_cell", "ring", @@ -3607,9 +3532,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.5" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a37813727b78798e53c2bec3f5e8fe12a6d6f8389bf9ca7802add4c9905ad8" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -3624,9 +3549,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", "quick-error", @@ -3640,15 +3565,6 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" -[[package]] -name = "schannel" -version = "0.1.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" -dependencies = [ - "windows-sys 0.61.0", -] - [[package]] name = "schemars" version = "0.9.0" @@ -3756,29 +3672,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "0.11.0" @@ -3805,9 +3698,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.223" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a505d71960adde88e293da5cb5eda57093379f64e61cf77bf0e6a63af07a7bac" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -3815,22 +3708,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.223" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20f57cbd357666aa7b3ac84a90b4ea328f1d4ddb6772b430caa5d9e1309bb9e9" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.223" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d428d07faf17e306e699ec1e91996e5a165ba5d6bce5b5155173e91a8a01a56" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -3848,11 +3741,11 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83" +checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -3869,19 +3762,18 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.14.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5" +checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.11.1", + "indexmap 2.12.0", "schemars 0.9.0", "schemars 1.0.4", - "serde", - "serde_derive", + "serde_core", "serde_json", "serde_with_macros", "time", @@ -3889,14 +3781,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.14.0" +version = "3.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f" +checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4012,12 +3904,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -4032,9 +3924,9 @@ dependencies = [ [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "static_assertions" @@ -4066,7 +3958,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4088,9 +3980,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -4099,14 +3991,14 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "1.3.1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b198d366dbec045acfcd97295eb653a7a2b40e4dc764ef1e79aafcad439d3c" +checksum = "ff790eb176cc81bb8936aed0f7b9f14fc4670069a2d371b3e3b0ecce908b2cb3" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4126,28 +4018,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "system-configuration" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" -dependencies = [ - "core-foundation-sys", - "libc", + "syn 2.0.107", ] [[package]] @@ -4158,15 +4029,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.0", + "windows-sys 0.61.2", ] [[package]] @@ -4180,11 +4051,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -4195,18 +4066,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4229,11 +4100,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", + "itoa", "num-conv", "powerfmt", "serde", @@ -4293,50 +4165,37 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", "socket2", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", -] - -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", + "syn 2.0.107", ] [[package]] name = "tokio-rustls" -version = "0.26.2" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -4369,14 +4228,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8" +checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" dependencies = [ - "indexmap 2.11.1", - "serde", + "indexmap 2.12.0", + "serde_core", "serde_spanned", - "toml_datetime 0.7.0", + "toml_datetime", "toml_parser", "toml_writer", "winnow", @@ -4384,44 +4243,39 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" - -[[package]] -name = "toml_datetime" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3" +checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" dependencies = [ - "serde", + "serde_core", ] [[package]] name = "toml_edit" -version = "0.22.27" +version = "0.23.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" dependencies = [ - "indexmap 2.11.1", - "toml_datetime 0.6.11", + "indexmap 2.12.0", + "toml_datetime", + "toml_parser", "winnow", ] [[package]] name = "toml_parser" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" +checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64" +checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" [[package]] name = "tower" @@ -4487,7 +4341,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -4547,9 +4401,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -4577,9 +4431,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" +checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" [[package]] name = "unicode-normalization" @@ -4648,12 +4502,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" @@ -4684,29 +4532,20 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.5+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" -version = "1.0.0+wasi-0.2.4" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -4717,23 +4556,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.51" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -4744,9 +4583,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4754,22 +4593,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.101" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -4790,9 +4629,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.78" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -4810,9 +4649,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] @@ -4841,96 +4680,61 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.62.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.2.0", - "windows-result 0.4.0", - "windows-strings 0.5.0", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - -[[package]] -name = "windows-link" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" - -[[package]] -name = "windows-registry" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" -dependencies = [ - "windows-link 0.1.3", - "windows-result 0.3.4", - "windows-strings 0.4.2", -] - -[[package]] -name = "windows-result" -version = "0.3.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" -dependencies = [ - "windows-link 0.1.3", -] +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-result" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" -dependencies = [ - "windows-link 0.2.0", -] - -[[package]] -name = "windows-strings" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -4966,16 +4770,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.0", + "windows-link", ] [[package]] @@ -5011,19 +4815,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ - "windows-link 0.1.3", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -5040,9 +4844,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -5058,9 +4862,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -5076,9 +4880,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -5088,9 +4892,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -5106,9 +4910,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -5124,9 +4928,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -5142,9 +4946,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -5160,9 +4964,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" @@ -5175,9 +4979,9 @@ dependencies = [ [[package]] name = "wit-bindgen" -version = "0.45.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "writeable" @@ -5214,7 +5018,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "synstructure", ] @@ -5235,7 +5039,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5255,15 +5059,15 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "synstructure", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" dependencies = [ "zeroize_derive", ] @@ -5276,7 +5080,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -5309,5 +5113,5 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] diff --git a/Cargo.toml b/Cargo.toml index 7208e713..28b915ac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,17 +5,17 @@ edition = "2024" license = "GPL-3.0" authors = ["Chainway Labs "] homepage = "https://citrea.xyz" -publish = false repository = "https://github.com/chainwayxyz/clementine-cli" +publish = false +description = "Clementine CLI tool for interacting with Clementine bridge" [lib] name = "clementine_cli" path = "src/lib.rs" - [dependencies] bitcoin = { version = "0.32.5", features = ["rand-std"] } -reqwest = { version = "0.12.22", features = ["blocking", "json"] } +reqwest = { version = "0.12.22", default-features = false, features = ["blocking", "json", "rustls-tls"] } clap = { version = "4.5.4", features = ["derive"] } serde = { version = "1.0.210", features = ["derive"] } serde_json = "1.0" @@ -25,19 +25,8 @@ colored = "3.0" open = "5.0" eyre = "0.6.12" color-eyre = "0.6.5" -secp256k1 = { version = "0.31.0", features = [ - "serde", - "rand", - "std", - "global-context", -] } -tokio = { version = "1.36", features = [ - "rt-multi-thread", - "macros", - "fs", - "io-util", - "time", -] } +secp256k1 = { version = "0.31.0", features = ["serde", "rand", "std", "global-context"] } +tokio = { version = "1.36", features = ["rt-multi-thread", "macros", "fs", "io-util", "time"] } sha2 = "0.10.9" bitcoincore-rpc = { version = "0.18.0" } rand = { version = "0.9.2", features = ["os_rng"] } @@ -51,13 +40,7 @@ dirs = "5.0" crossterm = "0.28" tracing = "0.1.41" tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } -alloy = { version = "1.0.30", features = [ - "contract", - "sol-types", - "transports", - "json-rpc", - "providers", -] } +alloy = { version = "1.0.30", features = ["contract", "sol-types", "transports", "json-rpc", "providers"] } toml = "0.9.5" url = { version = "2.5", features = ["serde"] } secrecy = { version = "0.10.0", features = ["serde"] } @@ -68,3 +51,11 @@ thiserror = "2.0.14" [patch.crates-io] secp256k1 = { git = "https://github.com/rust-bitcoin/rust-secp256k1", rev = "4d36fefdddb118425bb9bcf611bb6e4dff306cfc" } bitcoincore-rpc = { version = "0.18.0", git = "https://github.com/chainwayxyz/rust-bitcoincore-rpc.git", rev = "5da45109a2de352472a6056ef90a517b66bc106f" } + +[profile.release] +# Deterministic builds for reproducibility +lto = "off" +opt-level = 3 +codegen-units = 1 +strip = false +debug = false \ No newline at end of file diff --git a/docs/reproducible-builds.md b/docs/reproducible-builds.md new file mode 100644 index 00000000..0af2829a --- /dev/null +++ b/docs/reproducible-builds.md @@ -0,0 +1,129 @@ +# Clementine CLI Reproducible Builds + +This guide shows how to build Clementine CLI reproducibly using [Nix](https://nixos.org/) and verify your build matches the official release. + +Reproducible builds ensure bit-for-bit identical binaries, allowing you to verify that published binaries match the source code exactly. + +## Platform Support + +**7 platforms** are fully supported and reproducible: + +| Platform | Architecture | +|----------|--------------| +| Linux | x86_64, ARM64, ARMv7, RISC-V | +| Windows | 64-bit | +| macOS | Intel & Apple Silicon | + +### What You Can Build + +| Your System | Can Build For | +|-------------|---------------| +| **Linux (x86_64 or ARM64)** | All Linux platforms, Windows | +| **macOS (Intel or Apple Silicon)** | Both macOS architectures (Intel ↔ Apple Silicon) | + +> [!NOTE] +> **Best practice:** Build macOS binaries on macOS, build Linux/Windows on Linux. + +## Install Nix + +```bash +sh <(curl -L https://nixos.org/nix/install) --daemon +``` + +Enable flakes (required): + +```bash +mkdir -p ~/.config/nix +echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf + +# Restart Nix daemon +# Linux: +sudo systemctl restart nix-daemon + +# macOS: +sudo launchctl unload /Library/LaunchDaemons/org.nixos.nix-daemon.plist +sudo launchctl load /Library/LaunchDaemons/org.nixos.nix-daemon.plist +``` + +## Build + +```bash +# Build for your platform +nix build + +# Or specify a platform: +nix build .#x86_64-linux-gnu # Linux x86_64 +nix build .#aarch64-linux-gnu # Linux ARM64 +nix build .#arm-linux-gnueabihf # Linux ARMv7 (Raspberry Pi) +nix build .#riscv64-linux-gnu # Linux RISC-V +nix build .#win64 # Windows 64-bit +nix build .#x86_64-apple-darwin # macOS Intel +nix build .#arm64-apple-darwin # macOS Apple Silicon + +# Binary location: +ls -la ./result/bin/ +``` + +**First build takes 10-20 minutes.** Subsequent builds are cached and take 1-2 minutes. + +## Verify Your Build + +After building, verify your binary matches the expected hash: + +```bash +nix hash path ./result +``` + +Compare the output with the table below: + +| Platform | Expected Hash | +|----------|---------------| +| **x86_64-linux-gnu** | `sha256-gDsBq6uy7n+sxJ2S88Rvkwr9A+VHHVzEFTJxwbE1CwI=` | +| **aarch64-linux-gnu** | `sha256-oBqXMcKfI8vbCSwd91oGLX/um5xUDfQlO//KLvPhKrQ=` | +| **arm-linux-gnueabihf** | `sha256-5kk9JcdADNB9MXAPqbTCiGwd5Fae2/8A5szisxLIR2I=` | +| **riscv64-linux-gnu** | `sha256-awnROl2xMvLP+Z5sK/M/gcSoMiOaQceBEX+cFkGLkvo=` | +| **win64** | `sha256-8DIqJIf9hIdEjhpBAZcmdCFVwczY80J3puh2mSIydW4=` | +| **x86_64-apple-darwin** | `sha256-QgIz/J9h3G+nBES/lRTSIOfAW25aMAq/3veQj9jKw0U=` | +| **arm64-apple-darwin** | `sha256-4KV87Dnk2rG01Q4Hnt1tb8VjGVWf45nHE+gB1zWbhZ0=` | + +**Matching hash = verified build.** Hashes change only when source code, dependencies, or build configuration changes. + +## Troubleshooting + +### Hash Doesn't Match + +If your hash doesn't match the expected value: +- Ensure you're on the same git commit/tag +- Check your Nix version: `nix --version` +- Try a clean build: `nix store gc --max 0` then rebuild (takes 10-20 min) + +### Common Issues + +| Issue | Solution | +|-------|----------| +| **"experimental-features not enabled"** | Add `experimental-features = nix-command flakes` to `~/.config/nix/nix.conf` and restart Nix daemon | +| **Slow first build** | Normal - ~500 packages built (10-20 min). Subsequent builds are cached (1-2 min) | +| **Out of disk space** | Run `nix store gc` for cleanup or `nix store gc --max 0` for full cleanup (~36GB freed) | +| **macOS cross-arch build slow** | Normal on first build - system compiles dependencies for target architecture | +| **Windows build fails from macOS** | Not supported - use Linux to build Windows binaries | + +### Cleaning Build Cache + +```bash +# Light cleanup (removes unreferenced packages) +nix store gc + +# Full cleanup (removes everything, frees ~36GB) +# Warning: Next build will take 10-20 minutes +nix store gc --max 0 +``` + +Use full cleanup when: +- Testing reproducibility with a clean slate +- Freeing disk space +- Resolving cache issues + +## Additional Resources + +- [Reproducible Builds Project](https://reproducible-builds.org/) +- [Nix Documentation](https://nixos.org/manual/nix/stable/) diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..27443726 --- /dev/null +++ b/flake.lock @@ -0,0 +1,82 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1735563628, + "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1760927964, + "narHash": "sha256-+TjujgwBpeN0aaQ/lZQ8UPsWl9oEaihgbt6FvxTlpZk=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "6b1e691089a62d0852f9d3fd6693ee027bc98ac3", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..403e1505 --- /dev/null +++ b/flake.nix @@ -0,0 +1,346 @@ +{ + description = "Clementine CLI - Reproducible builds"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05"; + flake-utils.url = "github:numtide/flake-utils"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, flake-utils, rust-overlay }: + let + buildSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; + + # Working target systems + # 7 platforms verified reproducible - see docs/reproducible-builds.md for details + targetSystems = [ + "x86_64-linux-gnu" + "aarch64-linux-gnu" + "arm-linux-gnueabihf" + "riscv64-linux-gnu" + "x86_64-apple-darwin" + "arm64-apple-darwin" + "win64" + ]; + + # Note: PowerPC64 is excluded due to known Nix cross-compilation limitations + # See docs/reproducible-builds.md "PowerPC64 Known Issue" section for details + in + flake-utils.lib.eachSystem buildSystems (buildSystem: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { system = buildSystem; inherit overlays; }; + + rustVersion = "1.89.0"; + rustPinned = pkgs.rust-bin.stable.${rustVersion}.default.override { + targets = [ + "x86_64-pc-windows-gnu" + "x86_64-unknown-linux-gnu" + "aarch64-unknown-linux-gnu" + "arm-unknown-linux-gnueabihf" + "riscv64gc-unknown-linux-gnu" + "x86_64-apple-darwin" + "aarch64-apple-darwin" + ]; + }; + rustPlatformPinned = pkgs.makeRustPlatform { cargo = rustPinned; rustc = rustPinned; }; + + isDarwin = pkgs.stdenv.isDarwin; + + # All possible targets - we'll filter by build system below + allPlatformConfigs = { + "x86_64-linux-gnu" = { + rustTarget = "x86_64-unknown-linux-gnu"; + pkgsCross = null; # Native on x86_64-linux + isNative = buildSystem == "x86_64-linux"; + }; + "aarch64-linux-gnu" = { + rustTarget = "aarch64-unknown-linux-gnu"; + pkgsCross = pkgs.pkgsCross.aarch64-multiplatform; + isNative = buildSystem == "aarch64-linux"; + }; + "arm-linux-gnueabihf" = { + rustTarget = "arm-unknown-linux-gnueabihf"; + pkgsCross = pkgs.pkgsCross.armv7l-hf-multiplatform; + isNative = false; + }; + "riscv64-linux-gnu" = { + rustTarget = "riscv64gc-unknown-linux-gnu"; + pkgsCross = pkgs.pkgsCross.riscv64; + isNative = false; + }; + "x86_64-apple-darwin" = { + rustTarget = "x86_64-apple-darwin"; + # On macOS, we can cross-compile between architectures using the same SDK + # Don't use pkgsCross - it's not needed and causes Nix LibsystemCross errors + # Instead, we use custom compiler wrappers with -arch flags (see darwinLinkerWrapper below) + pkgsCross = null; + isNative = buildSystem == "x86_64-darwin"; + # Special flag for Darwin cross-arch builds (ARM64→x86_64 or x86_64→ARM64) + isDarwinCross = (buildSystem == "aarch64-darwin" || buildSystem == "x86_64-darwin") && buildSystem != "x86_64-darwin"; + }; + "arm64-apple-darwin" = { + rustTarget = "aarch64-apple-darwin"; + # On macOS, we can cross-compile between architectures using the same SDK + pkgsCross = null; + isNative = buildSystem == "aarch64-darwin"; + # Special flag for Darwin cross-arch builds + isDarwinCross = (buildSystem == "aarch64-darwin" || buildSystem == "x86_64-darwin") && buildSystem != "aarch64-darwin"; + }; + "win64" = { + rustTarget = "x86_64-pc-windows-gnu"; + pkgsCross = pkgs.pkgsCross.mingwW64; + isNative = false; + }; + }; + + # Filter platforms based on what can be built on current build system + # Linux can build: All Linux architectures (x86_64, ARM64, ARMv7, RISC-V) + Windows + # macOS can build: Both macOS architectures (Intel & Apple Silicon) using the universal Apple SDK + # See docs/reproducible-builds.md for detailed cross-compilation matrix + availableTargets = + if pkgs.stdenv.isLinux then + [ "x86_64-linux-gnu" "aarch64-linux-gnu" "arm-linux-gnueabihf" + "riscv64-linux-gnu" "win64" ] + else if pkgs.stdenv.isDarwin then + # macOS can build both architectures using the same SDK + [ "x86_64-apple-darwin" "arm64-apple-darwin" ] + else + [ ]; + + platformConfig = builtins.listToAttrs (map (name: { + inherit name; + value = allPlatformConfigs.${name}; + }) availableTargets); + + mkPackageFor = targetName: + let + config = platformConfig.${targetName}; + rustTarget = config.rustTarget; + isNative = config.isNative; + # For Darwin, cross-arch builds (ARM64↔x86_64) should be treated as cross-compilation + isDarwinCross = config.isDarwinCross or false; + isCross = !isNative; + isWindows = targetName == "win64"; + isDarwinTarget = builtins.elem targetName [ "x86_64-apple-darwin" "arm64-apple-darwin" ]; + isLinuxTarget = builtins.elem targetName [ "x86_64-linux-gnu" "aarch64-linux-gnu" "arm-linux-gnueabihf" "riscv64-linux-gnu" ]; + + # Use pkgsCross for cross-compilation, otherwise use native pkgs + targetPkgs = if config.pkgsCross != null then config.pkgsCross else pkgs; + + # Create a linker wrapper for Darwin cross-arch builds + # This enables cross-compilation between Intel and Apple Silicon on the same Mac + # We use system clang directly because Nix's cc-wrapper injects build-host specific + # flags (like -mcpu=armv8.3-a) that conflict with the target architecture + # See docs/reproducible-builds.md "macOS Cross-Architecture Compilation" for details + darwinLinkerWrapper = if isDarwinCross then + let + arch = if targetName == "x86_64-apple-darwin" then "x86_64" else "arm64"; + in + pkgs.writeShellScript "darwin-cross-linker" '' + #!/bin/bash + # Use system clang directly with -arch to specify target architecture + # This works because macOS SDK is universal and supports both architectures + exec /usr/bin/clang -arch ${arch} "$@" + '' + else null; + + # Rust target with underscores for environment variables + rustTargetEnv = builtins.replaceStrings ["-"] ["_"] rustTarget; + + nativeBuildInputs = [ pkgs.pkg-config ]; + + # buildInputs should only contain libraries for the TARGET platform + buildInputs = + if isWindows then + [ ] + else if isDarwinTarget then + # For Darwin targets (both native and cross-arch) + # Use native pkgs frameworks - they work for both architectures + (if isDarwinCross || isNative then + # Native or Darwin cross-arch build - use native frameworks + [ pkgs.darwin.apple_sdk.frameworks.Security + pkgs.darwin.apple_sdk.frameworks.SystemConfiguration + pkgs.libiconv ] + else + # Cross-compiling to macOS from Linux is experimental + [ ]) + else if isLinuxTarget then + [ pkgs.openssl ] + else + [ ]; + + cargoBuildFlags = pkgs.lib.optionals isCross [ "--target" rustTarget ]; + + # Custom install phase for cross-compilation + installPhase = if isCross then '' + runHook preInstall + mkdir -p $out/bin + cp target/${rustTarget}/release/clementine-cli${pkgs.lib.optionalString isWindows ".exe"} $out/bin/ + runHook postInstall + '' else null; + + # Cross-compilation environment setup + crossEnv = if isCross then { + # Tell Cargo where the cross-compilation linker is + "CARGO_TARGET_${pkgs.lib.toUpper rustTargetEnv}_LINKER" = + if isDarwinCross then + # For Darwin cross-arch, use our wrapper that forces the right architecture + "${darwinLinkerWrapper}" + else if isDarwinTarget then + # For other Darwin cross-compilation (e.g., from Linux) + "cc" + else + "${targetPkgs.stdenv.cc}/bin/${targetPkgs.stdenv.cc.targetPrefix}cc"; + + # Rust flags for the target + "CARGO_TARGET_${pkgs.lib.toUpper rustTargetEnv}_RUSTFLAGS" = + if isWindows then + "-C target-feature=-crt-static -C link-arg=-L${targetPkgs.windows.pthreads}/lib" + else + # No additional flags needed - the linker wrapper handles Darwin cross-arch + ""; + + # Ensure build scripts use the host compiler + HOST_CC = "${pkgs.stdenv.cc}/bin/cc"; + + # Configure for C dependencies cross-compilation + } // (if isDarwinTarget then + # For Darwin cross-arch, we need to set flags for the C compiler too + (if isDarwinCross then + let + arch = if targetName == "x86_64-apple-darwin" then "x86_64" else "arm64"; + # Create a CC wrapper for C dependencies (like ring's curve25519.c) + # This ensures C code compiled during build.rs is also for the correct architecture + ccWrapper = pkgs.writeShellScript "cc-wrapper-${arch}" '' + #!/bin/bash + # Use system clang to compile C code for the target architecture + exec /usr/bin/clang -arch ${arch} "$@" + ''; + in { + TARGET_CC = "${ccWrapper}"; + "CC_${rustTargetEnv}" = "${ccWrapper}"; + "AR_${rustTargetEnv}" = "${pkgs.stdenv.cc}/bin/ar"; + "CFLAGS_${rustTargetEnv}" = "-arch ${arch}"; + } + else {}) + else { + TARGET_CC = "${targetPkgs.stdenv.cc}/bin/${targetPkgs.stdenv.cc.targetPrefix}cc"; + "CC_${rustTargetEnv}" = "${targetPkgs.stdenv.cc}/bin/${targetPkgs.stdenv.cc.targetPrefix}cc"; + "AR_${rustTargetEnv}" = "${targetPkgs.stdenv.cc}/bin/${targetPkgs.stdenv.cc.targetPrefix}ar"; + }) else {}; + in + rustPlatformPinned.buildRustPackage rec { + pname = "clementine-cli-${targetName}"; + version = "0.1.0"; + + # Only include files that affect the build + # Exclude docs, CI, and scripts so documentation changes don't affect build hash + src = pkgs.lib.cleanSourceWith { + src = ./.; + filter = path: type: + let + baseName = baseNameOf path; + relativePath = pkgs.lib.removePrefix (toString ./. + "/") (toString path); + in + # Exclude non-build-affecting directories + !(pkgs.lib.hasPrefix "docs/" relativePath) && + !(pkgs.lib.hasPrefix ".github/" relativePath) && + !(pkgs.lib.hasPrefix "reproducible/" relativePath) && + !(pkgs.lib.hasPrefix "result/" relativePath) && + !(pkgs.lib.hasPrefix "target/" relativePath) && + + # Exclude specific non-build-affecting files + !(baseName == "README.md") && + !(baseName == "codespell_ignore.txt") && + !(baseName == "COPYING") && + # Exclude git files + !(baseName == ".git") && + !(baseName == ".gitignore"); + }; + + inherit nativeBuildInputs buildInputs cargoBuildFlags installPhase; + + # Reproducibility knobs + # These settings ensure bit-for-bit identical builds across different machines + # See docs/reproducible-builds.md "Verifying Reproducibility" for testing + auditable = false; + SOURCE_DATE_EPOCH = "1"; + dontStrip = true; + enableParallelBuilding = false; + + depsBuildBuild = pkgs.lib.optionals isCross [ targetPkgs.stdenv.cc ]; + + env = crossEnv; + + cargoLock = { + lockFile = ./Cargo.lock; + # Git dependency hashes for reproducibility + # Update these when git dependencies change using: ./reproducible/update-hashes.sh + # See docs/reproducible-builds.md "Dependency Hash Updates" for details + outputHashes = { + "bitcoincore-rpc-0.18.0" = "sha256-QYtvsul7MUFm/HUDAqiwxM4HoFyOcn31ERR8eu62LB4="; + "secp256k1-0.31.0" = "sha256-jTdc0423m9lS4NunLCMwLM6AdkerSc/ovTSyO91KXa0="; + }; + }; + + doCheck = !isCross; + + meta = with pkgs.lib; { + description = "Clementine CLI tool for ${targetName}"; + homepage = "https://github.com/chainwayxyz/clementine-cli"; + license = licenses.gpl3; + platforms = [ pkgs.stdenv.hostPlatform.system ]; + }; + }; + + packagesForAll = pkgs.lib.genAttrs availableTargets mkPackageFor; + + # Map build system to target name + defaultTarget = { + "x86_64-linux" = "x86_64-linux-gnu"; + "aarch64-linux" = "aarch64-linux-gnu"; + "x86_64-darwin" = "x86_64-apple-darwin"; + "aarch64-darwin" = "arm64-apple-darwin"; + }.${buildSystem}; + + in + { + packages = packagesForAll // { + default = packagesForAll.${defaultTarget}; + clementine-cli = packagesForAll.${defaultTarget}; + }; + + devShells.default = pkgs.mkShell { + nativeBuildInputs = [ pkgs.pkg-config ]; + buildInputs = + (if isDarwin then [ + pkgs.darwin.apple_sdk.frameworks.Security + pkgs.darwin.apple_sdk.frameworks.SystemConfiguration + pkgs.libiconv + ] else [ + pkgs.openssl + ]) ++ [ rustPinned ]; + + shellHook = '' + echo "Clementine CLI development environment" + echo "Rust version: ${rustVersion}" + echo "Build system: ${buildSystem}" + echo + echo "Available build targets on this system:" + ${pkgs.lib.concatMapStringsSep "\n" (target: ''echo " nix build .#${target}"'') availableTargets} + echo + ${if isDarwin then '' + echo "Note: macOS can build both Intel and Apple Silicon architectures." + echo " For Linux/Windows builds, use a Linux system." + '' else '' + echo "Note: Linux can build all targets including macOS." + ''} + ''; + }; + } + ); +} \ No newline at end of file diff --git a/reproducible/update-documented-hashes.sh b/reproducible/update-documented-hashes.sh new file mode 100755 index 00000000..561fcba2 --- /dev/null +++ b/reproducible/update-documented-hashes.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash +# +# Update all documented hashes in reproducible-builds.md +# +# This script builds all platforms and updates the Expected Hashes table +# in docs/reproducible-builds.md with the current build hashes. +# +# Usage: +# ./reproducible/update-documented-hashes.sh +# + +set -e + +REPO_ROOT="$(git rev-parse --show-toplevel)" +cd "$REPO_ROOT" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo -e "${BLUE}========================================${NC}" +echo -e "${BLUE}Update Documented Hashes${NC}" +echo -e "${BLUE}========================================${NC}" +echo "" + +# Determine which platforms we can build on this system +PLATFORMS=() +if [[ "$OSTYPE" == "linux-gnu"* ]]; then + echo -e "${GREEN}Detected Linux - building all platforms${NC}" + PLATFORMS=("x86_64-linux-gnu" "aarch64-linux-gnu" "arm-linux-gnueabihf" "riscv64-linux-gnu" "win64" "x86_64-apple-darwin" "arm64-apple-darwin") +elif [[ "$OSTYPE" == "darwin"* ]]; then + echo -e "${GREEN}Detected macOS - building macOS platforms only${NC}" + PLATFORMS=("x86_64-apple-darwin" "arm64-apple-darwin") + echo -e "${YELLOW}Note: Linux and Windows platforms should be built on Linux${NC}" +else + echo -e "${RED}Unsupported platform: $OSTYPE${NC}" + exit 1 +fi + +echo "" + +# Build each platform and collect hashes +declare -A HASHES + +for platform in "${PLATFORMS[@]}"; do + echo -e "${BLUE}Building ${platform}...${NC}" + + if nix build .#${platform}; then + HASH=$(nix --extra-experimental-features 'nix-command flakes' hash path ./result) + HASHES[$platform]=$HASH + echo -e "${GREEN}OK${NC} ${platform}: ${HASH}" + rm -rf result + else + echo -e "${RED}ERROR: Failed to build ${platform}${NC}" + exit 1 + fi + echo "" +done + +# Create updated hash table +echo -e "${BLUE}Generating updated hash table...${NC}" +echo "" + +TEMP_FILE=$(mktemp) + +cat > "$TEMP_FILE" << 'EOF' +| Platform | Hash | +|----------|------| +EOF + +# Add each hash in the correct order +declare -a PLATFORM_ORDER=("x86_64-linux-gnu" "aarch64-linux-gnu" "arm-linux-gnueabihf" "riscv64-linux-gnu" "win64" "x86_64-apple-darwin" "arm64-apple-darwin") + +for platform in "${PLATFORM_ORDER[@]}"; do + if [[ -n "${HASHES[$platform]}" ]]; then + echo "| **${platform}** | \`${HASHES[$platform]}\` |" >> "$TEMP_FILE" + fi +done + +echo -e "${GREEN}Updated hash table:${NC}" +echo "" +cat "$TEMP_FILE" +echo "" + +# Ask user if they want to update the documentation +read -p "Update docs/reproducible-builds.md with these hashes? (y/N) " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + # Update the documentation + # We'll replace the table between "| Platform | Hash |" and the next blank line or ">" + + # Create a backup + cp docs/reproducible-builds.md docs/reproducible-builds.md.backup + echo -e "${GREEN}OK: Created backup: docs/reproducible-builds.md.backup${NC}" + + # Use awk to replace the hash table + awk -v new_table="$(cat $TEMP_FILE)" ' + /^\| Platform \| Hash \|/ { + print new_table + in_table = 1 + next + } + in_table && /^$/ { + in_table = 0 + } + in_table && /^>/ { + in_table = 0 + } + !in_table || !/^\|/ { + print + } + ' docs/reproducible-builds.md.backup > docs/reproducible-builds.md + + echo -e "${GREEN}OK: Updated docs/reproducible-builds.md${NC}" + echo "" + echo -e "${YELLOW}Please review the changes with:${NC}" + echo -e " git diff docs/reproducible-builds.md" +else + echo "Update cancelled." +fi + +rm "$TEMP_FILE" diff --git a/reproducible/update-hashes.sh b/reproducible/update-hashes.sh new file mode 100755 index 00000000..5a9c1124 --- /dev/null +++ b/reproducible/update-hashes.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env bash +# +# Helper script to update git dependency hashes in flake.nix +# +# This script attempts to build the project, captures hash mismatch errors, +# and helps you update the flake.nix with the correct hashes. +# +# Usage: +# ./reproducible/update-hashes.sh [PLATFORM] +# +# Examples: +# ./reproducible/update-hashes.sh # Auto-detect current platform +# ./reproducible/update-hashes.sh x86_64-linux-gnu # Specific platform +# ./reproducible/update-hashes.sh win64 # Windows cross-compile +# + +set -e + +FLAKE_NIX="flake.nix" +REPO_ROOT="$(git rev-parse --show-toplevel)" + +cd "$REPO_ROOT" + +# Detect current platform if not specified +detect_platform() { + local os=$(uname -s) + local arch=$(uname -m) + + case "$os" in + Linux) + case "$arch" in + x86_64) echo "x86_64-linux-gnu" ;; + aarch64) echo "aarch64-linux-gnu" ;; + armv7l) echo "arm-linux-gnueabihf" ;; + riscv64) echo "riscv64-linux-gnu" ;; + *) echo "x86_64-linux-gnu" ;; + esac + ;; + Darwin) + case "$arch" in + x86_64) echo "x86_64-apple-darwin" ;; + arm64) echo "arm64-apple-darwin" ;; + *) echo "x86_64-apple-darwin" ;; + esac + ;; + *) + echo "x86_64-linux-gnu" + ;; + esac +} + +# Get platform from argument or auto-detect +PLATFORM="${1:-$(detect_platform)}" + +echo "==> Using platform: $PLATFORM" +echo "==> Attempting to build to discover required hashes..." +echo "" + +# Try to build and capture the output +if ! nix build .#$PLATFORM 2>&1 | tee /tmp/nix-build-output.txt; then + echo "" + echo "==> Build failed as expected (if this is the first build)" + echo "" + + # Extract hash information from the error output + if grep -q "hash mismatch" /tmp/nix-build-output.txt; then + echo "==> Found hash mismatches. Here are the correct hashes:" + echo "" + + # Extract package names and hashes + grep -A 1 "hash mismatch" /tmp/nix-build-output.txt | \ + grep -E "(specified|got):" | \ + sed 's/^[[:space:]]*//' || true + + echo "" + echo "==> Please update the outputHashes section in flake.nix with these values." + echo "" + echo "The outputHashes section should look like:" + echo "" + echo " outputHashes = {" + echo " \"bitcoincore-rpc-0.18.0\" = \"sha256-XXXXX...\";" + echo " \"secp256k1-0.31.0\" = \"sha256-YYYYY...\";" + echo " };" + echo "" + else + echo "==> No hash mismatches found. The error might be something else." + echo "==> Check /tmp/nix-build-output.txt for details." + fi + + exit 1 +else + echo "" + echo "==> Build succeeded! Your hashes are correct." + echo "" + nix hash path ./result + exit 0 +fi diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 299adba5..c2551a14 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,5 @@ [toolchain] +# Exact version pinned for reproducible builds (must match flake.nix) channel = "1.89" components = ["rustfmt", "rust-src"] profile = "minimal" diff --git a/src/wallet/encryption.rs b/src/wallet/encryption.rs index 1d6e4bb3..46aeb258 100644 --- a/src/wallet/encryption.rs +++ b/src/wallet/encryption.rs @@ -60,7 +60,6 @@ use crate::secure_types::{SecureByteVec, SecureString}; use crate::{errors::BridgeCliError, wallet::passphrase::derive_key_from_passphrase}; -use aes_gcm::aead::generic_array::GenericArray; use aes_gcm::{Aes256Gcm, KeyInit, aead::Aead}; use secrecy::ExposeSecret; use serde::{Deserialize, Serialize}; @@ -113,8 +112,8 @@ pub(crate) fn aes_encrypt_secure( .map_err(|e| BridgeCliError::KeyDerivationError(e.to_string()))?; // Encrypt with AES-256-GCM - let cipher = Aes256Gcm::new(GenericArray::from_slice(secure_key.expose_secret())); - let nonce = GenericArray::from_slice(&nonce_bytes); + let cipher = Aes256Gcm::new(secure_key.expose_secret().into()); + let nonce = (&nonce_bytes).into(); let ciphertext = cipher .encrypt(nonce, secure_plaintext.expose_secret().as_bytes()) @@ -145,8 +144,8 @@ pub(crate) fn aes_decrypt_secure( .map_err(|e| BridgeCliError::KeyDerivationError(e.to_string()))?; // Decrypt with AES-256-GCM (verifies authentication) - let cipher = Aes256Gcm::new(GenericArray::from_slice(secure_key.expose_secret())); - let nonce = GenericArray::from_slice(&encrypted_data.nonce); + let cipher = Aes256Gcm::new(secure_key.expose_secret().into()); + let nonce = (&encrypted_data.nonce).into(); let plaintext = cipher .decrypt(nonce, encrypted_data.ciphertext.as_ref())