diff --git a/Cargo.lock b/Cargo.lock
index eb52a1a4c1aed61d1e252f602c0e2e223d57e364..846237e0374029cd0719ee121709f37988819bea 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -812,6 +812,7 @@ dependencies = [
  "parachains-common",
  "rococo-emulated-chain",
  "sp-core 28.0.0",
+ "sp-keyring",
  "staging-xcm",
  "testnet-parachains-constants",
 ]
@@ -837,6 +838,7 @@ dependencies = [
  "polkadot-runtime-common",
  "rococo-runtime-constants",
  "rococo-system-emulated-network",
+ "sp-core 28.0.0",
  "sp-runtime 31.0.1",
  "staging-xcm",
  "staging-xcm-executor",
@@ -911,6 +913,7 @@ dependencies = [
  "sp-core 28.0.0",
  "sp-genesis-builder",
  "sp-inherents",
+ "sp-keyring",
  "sp-offchain",
  "sp-runtime 31.0.1",
  "sp-session",
@@ -938,6 +941,7 @@ dependencies = [
  "frame-support",
  "parachains-common",
  "sp-core 28.0.0",
+ "sp-keyring",
  "staging-xcm",
  "testnet-parachains-constants",
  "westend-emulated-chain",
@@ -967,7 +971,6 @@ dependencies = [
  "parity-scale-codec",
  "polkadot-runtime-common",
  "sp-core 28.0.0",
- "sp-keyring",
  "sp-runtime 31.0.1",
  "staging-xcm",
  "staging-xcm-executor",
@@ -1043,6 +1046,7 @@ dependencies = [
  "sp-core 28.0.0",
  "sp-genesis-builder",
  "sp-inherents",
+ "sp-keyring",
  "sp-offchain",
  "sp-runtime 31.0.1",
  "sp-session",
@@ -2194,6 +2198,7 @@ dependencies = [
  "frame-support",
  "parachains-common",
  "sp-core 28.0.0",
+ "sp-keyring",
  "staging-xcm",
  "testnet-parachains-constants",
 ]
@@ -2385,6 +2390,7 @@ dependencies = [
  "frame-support",
  "parachains-common",
  "sp-core 28.0.0",
+ "sp-keyring",
  "staging-xcm",
  "testnet-parachains-constants",
 ]
@@ -3175,6 +3181,7 @@ dependencies = [
  "sp-genesis-builder",
  "sp-inherents",
  "sp-io 30.0.0",
+ "sp-keyring",
  "sp-offchain",
  "sp-runtime 31.0.1",
  "sp-session",
@@ -5567,6 +5574,7 @@ dependencies = [
  "sp-consensus-babe",
  "sp-consensus-beefy",
  "sp-core 28.0.0",
+ "sp-keyring",
  "sp-runtime 31.0.1",
  "staging-xcm",
  "xcm-emulator",
@@ -13340,6 +13348,7 @@ dependencies = [
  "parachains-common",
  "penpal-runtime",
  "sp-core 28.0.0",
+ "sp-keyring",
  "staging-xcm",
 ]
 
@@ -14883,6 +14892,7 @@ dependencies = [
  "serde_json",
  "sp-core 28.0.0",
  "sp-genesis-builder",
+ "sp-keyring",
  "staging-xcm",
  "substrate-build-script-utils",
 ]
@@ -17593,6 +17603,7 @@ dependencies = [
  "sp-consensus-babe",
  "sp-consensus-beefy",
  "sp-core 28.0.0",
+ "sp-keyring",
 ]
 
 [[package]]
@@ -23263,6 +23274,7 @@ dependencies = [
  "serde",
  "serde_json",
  "soketto 0.8.0",
+ "sp-keyring",
  "staging-node-inspect",
  "substrate-cli-test-utils",
  "tempfile",
diff --git a/cumulus/parachains/common/src/genesis_config_helpers.rs b/cumulus/parachains/common/src/genesis_config_helpers.rs
deleted file mode 100644
index cd98c3a729d26cc4c7a7895995e5a479bf418ebd..0000000000000000000000000000000000000000
--- a/cumulus/parachains/common/src/genesis_config_helpers.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) Parity Technologies (UK) Ltd.
-// SPDX-License-Identifier: Apache-2.0
-
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// 	http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//! Some common helpers for declaring runtime's presets
-
-use crate::{AccountId, Signature};
-#[cfg(not(feature = "std"))]
-use alloc::format;
-use sp_core::{Pair, Public};
-use sp_runtime::traits::{IdentifyAccount, Verify};
-
-/// Helper function to generate a crypto pair from seed.
-pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{seed}"), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-type AccountPublic = <Signature as Verify>::Signer;
-
-/// Helper function to generate an account id from seed.
-pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
-/// Generate collator keys from seed.
-///
-/// This function's return type must always match the session keys of the chain in tuple format.
-pub fn get_collator_keys_from_seed<AuraId: Public>(seed: &str) -> <AuraId::Pair as Pair>::Public {
-	get_from_seed::<AuraId>(seed)
-}
diff --git a/cumulus/parachains/common/src/lib.rs b/cumulus/parachains/common/src/lib.rs
index 60040fda9928a0a7efcba3192fbccddab80cdab4..3cffb69daac3fae6d5729a985489433f442bf22c 100644
--- a/cumulus/parachains/common/src/lib.rs
+++ b/cumulus/parachains/common/src/lib.rs
@@ -17,7 +17,6 @@
 
 extern crate alloc;
 
-pub mod genesis_config_helpers;
 pub mod impls;
 pub mod message_queue;
 pub mod xcm_config;
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/Cargo.toml
index 51ce5b18005681d0bff517691f31e2489a7eeb67..25796e7d64b4575163a51de1a548b7d1987f88de 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/Cargo.toml
@@ -14,6 +14,7 @@ workspace = true
 
 # Substrate
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 frame-support = { workspace = true }
 
 # Cumulus
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/genesis.rs
index 5b70ed490c633b7d78558e72762fb60a2f7d0635..606d04060b6b4548b5bc3660c36d05448419e36a 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/genesis.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-rococo/src/genesis.rs
@@ -15,13 +15,13 @@
 
 // Substrate
 use frame_support::parameter_types;
-use sp_core::{sr25519, storage::Storage};
+use sp_core::storage::Storage;
+use sp_keyring::Sr25519Keyring as Keyring;
 
 // Cumulus
 use emulated_integration_tests_common::{
-	accounts, build_genesis_storage, collators, get_account_id_from_seed,
-	PenpalSiblingSovereignAccount, PenpalTeleportableAssetLocation, RESERVABLE_ASSET_ID,
-	SAFE_XCM_VERSION, USDT_ID,
+	accounts, build_genesis_storage, collators, PenpalSiblingSovereignAccount,
+	PenpalTeleportableAssetLocation, RESERVABLE_ASSET_ID, SAFE_XCM_VERSION, USDT_ID,
 };
 use parachains_common::{AccountId, Balance};
 
@@ -29,7 +29,7 @@ pub const PARA_ID: u32 = 1000;
 pub const ED: Balance = testnet_parachains_constants::rococo::currency::EXISTENTIAL_DEPOSIT;
 
 parameter_types! {
-	pub AssetHubRococoAssetOwner: AccountId = get_account_id_from_seed::<sr25519::Public>("Alice");
+	pub AssetHubRococoAssetOwner: AccountId = Keyring::Alice.to_account_id();
 }
 
 pub fn genesis() -> Storage {
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/Cargo.toml
index d32f983217069ee346feb2cdb2251e770174e3fd..8e423ebbf9c27d19cdf317542b82eb5ccd53bc30 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/Cargo.toml
@@ -14,6 +14,7 @@ workspace = true
 
 # Substrate
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 frame-support = { workspace = true }
 
 # Cumulus
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/genesis.rs
index a9cfcda0dacdd3afa0cadc19f80e2805e245f172..30e7279a383f457fe9e27a2ec0bf96b9d9e5d03f 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/genesis.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/assets/asset-hub-westend/src/genesis.rs
@@ -15,14 +15,14 @@
 
 // Substrate
 use frame_support::parameter_types;
-use sp_core::{sr25519, storage::Storage};
+use sp_core::storage::Storage;
+use sp_keyring::Sr25519Keyring as Keyring;
 
 // Cumulus
 use emulated_integration_tests_common::{
-	accounts, build_genesis_storage, collators, get_account_id_from_seed,
-	PenpalBSiblingSovereignAccount, PenpalBTeleportableAssetLocation,
-	PenpalSiblingSovereignAccount, PenpalTeleportableAssetLocation, RESERVABLE_ASSET_ID,
-	SAFE_XCM_VERSION, USDT_ID,
+	accounts, build_genesis_storage, collators, PenpalBSiblingSovereignAccount,
+	PenpalBTeleportableAssetLocation, PenpalSiblingSovereignAccount,
+	PenpalTeleportableAssetLocation, RESERVABLE_ASSET_ID, SAFE_XCM_VERSION, USDT_ID,
 };
 use parachains_common::{AccountId, Balance};
 
@@ -31,7 +31,7 @@ pub const ED: Balance = testnet_parachains_constants::westend::currency::EXISTEN
 pub const USDT_ED: Balance = 70_000;
 
 parameter_types! {
-	pub AssetHubWestendAssetOwner: AccountId = get_account_id_from_seed::<sr25519::Public>("Alice");
+	pub AssetHubWestendAssetOwner: AccountId = Keyring::Alice.to_account_id();
 }
 
 pub fn genesis() -> Storage {
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/Cargo.toml
index 266d743ca0c22c53160f877836eb3273f8735e2f..231265085edad1f411c842b8ef28debaa4d07842 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/Cargo.toml
@@ -14,6 +14,7 @@ workspace = true
 
 # Substrate
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 frame-support = { workspace = true }
 
 # Polkadot Dependencies
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/genesis.rs
index b9c0c01101c6e7432956aad334b56a1cb27def01..0268a6a7a1b30e8b045335514fcd34972ada0411 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/genesis.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-rococo/src/genesis.rs
@@ -14,11 +14,12 @@
 // limitations under the License.
 
 // Substrate
-use sp_core::{sr25519, storage::Storage};
+use sp_core::storage::Storage;
+use sp_keyring::Sr25519Keyring as Keyring;
 
 // Cumulus
 use emulated_integration_tests_common::{
-	accounts, build_genesis_storage, collators, get_account_id_from_seed, SAFE_XCM_VERSION,
+	accounts, build_genesis_storage, collators, SAFE_XCM_VERSION,
 };
 use parachains_common::Balance;
 use xcm::latest::prelude::*;
@@ -60,11 +61,11 @@ pub fn genesis() -> Storage {
 			..Default::default()
 		},
 		bridge_westend_grandpa: bridge_hub_rococo_runtime::BridgeWestendGrandpaConfig {
-			owner: Some(get_account_id_from_seed::<sr25519::Public>(accounts::BOB)),
+			owner: Some(Keyring::Bob.to_account_id()),
 			..Default::default()
 		},
 		bridge_westend_messages: bridge_hub_rococo_runtime::BridgeWestendMessagesConfig {
-			owner: Some(get_account_id_from_seed::<sr25519::Public>(accounts::BOB)),
+			owner: Some(Keyring::Bob.to_account_id()),
 			..Default::default()
 		},
 		xcm_over_bridge_hub_westend: bridge_hub_rococo_runtime::XcmOverBridgeHubWestendConfig {
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/Cargo.toml
index 88d7348f50f28f7376acc9a1d73f068d1397f4c0..8292e132809c446d0cf1c50ece00699a48f58b14 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/Cargo.toml
@@ -14,6 +14,7 @@ workspace = true
 
 # Substrate
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 frame-support = { workspace = true }
 
 # Polkadot Dependencies
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/genesis.rs
index 3ffe3d86b2acda13e5bbf76f1f0052bc3da58237..f72eaa30026db442b8b338cf04a5de314e91fd96 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/genesis.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/bridges/bridge-hub-westend/src/genesis.rs
@@ -14,11 +14,12 @@
 // limitations under the License.
 
 // Substrate
-use sp_core::{sr25519, storage::Storage};
+use sp_core::storage::Storage;
+use sp_keyring::Sr25519Keyring as Keyring;
 
 // Cumulus
 use emulated_integration_tests_common::{
-	accounts, build_genesis_storage, collators, get_account_id_from_seed, SAFE_XCM_VERSION,
+	accounts, build_genesis_storage, collators, SAFE_XCM_VERSION,
 };
 use parachains_common::Balance;
 use xcm::latest::prelude::*;
@@ -60,11 +61,11 @@ pub fn genesis() -> Storage {
 			..Default::default()
 		},
 		bridge_rococo_grandpa: bridge_hub_westend_runtime::BridgeRococoGrandpaConfig {
-			owner: Some(get_account_id_from_seed::<sr25519::Public>(accounts::BOB)),
+			owner: Some(Keyring::Bob.to_account_id()),
 			..Default::default()
 		},
 		bridge_rococo_messages: bridge_hub_westend_runtime::BridgeRococoMessagesConfig {
-			owner: Some(get_account_id_from_seed::<sr25519::Public>(accounts::BOB)),
+			owner: Some(Keyring::Bob.to_account_id()),
 			..Default::default()
 		},
 		xcm_over_bridge_hub_rococo: bridge_hub_westend_runtime::XcmOverBridgeHubRococoConfig {
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml
index 9e6b14b585984d9b384f835f1b51f8a3e2e658a8..743cd7dc54a2800a215e70cc204251975534e1c1 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/Cargo.toml
@@ -14,6 +14,7 @@ workspace = true
 
 # Substrate
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 frame-support = { workspace = true }
 
 # Polkadot
diff --git a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/genesis.rs
index 2c34b7e96f5eac92830d7288eeacbf82f86fc292..63510d233d2c48d3af107b899a2aa18cb5057710 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/genesis.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/parachains/testing/penpal/src/genesis.rs
@@ -15,11 +15,12 @@
 
 // Substrate
 use frame_support::parameter_types;
-use sp_core::{sr25519, storage::Storage};
+use sp_core::storage::Storage;
+use sp_keyring::Sr25519Keyring as Keyring;
 
 // Cumulus
 use emulated_integration_tests_common::{
-	accounts, build_genesis_storage, collators, get_account_id_from_seed, SAFE_XCM_VERSION,
+	accounts, build_genesis_storage, collators, SAFE_XCM_VERSION,
 };
 use parachains_common::{AccountId, Balance};
 use penpal_runtime::xcm_config::{LocalReservableFromAssetHub, RelayLocation, UsdtFromAssetHub};
@@ -30,7 +31,7 @@ pub const ED: Balance = penpal_runtime::EXISTENTIAL_DEPOSIT;
 pub const USDT_ED: Balance = 70_000;
 
 parameter_types! {
-	pub PenpalSudoAccount: AccountId = get_account_id_from_seed::<sr25519::Public>("Alice");
+	pub PenpalSudoAccount: AccountId = Keyring::Alice.to_account_id();
 	pub PenpalAssetOwner: AccountId = PenpalSudoAccount::get();
 }
 
diff --git a/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/Cargo.toml
index 9376687947e6c3683d5c1c58fdaf77452fd01449..6db1263df8c73821c65882022b7e7afc413eb0d2 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/Cargo.toml
@@ -14,6 +14,7 @@ workspace = true
 
 # Substrate
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 sp-authority-discovery = { workspace = true }
 sp-consensus-babe = { workspace = true }
 sp-consensus-beefy = { workspace = true, default-features = true }
diff --git a/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs b/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs
index 9cb25b403600f7b8318b6d1ab41129a66107f0ac..3d8b5b1a500f26f72d25ecc6d6ad1ff2805ff181 100644
--- a/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs
+++ b/cumulus/parachains/integration-tests/emulated/chains/relays/rococo/src/genesis.rs
@@ -18,14 +18,15 @@ use sc_consensus_grandpa::AuthorityId as GrandpaId;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
 use sp_consensus_beefy::ecdsa_crypto::AuthorityId as BeefyId;
-use sp_core::{sr25519, storage::Storage};
+use sp_core::storage::Storage;
+use sp_keyring::Sr25519Keyring as Keyring;
 
 // Polkadot
 use polkadot_primitives::{AssignmentId, ValidatorId};
 
 // Cumulus
 use emulated_integration_tests_common::{
-	accounts, build_genesis_storage, get_account_id_from_seed, get_host_config, validators,
+	accounts, build_genesis_storage, get_host_config, validators,
 };
 use parachains_common::Balance;
 use rococo_runtime_constants::currency::UNITS as ROC;
@@ -82,9 +83,7 @@ pub fn genesis() -> Storage {
 			epoch_config: rococo_runtime::BABE_GENESIS_EPOCH_CONFIG,
 			..Default::default()
 		},
-		sudo: rococo_runtime::SudoConfig {
-			key: Some(get_account_id_from_seed::<sr25519::Public>("Alice")),
-		},
+		sudo: rococo_runtime::SudoConfig { key: Some(Keyring::Alice.to_account_id()) },
 		configuration: rococo_runtime::ConfigurationConfig { config: get_host_config() },
 		registrar: rococo_runtime::RegistrarConfig {
 			next_free_para_id: polkadot_primitives::LOWEST_PUBLIC_ID,
diff --git a/cumulus/parachains/integration-tests/emulated/common/Cargo.toml b/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
index 981ee5c88b4e28e57b4ff9c8361ca64432305471..23edaf6bfe655e560f045c15955d5265e95ae977 100644
--- a/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
@@ -21,6 +21,7 @@ sp-runtime = { workspace = true, default-features = true }
 frame-support = { workspace = true, default-features = true }
 sp-core = { workspace = true, default-features = true }
 sp-consensus-babe = { workspace = true, default-features = true }
+sp-keyring = { workspace = true, default-features = true }
 pallet-assets = { workspace = true, default-features = true }
 pallet-balances = { workspace = true, default-features = true }
 pallet-message-queue = { workspace = true, default-features = true }
diff --git a/cumulus/parachains/integration-tests/emulated/common/src/lib.rs b/cumulus/parachains/integration-tests/emulated/common/src/lib.rs
index c6b8889730e51da2c5ec6891d7005c0dbfe3d31e..07fde111d3dc9df67e79c7a11499059e3a5dc33b 100644
--- a/cumulus/parachains/integration-tests/emulated/common/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/common/src/lib.rs
@@ -25,11 +25,9 @@ use sc_consensus_grandpa::AuthorityId as GrandpaId;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
 use sp_consensus_beefy::ecdsa_crypto::AuthorityId as BeefyId;
-use sp_core::{sr25519, storage::Storage, Pair, Public};
-use sp_runtime::{
-	traits::{AccountIdConversion, IdentifyAccount, Verify},
-	BuildStorage, MultiSignature,
-};
+use sp_core::storage::Storage;
+use sp_keyring::{Ed25519Keyring, Sr25519Keyring};
+use sp_runtime::{traits::AccountIdConversion, BuildStorage};
 
 // Polakdot
 use parachains_common::BlockNumber;
@@ -49,8 +47,6 @@ pub const PROOF_SIZE_THRESHOLD: u64 = 33;
 /// The default XCM version to set in genesis config.
 pub const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION;
 
-type AccountPublic = <MultiSignature as Verify>::Signer;
-
 // (trust-backed) Asset registered on AH and reserve-transferred between Parachain and AH
 pub const RESERVABLE_ASSET_ID: u32 = 1;
 // ForeignAsset registered on AH and teleported between Penpal and AH
@@ -82,21 +78,6 @@ parameter_types! {
 	pub PenpalBSiblingSovereignAccount: AccountId = Sibling::from(PENPAL_B_ID).into_account_truncating();
 }
 
-/// Helper function to generate a crypto pair from seed
-pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-/// Helper function to generate an account ID from seed.
-pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
 pub fn get_host_config() -> HostConfiguration<BlockNumber> {
 	HostConfiguration {
 		max_upward_queue_count: 10,
@@ -130,34 +111,10 @@ pub mod accounts {
 	use super::*;
 	pub const ALICE: &str = "Alice";
 	pub const BOB: &str = "Bob";
-	pub const CHARLIE: &str = "Charlie";
-	pub const DAVE: &str = "Dave";
-	pub const EVE: &str = "Eve";
-	pub const FERDIE: &str = "Ferdie";
-	pub const ALICE_STASH: &str = "Alice//stash";
-	pub const BOB_STASH: &str = "Bob//stash";
-	pub const CHARLIE_STASH: &str = "Charlie//stash";
-	pub const DAVE_STASH: &str = "Dave//stash";
-	pub const EVE_STASH: &str = "Eve//stash";
-	pub const FERDIE_STASH: &str = "Ferdie//stash";
-	pub const FERDIE_BEEFY: &str = "Ferdie//stash";
 	pub const DUMMY_EMPTY: &str = "JohnDoe";
 
 	pub fn init_balances() -> Vec<AccountId> {
-		vec![
-			get_account_id_from_seed::<sr25519::Public>(ALICE),
-			get_account_id_from_seed::<sr25519::Public>(BOB),
-			get_account_id_from_seed::<sr25519::Public>(CHARLIE),
-			get_account_id_from_seed::<sr25519::Public>(DAVE),
-			get_account_id_from_seed::<sr25519::Public>(EVE),
-			get_account_id_from_seed::<sr25519::Public>(FERDIE),
-			get_account_id_from_seed::<sr25519::Public>(ALICE_STASH),
-			get_account_id_from_seed::<sr25519::Public>(BOB_STASH),
-			get_account_id_from_seed::<sr25519::Public>(CHARLIE_STASH),
-			get_account_id_from_seed::<sr25519::Public>(DAVE_STASH),
-			get_account_id_from_seed::<sr25519::Public>(EVE_STASH),
-			get_account_id_from_seed::<sr25519::Public>(FERDIE_STASH),
-		]
+		Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect()
 	}
 }
 
@@ -166,16 +123,15 @@ pub mod collators {
 
 	pub fn invulnerables() -> Vec<(AccountId, AuraId)> {
 		vec![
-			(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_from_seed::<AuraId>("Alice"),
-			),
-			(get_account_id_from_seed::<sr25519::Public>("Bob"), get_from_seed::<AuraId>("Bob")),
+			(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+			(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 		]
 	}
 }
 
 pub mod validators {
+	use sp_consensus_beefy::test_utils::Keyring;
+
 	use super::*;
 
 	pub fn initial_authorities() -> Vec<(
@@ -188,16 +144,15 @@ pub mod validators {
 		AuthorityDiscoveryId,
 		BeefyId,
 	)> {
-		let seed = "Alice";
 		vec![(
-			get_account_id_from_seed::<sr25519::Public>(&format!("{}//stash", seed)),
-			get_account_id_from_seed::<sr25519::Public>(seed),
-			get_from_seed::<BabeId>(seed),
-			get_from_seed::<GrandpaId>(seed),
-			get_from_seed::<ValidatorId>(seed),
-			get_from_seed::<AssignmentId>(seed),
-			get_from_seed::<AuthorityDiscoveryId>(seed),
-			get_from_seed::<BeefyId>(seed),
+			Sr25519Keyring::AliceStash.to_account_id(),
+			Sr25519Keyring::Alice.to_account_id(),
+			BabeId::from(Sr25519Keyring::Alice.public()),
+			GrandpaId::from(Ed25519Keyring::Alice.public()),
+			ValidatorId::from(Sr25519Keyring::Alice.public()),
+			AssignmentId::from(Sr25519Keyring::Alice.public()),
+			AuthorityDiscoveryId::from(Sr25519Keyring::Alice.public()),
+			BeefyId::from(Keyring::<BeefyId>::Alice.public()),
 		)]
 	}
 }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/Cargo.toml
index f66a5f1d5fe7e0dc0aaee8325a9717e25e9f1068..3d40db6b03ab5e172a9885bde1325bf614c34b19 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/Cargo.toml
@@ -16,6 +16,7 @@ assert_matches = { workspace = true }
 
 # Substrate
 sp-runtime = { workspace = true }
+sp-core = { workspace = true }
 frame-support = { workspace = true }
 pallet-balances = { workspace = true }
 pallet-assets = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs
index 0e43108a417be542b1612a9d22f6d644cbde0a1c..12f440fdefee130bd7a0fe030c49991ea8ce5458 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/lib.rs
@@ -36,8 +36,8 @@ mod imports {
 	pub use asset_test_utils::xcm_helpers;
 	pub use emulated_integration_tests_common::{
 		accounts::DUMMY_EMPTY,
-		get_account_id_from_seed, test_parachain_is_trusted_teleporter,
-		test_parachain_is_trusted_teleporter_for_relay, test_relay_is_trusted_teleporter,
+		test_parachain_is_trusted_teleporter, test_parachain_is_trusted_teleporter_for_relay,
+		test_relay_is_trusted_teleporter,
 		xcm_emulator::{
 			assert_expected_events, bx, Chain, Parachain as Para, RelayChain as Relay, Test,
 			TestArgs, TestContext, TestExt,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs
index 8aad4b392b2c2ab22a0603f6c2e434f3a92a9af9..302f71f89f838992934cf091cb3315e6958e01ae 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-rococo/src/tests/reserve_transfer.rs
@@ -14,6 +14,7 @@
 // limitations under the License.
 
 use crate::imports::*;
+use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
 
 fn relay_to_para_sender_assertions(t: RelayToParaTest) {
 	type RuntimeEvent = <Rococo as Chain>::RuntimeEvent;
@@ -1042,7 +1043,8 @@ fn reserve_transfer_multiple_assets_from_para_to_asset_hub() {
 	);
 
 	// Beneficiary is a new (empty) account
-	let receiver = get_account_id_from_seed::<sp_runtime::testing::sr25519::Public>(DUMMY_EMPTY);
+	let receiver: sp_runtime::AccountId32 =
+		get_public_from_string_or_panic::<sr25519::Public>(DUMMY_EMPTY).into();
 	// Init values for Asset Hub
 	let penpal_location_as_seen_by_ahr = AssetHubRococo::sibling_location_of(PenpalA::para_id());
 	let sov_penpal_on_ahr = AssetHubRococo::sovereign_account_id_of(penpal_location_as_seen_by_ahr);
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml
index 6b50b6f473ed087e55ba994fd7cae0f97c48dace..872a8ffa6a8a5a409d07ad7a4e486cc9060662b3 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/Cargo.toml
@@ -16,7 +16,6 @@ assert_matches = { workspace = true }
 
 # Substrate
 sp-runtime = { workspace = true }
-sp-keyring = { workspace = true }
 sp-core = { workspace = true }
 frame-metadata-hash-extension = { workspace = true, default-features = true }
 frame-support = { workspace = true }
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
index d0016b5a1b158ea83adc3ec8d25be8d6de1b0bbb..906768b19b79f20810ab19c1854aecea23280475 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/lib.rs
@@ -33,8 +33,8 @@ mod imports {
 	pub use asset_test_utils::xcm_helpers;
 	pub use emulated_integration_tests_common::{
 		accounts::DUMMY_EMPTY,
-		get_account_id_from_seed, test_parachain_is_trusted_teleporter,
-		test_parachain_is_trusted_teleporter_for_relay, test_relay_is_trusted_teleporter,
+		test_parachain_is_trusted_teleporter, test_parachain_is_trusted_teleporter_for_relay,
+		test_relay_is_trusted_teleporter,
 		xcm_emulator::{
 			assert_expected_events, bx, Chain, Parachain as Para, RelayChain as Relay, Test,
 			TestArgs, TestContext, TestExt,
diff --git a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs
index 0100e8e34ef3f41c12d78ea95b9f8b7d3ddaa7fd..10c27c338ec7f69ac63d9498e62852a6a83dca61 100644
--- a/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs
+++ b/cumulus/parachains/integration-tests/emulated/tests/assets/asset-hub-westend/src/tests/reserve_transfer.rs
@@ -14,6 +14,7 @@
 // limitations under the License.
 
 use crate::imports::*;
+use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
 
 fn relay_to_para_sender_assertions(t: RelayToParaTest) {
 	type RuntimeEvent = <Westend as Chain>::RuntimeEvent;
@@ -1043,7 +1044,8 @@ fn reserve_transfer_multiple_assets_from_para_to_asset_hub() {
 	);
 
 	// Beneficiary is a new (empty) account
-	let receiver = get_account_id_from_seed::<sp_runtime::testing::sr25519::Public>(DUMMY_EMPTY);
+	let receiver: sp_runtime::AccountId32 =
+		get_public_from_string_or_panic::<sr25519::Public>(DUMMY_EMPTY).into();
 	// Init values for Asset Hub
 	let penpal_location_as_seen_by_ahr = AssetHubWestend::sibling_location_of(PenpalA::para_id());
 	let sov_penpal_on_ahr =
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml
index 47e0983a41506f882ce0689dfe0518dad5b38376..00f2cf8f636f2c5e4e5c62a1377b65e2ce61f7e5 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/Cargo.toml
@@ -49,6 +49,7 @@ sp-api = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-consensus-aura = { workspace = true }
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 sp-inherents = { workspace = true }
 sp-genesis-builder = { workspace = true }
 sp-offchain = { workspace = true }
@@ -239,6 +240,7 @@ std = [
 	"sp-core/std",
 	"sp-genesis-builder/std",
 	"sp-inherents/std",
+	"sp-keyring/std",
 	"sp-offchain/std",
 	"sp-runtime/std",
 	"sp-session/std",
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs
index 1dbd92d6bff0be297ba21299af3e50a10d230332..dc98d00f8f63a2d02a058869e750173322016ce3 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-rococo/src/genesis_config_presets.rs
@@ -19,9 +19,10 @@ use crate::*;
 use alloc::{vec, vec::Vec};
 use cumulus_primitives_core::ParaId;
 use hex_literal::hex;
-use parachains_common::{genesis_config_helpers::*, AccountId, AuraId};
-use sp_core::{crypto::UncheckedInto, sr25519};
+use parachains_common::{AccountId, AuraId};
+use sp_core::crypto::UncheckedInto;
 use sp_genesis_builder::PresetId;
+use sp_keyring::Sr25519Keyring;
 use testnet_parachains_constants::rococo::{currency::UNITS as ROC, xcm_version::SAFE_XCM_VERSION};
 
 const ASSET_HUB_ROCOCO_ED: Balance = ExistentialDeposit::get();
@@ -109,43 +110,21 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => asset_hub_rococo_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-			],
-			ROC * 1_000_000,
+			Sr25519Keyring::well_known().map(|x| x.to_account_id()).collect(),
+			testnet_parachains_constants::rococo::currency::UNITS * 1_000_000,
 			1000.into(),
 		),
 		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => asset_hub_rococo_genesis(
 			// initial collators.
-			vec![(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			)],
+			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				Sr25519Keyring::Alice.to_account_id(),
+				Sr25519Keyring::Bob.to_account_id(),
+				Sr25519Keyring::AliceStash.to_account_id(),
+				Sr25519Keyring::BobStash.to_account_id(),
 			],
 			ROC * 1_000_000,
 			1000.into(),
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml b/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml
index 1434c3e3b6016af13339f348c8ec3a838e6d3d6e..72a125cee2ad51feecff841fb9789fb2d0aae77c 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml
+++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/Cargo.toml
@@ -49,6 +49,7 @@ sp-api = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-consensus-aura = { workspace = true }
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 sp-genesis-builder = { workspace = true }
 sp-inherents = { workspace = true }
 sp-offchain = { workspace = true }
@@ -242,6 +243,7 @@ std = [
 	"sp-core/std",
 	"sp-genesis-builder/std",
 	"sp-inherents/std",
+	"sp-keyring/std",
 	"sp-offchain/std",
 	"sp-runtime/std",
 	"sp-session/std",
diff --git a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs
index b287dcd56219aa13cbfb72f7e3a3e5681581ea91..758ce3f40609fdc322807d1ac222df737a0bc3b6 100644
--- a/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/assets/asset-hub-westend/src/genesis_config_presets.rs
@@ -19,9 +19,10 @@ use crate::*;
 use alloc::{vec, vec::Vec};
 use cumulus_primitives_core::ParaId;
 use hex_literal::hex;
-use parachains_common::{genesis_config_helpers::*, AccountId, AuraId};
-use sp_core::{crypto::UncheckedInto, sr25519};
+use parachains_common::{AccountId, AuraId};
+use sp_core::crypto::UncheckedInto;
 use sp_genesis_builder::PresetId;
+use sp_keyring::Sr25519Keyring;
 use testnet_parachains_constants::westend::{
 	currency::UNITS as WND, xcm_version::SAFE_XCM_VERSION,
 };
@@ -107,43 +108,21 @@ pub fn get_preset(id: &PresetId) -> Option<Vec<u8>> {
 		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => asset_hub_westend_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			WND * 1_000_000,
 			1000.into(),
 		),
 		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => asset_hub_westend_genesis(
 			// initial collators.
-			vec![(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			)],
+			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				Sr25519Keyring::Alice.to_account_id(),
+				Sr25519Keyring::Bob.to_account_id(),
+				Sr25519Keyring::AliceStash.to_account_id(),
+				Sr25519Keyring::BobStash.to_account_id(),
 			],
 			WND * 1_000_000,
 			1000.into(),
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
index 9a76e61ecb20c555f461ff3cf623cdc1009e605a..fd5782d68e434c23a4868e0ca39dfd35e3000bba 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
@@ -13,14 +13,10 @@ workspace = true
 substrate-wasm-builder = { optional = true, workspace = true, default-features = true }
 
 [dependencies]
-codec = { features = [
-	"derive",
-], workspace = true }
+codec = { features = ["derive"], workspace = true }
 hex-literal = { workspace = true, default-features = true }
 log = { workspace = true }
-scale-info = { features = [
-	"derive",
-], workspace = true }
+scale-info = { features = ["derive"], workspace = true }
 serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 serde_json = { features = ["alloc"], workspace = true }
 
@@ -47,6 +43,7 @@ sp-api = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-consensus-aura = { workspace = true }
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 sp-genesis-builder = { workspace = true }
 sp-inherents = { workspace = true }
 sp-io = { workspace = true }
@@ -74,9 +71,7 @@ cumulus-pallet-aura-ext = { workspace = true }
 cumulus-pallet-parachain-system = { workspace = true }
 cumulus-pallet-session-benchmarking = { workspace = true }
 cumulus-pallet-xcm = { workspace = true }
-cumulus-pallet-xcmp-queue = { features = [
-	"bridging",
-], workspace = true }
+cumulus-pallet-xcmp-queue = { features = ["bridging"], workspace = true }
 cumulus-primitives-aura = { workspace = true }
 cumulus-primitives-core = { workspace = true }
 cumulus-primitives-storage-weight-reclaim = { workspace = true }
@@ -126,7 +121,6 @@ bridge-hub-common = { workspace = true }
 bridge-hub-test-utils = { workspace = true, default-features = true }
 bridge-runtime-common = { features = ["integrity-test"], workspace = true, default-features = true }
 pallet-bridge-relayers = { features = ["integrity-test"], workspace = true }
-sp-keyring = { workspace = true, default-features = true }
 snowbridge-runtime-test-common = { workspace = true, default-features = true }
 
 [features]
@@ -210,6 +204,7 @@ std = [
 	"sp-genesis-builder/std",
 	"sp-inherents/std",
 	"sp-io/std",
+	"sp-keyring/std",
 	"sp-offchain/std",
 	"sp-runtime/std",
 	"sp-session/std",
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs
index 07048d54ab1ba96acbe3fd9c32f17ab686da04cd..d1b599967bf3690cbe93172beac225d38b14e75a 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/genesis_config_presets.rs
@@ -18,9 +18,9 @@
 use crate::*;
 use alloc::{vec, vec::Vec};
 use cumulus_primitives_core::ParaId;
-use parachains_common::{genesis_config_helpers::*, AccountId, AuraId};
-use sp_core::sr25519;
+use parachains_common::{AccountId, AuraId};
 use sp_genesis_builder::PresetId;
+use sp_keyring::Sr25519Keyring;
 use testnet_parachains_constants::rococo::xcm_version::SAFE_XCM_VERSION;
 
 const BRIDGE_HUB_ROCOCO_ED: Balance = ExistentialDeposit::get();
@@ -93,31 +93,12 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => bridge_hub_rococo_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			1013.into(),
-			Some(get_account_id_from_seed::<sr25519::Public>("Bob")),
+			Some(Sr25519Keyring::Bob.to_account_id()),
 			rococo_runtime_constants::system_parachain::ASSET_HUB_ID.into(),
 			vec![(
 				Location::new(1, [Parachain(1000)]),
@@ -128,31 +109,12 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => bridge_hub_rococo_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			1013.into(),
-			Some(get_account_id_from_seed::<sr25519::Public>("Bob")),
+			Some(Sr25519Keyring::Bob.to_account_id()),
 			rococo_runtime_constants::system_parachain::ASSET_HUB_ID.into(),
 			vec![],
 		),
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml
index a0233bf2ea452f89195a909e8d868df4a791396f..471158d9645d717469215d5c09ed49129463906b 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml
@@ -43,6 +43,7 @@ sp-api = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-consensus-aura = { workspace = true }
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 sp-genesis-builder = { workspace = true }
 sp-inherents = { workspace = true }
 sp-io = { workspace = true }
@@ -119,7 +120,6 @@ snowbridge-runtime-common = { workspace = true }
 bridge-hub-test-utils = { workspace = true, default-features = true }
 bridge-runtime-common = { features = ["integrity-test"], workspace = true, default-features = true }
 pallet-bridge-relayers = { features = ["integrity-test"], workspace = true }
-sp-keyring = { workspace = true, default-features = true }
 snowbridge-runtime-test-common = { workspace = true, default-features = true }
 
 [features]
@@ -200,6 +200,7 @@ std = [
 	"sp-genesis-builder/std",
 	"sp-inherents/std",
 	"sp-io/std",
+	"sp-keyring/std",
 	"sp-offchain/std",
 	"sp-runtime/std",
 	"sp-session/std",
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs
index 0b270e5843391f7bba071ccbf1b40c96fff78ed5..2949ae01fdcccdc6dfa9dfc229d76e3021c5e08e 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/src/genesis_config_presets.rs
@@ -18,9 +18,9 @@
 use crate::*;
 use alloc::{vec, vec::Vec};
 use cumulus_primitives_core::ParaId;
-use parachains_common::{genesis_config_helpers::*, AccountId, AuraId};
-use sp_core::sr25519;
+use parachains_common::{AccountId, AuraId};
 use sp_genesis_builder::PresetId;
+use sp_keyring::Sr25519Keyring;
 use testnet_parachains_constants::westend::xcm_version::SAFE_XCM_VERSION;
 
 const BRIDGE_HUB_WESTEND_ED: Balance = ExistentialDeposit::get();
@@ -93,31 +93,12 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => bridge_hub_westend_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			1002.into(),
-			Some(get_account_id_from_seed::<sr25519::Public>("Bob")),
+			Some(Sr25519Keyring::Bob.to_account_id()),
 			westend_runtime_constants::system_parachain::ASSET_HUB_ID.into(),
 			vec![(
 				Location::new(1, [Parachain(1000)]),
@@ -128,31 +109,12 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => bridge_hub_westend_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			1002.into(),
-			Some(get_account_id_from_seed::<sr25519::Public>("Bob")),
+			Some(Sr25519Keyring::Bob.to_account_id()),
 			westend_runtime_constants::system_parachain::ASSET_HUB_ID.into(),
 			vec![],
 		),
diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml b/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml
index 170d6d226057411e77de92da6d22cf68fe4fe641..8a47af18524d9a6a77ccac51f7b02c365d228323 100644
--- a/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml
+++ b/cumulus/parachains/runtimes/collectives/collectives-westend/Cargo.toml
@@ -50,6 +50,7 @@ sp-arithmetic = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-consensus-aura = { workspace = true }
 sp-core = { workspace = true }
+sp-keyring = { workspace = true }
 sp-genesis-builder = { workspace = true }
 sp-inherents = { workspace = true }
 sp-offchain = { workspace = true }
@@ -228,6 +229,7 @@ std = [
 	"sp-core/std",
 	"sp-genesis-builder/std",
 	"sp-inherents/std",
+	"sp-keyring/std",
 	"sp-offchain/std",
 	"sp-runtime/std",
 	"sp-session/std",
diff --git a/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs b/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs
index 30a23d7aaea458128bf5149670aa5a4addd97ee4..aec8e96cedc0b5e3d6fdf354c12557813ac96d00 100644
--- a/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs
+++ b/cumulus/parachains/runtimes/collectives/collectives-westend/src/genesis_config_presets.rs
@@ -18,9 +18,9 @@
 use crate::*;
 use alloc::{vec, vec::Vec};
 use cumulus_primitives_core::ParaId;
-use parachains_common::{genesis_config_helpers::*, AccountId, AuraId};
-use sp_core::sr25519;
+use parachains_common::{AccountId, AuraId};
 use sp_genesis_builder::PresetId;
+use sp_keyring::Sr25519Keyring;
 use testnet_parachains_constants::westend::xcm_version::SAFE_XCM_VERSION;
 
 const COLLECTIVES_WESTEND_ED: Balance = ExistentialDeposit::get();
@@ -73,42 +73,20 @@ pub fn get_preset(id: &sp_genesis_builder::PresetId) -> Option<sp_std::vec::Vec<
 		Ok(sp_genesis_builder::LOCAL_TESTNET_RUNTIME_PRESET) => collectives_westend_genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			1001.into(),
 		),
 		Ok(sp_genesis_builder::DEV_RUNTIME_PRESET) => collectives_westend_genesis(
 			// initial collators.
-			vec![(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			)],
+			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				Sr25519Keyring::Alice.to_account_id(),
+				Sr25519Keyring::Bob.to_account_id(),
+				Sr25519Keyring::AliceStash.to_account_id(),
+				Sr25519Keyring::BobStash.to_account_id(),
 			],
 			1001.into(),
 		),
diff --git a/cumulus/polkadot-parachain/Cargo.toml b/cumulus/polkadot-parachain/Cargo.toml
index 426679ce0cd59d3b26e3235292483d2a71b379ce..5520126d0742a800e9f5f2343ad0467196e6dd9d 100644
--- a/cumulus/polkadot-parachain/Cargo.toml
+++ b/cumulus/polkadot-parachain/Cargo.toml
@@ -40,6 +40,7 @@ parachains-common = { workspace = true, default-features = true }
 
 # Substrate
 sp-core = { workspace = true, default-features = true }
+sp-keyring = { workspace = true, default-features = true }
 sc-cli = { workspace = true, default-features = true }
 sc-service = { workspace = true, default-features = true }
 sc-chain-spec = { workspace = true, default-features = true }
diff --git a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs
index e42e95ad16f8bb77bd08969058b90adda8692f33..fa865d7458cbe941698832dfc388abcf9bbc061d 100644
--- a/cumulus/polkadot-parachain/src/chain_spec/coretime.rs
+++ b/cumulus/polkadot-parachain/src/chain_spec/coretime.rs
@@ -146,13 +146,11 @@ pub fn chain_type_name(chain_type: &ChainType) -> Cow<str> {
 /// Sub-module for Rococo setup.
 pub mod rococo {
 	use super::{chain_type_name, CoretimeRuntimeType, ParaId};
-	use crate::chain_spec::{
-		get_account_id_from_seed, get_collator_keys_from_seed, SAFE_XCM_VERSION,
-	};
+	use crate::chain_spec::SAFE_XCM_VERSION;
 	use parachains_common::{AccountId, AuraId, Balance};
 	use polkadot_omni_node_lib::chain_spec::{Extensions, GenericChainSpec};
 	use sc_chain_spec::ChainType;
-	use sp_core::sr25519;
+	use sp_keyring::Sr25519Keyring;
 
 	pub(crate) const CORETIME_ROCOCO: &str = "coretime-rococo";
 	pub(crate) const CORETIME_ROCOCO_LOCAL: &str = "coretime-rococo-local";
@@ -187,15 +185,12 @@ pub mod rococo {
 		.with_chain_type(chain_type)
 		.with_genesis_config_patch(genesis(
 			// initial collators.
-			vec![(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			)],
+			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				Sr25519Keyring::Alice.to_account_id(),
+				Sr25519Keyring::Bob.to_account_id(),
+				Sr25519Keyring::AliceStash.to_account_id(),
+				Sr25519Keyring::BobStash.to_account_id(),
 			],
 			para_id,
 		))
@@ -235,7 +230,7 @@ pub mod rococo {
 				"safeXcmVersion": Some(SAFE_XCM_VERSION),
 			},
 			"sudo": {
-				"key": Some(get_account_id_from_seed::<sr25519::Public>("Alice")),
+				"key": Some(Sr25519Keyring::Alice.to_account_id()),
 			},
 		})
 	}
@@ -244,12 +239,10 @@ pub mod rococo {
 /// Sub-module for Westend setup.
 pub mod westend {
 	use super::{chain_type_name, CoretimeRuntimeType, GenericChainSpec, ParaId};
-	use crate::chain_spec::{
-		get_account_id_from_seed, get_collator_keys_from_seed, SAFE_XCM_VERSION,
-	};
+	use crate::chain_spec::SAFE_XCM_VERSION;
 	use parachains_common::{AccountId, AuraId, Balance};
 	use polkadot_omni_node_lib::chain_spec::Extensions;
-	use sp_core::sr25519;
+	use sp_keyring::Sr25519Keyring;
 
 	pub(crate) const CORETIME_WESTEND: &str = "coretime-westend";
 	pub(crate) const CORETIME_WESTEND_LOCAL: &str = "coretime-westend-local";
@@ -277,15 +270,12 @@ pub mod westend {
 		.with_chain_type(chain_type)
 		.with_genesis_config_patch(genesis(
 			// initial collators.
-			vec![(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			)],
+			vec![(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into())],
 			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				Sr25519Keyring::Alice.to_account_id(),
+				Sr25519Keyring::Bob.to_account_id(),
+				Sr25519Keyring::AliceStash.to_account_id(),
+				Sr25519Keyring::BobStash.to_account_id(),
 			],
 			para_id,
 		))
diff --git a/cumulus/polkadot-parachain/src/chain_spec/glutton.rs b/cumulus/polkadot-parachain/src/chain_spec/glutton.rs
index e70f86f725a19c556d5e4c13fceec1c980c26dc8..ddfb961370ac7ca66c2e72ce13ce7ff9805ca8c0 100644
--- a/cumulus/polkadot-parachain/src/chain_spec/glutton.rs
+++ b/cumulus/polkadot-parachain/src/chain_spec/glutton.rs
@@ -14,14 +14,11 @@
 // You should have received a copy of the GNU General Public License
 // along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
 
-use crate::chain_spec::get_account_id_from_seed;
 use cumulus_primitives_core::ParaId;
 use parachains_common::AuraId;
 use polkadot_omni_node_lib::chain_spec::{Extensions, GenericChainSpec};
 use sc_service::ChainType;
-use sp_core::sr25519;
-
-use super::get_collator_keys_from_seed;
+use sp_keyring::Sr25519Keyring;
 
 fn glutton_genesis(parachain_id: ParaId, collators: Vec<AuraId>) -> serde_json::Value {
 	serde_json::json!( {
@@ -29,7 +26,7 @@ fn glutton_genesis(parachain_id: ParaId, collators: Vec<AuraId>) -> serde_json::
 			"parachainId": parachain_id
 		},
 		"sudo": {
-			"key": Some(get_account_id_from_seed::<sr25519::Public>("Alice")),
+			"key": Some(Sr25519Keyring::Alice.to_account_id()),
 		},
 		"aura": { "authorities": collators },
 	})
@@ -45,7 +42,7 @@ pub fn glutton_westend_development_config(para_id: ParaId) -> GenericChainSpec {
 	.with_chain_type(ChainType::Local)
 	.with_genesis_config_patch(glutton_genesis(
 		para_id,
-		vec![get_collator_keys_from_seed::<AuraId>("Alice")],
+		vec![Sr25519Keyring::Alice.public().into()],
 	))
 	.build()
 }
@@ -60,10 +57,7 @@ pub fn glutton_westend_local_config(para_id: ParaId) -> GenericChainSpec {
 	.with_chain_type(ChainType::Local)
 	.with_genesis_config_patch(glutton_genesis(
 		para_id,
-		vec![
-			get_collator_keys_from_seed::<AuraId>("Alice"),
-			get_collator_keys_from_seed::<AuraId>("Bob"),
-		],
+		vec![Sr25519Keyring::Alice.public().into(), Sr25519Keyring::Bob.public().into()],
 	))
 	.build()
 }
@@ -81,10 +75,7 @@ pub fn glutton_westend_config(para_id: ParaId) -> GenericChainSpec {
 	.with_chain_type(ChainType::Live)
 	.with_genesis_config_patch(glutton_westend_genesis(
 		para_id,
-		vec![
-			get_collator_keys_from_seed::<AuraId>("Alice"),
-			get_collator_keys_from_seed::<AuraId>("Bob"),
-		],
+		vec![Sr25519Keyring::Alice.public().into(), Sr25519Keyring::Bob.public().into()],
 	))
 	.with_protocol_id(format!("glutton-westend-{}", para_id).as_str())
 	.with_properties(properties)
@@ -97,7 +88,7 @@ fn glutton_westend_genesis(parachain_id: ParaId, collators: Vec<AuraId>) -> serd
 			"parachainId": parachain_id
 		},
 		"sudo": {
-			"key": Some(get_account_id_from_seed::<sr25519::Public>("Alice")),
+			"key": Some(Sr25519Keyring::Alice.to_account_id()),
 		},
 		"aura": { "authorities": collators },
 	})
diff --git a/cumulus/polkadot-parachain/src/chain_spec/mod.rs b/cumulus/polkadot-parachain/src/chain_spec/mod.rs
index a820fdbd13e86e7002d758436f7a71366be03449..00dceabb006943ff5c4039fd25f2fe3a690f5480 100644
--- a/cumulus/polkadot-parachain/src/chain_spec/mod.rs
+++ b/cumulus/polkadot-parachain/src/chain_spec/mod.rs
@@ -15,9 +15,6 @@
 // along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
 
 use cumulus_primitives_core::ParaId;
-pub(crate) use parachains_common::genesis_config_helpers::{
-	get_account_id_from_seed, get_collator_keys_from_seed, get_from_seed,
-};
 use polkadot_omni_node_lib::{
 	chain_spec::{GenericChainSpec, LoadSpec},
 	runtime::{
@@ -274,7 +271,7 @@ mod tests {
 	use super::*;
 	use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup, ChainType, Extension};
 	use serde::{Deserialize, Serialize};
-	use sp_core::sr25519;
+	use sp_keyring::Sr25519Keyring;
 
 	#[derive(
 		Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension, Default,
@@ -310,12 +307,9 @@ mod tests {
 		.with_id(id)
 		.with_chain_type(ChainType::Local)
 		.with_genesis_config_patch(crate::chain_spec::rococo_parachain::testnet_genesis(
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			vec![
-				get_from_seed::<rococo_parachain_runtime::AuraId>("Alice"),
-				get_from_seed::<rococo_parachain_runtime::AuraId>("Bob"),
-			],
-			vec![get_account_id_from_seed::<sr25519::Public>("Alice")],
+			Sr25519Keyring::Alice.to_account_id(),
+			vec![Sr25519Keyring::Alice.public().into(), Sr25519Keyring::Bob.public().into()],
+			vec![Sr25519Keyring::Bob.to_account_id()],
 			1000.into(),
 		))
 		.build()
diff --git a/cumulus/polkadot-parachain/src/chain_spec/penpal.rs b/cumulus/polkadot-parachain/src/chain_spec/penpal.rs
index 006c5c9b53c254b67c17926770adff3462010314..b60b9982c49e91908ba02972892aaf70b2438713 100644
--- a/cumulus/polkadot-parachain/src/chain_spec/penpal.rs
+++ b/cumulus/polkadot-parachain/src/chain_spec/penpal.rs
@@ -14,12 +14,12 @@
 // You should have received a copy of the GNU General Public License
 // along with Cumulus.  If not, see <http://www.gnu.org/licenses/>.
 
-use crate::chain_spec::{get_account_id_from_seed, get_collator_keys_from_seed, SAFE_XCM_VERSION};
+use crate::chain_spec::SAFE_XCM_VERSION;
 use cumulus_primitives_core::ParaId;
 use parachains_common::{AccountId, AuraId};
 use polkadot_omni_node_lib::chain_spec::{Extensions, GenericChainSpec};
 use sc_service::ChainType;
-use sp_core::sr25519;
+use sp_keyring::Sr25519Keyring;
 
 pub fn get_penpal_chain_spec(id: ParaId, relay_chain: &str) -> GenericChainSpec {
 	// Give your base currency a unit name and decimal places
@@ -41,29 +41,10 @@ pub fn get_penpal_chain_spec(id: ParaId, relay_chain: &str) -> GenericChainSpec
 	.with_genesis_config_patch(penpal_testnet_genesis(
 		// initial collators.
 		vec![
-			(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			),
-			(
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_collator_keys_from_seed::<AuraId>("Bob"),
-			),
-		],
-		vec![
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			get_account_id_from_seed::<sr25519::Public>("Bob"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie"),
-			get_account_id_from_seed::<sr25519::Public>("Dave"),
-			get_account_id_from_seed::<sr25519::Public>("Eve"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-			get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+			(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+			(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 		],
+		Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 		id,
 	))
 	.build()
@@ -105,7 +86,7 @@ fn penpal_testnet_genesis(
 			"safeXcmVersion": Some(SAFE_XCM_VERSION),
 		},
 		"sudo": {
-			"key": Some(get_account_id_from_seed::<sr25519::Public>("Alice")),
+			"key": Some(Sr25519Keyring::Alice.to_account_id()),
 		},
 	})
 }
diff --git a/cumulus/polkadot-parachain/src/chain_spec/people.rs b/cumulus/polkadot-parachain/src/chain_spec/people.rs
index b89f1c3a5fe675b561f08fb908ff5e7c07dac84a..1735a904b8eacc2e9ebddc6f869d24f21fae541c 100644
--- a/cumulus/polkadot-parachain/src/chain_spec/people.rs
+++ b/cumulus/polkadot-parachain/src/chain_spec/people.rs
@@ -120,13 +120,11 @@ fn ensure_id(id: &str) -> Result<&str, String> {
 /// Sub-module for Rococo setup.
 pub mod rococo {
 	use super::{ParaId, PeopleBalance};
-	use crate::chain_spec::{
-		get_account_id_from_seed, get_collator_keys_from_seed, SAFE_XCM_VERSION,
-	};
+	use crate::chain_spec::SAFE_XCM_VERSION;
 	use parachains_common::{AccountId, AuraId};
 	use polkadot_omni_node_lib::chain_spec::{Extensions, GenericChainSpec};
 	use sc_chain_spec::ChainType;
-	use sp_core::sr25519;
+	use sp_keyring::Sr25519Keyring;
 
 	pub(crate) const PEOPLE_ROCOCO: &str = "people-rococo";
 	pub(crate) const PEOPLE_ROCOCO_LOCAL: &str = "people-rococo-local";
@@ -155,29 +153,10 @@ pub mod rococo {
 		.with_genesis_config_patch(genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			para_id,
 		))
 		.with_properties(properties)
@@ -230,13 +209,11 @@ pub mod rococo {
 /// Sub-module for Westend setup.
 pub mod westend {
 	use super::{ParaId, PeopleBalance};
-	use crate::chain_spec::{
-		get_account_id_from_seed, get_collator_keys_from_seed, SAFE_XCM_VERSION,
-	};
+	use crate::chain_spec::SAFE_XCM_VERSION;
 	use parachains_common::{AccountId, AuraId};
 	use polkadot_omni_node_lib::chain_spec::{Extensions, GenericChainSpec};
 	use sc_chain_spec::ChainType;
-	use sp_core::sr25519;
+	use sp_keyring::Sr25519Keyring;
 
 	pub(crate) const PEOPLE_WESTEND: &str = "people-westend";
 	pub(crate) const PEOPLE_WESTEND_LOCAL: &str = "people-westend-local";
@@ -265,29 +242,10 @@ pub mod westend {
 		.with_genesis_config_patch(genesis(
 			// initial collators.
 			vec![
-				(
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_collator_keys_from_seed::<AuraId>("Alice"),
-				),
-				(
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_collator_keys_from_seed::<AuraId>("Bob"),
-				),
-			],
-			vec![
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie"),
-				get_account_id_from_seed::<sr25519::Public>("Dave"),
-				get_account_id_from_seed::<sr25519::Public>("Eve"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+				(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+				(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 			],
+			Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 			para_id,
 		))
 		.with_properties(properties)
diff --git a/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs b/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs
index 39762f590cfe18bbe05a3ebbc49bd1c18476c337..68383ac5c233d493c06e205f05bbe1637ce394b9 100644
--- a/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs
+++ b/cumulus/polkadot-parachain/src/chain_spec/rococo_parachain.rs
@@ -16,14 +16,15 @@
 
 //! ChainSpecs dedicated to Rococo parachain setups (for testing and example purposes)
 
-use crate::chain_spec::{get_from_seed, SAFE_XCM_VERSION};
+use crate::chain_spec::SAFE_XCM_VERSION;
 use cumulus_primitives_core::ParaId;
 use hex_literal::hex;
-use parachains_common::{genesis_config_helpers::get_account_id_from_seed, AccountId};
+use parachains_common::AccountId;
 use polkadot_omni_node_lib::chain_spec::{Extensions, GenericChainSpec};
 use rococo_parachain_runtime::AuraId;
 use sc_chain_spec::ChainType;
-use sp_core::{crypto::UncheckedInto, sr25519};
+use sp_core::crypto::UncheckedInto;
+use sp_keyring::Sr25519Keyring;
 
 pub fn rococo_parachain_local_config() -> GenericChainSpec {
 	GenericChainSpec::builder(
@@ -34,22 +35,12 @@ pub fn rococo_parachain_local_config() -> GenericChainSpec {
 	.with_id("local_testnet")
 	.with_chain_type(ChainType::Local)
 	.with_genesis_config_patch(testnet_genesis(
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
-		vec![get_from_seed::<AuraId>("Alice"), get_from_seed::<AuraId>("Bob")],
+		Sr25519Keyring::Alice.to_account_id(),
 		vec![
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			get_account_id_from_seed::<sr25519::Public>("Bob"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie"),
-			get_account_id_from_seed::<sr25519::Public>("Dave"),
-			get_account_id_from_seed::<sr25519::Public>("Eve"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-			get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+			AuraId::from(Sr25519Keyring::Alice.public()),
+			AuraId::from(Sr25519Keyring::Bob.public()),
 		],
+		Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
 		1000.into(),
 	))
 	.build()
diff --git a/cumulus/test/service/src/chain_spec.rs b/cumulus/test/service/src/chain_spec.rs
index ae71028ad486a46f32347f925e645ff0980bd652..3abffcff794f97ad69c3a623bb18987a5670495e 100644
--- a/cumulus/test/service/src/chain_spec.rs
+++ b/cumulus/test/service/src/chain_spec.rs
@@ -17,24 +17,16 @@
 #![allow(missing_docs)]
 
 use cumulus_primitives_core::ParaId;
-use cumulus_test_runtime::{AccountId, Signature};
+use cumulus_test_runtime::AccountId;
 use parachains_common::AuraId;
 use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
 use sc_service::ChainType;
 use serde::{Deserialize, Serialize};
-use sp_core::{sr25519, Pair, Public};
-use sp_runtime::traits::{IdentifyAccount, Verify};
+use sp_keyring::Sr25519Keyring;
 
 /// Specialized `ChainSpec` for the normal parachain runtime.
 pub type ChainSpec = sc_service::GenericChainSpec<Extensions>;
 
-/// Helper function to generate a crypto pair from seed
-pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
 /// The extensions for the [`ChainSpec`].
 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]
 #[serde(deny_unknown_fields)]
@@ -50,16 +42,6 @@ impl Extensions {
 	}
 }
 
-type AccountPublic = <Signature as Verify>::Signer;
-
-/// Helper function to generate an account ID from seed.
-pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
 /// Get the chain spec for a specific parachain ID.
 /// The given accounts are initialized with funds in addition
 /// to the default known accounts.
@@ -106,42 +88,11 @@ pub fn testnet_genesis_with_default_endowed(
 	mut extra_endowed_accounts: Vec<AccountId>,
 	self_para_id: Option<ParaId>,
 ) -> serde_json::Value {
-	let mut endowed = vec![
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
-		get_account_id_from_seed::<sr25519::Public>("Bob"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie"),
-		get_account_id_from_seed::<sr25519::Public>("Dave"),
-		get_account_id_from_seed::<sr25519::Public>("Eve"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-		get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-	];
+	let mut endowed = Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect::<Vec<_>>();
 	endowed.append(&mut extra_endowed_accounts);
-	let invulnerables = vec![
-		get_collator_keys_from_seed::<AuraId>("Alice"),
-		get_collator_keys_from_seed::<AuraId>("Bob"),
-		get_collator_keys_from_seed::<AuraId>("Charlie"),
-		get_collator_keys_from_seed::<AuraId>("Dave"),
-		get_collator_keys_from_seed::<AuraId>("Eve"),
-		get_collator_keys_from_seed::<AuraId>("Ferdie"),
-	];
-	testnet_genesis(
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
-		invulnerables,
-		endowed,
-		self_para_id,
-	)
-}
-
-/// Generate collator keys from seed.
-///
-/// This function's return type must always match the session keys of the chain in tuple format.
-pub fn get_collator_keys_from_seed<AuraId: Public>(seed: &str) -> <AuraId::Pair as Pair>::Public {
-	get_from_seed::<AuraId>(seed)
+	let invulnerables =
+		Sr25519Keyring::invulnerable().map(|k| k.public().into()).collect::<Vec<_>>();
+	testnet_genesis(Sr25519Keyring::Alice.to_account_id(), invulnerables, endowed, self_para_id)
 }
 
 /// Creates a local testnet genesis with endowed accounts.
diff --git a/cumulus/xcm/xcm-emulator/src/lib.rs b/cumulus/xcm/xcm-emulator/src/lib.rs
index bb2945dc267db568e44cdca2d525a47ca062c6cc..b91246a7bda22a8bb3bfedb57cca28ce09ce8f07 100644
--- a/cumulus/xcm/xcm-emulator/src/lib.rs
+++ b/cumulus/xcm/xcm-emulator/src/lib.rs
@@ -49,7 +49,9 @@ pub use frame_system::{
 pub use pallet_balances::AccountData;
 pub use pallet_message_queue;
 pub use sp_arithmetic::traits::Bounded;
-pub use sp_core::{parameter_types, sr25519, storage::Storage, Pair};
+pub use sp_core::{
+	crypto::get_public_from_string_or_panic, parameter_types, sr25519, storage::Storage, Pair,
+};
 pub use sp_crypto_hashing::blake2_256;
 pub use sp_io::TestExternalities;
 pub use sp_runtime::BoundedSlice;
@@ -226,7 +228,7 @@ pub trait Chain: TestExt {
 	type OriginCaller;
 
 	fn account_id_of(seed: &str) -> AccountId {
-		helpers::get_account_id_from_seed::<sr25519::Public>(seed)
+		get_public_from_string_or_panic::<sr25519::Public>(seed).into()
 	}
 
 	fn account_data_of(account: AccountIdOf<Self::Runtime>) -> AccountData<Balance>;
@@ -1608,17 +1610,4 @@ pub mod helpers {
 
 		ref_time_within && proof_size_within
 	}
-
-	/// Helper function to generate an account ID from seed.
-	pub fn get_account_id_from_seed<TPublic: sp_core::Public>(seed: &str) -> AccountId
-	where
-		sp_runtime::MultiSigner:
-			From<<<TPublic as sp_runtime::CryptoType>::Pair as sp_core::Pair>::Public>,
-	{
-		use sp_runtime::traits::IdentifyAccount;
-		let pubkey = TPublic::Pair::from_string(&format!("//{}", seed), None)
-			.expect("static values are valid; qed")
-			.public();
-		sp_runtime::MultiSigner::from(pubkey).into_account()
-	}
 }
diff --git a/polkadot/node/service/src/chain_spec.rs b/polkadot/node/service/src/chain_spec.rs
index fe360e7b8c769204972af5fceb2b0c788dc29d08..3866c6950e09161598112ff9b79dac40ee17b720 100644
--- a/polkadot/node/service/src/chain_spec.rs
+++ b/polkadot/node/service/src/chain_spec.rs
@@ -27,10 +27,6 @@ use serde::{Deserialize, Serialize};
 #[cfg(feature = "westend-native")]
 use westend_runtime as westend;
 
-use polkadot_primitives::{AccountId, AccountPublic};
-use sp_core::{Pair, Public};
-use sp_runtime::traits::IdentifyAccount;
-
 #[cfg(feature = "westend-native")]
 const WESTEND_STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
 #[cfg(feature = "rococo-native")]
@@ -257,18 +253,3 @@ pub fn versi_local_testnet_config() -> Result<RococoChainSpec, String> {
 	.with_protocol_id("versi")
 	.build())
 }
-
-/// Helper function to generate a crypto pair from seed
-pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-/// Helper function to generate an account ID from seed
-pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
diff --git a/polkadot/node/test/service/src/chain_spec.rs b/polkadot/node/test/service/src/chain_spec.rs
index 00d62af0b2734088a6f99503a3ae034d90c65c6b..ae4e84b7725e50348a2d635e0e340614dd445043 100644
--- a/polkadot/node/test/service/src/chain_spec.rs
+++ b/polkadot/node/test/service/src/chain_spec.rs
@@ -21,13 +21,13 @@ use polkadot_primitives::{
 	AccountId, AssignmentId, SchedulerParams, ValidatorId, MAX_CODE_SIZE, MAX_POV_SIZE,
 };
 use polkadot_service::chain_spec::Extensions;
-pub use polkadot_service::chain_spec::{get_account_id_from_seed, get_from_seed};
 use polkadot_test_runtime::BABE_GENESIS_EPOCH_CONFIG;
 use sc_chain_spec::{ChainSpec, ChainType};
 use sc_consensus_grandpa::AuthorityId as GrandpaId;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
-use sp_core::sr25519;
+use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
+use sp_keyring::Sr25519Keyring;
 use sp_runtime::Perbill;
 use test_runtime_constants::currency::DOTS;
 
@@ -65,7 +65,7 @@ pub fn polkadot_local_testnet_config() -> PolkadotChainSpec {
 pub fn polkadot_local_testnet_genesis() -> serde_json::Value {
 	polkadot_testnet_genesis(
 		vec![get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob")],
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
@@ -75,31 +75,18 @@ fn get_authority_keys_from_seed(
 	seed: &str,
 ) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AssignmentId, AuthorityDiscoveryId) {
 	(
-		get_account_id_from_seed::<sr25519::Public>(&format!("{}//stash", seed)),
-		get_account_id_from_seed::<sr25519::Public>(seed),
-		get_from_seed::<BabeId>(seed),
-		get_from_seed::<GrandpaId>(seed),
-		get_from_seed::<ValidatorId>(seed),
-		get_from_seed::<AssignmentId>(seed),
-		get_from_seed::<AuthorityDiscoveryId>(seed),
+		get_public_from_string_or_panic::<sr25519::Public>(&format!("{}//stash", seed)).into(),
+		get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		get_public_from_string_or_panic::<BabeId>(seed),
+		get_public_from_string_or_panic::<GrandpaId>(seed),
+		get_public_from_string_or_panic::<ValidatorId>(seed),
+		get_public_from_string_or_panic::<AssignmentId>(seed),
+		get_public_from_string_or_panic::<AuthorityDiscoveryId>(seed),
 	)
 }
 
 fn testnet_accounts() -> Vec<AccountId> {
-	vec![
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
-		get_account_id_from_seed::<sr25519::Public>("Bob"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie"),
-		get_account_id_from_seed::<sr25519::Public>("Dave"),
-		get_account_id_from_seed::<sr25519::Public>("Eve"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-		get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-	]
+	Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect()
 }
 
 /// Helper function to create polkadot `RuntimeGenesisConfig` for testing
diff --git a/polkadot/runtime/common/Cargo.toml b/polkadot/runtime/common/Cargo.toml
index cda6f3240dd2e4e6460471372a5536fa8cc2307d..ad082f179b2f008354bf073171912309ff7a0bb1 100644
--- a/polkadot/runtime/common/Cargo.toml
+++ b/polkadot/runtime/common/Cargo.toml
@@ -27,6 +27,7 @@ sp-runtime = { features = ["serde"], workspace = true }
 sp-session = { workspace = true }
 sp-staking = { features = ["serde"], workspace = true }
 sp-core = { features = ["serde"], workspace = true }
+sp-keyring = { workspace = true }
 sp-npos-elections = { features = ["serde"], workspace = true }
 
 pallet-authorship = { workspace = true }
diff --git a/polkadot/runtime/common/src/purchase.rs b/polkadot/runtime/common/src/purchase.rs
index 9cbb907536d94769afbc5825ead2942c71c811ca..cec92540654cc8567ebc8aef297cd987ca235e11 100644
--- a/polkadot/runtime/common/src/purchase.rs
+++ b/polkadot/runtime/common/src/purchase.rs
@@ -479,7 +479,8 @@ where
 mod tests {
 	use super::*;
 
-	use sp_core::{crypto::AccountId32, ed25519, Pair, Public, H256};
+	use sp_core::{crypto::AccountId32, H256};
+	use sp_keyring::{Ed25519Keyring, Sr25519Keyring};
 	// The testing primitives are very useful for avoiding having to work with signatures
 	// or public keys. `u64` is used as the `AccountId` and no `Signature`s are required.
 	use crate::purchase;
@@ -488,10 +489,9 @@ mod tests {
 		traits::{Currency, WithdrawReasons},
 	};
 	use sp_runtime::{
-		traits::{BlakeTwo256, Dispatchable, IdentifyAccount, Identity, IdentityLookup, Verify},
+		traits::{BlakeTwo256, Dispatchable, Identity, IdentityLookup},
 		ArithmeticError, BuildStorage,
 		DispatchError::BadOrigin,
-		MultiSignature,
 	};
 
 	type Block = frame_system::mocking::MockBlock<Test>;
@@ -602,33 +602,16 @@ mod tests {
 		Balances::make_free_balance_be(&payment_account(), 100_000);
 	}
 
-	type AccountPublic = <MultiSignature as Verify>::Signer;
-
-	/// Helper function to generate a crypto pair from seed
-	fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-		TPublic::Pair::from_string(&format!("//{}", seed), None)
-			.expect("static values are valid; qed")
-			.public()
-	}
-
-	/// Helper function to generate an account ID from seed
-	fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-	where
-		AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-	{
-		AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-	}
-
 	fn alice() -> AccountId {
-		get_account_id_from_seed::<sr25519::Public>("Alice")
+		Sr25519Keyring::Alice.to_account_id()
 	}
 
 	fn alice_ed25519() -> AccountId {
-		get_account_id_from_seed::<ed25519::Public>("Alice")
+		Ed25519Keyring::Alice.to_account_id()
 	}
 
 	fn bob() -> AccountId {
-		get_account_id_from_seed::<sr25519::Public>("Bob")
+		Sr25519Keyring::Bob.to_account_id()
 	}
 
 	fn alice_signature() -> [u8; 64] {
diff --git a/polkadot/runtime/rococo/Cargo.toml b/polkadot/runtime/rococo/Cargo.toml
index 4aaaf94da5865e8c97406c11e443267733a2280b..7becf6376c349fe3878675dd8800afd859981c99 100644
--- a/polkadot/runtime/rococo/Cargo.toml
+++ b/polkadot/runtime/rococo/Cargo.toml
@@ -42,6 +42,7 @@ sp-storage = { workspace = true }
 sp-version = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-block-builder = { workspace = true }
+sp-keyring = { workspace = true }
 
 pallet-authority-discovery = { workspace = true }
 pallet-authorship = { workspace = true }
diff --git a/polkadot/runtime/rococo/src/genesis_config_presets.rs b/polkadot/runtime/rococo/src/genesis_config_presets.rs
index c237dfd967f6780061c6801d37f7ef01b758cc5c..d609548aed27c580b511ff235f9b52d4ba06e80d 100644
--- a/polkadot/runtime/rococo/src/genesis_config_presets.rs
+++ b/polkadot/runtime/rococo/src/genesis_config_presets.rs
@@ -23,30 +23,15 @@ use crate::{
 #[cfg(not(feature = "std"))]
 use alloc::format;
 use alloc::{vec, vec::Vec};
-use polkadot_primitives::{AccountId, AccountPublic, AssignmentId, SchedulerParams, ValidatorId};
+use polkadot_primitives::{AccountId, AssignmentId, SchedulerParams, ValidatorId};
 use rococo_runtime_constants::currency::UNITS as ROC;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
 use sp_consensus_beefy::ecdsa_crypto::AuthorityId as BeefyId;
 use sp_consensus_grandpa::AuthorityId as GrandpaId;
-use sp_core::{sr25519, Pair, Public};
+use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
 use sp_genesis_builder::PresetId;
-use sp_runtime::traits::IdentifyAccount;
-
-/// Helper function to generate a crypto pair from seed
-fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-/// Helper function to generate an account ID from seed
-fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
+use sp_keyring::Sr25519Keyring;
 
 /// Helper function to generate stash, controller and session key from seed
 fn get_authority_keys_from_seed(
@@ -62,7 +47,16 @@ fn get_authority_keys_from_seed(
 	BeefyId,
 ) {
 	let keys = get_authority_keys_from_seed_no_beefy(seed);
-	(keys.0, keys.1, keys.2, keys.3, keys.4, keys.5, keys.6, get_from_seed::<BeefyId>(seed))
+	(
+		keys.0,
+		keys.1,
+		keys.2,
+		keys.3,
+		keys.4,
+		keys.5,
+		keys.6,
+		get_public_from_string_or_panic::<BeefyId>(seed),
+	)
 }
 
 /// Helper function to generate stash, controller and session key from seed
@@ -70,31 +64,18 @@ fn get_authority_keys_from_seed_no_beefy(
 	seed: &str,
 ) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AssignmentId, AuthorityDiscoveryId) {
 	(
-		get_account_id_from_seed::<sr25519::Public>(&format!("{}//stash", seed)),
-		get_account_id_from_seed::<sr25519::Public>(seed),
-		get_from_seed::<BabeId>(seed),
-		get_from_seed::<GrandpaId>(seed),
-		get_from_seed::<ValidatorId>(seed),
-		get_from_seed::<AssignmentId>(seed),
-		get_from_seed::<AuthorityDiscoveryId>(seed),
+		get_public_from_string_or_panic::<sr25519::Public>(&format!("{}//stash", seed)).into(),
+		get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		get_public_from_string_or_panic::<BabeId>(seed),
+		get_public_from_string_or_panic::<GrandpaId>(seed),
+		get_public_from_string_or_panic::<ValidatorId>(seed),
+		get_public_from_string_or_panic::<AssignmentId>(seed),
+		get_public_from_string_or_panic::<AuthorityDiscoveryId>(seed),
 	)
 }
 
 fn testnet_accounts() -> Vec<AccountId> {
-	Vec::from([
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
-		get_account_id_from_seed::<sr25519::Public>("Bob"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie"),
-		get_account_id_from_seed::<sr25519::Public>("Dave"),
-		get_account_id_from_seed::<sr25519::Public>("Eve"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-		get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-	])
+	Sr25519Keyring::well_known().map(|x| x.to_account_id()).collect()
 }
 
 fn rococo_session_keys(
@@ -478,7 +459,7 @@ fn rococo_staging_testnet_config_genesis() -> serde_json::Value {
 fn rococo_development_config_genesis() -> serde_json::Value {
 	rococo_testnet_genesis(
 		Vec::from([get_authority_keys_from_seed("Alice")]),
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
@@ -487,7 +468,7 @@ fn rococo_development_config_genesis() -> serde_json::Value {
 fn rococo_local_testnet_genesis() -> serde_json::Value {
 	rococo_testnet_genesis(
 		Vec::from([get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob")]),
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
@@ -502,7 +483,7 @@ fn versi_local_testnet_genesis() -> serde_json::Value {
 			get_authority_keys_from_seed("Charlie"),
 			get_authority_keys_from_seed("Dave"),
 		]),
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
diff --git a/polkadot/runtime/westend/Cargo.toml b/polkadot/runtime/westend/Cargo.toml
index 16bec1a7702a961750a43082bfe56b792f271255..31c04c26ece7b9db20eb525a29f1fec92a21b7b1 100644
--- a/polkadot/runtime/westend/Cargo.toml
+++ b/polkadot/runtime/westend/Cargo.toml
@@ -42,6 +42,7 @@ sp-version = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-npos-elections = { workspace = true }
+sp-keyring = { workspace = true }
 
 frame-election-provider-support = { workspace = true }
 frame-executive = { workspace = true }
diff --git a/polkadot/runtime/westend/src/genesis_config_presets.rs b/polkadot/runtime/westend/src/genesis_config_presets.rs
index f59bacce31bd11f0d46f72a06865fd55f11846c5..621ef38f0b75c8cde37714745ccef6a937dddb51 100644
--- a/polkadot/runtime/westend/src/genesis_config_presets.rs
+++ b/polkadot/runtime/westend/src/genesis_config_presets.rs
@@ -24,31 +24,17 @@ use crate::{
 use alloc::format;
 use alloc::{vec, vec::Vec};
 use pallet_staking::{Forcing, StakerStatus};
-use polkadot_primitives::{AccountId, AccountPublic, AssignmentId, SchedulerParams, ValidatorId};
+use polkadot_primitives::{AccountId, AssignmentId, SchedulerParams, ValidatorId};
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
 use sp_consensus_beefy::ecdsa_crypto::AuthorityId as BeefyId;
 use sp_consensus_grandpa::AuthorityId as GrandpaId;
-use sp_core::{sr25519, Pair, Public};
+use sp_core::{crypto::get_public_from_string_or_panic, sr25519};
 use sp_genesis_builder::PresetId;
-use sp_runtime::{traits::IdentifyAccount, Perbill};
+use sp_keyring::Sr25519Keyring;
+use sp_runtime::Perbill;
 use westend_runtime_constants::currency::UNITS as WND;
 
-/// Helper function to generate a crypto pair from seed
-fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-/// Helper function to generate an account ID from seed
-fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
 /// Helper function to generate stash, controller and session key from seed
 fn get_authority_keys_from_seed(
 	seed: &str,
@@ -63,7 +49,16 @@ fn get_authority_keys_from_seed(
 	BeefyId,
 ) {
 	let keys = get_authority_keys_from_seed_no_beefy(seed);
-	(keys.0, keys.1, keys.2, keys.3, keys.4, keys.5, keys.6, get_from_seed::<BeefyId>(seed))
+	(
+		keys.0,
+		keys.1,
+		keys.2,
+		keys.3,
+		keys.4,
+		keys.5,
+		keys.6,
+		get_public_from_string_or_panic::<BeefyId>(seed),
+	)
 }
 
 /// Helper function to generate stash, controller and session key from seed
@@ -71,31 +66,18 @@ fn get_authority_keys_from_seed_no_beefy(
 	seed: &str,
 ) -> (AccountId, AccountId, BabeId, GrandpaId, ValidatorId, AssignmentId, AuthorityDiscoveryId) {
 	(
-		get_account_id_from_seed::<sr25519::Public>(&format!("{}//stash", seed)),
-		get_account_id_from_seed::<sr25519::Public>(seed),
-		get_from_seed::<BabeId>(seed),
-		get_from_seed::<GrandpaId>(seed),
-		get_from_seed::<ValidatorId>(seed),
-		get_from_seed::<AssignmentId>(seed),
-		get_from_seed::<AuthorityDiscoveryId>(seed),
+		get_public_from_string_or_panic::<sr25519::Public>(&format!("{}//stash", seed)).into(),
+		get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		get_public_from_string_or_panic::<BabeId>(seed),
+		get_public_from_string_or_panic::<GrandpaId>(seed),
+		get_public_from_string_or_panic::<ValidatorId>(seed),
+		get_public_from_string_or_panic::<AssignmentId>(seed),
+		get_public_from_string_or_panic::<AuthorityDiscoveryId>(seed),
 	)
 }
 
 fn testnet_accounts() -> Vec<AccountId> {
-	Vec::from([
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
-		get_account_id_from_seed::<sr25519::Public>("Bob"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie"),
-		get_account_id_from_seed::<sr25519::Public>("Dave"),
-		get_account_id_from_seed::<sr25519::Public>("Eve"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-		get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-		get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-	])
+	Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect()
 }
 
 fn westend_session_keys(
@@ -420,7 +402,7 @@ fn westend_staging_testnet_config_genesis() -> serde_json::Value {
 fn westend_development_config_genesis() -> serde_json::Value {
 	westend_testnet_genesis(
 		Vec::from([get_authority_keys_from_seed("Alice")]),
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
@@ -429,7 +411,7 @@ fn westend_development_config_genesis() -> serde_json::Value {
 fn westend_local_testnet_genesis() -> serde_json::Value {
 	westend_testnet_genesis(
 		Vec::from([get_authority_keys_from_seed("Alice"), get_authority_keys_from_seed("Bob")]),
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
diff --git a/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs b/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs
index 6f44cc0a75d55267426f3044d369ec30fce8b550..020a4a54285e9e256b2d2aa13a27072595271121 100644
--- a/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs
+++ b/polkadot/xcm/xcm-executor/integration-tests/src/lib.rs
@@ -23,8 +23,7 @@ use polkadot_test_client::{
 	TestClientBuilder, TestClientBuilderExt,
 };
 use polkadot_test_runtime::{pallet_test_notifier, xcm_config::XcmConfig};
-use polkadot_test_service::{chain_spec::get_account_id_from_seed, construct_extrinsic};
-use sp_core::sr25519;
+use polkadot_test_service::construct_extrinsic;
 use sp_runtime::traits::Block;
 use sp_state_machine::InspectState;
 use xcm::{latest::prelude::*, VersionedResponse, VersionedXcm};
@@ -342,7 +341,7 @@ fn deposit_reserve_asset_works_for_any_xcm_sender() {
 	let weight_limit = Unlimited;
 	let reserve = Location::parent();
 	let dest = Location::new(1, [Parachain(2000)]);
-	let beneficiary_id = get_account_id_from_seed::<sr25519::Public>("Alice");
+	let beneficiary_id = sp_keyring::Sr25519Keyring::Alice.to_account_id();
 	let beneficiary = Location::new(0, [AccountId32 { network: None, id: beneficiary_id.into() }]);
 
 	// spends up to half of fees for execution on reserve and other half for execution on
diff --git a/prdoc/pr_5804.prdoc b/prdoc/pr_5804.prdoc
new file mode 100644
index 0000000000000000000000000000000000000000..beef83860cc51f3eec8c30666913197e6de7eee3
--- /dev/null
+++ b/prdoc/pr_5804.prdoc
@@ -0,0 +1,42 @@
+# Schema: Polkadot SDK PRDoc Schema (prdoc) v1.0.0
+# See doc at https://raw.githubusercontent.com/paritytech/polkadot-sdk/master/prdoc/schema_user.json
+
+title: Refactor get_account_id_from_seed / get_from_seed to one common place
+
+doc:
+  - audience: Runtime Dev
+    description: |
+      `get_account_id_from_seed / get_from_seed` were copied all over the place. This PR removes unnecessary code duplication.
+      `Keyring::iter()` provides the same functionality and is used instead.
+
+crates: 
+  - name: polkadot-runtime-common
+    bump: patch
+  - name: polkadot-service
+    bump: major
+  - name: sp-keyring
+    bump: major
+  - name: rococo-runtime
+    bump: patch
+  - name: westend-runtime
+    bump: patch
+  - name: parachains-common
+    bump: major
+  - name: emulated-integration-tests-common
+    bump: major
+  - name: xcm-emulator
+    bump: major
+  - name: asset-hub-rococo-runtime
+    bump: patch
+  - name: asset-hub-westend-runtime
+    bump: patch
+  - name: bridge-hub-rococo-runtime
+    bump: patch
+  - name: bridge-hub-westend-runtime
+    bump: patch
+  - name: collectives-westend-runtime
+    bump: patch
+  - name: polkadot-parachain-bin
+    bump: patch
+  - name: sp-core
+    bump: patch
diff --git a/substrate/bin/node/cli/Cargo.toml b/substrate/bin/node/cli/Cargo.toml
index 04dcb909b8c1d0a20db0c4888e1b8c3aa97aa08d..2e53c18645f56821a2f2f3a663dad481e5035cf9 100644
--- a/substrate/bin/node/cli/Cargo.toml
+++ b/substrate/bin/node/cli/Cargo.toml
@@ -155,6 +155,7 @@ wait-timeout = { workspace = true }
 wat = { workspace = true }
 serde_json = { workspace = true, default-features = true }
 scale-info = { features = ["derive", "serde"], workspace = true, default-features = true }
+sp-keyring = { workspace = true }
 pretty_assertions.workspace = true
 
 # These testing-only dependencies are not exported by the Polkadot-SDK crate:
@@ -172,12 +173,7 @@ polkadot-sdk = { features = ["frame-benchmarking-cli", "sc-cli", "sc-storage-mon
 
 [features]
 default = ["cli"]
-cli = [
-	"clap",
-	"clap_complete",
-	"node-inspect",
-	"polkadot-sdk",
-]
+cli = ["clap", "clap_complete", "node-inspect", "polkadot-sdk"]
 runtime-benchmarks = [
 	"kitchensink-runtime/runtime-benchmarks",
 	"node-inspect?/runtime-benchmarks",
@@ -188,10 +184,7 @@ try-runtime = [
 	"polkadot-sdk/try-runtime",
 	"substrate-cli-test-utils/try-runtime",
 ]
-riscv = [
-	"kitchensink-runtime/riscv",
-	"polkadot-sdk/riscv",
-]
+riscv = ["kitchensink-runtime/riscv", "polkadot-sdk/riscv"]
 
 [[bench]]
 name = "transaction_pool"
diff --git a/substrate/bin/node/cli/src/chain_spec.rs b/substrate/bin/node/cli/src/chain_spec.rs
index bc7821bfcf304bc7c41d50d0bf1606e33ac114bc..6cd9adfd7f2586e7e0db6f95ab8d0db15cbfdcf7 100644
--- a/substrate/bin/node/cli/src/chain_spec.rs
+++ b/substrate/bin/node/cli/src/chain_spec.rs
@@ -32,18 +32,17 @@ use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
 use sp_consensus_beefy::ecdsa_crypto::AuthorityId as BeefyId;
 use sp_consensus_grandpa::AuthorityId as GrandpaId;
-use sp_core::{crypto::UncheckedInto, sr25519, Pair, Public};
-use sp_mixnet::types::AuthorityId as MixnetId;
-use sp_runtime::{
-	traits::{IdentifyAccount, Verify},
-	Perbill,
+use sp_core::{
+	crypto::{get_public_from_string_or_panic, UncheckedInto},
+	sr25519,
 };
+use sp_keyring::Sr25519Keyring;
+use sp_mixnet::types::AuthorityId as MixnetId;
+use sp_runtime::Perbill;
 
 pub use kitchensink_runtime::RuntimeGenesisConfig;
 pub use node_primitives::{AccountId, Balance, Signature};
 
-type AccountPublic = <Signature as Verify>::Signer;
-
 const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/";
 const ENDOWMENT: Balance = 10_000_000 * DOLLARS;
 const STASH: Balance = ENDOWMENT / 1000;
@@ -246,35 +245,20 @@ pub fn staging_testnet_config() -> ChainSpec {
 		.build()
 }
 
-/// Helper function to generate a crypto pair from seed.
-pub fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-/// Helper function to generate an account ID from seed.
-pub fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
 /// Helper function to generate stash, controller and session key from seed.
 pub fn authority_keys_from_seed(
 	seed: &str,
 ) -> (AccountId, AccountId, GrandpaId, BabeId, ImOnlineId, AuthorityDiscoveryId, MixnetId, BeefyId)
 {
 	(
-		get_account_id_from_seed::<sr25519::Public>(&format!("{}//stash", seed)),
-		get_account_id_from_seed::<sr25519::Public>(seed),
-		get_from_seed::<GrandpaId>(seed),
-		get_from_seed::<BabeId>(seed),
-		get_from_seed::<ImOnlineId>(seed),
-		get_from_seed::<AuthorityDiscoveryId>(seed),
-		get_from_seed::<MixnetId>(seed),
-		get_from_seed::<BeefyId>(seed),
+		get_public_from_string_or_panic::<sr25519::Public>(&format!("{}//stash", seed)).into(),
+		get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		get_public_from_string_or_panic::<GrandpaId>(seed),
+		get_public_from_string_or_panic::<BabeId>(seed),
+		get_public_from_string_or_panic::<ImOnlineId>(seed),
+		get_public_from_string_or_panic::<AuthorityDiscoveryId>(seed),
+		get_public_from_string_or_panic::<MixnetId>(seed),
+		get_public_from_string_or_panic::<BeefyId>(seed),
 	)
 }
 
@@ -307,22 +291,8 @@ fn configure_accounts(
 	usize,
 	Vec<(AccountId, AccountId, Balance, StakerStatus<AccountId>)>,
 ) {
-	let mut endowed_accounts: Vec<AccountId> = endowed_accounts.unwrap_or_else(|| {
-		vec![
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			get_account_id_from_seed::<sr25519::Public>("Bob"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie"),
-			get_account_id_from_seed::<sr25519::Public>("Dave"),
-			get_account_id_from_seed::<sr25519::Public>("Eve"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-			get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-		]
-	});
+	let mut endowed_accounts: Vec<AccountId> = endowed_accounts
+		.unwrap_or_else(|| Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect());
 	// endow all authorities and nominators.
 	initial_authorities
 		.iter()
@@ -429,7 +399,7 @@ pub fn testnet_genesis(
 		"society": { "pot": 0 },
 		"assets": {
 			// This asset is used by the NIS pallet as counterpart currency.
-			"assets": vec![(9, get_account_id_from_seed::<sr25519::Public>("Alice"), true, 1)],
+			"assets": vec![(9, Sr25519Keyring::Alice.to_account_id(), true, 1)],
 		},
 		"nominationPools": {
 			"minCreateBond": 10 * DOLLARS,
@@ -442,7 +412,7 @@ fn development_config_genesis_json() -> serde_json::Value {
 	testnet_genesis(
 		vec![authority_keys_from_seed("Alice")],
 		vec![],
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
@@ -461,7 +431,7 @@ fn local_testnet_genesis() -> serde_json::Value {
 	testnet_genesis(
 		vec![authority_keys_from_seed("Alice"), authority_keys_from_seed("Bob")],
 		vec![],
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::Alice.to_account_id(),
 		None,
 	)
 }
@@ -492,7 +462,7 @@ pub(crate) mod tests {
 			.with_genesis_config_patch(testnet_genesis(
 				vec![authority_keys_from_seed("Alice")],
 				vec![],
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				Sr25519Keyring::Alice.to_account_id(),
 				None,
 			))
 			.build()
diff --git a/substrate/bin/node/testing/src/bench.rs b/substrate/bin/node/testing/src/bench.rs
index 007d314684cf17faeda6adb4842513ea57030fdc..fb0504f8fadef7eb107de6040d04cf591ca2ec66 100644
--- a/substrate/bin/node/testing/src/bench.rs
+++ b/substrate/bin/node/testing/src/bench.rs
@@ -47,7 +47,9 @@ use sc_executor::{WasmExecutionMethod, WasmtimeInstantiationStrategy};
 use sp_api::ProvideRuntimeApi;
 use sp_block_builder::BlockBuilder;
 use sp_consensus::BlockOrigin;
-use sp_core::{ed25519, sr25519, traits::SpawnNamed, Pair, Public};
+use sp_core::{
+	crypto::get_public_from_string_or_panic, ed25519, sr25519, traits::SpawnNamed, Pair,
+};
 use sp_crypto_hashing::blake2_256;
 use sp_inherents::InherentData;
 use sp_runtime::{
@@ -288,10 +290,11 @@ impl<'a> Iterator for BlockContentIterator<'a> {
 		}
 
 		let sender = self.keyring.at(self.iteration);
-		let receiver = get_account_id_from_seed::<sr25519::Public>(&format!(
+		let receiver = get_public_from_string_or_panic::<sr25519::Public>(&format!(
 			"random-user//{}",
 			self.iteration
-		));
+		))
+		.into();
 
 		let signed = self.keyring.sign(
 			CheckedExtrinsic {
@@ -630,19 +633,6 @@ pub struct BenchContext {
 
 type AccountPublic = <Signature as Verify>::Signer;
 
-fn get_from_seed<TPublic: Public>(seed: &str) -> <TPublic::Pair as Pair>::Public {
-	TPublic::Pair::from_string(&format!("//{}", seed), None)
-		.expect("static values are valid; qed")
-		.public()
-}
-
-fn get_account_id_from_seed<TPublic: Public>(seed: &str) -> AccountId
-where
-	AccountPublic: From<<TPublic::Pair as Pair>::Public>,
-{
-	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
-}
-
 impl BenchContext {
 	/// Import some block.
 	pub fn import_block(&mut self, block: Block) {
diff --git a/substrate/bin/node/testing/src/keyring.rs b/substrate/bin/node/testing/src/keyring.rs
index eab088d9100ef266f26b600a501e78881e557efe..312fba8319b5c8cab6ae695e59ca9d8b1d388266 100644
--- a/substrate/bin/node/testing/src/keyring.rs
+++ b/substrate/bin/node/testing/src/keyring.rs
@@ -20,52 +20,55 @@
 
 use codec::Encode;
 use kitchensink_runtime::{CheckedExtrinsic, SessionKeys, SignedExtra, UncheckedExtrinsic};
-use node_cli::chain_spec::get_from_seed;
 use node_primitives::{AccountId, Balance, Nonce};
-use sp_core::{ecdsa, ed25519, sr25519};
+use sp_core::{crypto::get_public_from_string_or_panic, ecdsa, ed25519, sr25519};
 use sp_crypto_hashing::blake2_256;
-use sp_keyring::AccountKeyring;
+use sp_keyring::Sr25519Keyring;
 use sp_runtime::generic::Era;
 
 /// Alice's account id.
 pub fn alice() -> AccountId {
-	AccountKeyring::Alice.into()
+	Sr25519Keyring::Alice.into()
 }
 
 /// Bob's account id.
 pub fn bob() -> AccountId {
-	AccountKeyring::Bob.into()
+	Sr25519Keyring::Bob.into()
 }
 
 /// Charlie's account id.
 pub fn charlie() -> AccountId {
-	AccountKeyring::Charlie.into()
+	Sr25519Keyring::Charlie.into()
 }
 
 /// Dave's account id.
 pub fn dave() -> AccountId {
-	AccountKeyring::Dave.into()
+	Sr25519Keyring::Dave.into()
 }
 
 /// Eve's account id.
 pub fn eve() -> AccountId {
-	AccountKeyring::Eve.into()
+	Sr25519Keyring::Eve.into()
 }
 
 /// Ferdie's account id.
 pub fn ferdie() -> AccountId {
-	AccountKeyring::Ferdie.into()
+	Sr25519Keyring::Ferdie.into()
 }
 
 /// Convert keyrings into `SessionKeys`.
+///
+/// # Panics
+///
+/// Function will panic when invalid string is provided.
 pub fn session_keys_from_seed(seed: &str) -> SessionKeys {
 	SessionKeys {
-		grandpa: get_from_seed::<ed25519::Public>(seed).into(),
-		babe: get_from_seed::<sr25519::Public>(seed).into(),
-		im_online: get_from_seed::<sr25519::Public>(seed).into(),
-		authority_discovery: get_from_seed::<sr25519::Public>(seed).into(),
-		mixnet: get_from_seed::<sr25519::Public>(seed).into(),
-		beefy: get_from_seed::<ecdsa::Public>(seed).into(),
+		grandpa: get_public_from_string_or_panic::<ed25519::Public>(seed).into(),
+		babe: get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		im_online: get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		authority_discovery: get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		mixnet: get_public_from_string_or_panic::<sr25519::Public>(seed).into(),
+		beefy: get_public_from_string_or_panic::<ecdsa::Public>(seed).into(),
 	}
 }
 
@@ -105,7 +108,7 @@ pub fn sign(
 				genesis_hash,
 				metadata_hash,
 			);
-			let key = AccountKeyring::from_account_id(&signed).unwrap();
+			let key = Sr25519Keyring::from_account_id(&signed).unwrap();
 			let signature =
 				payload
 					.using_encoded(|b| {
diff --git a/substrate/primitives/core/src/crypto.rs b/substrate/primitives/core/src/crypto.rs
index fd7fe776720400ba3e4ad9fa1859ca5dc168a8bb..b04d94e2bf40ddce312ef923b36063defb26ba69 100644
--- a/substrate/primitives/core/src/crypto.rs
+++ b/substrate/primitives/core/src/crypto.rs
@@ -18,9 +18,9 @@
 //! Cryptographic utilities.
 
 use crate::{ed25519, sr25519};
+use alloc::{format, str, vec::Vec};
 #[cfg(all(not(feature = "std"), feature = "serde"))]
-use alloc::{format, string::String, vec};
-use alloc::{str, vec::Vec};
+use alloc::{string::String, vec};
 use bip39::{Language, Mnemonic};
 use codec::{Decode, Encode, MaxEncodedLen};
 use core::hash::Hash;
@@ -419,6 +419,17 @@ pub fn set_default_ss58_version(new_default: Ss58AddressFormat) {
 	DEFAULT_VERSION.store(new_default.into(), core::sync::atomic::Ordering::Relaxed);
 }
 
+/// Interprets the string `s` in order to generate a public key without password.
+///
+/// Function will panic when invalid string is provided.
+pub fn get_public_from_string_or_panic<TPublic: Public>(
+	s: &str,
+) -> <TPublic::Pair as Pair>::Public {
+	TPublic::Pair::from_string(&format!("//{}", s), None)
+		.expect("Function expects valid argument; qed")
+		.public()
+}
+
 #[cfg(feature = "std")]
 impl<T: Sized + AsMut<[u8]> + AsRef<[u8]> + Public + Derive> Ss58Codec for T {
 	fn from_string(s: &str) -> Result<Self, PublicError> {
diff --git a/substrate/primitives/keyring/src/bandersnatch.rs b/substrate/primitives/keyring/src/bandersnatch.rs
index 67fc5c47df643ee4b45b8ebbb99089abdb466d96..64d3c314124d50d73a50f4c6604501781c777e8a 100644
--- a/substrate/primitives/keyring/src/bandersnatch.rs
+++ b/substrate/primitives/keyring/src/bandersnatch.rs
@@ -18,6 +18,8 @@
 //! A set of well-known keys used for testing.
 
 pub use sp_core::bandersnatch;
+
+use crate::ParseKeyringError;
 #[cfg(feature = "std")]
 use sp_core::bandersnatch::Signature;
 use sp_core::{
@@ -27,7 +29,7 @@ use sp_core::{
 };
 
 extern crate alloc;
-use alloc::{fmt, format, str::FromStr, string::String, vec::Vec};
+use alloc::{format, str::FromStr, string::String, vec::Vec};
 
 /// Set of test accounts.
 #[derive(
@@ -107,15 +109,6 @@ impl From<Keyring> for &'static str {
 	}
 }
 
-#[derive(Debug)]
-pub struct ParseKeyringError;
-
-impl fmt::Display for ParseKeyringError {
-	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-		write!(f, "ParseKeyringError")
-	}
-}
-
 impl FromStr for Keyring {
 	type Err = ParseKeyringError;
 
diff --git a/substrate/primitives/keyring/src/ed25519.rs b/substrate/primitives/keyring/src/ed25519.rs
index 98ca368e53caac26ae690b76500475b1749a07b1..235b5d5c9931cf71078cc3de2605206a59211c3f 100644
--- a/substrate/primitives/keyring/src/ed25519.rs
+++ b/substrate/primitives/keyring/src/ed25519.rs
@@ -18,6 +18,8 @@
 //! Support code for the runtime. A set of test accounts.
 
 pub use sp_core::ed25519;
+
+use crate::ParseKeyringError;
 #[cfg(feature = "std")]
 use sp_core::ed25519::Signature;
 use sp_core::{
@@ -27,7 +29,7 @@ use sp_core::{
 use sp_runtime::AccountId32;
 
 extern crate alloc;
-use alloc::{format, string::String, vec::Vec};
+use alloc::{format, str::FromStr, string::String, vec::Vec};
 
 /// Set of test accounts.
 #[derive(
@@ -105,6 +107,14 @@ impl Keyring {
 	pub fn to_seed(self) -> String {
 		format!("//{}", self)
 	}
+
+	pub fn well_known() -> impl Iterator<Item = Keyring> {
+		Self::iter().take(12)
+	}
+
+	pub fn invulnerable() -> impl Iterator<Item = Keyring> {
+		Self::iter().take(6)
+	}
 }
 
 impl From<Keyring> for &'static str {
@@ -134,6 +144,30 @@ impl From<Keyring> for sp_runtime::MultiSigner {
 	}
 }
 
+impl FromStr for Keyring {
+	type Err = ParseKeyringError;
+
+	fn from_str(s: &str) -> Result<Self, <Self as FromStr>::Err> {
+		match s {
+			"Alice" | "alice" => Ok(Keyring::Alice),
+			"Bob" | "bob" => Ok(Keyring::Bob),
+			"Charlie" | "charlie" => Ok(Keyring::Charlie),
+			"Dave" | "dave" => Ok(Keyring::Dave),
+			"Eve" | "eve" => Ok(Keyring::Eve),
+			"Ferdie" | "ferdie" => Ok(Keyring::Ferdie),
+			"Alice//stash" | "alice//stash" => Ok(Keyring::AliceStash),
+			"Bob//stash" | "bob//stash" => Ok(Keyring::BobStash),
+			"Charlie//stash" | "charlie//stash" => Ok(Keyring::CharlieStash),
+			"Dave//stash" | "dave//stash" => Ok(Keyring::DaveStash),
+			"Eve//stash" | "eve//stash" => Ok(Keyring::EveStash),
+			"Ferdie//stash" | "ferdie//stash" => Ok(Keyring::FerdieStash),
+			"One" | "one" => Ok(Keyring::One),
+			"Two" | "two" => Ok(Keyring::Two),
+			_ => Err(ParseKeyringError),
+		}
+	}
+}
+
 impl From<Keyring> for Public {
 	fn from(k: Keyring) -> Self {
 		Public::from_raw(k.into())
@@ -221,4 +255,40 @@ mod tests {
 	fn verify_static_public_keys() {
 		assert!(Keyring::iter().all(|k| { k.pair().public().as_ref() == <[u8; 32]>::from(k) }));
 	}
+
+	#[test]
+	fn verify_well_known() {
+		assert_eq!(
+			Keyring::well_known().collect::<Vec<Keyring>>(),
+			vec![
+				Keyring::Alice,
+				Keyring::Bob,
+				Keyring::Charlie,
+				Keyring::Dave,
+				Keyring::Eve,
+				Keyring::Ferdie,
+				Keyring::AliceStash,
+				Keyring::BobStash,
+				Keyring::CharlieStash,
+				Keyring::DaveStash,
+				Keyring::EveStash,
+				Keyring::FerdieStash
+			]
+		);
+	}
+
+	#[test]
+	fn verify_invulnerable() {
+		assert_eq!(
+			Keyring::invulnerable().collect::<Vec<Keyring>>(),
+			vec![
+				Keyring::Alice,
+				Keyring::Bob,
+				Keyring::Charlie,
+				Keyring::Dave,
+				Keyring::Eve,
+				Keyring::Ferdie
+			]
+		);
+	}
 }
diff --git a/substrate/primitives/keyring/src/lib.rs b/substrate/primitives/keyring/src/lib.rs
index f753bf4b0dd684d0aa292eeca1f97ad9f5cafdda..008c01b150f00fd0215d5db01064474303fb4655 100644
--- a/substrate/primitives/keyring/src/lib.rs
+++ b/substrate/primitives/keyring/src/lib.rs
@@ -19,6 +19,9 @@
 
 #![cfg_attr(not(feature = "std"), no_std)]
 
+extern crate alloc;
+use alloc::fmt;
+
 /// Test account crypto for sr25519.
 pub mod sr25519;
 
@@ -42,3 +45,13 @@ pub mod test {
 	/// The keyring for use with accounts when using the test runtime.
 	pub use super::ed25519::Keyring as AccountKeyring;
 }
+
+#[derive(Debug)]
+/// Represents an error that occurs when parsing a string into a `KeyRing`.
+pub struct ParseKeyringError;
+
+impl fmt::Display for ParseKeyringError {
+	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+		write!(f, "ParseKeyringError")
+	}
+}
diff --git a/substrate/primitives/keyring/src/sr25519.rs b/substrate/primitives/keyring/src/sr25519.rs
index a3a506152d7d6f0b76b366a930860e39f3f8fae0..5ff9056566bc7dca7981878f1724c97f9e0bdc15 100644
--- a/substrate/primitives/keyring/src/sr25519.rs
+++ b/substrate/primitives/keyring/src/sr25519.rs
@@ -18,6 +18,8 @@
 //! Support code for the runtime. A set of test accounts.
 
 pub use sp_core::sr25519;
+
+use crate::ParseKeyringError;
 #[cfg(feature = "std")]
 use sp_core::sr25519::Signature;
 use sp_core::{
@@ -28,7 +30,7 @@ use sp_core::{
 use sp_runtime::AccountId32;
 
 extern crate alloc;
-use alloc::{fmt, format, str::FromStr, string::String, vec::Vec};
+use alloc::{format, str::FromStr, string::String, vec::Vec};
 
 /// Set of test accounts.
 #[derive(
@@ -116,6 +118,14 @@ impl Keyring {
 	pub fn numeric_id(idx: usize) -> AccountId32 {
 		(*Self::numeric(idx).public().as_array_ref()).into()
 	}
+
+	pub fn well_known() -> impl Iterator<Item = Keyring> {
+		Self::iter().take(12)
+	}
+
+	pub fn invulnerable() -> impl Iterator<Item = Keyring> {
+		Self::iter().take(6)
+	}
 }
 
 impl From<Keyring> for &'static str {
@@ -145,28 +155,25 @@ impl From<Keyring> for sp_runtime::MultiSigner {
 	}
 }
 
-#[derive(Debug)]
-pub struct ParseKeyringError;
-
-impl fmt::Display for ParseKeyringError {
-	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-		write!(f, "ParseKeyringError")
-	}
-}
-
 impl FromStr for Keyring {
 	type Err = ParseKeyringError;
 
 	fn from_str(s: &str) -> Result<Self, <Self as FromStr>::Err> {
 		match s {
-			"alice" => Ok(Keyring::Alice),
-			"bob" => Ok(Keyring::Bob),
-			"charlie" => Ok(Keyring::Charlie),
-			"dave" => Ok(Keyring::Dave),
-			"eve" => Ok(Keyring::Eve),
-			"ferdie" => Ok(Keyring::Ferdie),
-			"one" => Ok(Keyring::One),
-			"two" => Ok(Keyring::Two),
+			"Alice" | "alice" => Ok(Keyring::Alice),
+			"Bob" | "bob" => Ok(Keyring::Bob),
+			"Charlie" | "charlie" => Ok(Keyring::Charlie),
+			"Dave" | "dave" => Ok(Keyring::Dave),
+			"Eve" | "eve" => Ok(Keyring::Eve),
+			"Ferdie" | "ferdie" => Ok(Keyring::Ferdie),
+			"Alice//stash" | "alice//stash" => Ok(Keyring::AliceStash),
+			"Bob//stash" | "bob//stash" => Ok(Keyring::BobStash),
+			"Charlie//stash" | "charlie//stash" => Ok(Keyring::CharlieStash),
+			"Dave//stash" | "dave//stash" => Ok(Keyring::DaveStash),
+			"Eve//stash" | "eve//stash" => Ok(Keyring::EveStash),
+			"Ferdie//stash" | "ferdie//stash" => Ok(Keyring::FerdieStash),
+			"One" | "one" => Ok(Keyring::One),
+			"Two" | "two" => Ok(Keyring::Two),
 			_ => Err(ParseKeyringError),
 		}
 	}
@@ -254,8 +261,45 @@ mod tests {
 			&Keyring::Bob.public(),
 		));
 	}
+
 	#[test]
 	fn verify_static_public_keys() {
 		assert!(Keyring::iter().all(|k| { k.pair().public().as_ref() == <[u8; 32]>::from(k) }));
 	}
+
+	#[test]
+	fn verify_well_known() {
+		assert_eq!(
+			Keyring::well_known().collect::<Vec<Keyring>>(),
+			vec![
+				Keyring::Alice,
+				Keyring::Bob,
+				Keyring::Charlie,
+				Keyring::Dave,
+				Keyring::Eve,
+				Keyring::Ferdie,
+				Keyring::AliceStash,
+				Keyring::BobStash,
+				Keyring::CharlieStash,
+				Keyring::DaveStash,
+				Keyring::EveStash,
+				Keyring::FerdieStash
+			]
+		);
+	}
+
+	#[test]
+	fn verify_invulnerable() {
+		assert_eq!(
+			Keyring::invulnerable().collect::<Vec<Keyring>>(),
+			vec![
+				Keyring::Alice,
+				Keyring::Bob,
+				Keyring::Charlie,
+				Keyring::Dave,
+				Keyring::Eve,
+				Keyring::Ferdie
+			]
+		);
+	}
 }
diff --git a/templates/parachain/runtime/Cargo.toml b/templates/parachain/runtime/Cargo.toml
index c9c08608f3b1b6d0ea272dabce2933aef02db179..f1d33b4143e4440a5b993cfeb351da25ca9c3242 100644
--- a/templates/parachain/runtime/Cargo.toml
+++ b/templates/parachain/runtime/Cargo.toml
@@ -17,14 +17,10 @@ substrate-wasm-builder = { optional = true, workspace = true, default-features =
 docify = { workspace = true }
 
 [dependencies]
-codec = { features = [
-	"derive",
-], workspace = true }
+codec = { features = ["derive"], workspace = true }
 hex-literal = { optional = true, workspace = true, default-features = true }
 log = { workspace = true }
-scale-info = { features = [
-	"derive",
-], workspace = true }
+scale-info = { features = ["derive"], workspace = true }
 smallvec = { workspace = true, default-features = true }
 docify = { workspace = true }
 serde_json = { workspace = true, default-features = false, features = ["alloc"] }
diff --git a/templates/parachain/runtime/src/genesis_config_presets.rs b/templates/parachain/runtime/src/genesis_config_presets.rs
index ac2aef734f4886e2920bb84ffb2f667e5c381534..322c91f4f136aaa007b15b00fa3f3c5f8eaad4a3 100644
--- a/templates/parachain/runtime/src/genesis_config_presets.rs
+++ b/templates/parachain/runtime/src/genesis_config_presets.rs
@@ -8,10 +8,10 @@ use alloc::{vec, vec::Vec};
 use polkadot_sdk::{staging_xcm as xcm, *};
 
 use cumulus_primitives_core::ParaId;
-use parachains_common::{genesis_config_helpers::*, AuraId};
+use parachains_common::AuraId;
 use serde_json::Value;
-use sp_core::sr25519;
 use sp_genesis_builder::PresetId;
+use sp_keyring::Sr25519Keyring;
 
 /// The default XCM version to set in genesis config.
 const SAFE_XCM_VERSION: u32 = xcm::prelude::XCM_VERSION;
@@ -71,30 +71,11 @@ fn local_testnet_genesis() -> Value {
 	testnet_genesis(
 		// initial collators.
 		vec![
-			(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			),
-			(
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_collator_keys_from_seed::<AuraId>("Bob"),
-			),
+			(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+			(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 		],
-		vec![
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			get_account_id_from_seed::<sr25519::Public>("Bob"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie"),
-			get_account_id_from_seed::<sr25519::Public>("Dave"),
-			get_account_id_from_seed::<sr25519::Public>("Eve"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-			get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-		],
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
+		Sr25519Keyring::Alice.to_account_id(),
 		1000.into(),
 	)
 }
@@ -103,30 +84,11 @@ fn development_config_genesis() -> Value {
 	testnet_genesis(
 		// initial collators.
 		vec![
-			(
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				get_collator_keys_from_seed::<AuraId>("Alice"),
-			),
-			(
-				get_account_id_from_seed::<sr25519::Public>("Bob"),
-				get_collator_keys_from_seed::<AuraId>("Bob"),
-			),
-		],
-		vec![
-			get_account_id_from_seed::<sr25519::Public>("Alice"),
-			get_account_id_from_seed::<sr25519::Public>("Bob"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie"),
-			get_account_id_from_seed::<sr25519::Public>("Dave"),
-			get_account_id_from_seed::<sr25519::Public>("Eve"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-			get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-			get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+			(Sr25519Keyring::Alice.to_account_id(), Sr25519Keyring::Alice.public().into()),
+			(Sr25519Keyring::Bob.to_account_id(), Sr25519Keyring::Bob.public().into()),
 		],
-		get_account_id_from_seed::<sr25519::Public>("Alice"),
+		Sr25519Keyring::well_known().map(|k| k.to_account_id()).collect(),
+		Sr25519Keyring::Alice.to_account_id(),
 		1000.into(),
 	)
 }