Function decode_storage_key_current

Source
pub fn decode_storage_key_current<T>(
    pallet_name: &str,
    storage_entry: &str,
    cursor: &mut &[u8],
    metadata: &T,
) -> Result<StorageKey<<<T as InfoAndResolver>::Info as StorageTypeInfo>::TypeId>, StorageKeyDecodeError<<<T as InfoAndResolver>::Info as StorageTypeInfo>::TypeId>>
where T: InfoAndResolver, T::Info: StorageTypeInfo, <<T as InfoAndResolver>::Info as StorageTypeInfo>::TypeId: Debug + Clone, T::Resolver: TypeResolver<TypeId = <<T as InfoAndResolver>::Info as StorageTypeInfo>::TypeId>,
Expand description

Decode a storage key in a modern runtime, returning information about it.

This information can be used to identify and, where possible, decode the parts of the storage key.

See decode_storage_key for a more complete example.

ยงExample

Here, we decode some storage keys from a block.

use frame_decode::storage::decode_storage_key_current;
use frame_decode::helpers::decode_with_visitor;
use frame_metadata::RuntimeMetadata;
use parity_scale_codec::Decode;
use scale_value::scale::ValueVisitor;

let metadata_bytes = std::fs::read("artifacts/metadata_10000000_9180.scale").unwrap();
let RuntimeMetadata::V14(metadata) = RuntimeMetadata::decode(&mut &*metadata_bytes).unwrap() else { return };

let storage_keyval_bytes = std::fs::read("artifacts/storage_10000000_9180_system_account.json").unwrap();
let storage_keyval_hex: Vec<(String, String)> = serde_json::from_slice(&storage_keyval_bytes).unwrap();

for (key, _val) in storage_keyval_hex {
    let key_bytes = hex::decode(key.trim_start_matches("0x")).unwrap();

    // Decode the storage key, returning information about it:
    let storage_info = decode_storage_key_current(
        "System",
        "Account",
        &mut &*key_bytes,
        &metadata,
    ).unwrap();

    // See `decode_storage_key` for more.
}