decode_storage_value

Function decode_storage_value 

Source
pub fn decode_storage_value<'scale, 'resolver, Info, Resolver, V>(
    pallet_name: &str,
    storage_entry: &str,
    cursor: &mut &'scale [u8],
    info: &Info,
    type_resolver: &'resolver Resolver,
    visitor: V,
) -> Result<V::Value<'scale, 'resolver>, StorageValueDecodeError<Info::TypeId>>
where Info: StorageTypeInfo, Info::TypeId: Clone + Debug, Resolver: TypeResolver<TypeId = Info::TypeId>, V: Visitor<TypeResolver = Resolver>, V::Error: Debug,
Expand description

Decode a storage value.

ยงExample

Here, we decode some storage values from a block.

use frame_decode::storage::decode_storage_value;
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 value_bytes = hex::decode(val.trim_start_matches("0x")).unwrap();

    // Decode the storage value, here into a scale_value::Value:
    let account_value = decode_storage_value(
        "System",
        "Account",
        &mut &*value_bytes,
        &metadata,
        &metadata.types,
        ValueVisitor::new()
    ).unwrap();
}