pub struct PredicateStorage;
Expand description

No-op storage used for predicate operations.

The storage implementations are expected to provide KV-like operations for contract operations. However, predicates, as defined in the protocol, cannot execute contract opcodes. This means its storage backend for predicate execution shouldn’t provide any functionality.

Trait Implementations§

source§

impl Clone for PredicateStorage

source§

fn clone(&self) -> PredicateStorage

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for PredicateStorage

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for PredicateStorage

source§

fn default() -> PredicateStorage

Returns the “default value” for a type. Read more
source§

impl InterpreterStorage for PredicateStorage

§

type DataError = InterpreterError

Error implementation for reasons unspecified in the protocol.
source§

fn block_height(&self) -> Result<u32, InterpreterError>

Provide the current block height in which the transactions should be executed.
source§

fn timestamp(&self, _height: u32) -> Result<Word, Self::DataError>

Return the timestamp of a given block Read more
source§

fn block_hash(&self, _block_height: u32) -> Result<Bytes32, InterpreterError>

Provide the block hash from a given height.
source§

fn coinbase(&self) -> Result<Address, InterpreterError>

Provide the coinbase address for the VM instructions implementation.
source§

fn merkle_contract_state_range( &self, _id: &ContractId, _start_key: &Bytes32, _range: Word ) -> Result<Vec<Option<Cow<'_, Bytes32>>>, Self::DataError>

Fetch a range of values from a key-value mapping in a contract storage. Returns the full range requested using optional values in case a requested slot is unset.
source§

fn merkle_contract_state_insert_range( &mut self, _contract: &ContractId, _start_key: &Bytes32, _values: &[Bytes32] ) -> Result<Option<()>, Self::DataError>

Insert a range of key-value mappings into contract storage. Returns None if any of the keys in the range were previously unset.
source§

fn merkle_contract_state_remove_range( &mut self, _contract: &ContractId, _start_key: &Bytes32, _range: Word ) -> Result<Option<()>, Self::DataError>

Remove a range of key-values from contract storage. Returns None if any of the keys in the range were already unset.
source§

fn deploy_contract( &mut self, salt: &Salt, slots: &[StorageSlot], contract: &Contract ) -> Result<(), Self::DataError>

Deploy a contract into the storage
source§

fn deploy_contract_with_id( &mut self, salt: &Salt, slots: &[StorageSlot], contract: &Contract, root: &Bytes32, id: &ContractId ) -> Result<(), Self::DataError>

Deploy a contract into the storage with contract id
source§

fn storage_contract( &self, id: &ContractId ) -> Result<Option<Cow<'_, Contract>>, Self::DataError>

Fetch a previously inserted contract code from the chain state for a given contract.
source§

fn storage_contract_insert( &mut self, id: &ContractId, contract: &Contract ) -> Result<Option<Contract>, Self::DataError>

Append a contract to the chain, provided its identifier. Read more
source§

fn storage_contract_exists( &self, id: &ContractId ) -> Result<bool, Self::DataError>

Check if a provided contract exists in the chain.
source§

fn storage_contract_root( &self, id: &ContractId ) -> Result<Option<Cow<'_, (Salt, Bytes32)>>, Self::DataError>

Fetch a previously inserted salt+root tuple from the chain state for a given contract.
source§

fn storage_contract_root_insert( &mut self, id: &ContractId, salt: &Salt, root: &Bytes32 ) -> Result<Option<(Salt, Bytes32)>, Self::DataError>

Append the salt+root of a contract that was appended to the chain.
source§

fn merkle_contract_state( &self, id: &ContractId, key: &Bytes32 ) -> Result<Option<Cow<'_, Bytes32>>, Self::DataError>

Fetch the value form a key-value mapping in a contract storage.
source§

fn merkle_contract_state_insert( &mut self, contract: &ContractId, key: &Bytes32, value: &Bytes32 ) -> Result<Option<Bytes32>, Self::DataError>

Insert a key-value mapping in a contract storage.
source§

fn merkle_contract_state_remove( &mut self, contract: &ContractId, key: &Bytes32 ) -> Result<Option<Bytes32>, Self::DataError>

Remove a key-value mapping from a contract storage.
source§

fn merkle_contract_asset_id_balance( &self, id: &ContractId, asset_id: &AssetId ) -> Result<Option<Word>, Self::DataError>

Fetch the balance of an asset ID in a contract storage.
source§

fn merkle_contract_asset_id_balance_insert( &mut self, contract: &ContractId, asset_id: &AssetId, value: Word ) -> Result<Option<Word>, Self::DataError>

Update the balance of an asset ID in a contract storage.
source§

impl<Key, Type: Mappable> MerkleRootStorage<Key, Type> for PredicateStorage

source§

fn root(&self, _parent: &Key) -> Result<MerkleRoot, InterpreterError>

Return the merkle root of the stored Type in the storage. Read more
source§

impl<Type: Mappable> StorageInspect<Type> for PredicateStorage

§

type Error = InterpreterError

source§

fn get( &self, _key: &Type::Key ) -> Result<Option<Cow<'_, Type::OwnedValue>>, InterpreterError>

Retrieve Cow<Value> such as Key->Value.
source§

fn contains_key(&self, _key: &Type::Key) -> Result<bool, InterpreterError>

Return true if there is a Key mapping to a value in the storage.
source§

impl<Type: Mappable> StorageMutate<Type> for PredicateStorage

source§

fn insert( &mut self, _key: &Type::Key, _value: &Type::Value ) -> Result<Option<Type::OwnedValue>, InterpreterError>

Append Key->Value mapping to the storage. Read more
source§

fn remove( &mut self, _key: &Type::Key ) -> Result<Option<Type::OwnedValue>, InterpreterError>

Remove Key->Value mapping from the storage. Read more
source§

impl Copy for PredicateStorage

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> AnyDebug for Twhere T: Any + Debug,

source§

fn as_any_ref(&self) -> &(dyn Any + 'static)

Returns a reference to the underlying type as Any.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> StorageAsMut for T

source§

fn storage<Type>(&mut self) -> StorageMut<'_, Self, Type>where Type: Mappable,

source§

fn storage_as_mut<Type>(&mut self) -> StorageMut<'_, Self, Type>where Type: Mappable,

source§

impl<T> StorageAsRef for T

source§

fn storage<Type>(&self) -> StorageRef<'_, Self, Type>where Type: Mappable,

source§

fn storage_as_ref<Type>(&self) -> StorageRef<'_, Self, Type>where Type: Mappable,

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V