# Trait frame_support::traits::QueryPreimage

source · ```
pub trait QueryPreimage {
type H: Hash;
// Required methods
fn len(hash: &<Self::H as Hasher>::Out) -> Option<u32>;
fn fetch(hash: &<Self::H as Hasher>::Out, len: Option<u32>) -> FetchResult;
fn is_requested(hash: &<Self::H as Hasher>::Out) -> bool;
fn request(hash: &<Self::H as Hasher>::Out);
fn unrequest(hash: &<Self::H as Hasher>::Out);
// Provided methods
fn hold<T>(bounded: &Bounded<T, Self::H>) { ... }
fn drop<T>(bounded: &Bounded<T, Self::H>) { ... }
fn have<T>(bounded: &Bounded<T, Self::H>) -> bool { ... }
fn pick<T>(hash: <Self::H as Hasher>::Out, len: u32) -> Bounded<T, Self::H> { ... }
fn peek<T: Decode>(
bounded: &Bounded<T, Self::H>
) -> Result<(T, Option<u32>), DispatchError> { ... }
fn realize<T: Decode>(
bounded: &Bounded<T, Self::H>
) -> Result<(T, Option<u32>), DispatchError> { ... }
}
```

## Expand description

A interface for looking up preimages from their hash on chain.

## Required Associated Types§

## Required Methods§

source#### fn len(hash: &<Self::H as Hasher>::Out) -> Option<u32>

#### fn len(hash: &<Self::H as Hasher>::Out) -> Option<u32>

Returns whether a preimage exists for a given hash and if so its length.

source#### fn fetch(hash: &<Self::H as Hasher>::Out, len: Option<u32>) -> FetchResult

#### fn fetch(hash: &<Self::H as Hasher>::Out, len: Option<u32>) -> FetchResult

Returns the preimage for a given hash. If given, `len`

must be the size of the preimage.

source#### fn is_requested(hash: &<Self::H as Hasher>::Out) -> bool

#### fn is_requested(hash: &<Self::H as Hasher>::Out) -> bool

Returns whether a preimage request exists for a given hash.

## Provided Methods§

source#### fn hold<T>(bounded: &Bounded<T, Self::H>)

#### fn hold<T>(bounded: &Bounded<T, Self::H>)

Request that the data required for decoding the given `bounded`

value is made available.

source#### fn drop<T>(bounded: &Bounded<T, Self::H>)

#### fn drop<T>(bounded: &Bounded<T, Self::H>)

No longer request that the data required for decoding the given `bounded`

value is made
available.

source#### fn have<T>(bounded: &Bounded<T, Self::H>) -> bool

#### fn have<T>(bounded: &Bounded<T, Self::H>) -> bool

Check to see if all data required for the given `bounded`

value is available for its
decoding.

source#### fn pick<T>(hash: <Self::H as Hasher>::Out, len: u32) -> Bounded<T, Self::H>

#### fn pick<T>(hash: <Self::H as Hasher>::Out, len: u32) -> Bounded<T, Self::H>

Create a `Bounded`

instance based on the `hash`

and `len`

of the encoded value.

It also directly requests the given `hash`

using `Self::request`

.

This may not be `peek`

-able or `realize`

-able.

source#### fn peek<T: Decode>(
bounded: &Bounded<T, Self::H>
) -> Result<(T, Option<u32>), DispatchError>

#### fn peek<T: Decode>( bounded: &Bounded<T, Self::H> ) -> Result<(T, Option<u32>), DispatchError>

Convert the given `bounded`

instance back into its original instance, also returning the
exact size of its encoded form if it needed to be looked-up from a stored preimage).

NOTE: This does not remove any data needed for realization. If you will no longer use the
`bounded`

, call `realize`

instead or call `drop`

afterwards.

source#### fn realize<T: Decode>(
bounded: &Bounded<T, Self::H>
) -> Result<(T, Option<u32>), DispatchError>

#### fn realize<T: Decode>( bounded: &Bounded<T, Self::H> ) -> Result<(T, Option<u32>), DispatchError>

Convert the given `bounded`

value back into its original instance. If successful,
`drop`

any data backing it. This will not break the realisability of independently
created instances of `Bounded`

which happen to have identical data.

## Object Safety§

**not**object safe.