Skip to content
Snippets Groups Projects
  • Andrew Jones's avatar
    Implement pallet view function queries (#4722) · 0b8d7441
    Andrew Jones authored
    Closes #216.
    
    This PR allows pallets to define a `view_functions` impl like so:
    
    ```rust
    #[pallet::view_functions]
    impl<T: Config> Pallet<T>
    where
    	T::AccountId: From<SomeType1> + SomeAssociation1,
    {
    	/// Query value no args.
    	pub fn get_value() -> Option<u32> {
    		SomeValue::<T>::get()
    	}
    
    	/// Query value with args.
    	pub fn get_value_with_arg(key: u32) -> Option<u32> {
    		SomeMap::<T>::get(key)
    	}
    }
    ```
    ### `QueryId`
    
    Each view function is uniquely identified by a `QueryId`, which for this
    implementation is generated by:
    
    ```twox_128(pallet_name) ++ twox_128("fn_name(fnarg_types) -> return_ty")```
    
    The prefix `twox_128(pallet_name)` is the same as the storage prefix for pallets and take into account multiple instances of the same pallet.
    
    The suffix is generated from the fn type signature so is guaranteed to be unique for that pallet impl. For one of the view fns in the example above it would be `twox_128("get_value_with_arg(u32) -> Option<u32>")`. It is a kn...
    Unverified
    0b8d7441
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
This project manages its dependencies using Cargo. Learn more