diff --git a/substrate/frame/system/src/offchain.rs b/substrate/frame/system/src/offchain.rs
index dd4ac6782a55e1d6330386444423c1d6e662d5be..a019cfd666e8cb3ddccc02aa706692cbe6cee2e3 100644
--- a/substrate/frame/system/src/offchain.rs
+++ b/substrate/frame/system/src/offchain.rs
@@ -154,8 +154,8 @@ impl<T: SigningTypes, C: AppCrypto<T::Public, T::Signature>, X> Signer<T, C, X>
 	/// all available accounts and the provided accounts
 	/// in `with_filter`. If no accounts are provided,
 	/// use all accounts by default.
-	fn accounts_from_keys<'a>(&'a self) -> Box<dyn Iterator<Item = Account<T>> + 'a> {
-		let keystore_accounts = self.keystore_accounts();
+	pub fn accounts_from_keys<'a>(&'a self) -> Box<dyn Iterator<Item = Account<T>> + 'a> {
+		let keystore_accounts = Self::keystore_accounts();
 		match self.accounts {
 			None => Box::new(keystore_accounts),
 			Some(ref keys) => {
@@ -175,7 +175,8 @@ impl<T: SigningTypes, C: AppCrypto<T::Public, T::Signature>, X> Signer<T, C, X>
 		}
 	}
 
-	fn keystore_accounts(&self) -> impl Iterator<Item = Account<T>> {
+	/// Return all available accounts in keystore.
+	pub fn keystore_accounts() -> impl Iterator<Item = Account<T>> {
 		C::RuntimeAppPublic::all().into_iter().enumerate().map(|(index, key)| {
 			let generic_public = C::GenericPublic::from(key);
 			let public: T::Public = generic_public.into();