penumbra_sdk_distributions/component/
view.rs1use async_trait::async_trait;
2
3use crate::{component::state_key, params::DistributionsParameters};
4use anyhow::Result;
5use cnidarium::{StateRead, StateWrite};
6use penumbra_sdk_num::Amount;
7use penumbra_sdk_proto::{StateReadProto, StateWriteProto};
8
9#[async_trait]
10pub trait StateReadExt: StateRead {
11 async fn get_distributions_params(&self) -> Result<DistributionsParameters> {
13 self.get(state_key::distributions_parameters())
14 .await?
15 .ok_or_else(|| anyhow::anyhow!("Missing DistributionsParameters"))
16 }
17
18 fn get_staking_token_issuance_for_epoch(&self) -> Option<Amount> {
19 self.object_get(&state_key::staking_token_issuance_for_epoch())
20 }
21}
22
23impl<T: StateRead + ?Sized> StateReadExt for T {}
24#[async_trait]
25
26pub trait StateWriteExt: StateWrite + StateReadExt {
27 fn set_staking_token_issuance_for_epoch(&mut self, issuance: Amount) {
29 self.object_put(state_key::staking_token_issuance_for_epoch(), issuance);
30 }
31
32 fn put_distributions_params(&mut self, params: DistributionsParameters) {
34 self.put(state_key::distributions_parameters().into(), params)
35 }
36}
37impl<T: StateWrite + ?Sized> StateWriteExt for T {}