diff --git a/.github/scripts/check-workspace.py b/.github/scripts/check-workspace.py
index d5197100ad253ed18b9a4df255faa88598883f91..631ce766329412ab7331a132b423ba34c28f309a 100644
--- a/.github/scripts/check-workspace.py
+++ b/.github/scripts/check-workspace.py
@@ -144,7 +144,9 @@ def check_links(all_crates):
 						return
 
 		def check_crate(deps):
-			to_checks = ['dependencies', 'dev-dependencies', 'build-dependencies']
+			# We dont check dev-dependencies and build-dependencies for the stable2412 release since
+			# that they are using `path = ` instead of `workspace = true`.
+			to_checks = ['dependencies']
 
 			for to_check in to_checks:
 				if to_check in deps:
diff --git a/.github/workflows/checks-quick.yml b/.github/workflows/checks-quick.yml
index 36deba7dfb78c56529f986e3936ace74d0baa09e..16bca21a08025e74023157f06db59de2c37ae617 100644
--- a/.github/workflows/checks-quick.yml
+++ b/.github/workflows/checks-quick.yml
@@ -93,6 +93,8 @@ jobs:
           "substrate/frame/contracts/fixtures/contracts/common"
           "substrate/frame/revive/fixtures/build"
           "substrate/frame/revive/fixtures/contracts/common"
+          "substrate/frame/sassafras"
+          "substrate/primitives/consensus/sassafras"
       - name: deny git deps
         run: python3 .github/scripts/deny-git-deps.py .
   check-markdown:
diff --git a/substrate/client/keystore/src/local.rs b/substrate/client/keystore/src/local.rs
index 91c52bfcd50a0ff8723b5fcf4e5aed90fc19fdac..bd21a8b7a3db9f7192f7bcb1813116769f890ba0 100644
--- a/substrate/client/keystore/src/local.rs
+++ b/substrate/client/keystore/src/local.rs
@@ -32,10 +32,6 @@ use std::{
 	sync::Arc,
 };
 
-sp_keystore::bandersnatch_experimental_enabled! {
-use sp_core::bandersnatch;
-}
-
 sp_keystore::bls_experimental_enabled! {
 use sp_core::{bls381, ecdsa_bls381, KeccakHasher};
 }
@@ -273,65 +269,6 @@ impl Keystore for LocalKeystore {
 		Ok(sig)
 	}
 
-	sp_keystore::bandersnatch_experimental_enabled! {
-		fn bandersnatch_public_keys(&self, key_type: KeyTypeId) -> Vec<bandersnatch::Public> {
-			self.public_keys::<bandersnatch::Pair>(key_type)
-		}
-
-		/// Generate a new pair compatible with the 'bandersnatch' signature scheme.
-		///
-		/// If `[seed]` is `Some` then the key will be ephemeral and stored in memory.
-		fn bandersnatch_generate_new(
-			&self,
-			key_type: KeyTypeId,
-			seed: Option<&str>,
-		) -> std::result::Result<bandersnatch::Public, TraitError> {
-			self.generate_new::<bandersnatch::Pair>(key_type, seed)
-		}
-
-		fn bandersnatch_sign(
-			&self,
-			key_type: KeyTypeId,
-			public: &bandersnatch::Public,
-			msg: &[u8],
-		) -> std::result::Result<Option<bandersnatch::Signature>, TraitError> {
-			self.sign::<bandersnatch::Pair>(key_type, public, msg)
-		}
-
-		fn bandersnatch_vrf_sign(
-			&self,
-			key_type: KeyTypeId,
-			public: &bandersnatch::Public,
-			data: &bandersnatch::vrf::VrfSignData,
-		) -> std::result::Result<Option<bandersnatch::vrf::VrfSignature>, TraitError> {
-			self.vrf_sign::<bandersnatch::Pair>(key_type, public, data)
-		}
-
-		fn bandersnatch_vrf_pre_output(
-			&self,
-			key_type: KeyTypeId,
-			public: &bandersnatch::Public,
-			input: &bandersnatch::vrf::VrfInput,
-		) -> std::result::Result<Option<bandersnatch::vrf::VrfPreOutput>, TraitError> {
-			self.vrf_pre_output::<bandersnatch::Pair>(key_type, public, input)
-		}
-
-		fn bandersnatch_ring_vrf_sign(
-			&self,
-			key_type: KeyTypeId,
-			public: &bandersnatch::Public,
-			data: &bandersnatch::vrf::VrfSignData,
-			prover: &bandersnatch::ring_vrf::RingProver,
-		) -> std::result::Result<Option<bandersnatch::ring_vrf::RingVrfSignature>, TraitError> {
-			let sig = self
-				.0
-				.read()
-				.key_pair_by_type::<bandersnatch::Pair>(public, key_type)?
-				.map(|pair| pair.ring_vrf_sign(data, prover));
-			Ok(sig)
-		}
-	}
-
 	sp_keystore::bls_experimental_enabled! {
 		fn bls381_public_keys(&self, key_type: KeyTypeId) -> Vec<bls381::Public> {
 			self.public_keys::<bls381::Pair>(key_type)
diff --git a/substrate/client/statement-store/README.md b/substrate/client/statement-store/README.md
index f181626e4f6a5f907b0ade34cd8c3a83c9ed59de..7c64fe073fa85f27ac36371f63254e40501663d4 100644
--- a/substrate/client/statement-store/README.md
+++ b/substrate/client/statement-store/README.md
@@ -3,7 +3,6 @@ Substrate statement store implementation.
 License: GPL-3.0-or-later WITH Classpath-exception-2.0
 
 
-
 ## Release
 
 Polkadot SDK Stable 2412
diff --git a/substrate/primitives/application-crypto/check-features-variants.sh b/substrate/primitives/application-crypto/check-features-variants.sh
index dd45a212bae097beb40171295e254a601674ff00..e8b36a294b07dc6d386e9c25723b3e2e8db23dad 100755
--- a/substrate/primitives/application-crypto/check-features-variants.sh
+++ b/substrate/primitives/application-crypto/check-features-variants.sh
@@ -7,6 +7,5 @@ cargo check --release --target=$T --no-default-features
 cargo check --release --target=$T --no-default-features  --features="full_crypto"
 cargo check --release --target=$T --no-default-features  --features="serde"
 cargo check --release --target=$T --no-default-features  --features="serde,full_crypto"
-cargo check --release --target=$T --no-default-features  --features="bandersnatch-experimental"
 cargo check --release --target=$T --no-default-features  --features="bls-experimental"
 cargo check --release --target=$T --no-default-features  --features="bls-experimental,full_crypto"
diff --git a/substrate/primitives/application-crypto/src/lib.rs b/substrate/primitives/application-crypto/src/lib.rs
index a8eb6b786a31779a55690117818bb137cd9b192d..0c05859bab474f8f9aa497d10419804560f98434 100644
--- a/substrate/primitives/application-crypto/src/lib.rs
+++ b/substrate/primitives/application-crypto/src/lib.rs
@@ -44,8 +44,6 @@ pub use scale_info;
 #[cfg(feature = "serde")]
 pub use serde;
 
-#[cfg(feature = "bandersnatch-experimental")]
-pub mod bandersnatch;
 #[cfg(feature = "bls-experimental")]
 pub mod bls381;
 pub mod ecdsa;
diff --git a/substrate/primitives/consensus/sassafras/Cargo.toml b/substrate/primitives/consensus/sassafras/Cargo.toml
index 7ea4fe0a3383055c153df5a797e42f41ed6a195d..7e145bd36804325d8044bcbe165eb6985e1b6e68 100644
--- a/substrate/primitives/consensus/sassafras/Cargo.toml
+++ b/substrate/primitives/consensus/sassafras/Cargo.toml
@@ -22,9 +22,9 @@ codec = { workspace = true }
 scale-info = { features = ["derive"], workspace = true }
 serde = { features = ["derive"], optional = true, workspace = true }
 sp-api.workspace = true
-sp-application-crypto = { features = ["bandersnatch-experimental"], workspace = true }
+sp-application-crypto = { workspace = true }
 sp-consensus-slots.workspace = true
-sp-core = { features = ["bandersnatch-experimental"], workspace = true }
+sp-core = { workspace = true }
 sp-runtime.workspace = true
 
 [features]
diff --git a/substrate/primitives/core/check-features-variants.sh b/substrate/primitives/core/check-features-variants.sh
index 6d28212065a623096202f9da483aead71806c513..ddb15fd40708954123149903666eb5cdf5d2231a 100755
--- a/substrate/primitives/core/check-features-variants.sh
+++ b/substrate/primitives/core/check-features-variants.sh
@@ -5,8 +5,6 @@ T=wasm32-unknown-unknown
 
 cargo check --target=$T --release --no-default-features  --features="bls-experimental"
 cargo check --target=$T --release --no-default-features  --features="full_crypto,bls-experimental"
-cargo check --target=$T --release --no-default-features  --features="bandersnatch-experimental"
-cargo check --target=$T --release --no-default-features  --features="full_crypto,serde,bandersnatch-experimental"
 cargo check --target=$T --release --no-default-features  --features="full_crypto,serde"
 cargo check --target=$T --release --no-default-features  --features="full_crypto"
 cargo check --target=$T --release --no-default-features  --features="serde"
diff --git a/substrate/primitives/core/src/lib.rs b/substrate/primitives/core/src/lib.rs
index bb05bebc627485c6cc2e78813d215be0acba4906..95561290d072cd45bbeb89046e3c829cc9f8d1e0 100644
--- a/substrate/primitives/core/src/lib.rs
+++ b/substrate/primitives/core/src/lib.rs
@@ -70,8 +70,6 @@ pub mod testing;
 pub mod traits;
 pub mod uint;
 
-#[cfg(feature = "bandersnatch-experimental")]
-pub mod bandersnatch;
 #[cfg(feature = "bls-experimental")]
 pub mod bls;
 pub mod crypto_bytes;
diff --git a/substrate/primitives/io/src/lib.rs b/substrate/primitives/io/src/lib.rs
index 38cf72a0c7909df347a3bb43d1fbb5f01c6cfab4..b71b250dbd5db3598aa6e6d40239f790bb9d146d 100644
--- a/substrate/primitives/io/src/lib.rs
+++ b/substrate/primitives/io/src/lib.rs
@@ -94,8 +94,6 @@ use sp_core::{
 #[cfg(feature = "std")]
 use sp_keystore::KeystoreExt;
 
-#[cfg(feature = "bandersnatch-experimental")]
-use sp_core::bandersnatch;
 use sp_core::{
 	crypto::KeyTypeId,
 	ecdsa, ed25519,
@@ -1237,25 +1235,6 @@ pub trait Crypto {
 			.ecdsa_bls381_generate_new(id, seed)
 			.expect("`ecdsa_bls381_generate` failed")
 	}
-
-	/// Generate a `bandersnatch` key pair for the given key type using an optional
-	/// `seed` and store it in the keystore.
-	///
-	/// The `seed` needs to be a valid utf8.
-	///
-	/// Returns the public key.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_generate(
-		&mut self,
-		id: KeyTypeId,
-		seed: Option<Vec<u8>>,
-	) -> bandersnatch::Public {
-		let seed = seed.as_ref().map(|s| std::str::from_utf8(s).expect("Seed is valid utf8!"));
-		self.extension::<KeystoreExt>()
-			.expect("No `keystore` associated for the current context!")
-			.bandersnatch_generate_new(id, seed)
-			.expect("`bandernatch_generate` failed")
-	}
 }
 
 /// Interface that provides functions for hashing with different algorithms.
diff --git a/substrate/primitives/keyring/check-features-variants.sh b/substrate/primitives/keyring/check-features-variants.sh
index 9c28d83589465483a290b6485f9c77fa7dbdb5a8..d7c299b2b236c81d7aac8665f0e7b709fb3a5aaa 100755
--- a/substrate/primitives/keyring/check-features-variants.sh
+++ b/substrate/primitives/keyring/check-features-variants.sh
@@ -4,5 +4,4 @@ export RUSTFLAGS="-Cdebug-assertions=y -Dwarnings"
 T=wasm32-unknown-unknown
 
 cargo check --release
-cargo check --release --features="bandersnatch-experimental" 
 cargo check --release --target=$T --no-default-features
diff --git a/substrate/primitives/keyring/src/lib.rs b/substrate/primitives/keyring/src/lib.rs
index 008c01b150f00fd0215d5db01064474303fb4655..1a0d810e932e9406c4c88d1a787875b3188d033e 100644
--- a/substrate/primitives/keyring/src/lib.rs
+++ b/substrate/primitives/keyring/src/lib.rs
@@ -28,16 +28,10 @@ pub mod sr25519;
 /// Test account crypto for ed25519.
 pub mod ed25519;
 
-/// Test account crypto for bandersnatch.
-#[cfg(feature = "bandersnatch-experimental")]
-pub mod bandersnatch;
-
 /// Convenience export: Sr25519's Keyring is exposed as `AccountKeyring`, since it tends to be
 /// used for accounts (although it may also be used by authorities).
 pub use sr25519::Keyring as AccountKeyring;
 
-#[cfg(feature = "bandersnatch-experimental")]
-pub use bandersnatch::Keyring as BandersnatchKeyring;
 pub use ed25519::Keyring as Ed25519Keyring;
 pub use sr25519::Keyring as Sr25519Keyring;
 
diff --git a/substrate/primitives/keystore/src/lib.rs b/substrate/primitives/keystore/src/lib.rs
index 42ad2c600d02b86c2fa75abb905037b961c768a0..3b154d478cea56a0678f163920c2edc308de74cf 100644
--- a/substrate/primitives/keystore/src/lib.rs
+++ b/substrate/primitives/keystore/src/lib.rs
@@ -24,8 +24,6 @@ extern crate alloc;
 #[cfg(feature = "std")]
 pub mod testing;
 
-#[cfg(feature = "bandersnatch-experimental")]
-use sp_core::bandersnatch;
 #[cfg(feature = "bls-experimental")]
 use sp_core::{bls381, ecdsa_bls381};
 use sp_core::{
@@ -191,91 +189,6 @@ pub trait Keystore: Send + Sync {
 		msg: &[u8; 32],
 	) -> Result<Option<ecdsa::Signature>, Error>;
 
-	/// Returns all the bandersnatch public keys for the given key type.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_public_keys(&self, key_type: KeyTypeId) -> Vec<bandersnatch::Public>;
-
-	/// Generate a new bandersnatch key pair for the given key type and an optional seed.
-	///
-	/// Returns an `bandersnatch::Public` key of the generated key pair or an `Err` if
-	/// something failed during key generation.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_generate_new(
-		&self,
-		key_type: KeyTypeId,
-		seed: Option<&str>,
-	) -> Result<bandersnatch::Public, Error>;
-
-	/// Generate an bandersnatch signature for a given message.
-	///
-	/// Receives [`KeyTypeId`] and an [`bandersnatch::Public`] key to be able to map
-	/// them to a private key that exists in the keystore.
-	///
-	/// Returns an [`bandersnatch::Signature`] or `None` in case the given `key_type`
-	/// and `public` combination doesn't exist in the keystore.
-	/// An `Err` will be returned if generating the signature itself failed.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		msg: &[u8],
-	) -> Result<Option<bandersnatch::Signature>, Error>;
-
-	/// Generate a bandersnatch VRF signature for the given data.
-	///
-	/// Receives [`KeyTypeId`] and an [`bandersnatch::Public`] key to be able to map
-	/// them to a private key that exists in the keystore.
-	///
-	/// Returns `None` if the given `key_type` and `public` combination doesn't
-	/// exist in the keystore or an `Err` when something failed.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfSignData,
-	) -> Result<Option<bandersnatch::vrf::VrfSignature>, Error>;
-
-	/// Generate a bandersnatch VRF pre-output for a given input data.
-	///
-	/// Receives [`KeyTypeId`] and an [`bandersnatch::Public`] key to be able to map
-	/// them to a private key that exists in the keystore.
-	///
-	/// Returns `None` if the given `key_type` and `public` combination doesn't
-	/// exist in the keystore or an `Err` when something failed.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_pre_output(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfInput,
-	) -> Result<Option<bandersnatch::vrf::VrfPreOutput>, Error>;
-
-	/// Generate a bandersnatch ring-VRF signature for the given data.
-	///
-	/// Receives [`KeyTypeId`] and an [`bandersnatch::Public`] key to be able to map
-	/// them to a private key that exists in the keystore.
-	///
-	/// Also takes a [`bandersnatch::ring_vrf::RingProver`] instance obtained from
-	/// a valid [`bandersnatch::ring_vrf::RingContext`].
-	///
-	/// The ring signature is verifiable if the public key corresponding to the
-	/// signing [`bandersnatch::Pair`] is part of the ring from which the
-	/// [`bandersnatch::ring_vrf::RingProver`] has been constructed.
-	/// If not, the produced signature is just useless.
-	///
-	/// Returns `None` if the given `key_type` and `public` combination doesn't
-	/// exist in the keystore or an `Err` when something failed.
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_ring_vrf_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfSignData,
-		prover: &bandersnatch::ring_vrf::RingProver,
-	) -> Result<Option<bandersnatch::ring_vrf::RingVrfSignature>, Error>;
-
 	/// Returns all bls12-381 public keys for the given key type.
 	#[cfg(feature = "bls-experimental")]
 	fn bls381_public_keys(&self, id: KeyTypeId) -> Vec<bls381::Public>;
@@ -412,24 +325,6 @@ pub trait Keystore: Send + Sync {
 
 				self.ecdsa_sign(id, &public, msg)?.map(|s| s.encode())
 			},
-			#[cfg(feature = "bandersnatch-experimental")]
-			bandersnatch::CRYPTO_ID => {
-				let public = bandersnatch::Public::from_slice(public)
-					.map_err(|_| Error::ValidationError("Invalid public key format".into()))?;
-				self.bandersnatch_sign(id, &public, msg)?.map(|s| s.encode())
-			},
-			#[cfg(feature = "bls-experimental")]
-			bls381::CRYPTO_ID => {
-				let public = bls381::Public::from_slice(public)
-					.map_err(|_| Error::ValidationError("Invalid public key format".into()))?;
-				self.bls381_sign(id, &public, msg)?.map(|s| s.encode())
-			},
-			#[cfg(feature = "bls-experimental")]
-			ecdsa_bls381::CRYPTO_ID => {
-				let public = ecdsa_bls381::Public::from_slice(public)
-					.map_err(|_| Error::ValidationError("Invalid public key format".into()))?;
-				self.ecdsa_bls381_sign(id, &public, msg)?.map(|s| s.encode())
-			},
 			_ => return Err(Error::KeyNotSupported(id)),
 		};
 		Ok(signature)
@@ -527,61 +422,6 @@ impl<T: Keystore + ?Sized> Keystore for Arc<T> {
 		(**self).ecdsa_sign_prehashed(key_type, public, msg)
 	}
 
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_public_keys(&self, key_type: KeyTypeId) -> Vec<bandersnatch::Public> {
-		(**self).bandersnatch_public_keys(key_type)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_generate_new(
-		&self,
-		key_type: KeyTypeId,
-		seed: Option<&str>,
-	) -> Result<bandersnatch::Public, Error> {
-		(**self).bandersnatch_generate_new(key_type, seed)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		msg: &[u8],
-	) -> Result<Option<bandersnatch::Signature>, Error> {
-		(**self).bandersnatch_sign(key_type, public, msg)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfSignData,
-	) -> Result<Option<bandersnatch::vrf::VrfSignature>, Error> {
-		(**self).bandersnatch_vrf_sign(key_type, public, input)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_pre_output(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfInput,
-	) -> Result<Option<bandersnatch::vrf::VrfPreOutput>, Error> {
-		(**self).bandersnatch_vrf_pre_output(key_type, public, input)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_ring_vrf_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfSignData,
-		prover: &bandersnatch::ring_vrf::RingProver,
-	) -> Result<Option<bandersnatch::ring_vrf::RingVrfSignature>, Error> {
-		(**self).bandersnatch_ring_vrf_sign(key_type, public, input, prover)
-	}
-
 	#[cfg(feature = "bls-experimental")]
 	fn bls381_public_keys(&self, id: KeyTypeId) -> Vec<bls381::Public> {
 		(**self).bls381_public_keys(id)
@@ -675,12 +515,6 @@ impl KeystoreExt {
 	}
 }
 
-sp_core::generate_feature_enabled_macro!(
-	bandersnatch_experimental_enabled,
-	feature = "bandersnatch-experimental",
-	$
-);
-
 sp_core::generate_feature_enabled_macro!(
 	bls_experimental_enabled,
 	feature = "bls-experimental",
diff --git a/substrate/primitives/keystore/src/testing.rs b/substrate/primitives/keystore/src/testing.rs
index 745f42e3477aba952e58c2c2a99411a798a63fed..72dc9476d214bd87b9261b8f16b879681e9a2d3f 100644
--- a/substrate/primitives/keystore/src/testing.rs
+++ b/substrate/primitives/keystore/src/testing.rs
@@ -19,8 +19,6 @@
 
 use crate::{Error, Keystore, KeystorePtr};
 
-#[cfg(feature = "bandersnatch-experimental")]
-use sp_core::bandersnatch;
 #[cfg(feature = "bls-experimental")]
 use sp_core::{bls381, ecdsa_bls381, KeccakHasher};
 use sp_core::{
@@ -216,64 +214,6 @@ impl Keystore for MemoryKeystore {
 		Ok(sig)
 	}
 
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_public_keys(&self, key_type: KeyTypeId) -> Vec<bandersnatch::Public> {
-		self.public_keys::<bandersnatch::Pair>(key_type)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_generate_new(
-		&self,
-		key_type: KeyTypeId,
-		seed: Option<&str>,
-	) -> Result<bandersnatch::Public, Error> {
-		self.generate_new::<bandersnatch::Pair>(key_type, seed)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		msg: &[u8],
-	) -> Result<Option<bandersnatch::Signature>, Error> {
-		self.sign::<bandersnatch::Pair>(key_type, public, msg)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		data: &bandersnatch::vrf::VrfSignData,
-	) -> Result<Option<bandersnatch::vrf::VrfSignature>, Error> {
-		self.vrf_sign::<bandersnatch::Pair>(key_type, public, data)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_ring_vrf_sign(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		data: &bandersnatch::vrf::VrfSignData,
-		prover: &bandersnatch::ring_vrf::RingProver,
-	) -> Result<Option<bandersnatch::ring_vrf::RingVrfSignature>, Error> {
-		let sig = self
-			.pair::<bandersnatch::Pair>(key_type, public)
-			.map(|pair| pair.ring_vrf_sign(data, prover));
-		Ok(sig)
-	}
-
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_pre_output(
-		&self,
-		key_type: KeyTypeId,
-		public: &bandersnatch::Public,
-		input: &bandersnatch::vrf::VrfInput,
-	) -> Result<Option<bandersnatch::vrf::VrfPreOutput>, Error> {
-		self.vrf_pre_output::<bandersnatch::Pair>(key_type, public, input)
-	}
-
 	#[cfg(feature = "bls-experimental")]
 	fn bls381_public_keys(&self, key_type: KeyTypeId) -> Vec<bls381::Public> {
 		self.public_keys::<bls381::Pair>(key_type)
@@ -513,69 +453,4 @@ mod tests {
 			&pair.public()
 		));
 	}
-
-	#[test]
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_vrf_sign() {
-		use sp_core::testing::BANDERSNATCH;
-
-		let store = MemoryKeystore::new();
-
-		let secret_uri = "//Alice";
-		let key_pair =
-			bandersnatch::Pair::from_string(secret_uri, None).expect("Generates key pair");
-
-		let in1 = bandersnatch::vrf::VrfInput::new("in", "foo");
-		let sign_data =
-			bandersnatch::vrf::VrfSignData::new_unchecked(b"Test", Some("m1"), Some(in1));
-
-		let result = store.bandersnatch_vrf_sign(BANDERSNATCH, &key_pair.public(), &sign_data);
-		assert!(result.unwrap().is_none());
-
-		store
-			.insert(BANDERSNATCH, secret_uri, key_pair.public().as_ref())
-			.expect("Inserts unknown key");
-
-		let result = store.bandersnatch_vrf_sign(BANDERSNATCH, &key_pair.public(), &sign_data);
-
-		assert!(result.unwrap().is_some());
-	}
-
-	#[test]
-	#[cfg(feature = "bandersnatch-experimental")]
-	fn bandersnatch_ring_vrf_sign() {
-		use sp_core::testing::BANDERSNATCH;
-
-		let store = MemoryKeystore::new();
-
-		let ring_ctx = bandersnatch::ring_vrf::RingContext::<1024>::new_testing();
-
-		let mut pks: Vec<_> = (0..16)
-			.map(|i| bandersnatch::Pair::from_seed(&[i as u8; 32]).public())
-			.collect();
-
-		let prover_idx = 3;
-		let prover = ring_ctx.prover(&pks, prover_idx).unwrap();
-
-		let secret_uri = "//Alice";
-		let pair = bandersnatch::Pair::from_string(secret_uri, None).expect("Generates key pair");
-		pks[prover_idx] = pair.public();
-
-		let in1 = bandersnatch::vrf::VrfInput::new("in1", "foo");
-		let sign_data =
-			bandersnatch::vrf::VrfSignData::new_unchecked(b"Test", &["m1", "m2"], [in1]);
-
-		let result =
-			store.bandersnatch_ring_vrf_sign(BANDERSNATCH, &pair.public(), &sign_data, &prover);
-		assert!(result.unwrap().is_none());
-
-		store
-			.insert(BANDERSNATCH, secret_uri, pair.public().as_ref())
-			.expect("Inserts unknown key");
-
-		let result =
-			store.bandersnatch_ring_vrf_sign(BANDERSNATCH, &pair.public(), &sign_data, &prover);
-
-		assert!(result.unwrap().is_some());
-	}
 }