diff --git a/.config/nextest.toml b/.config/nextest.toml
index 7caa4a35e28..cba96681ec8 100644
--- a/.config/nextest.toml
+++ b/.config/nextest.toml
@@ -53,7 +53,7 @@ filter = 'package(solana-local-cluster) & test(/^test_fork_choice_refresh_old_vo
slow-timeout = { period = "60s", terminate-after = 5 }
[[profile.ci.overrides]]
-filter = 'package(solana-local-cluster) & test(/^test_cluster_partition$/)'
+filter = 'package(solana-local-cluster) & test(/^test_cluster_partition/)'
slow-timeout = { period = "60s", terminate-after = 4 }
[[profile.ci.overrides]]
@@ -65,7 +65,7 @@ filter = 'package(solana-local-cluster) & test(/^test_slot_hash_expiry$/)'
slow-timeout = { period = "60s", terminate-after = 4 }
[[profile.ci.overrides]]
-filter = 'package(solana-local-cluster) & test(/^test_kill_heaviest_partition$/)'
+filter = 'package(solana-local-cluster) & test(/^test_kill_heaviest_partition/)'
slow-timeout = { period = "60s", terminate-after = 4 }
[[profile.ci.overrides]]
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 1524ca26c66..9b06b97eba2 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,8 +1,8 @@
# Please keep this file sorted
/bloom/ @anza-xyz/networking
/bls-cert-verify/ @anza-xyz/consensus
+/bls-sigverify/ @anza-xyz/consensus
/compute-budget-instruction/ @anza-xyz/fees
-/core/src/bls_sigverify/ @anza-xyz/consensus
/core/src/consensus.rs @anza-xyz/consensus
/core/src/consensus/ @anza-xyz/consensus
/core/src/repair/ @anza-xyz/networking @anza-xyz/consensus
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index cd44ff2b883..28e8c24f3dc 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -4,4 +4,7 @@
#### Summary of Changes
+#### Testing
+
+
Fixes #
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 42f7002869a..cebba555c88 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -8,6 +8,16 @@ updates:
time: "08:00"
timezone: Etc/UTC
open-pull-requests-limit: 6
+ cooldown:
+ default-days: 7
+ # crates published by anza-team bypass the cooldown
+ exclude:
+ - "solana-*"
+ - "agave-*"
+ - "spl-*"
+ - "rts-alloc"
+ - "shaq"
+ - "wincode"
# split from root directory schedule to avoid duplicate checks
- package-ecosystem: cargo
@@ -20,20 +30,16 @@ updates:
time: "14:00"
timezone: Etc/UTC
open-pull-requests-limit: 6
-
- - package-ecosystem: "npm"
- directory: "/docs"
- schedule:
- interval: weekly
- time: "08:00"
- timezone: Etc/UTC
- open-pull-requests-limit: 3
cooldown:
default-days: 7
- groups:
- docs-dependencies:
- patterns:
- - "*"
+ # crates published by anza-team bypass the cooldown
+ exclude:
+ - "solana-*"
+ - "agave-*"
+ - "spl-*"
+ - "rts-alloc"
+ - "shaq"
+ - "wincode"
- package-ecosystem: "github-actions"
directory: "/"
@@ -42,3 +48,5 @@ updates:
time: "08:00"
timezone: Etc/UTC
open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
diff --git a/.github/label-actions.yml b/.github/label-actions.yml
deleted file mode 100644
index 8a67d20c3de..00000000000
--- a/.github/label-actions.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-question:
- issues:
- # Post a comment, `{issue-author}` is an optional placeholder
- comment: >
- Hi @{issue-author},
-
-
- Thanks for your question!
-
-
- We want to make sure to keep signal strong in the GitHub issue tracker – to make sure
- that it remains the best place to track issues that affect the development of Solana itself.
-
-
- Questions like yours deserve a purpose-built Q&A forum. Unless there exists evidence that
- this is a bug with Solana itself, please post your question to the Solana Stack Exchange
- using this link: https://solana.stackexchange.com/questions/ask
-
-
- ---
-
- _This
- [automated message](https://github.com/anza-xyz/agave/blob/master/.github/label-actions.yml)
- is a result of having added the ‘question’ tag_.
-
- # Close the issue
- close: true
diff --git a/.github/scripts/downstream-project-spl-common.sh b/.github/scripts/downstream-project-spl-common.sh
deleted file mode 100644
index 6db72e70dd3..00000000000
--- a/.github/scripts/downstream-project-spl-common.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-here="$(dirname "${BASH_SOURCE[0]}")"
-program="$1"
-
-#shellcheck source=ci/downstream-projects/common.sh
-source "$here"/../../ci/downstream-projects/common.sh
-
-set -x
-rm -rf "${program}"
-git clone https://github.com/solana-program/"${program}".git
-
-# copy toolchain file to use solana's rust version
-cp "$SOLANA_DIR"/rust-toolchain.toml "${program}"/
-cd "${program}" || exit 1
-echo "HEAD: $(git rev-parse HEAD)"
-
-project_used_solana_version=$(sed -nE 's/solana = \"(.*)\"/\1/p' <"Cargo.toml")
-echo "used solana version: $project_used_solana_version"
-if semverGT "$project_used_solana_version" "$SOLANA_VER"; then
- echo "skip"
- export SKIP_SPL_DOWNSTREAM_PROJECT_TEST=1
- return
-fi
-
-update_solana_dependencies . "$SOLANA_VER"
-patch_crates_io_solana Cargo.toml "$SOLANA_DIR"
diff --git a/.github/scripts/downstream-project-spl-install-deps.sh b/.github/scripts/downstream-project-spl-install-deps.sh
deleted file mode 100755
index defb64fab23..00000000000
--- a/.github/scripts/downstream-project-spl-install-deps.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-sudo apt-get update
-sudo apt-get install libudev-dev libclang-dev protobuf-compiler -y
diff --git a/.github/scripts/purge-ubuntu-runner.sh b/.github/scripts/purge-ubuntu-runner.sh
deleted file mode 100755
index e8008202867..00000000000
--- a/.github/scripts/purge-ubuntu-runner.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env bash
-
-sudo rm -rf /usr/share/dotnet
-sudo rm -rf /usr/share/swift
-sudo rm -rf /usr/share/mysql
-sudo rm -rf /usr/share/az_*
-sudo rm -rf /usr/share/postgresql-common
-
-sudo rm -rf /opt/ghc
-sudo rm -rf /opt/az
-sudo rm -rf /opt/pipx
-sudo rm -rf /opt/microsoft
-sudo rm -rf /opt/google
-sudo rm -rf /opt/hostedtoolcache
-
-sudo rm -rf /usr/local/lib/android
-sudo rm -rf /usr/local/lib/heroku
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index 269f4090a44..8f44a4be4a1 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -6,7 +6,7 @@ on:
jobs:
benchmark:
- if: github.repository == 'anza-xyz/agave'
+ if: github.repository_owner == 'anza-xyz'
name: benchmark
runs-on: benchmark
strategy:
@@ -61,7 +61,7 @@ jobs:
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Before Command
if: ${{ matrix.test.before_command != '' }}
diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml
index a494b72e612..d29938f42e0 100644
--- a/.github/workflows/bump-version.yml
+++ b/.github/workflows/bump-version.yml
@@ -17,14 +17,33 @@ on:
jobs:
version-bump:
- if: github.repository == 'anza-xyz/agave'
+ if: github.repository_owner == 'anza-xyz'
runs-on: ubuntu-24.04
+ permissions:
+ pull-requests: write
+ environment: "Version Bump"
steps:
+ - name: Create github app token
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
+ id: app-token
+ with:
+ client-id: ${{ vars.CLIENT_ID }}
+ private-key: ${{ secrets.PRIVATE_KEY }}
+
+ - name: Set git config
+ run: |
+ git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ git config --global user.name "github-actions[bot]"
+ git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf https://github.com/
+ env:
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
+
- name: Checkout code
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0
- token: ${{ secrets.VERSION_BUMP_PAT }}
+ token: ${{ steps.app-token.outputs.token }}
+ persist-credentials: false
- name: Setup
run: |
@@ -37,10 +56,6 @@ jobs:
--rev 930e3baec27a17cb4491b5585515b33f94dbd039 \
--bin xtask
- # git config
- git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git config user.name "github-actions[bot]"
-
- name: Process
id: process
env:
@@ -71,6 +86,7 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
title: `Bump version to ${process.env.NEW_VERSION}`,
+ draft: true,
head: `version-bump-${process.env.NEW_VERSION}`,
base: process.env.TARGET_BRANCH
})
diff --git a/.github/workflows/cargo.yml b/.github/workflows/cargo.yml
index 2bc5d32447c..16fcb037447 100644
--- a/.github/workflows/cargo.yml
+++ b/.github/workflows/cargo.yml
@@ -30,7 +30,7 @@ env:
jobs:
clippy-nightly:
- if: github.repository == 'anza-xyz/agave'
+ if: github.repository_owner == 'anza-xyz'
strategy:
matrix:
os:
@@ -53,7 +53,7 @@ jobs:
apk update
apk add bash git
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
with:
@@ -69,10 +69,10 @@ jobs:
clippy-nightly-windows-2025:
name: clippy-nightly (windows-2025)
- if: github.repository == 'anza-xyz/agave' && github.event_name == 'push'
+ if: github.repository_owner == 'anza-xyz' && github.event_name == 'push'
runs-on: windows-2025
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
with:
diff --git a/.github/workflows/changelog-label.yml b/.github/workflows/changelog-label.yml
index cbf79d12615..c0d03ebce9e 100644
--- a/.github/workflows/changelog-label.yml
+++ b/.github/workflows/changelog-label.yml
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0
- name: Check if changes to CHANGELOG.md
diff --git a/.github/workflows/crate-check.yml b/.github/workflows/crate-check.yml
index 33ea169a70d..caf39ef0a37 100644
--- a/.github/workflows/crate-check.yml
+++ b/.github/workflows/crate-check.yml
@@ -1,4 +1,4 @@
-name: crate-check
+name: Crate Check
on:
push:
@@ -15,10 +15,10 @@ on:
jobs:
check:
name: crate check
- if: github.repository == 'anza-xyz/agave'
+ if: github.repository_owner == 'anza-xyz'
runs-on: ubuntu-22.04
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
fetch-depth: 0
diff --git a/.github/workflows/dependabot-pr.yml b/.github/workflows/dependabot-pr.yml
index 7280cbe302e..acd045e9b61 100644
--- a/.github/workflows/dependabot-pr.yml
+++ b/.github/workflows/dependabot-pr.yml
@@ -9,13 +9,29 @@ jobs:
dependabot:
timeout-minutes: 10
runs-on: ubuntu-24.04
- if: github.event.pull_request.user.login == 'dependabot[bot]'
+ if: github.actor == 'dependabot[bot]'
steps:
+ - name: Create github app token
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
+ id: app-token
+ with:
+ client-id: ${{ secrets.CLIENT_ID }}
+ private-key: ${{ secrets.PRIVATE_KEY }}
+
+ - name: Set git config
+ run: |
+ git config --global user.email "49699333+dependabot[bot]@users.noreply.github.com"
+ git config --global user.name "dependabot[bot]"
+ git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf https://github.com/
+ env:
+ GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
+
- name: checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ github.event.pull_request.head.ref }}
- token: ${{ secrets.PAT }}
+ token: ${{ steps.app-token.outputs.token }}
+ persist-credentials: false
- name: update code
env:
@@ -45,8 +61,6 @@ jobs:
if [ -z "$(git status --porcelain)" ]; then
echo "✅ Nothing to update"
else
- git config user.email "49699333+dependabot[bot]@users.noreply.github.com"
- git config user.name "dependabot[bot]"
git add **/Cargo.toml
git add **/Cargo.lock
git commit -am "Update all workspaces"
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
deleted file mode 100644
index 9f2c2da9ef3..00000000000
--- a/.github/workflows/docs.yml
+++ /dev/null
@@ -1,133 +0,0 @@
-name: docs
-
-on:
- push:
- branches:
- - master
- - v[0-9]+.[0-9]+
- tags:
- - v[0-9]+.[0-9]+.[0-9]+
- pull_request:
- branches:
- - master
- - v[0-9]+.[0-9]+
-
-jobs:
- check:
- if: github.repository == 'anza-xyz/agave'
- outputs:
- continue: ${{ steps.check.outputs.need_to_build }}
- runs-on: ubuntu-22.04
- steps:
- - name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- with:
- fetch-depth: 0
-
- - name: Get commit range (push)
- if: ${{ github.event_name == 'push' }}
- run: |
- echo "COMMIT_RANGE=${{ github.event.before }}..$GITHUB_SHA" >> $GITHUB_ENV
-
- - name: Get commit range (pull_request)
- if: ${{ github.event_name == 'pull_request' }}
- run: |
- echo "COMMIT_RANGE=${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV
-
- - name: Get file status
- run: |
- set +e
- git diff --name-only $COMMIT_RANGE | grep \
- -e '.github/workflows/docs.yml' \
- -e 'docs/**'
- echo "FILE_CHANGED=$?" >> $GITHUB_ENV
-
- - name: Check
- id: check
- shell: bash
- run: |
- source ci/env.sh
- eval "$(ci/channel-info.sh)"
- TAG=$CI_TAG
-
- echo "TAG: $TAG"
- echo "CHANNEL: $CHANNEL"
- echo "FILE_CHANGED: $FILE_CHANGED"
-
- echo need_to_build="$(
- if [ "$TAG" != '' ]
- then
- echo 1
- elif [ $FILE_CHANGED = 0 ] && ( [ "$CHANNEL" = "beta" ] || [ "$CHANNEL" = "edge" ] )
- then
- echo 1
- else
- echo 0
- fi
- )" >> $GITHUB_OUTPUT
-
- build:
- needs:
- - check
- if: >
- github.repository == 'anza-xyz/agave' &&
- needs.check.outputs.continue == 1
- runs-on: ubuntu-22.04
- steps:
- - name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - name: Setup pnpm
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- with:
- version: 10
-
- - name: Setup Node
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- with:
- node-version: 24
- package-manager-cache: false
-
- - name: Build
- working-directory: docs
- run: |
- pnpm install --frozen-lockfile
- ./build.sh
-
- - name: Upload artifacts
- if: ${{ github.event_name == 'push' }}
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- with:
- name: docs-build
- path: ./docs/build
- retention-days: 1
-
- deploy:
- needs:
- - build
- if: >
- github.repository == 'anza-xyz/agave' &&
- github.event_name == 'push'
- runs-on: ubuntu-22.04
- steps:
- - name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - name: Setup Node
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
- with:
- node-version: 24
- package-manager-cache: false
-
- - name: Download artifacts
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
- with:
- name: docs-build
- path: ./docs/build
-
- - name: Deploy
- working-directory: docs
- run: ./deploy.sh
- env:
- VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
- VERCEL_SCOPE: ${{ secrets.VERCEL_SCOPE }}
diff --git a/.github/workflows/downstream-project-anchor.yml b/.github/workflows/downstream-project-anchor.yml
deleted file mode 100644
index 6dbc469abd7..00000000000
--- a/.github/workflows/downstream-project-anchor.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-name: Downstream Project - Anchor
-
-on:
- push:
- branches:
- - master
- - v[0-9]+.[0-9]+
- pull_request:
- branches:
- - master
- - v[0-9]+.[0-9]+
- paths:
- - "**.rs"
- - "Cargo.toml"
- - "Cargo.lock"
- - "scripts/build-downstream-anchor-projects.sh"
- - "scripts/patch-spl-crates-for-anchor.sh"
- - ".github/scripts/purge-ubuntu-runner.sh"
- - ".github/scripts/downstream-project-spl-install-deps.sh"
- - ".github/workflows/downstream-project-anchor.yml"
- workflow_call:
- inputs:
- branch:
- required: false
- type: string
- default: "master"
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
- cancel-in-progress: true
-
-env:
- SHELL: /bin/bash
- SCCACHE_GHA_ENABLED: "true"
- RUSTC_WRAPPER: "sccache"
-
-jobs:
- test:
- #if: github.repository == 'anza-xyz/agave'
- if: false # restore once all program-specific repos are ready
- runs-on: ubuntu-24.04
- strategy:
- matrix:
- version: ["master"]
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - shell: bash
- run: |
- .github/scripts/purge-ubuntu-runner.sh
-
- - uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
- with:
- version: "v0.10.0"
-
- - shell: bash
- run: |
- source .github/scripts/downstream-project-spl-install-deps.sh
- ./scripts/build-downstream-anchor-projects.sh ${{ matrix.version }}
diff --git a/.github/workflows/downstream-project-spl-nightly.yml b/.github/workflows/downstream-project-spl-nightly.yml
deleted file mode 100644
index ace52d430f3..00000000000
--- a/.github/workflows/downstream-project-spl-nightly.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-name: Downstream Project - SPL (Nightly)
-
-on:
- schedule:
- - cron: "0 3 * * *"
-
-jobs:
- main:
- if: github.repository == 'anza-xyz/agave'
- strategy:
- fail-fast: false
- matrix:
- branch:
- - master
- uses: ./.github/workflows/downstream-project-spl.yml
- with:
- branch: ${{ matrix.branch }}
diff --git a/.github/workflows/downstream-project-spl.yml b/.github/workflows/downstream-project-spl.yml
deleted file mode 100644
index 36551cf7118..00000000000
--- a/.github/workflows/downstream-project-spl.yml
+++ /dev/null
@@ -1,171 +0,0 @@
-name: Downstream Project - SPL
-
-on:
- push:
- branches:
- - master
- - v[0-9]+.[0-9]+
- pull_request:
- branches:
- - master
- - v[0-9]+.[0-9]+
- paths:
- - "**.rs"
- - "rust-toolchain.toml"
- - "Cargo.toml"
- - "Cargo.lock"
- - "ci/downstream-projects/run-spl.sh"
- - ".github/workflows/downstream-project-spl.yml"
- - ".github/scripts/downstream-project-spl-common.sh"
- - ".github/scripts/downstream-project-spl-install-deps.sh"
- workflow_call:
- inputs:
- branch:
- required: false
- type: string
- default: "master"
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
- cancel-in-progress: true
-
-env:
- SHELL: /bin/bash
- SCCACHE_GHA_ENABLED: "true"
- RUSTC_WRAPPER: "sccache"
-
-jobs:
- check:
- #if: github.repository == 'anza-xyz/agave'
- if: false
- runs-on: ubuntu-24.04
- timeout-minutes: 60
- strategy:
- matrix:
- programs:
- - associated-token-account
- - feature-proposal
- - instruction-padding
- - memo
- - record
- - single-pool
- - slashing
- - stake-pool
- - token-2022
- # re-enable with https://github.com/buffalojoec/mollusk/pull/74
- # - token
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - shell: bash
- run: |
- .github/scripts/purge-ubuntu-runner.sh
-
- - uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
- with:
- version: "v0.10.0"
-
- - shell: bash
- run: |
- source .github/scripts/downstream-project-spl-install-deps.sh
- source .github/scripts/downstream-project-spl-common.sh "${{ matrix.programs }}"
- if [ -n "$SKIP_SPL_DOWNSTREAM_PROJECT_TEST" ]; then
- exit 0
- fi
- cargo check
-
- test_cli:
- #if: github.repository == 'anza-xyz/agave'
- if: false
- runs-on: ubuntu-24.04
- timeout-minutes: 60
- strategy:
- matrix:
- programs:
- - single-pool
- - token-2022
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - shell: bash
- run: |
- .github/scripts/purge-ubuntu-runner.sh
-
- - uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
- with:
- version: "v0.10.0"
-
- - shell: bash
- run: |
- source .github/scripts/downstream-project-spl-install-deps.sh
- source .github/scripts/downstream-project-spl-common.sh "${{ matrix.programs }}"
- if [ -n "$SKIP_SPL_DOWNSTREAM_PROJECT_TEST" ]; then
- exit 0
- fi
- $CARGO_BUILD_SBF --manifest-path program/Cargo.toml
- cargo test --manifest-path clients/cli/Cargo.toml
-
- cargo-test-sbf:
- #if: github.repository == 'anza-xyz/agave'
- if: false
- runs-on: ubuntu-24.04
- timeout-minutes: 60
- strategy:
- matrix:
- programs:
- - associated-token-account
- - feature-proposal
- - instruction-padding
- - memo
- - record
- - single-pool
- - slashing
- - stake-pool
- - token-2022
- # re-enable with https://github.com/buffalojoec/mollusk/pull/74
- # - token
- steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - shell: bash
- run: |
- .github/scripts/purge-ubuntu-runner.sh
-
- - uses: mozilla-actions/sccache-action@9e7fa8a12102821edf02ca5dbea1acd0f89a2696 # v0.0.10
- with:
- version: "v0.10.0"
-
- - name: Install dependencies
- shell: bash
- run: |
- source .github/scripts/downstream-project-spl-install-deps.sh
- source .github/scripts/downstream-project-spl-common.sh "${{ matrix.programs }}"
- if [ -n "$SKIP_SPL_DOWNSTREAM_PROJECT_TEST" ]; then
- exit 0
- fi
-
- - name: Test SBPFv0
- shell: bash
- run: |
- source ci/downstream-projects/common.sh
- cd "${{ matrix.programs }}"
- $CARGO_BUILD_SBF --arch v0 --manifest-path program/Cargo.toml
- RUSTFLAGS="-Awarnings" SBF_OUT_DIR="../target/deploy" cargo test --features test-sbf --manifest-path program/Cargo.toml
-
- - name: Test SBPFv1
- shell: bash
- run: |
- source ci/downstream-projects/common.sh
- cd "${{ matrix.programs }}"
- rm -rf target/deploy target/sbpf*
- $CARGO_BUILD_SBF --arch v1 --manifest-path program/Cargo.toml
- RUSTFLAGS="-Awarnings" SBF_OUT_DIR="../target/deploy" cargo test --features test-sbf --manifest-path program/Cargo.toml
-
- - name: Test SBPFv2
- shell: bash
- run: |
- source ci/downstream-projects/common.sh
- cd "${{ matrix.programs }}"
- rm -rf target/deploy target/sbpf*
- $CARGO_BUILD_SBF --arch v2 --manifest-path program/Cargo.toml
- RUSTFLAGS="-Awarnings" SBF_OUT_DIR="../target/deploy" cargo test --features test-sbf --manifest-path program/Cargo.toml
diff --git a/.github/workflows/label-actions.yml b/.github/workflows/label-actions.yml
deleted file mode 100644
index 49e13945d12..00000000000
--- a/.github/workflows/label-actions.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: "Issue Label Actions"
-
-on:
- issues:
- types: [labeled, unlabeled]
-
-permissions:
- contents: read
- issues: write
-
-jobs:
- action:
- runs-on: ubuntu-24.04
- steps:
- - uses: dessant/label-actions@809e0f9bc11ce08744e7ccac7cd10621d00aba2f # v5.0.2
diff --git a/.github/workflows/manage-stale-issues.yml b/.github/workflows/manage-stale-issues.yml
index 09b5505c299..bd1381b90f0 100644
--- a/.github/workflows/manage-stale-issues.yml
+++ b/.github/workflows/manage-stale-issues.yml
@@ -21,11 +21,11 @@ jobs:
# Forks do not need to run this, especially on cron schedule.
if: >
github.event_name != 'schedule'
- || github.repository == 'anza-xyz/agave'
+ || github.repository_owner == 'anza-xyz'
runs-on: ubuntu-24.04
steps:
- - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
+ - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
with:
ascending: true # Spend API operations budget on older, more-likely-to-get-closed issues first
close-issue-message: 'This issue was closed because it has been stale for 7 days with no activity.'
diff --git a/.github/workflows/publish-windows-tarball.yml b/.github/workflows/publish-windows-tarball.yml
index 2f847e4d187..add365ec79c 100644
--- a/.github/workflows/publish-windows-tarball.yml
+++ b/.github/workflows/publish-windows-tarball.yml
@@ -16,7 +16,7 @@ jobs:
channel: ${{ steps.build.outputs.channel }}
steps:
- name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ github.event.inputs.commit }}
fetch-depth: 0
@@ -89,6 +89,8 @@ jobs:
if: ${{ needs.windows-build.outputs.tag != '' }}
needs: [windows-build]
runs-on: ubuntu-22.04
+ permissions:
+ contents: write
steps:
- name: Download
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
@@ -97,7 +99,7 @@ jobs:
path: ./windows-release/
- name: Release
- uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
+ uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3.0.1
with:
tag_name: ${{ needs.windows-build.outputs.tag }}
files: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index af6cf27929e..a13fc62f43b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -7,11 +7,11 @@ on:
jobs:
trigger-buildkite-pipeline:
- if: github.repository == 'anza-xyz/agave'
+ if: github.repository_owner == 'anza-xyz'
runs-on: ubuntu-24.04
steps:
- name: Trigger a Buildkite Build
- uses: "buildkite/trigger-pipeline-action@909fed762c73d5ae2b5d555ab910d66b3fae2670" # v2.4.1
+ uses: "buildkite/trigger-pipeline-action@41fd38b69189bf186cf69cf10ec807a850cae593" # v2.5.0
with:
buildkite_api_access_token: ${{ secrets.TRIGGER_BK_BUILD_TOKEN }}
pipeline: "anza/agave-secondary"
@@ -21,8 +21,10 @@ jobs:
message: ":github: Triggered from a GitHub Action"
draft-release:
- if: github.repository == 'anza-xyz/agave'
+ if: github.repository_owner == 'anza-xyz'
runs-on: ubuntu-24.04
+ permissions:
+ contents: write
steps:
- name: Create Release
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
diff --git a/.github/workflows/trigger-buildkite-pipeline.yml b/.github/workflows/trigger-buildkite-pipeline.yml
new file mode 100644
index 00000000000..ba77f6c8354
--- /dev/null
+++ b/.github/workflows/trigger-buildkite-pipeline.yml
@@ -0,0 +1,134 @@
+name: Trigger Buildkite Pipeline (Pull Request)
+
+on:
+ pull_request_target:
+ branches:
+ - master
+ types:
+ - opened
+ - synchronize
+ - reopened
+ - labeled
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ${{ github.workflow }}-pr-${{ github.event.pull_request.number }}
+ cancel-in-progress: true
+
+jobs:
+ member_check:
+ runs-on: ubuntu-24.04
+ if: github.repository_owner == 'anza-xyz' && github.event.action != 'labeled'
+ outputs:
+ should_trigger: ${{ steps.check.outputs.should_trigger }}
+ permissions:
+ contents: read
+ steps:
+ - name: Check permission
+ id: check
+ env:
+ GH_TOKEN: ${{ github.token }}
+ REPO: ${{ github.repository }}
+ USERNAME: ${{ github.event.sender.login }}
+ run: |
+ ROLE_NAME=$(curl -sS -L \
+ -H "Accept: application/vnd.github+json" \
+ -H "Authorization: Bearer $GH_TOKEN" \
+ -H "X-GitHub-Api-Version: 2026-03-10" \
+ https://api.github.com/repos/$REPO/collaborators/$USERNAME/permission | jq -r ".role_name")
+
+ case "$ROLE_NAME" in
+ admin|maintain|write|triage)
+ echo "should_trigger=true" >> $GITHUB_OUTPUT
+ ;;
+ *)
+ echo "should_trigger=false" >> $GITHUB_OUTPUT
+ exit 1
+ ;;
+ esac
+
+ label_check:
+ runs-on: ubuntu-24.04
+ if: github.repository_owner == 'anza-xyz' && github.event.action == 'labeled' && github.event.label.name == 'CI'
+ outputs:
+ should_trigger: ${{ steps.check.outputs.should_trigger }}
+ permissions:
+ contents: read
+ pull-requests: write
+ steps:
+ - name: Remove CI label
+ id: check
+ env:
+ GH_TOKEN: ${{ github.token }}
+ REPO: ${{ github.repository }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ run: |
+ echo "should_trigger=true" >> $GITHUB_OUTPUT
+
+ curl -sS -X DELETE \
+ -H "Accept: application/vnd.github+json" \
+ -H "Authorization: Bearer $GH_TOKEN" \
+ "https://api.github.com/repos/$REPO/issues/$PR_NUMBER/labels/CI" \
+ || echo "CI label was already removed."
+
+ trigger:
+ runs-on: ubuntu-24.04
+ needs:
+ - member_check
+ - label_check
+ if: >-
+ always() &&
+ (needs.member_check.outputs.should_trigger == 'true' || needs.label_check.outputs.should_trigger == 'true')
+ permissions: {}
+ steps:
+ - name: Prepare Buildkite pipeline info
+ id: prepare
+ env:
+ BUILDKITE_PIPELINE: ${{ vars.BUILDKITE_PIPELINE }}
+ COMMIT: ${{ github.event.pull_request.head.sha }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ run: |
+ COMMIT_SHORT="${COMMIT:0:8}"
+ BRANCH="pull/${PR_NUMBER}/head"
+ MESSAGE="PR#${PR_NUMBER} - ${COMMIT_SHORT}"
+ BUILD_META_DATA="{\"pr_number\":\"${PR_NUMBER}\"}"
+
+ echo "branch=$BRANCH" | tee -a $GITHUB_OUTPUT
+ echo "build_meta_data=$BUILD_META_DATA" | tee -a $GITHUB_OUTPUT
+ echo "commit=$COMMIT" | tee -a $GITHUB_OUTPUT
+ echo "message=$MESSAGE" | tee -a $GITHUB_OUTPUT
+ echo "pipeline=$BUILDKITE_PIPELINE" | tee -a $GITHUB_OUTPUT
+ echo "pr_number=$PR_NUMBER" | tee -a $GITHUB_OUTPUT
+
+ - name: Trigger a Buildkite Build
+ uses: "buildkite/trigger-pipeline-action@41fd38b69189bf186cf69cf10ec807a850cae593" # v2.5.0
+ with:
+ pipeline: ${{ steps.prepare.outputs.pipeline }}
+ buildkite_api_access_token: ${{ secrets.BUILDKITE_API_ACCESS_TOKEN }}
+ branch: "${{ steps.prepare.outputs.branch }}"
+ build_meta_data: "${{ steps.prepare.outputs.build_meta_data }}"
+ commit: "${{ steps.prepare.outputs.commit }}"
+ message: "${{ steps.prepare.outputs.message }}"
+ pull_request_base_branch: "${{ github.event.pull_request.base.ref }}"
+
+ - name: Summary
+ env:
+ BRANCH: ${{ steps.prepare.outputs.branch }}
+ BUILDKITE_PIPELINE: ${{ vars.BUILDKITE_PIPELINE }}
+ COMMIT: ${{ github.event.pull_request.head.sha }}
+ MESSAGE: ${{ steps.prepare.outputs.message }}
+ PR_NUMBER: ${{ github.event.pull_request.number }}
+ run: |
+ {
+ echo "## Buildkite Pipeline Info"
+ echo ""
+ echo "| Key | Value |"
+ echo "|-----|-------|"
+ echo "| Pipeline | \`$BUILDKITE_PIPELINE\` |"
+ echo "| Branch | \`$BRANCH\` |"
+ echo "| Commit | \`$COMMIT\` |"
+ echo "| PR Number | #$PR_NUMBER |"
+ echo "| Message | $MESSAGE |"
+ } >> $GITHUB_STEP_SUMMARY
diff --git a/.github/workflows/verify-packets.yml b/.github/workflows/verify-packets.yml
deleted file mode 100644
index c348be3731a..00000000000
--- a/.github/workflows/verify-packets.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-name: Verify Packets
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
- paths:
- - .github/workflows/verify-packets.yml
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
- cancel-in-progress: true
-
-jobs:
- gossip:
- timeout-minutes: 30
- runs-on: ubuntu-22.04
- steps:
- - name: Checkout
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-
- - name: Install required packages
- run: |
- sudo apt update
- sudo apt install -y \
- libclang-dev \
- libprotobuf-dev \
- libssl-dev \
- libudev-dev \
- pkg-config \
- zlib1g-dev \
- llvm \
- clang \
- cmake \
- make \
- protobuf-compiler \
- git-lfs
-
- - name: Run packet verify
- run: |
- ./ci/test-verify-packets-gossip.sh
diff --git a/.mergify.yml b/.mergify.yml
index 6bf45241cdf..b6b1461947d 100644
--- a/.mergify.yml
+++ b/.mergify.yml
@@ -1,8 +1,10 @@
# https://doc.mergify.io/
+shared:
+ backport_assignee: &BackportAssignee
+ - "{{ merged_by|replace('mergify[bot]', label|select('equalto', 'community')|first|default(author)|replace('community', '@anza-xyz/community-pr-subscribers')) }}"
pull_request_rules:
- name: label changes from community
conditions:
- - author≠@agave-external-triage
- author≠@anza
- author≠mergify[bot]
- author≠dependabot[bot]
@@ -14,7 +16,6 @@ pull_request_rules:
- need:merge-assist
- name: request review for community changes
conditions:
- - author≠@agave-external-triage
- author≠@anza
- author≠mergify[bot]
- author≠dependabot[bot]
@@ -30,17 +31,6 @@ pull_request_rules:
request_reviews:
teams:
- "@anza-xyz/community-pr-subscribers"
- - name: label changes from agave-external-triage
- conditions:
- - author≠@anza
- - author≠mergify[bot]
- - author≠dependabot[bot]
- - author≠github-actions[bot]
- - author=@agave-external-triage
- actions:
- label:
- add:
- - need:merge-assist
- name: automatic merge (squash) on CI success
conditions:
- and:
@@ -48,38 +38,11 @@ pull_request_rules:
- status-success=ci-gate
- label=automerge
- label!=no-automerge
- - or:
- # only require docs checks if docs files changed
- - -files~=^docs/
- - status-success=build & deploy docs
- or:
- -files~=(\.rs|Cargo\.toml|Cargo\.lock|\.github/scripts/cargo-clippy-before-script\.sh|\.github/workflows/cargo\.yml)$
- or:
- check-success=clippy-nightly (macos-latest)
- check-success=clippy-nightly (macos-latest-large)
- - or:
- - -files~=(\.rs|Cargo\.toml|Cargo\.lock|cargo-build-sbf|cargo-test-sbf|ci/downstream-projects/run-spl\.sh|\.github/workflows/downstream-project-spl\.yml)$
- - and:
- - status-success=check (associated-token-account)
- - status-success=check (feature-proposal)
- - status-success=check (instruction-padding)
- - status-success=check (memo)
- - status-success=check (record)
- - status-success=check (single-pool)
- - status-success=check (slashing)
- - status-success=check (stake-pool)
- - status-success=check (token-2022)
- - status-success=test_cli (single-pool)
- - status-success=test_cli (token-2022)
- - status-success=cargo-test-sbf (associated-token-account)
- - status-success=cargo-test-sbf (feature-proposal)
- - status-success=cargo-test-sbf (instruction-padding)
- - status-success=cargo-test-sbf (memo)
- - status-success=cargo-test-sbf (record)
- - status-success=cargo-test-sbf (single-pool)
- - status-success=cargo-test-sbf (slashing)
- - status-success=cargo-test-sbf (stake-pool)
- - status-success=cargo-test-sbf (token-2022)
- or:
- -files~=(Cargo\.toml|.github/workflows/crate-check\.yml|ci/check-crates\.sh)$
- check-success=crate check
@@ -98,23 +61,22 @@ pull_request_rules:
- automerge
comment:
message: automerge label removed due to a CI failure
- - name: v3.1 feature-gate backport
+ - name: v4.0 feature-gate backport
conditions:
- - label=v3.1
+ - label=v4.0
- label=feature-gate
actions:
backport:
- assignees: &BackportAssignee
- - "{{ merged_by|replace('mergify[bot]', label|select('equalto', 'community')|first|default(author)|replace('community', '@anza-xyz/community-pr-subscribers')) }}"
+ assignees: *BackportAssignee
title: "{{ destination_branch }}: {{ title }} (backport of #{{ number }})"
ignore_conflicts: true
labels:
- feature-gate
branches:
- - v3.1
- - name: v3.1 non-feature-gate backport
+ - v4.0
+ - name: v4.0 non-feature-gate backport
conditions:
- - label=v3.1
+ - label=v4.0
- label!=feature-gate
actions:
backport:
@@ -122,10 +84,10 @@ pull_request_rules:
title: "{{ destination_branch }}: {{ title }} (backport of #{{ number }})"
ignore_conflicts: true
branches:
- - v3.1
- - name: v4.0 feature-gate backport
+ - v4.0
+ - name: v4.1 feature-gate backport
conditions:
- - label=v4.0
+ - label=v4.1
- label=feature-gate
actions:
backport:
@@ -135,10 +97,10 @@ pull_request_rules:
labels:
- feature-gate
branches:
- - v4.0
- - name: v4.0 non-feature-gate backport
+ - v4.1
+ - name: v4.1 non-feature-gate backport
conditions:
- - label=v4.0
+ - label=v4.1
- label!=feature-gate
actions:
backport:
@@ -146,10 +108,10 @@ pull_request_rules:
title: "{{ destination_branch }}: {{ title }} (backport of #{{ number }})"
ignore_conflicts: true
branches:
- - v4.0
- - name: v4.1 feature-gate backport
+ - v4.1
+ - name: v4.2 feature-gate backport
conditions:
- - label=v4.1
+ - label=v4.2
- label=feature-gate
actions:
backport:
@@ -159,10 +121,10 @@ pull_request_rules:
labels:
- feature-gate
branches:
- - v4.1
- - name: v4.1 non-feature-gate backport
+ - v4.2
+ - name: v4.2 non-feature-gate backport
conditions:
- - label=v4.1
+ - label=v4.2
- label!=feature-gate
actions:
backport:
@@ -170,13 +132,13 @@ pull_request_rules:
title: "{{ destination_branch }}: {{ title }} (backport of #{{ number }})"
ignore_conflicts: true
branches:
- - v4.1
+ - v4.2
- name: backport warning comment
conditions:
- or:
- - label=v3.1
- label=v4.0
- label=v4.1
+ - label=v4.2
actions:
comment:
message: >
@@ -200,8 +162,8 @@ pull_request_rules:
message: |
If this PR represents a change to the public RPC API:
- 1. Make sure it includes a complementary update to `rpc-client/` ([example](https://github.com/solana-labs/solana/pull/29558/files))
- 2. Open a follow-up PR to update the JavaScript client `@solana/kit` ([example](https://github.com/solana-labs/solana-web3.js/pull/2868/files))
+ 1. Make sure it includes a complementary update to `rpc-client/` ([example](https://github.com/anza-xyz/agave/pull/2036/files))
+ 2. Open a follow-up PR to update the JavaScript client `@solana/kit` ([example](https://github.com/anza-xyz/kit/pull/974/files))
Thank you for keeping the RPC clients in sync with the server API @{{author}}.
- name: Reminder to add Firedancer team to changes in `programs/`
diff --git a/CHANGELOG.md b/CHANGELOG.md
index edcf8a1498e..914f819927b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,23 +8,52 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
and follows a [Backwards Compatibility Policy](https://docs.anza.xyz/backwards-compatibility)
Release channels have their own copy of this changelog:
-* [edge - v4.2](#edge-channel)
-* [alpha - v4.1](https://github.com/anza-xyz/agave/blob/v4.1/CHANGELOG.md)
-* [beta - v4.0](https://github.com/anza-xyz/agave/blob/v4.0/CHANGELOG.md)
-* [stable - v3.1](https://github.com/anza-xyz/agave/blob/v3.1/CHANGELOG.md)
+* [edge - v4.3](#edge-channel)
+* [alpha - v4.2](https://github.com/anza-xyz/agave/blob/v4.2/CHANGELOG.md)
+* [beta - v4.1](https://github.com/anza-xyz/agave/blob/v4.1/CHANGELOG.md)
+* [stable - v4.0](https://github.com/anza-xyz/agave/blob/v4.0/CHANGELOG.md)
-## 4.2.0-Unreleased
+## 4.3.0-Unreleased
### RPC
#### Breaking
#### Changes
### Validator
#### Breaking
+#### Changes
+
+## 4.2.0
+### RPC
+#### Breaking
+* The `jsonParsed` output for confidential transfer `Deposit` (`depositConfidentialTransfer`) and `Withdraw` (`withdrawConfidentialTransfer`) instructions has been corrected. These instructions operate on a single token account, so the mislabeled `source` and `destination` fields have been replaced by a single `account` field (the `mint` field is unchanged).
+* Blockstore reward column legacy format support removed.
+ * The `Rewards` column was updated in v1.5 (Solana Labs client) to switch from
+ storing bincode serialized values to protobuf encoded values. The old bincode
+ format will no longer be supported for fallback reads as of v4.2
+#### Changes
+* Added `RpcClient::get_latest_blockhash_with_commitment_and_context`, which returns the
+ `getLatestBlockhash` response together with its context (notably `context.slot`).
+### Validator
+#### Breaking
+* XDP transmit in SKB (copy) mode is now enabled by default on Linux. The validator requires
+ `CAP_NET_ADMIN` and `CAP_NET_RAW` capabilities (plus `CAP_BPF` and `CAP_PERFMON` for
+ `--xdp-zero-copy`). Pass `--no-xdp` to fall back to UDP sockets. The XDP CPU
+ core is auto-selected to avoid overlapping the PoH core; passing `--xdp-cpu-cores`
+ with a core that conflicts with the PoH core is an error.
#### Deprecations
* `--accounts-db-access-storages-method` is now deprecated and a no-op (the `mmap` value was
deprecated in v4.0.0; mmap mode has now been removed entirely). The flag is still accepted for
backward compatibility, but account storages are always accessed via file I/O.
+* `--accounts-db-cache-limit-mb` is now deprecated. Use `--accounts-db-write-cache-limit` instead.
+* `--experimental-poh-pinned-cpu-core` is now deprecated. Use `--poh-pinned-cpu-core` instead.
+#### Changes
+* Turbine shred ingestion now rejects shreds more than half an epoch in the future (previously up to 2 full epochs ahead was accepted).
+* When XDP is enabled, gossip egress does not support private and loopback addresses. Operators running with `--allow-private-addr` must also pass `--no-xdp`.
+### CLI
+#### Breaking
#### Changes
+* `vote-account` supports Alpenglow and as such `vote-account --output json` breaks compatibility with older versions.
+* Support Keystone hardware wallets using `usb://keystone`
## 4.1.0
### RPC
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index badc9364006..a33880f52c1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -71,7 +71,7 @@ are not present, then write them.
All changes should be benchmarked and evidence posted to the PR.
Microbenchmark results along with mainnet/testnet validator timings or profiles,
-bench-tps or other relevant integration benchmarks. Any code that adds complexity
+and relevant integration benchmarks. Any code that adds complexity
should be justified by a comisurate improvement in speed.
All changes should be reviewed by subject matter experts.
@@ -381,12 +381,6 @@ confused with 3-letter acronyms.
## Design Proposals
-This Agave validator client's architecture is described by docs generated from markdown files in the `docs/src/`
-directory and viewable on the official [Agave Validator Client](https://docs.anza.xyz) documentation website.
-
-Current design proposals may be viewed on the docs site:
-
-1. [Accepted Proposals](https://docs.anza.xyz/proposals/accepted-design-proposals)
-2. [Implemented Proposals](https://docs.anza.xyz/implemented-proposals/implemented-proposals)
-
-New design proposals should follow this guide on [how to submit a design proposal](./docs/src/proposals.md#submit-a-design-proposal).
+Design proposals are now tracked as Solana Improvement Documents (SIMDs) in the
+[solana-foundation/solana-improvement-documents](https://github.com/solana-foundation/solana-improvement-documents)
+repository.
diff --git a/Cargo.lock b/Cargo.lock
index 7956427ebf0..97f36a651cc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -18,6 +18,12 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
[[package]]
name = "aead"
version = "0.5.2"
@@ -56,7 +62,7 @@ dependencies = [
[[package]]
name = "agave-banking-stage-ingress-types"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"crossbeam-channel",
"solana-perf",
@@ -64,7 +70,7 @@ dependencies = [
[[package]]
name = "agave-bls-cert-verify"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-bls-cert-verify",
"agave-votor",
@@ -72,23 +78,70 @@ dependencies = [
"bitvec",
"criterion",
"qualifier_attr",
+ "rand 0.9.4",
"rayon",
"solana-bls-signatures",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-signer-store",
"thiserror 2.0.18",
"wincode",
]
+[[package]]
+name = "agave-bls-sigverify"
+version = "4.3.0-alpha.0"
+dependencies = [
+ "agave-bls-cert-verify",
+ "agave-bls-sigverify",
+ "agave-logger",
+ "agave-math-utils",
+ "agave-votor",
+ "agave-votor-messages",
+ "bincode",
+ "bitvec",
+ "criterion",
+ "crossbeam-channel",
+ "log",
+ "parking_lot 0.12.3",
+ "qualifier_attr",
+ "rayon",
+ "solana-bls-signatures",
+ "solana-clock",
+ "solana-epoch-schedule",
+ "solana-gossip",
+ "solana-hash 4.4.0",
+ "solana-keypair",
+ "solana-ledger",
+ "solana-measure",
+ "solana-metrics",
+ "solana-net-utils",
+ "solana-packet 4.1.0",
+ "solana-perf",
+ "solana-pubkey 4.2.0",
+ "solana-runtime",
+ "solana-signer",
+ "solana-signer-store",
+ "solana-streamer",
+ "thiserror 2.0.18",
+ "wincode",
+]
+
+[[package]]
+name = "agave-cpu-utils"
+version = "4.3.0-alpha.0"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "agave-feature-set"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"ahash 0.8.12",
"solana-epoch-schedule",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-pubkey 4.2.0",
"solana-sha256-hasher",
@@ -97,7 +150,7 @@ dependencies = [
[[package]]
name = "agave-fs"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-io-uring",
"io-uring",
@@ -113,11 +166,11 @@ dependencies = [
[[package]]
name = "agave-geyser-plugin-interface"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"log",
"solana-clock",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-message",
"solana-signature",
"solana-transaction",
@@ -127,12 +180,10 @@ dependencies = [
[[package]]
name = "agave-install"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
- "bincode",
"bzip2",
- "chrono",
"clap 2.33.3",
"console 0.16.3",
"crossbeam-channel",
@@ -145,17 +196,8 @@ dependencies = [
"semver 1.0.28",
"serde",
"serde_yaml",
- "solana-clap-utils",
- "solana-config-interface",
- "solana-hash 4.3.0",
- "solana-keypair",
- "solana-message",
- "solana-pubkey 4.2.0",
- "solana-rpc-client",
+ "solana-hash 4.4.0",
"solana-sha256-hasher",
- "solana-signature",
- "solana-signer",
- "solana-transaction",
"solana-version",
"tar",
"tempfile",
@@ -166,7 +208,7 @@ dependencies = [
[[package]]
name = "agave-io-uring"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"io-uring",
"libc",
@@ -177,7 +219,7 @@ dependencies = [
[[package]]
name = "agave-logger"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"env_logger",
"libc",
@@ -187,7 +229,7 @@ dependencies = [
[[package]]
name = "agave-math-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-math-utils",
"num-traits",
@@ -197,7 +239,7 @@ dependencies = [
[[package]]
name = "agave-precompiles"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
@@ -222,19 +264,19 @@ dependencies = [
[[package]]
name = "agave-random"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"rand 0.9.4",
"rand_chacha 0.9.0",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-sha256-hasher",
"test-case",
]
[[package]]
name = "agave-reserved-account-keys"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"solana-frozen-abi",
@@ -247,11 +289,11 @@ dependencies = [
[[package]]
name = "agave-scheduler-bindings"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
[[package]]
name = "agave-scheduling-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-scheduler-bindings",
@@ -264,6 +306,7 @@ dependencies = [
"slotmap",
"solana-fee",
"solana-pubkey 4.2.0",
+ "solana-runtime-transaction",
"solana-transaction",
"solana-transaction-error",
"tempfile",
@@ -273,7 +316,7 @@ dependencies = [
[[package]]
name = "agave-snapshots"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-fs",
"agave-logger",
@@ -289,7 +332,7 @@ dependencies = [
"solana-accounts-db",
"solana-clock",
"solana-genesis-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-lattice-hash",
"solana-measure",
"solana-metrics",
@@ -304,7 +347,7 @@ dependencies = [
[[package]]
name = "agave-store-histogram"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"clap 2.33.3",
"solana-version",
@@ -312,17 +355,16 @@ dependencies = [
[[package]]
name = "agave-transaction-view"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-transaction-view",
"bincode",
"criterion",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
"solana-packet 4.1.0",
- "solana-program-runtime",
"solana-pubkey 4.2.0",
"solana-sdk-ids",
"solana-short-vec",
@@ -331,25 +373,26 @@ dependencies = [
"solana-svm-transaction",
"solana-system-interface 3.2.0",
"solana-transaction",
- "solana-transaction-context",
"wincode",
]
[[package]]
name = "agave-validator"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-cpu-utils",
+ "agave-feature-set",
"agave-logger",
"agave-snapshots",
"agave-votor",
"agave-xdp",
"assert_cmd",
"assert_matches",
+ "bytesize",
"caps",
"chrono",
"clap 2.33.3",
"console 0.16.3",
- "core_affinity",
"crossbeam-channel",
"fd-lock",
"indicatif",
@@ -370,7 +413,7 @@ dependencies = [
"serde",
"serde_json",
"serde_yaml",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-accounts-db",
"solana-clap-utils",
@@ -386,7 +429,7 @@ dependencies = [
"solana-genesis-utils",
"solana-geyser-plugin-manager",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-inflation",
"solana-keypair",
"solana-ledger",
@@ -429,25 +472,21 @@ dependencies = [
[[package]]
name = "agave-votor"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-bls-sigverify",
"agave-logger",
"agave-math-utils",
- "agave-votor",
"agave-votor-messages",
- "bincode",
"bitvec",
"crossbeam-channel",
"itertools 0.14.0",
"lazy-lru",
"log",
"parking_lot 0.12.3",
- "qualifier_attr",
"rand 0.9.4",
"serde",
"serde_bytes",
- "solana-accounts-db",
- "solana-bloom",
"solana-bls-signatures",
"solana-client",
"solana-clock",
@@ -456,8 +495,9 @@ dependencies = [
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
+ "solana-leader-schedule",
"solana-ledger",
"solana-measure",
"solana-metrics",
@@ -466,7 +506,6 @@ dependencies = [
"solana-pubkey 4.2.0",
"solana-rpc",
"solana-runtime",
- "solana-sdk-ids",
"solana-signature",
"solana-signer",
"solana-signer-store",
@@ -474,8 +513,6 @@ dependencies = [
"solana-time-utils",
"solana-transaction",
"solana-transaction-error",
- "solana-vote",
- "solana-vote-program",
"tempfile",
"test-case",
"thiserror 2.0.18",
@@ -485,19 +522,20 @@ dependencies = [
[[package]]
name = "agave-votor-messages"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-votor-messages",
+ "crossbeam-channel",
"log",
"serde",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-bls-signatures",
"solana-clock",
"solana-epoch-schedule",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-pubkey 4.2.0",
"solana-short-vec",
"solana-signer-store",
@@ -508,8 +546,9 @@ dependencies = [
[[package]]
name = "agave-watchtower"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-feature-set",
"agave-logger",
"clap 2.33.3",
"humantime",
@@ -517,7 +556,7 @@ dependencies = [
"solana-clap-utils",
"solana-cli-config",
"solana-cli-output",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-metrics",
"solana-native-token",
"solana-notifier",
@@ -525,28 +564,30 @@ dependencies = [
"solana-rpc-client",
"solana-rpc-client-api",
"solana-version",
+ "solana-vote-interface",
]
[[package]]
name = "agave-xdp"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-cpu-utils",
"agave-xdp-ebpf",
"arc-swap",
"arrayvec",
"aya",
"bytes",
"caps",
- "core_affinity",
"crossbeam-channel",
"libc",
"log",
+ "nix",
"thiserror 2.0.18",
]
[[package]]
name = "agave-xdp-ebpf"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"aya",
"aya-ebpf",
@@ -1005,9 +1046,9 @@ checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
[[package]]
name = "arrayvec"
-version = "0.7.6"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
+checksum = "f02882884d3e1bc524fb12c79f107f6ad0e1cfd498c536ffb494301740995dfe"
[[package]]
name = "ascii"
@@ -1131,7 +1172,7 @@ checksum = "16e2cdb6d5ed835199484bb92bb8b3edd526effe995c61732580439c1a67e2e9"
dependencies = [
"base64 0.22.1",
"flate2",
- "http 1.4.0",
+ "http 1.4.2",
"log",
"native-tls",
"serde",
@@ -1164,7 +1205,7 @@ dependencies = [
"axum-core",
"bytes",
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"http-body-util",
"itoa",
@@ -1188,7 +1229,7 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
dependencies = [
"bytes",
"futures-core",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"http-body-util",
"mime",
@@ -1200,19 +1241,22 @@ dependencies = [
[[package]]
name = "aya"
-version = "0.13.1"
+version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d18bc4e506fbb85ab7392ed993a7db4d1a452c71b75a246af4a80ab8c9d2dd50"
+checksum = "66e644424fada9fff4fdc63848db1732fb69b626e8328202ef55c03df1f4d939"
dependencies = [
+ "anyhow",
"assert_matches",
"aya-obj",
- "bitflags 2.11.1",
- "bytes",
+ "bitflags 2.13.0",
+ "hashbrown 0.17.0",
"libc",
"log",
+ "nix",
"object",
"once_cell",
- "thiserror 1.0.69",
+ "scopeguard",
+ "thiserror 2.0.18",
]
[[package]]
@@ -1256,16 +1300,14 @@ dependencies = [
[[package]]
name = "aya-obj"
-version = "0.2.1"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c51b96c5a8ed8705b40d655273bc4212cbbf38d4e3be2788f36306f154523ec7"
+checksum = "8c76b9c75d9cdc155ff8f6a06d61e873f67bf47be8cfa92a3b5aaea43f4b4077"
dependencies = [
"bytes",
- "core-error",
- "hashbrown 0.15.1",
"log",
"object",
- "thiserror 1.0.69",
+ "thiserror 2.0.18",
]
[[package]]
@@ -1313,18 +1355,31 @@ version = "0.72.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"cexpr",
"clang-sys",
"itertools 0.13.0",
"proc-macro2",
"quote",
"regex",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"shlex",
"syn 2.0.117",
]
+[[package]]
+name = "bip39"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90dbd31c98227229239363921e60fcf5e558e43ec69094d46fc4996f08d1d5bc"
+dependencies = [
+ "bitcoin_hashes 0.14.100",
+ "rand 0.8.6",
+ "rand_core 0.6.4",
+ "serde",
+ "unicode-normalization",
+]
+
[[package]]
name = "bit-set"
version = "0.8.0"
@@ -1340,6 +1395,30 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
+[[package]]
+name = "bitcoin-private"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73290177011694f38ec25e165d0387ab7ea749a4b81cd4c80dae5988229f7a57"
+
+[[package]]
+name = "bitcoin_hashes"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d7066118b13d4b20b23645932dfb3a81ce7e29f95726c2036fa33cd7b092501"
+dependencies = [
+ "bitcoin-private",
+]
+
+[[package]]
+name = "bitcoin_hashes"
+version = "0.14.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9901a56e133a1fc86eeb1113e2591f45f4682451ca893bff494d2f88918e3f"
+dependencies = [
+ "hex-conservative",
+]
+
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -1348,9 +1427,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.11.1"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
+checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
dependencies = [
"serde_core",
]
@@ -1372,9 +1451,9 @@ checksum = "a1d084b0137aaa901caf9f1e8b21daa6aa24d41cd806e111335541eff9683bd6"
[[package]]
name = "bitvec"
-version = "1.0.1"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+checksum = "ddcec3d12c579d40898fe0a9a358a803c23e9c52ca3c425707f81c9436211837"
dependencies = [
"funty",
"radium",
@@ -1464,9 +1543,9 @@ dependencies = [
[[package]]
name = "borsh"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a"
+checksum = "2f3f6da4992df95bbcd9af42a6c7dcb994498fc9048230405f3b36ff7cd3f145"
dependencies = [
"borsh-derive",
"bytes",
@@ -1475,9 +1554,9 @@ dependencies = [
[[package]]
name = "borsh-derive"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59"
+checksum = "3ae8fb4fb5740e4b2c4884ff95f5f32f5e8479db1e8fd8eb49ddbe09eb09bb7c"
dependencies = [
"once_cell",
"proc-macro-crate 3.1.0",
@@ -1519,6 +1598,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
dependencies = [
+ "sha2 0.10.9",
"tinyvec",
]
@@ -1602,18 +1682,18 @@ dependencies = [
[[package]]
name = "bytes"
-version = "1.11.1"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
+checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
dependencies = [
"serde",
]
[[package]]
name = "bytesize"
-version = "1.1.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c58ec36aac5066d5ca17df51b3e70279f5670a72102f5752cb7e7c856adfc70"
+checksum = "49e78e506b9d7633710dab98996f22f95f3d0f488e8f1aa162830556ed9fc14d"
[[package]]
name = "bzip2"
@@ -1708,9 +1788,9 @@ dependencies = [
[[package]]
name = "chrono"
-version = "0.4.44"
+version = "0.4.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
+checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
dependencies = [
"iana-time-zone",
"js-sys",
@@ -1830,7 +1910,7 @@ version = "4.5.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed"
dependencies = [
- "heck",
+ "heck 0.5.0",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -1968,15 +2048,6 @@ dependencies = [
"unicode-segmentation",
]
-[[package]]
-name = "core-error"
-version = "0.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efcdb2972eb64230b4c50646d8498ff73f5128d196a90c7236eec4cbe8619b8f"
-dependencies = [
- "version_check",
-]
-
[[package]]
name = "core-foundation"
version = "0.9.4"
@@ -2003,17 +2074,6 @@ version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
-[[package]]
-name = "core_affinity"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342"
-dependencies = [
- "libc",
- "num_cpus",
- "winapi",
-]
-
[[package]]
name = "cpufeatures"
version = "0.2.17"
@@ -2032,6 +2092,21 @@ dependencies = [
"libc",
]
+[[package]]
+name = "crc"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
+
[[package]]
name = "crc32fast"
version = "1.2.1"
@@ -2110,12 +2185,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.18"
+version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
-dependencies = [
- "cfg-if 1.0.4",
-]
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crunchy"
@@ -2257,38 +2329,14 @@ dependencies = [
"syn 2.0.117",
]
-[[package]]
-name = "darling"
-version = "0.21.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0"
-dependencies = [
- "darling_core 0.21.3",
- "darling_macro 0.21.3",
-]
-
[[package]]
name = "darling"
version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d"
dependencies = [
- "darling_core 0.23.0",
- "darling_macro 0.23.0",
-]
-
-[[package]]
-name = "darling_core"
-version = "0.21.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4"
-dependencies = [
- "fnv",
- "ident_case",
- "proc-macro2",
- "quote",
- "strsim 0.11.1",
- "syn 2.0.117",
+ "darling_core",
+ "darling_macro",
]
[[package]]
@@ -2306,25 +2354,20 @@ dependencies = [
[[package]]
name = "darling_macro"
-version = "0.21.3"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
+checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
dependencies = [
- "darling_core 0.21.3",
+ "darling_core",
"quote",
"syn 2.0.117",
]
[[package]]
-name = "darling_macro"
-version = "0.23.0"
+name = "dary_heap"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
-dependencies = [
- "darling_core 0.23.0",
- "quote",
- "syn 2.0.117",
-]
+checksum = "8b1e3a325bc115f096c8b77bbf027a7c2592230e70be2d985be950d3d5e60ebe"
[[package]]
name = "dashmap"
@@ -2549,7 +2592,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"block2",
"libc",
"objc2",
@@ -2566,29 +2609,6 @@ dependencies = [
"syn 1.0.109",
]
-[[package]]
-name = "dlopen2"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4"
-dependencies = [
- "dlopen2_derive",
- "libc",
- "once_cell",
- "winapi",
-]
-
-[[package]]
-name = "dlopen2_derive"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.117",
-]
-
[[package]]
name = "downcast"
version = "0.11.0"
@@ -2736,7 +2756,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
- "heck",
+ "heck 0.5.0",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -2969,6 +2989,12 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "059c31d7d36c43fe39d89e55711858b4da8be7eb6dabac23c7289b1a19489406"
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
[[package]]
name = "fixedbitset"
version = "0.5.7"
@@ -3176,7 +3202,7 @@ dependencies = [
[[package]]
name = "gen-syscall-list"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"regex",
]
@@ -3314,7 +3340,7 @@ dependencies = [
"fnv",
"futures-core",
"futures-sink",
- "http 1.4.0",
+ "http 1.4.2",
"indexmap 2.14.0",
"slab",
"tokio",
@@ -3372,10 +3398,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
dependencies = [
"allocator-api2",
- "equivalent",
"foldhash 0.1.5",
]
+[[package]]
+name = "hashbrown"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
+dependencies = [
+ "allocator-api2",
+ "equivalent",
+ "foldhash 0.2.0",
+]
+
[[package]]
name = "hashbrown"
version = "0.17.0"
@@ -3387,6 +3423,12 @@ dependencies = [
"foldhash 0.2.0",
]
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
[[package]]
name = "heck"
version = "0.5.0"
@@ -3405,6 +3447,15 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+[[package]]
+name = "hex-conservative"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f"
+dependencies = [
+ "arrayvec",
+]
+
[[package]]
name = "hidapi"
version = "2.6.6"
@@ -3454,6 +3505,15 @@ dependencies = [
"hmac 0.8.1",
]
+[[package]]
+name = "home"
+version = "0.5.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d"
+dependencies = [
+ "windows-sys 0.61.0",
+]
+
[[package]]
name = "http"
version = "0.2.12"
@@ -3467,9 +3527,9 @@ dependencies = [
[[package]]
name = "http"
-version = "1.4.0"
+version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a"
+checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425"
dependencies = [
"bytes",
"itoa",
@@ -3493,7 +3553,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
- "http 1.4.0",
+ "http 1.4.2",
]
[[package]]
@@ -3504,7 +3564,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"pin-project-lite",
]
@@ -3576,7 +3636,7 @@ dependencies = [
"futures-channel",
"futures-core",
"h2",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"httparse",
"httpdate",
@@ -3595,7 +3655,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
dependencies = [
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"hyper 1.8.1",
"hyper-util",
"rustls",
@@ -3646,7 +3706,7 @@ dependencies = [
"bytes",
"futures-channel",
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"hyper 1.8.1",
"ipnet",
@@ -3953,7 +4013,7 @@ version = "0.7.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d09b98f7eace8982db770e4408e7470b028ce513ac28fecdc6bf4c30fe92b62"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"cfg-if 1.0.4",
"libc",
]
@@ -4240,6 +4300,19 @@ dependencies = [
"cpufeatures 0.2.17",
]
+[[package]]
+name = "keystone-ur"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a08a7e0ccd113dac19485c5c0fe87c70b663f896c48e4493814e446175078d4"
+dependencies = [
+ "bitcoin_hashes 0.12.0",
+ "crc",
+ "minicbor",
+ "phf",
+ "rand_xoshiro 0.6.0",
+]
+
[[package]]
name = "konst"
version = "0.2.20"
@@ -4282,6 +4355,30 @@ version = "0.2.186"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+[[package]]
+name = "libflate"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85f7ef5c7e3c2ed51f0fbc40e016c66558b699f16593521f30b98713bbb99cb8"
+dependencies = [
+ "adler32",
+ "crc32fast",
+ "dary_heap",
+ "libflate_lz77",
+ "no_std_io2",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff7a10e427698aef6eef269482776debfef63384d30f13aad39a1a95e0e098fd"
+dependencies = [
+ "hashbrown 0.16.1",
+ "no_std_io2",
+ "rle-decode-fast",
+]
+
[[package]]
name = "libloading"
version = "0.9.0"
@@ -4437,9 +4534,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.29"
+version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
+checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad"
[[package]]
name = "lru"
@@ -4519,9 +4616,9 @@ dependencies = [
[[package]]
name = "memmap2"
-version = "0.9.10"
+version = "0.9.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "714098028fe011992e1c3962653c96b2d578c4b4bce9036e15ff220319b1e0e3"
+checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0"
dependencies = [
"libc",
]
@@ -4568,6 +4665,26 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2687e6cf9c00f48e9284cf9fd15f2ef341d03cc7743abf9df4c5f07fdee50b18"
+[[package]]
+name = "minicbor"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7005aaf257a59ff4de471a9d5538ec868a21586534fff7f85dd97d4043a6139"
+dependencies = [
+ "minicbor-derive",
+]
+
+[[package]]
+name = "minicbor-derive"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1154809406efdb7982841adb6311b3d095b46f78342dd646736122fe6b19e267"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
[[package]]
name = "minimal-lexical"
version = "0.1.4"
@@ -4683,13 +4800,22 @@ version = "0.31.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"cfg-if 1.0.4",
"cfg_aliases",
"libc",
"memoffset 0.9.1",
]
+[[package]]
+name = "no_std_io2"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "418abd1b6d34fbf6cae440dc874771b0525a604428704c76e48b29a5e67b8003"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "nom"
version = "7.0.0"
@@ -4808,6 +4934,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
+ "libm",
]
[[package]]
@@ -4859,12 +4986,12 @@ checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
[[package]]
name = "object"
-version = "0.36.7"
+version = "0.39.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+checksum = "2e5a6c098c7a3b6547378093f5cc30bc54fd361ce711e05293a5cc589562739b"
dependencies = [
"crc32fast",
- "hashbrown 0.15.1",
+ "hashbrown 0.17.0",
"indexmap 2.14.0",
"memchr",
]
@@ -4898,11 +5025,11 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]]
name = "openssl"
-version = "0.10.80"
+version = "0.10.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967"
+checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"cfg-if 1.0.4",
"foreign-types",
"libc",
@@ -4938,9 +5065,9 @@ dependencies = [
[[package]]
name = "openssl-sys"
-version = "0.9.116"
+version = "0.9.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4"
+checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695"
dependencies = [
"cc",
"libc",
@@ -5075,9 +5202,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "pastey"
-version = "0.2.1"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b867cad97c0791bbd3aaa6472142568c6c9e8f71937e98379f584cfb0cf35bec"
+checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4"
[[package]]
name = "pbkdf2"
@@ -5088,16 +5215,6 @@ dependencies = [
"digest 0.10.7",
]
-[[package]]
-name = "pbkdf2"
-version = "0.12.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
-dependencies = [
- "digest 0.10.7",
- "hmac 0.12.1",
-]
-
[[package]]
name = "pcap-file"
version = "2.0.0"
@@ -5148,17 +5265,69 @@ dependencies = [
"ucd-trie",
]
+[[package]]
+name = "petgraph"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
+dependencies = [
+ "fixedbitset 0.4.2",
+ "indexmap 2.14.0",
+]
+
[[package]]
name = "petgraph"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
dependencies = [
- "fixedbitset",
+ "fixedbitset 0.5.7",
"hashbrown 0.15.1",
"indexmap 2.14.0",
]
+[[package]]
+name = "phf"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.6",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+dependencies = [
+ "siphasher 1.0.2",
+]
+
[[package]]
name = "pickledb"
version = "0.5.1"
@@ -5330,6 +5499,16 @@ dependencies = [
"yansi",
]
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
[[package]]
name = "prettyplease"
version = "0.2.37"
@@ -5408,7 +5587,7 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744"
dependencies = [
"bit-set",
"bit-vec",
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"num-traits",
"rand 0.9.4",
"rand_chacha 0.9.0",
@@ -5431,28 +5610,50 @@ dependencies = [
[[package]]
name = "prost"
-version = "0.14.3"
+version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
+checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1"
dependencies = [
"bytes",
- "prost-derive 0.14.3",
+ "prost-derive 0.14.4",
]
[[package]]
name = "prost-build"
-version = "0.14.3"
+version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
dependencies = [
- "heck",
+ "bytes",
+ "heck 0.4.1",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph 0.6.5",
+ "prettyplease 0.1.25",
+ "prost 0.11.9",
+ "prost-types 0.11.9",
+ "regex",
+ "syn 1.0.109",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042"
+dependencies = [
+ "heck 0.5.0",
"itertools 0.14.0",
"log",
"multimap",
- "petgraph",
- "prettyplease",
- "prost 0.14.3",
- "prost-types",
+ "petgraph 0.8.3",
+ "prettyplease 0.2.37",
+ "prost 0.14.4",
+ "prost-types 0.14.4",
"pulldown-cmark",
"pulldown-cmark-to-cmark",
"regex",
@@ -5475,9 +5676,9 @@ dependencies = [
[[package]]
name = "prost-derive"
-version = "0.14.3"
+version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
+checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf"
dependencies = [
"anyhow",
"itertools 0.14.0",
@@ -5488,16 +5689,25 @@ dependencies = [
[[package]]
name = "prost-types"
-version = "0.14.3"
+version = "0.11.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
dependencies = [
- "prost 0.14.3",
+ "prost 0.11.9",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a"
+dependencies = [
+ "prost 0.14.4",
]
[[package]]
name = "proto"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"protobuf-src",
"tonic-prost-build",
@@ -5534,9 +5744,9 @@ dependencies = [
[[package]]
name = "protosol"
-version = "6.1.0"
+version = "9.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acef24e715f0ce9ac6491004da1c35c919c60517f976f61e0f05f34d22e873ec"
+checksum = "e19fd23beba10243272008acfa690c6cda43efed0fd23e3fa9c9dc6e1a989848"
dependencies = [
"prost 0.11.9",
]
@@ -5547,7 +5757,7 @@ version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83c41efbf8f90ac44de7f3a868f0867851d261b56291732d0cbf7cceaaeb55a6"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"memchr",
"unicase",
]
@@ -5589,16 +5799,16 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]]
name = "quinn"
-version = "0.11.9"
+version = "0.11.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20"
+checksum = "0c1a41e437b6bbd489372cd4971de128e85c855f56c57f283d20ff016cf7c0a8"
dependencies = [
"bytes",
"cfg_aliases",
"pin-project-lite",
"quinn-proto",
"quinn-udp",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"rustls",
"socket2 0.6.3",
"thiserror 2.0.18",
@@ -5609,9 +5819,9 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.14"
+version = "0.11.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
+checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e"
dependencies = [
"bytes",
"fastbloom",
@@ -5619,7 +5829,7 @@ dependencies = [
"lru-slab",
"rand 0.9.4",
"ring",
- "rustc-hash 2.1.1",
+ "rustc-hash",
"rustls",
"rustls-pki-types",
"rustls-platform-verifier",
@@ -5831,7 +6041,7 @@ dependencies = [
[[package]]
name = "rbpf-cli"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
[[package]]
name = "redox_syscall"
@@ -5878,9 +6088,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.12.3"
+version = "1.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
+checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
dependencies = [
"aho-corasick 1.0.1",
"memchr",
@@ -5907,9 +6117,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.8.5"
+version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
[[package]]
name = "reqwest"
@@ -5922,7 +6132,7 @@ dependencies = [
"futures-channel",
"futures-core",
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"http-body-util",
"hyper 1.8.1",
@@ -5963,7 +6173,7 @@ dependencies = [
"futures-channel",
"futures-core",
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"http-body-util",
"hyper 1.8.1",
@@ -5997,7 +6207,7 @@ checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e"
dependencies = [
"anyhow",
"async-trait",
- "http 1.4.0",
+ "http 1.4.2",
"reqwest 0.12.28",
"serde",
"thiserror 1.0.69",
@@ -6028,6 +6238,12 @@ dependencies = [
"windows-sys 0.52.0",
]
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
[[package]]
name = "rocksdb"
version = "0.24.0"
@@ -6049,9 +6265,9 @@ dependencies = [
[[package]]
name = "rpassword"
-version = "7.5.2"
+version = "7.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ac5b223d9738ef56e0b98305410be40fa0941bf6036c56f1506751e43552d64"
+checksum = "2da316a15f47e3d053de9cb2c439650bd8fa4aaeb9365f2e5f27f492ff73c196"
dependencies = [
"libc",
"rtoolbox",
@@ -6094,12 +6310,6 @@ version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
-[[package]]
-name = "rustc-hash"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
[[package]]
name = "rustc-hash"
version = "2.1.1"
@@ -6139,7 +6349,7 @@ version = "0.38.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"errno",
"libc",
"linux-raw-sys 0.4.14",
@@ -6152,7 +6362,7 @@ version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"errno",
"libc",
"linux-raw-sys 0.12.1",
@@ -6161,9 +6371,9 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.23.40"
+version = "0.23.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b"
+checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f"
dependencies = [
"log",
"once_cell",
@@ -6276,15 +6486,6 @@ dependencies = [
"winapi-util",
]
-[[package]]
-name = "scc"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc"
-dependencies = [
- "sdd",
-]
-
[[package]]
name = "schannel"
version = "0.1.19"
@@ -6307,12 +6508,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
-[[package]]
-name = "sdd"
-version = "3.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca"
-
[[package]]
name = "sec1"
version = "0.7.3"
@@ -6333,7 +6528,7 @@ version = "2.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
@@ -6346,7 +6541,7 @@ version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"core-foundation 0.10.0",
"core-foundation-sys",
"libc",
@@ -6447,9 +6642,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.149"
+version = "1.0.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
+checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
dependencies = [
"itoa",
"memchr",
@@ -6472,9 +6667,9 @@ dependencies = [
[[package]]
name = "serde_with"
-version = "3.20.0"
+version = "3.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2"
+checksum = "76a5c54c7310e7b8b9577c286d7e399ddd876c3e12b3ed917a8aabc4b96e9e8c"
dependencies = [
"serde_core",
"serde_with_macros",
@@ -6482,11 +6677,11 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.20.0"
+version = "3.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac"
+checksum = "84d57bc0c8b9a17920c178daa6bb924850d54a9c97ab45194bb8c17ad66bb660"
dependencies = [
- "darling 0.23.0",
+ "darling",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -6507,24 +6702,23 @@ dependencies = [
[[package]]
name = "serial_test"
-version = "3.4.0"
+version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "911bd979bf1070a3f3aa7b691a3b3e9968f339ceeec89e08c280a8a22207a32f"
+checksum = "699f4197115b8a7e7ff19c9a315a4bd6fffec26cc4626ef45ecaea389e081c6d"
dependencies = [
"futures-executor",
"futures-util",
"log",
"once_cell",
"parking_lot 0.12.3",
- "scc",
"serial_test_derive",
]
[[package]]
name = "serial_test_derive"
-version = "3.4.0"
+version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a7d91949b85b0d2fb687445e448b40d322b6b3e4af6b44a29b21d9a5f33e6d9"
+checksum = "94e153fc76e1c6a068703d6d29c508a0b15c061c4b7e43da59cc097bc342673c"
dependencies = [
"proc-macro2",
"quote",
@@ -6718,9 +6912,9 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.15.1"
+version = "1.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
+checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
dependencies = [
"serde",
]
@@ -6791,9 +6985,9 @@ dependencies = [
[[package]]
name = "solana-account"
-version = "4.3.0"
+version = "4.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87c1b95bd432efb92837bc38001365e5acb5c0175b199bc447b08a8c320ecf6c"
+checksum = "385cad928d576683db3afef1b88d00a31a7126cc9f6f3f0c9f6b2d181437f53c"
dependencies = [
"bincode",
"qualifier_attr",
@@ -6812,7 +7006,7 @@ dependencies = [
[[package]]
name = "solana-account-decoder"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"Inflector",
"assert_matches",
@@ -6822,14 +7016,14 @@ dependencies = [
"bv",
"serde",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder-client-types",
"solana-address-lookup-table-interface",
"solana-clock",
"solana-config-interface",
"solana-epoch-schedule",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-loader-v3-interface",
"solana-nonce",
@@ -6843,6 +7037,7 @@ dependencies = [
"solana-stake-interface",
"solana-sysvar",
"solana-vote-interface",
+ "solana-zk-sdk-pod",
"spl-generic-token",
"spl-pod",
"spl-token-2022-interface",
@@ -6850,18 +7045,19 @@ dependencies = [
"spl-token-interface",
"spl-token-metadata-interface",
"thiserror 2.0.18",
+ "wincode",
"zstd",
]
[[package]]
name = "solana-account-decoder-client-types"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"base64 0.22.1",
"bs58",
"serde",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-pubkey 4.2.0",
"zstd",
]
@@ -6874,14 +7070,14 @@ checksum = "a9cf16495d9eb53e3d04e72366a33bb1c20c24e78c171d8b8f5978357b63ae95"
dependencies = [
"bincode",
"serde_core",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-program-error",
"solana-program-memory",
]
[[package]]
name = "solana-accounts-cluster-bench"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"clap 2.33.3",
@@ -6897,7 +7093,7 @@ dependencies = [
"solana-core",
"solana-faucet",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-local-cluster",
@@ -6925,7 +7121,7 @@ dependencies = [
[[package]]
name = "solana-accounts-db"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-fs",
"agave-logger",
@@ -6950,7 +7146,7 @@ dependencies = [
"serde",
"serde_bytes",
"smallvec",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-accounts-db",
"solana-address-lookup-table-interface",
"solana-bucket-map",
@@ -6959,7 +7155,7 @@ dependencies = [
"solana-fee-calculator",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-lattice-hash",
@@ -7002,14 +7198,14 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2ecac8e1b7f74c2baa9e774c42817e3e75b20787134b76cc4d45e8a604488f5"
dependencies = [
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
]
[[package]]
name = "solana-address"
-version = "2.6.0"
+version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1384b52c435a750cc9c538760fc7bb472fd78e65a9900a2d07312c5bb335b72"
+checksum = "39c93e262f671bf402e1040e4a7e40b05d81da5956c7681948c975a0997517bb"
dependencies = [
"arbitrary",
"borsh",
@@ -7049,6 +7245,7 @@ dependencies = [
"solana-pubkey 4.2.0",
"solana-sdk-ids",
"solana-slot-hashes",
+ "wincode",
]
[[package]]
@@ -7062,16 +7259,16 @@ dependencies = [
[[package]]
name = "solana-banks-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"borsh",
"futures 0.3.32",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-banks-interface",
"solana-banks-server",
"solana-clock",
"solana-commitment-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-message",
"solana-program-pack",
"solana-pubkey 4.2.0",
@@ -7092,13 +7289,13 @@ dependencies = [
[[package]]
name = "solana-banks-interface"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"serde",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-clock",
"solana-commitment-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-message",
"solana-pubkey 4.2.0",
"solana-signature",
@@ -7110,17 +7307,17 @@ dependencies = [
[[package]]
name = "solana-banks-server"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"bincode",
"crossbeam-channel",
"futures 0.3.32",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-banks-interface",
"solana-clock",
"solana-commitment-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-message",
"solana-net-utils",
"solana-pubkey 4.2.0",
@@ -7166,14 +7363,15 @@ checksum = "7116e1d942a2432ca3f514625104757ab8a56233787e95144c93950029e31176"
dependencies = [
"blake3",
"solana-define-syscall 4.0.1",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
]
[[package]]
name = "solana-bloom"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bencher",
+ "bincode",
"bv",
"fnv",
"rand 0.9.4",
@@ -7182,11 +7380,12 @@ dependencies = [
"solana-bloom",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-sanitize",
"solana-sha256-hasher",
"solana-signature",
"solana-time-utils",
+ "wincode",
]
[[package]]
@@ -7258,7 +7457,7 @@ dependencies = [
[[package]]
name = "solana-bpf-loader-program"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"bincode",
@@ -7266,7 +7465,7 @@ dependencies = [
"qualifier_attr",
"rand 0.9.4",
"shuttle",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bincode",
"solana-bpf-loader-program",
"solana-clock",
@@ -7299,12 +7498,12 @@ dependencies = [
[[package]]
name = "solana-bpf-loader-program-tests"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"assert_matches",
"bincode",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bpf-loader-program",
"solana-clock",
"solana-instruction",
@@ -7321,7 +7520,7 @@ dependencies = [
[[package]]
name = "solana-bucket-map"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"ahash 0.8.12",
@@ -7329,7 +7528,7 @@ dependencies = [
"bytemuck",
"bytemuck_derive",
"fs_extra",
- "memmap2 0.9.10",
+ "memmap2 0.9.11",
"modular-bitfield",
"num_enum",
"rand 0.9.4",
@@ -7343,12 +7542,12 @@ dependencies = [
[[package]]
name = "solana-builtins"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"solana-bpf-loader-program",
"solana-compute-budget-program",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-program-runtime",
"solana-pubkey 4.2.0",
"solana-sdk-ids",
@@ -7360,7 +7559,7 @@ dependencies = [
[[package]]
name = "solana-builtins-default-costs"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"ahash 0.8.12",
@@ -7372,9 +7571,11 @@ dependencies = [
[[package]]
name = "solana-clap-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
+ "bip39",
+ "bs58",
"chrono",
"clap 2.33.3",
"rpassword",
@@ -7383,7 +7584,7 @@ dependencies = [
"solana-cluster-type",
"solana-commitment-config",
"solana-derivation-path",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
"solana-native-token",
@@ -7396,16 +7597,16 @@ dependencies = [
"solana-system-interface 3.2.0",
"tempfile",
"thiserror 2.0.18",
- "tiny-bip39",
"uriparse",
"url 2.5.8",
]
[[package]]
name = "solana-clap-v3-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
+ "bip39",
"chrono",
"clap 3.2.23",
"five8",
@@ -7415,7 +7616,7 @@ dependencies = [
"solana-cluster-type",
"solana-commitment-config",
"solana-derivation-path",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
"solana-native-token",
@@ -7430,20 +7631,20 @@ dependencies = [
"solana-zk-sdk 5.0.1",
"tempfile",
"thiserror 2.0.18",
- "tiny-bip39",
"uriparse",
"url 2.5.8",
]
[[package]]
name = "solana-cli"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
"agave-votor-messages",
"assert_matches",
"bincode",
+ "bip39",
"bs58",
"clap 2.33.3",
"console 0.16.3",
@@ -7456,7 +7657,7 @@ dependencies = [
"reqwest 0.12.28",
"serde",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-address-lookup-table-interface",
"solana-bls-signatures",
@@ -7475,7 +7676,7 @@ dependencies = [
"solana-feature-gate-interface",
"solana-fee-calculator",
"solana-fee-structure",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-loader-v3-interface",
@@ -7501,6 +7702,7 @@ dependencies = [
"solana-sha256-hasher",
"solana-signature",
"solana-signer",
+ "solana-signer-store",
"solana-slot-history",
"solana-stake-interface",
"solana-syscalls",
@@ -7516,13 +7718,13 @@ dependencies = [
"tempfile",
"test-case",
"thiserror 2.0.18",
- "tiny-bip39",
"tokio",
+ "wincode",
]
[[package]]
name = "solana-cli-config"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"anyhow",
"dirs-next",
@@ -7535,11 +7737,13 @@ dependencies = [
[[package]]
name = "solana-cli-output"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"Inflector",
"agave-reserved-account-keys",
+ "agave-votor-messages",
"base64 0.22.1",
+ "bitvec",
"chrono",
"clap 2.33.3",
"console 0.16.3",
@@ -7549,16 +7753,19 @@ dependencies = [
"semver 1.0.28",
"serde",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-bincode",
+ "solana-bls-signatures",
"solana-clap-utils",
"solana-cli-config",
"solana-clock",
"solana-epoch-info",
- "solana-hash 4.3.0",
+ "solana-epoch-schedule",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
+ "solana-native-token",
"solana-packet 4.1.0",
"solana-pubkey 4.2.0",
"solana-rpc-client-api",
@@ -7578,7 +7785,7 @@ dependencies = [
[[package]]
name = "solana-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"async-trait",
"bincode",
@@ -7589,7 +7796,7 @@ dependencies = [
"log",
"solana-commitment-config",
"solana-connection-cache",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-measure",
"solana-message",
@@ -7614,7 +7821,7 @@ dependencies = [
[[package]]
name = "solana-client-test"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"futures-util",
@@ -7639,7 +7846,6 @@ dependencies = [
"solana-test-validator",
"solana-transaction-status",
"solana-version",
- "systemstat",
"tokio",
"tungstenite",
]
@@ -7650,10 +7856,10 @@ version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19635cc703678bcb26eb6faee4a363c71f4a0d622c445d9b70c048c42f4cbcd3"
dependencies = [
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-commitment-config",
"solana-epoch-info",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -7667,12 +7873,13 @@ dependencies = [
[[package]]
name = "solana-clock"
-version = "3.0.1"
+version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95cf11109c3b6115cc510f1e31f06fdd52f504271bc24ef5f1249fbbcae5f9f3"
+checksum = "f0acdace90d96e2c9e70d681465b4fe888b6bcf27c354ae9774e9f8a3b72923d"
dependencies = [
"serde",
"serde_derive",
+ "solana-get-sysvar",
"solana-sdk-ids",
"solana-sdk-macro",
"solana-sysvar-id",
@@ -7686,7 +7893,7 @@ checksum = "3a494cf8eda7d98d9f0144b288bb409c88308d2e86f15cc1045aa77b83304718"
dependencies = [
"serde",
"serde_derive",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
]
[[package]]
@@ -7701,7 +7908,7 @@ dependencies = [
[[package]]
name = "solana-compute-budget"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"solana-fee-structure",
"solana-program-runtime",
@@ -7709,7 +7916,7 @@ dependencies = [
[[package]]
name = "solana-compute-budget-instruction"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"bincode",
@@ -7720,7 +7927,7 @@ dependencies = [
"solana-compute-budget",
"solana-compute-budget-instruction",
"solana-compute-budget-interface",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -7748,14 +7955,14 @@ dependencies = [
[[package]]
name = "solana-compute-budget-program"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"solana-program-runtime",
]
[[package]]
name = "solana-compute-budget-program-bench"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"criterion",
@@ -7786,7 +7993,7 @@ dependencies = [
[[package]]
name = "solana-connection-cache"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"async-trait",
@@ -7806,10 +8013,11 @@ dependencies = [
[[package]]
name = "solana-core"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-banking-stage-ingress-types",
"agave-bls-cert-verify",
+ "agave-bls-sigverify",
"agave-feature-set",
"agave-fs",
"agave-logger",
@@ -7858,7 +8066,8 @@ dependencies = [
"shaq",
"signal-hook",
"slab",
- "solana-account 4.3.0",
+ "smallvec",
+ "solana-account 4.3.1",
"solana-accounts-db",
"solana-address-lookup-table-interface",
"solana-bincode",
@@ -7885,7 +8094,7 @@ dependencies = [
"solana-geyser-plugin-manager",
"solana-gossip",
"solana-hard-forks",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-leader-schedule",
@@ -7960,7 +8169,7 @@ dependencies = [
[[package]]
name = "solana-cost-model"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
@@ -7978,7 +8187,7 @@ dependencies = [
"solana-cost-model",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -8017,23 +8226,9 @@ dependencies = [
[[package]]
name = "solana-curve25519"
-version = "3.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2cb3f53e40375fba75e908295c7723d16dad3fb54384140366fade2c7ef37bb"
-dependencies = [
- "bytemuck",
- "bytemuck_derive",
- "curve25519-dalek 4.1.3",
- "solana-define-syscall 3.0.0",
- "subtle",
- "thiserror 2.0.18",
-]
-
-[[package]]
-name = "solana-curve25519"
-version = "4.0.0"
+version = "4.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0ee66a3e25ed8d20ed6fcd1ac71735415ff1edaf33ff1ec2118826eba927bcc"
+checksum = "14b4d2a4bf0d0b0a86c22111917e86e8bd39a7b31420fb2c7d73eb83761fc7af"
dependencies = [
"bytemuck",
"bytemuck_derive",
@@ -8074,7 +8269,7 @@ dependencies = [
[[package]]
name = "solana-download-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-snapshots",
"log",
@@ -8098,7 +8293,7 @@ dependencies = [
[[package]]
name = "solana-ed25519-program-tests"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"rand 0.9.4",
@@ -8114,7 +8309,7 @@ dependencies = [
[[package]]
name = "solana-entry"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"agave-reserved-account-keys",
@@ -8122,19 +8317,18 @@ dependencies = [
"assert_matches",
"criterion",
"crossbeam-channel",
- "dlopen2",
"log",
"num_cpus",
"proptest",
"rand 0.9.4",
"rayon",
"smallvec",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-bls-signatures",
"solana-clock",
"solana-cost-model",
"solana-entry",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-measure",
"solana-merkle-tree",
@@ -8165,13 +8359,14 @@ dependencies = [
[[package]]
name = "solana-epoch-rewards"
-version = "3.0.1"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f5e7b0ba210593ba8ddd39d6d234d81795d1671cebf3026baa10d5dc23ac42f0"
+checksum = "daf7eb4986b0b1d6f562b21f75a836f1a6df6e00c275efcef50aab5c144dc59e"
dependencies = [
"serde",
"serde_derive",
- "solana-hash 4.3.0",
+ "solana-get-sysvar",
+ "solana-hash 4.4.0",
"solana-sdk-ids",
"solana-sdk-macro",
"solana-sysvar-id",
@@ -8184,20 +8379,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ee8beac9bff4db9225e57d532d169b0be5e447f1e6601a2f50f27a01bf5518f"
dependencies = [
"siphasher 0.3.11",
- "solana-address 2.6.0",
- "solana-hash 4.3.0",
+ "solana-address 2.6.1",
+ "solana-hash 4.4.0",
]
[[package]]
name = "solana-epoch-schedule"
-version = "3.1.0"
+version = "3.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce264b7b42322325947c4136a09460bf5c73d9aa8262c9b0a2064be63ba8639"
+checksum = "8116e6ffa6002237d5ab5edcbda17f9ba66b6742c45a89c9fb40a94dbacd4c1d"
dependencies = [
"serde",
"serde_derive",
"solana-frozen-abi",
"solana-frozen-abi-macro",
+ "solana-get-sysvar",
+ "solana-program-error",
"solana-sdk-ids",
"solana-sdk-macro",
"solana-sysvar-id",
@@ -8221,7 +8418,7 @@ checksum = "0eb265ff95e28eceda117e2e3d2d2a611ecbbfe911dfeeeecd1521814540ffab"
dependencies = [
"serde",
"serde_derive",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-nonce",
"solana-pubkey 4.2.0",
@@ -8232,13 +8429,13 @@ dependencies = [
[[package]]
name = "solana-faucet"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"crossbeam-channel",
"log",
"solana-cli-output",
"solana-faucet",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -8258,7 +8455,7 @@ dependencies = [
[[package]]
name = "solana-faucet-cli"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"clap 2.33.3",
@@ -8281,7 +8478,7 @@ dependencies = [
"bincode",
"serde",
"serde_derive",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-info",
"solana-instruction",
"solana-program-error",
@@ -8293,7 +8490,7 @@ dependencies = [
[[package]]
name = "solana-fee"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"solana-fee-structure",
@@ -8302,9 +8499,9 @@ dependencies = [
[[package]]
name = "solana-fee-calculator"
-version = "3.2.0"
+version = "3.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57e8add96b5741573e9f7529c4bb7719cfcfa999c3847a68cdfaef0cb6adf567"
+checksum = "ef67f01cc6a0c72e99a08d0d484683f995de4c80e9568728fa77d1537f9b7e09"
dependencies = [
"log",
"serde",
@@ -8338,9 +8535,9 @@ dependencies = [
[[package]]
name = "solana-frozen-abi"
-version = "3.4.0"
+version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5b2792cc4cd4eaa419104dac4bed8e57b3189de001f9139b04f84b1a6f12d4a"
+checksum = "038494fd91f75199a233ff12bc922b8e02da04bd6dd8fed26e710572733d39d5"
dependencies = [
"bincode",
"boxcar",
@@ -8365,9 +8562,9 @@ dependencies = [
[[package]]
name = "solana-frozen-abi-macro"
-version = "3.4.0"
+version = "3.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4efd54c3f198403955addf2160af0ccc30294a04cf34e155c775d69960e1f0f6"
+checksum = "3ce2a1f17252391f44f620d4e47d1e3e0bec173f760a86ee7de2426db9ea7496"
dependencies = [
"proc-macro2",
"quote",
@@ -8376,19 +8573,20 @@ dependencies = [
[[package]]
name = "solana-genesis"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
"agave-snapshots",
"base64 0.22.1",
"bincode",
+ "bs58",
"clap 2.33.3",
"itertools 0.14.0",
"serde",
"serde_json",
"serde_yaml",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bls-signatures",
"solana-borsh",
"solana-clap-utils",
@@ -8436,12 +8634,12 @@ dependencies = [
"memmap2 0.5.10",
"serde",
"serde_derive",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-clock",
"solana-cluster-type",
"solana-epoch-schedule",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-inflation",
"solana-keypair",
"solana-poh-config",
@@ -8456,20 +8654,31 @@ dependencies = [
[[package]]
name = "solana-genesis-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-snapshots",
"log",
"solana-download-utils",
"solana-genesis-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-rpc-client",
"thiserror 2.0.18",
]
+[[package]]
+name = "solana-get-sysvar"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef3bc859fc036ed490146793557386cbfae614ebba4adc704c37d94350824ed4"
+dependencies = [
+ "solana-address 2.6.1",
+ "solana-define-syscall 5.1.0",
+ "solana-program-error",
+]
+
[[package]]
name = "solana-geyser-plugin-manager"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-geyser-plugin-interface",
"arc-swap",
@@ -8481,16 +8690,15 @@ dependencies = [
"libloading",
"log",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-accounts-db",
"solana-clock",
"solana-entry",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-ledger",
"solana-measure",
"solana-message",
- "solana-metrics",
"solana-pubkey 4.2.0",
"solana-rpc",
"solana-runtime",
@@ -8503,19 +8711,20 @@ dependencies = [
[[package]]
name = "solana-gossip"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"agave-random",
"anyhow",
"arc-swap",
- "arrayvec",
"assert_matches",
"bincode",
"bs58",
"bv",
+ "bytes",
"criterion",
"crossbeam-channel",
+ "ed25519-dalek 2.2.0",
"flate2",
"indexmap 2.14.0",
"itertools 0.14.0",
@@ -8532,7 +8741,6 @@ dependencies = [
"serde-big-array",
"serde_bytes",
"serial_test",
- "siphasher 1.0.2",
"solana-bloom",
"solana-client",
"solana-clock",
@@ -8541,7 +8749,7 @@ dependencies = [
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-ledger",
"solana-measure",
@@ -8567,7 +8775,11 @@ dependencies = [
"solana-vote",
"solana-vote-interface",
"solana-vote-program",
+ "solana-wincode-varint",
"static_assertions",
+ "strum",
+ "strum_macros",
+ "tempfile",
"test-case",
"thiserror 2.0.18",
"wincode",
@@ -8575,7 +8787,7 @@ dependencies = [
[[package]]
name = "solana-gossip-cli"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"clap 2.33.3",
@@ -8589,9 +8801,9 @@ dependencies = [
[[package]]
name = "solana-hard-forks"
-version = "3.1.0"
+version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52fd9cc610fd0782f09482527cb7b4f41ec22071303742718b7b57fc43bb236b"
+checksum = "45406eccad36220e52988b024d8daa93e691e38d5d71ad5fec55410cc9cf427d"
dependencies = [
"serde",
"serde_derive",
@@ -8605,14 +8817,14 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "337c246447142f660f778cf6cb582beba8e28deb05b3b24bfb9ffd7c562e5f41"
dependencies = [
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
]
[[package]]
name = "solana-hash"
-version = "4.3.0"
+version = "4.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1b113239362cee7093bfb250467138f079a2a03673181dc15bff6ccd677912d"
+checksum = "fe51db00ac3aa9f950d1e6201a126acfa26e6d81bc4a183ba64ec02effcad883"
dependencies = [
"borsh",
"bytemuck",
@@ -8635,9 +8847,9 @@ checksum = "7ce934b02bab639341f2fd62c3e7e3c39dcceb47f0196b7630ed1f82ecb704bd"
[[package]]
name = "solana-inflation"
-version = "3.1.0"
+version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f762559c5f962727efdcb03c61f5cf6c5364645695978fb145d25c88bbacdada"
+checksum = "ccf104167e42e747602b88e02b25cacfc5de699c3b7cbba60d3250437e6a22ed"
dependencies = [
"serde",
"serde_derive",
@@ -8663,9 +8875,9 @@ dependencies = [
[[package]]
name = "solana-instruction-error"
-version = "2.3.0"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0b188842592fdf6cb96f55263ae1bf11713ab5114401d1d5a881ed7cc41bef6"
+checksum = "3b7d34343838343a3755b7dfb1e438d94c6db2263b519cfe3c2257af932b6e93"
dependencies = [
"num-traits",
"serde",
@@ -8673,21 +8885,37 @@ dependencies = [
"solana-frozen-abi",
"solana-frozen-abi-macro",
"solana-program-error",
- "wincode",
+ "wincode",
+]
+
+[[package]]
+name = "solana-instructions-sysvar"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e0732294560e88ecdb2bbc656e67383e9f88c78ec09469cef172f0d28cd1bcd"
+dependencies = [
+ "bitflags 2.13.0",
+ "solana-account-info",
+ "solana-instruction",
+ "solana-instruction-error",
+ "solana-program-error",
+ "solana-sanitize",
+ "solana-sdk-ids",
+ "solana-serialize-utils",
+ "solana-sysvar-id",
]
[[package]]
name = "solana-instructions-sysvar"
-version = "3.0.0"
+version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ddf67876c541aa1e21ee1acae35c95c6fbc61119814bfef70579317a5e26955"
+checksum = "e38363a181313d607f7a118df2b401bb27b477a0104b09283cbf504f5f0f00cc"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"solana-account-info",
"solana-instruction",
"solana-instruction-error",
"solana-program-error",
- "solana-pubkey 3.0.0",
"solana-sanitize",
"solana-sdk-ids",
"solana-serialize-utils",
@@ -8702,14 +8930,15 @@ checksum = "ed1c0d16d6fdeba12291a1f068cdf0d479d9bff1141bf44afd7aa9d485f65ef8"
dependencies = [
"sha3",
"solana-define-syscall 4.0.1",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
]
[[package]]
name = "solana-keygen"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-votor-messages",
+ "bip39",
"bs58",
"clap 3.2.23",
"dirs-next",
@@ -8728,7 +8957,6 @@ dependencies = [
"solana-signer",
"solana-version",
"tempfile",
- "tiny-bip39",
]
[[package]]
@@ -8742,7 +8970,7 @@ dependencies = [
"five8",
"five8_core",
"rand 0.9.4",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-derivation-path",
"solana-seed-derivable",
"solana-seed-phrase",
@@ -8752,12 +8980,13 @@ dependencies = [
[[package]]
name = "solana-last-restart-slot"
-version = "3.0.0"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcda154ec827f5fc1e4da0af3417951b7e9b8157540f81f936c4a8b1156134d0"
+checksum = "c22474b83d3c7c318e1c3a725784fc2d1d03b728e36369e58ce48769a61ed85e"
dependencies = [
"serde",
"serde_derive",
+ "solana-get-sysvar",
"solana-sdk-ids",
"solana-sdk-macro",
"solana-sysvar-id",
@@ -8765,7 +8994,7 @@ dependencies = [
[[package]]
name = "solana-lattice-hash"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"base64 0.22.1",
"blake3",
@@ -8779,7 +9008,7 @@ dependencies = [
[[package]]
name = "solana-leader-schedule"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-random",
"itertools 0.14.0",
@@ -8794,7 +9023,7 @@ dependencies = [
[[package]]
name = "solana-ledger"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
@@ -8803,8 +9032,7 @@ dependencies = [
"agave-votor-messages",
"anyhow",
"assert_matches",
- "bincode",
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"bs58",
"bytes",
"bzip2",
@@ -8824,7 +9052,7 @@ dependencies = [
"num_cpus",
"num_enum",
"proptest",
- "prost 0.14.3",
+ "prost 0.14.4",
"qualifier_attr",
"rand 0.9.4",
"rand_chacha 0.9.0",
@@ -8833,7 +9061,7 @@ dependencies = [
"rocksdb",
"scopeguard",
"serde",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-accounts-db",
"solana-address-lookup-table-interface",
@@ -8846,7 +9074,7 @@ dependencies = [
"solana-frozen-abi-macro",
"solana-genesis-config",
"solana-genesis-utils",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-leader-schedule",
@@ -8942,7 +9170,7 @@ dependencies = [
[[package]]
name = "solana-local-cluster"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
@@ -8958,7 +9186,7 @@ dependencies = [
"rand 0.9.4",
"rayon",
"serial_test",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-accounts-db",
"solana-client",
"solana-client-traits",
@@ -8975,7 +9203,7 @@ dependencies = [
"solana-genesis-utils",
"solana-gossip",
"solana-hard-forks",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-leader-schedule",
"solana-ledger",
@@ -8983,6 +9211,8 @@ dependencies = [
"solana-message",
"solana-native-token",
"solana-net-utils",
+ "solana-packet 4.1.0",
+ "solana-perf",
"solana-poh-config",
"solana-program-binaries",
"solana-pubkey 4.2.0",
@@ -9002,6 +9232,7 @@ dependencies = [
"solana-system-transaction",
"solana-time-utils",
"solana-tpu-client",
+ "solana-tpu-client-next",
"solana-transaction",
"solana-transaction-error",
"solana-turbine",
@@ -9012,35 +9243,38 @@ dependencies = [
"static_assertions",
"strum",
"tempfile",
+ "tokio",
"tokio-util 0.7.18",
+ "wincode",
]
[[package]]
name = "solana-measure"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
[[package]]
name = "solana-merkle-tree"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"fast-math",
"hex",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-sha256-hasher",
]
[[package]]
name = "solana-message"
-version = "4.1.1"
+version = "4.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a634d1db65a393d4e87ec49ef97c8dfb12201e2ba9e5faf87ff34e632f29e509"
+checksum = "d2666e0ff38557ad1239d0fc42f4688fb9df0817fb12c041dbae90c2b2e3fa55"
dependencies = [
"blake3",
- "lazy_static",
"serde",
"serde_derive",
- "solana-address 2.6.0",
- "solana-hash 4.3.0",
+ "solana-address 2.6.1",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-sanitize",
"solana-sdk-ids",
@@ -9051,7 +9285,7 @@ dependencies = [
[[package]]
name = "solana-metrics"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bencher",
"crossbeam-channel",
@@ -9085,13 +9319,15 @@ checksum = "ae8dd4c280dca9d046139eb5b7a5ac9ad10403fbd64964c7d7571214950d758f"
[[package]]
name = "solana-net-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
+ "agave-xdp",
"anyhow",
"bincode",
"bytes",
"cfg-if 1.0.4",
+ "crossbeam-channel",
"dashmap",
"hxdmp",
"itertools 0.14.0",
@@ -9125,7 +9361,7 @@ dependencies = [
"serde",
"serde_derive",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-pubkey 4.2.0",
"solana-sha256-hasher",
"wincode",
@@ -9137,8 +9373,8 @@ version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cda945f4ccb317791c26379ca8ec410c5938aa7a5eff211fe5fe0bb428c3a75f"
dependencies = [
- "solana-account 4.3.0",
- "solana-hash 4.3.0",
+ "solana-account 4.3.1",
+ "solana-hash 4.4.0",
"solana-nonce",
"solana-sdk-ids",
"wincode",
@@ -9146,20 +9382,21 @@ dependencies = [
[[package]]
name = "solana-notifier"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"log",
"reqwest 0.12.28",
"serde_json",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
]
[[package]]
name = "solana-nullable"
-version = "1.0.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a90429a75d69fdcb31952c3dea79f5f3c8157cfe88221e066103c9c237876073"
+checksum = "a0f95d3028ef0f682bb174b77379c19d5dae2904a649f4a103fe29be7a139980"
dependencies = [
+ "borsh",
"bytemuck",
]
@@ -9185,7 +9422,7 @@ version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6edf2f25743c95229ac0fdc32f8f5893ef738dbf332c669e9861d33ddb0f469d"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
]
[[package]]
@@ -9195,7 +9432,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ad62e1045c2347a0c0e219a6ceb0abfe904be622920996bfcac8d116fabe3c7"
dependencies = [
"bincode",
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"cfg_eval",
"serde",
"serde_derive",
@@ -9207,7 +9444,7 @@ dependencies = [
[[package]]
name = "solana-perf"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"agave-random",
@@ -9230,13 +9467,14 @@ dependencies = [
"solana-clock",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
"solana-metrics",
"solana-packet 4.1.0",
"solana-perf",
"solana-pubkey 4.2.0",
+ "solana-runtime-transaction",
"solana-sdk-ids",
"solana-short-vec",
"solana-signature",
@@ -9255,14 +9493,14 @@ dependencies = [
[[package]]
name = "solana-poh"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-cpu-utils",
"agave-logger",
"agave-votor-messages",
"arc-swap",
"assert_matches",
"bincode",
- "core_affinity",
"criterion",
"crossbeam-channel",
"log",
@@ -9271,7 +9509,7 @@ dependencies = [
"shuttle",
"solana-clock",
"solana-entry",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-leader-schedule",
"solana-ledger",
@@ -9292,7 +9530,7 @@ dependencies = [
[[package]]
name = "solana-poh-bench"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"clap 3.2.23",
@@ -9366,10 +9604,10 @@ dependencies = [
"solana-epoch-stake",
"solana-example-mocks",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-instruction-error",
- "solana-instructions-sysvar",
+ "solana-instructions-sysvar 3.0.1",
"solana-keccak-hasher",
"solana-last-restart-slot",
"solana-msg",
@@ -9396,10 +9634,10 @@ dependencies = [
[[package]]
name = "solana-program-binaries"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bincode",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-loader-v3-interface",
"solana-pubkey 4.2.0",
"solana-rent",
@@ -9456,7 +9694,7 @@ dependencies = [
[[package]]
name = "solana-program-runtime"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"base64 0.22.1",
@@ -9468,7 +9706,7 @@ dependencies = [
"qualifier_attr",
"rand 0.9.4",
"serde",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-info",
"solana-clock",
"solana-epoch-rewards",
@@ -9476,7 +9714,7 @@ dependencies = [
"solana-fee-structure",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-instruction-error",
"solana-keypair",
@@ -9507,11 +9745,12 @@ dependencies = [
"solana-transaction-context",
"test-case",
"thiserror 2.0.18",
+ "wincode",
]
[[package]]
name = "solana-program-test"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
@@ -9522,10 +9761,10 @@ dependencies = [
"chrono-humanize",
"log",
"serde",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-info",
"solana-accounts-db",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-banks-client",
"solana-banks-interface",
"solana-banks-server",
@@ -9538,7 +9777,7 @@ dependencies = [
"solana-epoch-schedule",
"solana-fee-calculator",
"solana-genesis-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-loader-v3-interface",
@@ -9569,6 +9808,7 @@ dependencies = [
"solana-transaction-error",
"solana-vote-program",
"spl-generic-token",
+ "spl-memo-interface",
"test-case",
"thiserror 2.0.18",
"tokio",
@@ -9590,12 +9830,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7db719574990de7e8b0f55a8593ac92a5ccb42c8ce67b3e4bf05b139d5d9ee71"
dependencies = [
"rand 0.9.4",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
]
[[package]]
name = "solana-pubsub-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"anyhow",
"crossbeam-channel",
@@ -9619,7 +9859,7 @@ dependencies = [
[[package]]
name = "solana-quic-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"async-lock",
@@ -9649,7 +9889,7 @@ dependencies = [
[[package]]
name = "solana-rayon-threadlimit"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"log",
"num_cpus",
@@ -9658,17 +9898,20 @@ dependencies = [
[[package]]
name = "solana-remote-wallet"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"console 0.16.3",
"dialoguer",
+ "hex",
"hidapi",
"log",
"num-derive",
"num-traits",
"parking_lot 0.12.3",
+ "rusb",
"semver 1.0.28",
+ "serde_json",
"serial_test",
"solana-derivation-path",
"solana-offchain-message",
@@ -9677,19 +9920,22 @@ dependencies = [
"solana-signer",
"thiserror 2.0.18",
"trezor-client",
+ "ur-parse-lib",
+ "ur-registry",
"uriparse",
]
[[package]]
name = "solana-rent"
-version = "4.2.0"
+version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9809b081e99bc142ce803bcd7ee18306759ce3b30a96a9da3f6f41c45e50ef0"
+checksum = "39f0d780bf8e8a1fe8b5b5fce1acad6b209485b86dec246e7523d5e4a8b7c7fc"
dependencies = [
"serde",
"serde_derive",
"solana-frozen-abi",
"solana-frozen-abi-macro",
+ "solana-get-sysvar",
"solana-sdk-ids",
"solana-sdk-macro",
"solana-sysvar-id",
@@ -9708,11 +9954,12 @@ dependencies = [
[[package]]
name = "solana-rpc"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-reserved-account-keys",
"agave-snapshots",
+ "agave-votor-messages",
"base64 0.22.1",
"bs58",
"crossbeam-channel",
@@ -9731,7 +9978,7 @@ dependencies = [
"serde_json",
"serial_test",
"soketto",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-accounts-db",
"solana-address-lookup-table-interface",
@@ -9750,9 +9997,10 @@ dependencies = [
"solana-fee-structure",
"solana-genesis-config",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
+ "solana-leader-schedule",
"solana-ledger",
"solana-measure",
"solana-message",
@@ -9811,8 +10059,9 @@ dependencies = [
[[package]]
name = "solana-rpc-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-votor-messages",
"assert_matches",
"async-trait",
"base64 0.22.1",
@@ -9829,15 +10078,16 @@ dependencies = [
"semver 1.0.28",
"serde",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-account-decoder-client-types",
+ "solana-bls-signatures",
"solana-clock",
"solana-commitment-config",
"solana-epoch-info",
"solana-epoch-schedule",
"solana-feature-gate-interface",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -9845,6 +10095,7 @@ dependencies = [
"solana-rpc-client-api",
"solana-signature",
"solana-signer",
+ "solana-system-interface 3.2.0",
"solana-system-transaction",
"solana-transaction",
"solana-transaction-error",
@@ -9854,11 +10105,12 @@ dependencies = [
"static_assertions",
"test-case",
"tokio",
+ "wincode",
]
[[package]]
name = "solana-rpc-client-api"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"anyhow",
"jsonrpc-core",
@@ -9877,18 +10129,18 @@ dependencies = [
[[package]]
name = "solana-rpc-client-nonce-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"anyhow",
"clap 2.33.3",
"futures 0.3.32",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-decoder",
"solana-clap-utils",
"solana-commitment-config",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
"solana-nonce",
@@ -9906,7 +10158,7 @@ dependencies = [
[[package]]
name = "solana-rpc-client-types"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"base64 0.22.1",
"bs58",
@@ -9915,7 +10167,7 @@ dependencies = [
"serde",
"serde_json",
"solana-account-decoder-client-types",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-clock",
"solana-commitment-config",
"solana-fee-calculator",
@@ -9932,7 +10184,7 @@ dependencies = [
[[package]]
name = "solana-rpc-test"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"async-trait",
@@ -9948,7 +10200,7 @@ dependencies = [
"solana-clock",
"solana-commitment-config",
"solana-connection-cache",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-net-utils",
"solana-pubkey 4.2.0",
@@ -9969,7 +10221,7 @@ dependencies = [
[[package]]
name = "solana-runtime"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-bls-cert-verify",
"agave-feature-set",
@@ -9991,6 +10243,7 @@ dependencies = [
"bytemuck",
"criterion",
"crossbeam-channel",
+ "crossbeam-utils",
"dashmap",
"imbl",
"itertools 0.14.0",
@@ -10001,7 +10254,6 @@ dependencies = [
"mockall",
"num-derive",
"num-traits",
- "num_cpus",
"percentage",
"proptest",
"qualifier_attr",
@@ -10014,7 +10266,7 @@ dependencies = [
"serde_with",
"shuttle",
"smallvec",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-info",
"solana-accounts-db",
"solana-address-lookup-table-interface",
@@ -10043,7 +10295,7 @@ dependencies = [
"solana-frozen-abi-macro",
"solana-genesis-config",
"solana-hard-forks",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-inflation",
"solana-instruction",
"solana-instruction-error",
@@ -10103,7 +10355,6 @@ dependencies = [
"static_assertions",
"strum",
"strum_macros",
- "symlink",
"tempfile",
"test-case",
"thiserror 2.0.18",
@@ -10113,7 +10364,7 @@ dependencies = [
[[package]]
name = "solana-runtime-transaction"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-reserved-account-keys",
@@ -10123,7 +10374,7 @@ dependencies = [
"solana-compute-budget",
"solana-compute-budget-instruction",
"solana-compute-budget-interface",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -10150,9 +10401,9 @@ checksum = "dcf09694a0fc14e5ffb18f9b7b7c0f15ecb6eac5b5610bf76a1853459d19daf9"
[[package]]
name = "solana-sbpf"
-version = "0.20.0"
+version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1b120fcbbc0d8562997183bef32c76a28400ecae7d8c9fff279d33002783a29"
+checksum = "d777d7a89267dd133e985113c7e7f820fb7cfd9123a4a350cf8b39ebae1920bc"
dependencies = [
"byteorder",
"combine 3.8.1",
@@ -10173,7 +10424,7 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "def234c1956ff616d46c9dd953f251fa7096ddbaa6d52b165218de97882b7280"
dependencies = [
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
]
[[package]]
@@ -10244,23 +10495,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc905b200a95f2ea9146e43f2a7181e3aeb55de6bc12afb36462d00a3c7310de"
dependencies = [
"hmac 0.12.1",
- "pbkdf2 0.11.0",
+ "pbkdf2",
"sha2 0.10.9",
]
[[package]]
name = "solana-send-transaction-service"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"async-trait",
"crossbeam-channel",
"itertools 0.14.0",
"log",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-fee-calculator",
"solana-genesis-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-measure",
"solana-metrics",
@@ -10300,9 +10551,9 @@ dependencies = [
[[package]]
name = "solana-serialize-utils"
-version = "3.1.1"
+version = "3.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d7cc401931d178472358e6b78dc72d031dc08f752d7410f0e8bd259dd6f02fa"
+checksum = "761357b0853c9623bf12c1d2314b3d6160a85b087b84c45224fb85766d22616b"
dependencies = [
"solana-instruction-error",
"solana-pubkey 4.2.0",
@@ -10317,7 +10568,7 @@ checksum = "db7dc3011ea4c0334aaaa7e7128cb390ecf546b28d412e9bf2064680f57f588f"
dependencies = [
"sha2 0.10.9",
"solana-define-syscall 4.0.1",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
]
[[package]]
@@ -10333,9 +10584,9 @@ dependencies = [
[[package]]
name = "solana-short-vec"
-version = "3.2.1"
+version = "3.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bb8cc883fc7b8ce4a7814cb1441b48c06437049ec11847005cf63bcfa85c546"
+checksum = "7d8250a4495aad49ad20556a607da53bdcb20de78da10b65afbf918b7f1de647"
dependencies = [
"serde_core",
"solana-frozen-abi",
@@ -10350,15 +10601,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6c79722e299d957958bf33695f7cd1ef6724ff55563c60fd9e3e24487cccde2"
dependencies = [
"solana-hard-forks",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-sha256-hasher",
]
[[package]]
name = "solana-signature"
-version = "3.4.0"
+version = "3.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7a73c6e97cc2108be0adf6a6ea326434f8398df9d7eed81da2a4548b69e971c"
+checksum = "b0364c7577c3c82a693ce28a1febc8d1b5d1b0a175fdc2114ae6186b69effe1e"
dependencies = [
"ed25519-dalek 2.2.0",
"five8",
@@ -10374,11 +10625,11 @@ dependencies = [
[[package]]
name = "solana-signer"
-version = "3.0.0"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bfea97951fee8bae0d6038f39a5efcb6230ecdfe33425ac75196d1a1e3e3235"
+checksum = "520bd6021163ee517f4bdc7ae03ded904f97e11320001ba0b3355f45eb14f558"
dependencies = [
- "solana-pubkey 3.0.0",
+ "solana-pubkey 4.2.0",
"solana-signature",
"solana-transaction-error",
]
@@ -10396,15 +10647,17 @@ dependencies = [
[[package]]
name = "solana-slot-hashes"
-version = "3.0.1"
+version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2585f70191623887329dfb5078da3a00e15e3980ea67f42c2e10b07028419f43"
+checksum = "5c7ce2b4b8911bf2db3de7b6266e67bfc21a6a9f8c566fb096d9782ca2ad16ee"
dependencies = [
"serde",
"serde_derive",
- "solana-hash 4.3.0",
+ "solana-get-sysvar",
+ "solana-hash 4.4.0",
"solana-sdk-ids",
"solana-sysvar-id",
+ "wincode",
]
[[package]]
@@ -10418,6 +10671,7 @@ dependencies = [
"serde_derive",
"solana-sdk-ids",
"solana-sysvar-id",
+ "wincode",
]
[[package]]
@@ -10432,10 +10686,10 @@ dependencies = [
[[package]]
name = "solana-stake-accounts"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"clap 2.33.3",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-clap-utils",
"solana-cli-config",
"solana-cli-output",
@@ -10464,9 +10718,9 @@ dependencies = [
[[package]]
name = "solana-stake-interface"
-version = "3.1.0"
+version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f49eb5c77484214c3484921e2cdda79d185373118b5458c1b2df0f1a04c3bc30"
+checksum = "252b4291eb25a5a356149ed4d4a940d5f655186210fa84b5d0d8d55c3dd42a81"
dependencies = [
"borsh",
"num-traits",
@@ -10482,11 +10736,12 @@ dependencies = [
"solana-system-interface 3.2.0",
"solana-sysvar",
"solana-sysvar-id",
+ "wincode",
]
[[package]]
name = "solana-storage-bigtable"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-reserved-account-keys",
"base64 0.22.1",
@@ -10495,15 +10750,17 @@ dependencies = [
"flate2",
"futures 0.3.32",
"goauth",
- "http 1.4.0",
+ "http 1.4.2",
"hyper-util",
"log",
- "prost 0.14.3",
- "prost-types",
+ "prost 0.14.4",
+ "prost-types 0.14.4",
"serde",
"smpl_jwt",
"solana-clock",
- "solana-hash 4.3.0",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
"solana-metrics",
@@ -10526,15 +10783,15 @@ dependencies = [
[[package]]
name = "solana-storage-proto"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bs58",
"enum-iterator",
- "prost 0.14.3",
+ "prost 0.14.4",
"protobuf-src",
"serde",
"solana-account-decoder",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-message",
"solana-pubkey 4.2.0",
@@ -10552,7 +10809,7 @@ dependencies = [
[[package]]
name = "solana-streamer"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"agave-xdp",
@@ -10571,12 +10828,12 @@ dependencies = [
"nix",
"num_cpus",
"pem",
- "percentage",
"quinn",
"rand 0.9.4",
"rustls",
"smallvec",
"solana-keypair",
+ "solana-measure",
"solana-message",
"solana-metrics",
"solana-net-utils",
@@ -10595,8 +10852,10 @@ dependencies = [
[[package]]
name = "solana-svm"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "agave-feature-set",
+ "agave-precompiles",
"ahash 0.8.12",
"assert_matches",
"bincode",
@@ -10605,11 +10864,13 @@ dependencies = [
"log",
"openssl",
"percentage",
+ "prost 0.11.9",
+ "protosol",
"qualifier_attr",
"rand 0.9.4",
"serde",
"shuttle",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bpf-loader-program",
"solana-clock",
"solana-compute-budget",
@@ -10621,9 +10882,10 @@ dependencies = [
"solana-fee-structure",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
- "solana-instructions-sysvar",
+ "solana-instruction-error",
+ "solana-instructions-sysvar 4.0.0",
"solana-keypair",
"solana-loader-v3-interface",
"solana-loader-v4-interface",
@@ -10631,6 +10893,7 @@ dependencies = [
"solana-native-token",
"solana-nonce",
"solana-nonce-account",
+ "solana-poseidon",
"solana-precompile-error",
"solana-program-binaries",
"solana-program-entrypoint",
@@ -10661,17 +10924,20 @@ dependencies = [
"solana-transaction",
"solana-transaction-context",
"solana-transaction-error",
+ "solana-vote-program",
+ "solana-zk-elgamal-proof-program",
"spl-generic-token",
"spl-token-interface",
"test-case",
"thiserror 2.0.18",
+ "xxhash-rust",
]
[[package]]
name = "solana-svm-callback"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-clock",
"solana-precompile-error",
"solana-pubkey 4.2.0",
@@ -10679,22 +10945,22 @@ dependencies = [
[[package]]
name = "solana-svm-feature-set"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
[[package]]
name = "solana-svm-log-collector"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"log",
]
[[package]]
name = "solana-svm-measure"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
[[package]]
name = "solana-svm-timings"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"eager",
"enum-iterator",
@@ -10703,23 +10969,21 @@ dependencies = [
[[package]]
name = "solana-svm-transaction"
-version = "4.2.0-alpha.0"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736d2cec944c6f8f298a7bd8ada5eb318cca9ab859281b1300842fa0e9a25afa"
dependencies = [
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-message",
- "solana-nonce",
"solana-pubkey 4.2.0",
"solana-sdk-ids",
"solana-signature",
- "solana-system-interface 3.2.0",
"solana-transaction",
- "static_assertions",
- "test-case",
]
[[package]]
name = "solana-svm-type-overrides"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"futures 0.3.32",
"rand 0.9.4",
@@ -10728,24 +10992,24 @@ dependencies = [
[[package]]
name = "solana-syscalls"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"bincode",
"libsecp256k1",
"num-traits",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-info",
"solana-blake3-hasher",
"solana-bls12-381-syscall",
"solana-bn254",
"solana-clock",
"solana-cpi",
- "solana-curve25519 4.0.0",
+ "solana-curve25519",
"solana-epoch-rewards",
"solana-epoch-schedule",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-hash-512",
"solana-instruction",
"solana-keccak-hasher",
@@ -10772,6 +11036,7 @@ dependencies = [
"solana-transaction-context",
"test-case",
"thiserror 2.0.18",
+ "wincode",
]
[[package]]
@@ -10798,7 +11063,7 @@ dependencies = [
"num-traits",
"serde",
"serde_derive",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-instruction",
"solana-msg",
"solana-program-error",
@@ -10807,17 +11072,17 @@ dependencies = [
[[package]]
name = "solana-system-program"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"bincode",
"criterion",
"log",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bincode",
"solana-compute-budget",
"solana-fee-calculator",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-nonce",
"solana-nonce-account",
@@ -10842,7 +11107,7 @@ version = "4.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a39522012be4127884bc611d65f58f1cf33a3afb7baee7e6774be90b48edc3c"
dependencies = [
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-message",
"solana-pubkey 4.2.0",
@@ -10872,7 +11137,7 @@ dependencies = [
"solana-fee-calculator",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-last-restart-slot",
"solana-program-entrypoint",
@@ -10893,24 +11158,26 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17358d1e9a13e5b9c2264d301102126cf11a47fd394cdf3dec174fe7bc96e1de"
dependencies = [
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-sdk-ids",
]
[[package]]
name = "solana-test-validator"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-snapshots",
+ "agave-votor-messages",
"arc-swap",
"base64 0.22.1",
"bincode",
"crossbeam-channel",
"log",
"serde_json",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-accounts-db",
+ "solana-bls-signatures",
"solana-cli-output",
"solana-clock",
"solana-cluster-type",
@@ -10945,8 +11212,10 @@ dependencies = [
"solana-signer",
"solana-streamer",
"solana-syscalls",
+ "solana-test-validator",
"solana-transaction",
"solana-validator-exit",
+ "solana-vote-interface",
"tokio",
]
@@ -10958,8 +11227,9 @@ checksum = "0ced92c60aa76ec4780a9d93f3bd64dfa916e1b998eacc6f1c110f3f444f02c9"
[[package]]
name = "solana-tls-utils"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
+ "quinn",
"rustls",
"solana-keypair",
"solana-pubkey 4.2.0",
@@ -10969,7 +11239,7 @@ dependencies = [
[[package]]
name = "solana-tokens"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"assert_matches",
@@ -10991,7 +11261,7 @@ dependencies = [
"solana-cli-output",
"solana-clock",
"solana-commitment-config",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-message",
@@ -11018,40 +11288,9 @@ dependencies = [
"thiserror 2.0.18",
]
-[[package]]
-name = "solana-tps-client"
-version = "4.2.0-alpha.0"
-dependencies = [
- "log",
- "solana-account 4.3.0",
- "solana-client",
- "solana-client-traits",
- "solana-clock",
- "solana-commitment-config",
- "solana-connection-cache",
- "solana-epoch-info",
- "solana-hash 4.3.0",
- "solana-keypair",
- "solana-message",
- "solana-net-utils",
- "solana-pubkey 4.2.0",
- "solana-rpc-client",
- "solana-rpc-client-api",
- "solana-runtime",
- "solana-signature",
- "solana-signer",
- "solana-streamer",
- "solana-tpu-client",
- "solana-transaction",
- "solana-transaction-error",
- "solana-transaction-status",
- "tempfile",
- "thiserror 2.0.18",
-]
-
[[package]]
name = "solana-tpu-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"futures-util",
"indicatif",
@@ -11062,6 +11301,7 @@ dependencies = [
"solana-commitment-config",
"solana-connection-cache",
"solana-epoch-schedule",
+ "solana-leader-schedule",
"solana-message",
"solana-pubkey 4.2.0",
"solana-pubsub-client",
@@ -11078,7 +11318,7 @@ dependencies = [
[[package]]
name = "solana-tpu-client-next"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"async-trait",
"crossbeam-channel",
@@ -11093,6 +11333,7 @@ dependencies = [
"solana-clock",
"solana-commitment-config",
"solana-keypair",
+ "solana-leader-schedule",
"solana-measure",
"solana-metrics",
"solana-net-utils",
@@ -11115,14 +11356,16 @@ dependencies = [
[[package]]
name = "solana-transaction"
-version = "4.1.1"
+version = "4.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a98253cefd62dea714b67926d3d918c3b9f7d66993f1f2322ac7549ea991dc3e"
+checksum = "2509e70bdce879db3e0f56cf97e40edd53742e8f0e6f34d64c46e7900071b53f"
dependencies = [
"serde",
"serde_derive",
- "solana-address 2.6.0",
- "solana-hash 4.3.0",
+ "solana-address 2.6.1",
+ "solana-frozen-abi",
+ "solana-frozen-abi-macro",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-instruction-error",
"solana-message",
@@ -11137,15 +11380,15 @@ dependencies = [
[[package]]
name = "solana-transaction-context"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bincode",
"qualifier_attr",
"serde",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-account-info",
"solana-instruction",
- "solana-instructions-sysvar",
+ "solana-instructions-sysvar 4.0.0",
"solana-program-entrypoint",
"solana-pubkey 4.2.0",
"solana-rent",
@@ -11160,9 +11403,9 @@ dependencies = [
[[package]]
name = "solana-transaction-error"
-version = "3.2.0"
+version = "3.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a2165ad25b694c654d5395fc7a049452a192376e4c96a7fad05580f6ba5ba1c"
+checksum = "a949797bc1ac31836d0070e791083028a8c2e0d493fa4cf51c0bed7a04c65c22"
dependencies = [
"serde",
"serde_derive",
@@ -11175,7 +11418,7 @@ dependencies = [
[[package]]
name = "solana-transaction-status"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"Inflector",
"agave-reserved-account-keys",
@@ -11190,7 +11433,7 @@ dependencies = [
"solana-account-decoder",
"solana-address-lookup-table-interface",
"solana-clock",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-loader-v2-interface",
"solana-loader-v3-interface",
@@ -11207,6 +11450,7 @@ dependencies = [
"solana-transaction-status",
"solana-transaction-status-client-types",
"solana-vote-interface",
+ "solana-zk-sdk-pod",
"spl-associated-token-account-interface",
"spl-memo-interface",
"spl-token-2022-interface",
@@ -11215,11 +11459,12 @@ dependencies = [
"spl-token-interface",
"spl-token-metadata-interface",
"thiserror 2.0.18",
+ "wincode",
]
[[package]]
name = "solana-transaction-status-client-types"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"base64 0.22.1",
"bincode",
@@ -11242,13 +11487,12 @@ dependencies = [
[[package]]
name = "solana-turbine"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
"agave-votor",
"agave-votor-messages",
- "agave-xdp",
"assert_matches",
"bencher",
"bs58",
@@ -11267,7 +11511,7 @@ dependencies = [
"solana-entry",
"solana-genesis-config",
"solana-gossip",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-leader-schedule",
"solana-ledger",
@@ -11297,7 +11541,7 @@ dependencies = [
[[package]]
name = "solana-udp-client"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"async-trait",
"solana-connection-cache",
@@ -11310,11 +11554,11 @@ dependencies = [
[[package]]
name = "solana-unified-scheduler-logic"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"assert_matches",
"solana-clock",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-message",
"solana-pubkey 4.2.0",
@@ -11327,7 +11571,7 @@ dependencies = [
[[package]]
name = "solana-unified-scheduler-pool"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-banking-stage-ingress-types",
"agave-logger",
@@ -11342,7 +11586,7 @@ dependencies = [
"solana-clock",
"solana-cost-model",
"solana-entry",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-keypair",
"solana-ledger",
"solana-metrics",
@@ -11370,7 +11614,7 @@ checksum = "c5d2face763df5afeaa9509b9019968860e69cc1531ec8b4a2e6c7b702204d5a"
[[package]]
name = "solana-version"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"bincode",
@@ -11381,11 +11625,13 @@ dependencies = [
"solana-frozen-abi-macro",
"solana-sanitize",
"solana-serde-varint",
+ "solana-wincode-varint",
+ "wincode",
]
[[package]]
name = "solana-vote"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-logger",
"arbitrary",
@@ -11395,13 +11641,13 @@ dependencies = [
"qualifier_attr",
"rand 0.9.4",
"serde",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bincode",
"solana-bls-signatures",
"solana-clock",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-keypair",
"solana-packet 4.1.0",
@@ -11422,22 +11668,23 @@ dependencies = [
[[package]]
name = "solana-vote-interface"
-version = "6.0.0"
+version = "6.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d495cb001d3373229ba523625783e5168707f70a9c38ddc90fbc5b0470d600ea"
+checksum = "61843d7be827cac5e025c3a16c1101a34fcdd8cf593f6a82eafdd253bd55a26b"
dependencies = [
"arbitrary",
"bincode",
"cfg_eval",
"num-derive",
"num-traits",
+ "rand 0.9.4",
"serde",
"serde_derive",
"serde_with",
"solana-clock",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-instruction-error",
"solana-pubkey 4.2.0",
@@ -11451,7 +11698,7 @@ dependencies = [
[[package]]
name = "solana-vote-program"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"agave-feature-set",
"agave-logger",
@@ -11460,7 +11707,7 @@ dependencies = [
"criterion",
"log",
"qualifier_attr",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-bincode",
"solana-bls-signatures",
"solana-clock",
@@ -11468,7 +11715,7 @@ dependencies = [
"solana-fee-calculator",
"solana-frozen-abi",
"solana-frozen-abi-macro",
- "solana-hash 4.3.0",
+ "solana-hash 4.4.0",
"solana-instruction",
"solana-packet 4.1.0",
"solana-program-runtime",
@@ -11487,19 +11734,43 @@ dependencies = [
]
[[package]]
-name = "solana-zero-copy"
+name = "solana-wincode-varint"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94f52dd8f733a13f6a18e55de83cf97c4c3f5fdf27ea3830bcff0b35313efcc2"
+checksum = "6679e72a01dcfe7ff180f0e9d3a0d165e4e9664426930014f2702e7571c259c7"
+dependencies = [
+ "wincode",
+]
+
+[[package]]
+name = "solana-zero-copy"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea15126ebdc7e270c50d43884369af9f51d2308156d46a18e351522a164844d"
+dependencies = [
+ "bytemuck",
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "solana-zk-elgamal-proof-interface"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8da7f01db2148a1dc16261ff1dc6f3930a1e255a33cece4f1b56658694f27f7"
dependencies = [
- "borsh",
"bytemuck",
"bytemuck_derive",
+ "num-derive",
+ "num-traits",
+ "solana-address 2.6.1",
+ "solana-instruction",
+ "solana-sdk-ids",
+ "solana-zk-sdk-pod",
]
[[package]]
name = "solana-zk-elgamal-proof-program"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bytemuck",
"criterion",
@@ -11513,10 +11784,10 @@ dependencies = [
[[package]]
name = "solana-zk-elgamal-proof-program-tests"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"bytemuck",
- "solana-account 4.3.0",
+ "solana-account 4.3.1",
"solana-compute-budget",
"solana-compute-budget-interface",
"solana-instruction",
@@ -11588,7 +11859,7 @@ dependencies = [
"serde_derive",
"serde_json",
"sha3",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-derivation-path",
"solana-instruction",
"solana-sdk-ids",
@@ -11601,9 +11872,22 @@ dependencies = [
"zeroize",
]
+[[package]]
+name = "solana-zk-sdk-pod"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a800583b7a4cea3e851686af162cc6e4712eef97fa91dfa9aca2459b95c84777"
+dependencies = [
+ "base64 0.22.1",
+ "bytemuck",
+ "bytemuck_derive",
+ "solana-nullable",
+ "thiserror 2.0.18",
+]
+
[[package]]
name = "solana-zk-token-proof-program"
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
dependencies = [
"solana-program-runtime",
]
@@ -11637,9 +11921,9 @@ dependencies = [
[[package]]
name = "spl-discriminator"
-version = "0.5.1"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d48cc11459e265d5b501534144266620289720b4c44522a47bc6b63cd295d2f3"
+checksum = "e597c5ff9ed7c74a54dbc47bae2f06e4db8c98f4356ad280200dc11878266db1"
dependencies = [
"bytemuck",
"solana-program-error",
@@ -11683,12 +11967,12 @@ dependencies = [
[[package]]
name = "spl-memo-interface"
-version = "2.0.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d4e2aedd58f858337fa609af5ad7100d4a243fdaf6a40d6eb4c28c5f19505d3"
+checksum = "3745d384b0afee980d43d62b66c27bdcbbd03507732b8d3626d3413cb72084f2"
dependencies = [
"solana-instruction",
- "solana-pubkey 3.0.0",
+ "solana-pubkey 4.2.0",
]
[[package]]
@@ -11697,7 +11981,6 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f9c6e142cdf1e7e77f480053ec9f0ce989890768ddf91f619b50f39d1b456f5"
dependencies = [
- "borsh",
"bytemuck",
"bytemuck_derive",
"num-derive",
@@ -11713,26 +11996,28 @@ dependencies = [
[[package]]
name = "spl-token-2022-interface"
-version = "2.1.0"
+version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fcd81188211f4b3c8a5eba7fd534c7142f9dd026123b3472492782cc72f4dc6"
+checksum = "821d96d034ea31c4965d182c742153c491ae0abee531331b55771086c5030d86"
dependencies = [
"arrayref",
"bytemuck",
+ "getrandom 0.2.15",
"num-derive",
"num-traits",
"num_enum",
"solana-account-info",
+ "solana-address 2.6.1",
"solana-instruction",
+ "solana-nullable",
"solana-program-error",
"solana-program-option",
"solana-program-pack",
- "solana-pubkey 3.0.0",
"solana-sdk-ids",
- "solana-zk-sdk 4.0.0",
- "spl-pod",
+ "solana-zero-copy",
+ "solana-zk-elgamal-proof-interface",
+ "solana-zk-sdk-pod",
"spl-token-confidential-transfer-proof-extraction",
- "spl-token-confidential-transfer-proof-generation",
"spl-token-group-interface",
"spl-token-metadata-interface",
"spl-type-length-value",
@@ -11741,32 +12026,21 @@ dependencies = [
[[package]]
name = "spl-token-confidential-transfer-proof-extraction"
-version = "0.5.1"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "879a9ebad0d77383d3ea71e7de50503554961ff0f4ef6cbca39ad126e6f6da3a"
+checksum = "0c1a845ec724e807643a04f1d43439ee3571dd913848112ac76aa90b850eaf7c"
dependencies = [
"bytemuck",
"solana-account-info",
- "solana-curve25519 3.1.4",
+ "solana-address 2.6.1",
+ "solana-curve25519",
"solana-instruction",
- "solana-instructions-sysvar",
+ "solana-instructions-sysvar 3.0.1",
"solana-msg",
"solana-program-error",
- "solana-pubkey 3.0.0",
"solana-sdk-ids",
- "solana-zk-sdk 4.0.0",
- "spl-pod",
- "thiserror 2.0.18",
-]
-
-[[package]]
-name = "spl-token-confidential-transfer-proof-generation"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f63a2b41095945dc15274b924b21ccae9b3ec9dc2fdd43dbc08de8c33bbcd915"
-dependencies = [
- "curve25519-dalek 4.1.3",
- "solana-zk-sdk 4.0.0",
+ "solana-zk-elgamal-proof-interface",
+ "solana-zk-sdk-pod",
"thiserror 2.0.18",
]
@@ -11780,7 +12054,7 @@ dependencies = [
"num-derive",
"num-traits",
"num_enum",
- "solana-address 2.6.0",
+ "solana-address 2.6.1",
"solana-instruction",
"solana-nullable",
"solana-program-error",
@@ -11791,9 +12065,9 @@ dependencies = [
[[package]]
name = "spl-token-interface"
-version = "2.0.0"
+version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c564ac05a7c8d8b12e988a37d82695b5ba4db376d07ea98bc4882c81f96c7f3"
+checksum = "7143c4e676984047a400e2fbd7ac29a1659f2b1b52b897cfde19316b562e4589"
dependencies = [
"arrayref",
"bytemuck",
@@ -11811,38 +12085,38 @@ dependencies = [
[[package]]
name = "spl-token-metadata-interface"
-version = "0.8.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c467c7c3bd056f8fe60119e7ec34ddd6f23052c2fa8f1f51999098063b72676"
+checksum = "3d3d96f175e7022ff200464dfa75a3708a4e9b70c83c4ecd04fe52ee479f4fef"
dependencies = [
"borsh",
"num-derive",
"num-traits",
+ "num_enum",
+ "solana-address 2.6.1",
"solana-borsh",
"solana-instruction",
+ "solana-nullable",
"solana-program-error",
- "solana-pubkey 3.0.0",
"spl-discriminator",
- "spl-pod",
"spl-type-length-value",
"thiserror 2.0.18",
]
[[package]]
name = "spl-type-length-value"
-version = "0.9.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca20a1a19f4507a98ca4b28ff5ed54cac9b9d34ed27863e2bde50a3238f9a6ac"
+checksum = "2504631748c48d2a937414d64a12dcac4588d34bd07d355d648619c189d29435"
dependencies = [
"bytemuck",
"num-derive",
"num-traits",
"num_enum",
"solana-account-info",
- "solana-msg",
"solana-program-error",
+ "solana-zero-copy",
"spl-discriminator",
- "spl-pod",
"thiserror 2.0.18",
]
@@ -11902,7 +12176,7 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
dependencies = [
- "heck",
+ "heck 0.5.0",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -11978,7 +12252,7 @@ version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cca424247104946a59dacd27eaad296223b7feec3d168a6dd04585183091eb0b"
dependencies = [
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"byteorder",
"enum-as-inner",
"libc",
@@ -11986,20 +12260,6 @@ dependencies = [
"walkdir",
]
-[[package]]
-name = "systemstat"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6e89b75de097d0c52a1dc2114e19439d55f0e2e42d32168c6df44f139dfb66f"
-dependencies = [
- "bytesize",
- "lazy_static",
- "libc",
- "nom",
- "time",
- "winapi",
-]
-
[[package]]
name = "tap"
version = "1.0.1"
@@ -12239,23 +12499,6 @@ dependencies = [
"time-core",
]
-[[package]]
-name = "tiny-bip39"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a30fd743a02bf35236f6faf99adb03089bb77e91c998dac2c2ad76bb424f668c"
-dependencies = [
- "once_cell",
- "pbkdf2 0.12.2",
- "rand 0.8.6",
- "rustc-hash 1.1.0",
- "sha2 0.10.9",
- "thiserror 1.0.69",
- "unicode-normalization",
- "wasm-bindgen",
- "zeroize",
-]
-
[[package]]
name = "tinystr"
version = "0.7.6"
@@ -12449,7 +12692,7 @@ dependencies = [
"base64 0.22.1",
"bytes",
"h2",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"http-body-util",
"hyper 1.8.1",
@@ -12474,7 +12717,7 @@ version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c68f61875ac5293cf72e6c8cf0158086428c82c37229e98c840878f1706b0322"
dependencies = [
- "prettyplease",
+ "prettyplease 0.2.37",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -12487,7 +12730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50849f68853be452acf590cde0b146665b8d507b3b8af17261df47e02c209ea0"
dependencies = [
"bytes",
- "prost 0.14.3",
+ "prost 0.14.4",
"tonic",
]
@@ -12497,10 +12740,10 @@ version = "0.14.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "654e5643eff75d7f8c99197ce1440ed19a3474eada74c12bbac488b2cafdae27"
dependencies = [
- "prettyplease",
+ "prettyplease 0.2.37",
"proc-macro2",
- "prost-build",
- "prost-types",
+ "prost-build 0.14.4",
+ "prost-types 0.14.4",
"quote",
"syn 2.0.117",
"tempfile",
@@ -12533,11 +12776,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
dependencies = [
"async-compression",
- "bitflags 2.11.1",
+ "bitflags 2.13.0",
"bytes",
"futures-core",
"futures-util",
- "http 1.4.0",
+ "http 1.4.2",
"http-body 1.0.1",
"http-body-util",
"iri-string",
@@ -12651,7 +12894,7 @@ checksum = "8628dcc84e5a09eb3d8423d6cb682965dea9133204e8fb3efee74c2a0c259442"
dependencies = [
"bytes",
"data-encoding",
- "http 1.4.0",
+ "http 1.4.2",
"httparse",
"log",
"rand 0.9.4",
@@ -12778,6 +13021,37 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "461d0c5956fcc728ecc03a3a961e4adc9a7975d86f6f8371389a289517c02ca9"
+[[package]]
+name = "ur-parse-lib"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88434c87d748dfb765bc5debbbab61d020392d23b568fe73eb44eaca46daa04"
+dependencies = [
+ "hex",
+ "keystone-ur",
+ "ur-registry",
+]
+
+[[package]]
+name = "ur-registry"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf91aff789fea1c05116a47b11fbe0bea32ef66e0c1f77b46550e1407efc4c6e"
+dependencies = [
+ "bs58",
+ "hex",
+ "keystone-ur",
+ "libflate",
+ "minicbor",
+ "no_std_io2",
+ "paste",
+ "prost 0.11.9",
+ "prost-build 0.11.9",
+ "prost-types 0.11.9",
+ "serde",
+ "thiserror 1.0.69",
+]
+
[[package]]
name = "uriparse"
version = "0.6.4"
@@ -13014,6 +13288,18 @@ dependencies = [
"rustls-pki-types",
]
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.39",
+]
+
[[package]]
name = "wide"
version = "0.7.33"
@@ -13057,10 +13343,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "wincode"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37095eb18dd6254c66217edc61a29d83d51f8818de8a2ffe88e4584ad73fb5f9"
+checksum = "66d967db7705dc29120bb6e8ce5b5a2e27734ed5976d1c904e95bd238d1c3c5a"
dependencies = [
+ "bv",
"bytes",
"pastey",
"proc-macro2",
@@ -13071,11 +13358,11 @@ dependencies = [
[[package]]
name = "wincode-derive"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e262d55d1261f31e2cfe49cc6385a421d14d99faa0526bbe3cc1bda0d3005c62"
+checksum = "15ab90b719560d0fda79c74550ad1c948d17b118765942838055ebaf34d67071"
dependencies = [
- "darling 0.21.3",
+ "darling",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -13404,6 +13691,12 @@ dependencies = [
"rustix 0.38.39",
]
+[[package]]
+name = "xxhash-rust"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
+
[[package]]
name = "yansi"
version = "1.0.1"
diff --git a/Cargo.toml b/Cargo.toml
index cd6cbc8c322..861b9bb68b5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,6 +11,7 @@ members = [
"banks-server",
"bloom",
"bls-cert-verify",
+ "bls-sigverify",
"bucket_map",
"builtins",
"builtins-default-costs",
@@ -26,6 +27,7 @@ members = [
"connection-cache",
"core",
"cost-model",
+ "cpu-utils",
"download-utils",
"entry",
"faucet",
@@ -100,14 +102,12 @@ members = [
"svm-log-collector",
"svm-measure",
"svm-timings",
- "svm-transaction",
"svm-type-overrides",
"syscalls",
"syscalls/gen-syscall-list",
"test-validator",
"tls-utils",
"tokens",
- "tps-client",
"tpu-client",
"tpu-client-next",
"transaction-context",
@@ -138,7 +138,7 @@ exclude = [
resolver = "2"
[workspace.package]
-version = "4.2.0-alpha.0"
+version = "4.3.0-alpha.0"
authors = ["Anza Maintainers "]
description = "Blockchain, Rebuilt for Scale"
repository = "https://github.com/anza-xyz/agave"
@@ -156,70 +156,79 @@ check-cfg = [
# Clippy lint configuration that can not be applied in clippy.toml
[workspace.lints.clippy]
+# Denied lints
arithmetic_side_effects = "deny"
default_trait_access = "deny"
manual_let_else = "deny"
+uninlined_format_args = "deny"
used_underscore_binding = "deny"
+# Allowed lints
+new_without_default = "allow"
+
[workspace.dependencies]
Inflector = "0.11.4"
-agave-banking-stage-ingress-types = { path = "banking-stage-ingress-types", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-bls-cert-verify = { path = "bls-cert-verify", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-feature-set = { path = "feature-set", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-fs = { path = "fs", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-geyser-plugin-interface = { path = "geyser-plugin-interface", version = "=4.2.0-alpha.0" }
-agave-io-uring = { path = "io-uring", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-logger = { path = "logger", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-math-utils = { path = "math-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-precompiles = { path = "precompiles", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-random = { path = "random", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-reserved-account-keys = { path = "reserved-account-keys", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-scheduler-bindings = { path = "scheduler-bindings", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-scheduling-utils = { path = "scheduling-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-snapshots = { path = "snapshots", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-transaction-view = { path = "transaction-view", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-votor = { path = "votor", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-votor-messages = { path = "votor-messages", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-xdp = { path = "xdp", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-agave-xdp-ebpf = { path = "xdp-ebpf", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+agave-banking-stage-ingress-types = { path = "banking-stage-ingress-types", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-bls-cert-verify = { path = "bls-cert-verify", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-bls-sigverify = { path = "bls-sigverify", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-cpu-utils = { path = "cpu-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-feature-set = { path = "feature-set", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-fs = { path = "fs", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-geyser-plugin-interface = { path = "geyser-plugin-interface", version = "=4.3.0-alpha.0" }
+agave-io-uring = { path = "io-uring", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-logger = { path = "logger", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-math-utils = { path = "math-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-precompiles = { path = "precompiles", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-random = { path = "random", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-reserved-account-keys = { path = "reserved-account-keys", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-scheduler-bindings = { path = "scheduler-bindings", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-scheduling-utils = { path = "scheduling-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-snapshots = { path = "snapshots", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-transaction-view = { path = "transaction-view", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-votor = { path = "votor", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-votor-messages = { path = "votor-messages", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-xdp = { path = "xdp", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+agave-xdp-ebpf = { path = "xdp-ebpf", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
ahash = "0.8.12"
anyhow = "1.0.102"
aquamarine = "0.6.0"
arbitrary = "1.4.2"
arc-swap = "1.9.1"
arrayref = "0.3.9"
-arrayvec = "0.7.6"
+arrayvec = "0.7.7"
assert_cmd = "2.2.2"
assert_matches = "1.5.0"
async-lock = "3.4.2"
async-trait = "0.1.89"
-aya = "0.13"
+aya = "0.14"
aya-ebpf = "0.1.1"
base64 = "0.22.1"
bencher = "0.1.5"
bincode = "1.3.3"
-bitflags = { version = "2.11.1" }
-bitvec = { version = "1.0.1", features = ["serde"] }
+bip39 = { version = "2.2.2", features = ["rand", "all-languages"] }
+bitflags = { version = "2.13.0" }
+bitvec = { version = "1.1.1", features = ["serde"] }
blake3 = "1.8.5"
blst = "0.3.16"
blstrs = "0.7.1"
-borsh = { version = "1.6.1", features = ["derive", "unstable__schema"] }
+borsh = { version = "1.7.0", features = ["derive", "unstable__schema"] }
bs58 = { version = "0.5.1", default-features = false }
bv = "0.11.1"
bytemuck = "1.25.0"
bytemuck_derive = "1.10.2"
-bytes = "1.11.1"
+bytes = "1.12.0"
+bytesize = "2.4.0"
bzip2 = "0.6.1"
caps = "0.5.6"
cfg-if = "1.0.4"
-chrono = { version = "0.4.44", default-features = false }
+chrono = { version = "0.4.45", default-features = false }
chrono-humanize = "0.2.3"
clap = { version = "2.33.1", default-features = false, features = ["suggestions"] }
console = "0.16.3"
const_format = "0.2.36"
-core_affinity = "0.8.3"
criterion = "0.8.2"
crossbeam-channel = "0.5.15"
+crossbeam-utils = "0.8.21"
csv = "1.4.0"
ctrlc = "3.5.2"
curve25519-dalek = { version = "4.1.3", features = ["digest", "rand_core"] }
@@ -229,10 +238,9 @@ derive_more = { version = "2.1.1", features = ["full"] }
dialoguer = "0.12.0"
digest = "0.10.7"
dirs-next = "2.0.0"
-dlopen2 = "0.8.2"
dyn-clone = "1.0.20"
eager = "0.1.0"
-ed25519-dalek = "=1.0.1"
+ed25519-dalek = "2.2"
enum-iterator = "2.3.0"
env_logger = "0.11.10"
fast-math = "0.1"
@@ -251,7 +259,7 @@ hex = "0.4.3"
hex-literal = "1.1.0"
hidapi = { version = "2.6.6", default-features = false }
histogram = "0.6.9"
-http = "1.4.0"
+http = "1.4.2"
humantime = "2.3.0"
hyper-util = "0.1.20"
imbl = "7.0.0"
@@ -280,10 +288,10 @@ libsecp256k1 = { version = "0.7.2", default-features = false, features = [
"std",
"static-context",
] }
-log = "0.4.29"
+log = "0.4.33"
lru = "0.18.0"
lz4 = "1.28.1"
-memmap2 = "0.9.10"
+memmap2 = "0.9.11"
memoffset = "0.9.1"
min-max-heap = "1.3.0"
mockall = "0.14.0"
@@ -303,233 +311,235 @@ predicates = "3.1"
pretty-hex = "0.4.2"
pretty_assertions = "1.4.1"
proptest = "1.11"
-prost = "0.14.3"
-prost-types = "0.14.3"
+prost = "0.14.4"
+prost-types = "0.14.4"
protobuf-src = "1.1.0"
-protosol = "=6.1.0"
+protosol = "=9.0.1"
qualifier_attr = { version = "0.2.2", default-features = false }
-quinn = "0.11.9"
+quinn = "0.11.11"
rand = "0.9.4"
rand_chacha = "0.9.0"
rayon = "1.12.0"
reed-solomon-erasure = "6.0.0"
-regex = "1.12.3"
+regex = "1.12.4"
reqwest = { version = "0.12.28", default-features = false }
reqwest-middleware = "0.4.2"
rolling-file = "0.2.0"
rpassword = "7.5"
rts-alloc = { version = "4.0.0" }
-rustls = { version = "0.23.40", features = ["std"], default-features = false }
+rusb = "0.9"
+rustls = { version = "0.23.41", features = ["std"], default-features = false }
scopeguard = "1.2.0"
semver = "1.0.28"
seqlock = "0.2.0"
serde = { version = "1.0.228", features = ["derive"] }
serde-big-array = "0.5.1"
serde_bytes = "0.11.19"
-serde_json = "1.0.149"
-serde_with = { version = "3.20.0", default-features = false }
+serde_json = "1.0.150"
+serde_with = { version = "3.21.0", default-features = false }
serde_yaml = "0.9.34"
-serial_test = "3.4.0"
+serial_test = "3.5.0"
shaq = { version = "3.0.0" }
shuttle = "0.7.1"
signal-hook = "0.4.4"
-siphasher = "1.0.2"
slab = "0.4.12"
slotmap = "1.0.7"
-smallvec = { version = "1.15.1", default-features = false, features = ["union"] }
+smallvec = { version = "1.15.2", default-features = false, features = ["union"] }
smpl_jwt = "0.9.0"
socket2 = "0.6.3"
soketto = "0.8"
-solana-account = "4.3.0"
-solana-account-decoder = { path = "account-decoder", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-account-decoder-client-types = { path = "account-decoder-client-types", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-account = "4.3.1"
+solana-account-decoder = { path = "account-decoder", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-account-decoder-client-types = { path = "account-decoder-client-types", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-account-info = "3.1.1"
-solana-accounts-db = { path = "accounts-db", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-address = "2.6.0"
+solana-accounts-db = { path = "accounts-db", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-address = "2.6.1"
solana-address-lookup-table-interface = "3.1.0"
-solana-banks-client = { path = "banks-client", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-banks-interface = { path = "banks-interface", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-banks-server = { path = "banks-server", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-banks-client = { path = "banks-client", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-banks-interface = { path = "banks-interface", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-banks-server = { path = "banks-server", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-bincode = "3.1.0"
solana-blake3-hasher = "3.1.0"
-solana-bloom = { path = "bloom", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-bloom = { path = "bloom", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-bls-signatures = { version = "3.3.0", features = ["serde"] }
solana-bls12-381-syscall = "0.1.0"
solana-bn254 = "3.2.1"
solana-borsh = "3.0.2"
-solana-bpf-loader-program = { path = "programs/bpf_loader", version = "=4.2.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
-solana-bucket-map = { path = "bucket_map", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-builtins = { path = "builtins", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-builtins-default-costs = { path = "builtins-default-costs", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-clap-utils = { path = "clap-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-clap-v3-utils = { path = "clap-v3-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-cli-config = { path = "cli-config", version = "=4.2.0-alpha.0" }
-solana-cli-output = { path = "cli-output", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-client = { path = "client", version = "=4.2.0-alpha.0" }
+solana-bpf-loader-program = { path = "programs/bpf_loader", version = "=4.3.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
+solana-bucket-map = { path = "bucket_map", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-builtins = { path = "builtins", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-builtins-default-costs = { path = "builtins-default-costs", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-clap-utils = { path = "clap-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-clap-v3-utils = { path = "clap-v3-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-cli-config = { path = "cli-config", version = "=4.3.0-alpha.0" }
+solana-cli-output = { path = "cli-output", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-client = { path = "client", version = "=4.3.0-alpha.0" }
solana-client-traits = "4.0.0"
solana-clock = "3.0.1"
solana-cluster-type = "3.1.0"
solana-commitment-config = "3.1.1"
-solana-compute-budget = { path = "compute-budget", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-compute-budget-instruction = { path = "compute-budget-instruction", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-compute-budget = { path = "compute-budget", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-compute-budget-instruction = { path = "compute-budget-instruction", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-compute-budget-interface = "3.0.0"
-solana-compute-budget-program = { path = "programs/compute-budget", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-compute-budget-program = { path = "programs/compute-budget", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-config-interface = "2.0.0"
-solana-connection-cache = { path = "connection-cache", version = "=4.2.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
-solana-core = { path = "core", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-cost-model = { path = "cost-model", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-connection-cache = { path = "connection-cache", version = "=4.3.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
+solana-core = { path = "core", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-cost-model = { path = "cost-model", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-cpi = "3.1.0"
-solana-curve25519 = "4.0.0"
+solana-curve25519 = "4.0.1"
solana-derivation-path = "3.0.0"
-solana-download-utils = { path = "download-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-download-utils = { path = "download-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-ed25519-program = "3.0.0"
-solana-entry = { path = "entry", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-entry = { path = "entry", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-epoch-info = "3.1.0"
-solana-epoch-rewards = "3.0.1"
+solana-epoch-rewards = "3.1.0"
solana-epoch-rewards-hasher = "3.1.0"
-solana-epoch-schedule = "3.1.0"
-solana-faucet = { path = "faucet", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-epoch-schedule = "3.2.0"
+solana-faucet = { path = "faucet", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-feature-gate-interface = "4.0.0"
-solana-fee = { path = "fee", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-fee-calculator = "3.2.0"
+solana-fee = { path = "fee", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-fee-calculator = "3.2.2"
solana-fee-structure = "3.0.0"
solana-file-download = "3.1.4"
-solana-frozen-abi = "3.4.0"
-solana-frozen-abi-macro = "3.3.0"
-solana-genesis = { path = "genesis", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-frozen-abi = "3.7.0"
+solana-frozen-abi-macro = "3.6.0"
+solana-genesis = { path = "genesis", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-genesis-config = "4.0.0"
-solana-genesis-utils = { path = "genesis-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-geyser-plugin-manager = { path = "geyser-plugin-manager", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-gossip = { path = "gossip", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-hard-forks = "3.1.0"
-solana-hash = "4.3.0"
+solana-genesis-utils = { path = "genesis-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-geyser-plugin-manager = { path = "geyser-plugin-manager", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-gossip = { path = "gossip", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-hard-forks = "3.1.1"
+solana-hash = "4.4.0"
solana-hash-512 = "1.1.0"
-solana-inflation = "3.1.0"
+solana-inflation = "3.1.1"
solana-instruction = "3.4.0"
-solana-instruction-error = "2.3.0"
-solana-instructions-sysvar = "3.0.0"
+solana-instruction-error = "2.4.0"
+solana-instructions-sysvar = "4.0.0"
solana-keccak-hasher = "3.1.0"
solana-keypair = "3.1.2"
-solana-last-restart-slot = "3.0.0"
-solana-lattice-hash = { path = "lattice-hash", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-leader-schedule = { path = "leader-schedule", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-ledger = { path = "ledger", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-last-restart-slot = "3.1.0"
+solana-lattice-hash = { path = "lattice-hash", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-leader-schedule = { path = "leader-schedule", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-ledger = { path = "ledger", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-loader-v2-interface = "3.0.0"
solana-loader-v3-interface = "7.0.0"
solana-loader-v4-interface = "3.1.0"
-solana-local-cluster = { path = "local-cluster", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-measure = { path = "measure", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-merkle-tree = { path = "merkle-tree", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-message = "4.1.1"
-solana-metrics = { path = "metrics", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-local-cluster = { path = "local-cluster", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-measure = { path = "measure", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-merkle-tree = { path = "merkle-tree", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-message = "4.2.4"
+solana-metrics = { path = "metrics", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-msg = "3.1.0"
solana-native-token = "3.0.0"
-solana-net-utils = { path = "net-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-net-utils = { path = "net-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-nohash-hasher = "0.2.1"
solana-nonce = "3.2.0"
solana-nonce-account = "4.1.0"
-solana-notifier = { path = "notifier", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-notifier = { path = "notifier", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-offchain-message = "3.0.0"
solana-packet = "4.1.0"
-solana-perf = { path = "perf", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-poh = { path = "poh", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-perf = { path = "perf", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-poh = { path = "poh", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-poh-config = "3.0.0"
solana-poseidon = "4.0.0"
solana-precompile-error = "3.0.0"
solana-presigner = "3.0.0"
solana-program = { version = "4.0.0", default-features = false }
-solana-program-binaries = { path = "program-binaries", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-program-binaries = { path = "program-binaries", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-program-entrypoint = "3.1.1"
solana-program-error = "3.0.1"
solana-program-option = "3.1.0"
solana-program-pack = "3.1.0"
-solana-program-runtime = { path = "program-runtime", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-program-test = { path = "program-test", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-program-runtime = { path = "program-runtime", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-program-test = { path = "program-test", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-pubkey = { version = "4.2.0", default-features = false }
-solana-pubsub-client = { path = "pubsub-client", version = "=4.2.0-alpha.0" }
-solana-quic-client = { path = "quic-client", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-rayon-threadlimit = { path = "rayon-threadlimit", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-remote-wallet = { path = "remote-wallet", version = "=4.2.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
-solana-rent = "4.2.0"
+solana-pubsub-client = { path = "pubsub-client", version = "=4.3.0-alpha.0" }
+solana-quic-client = { path = "quic-client", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-rayon-threadlimit = { path = "rayon-threadlimit", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-remote-wallet = { path = "remote-wallet", version = "=4.3.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
+solana-rent = "4.2.1"
solana-reward-info = "6.2.0"
-solana-rpc = { path = "rpc", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-rpc-client = { path = "rpc-client", version = "=4.2.0-alpha.0", default-features = false }
-solana-rpc-client-api = { path = "rpc-client-api", version = "=4.2.0-alpha.0" }
-solana-rpc-client-nonce-utils = { path = "rpc-client-nonce-utils", version = "=4.2.0-alpha.0" }
-solana-rpc-client-types = { path = "rpc-client-types", version = "=4.2.0-alpha.0" }
-solana-runtime = { path = "runtime", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-runtime-transaction = { path = "runtime-transaction", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-rpc = { path = "rpc", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-rpc-client = { path = "rpc-client", version = "=4.3.0-alpha.0", default-features = false }
+solana-rpc-client-api = { path = "rpc-client-api", version = "=4.3.0-alpha.0" }
+solana-rpc-client-nonce-utils = { path = "rpc-client-nonce-utils", version = "=4.3.0-alpha.0" }
+solana-rpc-client-types = { path = "rpc-client-types", version = "=4.3.0-alpha.0" }
+solana-runtime = { path = "runtime", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-runtime-transaction = { path = "runtime-transaction", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-sanitize = "3.0.1"
-solana-sbpf = { version = "=0.20.0", default-features = false }
+solana-sbpf = { version = "=0.21.1", default-features = false }
solana-sdk-ids = "3.1.0"
solana-secp256k1-program = "3.0.1"
solana-secp256k1-recover = "3.1.1"
solana-secp256r1-program = "3.0.0"
solana-seed-derivable = "3.0.0"
solana-seed-phrase = "3.0.0"
-solana-send-transaction-service = { path = "send-transaction-service", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-send-transaction-service = { path = "send-transaction-service", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-serde = "3.0.0"
solana-serde-varint = "3.0.1"
-solana-serialize-utils = "3.1.1"
+solana-serialize-utils = "3.1.2"
solana-sha256-hasher = "3.1.0"
solana-sha512-hasher = "1.0.1"
-solana-short-vec = "3.2.1"
+solana-short-vec = "3.2.2"
solana-shred-version = "3.0.1"
-solana-signature = { version = "3.4.0", default-features = false }
-solana-signer = "3.0.0"
+solana-signature = { version = "3.4.1", default-features = false }
+solana-signer = "3.0.1"
solana-signer-store = "0.1.0"
-solana-slot-hashes = "3.0.1"
+solana-slot-hashes = "3.1.0"
solana-slot-history = "3.0.1"
solana-stable-layout = "3.0.1"
-solana-stake-interface = "3.1.0"
-solana-storage-bigtable = { path = "storage-bigtable", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-storage-proto = { path = "storage-proto", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-streamer = { path = "streamer", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm = { path = "svm", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-callback = { path = "svm-callback", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-feature-set = { path = "svm-feature-set", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-log-collector = { path = "svm-log-collector", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-measure = { path = "svm-measure", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-timings = { path = "svm-timings", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-transaction = { path = "svm-transaction", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-svm-type-overrides = { path = "svm-type-overrides", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-syscalls = { path = "syscalls", version = "=4.2.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
+solana-stake-interface = "4.3.0"
+solana-storage-bigtable = { path = "storage-bigtable", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-storage-proto = { path = "storage-proto", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-streamer = { path = "streamer", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm = { path = "svm", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm-callback = { path = "svm-callback", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm-feature-set = { path = "svm-feature-set", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm-log-collector = { path = "svm-log-collector", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm-measure = { path = "svm-measure", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm-timings = { path = "svm-timings", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-svm-transaction = "4.2.0"
+solana-svm-type-overrides = { path = "svm-type-overrides", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-syscalls = { path = "syscalls", version = "=4.3.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
solana-system-interface = { version = "3.2", features = ["alloc", "bincode", "serde", "wincode"] }
-solana-system-program = { path = "programs/system", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-system-program = { path = "programs/system", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-system-transaction = "4.0.0"
solana-sysvar = "4.0.0"
solana-sysvar-id = "3.1.0"
-solana-test-validator = { path = "test-validator", version = "=4.2.0-alpha.0" }
+solana-test-validator = { path = "test-validator", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-time-utils = "3.0.0"
-solana-tls-utils = { path = "tls-utils", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-tpu-client = { path = "tpu-client", version = "=4.2.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
-solana-tpu-client-next = { path = "tpu-client-next", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-transaction = "4.1.1"
-solana-transaction-context = { path = "transaction-context", version = "=4.2.0-alpha.0", features = ["agave-unstable-api", "bincode"] }
-solana-transaction-error = "3.2.0"
-solana-transaction-status = { path = "transaction-status", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-transaction-status-client-types = { path = "transaction-status-client-types", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-turbine = { path = "turbine", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-udp-client = { path = "udp-client", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-unified-scheduler-logic = { path = "unified-scheduler-logic", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-unified-scheduler-pool = { path = "unified-scheduler-pool", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-tls-utils = { path = "tls-utils", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-tpu-client = { path = "tpu-client", version = "=4.3.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
+solana-tpu-client-next = { path = "tpu-client-next", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-transaction = "4.1.4"
+solana-transaction-context = { path = "transaction-context", version = "=4.3.0-alpha.0", features = ["agave-unstable-api", "bincode"] }
+solana-transaction-error = "3.3.1"
+solana-transaction-status = { path = "transaction-status", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-transaction-status-client-types = { path = "transaction-status-client-types", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-turbine = { path = "turbine", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-udp-client = { path = "udp-client", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-unified-scheduler-logic = { path = "unified-scheduler-logic", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-unified-scheduler-pool = { path = "unified-scheduler-pool", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-validator-exit = "3.0.0"
-solana-version = { path = "version", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-vote = { path = "vote", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
-solana-vote-interface = "6.0.0"
-solana-vote-program = { path = "programs/vote", version = "=4.2.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
-solana-zk-elgamal-proof-program = { path = "programs/zk-elgamal-proof", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-version = { path = "version", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-vote = { path = "vote", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
+solana-vote-interface = "6.0.2"
+solana-vote-program = { path = "programs/vote", version = "=4.3.0-alpha.0", default-features = false, features = ["agave-unstable-api"] }
+solana-wincode-varint = "1.0.0"
+solana-zk-elgamal-proof-program = { path = "programs/zk-elgamal-proof", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
solana-zk-sdk = "5.0.1"
-solana-zk-token-proof-program = { path = "programs/zk-token-proof", version = "=4.2.0-alpha.0", features = ["agave-unstable-api"] }
+solana-zk-sdk-pod = "0.1.2"
+solana-zk-token-proof-program = { path = "programs/zk-token-proof", version = "=4.3.0-alpha.0", features = ["agave-unstable-api"] }
spl-associated-token-account-interface = "2.0.0"
spl-generic-token = "2.0.0"
-spl-memo-interface = "2.0.0"
+spl-memo-interface = "2.1.0"
spl-pod = "0.7.3"
-spl-token-2022-interface = "2.1.0"
-spl-token-confidential-transfer-proof-extraction = "0.5.1"
+spl-token-2022-interface = "3.1.0"
+spl-token-confidential-transfer-proof-extraction = "0.6.1"
spl-token-group-interface = "0.7.2"
-spl-token-interface = "2.0.0"
-spl-token-metadata-interface = "0.8.0"
+spl-token-interface = "3.0.0"
+spl-token-metadata-interface = "1.0.1"
static_assertions = "1.1.0"
stream-cancel = "0.8.2"
strum = "0.28.0"
@@ -537,13 +547,11 @@ strum_macros = "0.28.0"
symlink = "0.1.0"
sys-info = "0.9.1"
sysctl = "0.7.1"
-systemstat = "0.2.6"
tar = "0.4.46"
tarpc = "0.29.0"
tempfile = "3.27.0"
test-case = "3.3.1"
thiserror = "2.0.18"
-tiny-bip39 = "2.0.0"
tokio = "1.52.3"
tokio-serde = "0.8"
tokio-stream = "0.1.18"
@@ -558,12 +566,15 @@ trees = "0.4.2"
trezor-client = { version = "0.1.5", default-features = false, features = ["solana"] }
tungstenite = "0.28.0"
unwrap_none = "0.1.2"
+ur-parse-lib = { version = "1.0.3", default-features = false, features = ["std"] }
+ur-registry = { version = "1.0.3", default-features = false, features = ["std"] }
uriparse = "0.6.4"
url = "2.5.8"
winapi = "0.3.8"
-wincode = { version = "0.5.4", features = ["derive"] }
+wincode = { version = "0.5.5", features = ["derive"] }
winreg = "0.55"
x509-parser = "0.18.1"
+xxhash-rust = "0.8.5"
zstd = "0.13.3"
[profile.dev]
diff --git a/README.md b/README.md
index 779a55659bd..e9b66d5e4b7 100644
--- a/README.md
+++ b/README.md
@@ -51,7 +51,21 @@ $ ./cargo build
```
> [!NOTE]
-> Note that this builds a debug version that is **not suitable for running a testnet or mainnet validator**. Please read [`docs/src/cli/install.md`](docs/src/cli/install.md#build-from-source) for instructions to build a release version for test and production uses.
+> Note that this builds a debug version that is **not suitable for running a testnet or mainnet validator**. Please read [the install guide](https://docs.anza.xyz/cli/install#build-from-source) for instructions to build a release version for test and production uses.
+
+## **4. Grant capabilities for XDP (Linux-only).**
+
+XDP transmit is enabled on Linux by default and requires extra capabilities. After building, grant them to the validator binary:
+
+```bash
+$ sudo setcap 'cap_net_admin,cap_net_raw+eip'
+```
+
+For XDP zero-copy mode (`--xdp-zero-copy`), additional capabilities are needed:
+
+```bash
+$ sudo setcap 'cap_net_admin,cap_net_raw,cap_bpf,cap_perfmon+eip'
+```
# Testing
diff --git a/RELEASE.md b/RELEASE.md
index e22e5c1b7fb..10ab7ae56f3 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -91,34 +91,16 @@ Then proceed with the usual "Miscellaneous Clean up" steps below.
#### Steps
-1. Check out the latest commit on `master` branch:
- ```
- git fetch --all
- git checkout upstream/master
- ```
+1. Update master branch to the next release minor version: dispatch [Bump Version](https://github.com/anza-xyz/agave/actions/workflows/bump-version.yml) pipeline against `master` branch to create the version bump PR. `Version bump level` should be either `minor` or `major`.
+1. Review version bump PR, get all required approvals and merge it.
+1. Determine the last commit **right before the version bump commit**.
1. Determine the new branch name. The name should be "v" + the first 2 version fields
- from Cargo.toml. For example, a Cargo.toml with version = "0.9.0" implies
+ from Cargo.toml **at the commit right before the version bump commit**. For example, a Cargo.toml with version = "0.9.0" implies
the next branch name is "v0.9".
1. Create the new branch and push this branch to the `agave` repository:
```
- git checkout -b
- git push -u origin
- ```
-
-Alternatively use the Github UI.
-
-### Update master branch to the next release minor version
-
-1. After the new branch has been created and pushed, update the Cargo.toml files on **master** to the next semantic version (e.g. 0.9.0 -> 0.10.0) with:
- ```
- $ scripts/increment-cargo-version.sh minor
- ```
-1. Push all the changed Cargo.toml and Cargo.lock files to the `master` branch with something like:
- ```
- git co -b version_update
- git ls-files -m | xargs git add
- git commit -m 'Bump version to X.Y+1.0'
- git push -u origin version_update
+ git checkout -b
+ git push -u upstream
```
1. Confirm that your freshly cut release branch is shown as `BETA_CHANNEL` and the previous release branch as `STABLE_CHANNEL`:
```
diff --git a/SECURITY.md b/SECURITY.md
index 2aa306418ce..27e1ec92a16 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -14,6 +14,10 @@ Provide a helpful title, detailed description of the vulnerability and an exploi
proof-of-concept. Speculative submissions without proof-of-concept will be closed
with no further consideration.
+Create one GHSA per finding. GHSAs reporting multiple findings will be closed as
+invalid. Such reports will not be eligible for bug bounties and will not hold a
+position in duplicate report standings.
+
For vulnerabilities regarding SPL programs, please refer to the repositories
and their associated security policy within the [solana-program organization](https://github.com/solana-program).
@@ -196,6 +200,7 @@ one week in order to be eligible for a bounty
* In the stable and beta branches, vulnerabilities are eligible for bounty
upon merge
* Submissions _MUST_ include an exploit proof-of-concept to be considered eligible
+* Only reports describing a [single finding](#reporting) will be considered eligible
* The participant submitting the bug report shall follow the process outlined within this document
* Valid exploits can be eligible even if they are not successfully executed on a public cluster
* Multiple submissions for the same class of exploit are still eligible for compensation, though may be compensated at a lower rate, however these will be assessed on a case-by-case basis
diff --git a/account-decoder-client-types/Cargo.toml b/account-decoder-client-types/Cargo.toml
index 5dc4e3c8f61..00520988ab3 100644
--- a/account-decoder-client-types/Cargo.toml
+++ b/account-decoder-client-types/Cargo.toml
@@ -26,3 +26,6 @@ serde_json = { workspace = true }
solana-account = { workspace = true }
solana-pubkey = { workspace = true }
zstd = { workspace = true, optional = true }
+
+[lints]
+workspace = true
diff --git a/account-decoder-client-types/src/lib.rs b/account-decoder-client-types/src/lib.rs
index 9d91da26d75..a41d40ba2d8 100644
--- a/account-decoder-client-types/src/lib.rs
+++ b/account-decoder-client-types/src/lib.rs
@@ -1,6 +1,6 @@
#![cfg(feature = "agave-unstable-api")]
//! Core RPC client types for solana-account-decoder
-#![cfg_attr(docsrs, feature(doc_auto_cfg))]
+#![cfg_attr(docsrs, feature(doc_cfg))]
#[cfg(feature = "zstd")]
use std::io::Read;
use {
diff --git a/account-decoder-client-types/src/token.rs b/account-decoder-client-types/src/token.rs
index fa7162457b0..3b6809e79cc 100644
--- a/account-decoder-client-types/src/token.rs
+++ b/account-decoder-client-types/src/token.rs
@@ -124,6 +124,7 @@ pub enum UiExtension {
ScaledUiAmountConfig(UiScaledUiAmountConfig),
PausableConfig(UiPausableConfig),
PausableAccount,
+ PermissionedBurnConfig(UiPermissionedBurnConfig),
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
@@ -337,3 +338,9 @@ pub struct UiPausableConfig {
pub authority: Option,
pub paused: bool,
}
+
+#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
+#[serde(rename_all = "camelCase")]
+pub struct UiPermissionedBurnConfig {
+ pub authority: Option,
+}
diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml
index 578b5275a8c..effa6dbd07c 100644
--- a/account-decoder/Cargo.toml
+++ b/account-decoder/Cargo.toml
@@ -11,6 +11,8 @@ edition = { workspace = true }
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
+all-features = true
+rustdoc-args = ["--cfg=docsrs"]
[features]
agave-unstable-api = []
@@ -41,17 +43,19 @@ solana-program-pack = { workspace = true }
solana-pubkey = { workspace = true }
solana-rent = { workspace = true }
solana-sdk-ids = { workspace = true }
-solana-slot-hashes = { workspace = true }
-solana-slot-history = { workspace = true }
+solana-slot-hashes = { workspace = true, features = ["wincode"] }
+solana-slot-history = { workspace = true, features = ["wincode"] }
solana-stake-interface = { workspace = true, features = ["bincode", "sysvar"] }
solana-sysvar = { workspace = true }
solana-vote-interface = { workspace = true, features = ["bincode"] }
+solana-zk-sdk-pod = { workspace = true }
spl-generic-token = { workspace = true }
spl-token-2022-interface = { workspace = true }
spl-token-group-interface = { workspace = true }
spl-token-interface = { workspace = true }
spl-token-metadata-interface = { workspace = true }
thiserror = { workspace = true }
+wincode = { workspace = true }
zstd = { workspace = true }
[dev-dependencies]
diff --git a/account-decoder/src/parse_stake.rs b/account-decoder/src/parse_stake.rs
index 433e5079a8f..32e603f9c97 100644
--- a/account-decoder/src/parse_stake.rs
+++ b/account-decoder/src/parse_stake.rs
@@ -194,7 +194,7 @@ mod test {
stake: 20,
activation_epoch: 2,
deactivation_epoch: u64::MAX,
- warmup_cooldown_rate: 0.25,
+ _reserved: [0; 8],
},
credits_observed: 10,
};
diff --git a/account-decoder/src/parse_sysvar.rs b/account-decoder/src/parse_sysvar.rs
index af48808f51b..cdd4c0e0eb5 100644
--- a/account-decoder/src/parse_sysvar.rs
+++ b/account-decoder/src/parse_sysvar.rs
@@ -56,23 +56,27 @@ pub fn parse_sysvar(data: &[u8], pubkey: &Pubkey) -> Result(data).ok().map(|slot_hashes| {
- let slot_hashes = slot_hashes
- .iter()
- .map(|slot_hash| UiSlotHashEntry {
- slot: slot_hash.0,
- hash: slot_hash.1.to_string(),
- })
- .collect();
- SysvarAccountType::SlotHashes(slot_hashes)
- })
+ wincode::deserialize::(data)
+ .ok()
+ .map(|slot_hashes| {
+ let slot_hashes = slot_hashes
+ .iter()
+ .map(|slot_hash| UiSlotHashEntry {
+ slot: slot_hash.0,
+ hash: slot_hash.1.to_string(),
+ })
+ .collect();
+ SysvarAccountType::SlotHashes(slot_hashes)
+ })
} else if pubkey == &sysvar::slot_history::id() {
- deserialize::(data).ok().map(|slot_history| {
- SysvarAccountType::SlotHistory(UiSlotHistory {
- next_slot: slot_history.next_slot,
- bits: format!("{:?}", SlotHistoryBits(slot_history.bits)),
+ wincode::deserialize::(data)
+ .ok()
+ .map(|slot_history| {
+ SysvarAccountType::SlotHistory(UiSlotHistory {
+ next_slot: slot_history.next_slot,
+ bits: format!("{:?}", SlotHistoryBits(slot_history.bits)),
+ })
})
- })
} else if pubkey == &sysvar::stake_history::id() {
deserialize::(data).ok().map(|stake_history| {
let stake_history = stake_history
@@ -266,8 +270,11 @@ mod test {
#[allow(deprecated)]
use solana_sysvar::recent_blockhashes::IterItem;
use {
- super::*, solana_account::create_account_for_test, solana_fee_calculator::FeeCalculator,
+ super::*,
+ solana_account::{Account, create_account_for_test},
+ solana_fee_calculator::FeeCalculator,
solana_hash::Hash,
+ solana_stake_interface::stake_history::SIZE,
};
#[test]
@@ -362,7 +369,8 @@ mod test {
deactivating: 3,
};
stake_history.add(1, stake_history_entry.clone());
- let stake_history_sysvar = create_account_for_test(&stake_history);
+ let stake_history_sysvar =
+ Account::new_data_with_space(1, &stake_history, SIZE, &sysvar::id()).unwrap();
assert_eq!(
parse_sysvar(&stake_history_sysvar.data, &sysvar::stake_history::id()).unwrap(),
SysvarAccountType::StakeHistory(vec![UiStakeHistoryEntry {
diff --git a/account-decoder/src/parse_token.rs b/account-decoder/src/parse_token.rs
index 4718b3b716b..3eb87ee1e75 100644
--- a/account-decoder/src/parse_token.rs
+++ b/account-decoder/src/parse_token.rs
@@ -173,14 +173,15 @@ pub fn get_token_account_mint(data: &[u8]) -> Option {
mod test {
use {
super::*,
- crate::parse_token_extension::{UiMemoTransfer, UiMintCloseAuthority},
+ crate::parse_token_extension::{
+ UiMemoTransfer, UiMintCloseAuthority, UiPermissionedBurnConfig,
+ },
solana_account_decoder_client_types::token::UiExtension,
- spl_pod::optional_keys::OptionalNonZeroPubkey,
spl_token_2022_interface::extension::{
BaseStateWithExtensionsMut, ExtensionType, StateWithExtensionsMut,
immutable_owner::ImmutableOwner, interest_bearing_mint::InterestBearingConfig,
memo_transfer::MemoTransfer, mint_close_authority::MintCloseAuthority,
- scaled_ui_amount::ScaledUiAmountConfig,
+ permissioned_burn::PermissionedBurnConfig, scaled_ui_amount::ScaledUiAmountConfig,
},
};
@@ -624,8 +625,7 @@ mod test {
let mint_close_authority = mint_state
.init_extension::(true)
.unwrap();
- mint_close_authority.close_authority =
- OptionalNonZeroPubkey::try_from(Some(owner_pubkey)).unwrap();
+ mint_close_authority.close_authority = owner_pubkey.into();
mint_state.base = mint_base;
mint_state.pack_base();
@@ -645,4 +645,48 @@ mod test {
}),
);
}
+
+ #[test]
+ fn test_parse_token_mint_with_permissioned_burn() {
+ let owner_pubkey = Pubkey::new_from_array([3; 32]);
+ let authority_pubkey = Pubkey::new_from_array([4; 32]);
+ let mint_size =
+ ExtensionType::try_calculate_account_len::(&[ExtensionType::PermissionedBurn])
+ .unwrap();
+ let mint_base = Mint {
+ mint_authority: COption::Some(owner_pubkey),
+ supply: 42,
+ decimals: 3,
+ is_initialized: true,
+ freeze_authority: COption::Some(owner_pubkey),
+ };
+ let mut mint_data = vec![0; mint_size];
+ let mut mint_state =
+ StateWithExtensionsMut::::unpack_uninitialized(&mut mint_data).unwrap();
+
+ let permissioned_burn = mint_state
+ .init_extension::(true)
+ .unwrap();
+ permissioned_burn.authority = authority_pubkey.into();
+
+ mint_state.base = mint_base;
+ mint_state.pack_base();
+ mint_state.init_account_type().unwrap();
+
+ assert_eq!(
+ parse_token_v3(&mint_data, None).unwrap(),
+ TokenAccountType::Mint(UiMint {
+ mint_authority: Some(owner_pubkey.to_string()),
+ supply: 42.to_string(),
+ decimals: 3,
+ is_initialized: true,
+ freeze_authority: Some(owner_pubkey.to_string()),
+ extensions: vec![UiExtension::PermissionedBurnConfig(
+ UiPermissionedBurnConfig {
+ authority: Some(authority_pubkey.to_string()),
+ }
+ )],
+ }),
+ );
+ }
}
diff --git a/account-decoder/src/parse_token_extension.rs b/account-decoder/src/parse_token_extension.rs
index 958ff2afa6d..73de38b619c 100644
--- a/account-decoder/src/parse_token_extension.rs
+++ b/account-decoder/src/parse_token_extension.rs
@@ -3,17 +3,18 @@ pub use solana_account_decoder_client_types::token::{
UiConfidentialTransferFeeConfig, UiConfidentialTransferMint, UiCpiGuard, UiDefaultAccountState,
UiExtension, UiGroupMemberPointer, UiGroupPointer, UiInterestBearingConfig, UiMemoTransfer,
UiMetadataPointer, UiMintCloseAuthority, UiPausableConfig, UiPermanentDelegate,
- UiScaledUiAmountConfig, UiTokenGroup, UiTokenGroupMember, UiTokenMetadata, UiTransferFee,
- UiTransferFeeAmount, UiTransferFeeConfig, UiTransferHook, UiTransferHookAccount,
+ UiPermissionedBurnConfig, UiScaledUiAmountConfig, UiTokenGroup, UiTokenGroupMember,
+ UiTokenMetadata, UiTransferFee, UiTransferFeeAmount, UiTransferFeeConfig, UiTransferHook,
+ UiTransferHookAccount,
};
use {
crate::parse_token::convert_account_state,
solana_clock::UnixTimestamp,
solana_program_pack::Pack,
solana_pubkey::Pubkey,
- spl_token_2022_interface::{
- extension::{self, BaseState, BaseStateWithExtensions, ExtensionType, StateWithExtensions},
- solana_zk_sdk::encryption::pod::elgamal::PodElGamalPubkey,
+ solana_zk_sdk_pod::encryption::elgamal::PodElGamalPubkey,
+ spl_token_2022_interface::extension::{
+ self, BaseState, BaseStateWithExtensions, ExtensionType, StateWithExtensions,
},
spl_token_group_interface::state::{TokenGroup, TokenGroupMember},
spl_token_metadata_interface::state::TokenMetadata,
@@ -153,6 +154,12 @@ pub fn parse_extension(
.map(|&extension| UiExtension::PausableConfig(convert_pausable_config(extension)))
.unwrap_or(UiExtension::UnparseableExtension),
ExtensionType::PausableAccount => UiExtension::PausableAccount,
+ ExtensionType::PermissionedBurn => account
+ .get_extension::()
+ .map(|&extension| {
+ UiExtension::PermissionedBurnConfig(convert_permissioned_burn_config(extension))
+ })
+ .unwrap_or(UiExtension::UnparseableExtension),
}
}
@@ -436,3 +443,12 @@ fn convert_pausable_config(
paused: pausable_config.paused.into(),
}
}
+
+fn convert_permissioned_burn_config(
+ permissioned_burn_config: extension::permissioned_burn::PermissionedBurnConfig,
+) -> UiPermissionedBurnConfig {
+ let authority: Option = permissioned_burn_config.authority.into();
+ UiPermissionedBurnConfig {
+ authority: authority.map(|pubkey| pubkey.to_string()),
+ }
+}
diff --git a/accounts-cluster-bench/Cargo.toml b/accounts-cluster-bench/Cargo.toml
index b71feeda172..b2035d11bf4 100644
--- a/accounts-cluster-bench/Cargo.toml
+++ b/accounts-cluster-bench/Cargo.toml
@@ -57,4 +57,7 @@ solana-local-cluster = { path = "../local-cluster", features = ["agave-unstable-
solana-native-token = { workspace = true }
solana-poh-config = { workspace = true }
solana-runtime = { path = "../runtime", features = ["agave-unstable-api", "dev-context-only-utils"] }
-solana-test-validator = { path = "../test-validator" }
+solana-test-validator = { path = "../test-validator", features = ["agave-unstable-api", "dev-context-only-utils"] }
+
+[lints]
+workspace = true
diff --git a/accounts-cluster-bench/src/main.rs b/accounts-cluster-bench/src/main.rs
index 052b68ea2ae..fcc9915f233 100644
--- a/accounts-cluster-bench/src/main.rs
+++ b/accounts-cluster-bench/src/main.rs
@@ -422,7 +422,7 @@ fn process_get_transaction(
stats.errors += 1;
stats.total_errors_time_us += measure.as_us();
if last_error.elapsed().as_secs() > 2 {
- info!("get_transaction error: {:?}", &e);
+ info!("get_transaction error: {e:?}");
*last_error = Instant::now();
}
}
diff --git a/accounts-db/Cargo.toml b/accounts-db/Cargo.toml
index 650be86d053..8a15a33a9e2 100644
--- a/accounts-db/Cargo.toml
+++ b/accounts-db/Cargo.toml
@@ -11,6 +11,8 @@ edition = { workspace = true }
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
+all-features = true
+rustdoc-args = ["--cfg=docsrs"]
[lib]
crate-type = ["lib"]
@@ -117,6 +119,10 @@ test-case = { workspace = true }
[target.'cfg(not(any(target_env = "msvc", target_os = "freebsd")))'.dev-dependencies]
jemallocator = { workspace = true }
+[[bench]]
+name = "accounts_index"
+harness = false
+
[[bench]]
name = "bench_accounts_file"
harness = false
diff --git a/accounts-db/benches/accounts_index.rs b/accounts-db/benches/accounts_index.rs
index 14a15fa8199..cde9802fca5 100644
--- a/accounts-db/benches/accounts_index.rs
+++ b/accounts-db/benches/accounts_index.rs
@@ -1,27 +1,20 @@
-#![feature(test)]
-
-extern crate test;
-
use {
+ criterion::{Criterion, criterion_group, criterion_main},
rand::{Rng, rng},
- solana_account::AccountSharedData,
solana_accounts_db::{
account_info::AccountInfo,
accounts_index::{
- ACCOUNTS_INDEX_CONFIG_FOR_BENCHMARKS, AccountSecondaryIndexes, AccountsIndex,
- ReclaimsSlotList, UpsertReclaim,
+ ACCOUNTS_INDEX_CONFIG_FOR_BENCHMARKS, AccountsIndex, ReclaimsSlotList, UpsertReclaim,
},
},
std::sync::Arc,
- test::Bencher,
};
#[cfg(not(any(target_env = "msvc", target_os = "freebsd")))]
#[global_allocator]
static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc;
-#[bench]
-fn bench_accounts_index(bencher: &mut Bencher) {
+fn bench_accounts_index(c: &mut Criterion) {
const NUM_PUBKEYS: usize = 10_000;
let pubkeys: Vec<_> = (0..NUM_PUBKEYS)
.map(|_| solana_pubkey::new_rand())
@@ -40,8 +33,6 @@ fn bench_accounts_index(bencher: &mut Bencher) {
f,
f,
pubkey,
- &AccountSharedData::default(),
- &AccountSecondaryIndexes::default(),
AccountInfo::default(),
&mut reclaims,
UpsertReclaim::PopulateReclaims,
@@ -50,24 +41,24 @@ fn bench_accounts_index(bencher: &mut Bencher) {
}
let mut fork = NUM_FORKS;
- let mut root = 0;
- bencher.iter(|| {
- for _p in 0..NUM_PUBKEYS {
- let pubkey = rng().random_range(0..NUM_PUBKEYS);
- index.upsert(
- fork,
- fork,
- &pubkeys[pubkey],
- &AccountSharedData::default(),
- &AccountSecondaryIndexes::default(),
- AccountInfo::default(),
- &mut reclaims,
- UpsertReclaim::PopulateReclaims,
- );
- reclaims.clear();
- }
- index.add_root(root);
- root += 1;
- fork += 1;
+ c.bench_function("accounts_index", |b| {
+ b.iter(|| {
+ for _p in 0..NUM_PUBKEYS {
+ let pubkey = rng().random_range(0..NUM_PUBKEYS);
+ index.upsert(
+ fork,
+ fork,
+ &pubkeys[pubkey],
+ AccountInfo::default(),
+ &mut reclaims,
+ UpsertReclaim::PopulateReclaims,
+ );
+ reclaims.clear();
+ }
+ fork = fork.checked_add(1).expect("fork overflow");
+ });
});
}
+
+criterion_group!(benches, bench_accounts_index);
+criterion_main!(benches);
diff --git a/accounts-db/src/account_info.rs b/accounts-db/src/account_info.rs
index 3096f501a0b..4ddd42ae551 100644
--- a/accounts-db/src/account_info.rs
+++ b/accounts-db/src/account_info.rs
@@ -1,4 +1,4 @@
-//! AccountInfo represents a reference to AccountSharedData in either an AppendVec or the write cache.
+//! AccountInfo represents a reference to AccountSharedData in an AppendVec
//! AccountInfo is not persisted anywhere between program runs.
//! AccountInfo is purely runtime state.
//! Note that AccountInfo is saved to disk buckets during runtime, but disk buckets are recreated at startup.
@@ -6,7 +6,7 @@ use {
crate::{
accounts_db::AccountsFileId,
accounts_file::ALIGN_BOUNDARY_OFFSET,
- accounts_index::{DiskIndexValue, IndexValue, IsCached},
+ accounts_index::{DiskIndexValue, IndexValue},
is_zero_lamport::IsZeroLamport,
},
modular_bitfield::prelude::*,
@@ -19,38 +19,21 @@ pub type Offset = usize;
#[derive(Debug, PartialEq, Eq)]
pub enum StorageLocation {
AppendVec(AccountsFileId, Offset),
- Cached,
}
impl StorageLocation {
pub fn is_offset_equal(&self, other: &StorageLocation) -> bool {
match self {
- StorageLocation::Cached => {
- matches!(other, StorageLocation::Cached) // technically, 2 cached entries match in offset
- }
- StorageLocation::AppendVec(_, offset) => {
- match other {
- StorageLocation::Cached => {
- false // 1 cached, 1 not
- }
- StorageLocation::AppendVec(_, other_offset) => other_offset == offset,
- }
- }
+ StorageLocation::AppendVec(_, offset) => match other {
+ StorageLocation::AppendVec(_, other_offset) => other_offset == offset,
+ },
}
}
pub fn is_store_id_equal(&self, other: &StorageLocation) -> bool {
match self {
- StorageLocation::Cached => {
- matches!(other, StorageLocation::Cached) // 2 cached entries are same store id
- }
- StorageLocation::AppendVec(store_id, _) => {
- match other {
- StorageLocation::Cached => {
- false // 1 cached, 1 not
- }
- StorageLocation::AppendVec(other_store_id, _) => other_store_id == store_id,
- }
- }
+ StorageLocation::AppendVec(store_id, _) => match other {
+ StorageLocation::AppendVec(other_store_id, _) => other_store_id == store_id,
+ },
}
}
}
@@ -60,15 +43,6 @@ impl StorageLocation {
/// AppendVecs store accounts aligned to u64, so offset is always a multiple of 8 (sizeof(u64))
pub type OffsetReduced = u32;
-/// This is an illegal value for 'offset'.
-/// Account size on disk would have to be pointing to the very last 8 byte value in the max sized append vec.
-/// That would mean there was a maximum size of 8 bytes for the last entry in the append vec.
-/// A pubkey alone is 32 bytes, so there is no way for a valid offset to be this high of a value.
-/// Realistically, a max offset is (1<<31 - 156) bytes or so for an account with zero data length. Of course, this
-/// depends on the layout on disk, compression, etc. But, 8 bytes per account will never be possible.
-/// So, we use this last value as a sentinel to say that the account info refers to an entry in the write cache.
-const CACHED_OFFSET: OffsetReduced = (1 << (OffsetReduced::BITS - 1)) - 1;
-
#[bitfield(bits = 32)]
#[repr(C)]
#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)]
@@ -98,35 +72,15 @@ impl IsZeroLamport for AccountInfo {
}
}
-impl IsCached for AccountInfo {
- fn is_cached(&self) -> bool {
- self.account_offset_and_flags.offset_reduced() == CACHED_OFFSET
- }
-}
-
impl IndexValue for AccountInfo {}
impl DiskIndexValue for AccountInfo {}
-impl IsCached for StorageLocation {
- fn is_cached(&self) -> bool {
- matches!(self, StorageLocation::Cached)
- }
-}
-
-/// We have to have SOME value for store_id when we are cached
-const CACHE_VIRTUAL_STORAGE_ID: AccountsFileId = AccountsFileId::MAX;
-
impl AccountInfo {
pub fn new(storage_location: StorageLocation, is_zero_lamport: bool) -> Self {
let mut packed_offset_and_flags = PackedOffsetAndFlags::default();
let store_id = match storage_location {
StorageLocation::AppendVec(store_id, offset) => {
- let reduced_offset = Self::get_reduced_offset(offset);
- assert_ne!(
- CACHED_OFFSET, reduced_offset,
- "illegal offset for non-cached item"
- );
packed_offset_and_flags.set_offset_reduced(Self::get_reduced_offset(offset));
assert_eq!(
Self::reduced_offset_to_offset(packed_offset_and_flags.offset_reduced()),
@@ -135,10 +89,6 @@ impl AccountInfo {
);
store_id
}
- StorageLocation::Cached => {
- packed_offset_and_flags.set_offset_reduced(CACHED_OFFSET);
- CACHE_VIRTUAL_STORAGE_ID
- }
};
packed_offset_and_flags.set_is_zero_lamport(is_zero_lamport);
Self {
@@ -152,8 +102,6 @@ impl AccountInfo {
}
pub fn store_id(&self) -> AccountsFileId {
- // if the account is in a cached store, the store_id is meaningless
- assert!(!self.is_cached());
self.store_id
}
@@ -166,11 +114,7 @@ impl AccountInfo {
}
pub fn storage_location(&self) -> StorageLocation {
- if self.is_cached() {
- StorageLocation::Cached
- } else {
- StorageLocation::AppendVec(self.store_id, self.offset())
- }
+ StorageLocation::AppendVec(self.store_id, self.offset())
}
}
@@ -195,13 +139,6 @@ mod test {
}
}
- #[test]
- #[should_panic(expected = "illegal offset")]
- fn test_illegal_offset() {
- let offset = (MAXIMUM_APPEND_VEC_FILE_SIZE - (ALIGN_BOUNDARY_OFFSET as u64)) as Offset;
- AccountInfo::new(StorageLocation::AppendVec(0, offset), true);
- }
-
#[test]
#[should_panic(expected = "illegal offset")]
fn test_alignment() {
diff --git a/accounts-db/src/account_locks.rs b/accounts-db/src/account_locks.rs
index 4d6b9e93976..558bbee054f 100644
--- a/accounts-db/src/account_locks.rs
+++ b/accounts-db/src/account_locks.rs
@@ -26,10 +26,10 @@ impl AccountLocks {
>,
) -> Vec> {
validated_batch_keys.iter_mut().for_each(|validated_keys| {
- if let Ok(keys) = validated_keys.as_ref() {
- if let Err(e) = self.can_lock_accounts(keys.clone()) {
- *validated_keys = Err(e);
- }
+ if let Ok(keys) = validated_keys.as_ref()
+ && let Err(e) = self.can_lock_accounts(keys.clone())
+ {
+ *validated_keys = Err(e);
}
});
diff --git a/accounts-db/src/account_storage.rs b/accounts-db/src/account_storage.rs
index f567e7e2e70..45b89461710 100644
--- a/accounts-db/src/account_storage.rs
+++ b/accounts-db/src/account_storage.rs
@@ -128,6 +128,20 @@ impl AccountStorage {
self.map.iter().map(|iter_item| *iter_item.key()).collect()
}
+ /// All slots with a storage entry below `max_slot_exclusive`.
+ pub(crate) fn slots_less_than(&self, max_slot_exclusive: Slot) -> Vec {
+ assert!(
+ self.no_shrink_in_progress(),
+ "shrink is in progress! slots: {:?}",
+ self.shrink_in_progress_map.read().unwrap().keys(),
+ );
+ self.map
+ .iter()
+ .map(|iter_item| *iter_item.key())
+ .filter(|slot| *slot < max_slot_exclusive)
+ .collect()
+ }
+
/// returns true if there is no entry for 'slot'
#[cfg(test)]
pub(crate) fn is_empty_entry(&self, slot: Slot) -> bool {
diff --git a/accounts-db/src/account_storage_entry.rs b/accounts-db/src/account_storage_entry.rs
index d317f696cd1..e4efdda4dec 100644
--- a/accounts-db/src/account_storage_entry.rs
+++ b/accounts-db/src/account_storage_entry.rs
@@ -31,7 +31,7 @@ pub struct AccountStorageEntry {
pub(crate) num_alive_bytes: AtomicUsize,
- /// offsets to accounts that are zero lamport single ref stored in this
+ /// offsets to accounts that are zero lamport single ref (ZLSR) stored in this
/// storage. These are still alive. But, shrink will be able to remove them.
///
/// NOTE: It's possible that one of these zero lamport single ref accounts
@@ -211,6 +211,12 @@ impl AccountStorageEntry {
self.accounts.flush()
}
+ /// Detach the on-disk file from this storage's lifetime; see
+ /// [`AccountsFile::disable_remove_on_drop`].
+ pub fn disable_remove_on_drop(&self) {
+ self.accounts.disable_remove_on_drop();
+ }
+
pub(crate) fn add_accounts(&self, num_accounts: usize, num_bytes: usize) {
self.num_alive_accounts
.fetch_add(num_accounts, Ordering::Release);
@@ -252,4 +258,8 @@ impl AccountStorageEntry {
pub(crate) fn obsolete_accounts(&self) -> &RwLock {
&self.obsolete_accounts
}
+
+ pub(crate) fn zero_lamport_single_ref_offsets(&self) -> &RwLock> {
+ &self.zero_lamport_single_ref_offsets
+ }
}
diff --git a/accounts-db/src/account_storage_reader.rs b/accounts-db/src/account_storage_reader.rs
index c6eb8a04c2f..5f41cc555a5 100644
--- a/accounts-db/src/account_storage_reader.rs
+++ b/accounts-db/src/account_storage_reader.rs
@@ -16,6 +16,18 @@ use {
// file fits entirely within the buffer.
pub const ACCOUNT_STORAGE_MAX_BUFFER_SIZE: usize = 10 * 1024 * 1024;
+#[cfg(not(target_os = "linux"))]
+const READER_STACK_BUFFER_SIZE: usize = 64 * 1024;
+
+/// Concrete reader type returned by [`storage_file_buf_reader`].
+///
+/// The concrete type is exposed (rather than `impl FileBufRead<'a>`) so callers
+/// can use inherent methods like `rebind`.
+#[cfg(target_os = "linux")]
+type StorageFileBufReader<'a> = buffered_reader::SequentialFileReader<'a>;
+#[cfg(not(target_os = "linux"))]
+type StorageFileBufReader<'a> = buffered_reader::BufferedReader<'a, READER_STACK_BUFFER_SIZE>;
+
/// When `use_page_cache` is `true`, direct I/O is forced off regardless of
/// `io_setup.use_direct_io` so that reads can hit the kernel's page cache.
/// Otherwise, the `io_setup.use_direct_io` setting is honored.
@@ -23,35 +35,31 @@ pub fn storage_file_buf_reader<'a>(
max_buf_size: usize,
use_page_cache: bool,
io_setup: &IoSetupState,
-) -> io::Result + use<'a>> {
+) -> io::Result> {
#[cfg(target_os = "linux")]
- let reader = buffered_reader::SequentialFileReaderBuilder::new()
- .shared_sqpoll(io_setup.shared_sqpoll_fd())
- .use_direct_io(io_setup.use_direct_io && !use_page_cache)
- .use_registered_buffers(io_setup.use_registered_io_uring_buffers)
- .build(max_buf_size)?;
+ {
+ buffered_reader::SequentialFileReaderBuilder::new()
+ .shared_sqpoll(io_setup.shared_sqpoll_fd())
+ .use_direct_io(io_setup.use_direct_io && !use_page_cache)
+ .use_registered_buffers(io_setup.use_registered_io_uring_buffers)
+ .build(max_buf_size)
+ }
#[cfg(not(target_os = "linux"))]
- let reader = {
+ {
let _ = (max_buf_size, use_page_cache, io_setup);
- const READER_STACK_BUFFER_SIZE: usize = 64 * 1024;
- buffered_reader::BufferedReader::::new()
- };
- Ok(reader)
+ Ok(StorageFileBufReader::new())
+ }
}
-/// Returns a file handle for each storage suitable for archive-style reads
-/// matching `use_direct_io` (see [`OpenFileForArchive`]).
-///
-/// Returned as a `Vec` so the handles outlive the buffered reader they'll be
-/// fed into.
+/// Lazy iterator yielding a file handle for each storage suitable for
+/// archive-style reads matching `use_direct_io` (see [`OpenFileForArchive`]).
pub fn open_storage_files<'s>(
- storages: impl IntoIterator- ,
+ storages: impl IntoIterator
- + 's,
use_direct_io: bool,
-) -> io::Result>> {
+) -> impl Iterator
- >> + 's {
storages
.into_iter()
- .map(|storage| storage.accounts.open_file_for_archive(use_direct_io))
- .collect()
+ .map(move |storage| storage.accounts.open_file_for_archive(use_direct_io))
}
/// A wrapper type around `AccountStorageEntry` that implements the `Read` trait.
@@ -122,13 +130,13 @@ impl<'a, R: FileBufRead<'a>> Read for AccountStorageReader<'_, R> {
while total_read < buf_len {
let next_obsolete_account = self.sorted_obsolete_accounts.last();
let file_offset = self.reader.get_file_offset() as usize;
- if let Some(&(obsolete_start, obsolete_size)) = next_obsolete_account {
- if file_offset == obsolete_start {
- let skip_len = obsolete_size.min(self.num_total_bytes - obsolete_start);
- self.reader.consume_or_skip(skip_len);
- self.sorted_obsolete_accounts.pop();
- continue;
- }
+ if let Some(&(obsolete_start, obsolete_size)) = next_obsolete_account
+ && file_offset == obsolete_start
+ {
+ let skip_len = obsolete_size.min(self.num_total_bytes - obsolete_start);
+ self.reader.consume_or_skip(skip_len);
+ self.sorted_obsolete_accounts.pop();
+ continue;
}
// Cannot read beyond the end of the buffer
@@ -207,7 +215,9 @@ mod tests {
storage.accounts.write_accounts(&(slot, &accounts[..]), 0);
- let files = open_storage_files(iter::once(&storage), false).unwrap();
+ let files = open_storage_files(iter::once(&storage), false)
+ .collect::>>()
+ .unwrap();
let mut buf_reader = storage_file_buf_reader(
ACCOUNT_STORAGE_MAX_BUFFER_SIZE,
false,
@@ -284,7 +294,9 @@ mod tests {
let storage = storage.reopen_as_readonly().unwrap_or(storage);
// Create the reader and check the length
- let files = open_storage_files(iter::once(&storage), false).unwrap();
+ let files = open_storage_files(iter::once(&storage), false)
+ .collect::>>()
+ .unwrap();
let mut file_reader = storage_file_buf_reader(
ACCOUNT_STORAGE_MAX_BUFFER_SIZE,
false,
@@ -406,7 +418,9 @@ mod tests {
let temp_dir = tempfile::tempdir().unwrap();
// Now iterate through all the possible snapshot slots and verify correctness
- let files = open_storage_files(iter::once(&storage), false).unwrap();
+ let files = open_storage_files(iter::once(&storage), false)
+ .collect::>>()
+ .unwrap();
let mut file_reader = storage_file_buf_reader(
ACCOUNT_STORAGE_MAX_BUFFER_SIZE,
false,
diff --git a/accounts-db/src/accounts_cache.rs b/accounts-db/src/accounts_cache.rs
index 50fbdeefac7..6b521884a33 100644
--- a/accounts-db/src/accounts_cache.rs
+++ b/accounts-db/src/accounts_cache.rs
@@ -36,26 +36,6 @@ impl MaxFlushedRoot {
}
}
-/// Indicates whether a slot is an ancestor, an unflushed root, or a root being flushed
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub enum SlotStatus {
- /// Slot is in the ancestors list and not a root being flushed. Slot is guaranteed to be
- /// the newest version of the account on this fork so the cached copy can be used without
- /// checking storage
- Ancestor,
- /// Slot is in the ancestors list but is also a root being flushed. The version found in the
- /// accounts cache may not be the newest version of the account, and the storage should be
- /// checked for newer versions
- AncestorBeingFlushed,
- /// Slot is a root that has not yet been claimed for flushing. Slot is guaranteed to be the
- /// newest version of the account so the cached copy can be used without checking storage
- UnflushedRoot,
- /// Slot is a root that is currently being flushed. The version found in the accounts cache
- /// may not be the newest version of the account, and the storage should be checked for newer
- /// versions
- RootBeingFlushed,
-}
-
#[derive(Debug)]
pub struct SlotCache {
cache: DashMap, PubkeyHasherBuilder>,
@@ -225,8 +205,9 @@ impl AccountsCacheIndex {
/// Decrement the reference count for each pubkey in `pubkeys`. Removes an entry entirely if
/// the count reaches zero. `max_slot` is not updated; it will become stale if the removed slot
- /// is the highest slot
- fn remove(&self, pubkeys: impl IntoIterator
- ) {
+ /// is the highest slot. Returns a vec of pubkeys removed from the index.
+ fn remove(&self, pubkeys: impl IntoIterator
- ) -> Vec {
+ let mut removed_pubkeys = Vec::new();
for pubkey in pubkeys {
let Entry::Occupied(mut occupied_entry) = self.entries.entry(pubkey) else {
// If this has happened the index is corrupted
@@ -237,8 +218,10 @@ impl AccountsCacheIndex {
if *ref_count == 0 {
occupied_entry.remove_entry();
self.num_unique_pubkeys.fetch_sub(1, Ordering::Relaxed);
+ removed_pubkeys.push(pubkey);
}
}
+ removed_pubkeys
}
/// Returns the recorded max slot for `pubkey`, or `None` if the pubkey is not present in the
@@ -254,12 +237,10 @@ pub struct AccountsCache {
cache: DashMap, BuildNoHashHasher>,
// Index to find which slots a pubkey is stored in, to speed up lookups in load_latest
index: AccountsCacheIndex,
- // Queue of potentially unflushed roots. Random eviction + cache too large
- // could have triggered a flush of this slot already
- maybe_unflushed_roots: RwLock>,
- // Roots that have been claimed for flushing by `begin_flush_roots` but not yet
- // cleared by `end_flush_roots`
- roots_being_flushed: RwLock>,
+ // Rooted slots that may still have accounts in the write cache. A slot enters via `add_root`
+ // and is dropped either by `remove_slot` when its cache is flushed, or by
+ // `remove_unflushed_root` when a flush finds it had no cache.
+ unflushed_roots: RwLock>,
max_flushed_root: MaxFlushedRoot,
/// The size of account data stored in the whole AccountsCache, in bytes
total_size: Arc,
@@ -287,11 +268,7 @@ impl AccountsCache {
pub fn report_size(&self) {
datapoint_info!(
"accounts_cache_size",
- (
- "num_roots",
- self.maybe_unflushed_roots.read().unwrap().len(),
- i64
- ),
+ ("num_roots", self.unflushed_roots.read().unwrap().len(), i64),
("num_slots", self.cache.len(), i64),
("total_size", self.size(), i64),
(
@@ -339,48 +316,40 @@ impl AccountsCache {
.and_then(|slot_cache| slot_cache.get_cloned(pubkey))
}
- pub fn remove_slot(&self, slot: Slot) -> Option> {
+ /// Removes a slot from the accounts cache and returns the set of pubkeys removed from the index.
+ #[must_use]
+ pub fn remove_slot(&self, slot: Slot) -> Option> {
let result = self.cache.remove(&slot).map(|(_, slot_cache)| slot_cache);
- if let Some(slot_cache) = &result {
- self.index.remove(slot_cache.iter().map(|item| *item.key()));
- }
+ // If this slot was a root, it has now left the cache, so stop tracking it as unflushed.
+ self.unflushed_roots.write().unwrap().remove(&slot);
+
result
+ .as_ref()
+ .map(|slot_cache| self.index.remove(slot_cache.iter().map(|item| *item.key())))
}
- /// Finds the best write-cache entry for `pubkey` visible from `ancestors`. Searches
- /// ancestors first (highest to lowest), then unflushed roots, then roots being flushed.
- /// Ancestors are checked exhaustively before roots, so a lower-slot ancestor wins over a
- /// higher-slot root. Returns the account, slot, and status, or `None` if not found.
+ /// Finds the newest write-cache entry for `pubkey` visible from `ancestors`. Searches
+ /// ancestors first (highest to lowest), then roots (highest to lowest). Ancestors are
+ /// checked exhaustively before roots, so a lower-slot ancestor wins over a higher-slot
+ /// root. Returns the account and its slot, or `None` if not found.
pub fn load_latest(
&self,
pubkey: &Pubkey,
ancestors: &Ancestors,
- ) -> Option<(Arc, Slot, SlotStatus)> {
+ ) -> Option<(Arc, Slot)> {
// Exit early if the pubkey isn't in the cache
let index_max_slot = self.index.max_slot_for_pubkey(pubkey)?;
+ // Ancestors take priority over roots regardless of slot. Iterate every slot in the
+ // range in descending order and return the first (highest) ancestor that has it.
if let Some(ancestors_min_slot) = ancestors.min_slot() {
- // Iterate every slot in the range in descending order
- // Grab a read lock on flushing roots once before the loop to avoid locking/unlocking
- // on every iteration. This lock ensures that the load call in the loop correctly
- // identifies slots with status AncestorBeingFlushed.
- let r_roots_being_flushed = self.roots_being_flushed.read().unwrap();
for slot in (ancestors_min_slot..=index_max_slot).rev() {
- if ancestors.contains_key(&slot) {
- if let Some(account) = self.load(slot, pubkey) {
- // Need to check flush status of the slot even for ancestors, because
- // there could be newer version of the account that has already been
- // flushed
- let slot_status = if r_roots_being_flushed.contains(&slot) {
- SlotStatus::AncestorBeingFlushed
- } else {
- SlotStatus::Ancestor
- };
- return Some((account, slot, slot_status));
- }
+ if ancestors.contains_key(&slot)
+ && let Some(account) = self.load(slot, pubkey)
+ {
+ return Some((account, slot));
}
}
- drop(r_roots_being_flushed);
}
// If the slot is not found in the ancestors fall back to searching roots.
@@ -393,21 +362,13 @@ impl AccountsCache {
.unwrap_or(index_max_slot)
.min(index_max_slot);
- let r_maybe_unflushed_roots = self.maybe_unflushed_roots.read().unwrap();
- for &slot in r_maybe_unflushed_roots.range(..=max_root_slot).rev() {
+ let r_unflushed_roots = self.unflushed_roots.read().unwrap();
+ for &slot in r_unflushed_roots.range(..=max_root_slot).rev() {
if let Some(account) = self.load(slot, pubkey) {
- return Some((account, slot, SlotStatus::UnflushedRoot));
+ return Some((account, slot));
}
}
- drop(r_maybe_unflushed_roots);
-
- let r_roots_being_flushed = self.roots_being_flushed.read().unwrap();
- for &slot in r_roots_being_flushed.range(..=max_root_slot).rev() {
- if let Some(account) = self.load(slot, pubkey) {
- return Some((account, slot, SlotStatus::RootBeingFlushed));
- }
- }
- drop(r_roots_being_flushed);
+ drop(r_unflushed_roots);
// Found nothing, the version of the account in the cache must be on a different fork
None
@@ -418,42 +379,30 @@ impl AccountsCache {
}
pub fn add_root(&self, root: Slot) {
- self.maybe_unflushed_roots.write().unwrap().insert(root);
+ self.unflushed_roots.write().unwrap().insert(root);
}
pub fn num_unflushed_roots(&self) -> usize {
- self.maybe_unflushed_roots.read().unwrap().len()
+ self.unflushed_roots.read().unwrap().len()
}
- /// Atomically moves roots up to and including `max_root` (or all roots if `None`) out of
- /// `maybe_unflushed_roots` and into `roots_being_flushed`, then returns them
- ///
- /// Panics if there are already roots being flushed (i.e. `end_flush_roots` was not called after
- /// a previous `begin_flush_roots`)
- pub fn begin_flush_roots(&self, max_root: Option) -> BTreeSet {
- let mut w_maybe_unflushed_roots = self.maybe_unflushed_roots.write().unwrap();
- let mut w_roots_being_flushed = self.roots_being_flushed.write().unwrap();
-
- assert!(
- w_roots_being_flushed.is_empty(),
- "begin_flush_roots called while roots are already being flushed; end_flush_roots must \
- be called first"
- );
-
- let roots_to_flush = if let Some(max_root) = max_root {
- let remaining = w_maybe_unflushed_roots.split_off(&(max_root + 1));
- std::mem::replace(&mut *w_maybe_unflushed_roots, remaining)
- } else {
- std::mem::take(&mut *w_maybe_unflushed_roots)
- };
-
- *w_roots_being_flushed = roots_to_flush.clone();
- roots_to_flush
+ /// Returns whether `slot` is a root that has been added but not yet flushed to storage.
+ pub fn contains_unflushed_root(&self, slot: Slot) -> bool {
+ self.unflushed_roots.read().unwrap().contains(&slot)
}
- /// Signals that flushing is complete. Clears the roots that were staged by `begin_flush_roots`
- pub fn end_flush_roots(&self) {
- self.roots_being_flushed.write().unwrap().clear();
+ /// Returns the unflushed roots up to and including `max_root` (or all roots if `None`). The
+ /// returned roots remain tracked as unflushed until `remove_slot` drops each one when its cache
+ /// is flushed.
+ pub fn roots_to_flush(&self, max_root: Option) -> BTreeSet {
+ // `None` means no upper bound, i.e. every root.
+ let max_root = max_root.unwrap_or(Slot::MAX);
+ self.unflushed_roots
+ .read()
+ .unwrap()
+ .range(..=max_root)
+ .copied()
+ .collect()
}
pub fn cached_frozen_slots(&self) -> Vec {
@@ -493,6 +442,12 @@ impl AccountsCache {
self.max_flushed_root.get()
}
+ /// Stop tracking `slot` as an unflushed root without touching its cache. Used when a flushed
+ /// root had no cache for `remove_slot` to drop (e.g. genesis), so it would otherwise linger.
+ pub fn remove_unflushed_root(&self, slot: Slot) {
+ self.unflushed_roots.write().unwrap().remove(&slot);
+ }
+
pub fn set_max_flush_root(&self, root: Slot) {
self.max_flushed_root.fetch_max(root);
}
@@ -683,43 +638,39 @@ mod tests {
assert!(cache.index.max_slot_for_pubkey(&pk2).is_some());
// Remove slot 1 — pk2 should disappear, pk1 still present (in slot 3)
- cache.remove_slot(1);
+ let pubkeys_removed = cache.remove_slot(1);
+ assert_eq!(pubkeys_removed, Some(vec![pk2]));
assert!(cache.index.max_slot_for_pubkey(&pk1).is_some());
assert!(cache.index.max_slot_for_pubkey(&pk2).is_none());
// Remove slot 3 — pk1 should also disappear
- cache.remove_slot(3);
+ let pubkeys_removed = cache.remove_slot(3);
+ assert_eq!(pubkeys_removed, Some(vec![pk1]));
assert!(cache.index.max_slot_for_pubkey(&pk1).is_none());
}
- /// Tests that `load_latest` returns the correct slot, status, and account value
- /// given various combinations of ancestor slots, root slots, and flushing state.
+ /// Tests that `load_latest` returns the correct slot and account value
+ /// given various combinations of ancestor slots and root slots.
///
/// Ancestors always take priority over roots regardless of slot
// None case
// `uncached_ancestors` are slots added to the Ancestors set but with no account
// data stored in the cache. This lets us test root bounding by min_slot
// without the ancestor path short-circuiting the lookup.
- #[test_case(&[], &[], &[], &[], None; "not ancestor not root")]
- #[test_case(&[10], &[], &[], &[], Some((10, SlotStatus::Ancestor)); "ancestor only")]
- #[test_case(&[5, 10, 15], &[], &[], &[], Some((15, SlotStatus::Ancestor)); "highest ancestor returned")]
- #[test_case(&[], &[10, 20], &[], &[], Some((20, SlotStatus::UnflushedRoot)); "rooted, with no ancestors")]
- #[test_case(&[], &[], &[10], &[], Some((10, SlotStatus::RootBeingFlushed)); "root being flushed")]
- #[test_case(&[10], &[], &[10], &[], Some((10, SlotStatus::AncestorBeingFlushed)); "ancestor being flushed")]
- #[test_case(&[5], &[20], &[], &[], Some((5, SlotStatus::Ancestor)); "ancestor wins over higher root")]
- #[test_case(&[], &[20], &[10], &[], Some((20, SlotStatus::UnflushedRoot));"unflushed root over flushing root")]
- #[test_case(&[5], &[20], &[10], &[], Some((5, SlotStatus::Ancestor));"ancestor over unflushed and flushing roots")]
+ #[test_case(&[], &[], &[], None; "not ancestor not root")]
+ #[test_case(&[10], &[], &[], Some(10); "ancestor only")]
+ #[test_case(&[5, 10, 15], &[], &[], Some(15); "highest ancestor returned")]
+ #[test_case(&[], &[10, 20], &[], Some(20); "rooted, with no ancestors")]
+ #[test_case(&[5], &[20], &[], Some(5); "ancestor wins over higher root")]
// Root beyond ancestors.min_slot() is excluded; older root still found
- #[test_case(&[], &[5, 11], &[], &[10], Some((5, SlotStatus::UnflushedRoot)); "unflushed root beyond min ancestor excluded")]
- #[test_case(&[], &[], &[5, 11], &[10], Some((5, SlotStatus::RootBeingFlushed)); "flushing root beyond min ancestor excluded")]
+ #[test_case(&[], &[5, 11], &[10], Some(5); "root beyond min ancestor excluded")]
// Root within min_slot bound is still returned
- #[test_case(&[], &[10], &[], &[15], Some((10, SlotStatus::UnflushedRoot)); "unflushed root below min ancestor returned")]
+ #[test_case(&[], &[10], &[15], Some(10); "root below min ancestor returned")]
fn test_load_latest_slot_priority(
ancestor_slots: &[Slot],
- unflushed_root_slots: &[Slot],
- flushing_root_slots: &[Slot],
+ root_slots: &[Slot],
uncached_ancestors: &[Slot],
- expected: Option<(Slot, SlotStatus)>,
+ expected: Option,
) {
let cache = AccountsCache::default();
let pk = Pubkey::new_unique();
@@ -731,7 +682,7 @@ mod tests {
AccountSharedData::new(slot, 0, &Pubkey::default()),
);
}
- for &slot in unflushed_root_slots.iter().chain(flushing_root_slots) {
+ for &slot in root_slots {
cache.store(
slot,
&pk,
@@ -739,19 +690,14 @@ mod tests {
);
cache.add_root(slot);
}
- if let Some(&max) = flushing_root_slots.iter().max() {
- cache.begin_flush_roots(Some(max));
- }
let mut all_ancestors: Vec = ancestor_slots.to_vec();
all_ancestors.extend_from_slice(uncached_ancestors);
let ancestors = Ancestors::from(all_ancestors);
- let result = cache
- .load_latest(&pk, &ancestors)
- .map(|(account, slot, status)| {
- assert_eq!(account.account.lamports(), slot);
- (slot, status)
- });
+ let result = cache.load_latest(&pk, &ancestors).map(|(account, slot)| {
+ assert_eq!(account.account.lamports(), slot);
+ slot
+ });
assert_eq!(result, expected);
}
@@ -775,115 +721,63 @@ mod tests {
cache.store(10, &pk, AccountSharedData::new(100, 0, &Pubkey::default()));
cache.add_root(10);
- cache.begin_flush_roots(None);
- cache.end_flush_roots();
+ // A flush finishes a slot with `remove_slot`, which drops both its cache and its
+ // unflushed-root tracking; call it directly here to stand in for that flush.
+ let _ = cache.remove_slot(10);
- // After clearing flushed roots, slot is no longer visible
+ // With the slot gone from the cache and untracked as a root, it is not visible.
let empty = Ancestors::default();
assert!(cache.load_latest(&pk, &empty).is_none());
+ assert!(cache.unflushed_roots.read().unwrap().is_empty());
}
#[test]
- fn test_begin_flush_roots_with_max_root() {
+ fn test_roots_to_flush_with_max_root() {
let cache = AccountsCache::default();
cache.add_root(1);
cache.add_root(3);
cache.add_root(5);
cache.add_root(7);
- // begin_flush_roots(Some(5)) should return {1, 3, 5} and leave {7}
- let taken = cache.begin_flush_roots(Some(5));
- assert_eq!(taken, BTreeSet::from([1, 3, 5]));
-
- // Remaining unflushed roots should only contain 7
- assert_eq!(cache.maybe_unflushed_roots.read().unwrap().len(), 1);
- assert!(cache.maybe_unflushed_roots.read().unwrap().contains(&7));
+ // roots_to_flush(Some(5)) returns {1, 3, 5}, excluding 7.
+ let to_flush = cache.roots_to_flush(Some(5));
+ assert_eq!(to_flush, BTreeSet::from([1, 3, 5]));
- // Taken roots should now be in roots_being_flushed
- assert!(cache.roots_being_flushed.read().unwrap().contains(&1));
- assert!(cache.roots_being_flushed.read().unwrap().contains(&3));
- assert!(cache.roots_being_flushed.read().unwrap().contains(&5));
- assert!(!cache.roots_being_flushed.read().unwrap().contains(&7));
-
- cache.end_flush_roots();
+ // roots_to_flush only reads: the tracked roots are unchanged.
+ assert_eq!(
+ *cache.unflushed_roots.read().unwrap(),
+ BTreeSet::from([1, 3, 5, 7])
+ );
}
#[test]
- fn test_begin_flush_roots_none_takes_all() {
+ fn test_roots_to_flush_none_takes_all() {
let cache = AccountsCache::default();
cache.add_root(2);
cache.add_root(4);
cache.add_root(6);
- let taken = cache.begin_flush_roots(None);
- assert_eq!(taken, BTreeSet::from([2, 4, 6]));
+ let to_flush = cache.roots_to_flush(None);
+ assert_eq!(to_flush, BTreeSet::from([2, 4, 6]));
- // All unflushed roots should be drained
- assert!(cache.maybe_unflushed_roots.read().unwrap().is_empty());
-
- // All should be in roots_being_flushed
+ // roots_to_flush only reads: the tracked roots are unchanged.
assert_eq!(
- *cache.roots_being_flushed.read().unwrap(),
+ *cache.unflushed_roots.read().unwrap(),
BTreeSet::from([2, 4, 6])
);
-
- cache.end_flush_roots();
- }
-
- #[test]
- #[should_panic(expected = "begin_flush_roots called while roots are already being flushed")]
- fn test_begin_flush_roots_panics_if_already_flushing() {
- let cache = AccountsCache::default();
- cache.add_root(1);
- cache.begin_flush_roots(None);
- // Calling again without end_flush_roots should panic
- cache.add_root(2);
- cache.begin_flush_roots(None);
}
#[test]
- fn test_end_flush_roots_allows_next_flush() {
+ fn test_remove_slot_drops_unflushed_root() {
let cache = AccountsCache::default();
+ let pk = Pubkey::new_unique();
+ cache.store(1, &pk, AccountSharedData::new(1, 0, &Pubkey::default()));
cache.add_root(1);
+ cache.store(2, &pk, AccountSharedData::new(2, 0, &Pubkey::default()));
cache.add_root(2);
- // First cycle
- let taken = cache.begin_flush_roots(None);
- assert_eq!(taken, BTreeSet::from([1, 2]));
-
- cache.end_flush_roots();
-
- // After clear, roots_being_flushed is empty
- assert!(cache.roots_being_flushed.read().unwrap().is_empty());
-
- // Second cycle works without panic
- cache.add_root(3);
- let taken = cache.begin_flush_roots(None);
- assert_eq!(taken, BTreeSet::from([3]));
- cache.end_flush_roots();
- }
-
- #[test]
- fn test_load_latest_multiple_ancestors_one_being_flushed() {
- let cache = AccountsCache::default();
- let pk = Pubkey::new_unique();
-
- // Store at slots 5 and 10, both will be ancestors
- cache.store(5, &pk, AccountSharedData::new(5, 0, &Pubkey::default()));
- cache.store(10, &pk, AccountSharedData::new(10, 0, &Pubkey::default()));
-
- // Slot 10 is also a root that gets claimed for flushing
- cache.add_root(10);
- cache.begin_flush_roots(None);
-
- let ancestors = Ancestors::from(vec![5, 10]);
- let (account, slot, status) = cache.load_latest(&pk, &ancestors).unwrap();
-
- // Slot 10 is highest ancestor but is being flushed, so should return AncestorBeingFlushed
- assert_eq!(slot, 10);
- assert_eq!(status, SlotStatus::AncestorBeingFlushed);
- assert_eq!(account.account.lamports(), 10);
-
- cache.end_flush_roots();
+ // remove_slot drops slot 1 from both the cache and the tracked roots, leaving slot 2.
+ let _ = cache.remove_slot(1);
+ assert_eq!(*cache.unflushed_roots.read().unwrap(), BTreeSet::from([2]));
}
}
diff --git a/accounts-db/src/accounts_db.rs b/accounts-db/src/accounts_db.rs
index a344c4fbd97..a8fb9283f0e 100644
--- a/accounts-db/src/accounts_db.rs
+++ b/accounts-db/src/accounts_db.rs
@@ -36,19 +36,19 @@ use {
stored_account_info::{StoredAccountInfo, StoredAccountInfoWithoutData},
},
account_storage_entry::AccountStorageEntry,
- accounts_cache::{AccountsCache, CachedAccount, SlotCache, SlotStatus},
+ accounts_cache::{AccountsCache, CachedAccount, SlotCache},
accounts_db::stats::{
AccountsStats, CleanAccountsStats, FlushStats, LoadAccountsStats,
ObsoleteAccountsStats, PurgeStats, ShrinkAncientStats, ShrinkStats, ShrinkStatsSub,
- StoreAccountsFrozenStats, StoreAccountsTiming, StoreAccountsUnfrozenStats,
- WriteAccountsToCacheStats,
+ StoreAccountsForFlushStats, StoreAccountsForShrinkStats, StoreAccountsForSquashStats,
+ StoreAccountsUnfrozenStats, WriteAccountsToCacheStats,
},
accounts_file::{AccountsFile, AccountsFileProvider},
accounts_hash::{AccountLtHash, AccountsLtHash, ZERO_LAMPORT_ACCOUNT_LT_HASH},
accounts_index::{
- AccountSecondaryIndexes, AccountsIndex, AccountsIndexRootsStats,
- AccountsIndexScanResult, IndexKey, IsCached, ReclaimsSlotList, RefCount, ScanFilter,
- SlotList, Startup, UpsertReclaim, in_mem_accounts_index::StartupStats,
+ AccountSecondaryIndexes, AccountsIndex, AccountsIndexScanResult, IndexKey,
+ ReclaimsSlotList, RefCount, ScanFilter, SlotList, Startup, UpsertReclaim,
+ in_mem_accounts_index::StartupStats,
},
accounts_scan::{ScanConfig, ScanError, ScanGuard, ScanResult, ScanTracker},
accounts_update_notifier_interface::{AccountForGeyser, AccountsUpdateNotifier},
@@ -64,6 +64,7 @@ use {
utils::{self, create_account_shared_data},
},
agave_fs::buffered_reader::RequiredLenBufFileRead,
+ ahash::HashMapExt,
bv::BitVec,
dashmap::{DashMap, DashSet},
log::*,
@@ -98,7 +99,7 @@ use {
};
// when the accounts write cache exceeds this many bytes, we will flush it
-// this can be specified on the command line, too (--accounts-db-cache-limit-mb)
+// this can be specified on the command line, too (--accounts-db-write-cache-limit)
const WRITE_CACHE_LIMIT_BYTES_DEFAULT: u64 = 15_000_000_000;
const SCAN_SLOT_PAR_ITER_THRESHOLD: usize = 4000;
@@ -107,7 +108,7 @@ const UNREF_ACCOUNTS_BATCH_SIZE: usize = 10_000;
const DEFAULT_NUM_DIRS: u32 = 4;
// This value reflects recommended memory lock limit documented in the validator's
-// setup instructions at docs/src/operations/guides/validator-start.md allowing use of
+// setup instructions at https://docs.anza.xyz/operations/guides/validator-start allowing use of
// several io_uring instances with fixed buffers for large disk IO operations.
pub const TOTAL_IO_URING_BUFFERS_SIZE_LIMIT: usize = 2_000_000_000;
@@ -324,7 +325,6 @@ pub struct GetUniqueAccountsResult {
}
pub struct AccountsAddRootTiming {
- pub index_us: u64,
pub cache_us: u64,
}
@@ -650,15 +650,13 @@ pub enum PopulateReadCache {
}
#[derive(Debug)]
-pub enum LoadedAccountAccessor<'a> {
+pub enum LoadedAccountAccessor {
// StoredAccountInfo can't be held directly here due to its lifetime dependency on
// AccountStorageEntry
Stored(Option<(Arc, usize)>),
- // None value in Cached variant means the cache was flushed
- Cached(Option>>),
}
-impl LoadedAccountAccessor<'_> {
+impl LoadedAccountAccessor {
fn check_and_get_loaded_account_shared_data(&mut self) -> AccountSharedData {
// all of these following .expect() and .unwrap() are like serious logic errors,
// ideal for representing this as rust type system....
@@ -690,17 +688,12 @@ impl LoadedAccountAccessor<'_> {
// ideal for representing this as rust type system....
match self {
- LoadedAccountAccessor::Cached(None) | LoadedAccountAccessor::Stored(None) => {
+ LoadedAccountAccessor::Stored(None) => {
panic!(
"Should have already been taken care of when creating this \
LoadedAccountAccessor"
);
}
- LoadedAccountAccessor::Cached(Some(_cached_account)) => {
- // Cached(Some(x)) variant always produces `Some` for get_loaded_account() since
- // it just returns the inner `x` without additional fetches
- self.get_loaded_account(callback).unwrap()
- }
LoadedAccountAccessor::Stored(Some(_maybe_storage_entry)) => {
// If we do find the storage entry, we can guarantee that the storage entry is
// safe to read from because we grabbed a reference to the storage entry while it
@@ -720,12 +713,6 @@ impl LoadedAccountAccessor<'_> {
mut callback: impl for<'local> FnMut(LoadedAccount<'local>) -> T,
) -> Option {
match self {
- LoadedAccountAccessor::Cached(cached_account) => {
- let cached_account = cached_account.take().expect(
- "Cache flushed/purged should be handled before trying to fetch account",
- );
- Some(callback(LoadedAccount::Cached(cached_account)))
- }
LoadedAccountAccessor::Stored(maybe_storage_entry) => {
// storage entry may not be present if slot was cleaned up in
// between reading the accounts index and calling this function to
@@ -821,6 +808,8 @@ struct CleanKeyTimings {
delta_key_count: u64,
dirty_pubkeys_count: u64,
oldest_dirty_slot: Slot,
+ zero_lamport_single_ref_slots_added_to_shrink_count: u64,
+ zero_lamport_sweep_us: u64,
}
pub fn get_temp_accounts_paths(count: u32) -> io::Result<(Vec, Vec)> {
@@ -902,8 +891,6 @@ pub struct AccountsDb {
/// directory for bank hash details files
bank_hash_details_dir: PathBuf,
- shrink_paths: Vec,
-
/// Directory of paths this accounts_db needs to hold/remove
#[allow(dead_code)]
pub temp_paths: Option>,
@@ -921,9 +908,6 @@ pub struct AccountsDb {
/// Stats from storing accounts unfrozen
store_accounts_unfrozen_stats: StoreAccountsUnfrozenStats,
- /// Stats from storing accounts frozen
- store_accounts_frozen_stats: StoreAccountsFrozenStats,
-
clean_accounts_stats: CleanAccountsStats,
// Stats for purges called outside of clean_accounts()
@@ -962,6 +946,10 @@ pub struct AccountsDb {
/// for incremental snapshot support.
zero_lamport_accounts_to_purge_after_full_snapshot: DashSet<(Slot, Pubkey)>,
+ /// Set by `set_latest_full_snapshot_slot` when the snapshot advances. Read and cleared by
+ /// clean
+ latest_full_snapshot_slot_advanced_since_clean: AtomicBool,
+
/// GeyserPlugin accounts update notifier
accounts_update_notifier: Option,
@@ -984,12 +972,19 @@ pub struct AccountsDb {
/// Note, this is None if we're told to *not* take snapshots
latest_full_snapshot_slot: SeqLock