penumbra_sdk_ibc/component/
view.rs

1use anyhow::Result;
2use async_trait::async_trait;
3use cnidarium::{StateRead, StateWrite};
4use penumbra_sdk_proto::{StateReadProto, StateWriteProto};
5
6use crate::params::IBCParameters;
7
8use super::state_key;
9
10#[async_trait]
11pub trait StateWriteExt: StateWrite {
12    /// Writes the provided IBC parameters to the JMT.
13    fn put_ibc_params(&mut self, params: IBCParameters) {
14        self.put(state_key::ibc_params().into(), params)
15    }
16}
17
18impl<T: StateWrite + ?Sized> StateWriteExt for T {}
19
20#[async_trait]
21pub trait StateReadExt: StateRead {
22    /// Gets the IBC parameters from the JMT.
23    async fn get_ibc_params(&self) -> Result<IBCParameters> {
24        self.get(state_key::ibc_params())
25            .await?
26            .ok_or_else(|| anyhow::anyhow!("Missing IBCParameters"))
27    }
28}
29
30impl<T: StateRead + ?Sized> StateReadExt for T {}