diff --git a/.cargo/release-version b/.cargo/release-version index b0607bd530..319b54fc3e 100644 --- a/.cargo/release-version +++ b/.cargo/release-version @@ -1 +1 @@ -v4.8.1 \ No newline at end of file +v4.9.0 \ No newline at end of file diff --git a/.ci/test_db_backup.sh b/.ci/test_db_backup.sh index 1fcdf0f62d..7e013b3375 100755 --- a/.ci/test_db_backup.sh +++ b/.ci/test_db_backup.sh @@ -4,7 +4,8 @@ . ./.ci/utils.sh # Change this to increase/decrease log verbosity -log_verbosity=2 +log_verbosity=4 +max_validator_log_size_bytes=$((2 * 1024 * 1024)) # Network parameters total_validators=4 @@ -16,7 +17,7 @@ checkpoint_height=3 rollback_height=10 num_checkpoints=0 remaining_checkpoints=2 -max_warnings=40 +max_warnings=300 # Create log directory init_log_dir @@ -134,7 +135,7 @@ while (( total_wait < 600 )); do # 10 minutes max done if (( remaining_checkpoints == 0 )); then - if check_logs "$log_dir" "$total_validators" 0 "$max_warnings"; then + if check_logs "$log_dir" "$total_validators" 0 "$max_warnings" "$max_validator_log_size_bytes"; then exit 0 else exit 1 @@ -154,4 +155,3 @@ done # The main loop has expired by now log "❌ Test failed!" exit 1 - diff --git a/.ci/test_devnet.sh b/.ci/test_devnet.sh index 470d246d9c..7092d4915b 100755 --- a/.ci/test_devnet.sh +++ b/.ci/test_devnet.sh @@ -16,15 +16,18 @@ network_id=$3 min_height=$4 max_warnings=$5 -# The verobsity of snarkos nodes. -NODE_VERBOSITY=3 +# The verbosity of snarkos nodes. +NODE_VERBOSITY=4 +# Max logfile sizes (bytes) for regression checks. +MAX_VALIDATOR_LOG_SIZE_BYTES=$((2 * 1024 * 1024)) +MAX_CLIENT_LOG_SIZE_BYTES=$((1 * 1024 * 1024)) # Default values if not provided : "${total_validators:=4}" : "${total_clients:=4}" # need at least 4 clients, so each validator has at least one client connected to it. : "${network_id:=0}" : "${min_height:=60}" # To likely go past the 100 round garbage collection limit. -: "${max_warnings:=40}" +: "${max_warnings:=300}" # shellcheck source=SCRIPTDIR/utils.sh . ./.ci/utils.sh @@ -437,7 +440,7 @@ fi # Ensure no errors are generated during the devnet run, as all nodes are # expected to operate without failures or interruptions. -if check_logs "$log_dir" "$total_validators" "$total_clients" "$max_warnings"; then +if check_logs "$log_dir" "$total_validators" "$total_clients" "$max_warnings" "$MAX_VALIDATOR_LOG_SIZE_BYTES" "$MAX_CLIENT_LOG_SIZE_BYTES"; then exit 0 else exit 1 diff --git a/.ci/test_full_upgrade.sh b/.ci/test_full_upgrade.sh index 05832621b3..19c013095e 100755 --- a/.ci/test_full_upgrade.sh +++ b/.ci/test_full_upgrade.sh @@ -24,10 +24,13 @@ max_warnings=$4 : "${total_validators:=4}" : "${total_clients:=2}" : "${network_id:=0}" -: "${max_warnings:=40}" +: "${max_warnings:=45}" # Node verbosity -NODE_VERBOSITY=1 +NODE_VERBOSITY=4 +# Max logfile sizes (bytes) for regression checks. +MAX_VALIDATOR_LOG_SIZE_BYTES=$((8 * 1024 * 1024)) +MAX_CLIENT_LOG_SIZE_BYTES=$((1 * 1024 * 1024)) # How long to wait between upgrades (seconds); used for block-height window @@ -381,7 +384,7 @@ done log "Upgrade test passed: network reached highest consensus version with release, all nodes upgraded to PR snarkos, and consensus version remained correct." -if check_logs "$log_dir" "$total_validators" "$total_clients" "$max_warnings"; then +if check_logs "$log_dir" "$total_validators" "$total_clients" "$max_warnings" "$MAX_VALIDATOR_LOG_SIZE_BYTES" "$MAX_CLIENT_LOG_SIZE_BYTES"; then exit 0 else exit 1 diff --git a/.ci/test_partial_upgrade.sh b/.ci/test_partial_upgrade.sh index a8d2a8df4c..2e311d8771 100755 --- a/.ci/test_partial_upgrade.sh +++ b/.ci/test_partial_upgrade.sh @@ -27,10 +27,12 @@ max_warnings=$3 # Default values if not provided : "${total_validators:=4}" : "${network_id:=0}" -: "${max_warnings:=40}" +: "${max_warnings:=45}" # Node verbosity -NODE_VERBOSITY=1 +NODE_VERBOSITY=4 +# Max logfile size (bytes) for regression checks. +MAX_VALIDATOR_LOG_SIZE_BYTES=$((4 * 1024 * 1024)) # How long to wait between upgrades (seconds); used for block-height window WAIT_BETWEEN_UPGRADES="${WAIT_BETWEEN_UPGRADES:-60}" @@ -294,7 +296,7 @@ fi log "🎉 Test passed! Node synced to new consensus height ($new_consensus_height) after another node was upgraded." -if check_logs "$log_dir" "$total_validators" 0 "$max_warnings"; then +if check_logs "$log_dir" "$total_validators" 0 "$max_warnings" "$MAX_VALIDATOR_LOG_SIZE_BYTES"; then exit 0 else exit 1 diff --git a/.ci/test_reset_minority.sh b/.ci/test_reset_minority.sh index 7964a07eff..86846fadb4 100755 --- a/.ci/test_reset_minority.sh +++ b/.ci/test_reset_minority.sh @@ -25,14 +25,15 @@ max_warnings=$6 # Default values if not provided : "${total_validators:=7}" : "${network_id:=0}" -: "${reset_interval:=20}" -: "${final_height:=100}" +: "${reset_interval:=50}" +: "${final_height:=250}" : "${num_resets:=3}" -: "${max_warnings:=40}" +: "${max_warnings:=4000}" # Allow lots of warnings as we're doing funky stuff in this test. minority=$(( (total_validators - 1) / 3 )) network_name=$(get_network_name "$network_id") -verbosity=0 +verbosity=1 +max_validator_log_size_bytes=$((6 * 1024 * 1024)) # The time that is used to determine the total timeout for the test max_wait_per_block=10 @@ -101,7 +102,7 @@ else exit 1 fi -if check_logs "$log_dir" "$total_validators" 0 "$max_warnings"; then +if check_logs "$log_dir" "$total_validators" 0 "$max_warnings" "$max_validator_log_size_bytes"; then exit 0 else exit 1 diff --git a/.ci/test_restart_majority.sh b/.ci/test_restart_majority.sh index 493f5cb0d9..9fb7e8caae 100755 --- a/.ci/test_restart_majority.sh +++ b/.ci/test_restart_majority.sh @@ -18,25 +18,26 @@ init_log_dir total_validators=$1 network_id=$2 reset_interval=$3 -final_height=$4 -num_resets=$5 -max_warnings=$6 +num_resets=$4 +max_warnings=$5 # Default values if not provided : "${total_validators:=7}" : "${network_id:=0}" -: "${reset_interval:=10}" -: "${final_height:=20}" +: "${reset_interval:=20}" : "${num_resets:=3}" -: "${max_warnings:=40}" +: "${max_warnings:=4000}" # Allow lots of warnings as we're doing funky stuff in this test. + +# Blocks to advance after all restarts complete. +final_height_advance=20 max_faulty=$(( (total_validators - 1) / 3 )) # AleoBFT needs at least N-f for a quorum, not 2*f+1. majority=$((total_validators - max_faulty)) network_name=$(get_network_name "$network_id") -# Keep verbosity low as we are running many nodes. -verbosity=0 +verbosity=1 +max_validator_log_size_bytes=$((3 * 1024 * 1024)) # The time that is used to determine the total timeout for the test. # Set this higher than the interval for the minority test, as more nodes need to sync. @@ -67,9 +68,6 @@ done wait_for_nodes "$total_validators" 0 "$network_name" 180 -# Wait longer if there are more blocks to reach. -max_wait=$((final_height * max_wait_per_block)) - for iter in $(seq 1 "$num_resets"); do reset_height=$(( iter * reset_interval )); @@ -97,14 +95,24 @@ for iter in $(seq 1 "$num_resets"); do done done -if ! wait_for_heights 0 "$total_validators" "$final_height" "$network_name" $(( max_wait - $(elapsed_since "$start") )); then +# Sleep for a few seconds to make sure the nodes are fully restarted and connected. +sleep 5 + +log_check_since=$(epoch_now) +latest_height=$(get_block_height 0 "$network_name") +final_height=$((latest_height + final_height_advance)) +max_wait=$((final_height_advance * max_wait_per_block)) + +log "All restarts complete at height ${latest_height}. Waiting for final height ${final_height}..." + +if ! wait_for_heights 0 "$total_validators" "$final_height" "$network_name" "$max_wait"; then log "❌ Test failed! Not all nodes reached final height of $final_height within $max_wait seconds." exit 1 fi log "SUCCESS! Network took $(elapsed_since "$start") seconds to reach final height of $final_height after $num_resets resets." -if check_logs "$log_dir" "$total_validators" 0 "$max_warnings"; then +if check_logs "$log_dir" "$total_validators" 0 "$max_warnings" "$max_validator_log_size_bytes" "" "$log_check_since"; then exit 0 else exit 1 diff --git a/.ci/utils.sh b/.ci/utils.sh index ac7bc919fd..339cd916a3 100644 --- a/.ci/utils.sh +++ b/.ci/utils.sh @@ -79,6 +79,48 @@ function elapsed_since() { echo $((SECONDS - start)) } +# Get the current Unix epoch timestamp in seconds. +function epoch_now() { + date +%s +} + +# Convert a Unix epoch timestamp to an ISO-8601 prefix used by snarkOS log lines. +function epoch_to_iso() { + local epoch=$1 + if date -u -d "@${epoch}" +%Y-%m-%dT%H:%M:%S >/dev/null 2>&1; then + date -u -d "@${epoch}" +%Y-%m-%dT%H:%M:%S + else + date -u -r "${epoch}" +%Y-%m-%dT%H:%M:%S + fi +} + +# Return log lines at or after the given Unix epoch timestamp. +# When since_epoch is empty, returns the full log file. +function log_lines_since() { + local log_file=$1 + local since_epoch=$2 + + if [ -z "$since_epoch" ]; then + cat "$log_file" + return 0 + fi + + local since_prefix + since_prefix=$(epoch_to_iso "$since_epoch") + + awk -v since="$since_prefix" ' + BEGIN { from = 0 } + /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}/ { + if (substr($1, 1, 19) >= since) { + from = 1 + } else { + from = 0 + } + } + from { print } + ' "$log_file" +} + # Determine network name based on network_id function get_network_name() { local network_id=$1 @@ -344,26 +386,46 @@ function check_logs() { # The maximum number of warnings allow in each node's log file. # Nodes may create some warnings at startup because they cannot connect to each other yet. local max_warnings=$4 - + # Optional max logfile size in bytes. + local max_validator_log_size_bytes=${5:-} + local max_client_log_size_bytes=${6:-} + # Optional Unix epoch timestamp; only log lines at or after this time are checked. + local since_epoch=${7:-} + + if [ -n "$since_epoch" ]; then + log "Only checking log lines at or after $(epoch_to_iso "$since_epoch")" + fi + local all_reached=true local highest_height=0 # Don't use `seq` here as `total_validators` can be 0. - for ((validator_index = 0; validator_index < validator_index; validator_index++)); do - if [ ! -s "$log_dir/validator-${validator_index}.log" ]; then + for ((validator_index = 0; validator_index < total_validators; validator_index++)); do + validator_log="$log_dir/validator-${validator_index}.log" + if [ ! -s "$validator_log" ]; then log "❌ Test failed! Validator #${validator_index} did not create any logs in \"$log_dir\"." return 1 fi + if [ -n "$max_validator_log_size_bytes" ]; then + validator_log_size_bytes=$(wc -c < "$validator_log") + if (( validator_log_size_bytes > max_validator_log_size_bytes )); then + log "❌ Test failed! Validator #${validator_index} logfile is too large (${validator_log_size_bytes}B > ${max_validator_log_size_bytes}B)." + return 1 + fi + fi + + validator_log_content=$(log_lines_since "$validator_log" "$since_epoch") + #TODO(kaimast): remove the grep -v "already exists in the ledger" once spurious sync errors are gone. - if grep "ERROR" "$log_dir/validator-${validator_index}.log" | grep -qv "already exists in the ledger"; then + if echo "$validator_log_content" | grep "ERROR" | grep -qv "already exists in the ledger"; then log "❌ Test failed! Validator #${validator_index} logs contain errors." # Print the errors to the console. - grep "ERROR" "$log_dir/validator-${validator_index}.log" | grep -v "already exists in the ledger" + echo "$validator_log_content" | grep "ERROR" | grep -v "already exists in the ledger" return 1 fi - num_warnings=$(grep -c "WARN" "$log_dir/validator-${validator_index}.log") + num_warnings=$(echo "$validator_log_content" | grep -c "WARN" || true) if (( num_warnings > max_warnings )); then echo "❌ Test failed! Validator #${validator_index} logs contain more than ${max_warnings} warnings." return 1 @@ -372,19 +434,30 @@ function check_logs() { # Don't use `seq` here as `total_clients` can be 0. for ((client_index = 0; client_index < total_clients; client_index++)); do - if [ ! -s "$log_dir/client-${client_index}.log" ]; then + client_log="$log_dir/client-${client_index}.log" + if [ ! -s "$client_log" ]; then log "❌ Test failed! Client #${client_index} did not create any logs in \"$log_dir\"." return 1 fi - if grep "ERROR" "$log_dir/client-${client_index}.log" | grep -qv "already exists in the ledger"; then + if [ -n "$max_client_log_size_bytes" ]; then + client_log_size_bytes=$(wc -c < "$client_log") + if (( client_log_size_bytes > max_client_log_size_bytes )); then + log "❌ Test failed! Client #${client_index} logfile is too large (${client_log_size_bytes}B > ${max_client_log_size_bytes}B)." + return 1 + fi + fi + + client_log_content=$(log_lines_since "$client_log" "$since_epoch") + + if echo "$client_log_content" | grep "ERROR" | grep -qv "already exists in the ledger"; then log "❌ Test failed! Client #${client_index} logs contain errors." # Print the errors to the console. - grep "ERROR" "$log_dir/client-${client_index}.log" | grep -v "already exists in the ledger" + echo "$client_log_content" | grep "ERROR" | grep -v "already exists in the ledger" return 1 fi - num_warnings=$(grep -c "WARN" "$log_dir/client-${client_index}.log") + num_warnings=$(echo "$client_log_content" | grep -c "WARN" || true) if (( num_warnings > max_warnings )); then echo "❌ Test failed! Client #${client_index} logs contain more than ${max_warnings} warnings." return 1 @@ -957,4 +1030,3 @@ function get_block_height { echo "$result" return 0 } - diff --git a/.circleci/config.yml b/.circleci/config.yml index 6dd2f53540..c495becc82 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -302,37 +302,50 @@ commands: echo "==> test-threads override: ${TEST_THREADS:-}" echo "==> jobs: ${JOBS}" - # If flags explicitly include --no-run, fall back to plain cargo test - if printf '%s' " $BUILD_FLAGS_SANITIZED " | grep -q ' --no-run '; then - cargo test $PKG_ARGS $BUILD_FLAGS_SANITIZED | tee "$OUT" - : > "$CSV"; : > "$TOP" - else - cargo nextest run \ - $PKG_ARGS $BUILD_FLAGS_SANITIZED \ - --profile ci -j "${JOBS}" "${CFG_ARGS[@]}" \ - --status-level fail --hide-progress-bar \ - --no-tests=pass \ - ${FILTER_EXPR:+--filter-expr "$FILTER_EXPR"} \ - 2>&1 | tee "$OUT" - - if [ -f "$JUNIT" ]; then - awk -v RS='1 { - name=""; classname=""; time=""; - start=index($0,"classname=\""); if(start>0){ start+=11; rest=substr($0,start); end=index(rest,"\""); if(end>0) classname=substr(rest,1,end-1) } - start=index($0,"name=\""); if(start>0){ start+=6; rest=substr($0,start); end=index(rest,"\""); if(end>0) name=substr(rest,1,end-1) } - start=index($0,"time=\""); if(start>0){ start+=6; rest=substr($0,start); end=index(rest,"\""); if(end>0) time=substr(rest,1,end-1) } - if(name!="" && time!=""){ full=(classname!=""?classname"::"name:name); printf "%s,%s\n", full, time } - } - ' "$JUNIT" > "$CSV" || true - - sort -t, -k2,2nr "$CSV" | head -n 30 > "$TOP" || true + # --- Logic to run tests and catch sccache failure --- + run_nextest() { + if printf '%s' " $BUILD_FLAGS_SANITIZED " | grep -q ' --no-run '; then + cargo test $PKG_ARGS $BUILD_FLAGS_SANITIZED + else + cargo nextest run \ + $PKG_ARGS $BUILD_FLAGS_SANITIZED \ + --profile ci -j "${JOBS}" "${CFG_ARGS[@]}" \ + --status-level fail --hide-progress-bar \ + --no-tests=pass \ + ${FILTER_EXPR:+--filter-expr "$FILTER_EXPR"} + fi + } + + if ! run_nextest 2>&1 | tee "$OUT"; then + if grep -q "sccache" "$OUT" && grep -q "exit status: 2" "$OUT"; then + echo "⚠️ Detected sccache crash. Cleaning up and retrying..." + [ -f "$HOME/.bin/sccache" ] && "$HOME/.bin/sccache" --stop-server || true + rm -rf "$HOME/.cache/sccache" + rm -rf target + mkdir -p target/nextest/ci + run_nextest 2>&1 | tee "$OUT" else - echo "WARN: $JUNIT not found; no timings extracted." >&2 - : > "$CSV"; : > "$TOP" + exit 1 fi fi + if [ -f "$JUNIT" ]; then + awk -v RS='1 { + name=""; classname=""; time=""; + start=index($0,"classname=\""); if(start>0){ start+=11; rest=substr($0,start); end=index(rest,"\""); if(end>0) classname=substr(rest,1,end-1) } + start=index($0,"name=\""); if(start>0){ start+=6; rest=substr($0,start); end=index(rest,"\""); if(end>0) name=substr(rest,1,end-1) } + start=index($0,"time=\""); if(start>0){ start+=6; rest=substr($0,start); end=index(rest,"\""); if(end>0) time=substr(rest,1,end-1) } + if(name!="" && time!=""){ full=(classname!=""?classname"::"name:name); printf "%s,%s\n", full, time } + } + ' "$JUNIT" > "$CSV" || true + + sort -t, -k2,2nr "$CSV" | head -n 30 > "$TOP" || true + else + echo "WARN: $JUNIT not found; no timings extracted." >&2 + : > "$CSV"; : > "$TOP" + fi + - store_artifacts: path: artifacts destination: test-timings/<< parameters.workspace_member >> @@ -368,18 +381,6 @@ commands: type: string cache_key: type: string - validators: - type: integer - default: 4 - clients: - type: integer - default: 2 - network_id: - type: integer - default: 0 - min_height: - type: integer - default: 45 steps: - checkout - restore_cache: @@ -391,17 +392,13 @@ commands: - run: name: "Run full upgrade test" timeout: 30m # Allow 30 minutes total - environment: - WAIT_BETWEEN_UPGRADES: "60" command: | - ./.ci/test_full_upgrade.sh << parameters.validators >> << parameters.clients >> << parameters.network_id >> << parameters.min_height >> + ./.ci/test_full_upgrade.sh - run: name: "Run partial upgrade test" timeout: 30m # Allow 30 minutes total - environment: - WAIT_BETWEEN_UPGRADES: "60" command: | - ./.ci/test_partial_upgrade.sh << parameters.validators >> << parameters.network_id >> << parameters.min_height >> + ./.ci/test_partial_upgrade.sh - save_cache: key: v1-snarkos-release- paths: @@ -624,7 +621,7 @@ jobs: name: "Run Reset Minority Devnet Test" no_output_timeout: 5m command: | - ./.ci/test_reset_minority.sh 7 0 50 250 3 + ./.ci/test_reset_minority.sh - clear_environment: cache_key: v4.2.0-rust-1.88.0-chaotic-minority-reset-test-cache @@ -646,7 +643,7 @@ jobs: name: "Run Restart Majority Devnet Test" no_output_timeout: 5m command: | - ./.ci/test_restart_majority.sh 7 0 20 250 3 + ./.ci/test_restart_majority.sh - clear_environment: cache_key: v4.2.0-rust-1.88.0-chaotic-majority-restart-test-cache @@ -816,7 +813,6 @@ workflows: filters: branches: only: - - main_net_v48 - canary - testnet - mainnet @@ -826,7 +822,7 @@ workflows: filters: branches: only: - - main_net_v48 + - main_net_v49 - canary - testnet - mainnet @@ -836,7 +832,7 @@ workflows: filters: branches: only: - - main_net_v48 + - main_net_v49 - canary - testnet - mainnet @@ -845,7 +841,7 @@ workflows: filters: branches: only: - - main_net_v48 + - main_net_v49 - canary - testnet - mainnet diff --git a/Cargo.lock b/Cargo.lock index 77735489b8..117b16c909 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -82,7 +82,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9ebd144c81671193ed85aa2db9bb5e183421843e0485de8fffc07e5cf50e18a" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "syn 1.0.109", ] @@ -93,7 +93,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f6ff9e4c36858fa2c29e5284b77527b5a7466743976e1ba1f5824e16683545" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "syn 1.0.109", ] @@ -173,9 +173,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "approx" @@ -186,15 +186,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" -dependencies = [ - "derive_arbitrary", -] - [[package]] name = "arrayref" version = "0.3.9" @@ -203,9 +194,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "arrayvec" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] name = "async-recursion" @@ -214,19 +205,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 3.0.3", ] [[package]] @@ -252,9 +243,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.17.0" +version = "1.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" dependencies = [ "aws-lc-sys", "zeroize", @@ -262,14 +253,15 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.41.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" dependencies = [ "cc", "cmake", "dunce", "fs_extra", + "pkg-config", ] [[package]] @@ -283,9 +275,9 @@ dependencies = [ "form_urlencoded", "futures-util", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", - "hyper 1.10.1", + "hyper 1.11.0", "hyper-util", "itoa", "matchit", @@ -314,7 +306,7 @@ dependencies = [ "bytes", "futures-core", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "mime", "pin-project-lite", @@ -336,7 +328,7 @@ dependencies = [ "futures-util", "headers", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "mime", "pin-project-lite", @@ -409,16 +401,16 @@ version = "0.72.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cexpr", "clang-sys", "itertools 0.13.0", "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "regex", "rustc-hash", "shlex 1.3.0", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -459,9 +451,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "blake2" @@ -503,9 +495,9 @@ dependencies = [ [[package]] name = "blst" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +checksum = "c20659f9bbee16cbbd2f7393e40ab6309f5a98f76a2eb57a995ec508b72387fe" dependencies = [ "cc", "glob", @@ -515,9 +507,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145" +checksum = "a88b7ea17d208c4193f2c1e6de3c35fe71f98c96982d5ced308bdcc749ff6e1f" dependencies = [ "bytes", "cfg_aliases", @@ -555,9 +547,9 @@ checksum = "64fa3c856b712db6612c019f14756e64e4bcea13337a6b33b696333a9eaa2d06" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" [[package]] name = "byteorder" @@ -567,9 +559,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "bzip2-sys" @@ -592,9 +584,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.65" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e228eec9be7c17ccb640b59b36a5cd805ea2a564a4c5e162c2f659fea30d3b96" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ "find-msvc-tools", "jobserver", @@ -608,7 +600,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom", + "nom 7.1.3", ] [[package]] @@ -619,9 +611,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" @@ -667,9 +659,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" dependencies = [ "clap_builder", "clap_derive", @@ -677,9 +669,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" dependencies = [ "anstream", "anstyle", @@ -689,14 +681,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" dependencies = [ "heck", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 3.0.3", ] [[package]] @@ -771,9 +763,9 @@ dependencies = [ [[package]] name = "console" -version = "0.16.3" +version = "0.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87" +checksum = "4fe5f465a4f6fee88fad41b85d990f84c835335e85b5d9e6e63e0d06d28cba7c" dependencies = [ "encode_unicode", "libc", @@ -944,18 +936,18 @@ checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-channel" -version = "0.5.15" +version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +checksum = "d85363c37faeca707aef026efa9f3b34d077bce547e48f770770625c6013679e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -963,18 +955,18 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.18" +version = "0.9.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crossterm" @@ -982,7 +974,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "crossterm_winapi", "derive_more", "document-features", @@ -1026,9 +1018,9 @@ dependencies = [ [[package]] name = "crypto-common" -version = "0.1.7" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "typenum", @@ -1087,8 +1079,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -1109,9 +1101,9 @@ checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" dependencies = [ "ident_case", "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "strsim", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1121,8 +1113,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -1166,9 +1158,9 @@ dependencies = [ [[package]] name = "der" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" +checksum = "a69dedd701da44b0536442edf09c81a64b0ab97a7a4a5e3d1971f00027cbc63d" dependencies = [ "const-oid 0.10.2", "pem-rfc7468", @@ -1191,20 +1183,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bba95f299f6b9cd47f68a847eca2ae9060a2713af532dc35c342065544845407" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "structmeta 0.3.0", - "syn 2.0.118", -] - -[[package]] -name = "derive_arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" -dependencies = [ - "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1224,9 +1205,9 @@ checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "convert_case", "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "rustc_version", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -1236,7 +1217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", - "crypto-common 0.1.7", + "crypto-common 0.1.6", "subtle", ] @@ -1279,8 +1260,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -1318,11 +1299,11 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" -version = "0.17.0-rc.16" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91bbdd377139884fafcad8dc43a760a3e1e681aa26db910257fa6535b70e1829" +checksum = "c0681a4fc24c767085329728d8dfba959af91228aa4610cca4f8ce317ba46ae0" dependencies = [ - "der 0.8.0", + "der 0.8.1", "digest 0.11.3", "elliptic-curve", "rfc6979", @@ -1357,24 +1338,24 @@ dependencies = [ [[package]] name = "either" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "elliptic-curve" -version = "0.14.0-rc.29" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84043d573efd4ac9d2d125817979a379204bf7e328b25a4a30487e8d100e618" +checksum = "9d65aa39b3a5c1c9c1b745c9a019234bb7a21b77abcb4f4d266d706e2d577d65" dependencies = [ "base16ct", "crypto-bigint", "crypto-common 0.2.2", "digest 0.11.3", + "ff", + "group", "hybrid-array", "rand_core 0.10.1", - "rustcrypto-ff", - "rustcrypto-group", "sec1", "subtle", "zeroize", @@ -1411,8 +1392,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "685adfa4d6f3d765a26bc5dbc936577de9abf756c1feeb3089b01dd395034842" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -1506,9 +1487,19 @@ checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "ff" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f686ab92a9fb0eaf188f6c6c87b89490baa6fdb0db4544ba4dc47f7942489f" +dependencies = [ + "rand_core 0.10.1", + "subtle", +] [[package]] name = "fiat-crypto" @@ -1527,6 +1518,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -1631,9 +1632,9 @@ checksum = "c1fd087255f739f4f1aeea69f11b72f8080e9c2e7645cd06955dad4a178a49e3" [[package]] name = "futures" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -1646,9 +1647,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -1656,15 +1657,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -1673,32 +1674,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-timer" @@ -1708,9 +1709,9 @@ checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -1734,9 +1735,9 @@ dependencies = [ [[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", @@ -1785,9 +1786,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", "rand_core 0.10.1", + "wasm-bindgen", ] [[package]] @@ -1802,7 +1805,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "libgit2-sys", "log", @@ -1810,9 +1813,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "governor" @@ -1831,12 +1834,23 @@ dependencies = [ "parking_lot", "portable-atomic", "quanta", - "rand 0.9.4", + "rand 0.9.5", "smallvec", "spinning_top", "web-time", ] +[[package]] +name = "group" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd1a1c7a5206c5b7a3f5a0d7ccd3ff85d0c8f5133d62a02680255b0004af5f4" +dependencies = [ + "ff", + "rand_core 0.10.1", + "subtle", +] + [[package]] name = "h2" version = "0.4.15" @@ -1906,14 +1920,14 @@ dependencies = [ [[package]] name = "hdrhistogram" -version = "7.5.4" +version = "7.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" +checksum = "f49d1053f4708f0af3cf9fc5bffc7e68a914a3c45becb231c80068c9c3f78bea" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "byteorder", "flate2", - "nom", + "nom 8.0.0", "num-traits", ] @@ -2012,9 +2026,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http 1.3.1", @@ -2022,14 +2036,14 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "pin-project-lite", ] @@ -2053,9 +2067,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +checksum = "15cdd26707701c53297e2fa6afb323d55fbc1d0810c3aec078ae3ef0424c3c15" [[package]] name = "hybrid-array" @@ -2093,9 +2107,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -2103,7 +2117,7 @@ dependencies = [ "futures-core", "h2", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "httparse", "httpdate", "itoa", @@ -2120,7 +2134,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" dependencies = [ "http 1.3.1", - "hyper 1.10.1", + "hyper 1.11.0", "hyper-util", "rustls", "tokio", @@ -2134,7 +2148,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.10.1", + "hyper 1.11.0", "hyper-util", "pin-project-lite", "tokio", @@ -2162,7 +2176,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.10.1", + "hyper 1.11.0", "hyper-util", "native-tls", "tokio", @@ -2181,13 +2195,13 @@ dependencies = [ "futures-channel", "futures-util", "http 1.3.1", - "http-body 1.0.1", - "hyper 1.10.1", + "http-body 1.1.0", + "hyper 1.11.0", "ipnet", "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.4", + "socket2 0.6.5", "system-configuration", "tokio", "tower-service", @@ -2354,9 +2368,9 @@ dependencies = [ [[package]] name = "indicatif" -version = "0.18.4" +version = "0.18.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" +checksum = "9433806cd6b4ec1aba79c021c7e4c58fb4c3b9977c085062e611ac929998fb0c" dependencies = [ "console", "portable-atomic", @@ -2383,8 +2397,8 @@ dependencies = [ "darling", "indoc", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -2454,7 +2468,7 @@ dependencies = [ "jni-sys", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror 2.0.19", "walkdir", "windows-link", ] @@ -2466,10 +2480,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "rustc_version", "simd_cesu8", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -2487,17 +2501,17 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] @@ -2540,14 +2554,16 @@ dependencies = [ [[package]] name = "k256" -version = "0.14.0-rc.8" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2c6c227649d5ec80eaae541f1736232641a0bcdb3062a52b34edb42054158" +checksum = "93f50113171a713f4a4231ef82eb26703607139b35dcb56241f0ceab2ae1f7d8" dependencies = [ "cpubits", "ecdsa", "elliptic-curve", + "primeorder", "sha2 0.11.0", + "wnaf", ] [[package]] @@ -2558,7 +2574,7 @@ checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" dependencies = [ "hashbrown 0.16.1", "portable-atomic", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -2575,15 +2591,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libgit2-sys" -version = "0.18.5+1.9.4" +version = "0.18.7+1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005d6ae6eac1912906073e069f7db60b1fa98e052a68227824afe3e3a1c59ca2" +checksum = "23c7391e4b9f4ffab1a624223cc1d7385ff9a678f490768add717de7ea2f4d89" dependencies = [ "cc", "libc", @@ -2609,9 +2625,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3" +checksum = "c943259e342f1e06ff2da7a83eabdfe7f92ce10262688dbf1895ff0b3e6e4652" dependencies = [ "libc", ] @@ -2648,7 +2664,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -2719,9 +2735,9 @@ dependencies = [ [[package]] name = "lru" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a860605968fce16869fd239cf4237a82f3ac470723415db603b0e8b6c8d4fb9" +checksum = "0b6180140927ee907000b0aa540091f6ea512ead4447c92b8fc35bc72788a5a6" dependencies = [ "hashbrown 0.17.1", ] @@ -2769,9 +2785,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmem" @@ -2866,9 +2882,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", @@ -2898,8 +2914,8 @@ checksum = "25ca3004c2efe9011bd4e461bd8256445052b9615405b4f7ea43fc8ca5c20898" dependencies = [ "cfg-if", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -2931,7 +2947,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -2944,7 +2960,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -2966,6 +2982,15 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + [[package]] name = "nonempty" version = "0.7.0" @@ -2990,9 +3015,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -3011,8 +3036,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -3079,13 +3104,12 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "open" -version = "5.3.5" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" +checksum = "a0b3d059e795d52b8a72fef45658620edd4d9c359b338564aa14391ffa511ed5" dependencies = [ "is-wsl", "libc", - "pathdiff", ] [[package]] @@ -3094,7 +3118,7 @@ version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "foreign-types", "libc", @@ -3109,8 +3133,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -3166,8 +3190,8 @@ checksum = "f5030daf005bface118c096f510ffb781fc28f9ab6a32ab224d8631be6851d30" dependencies = [ "by_address", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -3199,12 +3223,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pathdiff" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" - [[package]] name = "pea2pea" version = "0.49.0" @@ -3252,9 +3270,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.6" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" +checksum = "7df728be843c7070fab6ab7c328c4e9e9d78e23bf749c0669c86ee7ebfa050a2" dependencies = [ "memchr", "ucd-trie", @@ -3262,9 +3280,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.8.6" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f486f1ea21e6c10ed15d5a7c77165d0ee443402f0780849d1768e7d9d6fe77" +checksum = "9e2dd6fc3b26b3462ee188aac870f5a41d398f1cd5e2408d16531bd71c9591fd" dependencies = [ "pest", "pest_generator", @@ -3272,25 +3290,24 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.6" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8040c4647b13b210a963c1ed407c1ff4fdfa01c31d6d2a098218702e6664f94f" +checksum = "6a7a9205cfb6f596a9e8b689c0a15f9ceb7a1aafae7aaf788150ac65b29975b6" dependencies = [ "pest", "pest_meta", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "pest_meta" -version = "2.8.6" +version = "2.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89815c69d36021a140146f26659a81d6c2afa33d216d736dd4be5381a7362220" +checksum = "85abd351c0de1e8384fc791a0737111a350394937e92b956b743dac12429f57c" dependencies = [ "pest", - "sha2 0.10.9", ] [[package]] @@ -3320,7 +3337,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand 0.8.6", + "rand 0.8.7", ] [[package]] @@ -3332,8 +3349,8 @@ dependencies = [ "phf_generator", "phf_shared", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -3361,8 +3378,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -3389,9 +3406,9 @@ checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" [[package]] name = "potential_utf" @@ -3443,11 +3460,36 @@ dependencies = [ "termtree", ] +[[package]] +name = "primefield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c555a6e4eb7d4e158fcb028c835c3b8642206ddc279b5c6b202ef9a8bdb592f4" +dependencies = [ + "crypto-bigint", + "crypto-common 0.2.2", + "ff", + "rand_core 0.10.1", + "subtle", + "zeroize", +] + +[[package]] +name = "primeorder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c9f42978c78a00e3d68f69fc03e57a234debae69da4020a4fb588fcdcd07b06" +dependencies = [ + "elliptic-curve", + "primefield", + "wnaf", +] + [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -3460,10 +3502,10 @@ checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.13.0", + "bitflags 2.13.1", "lazy_static", "num-traits", - "rand 0.8.6", + "rand 0.8.7", "rand_chacha 0.3.1", "rand_xorshift 0.3.0", "regex-syntax 0.8.11", @@ -3491,8 +3533,8 @@ dependencies = [ "anyhow", "itertools 0.14.0", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -3525,15 +3567,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-xml" -version = "0.38.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" -dependencies = [ - "memchr", -] - [[package]] name = "quinn" version = "0.11.11" @@ -3547,8 +3580,8 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.4", - "thiserror 2.0.18", + "socket2 0.6.5", + "thiserror 2.0.19", "tokio", "tracing", "web-time", @@ -3556,21 +3589,22 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.15" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ "aws-lc-rs", "bytes", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.4", + "rand 0.10.2", + "rand_pcg", "ring", "rustc-hash", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror 2.0.19", "tinyvec", "tracing", "web-time", @@ -3578,16 +3612,16 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.4", + "socket2 0.6.5", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -3598,9 +3632,9 @@ checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -3619,9 +3653,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3630,9 +3664,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", @@ -3640,9 +3674,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" dependencies = [ "chacha20", "getrandom 0.4.3", @@ -3710,7 +3744,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d431c2703ccf129de4d45253c03f49ebb22b97d6ad79ee3ecfc7e3f4862c1d8" dependencies = [ "num-traits", - "rand 0.10.1", + "rand 0.10.2", +] + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", ] [[package]] @@ -3753,17 +3796,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "compact_str", "critical-section", "hashbrown 0.17.1", "itertools 0.14.0", "kasuari", - "lru 0.18.0", + "lru 0.18.1", "palette", "serde", "strum", - "thiserror 2.0.18", + "thiserror 2.0.19", "unicode-segmentation", "unicode-truncate", "unicode-width", @@ -3818,7 +3861,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "hashbrown 0.17.1", "indoc", "instability", @@ -3838,7 +3881,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -3867,7 +3910,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -3883,33 +3926,33 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 3.0.3", ] [[package]] name = "regex" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.14", + "regex-automata 0.4.16", "regex-syntax 0.8.11", ] @@ -3924,9 +3967,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -3959,9 +4002,9 @@ dependencies = [ "futures-util", "h2", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", - "hyper 1.10.1", + "hyper 1.11.0", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -3992,12 +4035,12 @@ dependencies = [ [[package]] name = "rfc6979" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5236ce872cac07e0fb3969b0cbf468c7d2f37d432f1b627dcb7b8d34563fb0c3" +checksum = "b4a459cddafb3fe76b31fd8f1108007566c40301feb64dc7b54656eb7388172b" dependencies = [ + "crypto-bigint", "hmac", - "subtle", ] [[package]] @@ -4056,15 +4099,15 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" +checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb" [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -4075,34 +4118,13 @@ dependencies = [ "semver", ] -[[package]] -name = "rustcrypto-ff" -version = "0.14.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2a8adb347447693cd2ba0d218c4b66c62da9b0a5672b17b981e4291ec65ff6" -dependencies = [ - "rand_core 0.10.1", - "subtle", -] - -[[package]] -name = "rustcrypto-group" -version = "0.14.0-rc.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "369f9b61aa45933c062c9f6b5c3c50ab710687eca83dd3802653b140b43f85ed" -dependencies = [ - "rand_core 0.10.1", - "rustcrypto-ff", - "subtle", -] - [[package]] name = "rustix" version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -4115,7 +4137,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -4124,9 +4146,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", "log", @@ -4152,9 +4174,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -4201,9 +4223,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" @@ -4291,7 +4313,7 @@ checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" dependencies = [ "base16ct", "ctutils", - "der 0.8.0", + "der 0.8.1", "hybrid-array", "subtle", "zeroize", @@ -4303,7 +4325,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4333,20 +4355,22 @@ dependencies = [ [[package]] name = "self_update" -version = "0.44.0" +version = "1.0.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e79722b5a505d4ddc77527455a97244e9e8c4c07533ff44cf4421cce7bb6d17" +checksum = "5b7cc0b87814417b0e0697ae582dfc5f614f469fbac9b138e40457d88913187d" dependencies = [ + "either", + "flate2", "http 1.3.1", "indicatif", "log", - "quick-xml", "regex", "reqwest", "self-replace", "semver", "serde", "serde_json", + "tar", "tempfile", "ureq", "urlencoding", @@ -4368,9 +4392,9 @@ checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -4378,29 +4402,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "indexmap 2.14.0", "itoa", @@ -4470,15 +4494,15 @@ checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660" dependencies = [ "darling", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "sha1" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +checksum = "a978451301f4db1d02937a4ab3ccce137717b81826e79b7d49ffe3244a13c3b8" dependencies = [ "cfg-if", "cpufeatures 0.2.17", @@ -4581,15 +4605,15 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -4609,7 +4633,7 @@ checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" dependencies = [ "num-bigint", "num-traits", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", ] @@ -4667,7 +4691,7 @@ dependencies = [ [[package]] name = "snarkos" -version = "4.8.1" +version = "4.9.0" dependencies = [ "built", "clap", @@ -4695,7 +4719,7 @@ dependencies = [ [[package]] name = "snarkos-account" -version = "4.8.1" +version = "4.9.0" dependencies = [ "colored 3.1.1", "snarkvm", @@ -4703,7 +4727,7 @@ dependencies = [ [[package]] name = "snarkos-cli" -version = "4.8.1" +version = "4.9.0" dependencies = [ "aleo-std", "anstyle", @@ -4718,7 +4742,7 @@ dependencies = [ "nix 0.30.1", "num_cpus", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "rlimit", @@ -4736,7 +4760,7 @@ dependencies = [ "snarkvm", "sys-info", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", "tokio", "tracing", @@ -4747,7 +4771,7 @@ dependencies = [ [[package]] name = "snarkos-display" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "crossterm", @@ -4760,7 +4784,7 @@ dependencies = [ [[package]] name = "snarkos-node" -version = "4.8.1" +version = "4.9.0" dependencies = [ "aleo-std", "anyhow", @@ -4778,7 +4802,7 @@ dependencies = [ "parking_lot", "paste", "pea2pea", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "reqwest", "serde_json", @@ -4803,7 +4827,7 @@ dependencies = [ [[package]] name = "snarkos-node-bft" -version = "4.8.1" +version = "4.9.0" dependencies = [ "aleo-std", "anyhow", @@ -4826,7 +4850,7 @@ dependencies = [ "paste", "pea2pea", "proptest", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rand_distr", "rayon", @@ -4857,13 +4881,13 @@ dependencies = [ [[package]] name = "snarkos-node-bft-events" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "bytes", "indexmap 2.14.0", "proptest", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "serde", "snarkos-node-bft-events", @@ -4878,26 +4902,26 @@ dependencies = [ [[package]] name = "snarkos-node-bft-ledger-service" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "async-trait", "indexmap 2.14.0", "locktick", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rayon", "snarkos-node-metrics", "snarkos-utilities", "snarkvm", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", ] [[package]] name = "snarkos-node-bft-storage-service" -version = "4.8.1" +version = "4.9.0" dependencies = [ "aleo-std", "anyhow", @@ -4911,7 +4935,7 @@ dependencies = [ [[package]] name = "snarkos-node-cdn" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "bincode", @@ -4933,7 +4957,7 @@ dependencies = [ [[package]] name = "snarkos-node-consensus" -version = "4.8.1" +version = "4.9.0" dependencies = [ "aleo-std", "anyhow", @@ -4960,7 +4984,7 @@ dependencies = [ [[package]] name = "snarkos-node-metrics" -version = "4.8.1" +version = "4.9.0" dependencies = [ "built", "locktick", @@ -4974,7 +4998,7 @@ dependencies = [ [[package]] name = "snarkos-node-network" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "built", @@ -4985,14 +5009,14 @@ dependencies = [ "snarkos-node-network", "snarkos-node-tcp", "snarkvm", - "socket2 0.6.4", + "socket2 0.6.5", "tokio", "tracing", ] [[package]] name = "snarkos-node-rest" -version = "4.8.1" +version = "4.9.0" dependencies = [ "aleo-std", "anyhow", @@ -5007,7 +5031,7 @@ dependencies = [ "lru 0.16.4", "once_cell", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rayon", "serde", "serde_json", @@ -5028,7 +5052,7 @@ dependencies = [ [[package]] name = "snarkos-node-router" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "async-trait", @@ -5040,7 +5064,7 @@ dependencies = [ "locktick", "parking_lot", "peak_alloc", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "snarkos-account", @@ -5064,7 +5088,7 @@ dependencies = [ [[package]] name = "snarkos-node-router-messages" -version = "4.8.1" +version = "4.9.0" dependencies = [ "bytes", "proptest", @@ -5080,7 +5104,7 @@ dependencies = [ [[package]] name = "snarkos-node-sync" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "futures", @@ -5088,7 +5112,7 @@ dependencies = [ "itertools 0.14.0", "locktick", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "serde", "snarkos-node-bft-ledger-service", "snarkos-node-metrics", @@ -5098,7 +5122,7 @@ dependencies = [ "snarkos-node-sync-locators", "snarkos-node-tcp", "snarkvm", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "tracing-subscriber", @@ -5106,7 +5130,7 @@ dependencies = [ [[package]] name = "snarkos-node-sync-communication-service" -version = "4.8.1" +version = "4.9.0" dependencies = [ "async-trait", "tokio", @@ -5114,7 +5138,7 @@ dependencies = [ [[package]] name = "snarkos-node-sync-locators" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5125,7 +5149,7 @@ dependencies = [ [[package]] name = "snarkos-node-tcp" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "async-trait", @@ -5135,7 +5159,7 @@ dependencies = [ "once_cell", "parking_lot", "snarkos-node-metrics", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tokio-util", "tracing", @@ -5143,7 +5167,7 @@ dependencies = [ [[package]] name = "snarkos-utilities" -version = "4.8.1" +version = "4.9.0" dependencies = [ "anyhow", "locktick", @@ -5154,13 +5178,13 @@ dependencies = [ [[package]] name = "snarkvm" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e35ef2036e93bbfa2342f8c53c134f84d00f4e6cf008c577c88c88f95acdeb9" +checksum = "dea37705e6ba5f11a8da0f61393ba14aa320fcaf9fb410dff835c396ba20283a" dependencies = [ "anyhow", "dotenvy", - "rand 0.10.1", + "rand 0.10.2", "serde_json", "snarkvm-algorithms", "snarkvm-circuit", @@ -5180,9 +5204,9 @@ dependencies = [ [[package]] name = "snarkvm-algorithms" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9324633a2ca8e6c1796d7d8d5a65f21aa03545acc7552db05d5b54ae6895093d" +checksum = "5c2d54fee12c2bb1c58ef9a46be861f4b0b07285046b67918ce8ca61757d9a70" dependencies = [ "aleo-std", "anyhow", @@ -5194,7 +5218,7 @@ dependencies = [ "indexmap 2.14.0", "itertools 0.14.0", "num-traits", - "rand 0.10.1", + "rand 0.10.2", "rayon", "serde", "sha2 0.11.0", @@ -5204,26 +5228,26 @@ dependencies = [ "snarkvm-fields", "snarkvm-parameters", "snarkvm-utilities", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "snarkvm-algorithms-cuda" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d2a4eabeecdeec7d69a5e32a21ec94fad0e1addedf6ed9632f0e096a85929f6" +checksum = "e9e5bbfecfeae202f2be87042979cd898fda3fd31af6fa4a544987a029764373" dependencies = [ "blst", "cc", "sppark", - "which 8.0.4", + "which 8.0.5", ] [[package]] name = "snarkvm-circuit" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3100c3d4a0950ccbfdee58640e3da7e6ea421883f26d89e684ce2acd0a8a8b" +checksum = "2e67a5337192cb95713736c724e4209c82b73c8ca2208033b80efc9d9e0d1dfe" dependencies = [ "snarkvm-circuit-account", "snarkvm-circuit-algorithms", @@ -5236,9 +5260,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-account" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ece1b5d533eb975a4971b1cd113583db4b1503f706f5c000dd4aa29d6adb07" +checksum = "f096425d431e6f3b6bd190756016464cee1627435d043ee1edcd2fd368a96e5d" dependencies = [ "snarkvm-circuit-network", "snarkvm-circuit-types", @@ -5247,9 +5271,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-algorithms" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9ffedabd1d2a20ef1c776174235a460ba5eb92a38ee2ece59b565045371829" +checksum = "3620f97ce1946468e0771bf6f5c2cd4cad53835e65a6369556813e364e61f26e" dependencies = [ "snarkvm-circuit-types", "snarkvm-console-algorithms", @@ -5258,9 +5282,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-collections" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3060cfc0d863fd1d3244b2c722864b5b54b36c1b252c27f285d6e20bdb6147" +checksum = "2eb124eb7120d08fdf493248a1b0a992549b6c3c0d6a5952f7ccd4cfb39f9e88" dependencies = [ "snarkvm-circuit-algorithms", "snarkvm-circuit-types", @@ -5269,14 +5293,14 @@ dependencies = [ [[package]] name = "snarkvm-circuit-environment" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4c7ab151b346df065a7e7eed58ae88f34d81bcd2443957140056a83215d41b" +checksum = "eedb2cc4f93b8ecda8c1f05a4faaac10e55127f0fc09d7749dfc610d4bcbaa0f" dependencies = [ "anyhow", "indexmap 2.14.0", "itertools 0.14.0", - "nom", + "nom 7.1.3", "num-traits", "smallvec", "snarkvm-algorithms", @@ -5285,20 +5309,20 @@ dependencies = [ "snarkvm-curves", "snarkvm-fields", "snarkvm-utilities", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "snarkvm-circuit-environment-witness" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e027011380f20228c56366d578f0a1a768dd93a4199c54676f55b4486101a" +checksum = "a2351fbdbb775fc850617ab0043b1b0033a47a6151b5bf516cc49c3c883b08a3" [[package]] name = "snarkvm-circuit-network" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8f8b926e687ad79726fc5f100fd94296eb409473aed122d3defae3ff8d4d31" +checksum = "292c9506df0d1ec32dd4ef58d52e56716b6ccd3ca4ce4769852afeeb47856b5e" dependencies = [ "snarkvm-circuit-algorithms", "snarkvm-circuit-collections", @@ -5308,9 +5332,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-program" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89218041e04e1fbca9b0dc26cb1124cc03d3c3fe02b83fe578ff9effb3fb59fb" +checksum = "df200abab8279b37fc386fb419e0bcdb83efa8ba291e8d62a893427d7f23d4b1" dependencies = [ "snarkvm-circuit-account", "snarkvm-circuit-algorithms", @@ -5323,9 +5347,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46e31ebf0f2725c9e04a279ae9093858aa2b20eb6c287d3b653d584b638f5540" +checksum = "d2f0060b2c07f80a26b0f9547ef040f47b1c37c6aa5adb1983a19c144e091518" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-address", @@ -5339,9 +5363,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-address" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee5cbebc2b4eb00b690699167cf70ef0dc74da8509c9c0b93368b26d03bcba5" +checksum = "f104b0d3c7637f37d8abeb743c8ba31a518127ce0117b190879e0fac48c933d0" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5353,9 +5377,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-boolean" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf2299aafd7df0695a8a9816d689bbae134227bc5a4d30f9f2f33234d706427" +checksum = "4ad042be95bb0b5c9545ac3a12f9f3fde852f1167481d47d1c13a3aae3cdcdb9" dependencies = [ "snarkvm-circuit-environment", "snarkvm-console-types-boolean", @@ -5363,9 +5387,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-field" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2122f8eaa4eff3dd62d9fffebcb2f455e157d264b45dca12c4be537acb7d5b7c" +checksum = "65d5d37de0ae246a7f734c1d897c4b8eb9f5df7a1fdddf420ac65d3b64a4bcf5" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5374,9 +5398,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-group" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a5e1863624072d61d6a3cc3c1bae47839ff819439f132e574b866a5de9d98" +checksum = "1dcf26d059063dc16a37f3a923583c66899ec13d52a0e86c8fa141d78e776e02" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5387,9 +5411,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-integers" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1fc42313949a3895a5ab91b4ebb5ff02b11bceb41235f82b37c84f8c0ad763" +checksum = "b4d83fd4b20ee4f964bb1c40459d67e0741872f56197898b45df8e86e639926c" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5400,9 +5424,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-scalar" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fb89773ab0afed9ef9042c10c52d6f0b7589bb57e11444135d12d53026617" +checksum = "9a8b1a4e94e49487f02d8b308e03d6c56f50dbb5a1441ad3a74f04f6ba745b4b" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5412,9 +5436,9 @@ dependencies = [ [[package]] name = "snarkvm-circuit-types-string" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3f0b44d842e53af04afceff1629b5945be0e281c92ddb5e72c7ae0c49c3b14" +checksum = "665506fbf883d0aa0b152b06b324a609841742064a88dc9a355753ed90da57d8" dependencies = [ "snarkvm-circuit-environment", "snarkvm-circuit-types-boolean", @@ -5425,9 +5449,9 @@ dependencies = [ [[package]] name = "snarkvm-console" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34c436414e7c2de53f18704a841af7c818101cd87337fd25a4c8bf69b13e741" +checksum = "b611f443daa6140f2c5bbdf5d184567f2b88cf73be5d7160500c3a5d56ca209f" dependencies = [ "snarkvm-console-account", "snarkvm-console-algorithms", @@ -5439,9 +5463,9 @@ dependencies = [ [[package]] name = "snarkvm-console-account" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f15550d188aa870e051b6a40d6868eb01d9367546fbc1c7878c195b4ab8a680e" +checksum = "9adbf603ba5930c02d18bdd748c14418c2bbaf4bf6041f786571d510eac5db21" dependencies = [ "bs58", "snarkvm-console-network", @@ -5451,13 +5475,14 @@ dependencies = [ [[package]] name = "snarkvm-console-algorithms" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25f8b9b2b39d0a9a94afb2e711cb7540f7b58483ebea10a42610582604bad44" +checksum = "bb693083ea8c9d1ed2a71880730b7251410aa45003602c16f89fbcda8b9ba860" dependencies = [ "blake2s_simd", "hex", "k256", + "rayon", "serde", "smallvec", "snarkvm-console-types", @@ -5468,9 +5493,9 @@ dependencies = [ [[package]] name = "snarkvm-console-collections" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa3af2a6ea79048d641561b8fa1522ea2658f7f2e8c0cf2c94a7f126529b786" +checksum = "ad460b844a736bae3f4fadb393313d2c2c7cdbdce3d228d8c339cec387251011" dependencies = [ "aleo-std", "locktick", @@ -5483,9 +5508,9 @@ dependencies = [ [[package]] name = "snarkvm-console-network" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71c4ae1a3511bd3fc8eda645c4090f48b4242bc40f5accc67cf1da5c26393fef" +checksum = "97bc1b423cf6304ab4f35a71b995be7bf9c5429bed1f92578a212c933b161f84" dependencies = [ "anyhow", "enum-iterator", @@ -5504,16 +5529,16 @@ dependencies = [ [[package]] name = "snarkvm-console-network-environment" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9abb04b58b02f1ae1fe308bc89cf8521023bc5836bf00de43dcf927672dc29d5" +checksum = "272b60c9c736f7cc4aec0ad66ff960ddaa575657e4c5fcc6a69207ba60fb19cc" dependencies = [ "anyhow", "bech32", "itertools 0.14.0", - "nom", + "nom 7.1.3", "num-traits", - "rand 0.10.1", + "rand 0.10.2", "serde", "snarkvm-curves", "snarkvm-fields", @@ -5523,9 +5548,9 @@ dependencies = [ [[package]] name = "snarkvm-console-program" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d7a3b00538fd345023f76216b95a40e09521ac30c23eab5e10fccc8bffdbc6c" +checksum = "26501fe0d11bb0601267efb42ca51c495ad86793878a1747cf16ed097b0f1342" dependencies = [ "enum-iterator", "enum_index", @@ -5545,9 +5570,9 @@ dependencies = [ [[package]] name = "snarkvm-console-types" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffef5883feaf28a35cc3576952b13553e4b32817067c44ca458459650929d09d" +checksum = "da6c236d32f2f37b430d4d6ef134ff9395cb35f16c8af6bd4e0fb388ae1195f7" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-address", @@ -5561,9 +5586,9 @@ dependencies = [ [[package]] name = "snarkvm-console-types-address" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbc8bb7d753d9cb569ee0c451793d1aa3150055fd04b19d2f1afd2ed0d9eb025" +checksum = "59ee19a161735abffdea99051ed7200c0fae13201ab57dc2f375a9403bd1bb11" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5573,18 +5598,18 @@ dependencies = [ [[package]] name = "snarkvm-console-types-boolean" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32fb594e3b6260d237b41b160d5522a5d7e8faf845066db906c7340779c4d850" +checksum = "649f21d68e74d94c28936fd01b53e2acd7d26c31d01a894497bbf6f41b05c4bd" dependencies = [ "snarkvm-console-network-environment", ] [[package]] name = "snarkvm-console-types-field" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d3e36c42202308bbf81a605670e3417f4c04817954026c6f3de273e091cebac" +checksum = "4a004d12492258c3e6e9847d8b6b2462c3c03721c5f643c338a93f08f97ef3ad" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5593,9 +5618,9 @@ dependencies = [ [[package]] name = "snarkvm-console-types-group" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d042f829548154d28bef6af8dd00bbb731cc350c72a133db52ab7e0365687f3" +checksum = "977fcf939d3d2f1398d041ede04dd1ed4eed82febc6ea91e41e0ef26d1a11b01" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5605,9 +5630,9 @@ dependencies = [ [[package]] name = "snarkvm-console-types-integers" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bfc35c8b39c6688edcbeed60172e43a6a07e6676b06343901b5e306e7579e07" +checksum = "1ceaca4e72d54890d115a05d3798c5d3d8e785aedf471cb5d47aa80ac3a7169b" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5617,9 +5642,9 @@ dependencies = [ [[package]] name = "snarkvm-console-types-scalar" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "704c2654e977afdc9682e2a4967f6cd7ee24019cb80744cc80c0e6df70508265" +checksum = "50234ae5b7cbeb042d5c768d821c555b649df36f3c0bbf5d2d053639a67274b0" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5629,9 +5654,9 @@ dependencies = [ [[package]] name = "snarkvm-console-types-string" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c846bbc6076b0ce20e8fb1198a04743ef342a7d57e1845d142627abef396702b" +checksum = "33b42f0e1b1730ab805ba02c4a2f30a31bdd62600301d23913399675aa896346" dependencies = [ "snarkvm-console-network-environment", "snarkvm-console-types-boolean", @@ -5641,41 +5666,41 @@ dependencies = [ [[package]] name = "snarkvm-curves" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884289cd786abe0e31e97fcf9c4dbc6cc988cd47da8ec3854e4f061af1f1e325" +checksum = "2c7e845865d40b36069fa76ef88a9e78f7f9c33f64c4e19f7cfd601922fab702" dependencies = [ - "rand 0.10.1", + "rand 0.10.2", "rustc_version", "serde", "snarkvm-fields", "snarkvm-utilities", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "snarkvm-fields" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c322a2c9b7222e7d0fed1559a5a5104b272b364eebec31499b1b3aba00c95c" +checksum = "4121086d60733b44bba6a7cb56c8b740d38257326bc86bc74ec96b92b6952c47" dependencies = [ "aleo-std", "anyhow", "itertools 0.14.0", "num-traits", - "rand 0.10.1", + "rand 0.10.2", "rayon", "serde", "snarkvm-utilities", - "thiserror 2.0.18", + "thiserror 2.0.19", "zeroize", ] [[package]] name = "snarkvm-ledger" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b77772aded094332fab5fe488bc0280f2f94e78aeea2b87fcf2be0cb49444ed" +checksum = "1e8509cbe5ca45ce545db05a3fb706422770c01515f2f92065faaf7b10a30a52" dependencies = [ "aleo-std", "anyhow", @@ -5684,7 +5709,7 @@ dependencies = [ "locktick", "lru 0.16.4", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "snarkvm-circuit", @@ -5700,19 +5725,19 @@ dependencies = [ "snarkvm-synthesizer", "snarkvm-synthesizer-error", "snarkvm-utilities", - "thiserror 2.0.18", + "thiserror 2.0.19", "time", "tracing", ] [[package]] name = "snarkvm-ledger-authority" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb5d31f0e2a414aa8c2f40e4d80ebacde351adda4171b7dcd68b0cbe8ca10b0" +checksum = "8e32462f86a9cb94444976c434c527ed5b10759d434e03f1196c3b02a2823b53" dependencies = [ "anyhow", - "rand 0.10.1", + "rand 0.10.2", "serde_json", "snarkvm-console", "snarkvm-ledger-narwhal-subdag", @@ -5720,9 +5745,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-block" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "108da50438afee00396cb2c48419662ec2da8e771ec3a9f1a5b1ae794be98725" +checksum = "23a29e2ba2899708c5ed75c38fa240b90ef1c93b09666d294f7d70d7f0fd6c7d" dependencies = [ "anyhow", "indexmap 2.14.0", @@ -5745,14 +5770,14 @@ dependencies = [ [[package]] name = "snarkvm-ledger-committee" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77dbf03fcfd0fa38bed6bc0cb9816fbb51d343db23346e56462c6c43c3e0083" +checksum = "6c6eb6a7fde1b507454297556a66db81423201d351e1806c13408ee94cde0889" dependencies = [ "anyhow", "indexmap 2.14.0", "proptest", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rand_distr", "rayon", @@ -5765,9 +5790,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f82a9d27b7bad806115fa1dddaf043c1e168d8d4bc54fead73f98a472b4419" +checksum = "4e5c565c1efc362a10db86b29a3c1337ecb66a028b3e1d6b8ff2318640e4233b" dependencies = [ "snarkvm-ledger-narwhal-batch-certificate", "snarkvm-ledger-narwhal-batch-header", @@ -5779,9 +5804,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-batch-certificate" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da425de42fdf84271ac1268d68ddd8d4f6bfc46b2804d754d8aee7fea46938cf" +checksum = "f2239748ed6c1259ccc2ee221a2efc0c7567f9c4e7cacf5d3580a6423bbe5438" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5793,9 +5818,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-batch-header" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f15ab0b561a2a882c95cd961f7fdaf4370cbf8d0590a726a9e6cf8c4ba8b4f5" +checksum = "685d70bba106e3dc276e7a056542b5f0682ba192bba9afde47c2c0cd55655fc7" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5806,9 +5831,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-data" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15656c4a89d7ab71d1883ad16e62148c82b30f335af8a25146ad3a6db4d5703" +checksum = "2d8111c3baf730cb815b594fccefab73d52a7621e99a65c6298f98e9248db7a4" dependencies = [ "bytes", "serde_json", @@ -5818,9 +5843,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-subdag" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4200e2f5f7a4312673123650a508148977e3d3695e49df84cc7a8420c428f5be" +checksum = "dc4e3831d8473ea7f5239f69a417c6bfc7d7a7531c544957b1ea94d9a7c75cc7" dependencies = [ "indexmap 2.14.0", "rayon", @@ -5834,9 +5859,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-transmission" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133fa30f6a0c37cb027361b7630216f501bee08fd7a616b5a431afebaa52f798" +checksum = "46c2f87d46761bf5408f08f81c9a55adc09f84b58121344d892363efd3f246c9" dependencies = [ "bytes", "serde_json", @@ -5848,9 +5873,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-narwhal-transmission-id" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721fe467857f3f85aed85958a72fd3ddf333c1aa60bc8fca2c0770e1915682c6" +checksum = "47c7159701d1dc29c891bcfff338471fb1c331923a85338650c499a42dff52dd" dependencies = [ "snarkvm-console", "snarkvm-ledger-puzzle", @@ -5858,9 +5883,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-puzzle" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df3fdd09d494e649609f066155792e81ce57c218af0d250c3af963e878bdf2e" +checksum = "270240b6d6f04754b6d5fd22db59448b14a80fff11d92ffb897edaa169f58f08" dependencies = [ "aleo-std", "anyhow", @@ -5869,7 +5894,7 @@ dependencies = [ "locktick", "lru 0.16.4", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "serde_json", @@ -5880,9 +5905,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-puzzle-epoch" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75d413a7b9eeecd59bfbfe088fa9177cdc0aea2004e66be4acd7d66314d3af91" +checksum = "a3192db98219ba7abc3a11542c882a481efc3061973c38983aa67416e5d011a0" dependencies = [ "aleo-std", "anyhow", @@ -5891,7 +5916,7 @@ dependencies = [ "locktick", "lru 0.16.4", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "snarkvm-circuit", @@ -5904,9 +5929,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-query" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f83e392b4439236341c4a376246fa4cf5fb8ca368f69f09aceab04dfa515f7f8" +checksum = "61045a320a7fb64e43ecf3aa588277f0d7a9e5803c55d5e1b4d9bb6dea953fb2" dependencies = [ "anyhow", "async-trait", @@ -5922,9 +5947,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-store" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f780376da38c5efbdcf137a05d96d3cf492b87d30f3d8a5c7eecf8c48273273b" +checksum = "a8dd8b8f01f14ef8683ec7ac8eaa23a18d78f7f7f93bc697c82df1eecdbc6a4b" dependencies = [ "aleo-std-storage", "anyhow", @@ -5952,9 +5977,9 @@ dependencies = [ [[package]] name = "snarkvm-ledger-test-helpers" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "742cb88ef877f5e2d8a89ec464f524225ce98af2ba2bff14bca227c615793424" +checksum = "5013b0531bdf09281334d9ba4d02e738809054b1fa98add30973ba70d4799634" dependencies = [ "aleo-std", "anyhow", @@ -5971,18 +5996,18 @@ dependencies = [ [[package]] name = "snarkvm-metrics" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3557fc86df87477d75d1ec242331d419e6cdb32b0903abc4682ee81a4df92156" +checksum = "9b344c526b425d969737e5ddc13e505e447333834c76730d9ab9b9e8978e15c2" dependencies = [ "metrics", ] [[package]] name = "snarkvm-parameters" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6560dfd95e2963b86baae31222609cb7e5fcc734dbfbf5993559c56a6c6fa51" +checksum = "3199f958582fccc99b949b8f8ba9c5da993f54d5281a62620fca7c25686e1465" dependencies = [ "aleo-std", "anyhow", @@ -5993,44 +6018,44 @@ dependencies = [ "locktick", "parking_lot", "paste", - "rand 0.10.1", + "rand 0.10.2", "serde_json", "sha2 0.11.0", "snarkvm-curves", "snarkvm-utilities", - "thiserror 2.0.18", + "thiserror 2.0.19", "ureq", ] [[package]] name = "snarkvm-slipstream-plugin-interface" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a901fe3af04cc7ada125c5232a3d05bfa745b087ca0618c475182234a72f6c" +checksum = "eb1e149ae777ba08668697a8d2b6958e1357a3d06a0dad71c8df825a85db0fa7" dependencies = [ "anyhow", ] [[package]] name = "snarkvm-slipstream-plugin-manager" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b938d68017db78a5244f5e9e0caf5b923aaf1e63e8c863e4b94718582340d103" +checksum = "59035a93576fc397540196e2e0ead9343e7d45125a01a2c930dc72e7fd0ecc63" dependencies = [ "anyhow", "json5", "libloading", "serde_json", "snarkvm-slipstream-plugin-interface", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", ] [[package]] name = "snarkvm-synthesizer" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "800fd59b4942e3ad2d06982f8f531a80706ca0fdd72f92a1e255cf47747dac20" +checksum = "7224e637c7c9816bee7d3b2b844b558810fc716267d06fec1c08b9fda2696750" dependencies = [ "aleo-std", "anyhow", @@ -6039,7 +6064,7 @@ dependencies = [ "locktick", "lru 0.16.4", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rayon", "serde_json", "snarkvm-algorithms", @@ -6065,22 +6090,22 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-error" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052014a8b414daaf1c4ba5582e9ddf8505b2c28ea8c09affd7c4b75a3bbfdcda" +checksum = "846083cbef396e56e9df9fdfe6cb5382c1cc2404cc83b498a1cf2d7c2fd2e860" dependencies = [ "anyhow", "snarkvm-circuit-environment", "snarkvm-console-network", "snarkvm-console-program", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "snarkvm-synthesizer-process" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26e0212359bcc226fa24019d24be728e414b00d5846218129adcb8d4ff74ae78" +checksum = "b55f65479f0c1ab873f6e941b08cc027a0f92b40c6815cb116c793d7910bd7b1" dependencies = [ "aleo-std", "colored 3.1.1", @@ -6088,7 +6113,7 @@ dependencies = [ "itertools 0.14.0", "locktick", "parking_lot", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "serde_json", @@ -6106,14 +6131,14 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-program" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14344567bdaac5d8aaa82e1e1fc458e448ec53f59b62d7c6808bfe60e39981c0" +checksum = "d568a98d96a400b4da9057a53c3f6f557c16d4533181a72e0e1d0e1e29e76c11" dependencies = [ "enum-iterator", "indexmap 2.14.0", "paste", - "rand 0.10.1", + "rand 0.10.2", "rand_chacha 0.10.0", "rayon", "serde_json", @@ -6128,9 +6153,9 @@ dependencies = [ [[package]] name = "snarkvm-synthesizer-snark" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71052ce457f0ec7fefae8d3fb07b21a0cc3007c0956f6cd2a3b247113c393dc3" +checksum = "82a0ab870d9ced282db29593e69021ccd4f11edc67580e35530daac2ac054444" dependencies = [ "bincode", "serde_json", @@ -6142,9 +6167,9 @@ dependencies = [ [[package]] name = "snarkvm-utilities" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee1c9ddbc365e6575e3991bf191d8c0c42d9e55ba3963e7819ef047d77462e25" +checksum = "01620a5549a87084e24478a253d98965277f4d963e14b462ad7eb57f698b6081" dependencies = [ "aleo-std", "anyhow", @@ -6152,27 +6177,27 @@ dependencies = [ "colored 3.1.1", "num-bigint", "num_cpus", - "rand 0.10.1", + "rand 0.10.2", "rand_xorshift 0.5.0", "rayon", "serde", "serde_json", "smol_str 0.2.2", "snarkvm-utilities-derives", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "zeroize", ] [[package]] name = "snarkvm-utilities-derives" -version = "4.8.1" +version = "4.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a757dd7c952d69e6385cd0621c5c8ee7d4ab874f3ddc34b62a8d6bbfc56ae9ce" +checksum = "e3e90f015f504dc18b7faecc6e2056b90178af6511d4b15e412e76826635eedb" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6187,9 +6212,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -6260,9 +6285,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ad9e09554f0456d67a69c1584c9798ba733a5b50349a6c0d0948710523922d" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "structmeta-derive 0.2.0", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6272,9 +6297,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "structmeta-derive 0.3.0", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6284,8 +6309,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6295,8 +6320,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6316,8 +6341,8 @@ checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6344,18 +6369,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote 1.0.47", "unicode-ident", ] [[package]] name = "syn" -version = "2.0.118" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "unicode-ident", ] @@ -6384,8 +6420,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6404,7 +6440,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -6419,6 +6455,17 @@ dependencies = [ "libc", ] +[[package]] +name = "tar" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +dependencies = [ + "filetime", + "libc", + "xattr", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -6438,7 +6485,7 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9048a889effe34a5cddee0af7f53285198b16dca3be510858d38dfdb3e62a04e" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "parking_lot", "rustix 1.1.4", "signal-hook", @@ -6452,7 +6499,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4ea810f0692f9f51b382fff5893887bb4580f5fa246fde546e0b13e7fcee662" dependencies = [ "fnv", - "nom", + "nom 7.1.3", "phf", "phf_codegen", ] @@ -6480,7 +6527,7 @@ checksum = "4676b37242ccbd1aabf56edb093a4827dc49086c0ffd764a5705899e0f35f8f7" dependencies = [ "anyhow", "base64 0.22.1", - "bitflags 2.13.0", + "bitflags 2.13.1", "fancy-regex", "filedescriptor", "finl_unicode", @@ -6532,8 +6579,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c26ef8b00e4d382e59f6a8ddb3cd790b3a5bb29f21a358a9a69ea2f29f13f27b" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6542,7 +6589,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "944ad38adcbb71eaa682c56bceeb079e4ca82b4b3edc2a0fde5cb297b77dac8d" dependencies = [ - "syn 2.0.118", + "syn 2.0.119", "test-log-core", ] @@ -6553,9 +6600,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8361c808554228ad09bfed70f5c823caf8a3450b6881cc3a38eb57e8c08c1d9" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "structmeta 0.2.0", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6566,9 +6613,9 @@ checksum = "8f7fd1eb9efb36942b85a290c4201d317980fe09bc88d34dd48aaaae03075c6a" dependencies = [ "derive-ex", "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "structmeta 0.3.0", - "syn 2.0.118", + "syn 2.0.119", ] [[package]] @@ -6582,11 +6629,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.19", ] [[package]] @@ -6596,26 +6643,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 3.0.3", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] @@ -6651,11 +6698,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.51" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" +checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" dependencies = [ "deranged", + "js-sys", "libc", "num-conv", "num_threads", @@ -6673,9 +6721,9 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.30" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", @@ -6702,9 +6750,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -6717,9 +6765,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -6727,7 +6775,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.4", + "socket2 0.6.5", "tokio-macros", "tracing", "windows-sys 0.61.2", @@ -6735,13 +6783,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -6766,9 +6814,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70" +checksum = "a3d06f0b082ba57c26b79407372e57cf2a1e28124f78e9479fe80322cf53420b" dependencies = [ "futures-core", "pin-project-lite", @@ -6788,13 +6836,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] @@ -6838,14 +6887,14 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tonic" @@ -6859,14 +6908,14 @@ dependencies = [ "bytes", "h2", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", - "hyper 1.10.1", + "hyper 1.11.0", "hyper-timeout", "hyper-util", "percent-encoding", "pin-project", - "socket2 0.6.4", + "socket2 0.6.5", "sync_wrapper", "tokio", "tokio-stream", @@ -6912,12 +6961,12 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "futures-core", "futures-util", "http 1.3.1", - "http-body 1.0.1", + "http-body 1.1.0", "http-body-util", "http-range-header", "httpdate", @@ -6957,7 +7006,7 @@ dependencies = [ "governor", "http 1.3.1", "pin-project", - "thiserror 2.0.18", + "thiserror 2.0.19", "tower", "tracing", ] @@ -6981,8 +7030,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -7041,8 +7090,8 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad06847b7afb65c7866a36664b75c40b895e318cea4f71299f013fb22965329d" dependencies = [ - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -7061,6 +7110,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "typed-path" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e" + [[package]] name = "typenum" version = "1.20.1" @@ -7140,7 +7195,7 @@ checksum = "dea7109cdcd5864d4eeb1b58a1648dc9bf520360d7af16ec26d0a9354bafcfc0" dependencies = [ "base64 0.22.1", "cookie_store", - "der 0.8.0", + "der 0.8.1", "encoding_rs", "flate2", "log", @@ -7207,9 +7262,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.4" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "atomic", "getrandom 0.4.3", @@ -7316,7 +7371,7 @@ version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" dependencies = [ - "quote 1.0.46", + "quote 1.0.47", "wasm-bindgen-macro-support", ] @@ -7328,8 +7383,8 @@ checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" dependencies = [ "bumpalo", "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", "wasm-bindgen-shared", ] @@ -7364,18 +7419,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] @@ -7435,7 +7490,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c0cf2d539c645b448eaffec9ec494b8b19bd5077d9e58cb1ae7efece8d575b" dependencies = [ "proc-macro2", - "quote 1.0.46", + "quote 1.0.47", "syn 1.0.109", ] @@ -7466,9 +7521,9 @@ dependencies = [ [[package]] name = "which" -version = "8.0.4" +version = "8.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d7cd18d4acb58fb3cdfe9ea54e6cd96a4e7d4cc45c56338b236e82dad47248" +checksum = "8f3ef584124b911bcc3875c2f1472e80f24361ceb789bd1c62b3e9a3df9ff43c" dependencies = [ "libc", ] @@ -7524,8 +7579,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -7535,8 +7590,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -7580,7 +7635,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -7589,16 +7644,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", + "windows-targets", ] [[package]] @@ -7616,31 +7662,14 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "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", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -7649,96 +7678,48 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winnow" version = "0.7.15" @@ -7747,9 +7728,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" [[package]] name = "wit-bindgen" @@ -7757,12 +7738,33 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" +[[package]] +name = "wnaf" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab12e7090f27e2ffd9322651492942d50c2926094af30601e1964337db39daf1" +dependencies = [ + "ff", + "group", + "hybrid-array", +] + [[package]] name = "writeable" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix 1.1.4", +] + [[package]] name = "yoke" version = "0.8.3" @@ -7781,29 +7783,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.52" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.52" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -7822,8 +7824,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", "synstructure", ] @@ -7843,8 +7845,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] @@ -7876,46 +7878,47 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", - "quote 1.0.46", - "syn 2.0.118", + "quote 1.0.47", + "syn 2.0.119", ] [[package]] name = "zip" -version = "6.0.0" +version = "8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" +checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b" dependencies = [ - "arbitrary", "crc32fast", "flate2", "indexmap 2.14.0", "memchr", "time", + "typed-path", "zopfli", ] [[package]] name = "zipsign-api" -version = "0.1.5" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba6063ff82cdbd9a765add16d369abe81e520f836054e997c2db217ceca40c0" +checksum = "32a55ebb27e67d9a9d116dd3a19637ee8cc0570c8ef816fb504c453f15448c99" dependencies = [ + "base64 0.22.1", "ed25519-dalek", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "zlib-rs" -version = "0.6.4" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977347db8caa080403f6b6b7c1cda9479a8e869316f7e13a59b19076a40f94e3" +checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zopfli" diff --git a/Cargo.toml b/Cargo.toml index 083325ebdd..fda7bc6703 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A decentralized operating system" homepage = "https://aleo.org" @@ -48,8 +48,8 @@ default-features = false [workspace.dependencies.snarkvm] #path = "../snarkVM" #git = "https://github.com/ProvableHQ/snarkVM.git" -#rev = "d071e78" -version = "=4.8.1" +#rev = "8902106cc" +version = "=4.9.0" [workspace.dependencies.anyhow] version = "1.0" @@ -185,84 +185,84 @@ version = "0.2" [workspace.dependencies.snarkos-account] path = "account" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-cli] path = "cli" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-display] path = "display" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node] path = "node" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-bft] path = "node/bft" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-bft-events] path = "node/bft/events" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-bft-storage-service] path = "node/bft/storage-service" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-bft-ledger-service] path = "node/bft/ledger-service" -version = "=4.8.1" +version = "=4.9.0" default-features = false [workspace.dependencies.snarkos-node-consensus] path = "node/consensus" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-cdn] path = "node/cdn" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-metrics] path = "node/metrics" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-network] path = "node/network" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-router] path = "node/router" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-router-messages] path = "node/router/messages" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-rest] path = "node/rest" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-sync] path = "node/sync" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-sync-communication-service] path = "node/sync/communication-service" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-sync-locators] path = "node/sync/locators" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-node-tcp] path = "node/tcp" -version = "=4.8.1" +version = "=4.9.0" [workspace.dependencies.snarkos-utilities] path = "utilities" -version = "=4.8.1" +version = "=4.9.0" [[bin]] name = "snarkos" @@ -364,12 +364,11 @@ tikv-jemallocator = "0.6" [dependencies.tracing] workspace = true -# Pinned to =0.14.0-rc.29 because k256 v0.14.0-rc.8 does not implement the -# MulVartime/MulByGeneratorVartime traits added in elliptic-curve v0.14.0-rc.31. +# Pinned to =0.14.1 because k256 v0.14.0 requires it. # Adding this as a direct dependency forces cargo to resolve the exact version -# and prevents automatic upgrades to incompatible RC releases. +# and prevents automatic upgrades to incompatible releases. [dependencies.elliptic-curve] -version = "=0.14.0-rc.29" +version = "=0.14.1" default-features = false # Pinned alongside elliptic-curve to avoid resolving yanked crypto-bigint releases. diff --git a/README.md b/README.md index d7556dbab6..4e97c8a429 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@

-## Table of Contents +## Table of Contents * [1. Overview](#1-overview) * [2. Build Guide](#2-build-guide) diff --git a/account/Cargo.toml b/account/Cargo.toml index b8e70b03f3..382becbe69 100644 --- a/account/Cargo.toml +++ b/account/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-account" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Account for a decentralized operating system" homepage = "https://aleo.org" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 3b043315ce..cafbcd52c7 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-cli" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Command-line interface for snarkOS" homepage = "https://aleo.org" @@ -106,7 +106,7 @@ workspace = true version = "7.4.0" [dependencies.self_update] -version = "0.44" +version = "1.0.0-rc.6" features = [ "archive-zip", "compression-zip-deflate" ] [dependencies.serde] diff --git a/cli/src/commands/start.rs b/cli/src/commands/start.rs index 4b23e4abd0..b78fd9421c 100644 --- a/cli/src/commands/start.rs +++ b/cli/src/commands/start.rs @@ -341,7 +341,7 @@ impl Start { // Periodically check if the number of file descriptors isn't becoming insufficient. #[cfg(unix)] - crate::helpers::spawn_fd_monitor(); + let fd_check_handle = crate::helpers::spawn_fd_monitor(); // Clone the configurations. let mut self_ = self.clone(); @@ -360,6 +360,9 @@ impl Start { _ => panic!("Invalid network ID specified"), }; + #[cfg(unix)] + fd_check_handle.abort(); + Ok(String::new()) }) } diff --git a/cli/src/commands/update.rs b/cli/src/commands/update.rs index 1b9d85f0da..92f81c190b 100644 --- a/cli/src/commands/update.rs +++ b/cli/src/commands/update.rs @@ -45,9 +45,9 @@ impl Update { if !self.quiet { match result { Ok(status) => { - if status.uptodate() { + if status.is_up_to_date() { Ok("\nsnarkOS is already on the latest version".to_string()) - } else if status.updated() { + } else if status.is_updated() { Ok(format!("\nsnarkOS has updated to version {}", status.version())) } else { Ok(String::new()) diff --git a/cli/src/helpers/fd_check.rs b/cli/src/helpers/fd_check.rs index 6be577444a..2adf46d7c0 100644 --- a/cli/src/helpers/fd_check.rs +++ b/cli/src/helpers/fd_check.rs @@ -15,7 +15,10 @@ use std::io; -use tokio::time::{Duration, MissedTickBehavior, interval}; +use tokio::{ + task, + time::{Duration, MissedTickBehavior, interval}, +}; use tracing::*; /// Node-scale fd use. @@ -129,7 +132,7 @@ pub fn system_fd_usage() -> std::io::Result { Ok(SystemFd { allocated: read(cur_oid)?, max: read(max_oid)? }) } -pub fn spawn_fd_monitor() { +pub fn spawn_fd_monitor() -> task::JoinHandle<()> { tokio::spawn(async move { let mut tick = interval(Duration::from_secs(30)); tick.set_missed_tick_behavior(MissedTickBehavior::Skip); @@ -193,5 +196,5 @@ pub fn spawn_fd_monitor() { Err(e) => error!(error = %e, "system fd probe failed"), } } - }); + }) } diff --git a/cli/src/helpers/updater.rs b/cli/src/helpers/updater.rs index d10bdf733f..fac5498c23 100644 --- a/cli/src/helpers/updater.rs +++ b/cli/src/helpers/updater.rs @@ -14,7 +14,7 @@ // limitations under the License. use colored::Colorize; -use self_update::{Status, backends::github, version::bump_is_greater}; +use self_update::{UpdateConfig, VersionStatus, backends::github, version::bump_is_greater}; use std::fmt::Write; pub struct Updater; @@ -34,13 +34,13 @@ impl Updater { let mut output = "List of available versions\n".to_string(); for release in releases { - let _ = writeln!(output, " * {}", release.version); + let _ = writeln!(output, " * {}", release.version()); } Ok(output) } /// Update `snarkOS` to the specified release. - pub fn update_to_release(show_output: bool, version: Option) -> Result { + pub fn update_to_release(show_output: bool, version: Option) -> Result { let mut update_builder = github::Update::configure(); update_builder @@ -54,7 +54,7 @@ impl Updater { let status = match version { None => update_builder.build()?.update()?, - Some(v) => update_builder.target_version_tag(&v).build()?.update()?, + Some(v) => update_builder.release_tag(&v).build()?.update()?, }; Ok(status) @@ -69,13 +69,16 @@ impl Updater { .current_version(env!("SNARKOS_VERSION")) .build()?; - let current_version = updater.current_version(); - let latest_release = updater.get_latest_release()?; + let current_version = updater.current_version().to_string(); + let latest_releases = updater.get_latest_release()?; + let latest_release = latest_releases + .latest() + .ok_or_else(|| UpdaterError::Crate("self_update", "no releases found".to_string()))?; - if bump_is_greater(¤t_version, &latest_release.version)? { - Ok(latest_release.version) + if bump_is_greater(¤t_version, latest_release.version())? { + Ok(latest_release.version().to_string()) } else { - Err(UpdaterError::OldReleaseVersion(current_version, latest_release.version)) + Err(UpdaterError::OldReleaseVersion(current_version, latest_release.version().to_string())) } } diff --git a/display/Cargo.toml b/display/Cargo.toml index a48bc5b40a..3c9d257f44 100644 --- a/display/Cargo.toml +++ b/display/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-display" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A display for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/Cargo.toml b/node/Cargo.toml index b2eb1655b6..d6ce99db46 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A node for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/bft/Cargo.toml b/node/bft/Cargo.toml index e177f63d94..40869a199a 100644 --- a/node/bft/Cargo.toml +++ b/node/bft/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-bft" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A memory pool for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/bft/events/Cargo.toml b/node/bft/events/Cargo.toml index 807232409c..c396ea3f67 100644 --- a/node/bft/events/Cargo.toml +++ b/node/bft/events/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-bft-events" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Events for the gateway in a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/bft/ledger-service/Cargo.toml b/node/bft/ledger-service/Cargo.toml index 98a7901a97..a715f365ff 100644 --- a/node/bft/ledger-service/Cargo.toml +++ b/node/bft/ledger-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-bft-ledger-service" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A ledger service for the memory pool in a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/bft/src/gateway.rs b/node/bft/src/gateway.rs index 9ba9a0fc24..f4166210fe 100644 --- a/node/bft/src/gateway.rs +++ b/node/bft/src/gateway.rs @@ -682,7 +682,15 @@ impl Gateway { debug!("{}", flatten_error(err)); Ok(true) } - Err(err) if err.is_invalid_consensus_version() => { + Err(err) if err.is_consensus_version_ahead() => { + let err: anyhow::Error = err.into(); + let err = err.context(format!( + "Peer sent a block response with a newer consensus version '{peer_ip}'" + )); + warn!("{}", flatten_error(&err)); + Ok(true) + } + Err(err) if err.is_consensus_version_behind() => { let err: anyhow::Error = err.into(); let err = err.context(format!("Peer sent an invalid block response '{peer_ip}'")); @@ -1076,7 +1084,7 @@ impl Gateway { .collect(); if !handles.is_empty() { - info!("Reconnnecting to {} out of {} trusted validators", handles.len(), trusted_peers.len()); + info!("Reconnecting to {} out of {} trusted validators", handles.len(), trusted_peers.len()); } } @@ -1492,7 +1500,24 @@ impl Handshake for Gateway { NodeType::Validator }; - if let Some(peer) = self.peer_pool.write().get_mut(&addr) { + let mut peer_pool = self.peer_pool.write(); + + // Validators may change their listening address, but not the Aleo address; traverse + // the peer pool, and retain previously connected (the prior Aleo address is known) + // candidate peers with the same Aleo address only if their listening address is the + // same; otherwise, it may be concluded that a known validator has changed their + // listening address, and thus the old entry should be removed as outdated. + peer_pool.retain(|_, peer| { + if let Peer::Candidate(peer) = peer + && let Some(old_aleo_addr) = peer.last_known_aleo_addr + { + old_aleo_addr != cr.address || peer.listener_addr == addr + } else { + true + } + }); + + if let Some(peer) = peer_pool.get_mut(&addr) { self.resolver.write().insert_peer(addr, peer_addr, Some(cr.address)); peer.upgrade_to_connected( peer_addr, diff --git a/node/bft/src/helpers/storage.rs b/node/bft/src/helpers/storage.rs index 957a02f87d..b140beba8c 100644 --- a/node/bft/src/helpers/storage.rs +++ b/node/bft/src/helpers/storage.rs @@ -505,7 +505,12 @@ impl Storage { bail!("Missing certificates for the previous round {previous_round} in storage {gc_log}") } // Ensure the number of previous certificate IDs is at or below the number of committee members. - if batch_header.previous_certificate_ids().len() > previous_committee_lookback.num_members() { + // As for the `test_network` clause, a more robust approach would be to set the + // previous_committee_lookback appropriately when dev-on-prod is activated, or to only skip this + // check right at the hotswap height. + if !cfg!(feature = "test_network") + && batch_header.previous_certificate_ids().len() > previous_committee_lookback.num_members() + { bail!("Too many previous certificates for round {round} {gc_log}") } // Initialize a set of the previous authors. diff --git a/node/bft/storage-service/Cargo.toml b/node/bft/storage-service/Cargo.toml index 41b2268d93..ce3ca50682 100644 --- a/node/bft/storage-service/Cargo.toml +++ b/node/bft/storage-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-bft-storage-service" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A storage service for the memory pool in a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/cdn/Cargo.toml b/node/cdn/Cargo.toml index e5ebced9dc..4691aaad24 100644 --- a/node/cdn/Cargo.toml +++ b/node/cdn/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-cdn" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A CDN client for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/consensus/Cargo.toml b/node/consensus/Cargo.toml index 749e8a67e6..5dc22e2f1d 100644 --- a/node/consensus/Cargo.toml +++ b/node/consensus/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-consensus" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A node consensus for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/metrics/Cargo.toml b/node/metrics/Cargo.toml index 7a2c53f43c..e156ac0fc2 100644 --- a/node/metrics/Cargo.toml +++ b/node/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-metrics" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A node for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/network/Cargo.toml b/node/network/Cargo.toml index 1d74a29777..35155e9d74 100644 --- a/node/network/Cargo.toml +++ b/node/network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-network" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Network-related objects and traits for nodes" homepage = "https://aleo.org" diff --git a/node/network/src/peer.rs b/node/network/src/peer.rs index 98a3185fab..28ff9d79f4 100644 --- a/node/network/src/peer.rs +++ b/node/network/src/peer.rs @@ -23,7 +23,7 @@ use std::{fmt, net::SocketAddr, time::Instant}; #[derive(Clone, Debug)] pub enum Peer { /// A candidate peer that's currently not connected to. - Candidate(CandidatePeer), + Candidate(CandidatePeer), /// A peer that's currently being connected to (the handshake is in progress). Connecting(ConnectingPeer), /// A fully connected (post-handshake) peer. @@ -41,7 +41,7 @@ pub struct ConnectingPeer { /// A candidate peer. #[derive(Clone, Debug)] -pub struct CandidatePeer { +pub struct CandidatePeer { /// The listening address of a candidate peer. pub listener_addr: SocketAddr, /// Indicates whether the peer is considered trusted. @@ -53,6 +53,9 @@ pub struct CandidatePeer { pub last_connection_attempt: Option, /// The total number of connection attempts, since the peer was last connected. pub total_connection_attempts: u32, + /// The last known Aleo address of this peer, carried over from a prior connection. + /// Used to detect when a validator reconnects from a different IP address. + pub last_known_aleo_addr: Option>, } /// A fully connected peer. @@ -100,13 +103,14 @@ impl fmt::Display for ConnectionMode { impl Peer { /// Create a candidate peer. - pub const fn new_candidate(listener_addr: SocketAddr, trusted: bool) -> Self { + pub fn new_candidate(listener_addr: SocketAddr, trusted: bool) -> Self { Self::Candidate(CandidatePeer { listener_addr, trusted, last_height_seen: None, last_connection_attempt: None, total_connection_attempts: 0, + last_known_aleo_addr: None, }) } @@ -157,12 +161,18 @@ impl Peer { /// Demote a peer to candidate status, marking it as disconnected. pub fn downgrade_to_candidate(&mut self, listener_addr: SocketAddr) { + let last_known_aleo_addr = match self { + Self::Connected(p) => Some(p.aleo_addr), + _ => None, + }; + *self = Self::Candidate(CandidatePeer { listener_addr, trusted: self.is_trusted(), last_height_seen: self.last_height_seen(), last_connection_attempt: None, total_connection_attempts: 0, + last_known_aleo_addr, }); } diff --git a/node/network/src/peering.rs b/node/network/src/peering.rs index 5c9dffdc67..2278bbdb1f 100644 --- a/node/network/src/peering.rs +++ b/node/network/src/peering.rs @@ -15,169 +15,6 @@ use crate::{CandidatePeer, ConnectedPeer, ConnectionMode, NodeType, Peer, Resolver}; -#[cfg(test)] -mod tests { - use super::*; - use crate::Peer; - use snarkos_node_tcp::{Config, P2P, Tcp}; - use snarkvm::{prelude::Rng, utilities::TestRng}; - - use std::{collections::HashMap, net::SocketAddr, time::Instant}; - - type CurrentNetwork = snarkvm::prelude::MainnetV0; - - struct MockPeerPool { - tcp: Tcp, - peer_pool: RwLock>>, - resolver: RwLock>, - } - - impl MockPeerPool { - fn new() -> Self { - let config = Config { listener_ip: None, ..Default::default() }; - Self { tcp: Tcp::new(config), peer_pool: Default::default(), resolver: Default::default() } - } - } - - impl P2P for MockPeerPool { - fn tcp(&self) -> &Tcp { - &self.tcp - } - } - - impl PeerPoolHandling for MockPeerPool { - const MAXIMUM_POOL_SIZE: usize = 100; - const OWNER: &str = "MockPeerPool"; - const PEER_SLASHING_COUNT: usize = 10; - - fn peer_pool(&self) -> &RwLock>> { - &self.peer_pool - } - - fn resolver(&self) -> &RwLock> { - &self.resolver - } - - fn is_dev(&self) -> bool { - false - } - - fn trusted_peers_only(&self) -> bool { - false - } - - fn node_type(&self) -> NodeType { - NodeType::Client - } - } - - fn make_connected_peer(port: u16, node_type: NodeType, rng: &mut TestRng) -> (SocketAddr, Peer) { - use snarkvm::prelude::Address; - let listener_addr = SocketAddr::from(([127, 0, 0, 1], port)); - let connected_addr = SocketAddr::from(([127, 0, 0, 1], port + 10000)); - let now = Instant::now(); - let peer = Peer::Connected(ConnectedPeer { - listener_addr, - connected_addr, - connection_mode: ConnectionMode::Router, - trusted: false, - aleo_addr: Address::::new(rng.random()), - node_type, - version: 1, - snarkos_sha: None, - last_height_seen: None, - first_seen: now, - last_seen: now, - }); - (listener_addr, peer) - } - - #[test] - fn test_peer_state_transitions() { - use snarkvm::prelude::Address; - - let pool = MockPeerPool::::new(); - let mut rng = TestRng::default(); - - let listener_addr = SocketAddr::from(([192, 0, 2, 1], 4000)); - let connected_addr = SocketAddr::from(([192, 0, 2, 1], 14000)); - let aleo_addr = Address::::new(rng.random()); - - // Step 1: insert as a candidate. - pool.peer_pool().write().insert(listener_addr, Peer::new_candidate(listener_addr, false)); - - assert_eq!(pool.number_of_candidate_peers(), 1); - assert_eq!(pool.number_of_connecting_peers(), Some(0)); - assert_eq!(pool.number_of_connected_peers(), 0); - assert!(!pool.is_connecting(listener_addr)); - assert!(!pool.is_connected(listener_addr)); - - // Step 2: promote to connecting. - assert!(pool.add_connecting_peer(listener_addr).is_ok()); - - assert_eq!(pool.number_of_candidate_peers(), 0); - assert_eq!(pool.number_of_connecting_peers(), Some(1)); - assert_eq!(pool.number_of_connected_peers(), 0); - assert!(pool.is_connecting(listener_addr)); - assert!(!pool.is_connected(listener_addr)); - - // Step 3: complete the handshake — upgrade to connected. - pool.peer_pool().write().get_mut(&listener_addr).unwrap().upgrade_to_connected( - connected_addr, - listener_addr.port(), - aleo_addr, - NodeType::Validator, - 1, - None, - ConnectionMode::Router, - ); - - assert_eq!(pool.number_of_candidate_peers(), 0); - assert_eq!(pool.number_of_connecting_peers(), Some(0)); - assert_eq!(pool.number_of_connected_peers(), 1); - assert!(!pool.is_connecting(listener_addr)); - assert!(pool.is_connected(listener_addr)); - assert_eq!(pool.number_of_connected_validators(), Some(1)); - - // Verify the connected peer's fields. - let connected = pool.get_connected_peer(listener_addr).expect("peer should be connected"); - assert_eq!(connected.listener_addr, listener_addr); - assert_eq!(connected.connected_addr, connected_addr); - assert_eq!(connected.aleo_addr, aleo_addr); - assert_eq!(connected.node_type, NodeType::Validator); - } - - #[test] - fn test_number_of_connected_validators() { - let pool = MockPeerPool::::new(); - let mut rng = TestRng::default(); - - // Empty pool: no validators. - assert_eq!(pool.number_of_connected_validators(), Some(0)); - - // Insert 2 validators and 1 client. - let (addr1, peer1) = make_connected_peer(3000, NodeType::Validator, &mut rng); - let (addr2, peer2) = make_connected_peer(3001, NodeType::Validator, &mut rng); - let (addr3, peer3) = make_connected_peer(3002, NodeType::Client, &mut rng); - { - let mut pool_write = pool.peer_pool().write(); - pool_write.insert(addr1, peer1); - pool_write.insert(addr2, peer2); - pool_write.insert(addr3, peer3); - } - - assert_eq!(pool.number_of_connected_validators(), Some(2)); - assert_eq!(pool.number_of_connected_peers(), 3); - - // A candidate peer should not be counted as a validator. - let candidate_addr = SocketAddr::from(([127, 0, 0, 1], 3003)); - pool.peer_pool().write().insert(candidate_addr, Peer::new_candidate(candidate_addr, false)); - - assert_eq!(pool.number_of_connected_validators(), Some(2)); - assert_eq!(pool.number_of_connected_peers(), 3); - } -} - use snarkos_node_tcp::{ConnectError, P2P, is_bogon_ip, is_unspecified_or_broadcast_ip}; use snarkvm::prelude::{Address, Network}; @@ -622,7 +459,7 @@ pub trait PeerPoolHandling: P2P { } /// Returns the list of candidate peers. - fn get_candidate_peers(&self) -> Vec { + fn get_candidate_peers(&self) -> Vec> { self.peer_pool() .read() .values() @@ -631,7 +468,7 @@ pub trait PeerPoolHandling: P2P { } /// Returns the list of trusted candidate peers. - fn get_trusted_candidate_peers(&self) -> Vec { + fn get_trusted_candidate_peers(&self) -> Vec> { self.peer_pool() .read() .values() @@ -771,3 +608,166 @@ pub trait PeerPoolHandling: P2P { self.tcp().banned_peers().update_ip_ban(ip); } } + +#[cfg(test)] +mod tests { + use super::*; + use crate::Peer; + use snarkos_node_tcp::{Config, P2P, Tcp}; + use snarkvm::{prelude::Rng, utilities::TestRng}; + + use std::{collections::HashMap, net::SocketAddr, time::Instant}; + + type CurrentNetwork = snarkvm::prelude::MainnetV0; + + struct MockPeerPool { + tcp: Tcp, + peer_pool: RwLock>>, + resolver: RwLock>, + } + + impl MockPeerPool { + fn new() -> Self { + let config = Config { listener_ip: None, ..Default::default() }; + Self { tcp: Tcp::new(config), peer_pool: Default::default(), resolver: Default::default() } + } + } + + impl P2P for MockPeerPool { + fn tcp(&self) -> &Tcp { + &self.tcp + } + } + + impl PeerPoolHandling for MockPeerPool { + const MAXIMUM_POOL_SIZE: usize = 100; + const OWNER: &str = "MockPeerPool"; + const PEER_SLASHING_COUNT: usize = 10; + + fn peer_pool(&self) -> &RwLock>> { + &self.peer_pool + } + + fn resolver(&self) -> &RwLock> { + &self.resolver + } + + fn is_dev(&self) -> bool { + false + } + + fn trusted_peers_only(&self) -> bool { + false + } + + fn node_type(&self) -> NodeType { + NodeType::Client + } + } + + fn make_connected_peer(port: u16, node_type: NodeType, rng: &mut TestRng) -> (SocketAddr, Peer) { + use snarkvm::prelude::Address; + let listener_addr = SocketAddr::from(([127, 0, 0, 1], port)); + let connected_addr = SocketAddr::from(([127, 0, 0, 1], port + 10000)); + let now = Instant::now(); + let peer = Peer::Connected(ConnectedPeer { + listener_addr, + connected_addr, + connection_mode: ConnectionMode::Router, + trusted: false, + aleo_addr: Address::::new(rng.random()), + node_type, + version: 1, + snarkos_sha: None, + last_height_seen: None, + first_seen: now, + last_seen: now, + }); + (listener_addr, peer) + } + + #[test] + fn test_peer_state_transitions() { + use snarkvm::prelude::Address; + + let pool = MockPeerPool::::new(); + let mut rng = TestRng::default(); + + let listener_addr = SocketAddr::from(([192, 0, 2, 1], 4000)); + let connected_addr = SocketAddr::from(([192, 0, 2, 1], 14000)); + let aleo_addr = Address::::new(rng.random()); + + // Step 1: insert as a candidate. + pool.peer_pool().write().insert(listener_addr, Peer::new_candidate(listener_addr, false)); + + assert_eq!(pool.number_of_candidate_peers(), 1); + assert_eq!(pool.number_of_connecting_peers(), Some(0)); + assert_eq!(pool.number_of_connected_peers(), 0); + assert!(!pool.is_connecting(listener_addr)); + assert!(!pool.is_connected(listener_addr)); + + // Step 2: promote to connecting. + assert!(pool.add_connecting_peer(listener_addr).is_ok()); + + assert_eq!(pool.number_of_candidate_peers(), 0); + assert_eq!(pool.number_of_connecting_peers(), Some(1)); + assert_eq!(pool.number_of_connected_peers(), 0); + assert!(pool.is_connecting(listener_addr)); + assert!(!pool.is_connected(listener_addr)); + + // Step 3: complete the handshake — upgrade to connected. + pool.peer_pool().write().get_mut(&listener_addr).unwrap().upgrade_to_connected( + connected_addr, + listener_addr.port(), + aleo_addr, + NodeType::Validator, + 1, + None, + ConnectionMode::Router, + ); + + assert_eq!(pool.number_of_candidate_peers(), 0); + assert_eq!(pool.number_of_connecting_peers(), Some(0)); + assert_eq!(pool.number_of_connected_peers(), 1); + assert!(!pool.is_connecting(listener_addr)); + assert!(pool.is_connected(listener_addr)); + assert_eq!(pool.number_of_connected_validators(), Some(1)); + + // Verify the connected peer's fields. + let connected = pool.get_connected_peer(listener_addr).expect("peer should be connected"); + assert_eq!(connected.listener_addr, listener_addr); + assert_eq!(connected.connected_addr, connected_addr); + assert_eq!(connected.aleo_addr, aleo_addr); + assert_eq!(connected.node_type, NodeType::Validator); + } + + #[test] + fn test_number_of_connected_validators() { + let pool = MockPeerPool::::new(); + let mut rng = TestRng::default(); + + // Empty pool: no validators. + assert_eq!(pool.number_of_connected_validators(), Some(0)); + + // Insert 2 validators and 1 client. + let (addr1, peer1) = make_connected_peer(3000, NodeType::Validator, &mut rng); + let (addr2, peer2) = make_connected_peer(3001, NodeType::Validator, &mut rng); + let (addr3, peer3) = make_connected_peer(3002, NodeType::Client, &mut rng); + { + let mut pool_write = pool.peer_pool().write(); + pool_write.insert(addr1, peer1); + pool_write.insert(addr2, peer2); + pool_write.insert(addr3, peer3); + } + + assert_eq!(pool.number_of_connected_validators(), Some(2)); + assert_eq!(pool.number_of_connected_peers(), 3); + + // A candidate peer should not be counted as a validator. + let candidate_addr = SocketAddr::from(([127, 0, 0, 1], 3003)); + pool.peer_pool().write().insert(candidate_addr, Peer::new_candidate(candidate_addr, false)); + + assert_eq!(pool.number_of_connected_validators(), Some(2)); + assert_eq!(pool.number_of_connected_peers(), 3); + } +} diff --git a/node/rest/Cargo.toml b/node/rest/Cargo.toml index 67eb29263b..132a425184 100644 --- a/node/rest/Cargo.toml +++ b/node/rest/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-rest" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A REST API server for a decentralized virtual machine" homepage = "https://aleo.org" diff --git a/node/rest/src/routes.rs b/node/rest/src/routes.rs index f35735de60..87c0b61110 100644 --- a/node/rest/src/routes.rs +++ b/node/rest/src/routes.rs @@ -97,6 +97,18 @@ fn parse_view_inputs(inputs: &[String]) -> Result>, Res .collect::, _>>() } +fn map_missing_resource_error(err: anyhow::Error) -> RestError { + let error_message = err.to_string(); + if error_message.contains("Missing") + || error_message.contains("does not exist in storage") + || error_message.contains("Failed to find") + { + RestError::not_found(err) + } else { + RestError::from(err) + } +} + /// Deserialize a CSV string into a vector of strings. fn de_csv<'de, D>(de: D) -> std::result::Result, D::Error> where @@ -225,7 +237,10 @@ impl, R: Routing> Rest { // Manually parse the height or the height of the hash, axum doesn't support different types // for the same path param. let hash = if let Ok(height) = height_or_hash.parse::() { - rest.ledger.get_hash(height).with_context(|| "Failed to get a block's hash")? + rest.ledger + .get_hash(height) + .with_context(|| "Failed to get a block's hash") + .map_err(map_missing_resource_error)? } else if let Ok(hash) = height_or_hash.parse::() { hash } else { @@ -284,7 +299,7 @@ impl, R: Routing> Rest { // Prepare a closure for the blocking work. let get_json_blocks = move || -> Result { let blocks = cfg_into_iter!(start_height..end_height) - .map(|height| rest.ledger.get_block(height)) + .map(|height| rest.ledger.get_block(height).map_err(map_missing_resource_error)) .collect::, _>>()?; Ok(ErasedJson::pretty(blocks)) @@ -897,7 +912,7 @@ impl, R: Routing> Rest { State(rest): State, Path(input_or_output_id): Path>, ) -> Result { - Ok(ErasedJson::pretty(rest.ledger.find_transition_id(&input_or_output_id)?)) + Ok(ErasedJson::pretty(rest.ledger.find_transition_id(&input_or_output_id).map_err(map_missing_resource_error)?)) } /// POST //transaction/broadcast @@ -1296,6 +1311,7 @@ impl, R: Routing> Rest { block.cumulative_proof_target(), block.previous_hash(), None, + None, )?; // Get the current (latest-edition) stack for the program. @@ -1503,3 +1519,35 @@ mod tests { assert!(err.to_string().contains("Invalid key at index 1")); } } + +#[cfg(test)] +mod route_error_tests { + use super::*; + use axum::http::StatusCode; + + #[test] + fn missing_resource_errors_map_to_not_found() { + let message = "Missing block hash for block 10"; + let err = map_missing_resource_error(anyhow::anyhow!(message)); + assert_eq!(err, StatusCode::NOT_FOUND); + assert_eq!(err.to_string(), message); + + let message = "Block 10 does not exist in storage"; + let err = map_missing_resource_error(anyhow::anyhow!(message)); + assert_eq!(err, StatusCode::NOT_FOUND); + assert_eq!(err.to_string(), message); + + let message = "Failed to find the transition ID for the given input or output ID '123field'"; + let err = map_missing_resource_error(anyhow::anyhow!(message)); + assert_eq!(err, StatusCode::NOT_FOUND); + assert_eq!(err.to_string(), message); + } + + #[test] + fn non_missing_resource_errors_remain_internal_server_error() { + let message = "disk I/O failed"; + let err = map_missing_resource_error(anyhow::anyhow!(message)); + assert_eq!(err, StatusCode::INTERNAL_SERVER_ERROR); + assert_eq!(err.to_string(), message); + } +} diff --git a/node/router/Cargo.toml b/node/router/Cargo.toml index 5c93a6ff63..23bcd4fdcf 100644 --- a/node/router/Cargo.toml +++ b/node/router/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-router" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A node router for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/router/messages/Cargo.toml b/node/router/messages/Cargo.toml index 67630e01a1..1a33096bac 100644 --- a/node/router/messages/Cargo.toml +++ b/node/router/messages/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-router-messages" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Node messages for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/router/messages/src/lib.rs b/node/router/messages/src/lib.rs index 7f3f1e7893..367b7b49a9 100644 --- a/node/router/messages/src/lib.rs +++ b/node/router/messages/src/lib.rs @@ -67,6 +67,7 @@ use snarkvm::prelude::{ Address, ConsensusVersion, FromBytes, + MainnetV0, Network, Signature, ToBytes, @@ -77,6 +78,19 @@ use snarkvm::prelude::{ use std::{borrow::Cow, io, net::SocketAddr}; +// A compile-time compatibility check for the Message. +const _: () = { + let msg_versions = Message::::VERSIONS; + let net_versions = MainnetV0::_CONSENSUS_VERSION_HEIGHTS; + + let message_version = msg_versions[msg_versions.len() - 1].0; + let expected_version = net_versions[net_versions.len() - 1].0; + + if message_version as u16 != expected_version as u16 { + panic!("Message <> ConsensusVersion mismatch!"); + } +}; + pub trait MessageTrait: ToBytes + FromBytes { /// Returns the message name. fn name(&self) -> Cow<'static, str>; @@ -108,7 +122,7 @@ impl From for Message { impl Message { /// The version of the network protocol; this is incremented for breaking changes between migration versions. // Note. This should be incremented for each new `ConsensusVersion` that is added. - pub const VERSIONS: [(ConsensusVersion, u32); 12] = [ + pub const VERSIONS: [(ConsensusVersion, u32); 13] = [ (ConsensusVersion::V5, 17), (ConsensusVersion::V7, 18), (ConsensusVersion::V8, 19), @@ -121,6 +135,7 @@ impl Message { (ConsensusVersion::V15, 26), (ConsensusVersion::V16, 27), (ConsensusVersion::V17, 28), + (ConsensusVersion::V18, 29), ]; /// Returns the latest message version. @@ -320,19 +335,4 @@ mod tests { consensus_constants_increasing_heights::(); consensus_constants_increasing_heights::(); } - - #[test] - fn test_latest_consensus_version() { - let message_consensus_version = Message::::VERSIONS.last().unwrap().0; - let expected_consensus_version = MainnetV0::CONSENSUS_VERSION_HEIGHTS().last().unwrap().0; - assert_eq!(message_consensus_version, expected_consensus_version); - - let message_consensus_version = Message::::VERSIONS.last().unwrap().0; - let expected_consensus_version = TestnetV0::CONSENSUS_VERSION_HEIGHTS().last().unwrap().0; - assert_eq!(message_consensus_version, expected_consensus_version); - - let message_consensus_version = Message::::VERSIONS.last().unwrap().0; - let expected_consensus_version = CanaryV0::CONSENSUS_VERSION_HEIGHTS().last().unwrap().0; - assert_eq!(message_consensus_version, expected_consensus_version); - } } diff --git a/node/router/src/heartbeat.rs b/node/router/src/heartbeat.rs index 2e44a29187..9b53d286bc 100644 --- a/node/router/src/heartbeat.rs +++ b/node/router/src/heartbeat.rs @@ -320,7 +320,7 @@ pub trait Heartbeat: Outbound { /// Helper function that attempts to connect the given peers. /// /// Used by [`Self::handle_trusted_peers`] and [`Self::handle_connected_peers`]. - async fn try_connect_to_peers(&self, peers: impl Iterator + Send + 'static) { + async fn try_connect_to_peers(&self, peers: impl Iterator> + Send + 'static) { let (peer_info, hdls): (Vec<_>, Vec<_>) = peers .filter_map(|peer| { let peer_type = if peer.trusted { "trusted peer" } else { "peer" }; diff --git a/node/src/client/router.rs b/node/src/client/router.rs index c9611a5407..3f8d2d98ce 100644 --- a/node/src/client/router.rs +++ b/node/src/client/router.rs @@ -237,7 +237,13 @@ impl> Inbound for Client { debug!("{}", flatten_error(err.context(format!("Ignoring block response from peer '{peer_ip}'")))); true } - Err(err) if err.is_invalid_consensus_version() => { + Err(err) if err.is_consensus_version_ahead() => { + let err: anyhow::Error = err.into(); + let err = err.context(format!("Peer sent a block response with a newer consensus version '{peer_ip}'")); + warn!("{}", flatten_error(&err)); + true + } + Err(err) if err.is_consensus_version_behind() => { // If the error indicates the peer missed an upgrade and forked, ban it. let err: anyhow::Error = err.into(); let err = err.context(format!("Peer sent an invalid block response '{peer_ip}'")); diff --git a/node/src/traits.rs b/node/src/traits.rs index cbde673213..c96abf7e78 100644 --- a/node/src/traits.rs +++ b/node/src/traits.rs @@ -61,8 +61,15 @@ pub trait NodeInterface: Routing { // Check if there are any stragglers left. if let Some(handle) = &handler.handle { let live_tasks = handle.metrics().num_alive_tasks(); - if live_tasks != 0 { - error!("There are still {live_tasks} live tasks"); + let expected_leftover = if cfg!(unix) { + // The 1 "extra" task comes from the FD monitor, which is aborted once + // wait_for_signals concludes its work. + 1 + } else { + 0 + }; + if live_tasks > expected_leftover { + error!("There are {} surplus live tasks", live_tasks - expected_leftover); } } } diff --git a/node/sync/Cargo.toml b/node/sync/Cargo.toml index c2c1867b01..da967ab9c9 100644 --- a/node/sync/Cargo.toml +++ b/node/sync/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-sync" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A synchronization module for a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/sync/communication-service/Cargo.toml b/node/sync/communication-service/Cargo.toml index e5955a5180..a595b4f0f6 100644 --- a/node/sync/communication-service/Cargo.toml +++ b/node/sync/communication-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-sync-communication-service" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A communication service for the sync module in a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/sync/locators/Cargo.toml b/node/sync/locators/Cargo.toml index aff6398740..7ef2feb11d 100644 --- a/node/sync/locators/Cargo.toml +++ b/node/sync/locators/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-sync-locators" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Locators to synchronize a decentralized operating system" homepage = "https://aleo.org" diff --git a/node/sync/src/block_sync.rs b/node/sync/src/block_sync.rs index 617ed6f896..198fb08af5 100644 --- a/node/sync/src/block_sync.rs +++ b/node/sync/src/block_sync.rs @@ -133,9 +133,13 @@ pub enum InsertBlockResponseError { #[error("The peer did not send a consensus version")] NoConsensusVersion, #[error( - "The peer's consensus version for height {last_height} does not match ours: expected {expected_version}, got {peer_version}" + "The peer's consensus version for height {last_height} is ahead of ours: expected {expected_version}, got {peer_version}" )] - ConsensusVersionMismatch { peer_version: ConsensusVersion, expected_version: ConsensusVersion, last_height: u32 }, + ConsensusVersionAhead { peer_version: ConsensusVersion, expected_version: ConsensusVersion, last_height: u32 }, + #[error( + "The peer's consensus version for height {last_height} is behind ours: expected {expected_version}, got {peer_version}" + )] + ConsensusVersionBehind { peer_version: ConsensusVersion, expected_version: ConsensusVersion, last_height: u32 }, #[error("Block Sync already advanced to block {height}")] BlockSyncAlreadyAdvanced { height: u32 }, #[error("No such request for height {height}")] @@ -160,9 +164,14 @@ impl InsertBlockResponseError { matches!(self, Self::NoSuchRequest { .. } | Self::BlockSyncAlreadyAdvanced { .. }) } - // Returns true if the error is about an invalid consensus version. - pub fn is_invalid_consensus_version(&self) -> bool { - matches!(self, Self::ConsensusVersionMismatch { .. } | Self::NoConsensusVersion) + // Returns true if the peer's consensus version is ahead of ours. + pub fn is_consensus_version_ahead(&self) -> bool { + matches!(self, Self::ConsensusVersionAhead { .. }) + } + + // Returns true if the peer's consensus version is behind ours or missing. + pub fn is_consensus_version_behind(&self) -> bool { + matches!(self, Self::ConsensusVersionBehind { .. } | Self::NoConsensusVersion) } } @@ -662,10 +671,18 @@ impl BlockSync { if expected_consensus_version >= ConsensusVersion::V12 { if let Some(peer_version) = latest_consensus_version { if peer_version != expected_consensus_version { - break 'outer Err(InsertBlockResponseError::ConsensusVersionMismatch { - peer_version, - expected_version: expected_consensus_version, - last_height, + break 'outer Err(if peer_version > expected_consensus_version { + InsertBlockResponseError::ConsensusVersionAhead { + peer_version, + expected_version: expected_consensus_version, + last_height, + } + } else { + InsertBlockResponseError::ConsensusVersionBehind { + peer_version, + expected_version: expected_consensus_version, + last_height, + } }); } } else { @@ -1103,7 +1120,7 @@ impl BlockSync { let Some((sync_peers, min_common_ancestor)) = self.find_sync_peers_inner(start_height) else { // This generally shouldn't happen, because there cannot be outstanding requests when no peers are connected. - error!("Cannot re-request blocks because no or not enough peers are connected"); + warn!("Cannot re-request blocks because no or not enough peers are connected"); return result; }; diff --git a/node/tcp/Cargo.toml b/node/tcp/Cargo.toml index 92f5764e16..10855edb64 100644 --- a/node/tcp/Cargo.toml +++ b/node/tcp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-node-tcp" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "A TCP stack for a decentralized operating system" homepage = "https://aleo.org" diff --git a/utilities/Cargo.toml b/utilities/Cargo.toml index e4c9e8c5b2..08dc4b2226 100644 --- a/utilities/Cargo.toml +++ b/utilities/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snarkos-utilities" -version = "4.8.1" +version = "4.9.0" authors = [ "The Aleo Team " ] description = "Utilities for a decentralized operating system" homepage = "https://aleo.org"