penumbra_sdk_sct/component/
source.rs1use async_trait::async_trait;
2use cnidarium::StateWrite;
3use penumbra_sdk_txhash::TransactionId;
4
5use crate::state_key;
6
7#[async_trait]
9pub trait SourceContext: StateWrite {
10 fn put_current_source(&mut self, source: Option<TransactionId>) {
11 if let Some(source) = source {
12 self.object_put(state_key::ambient::current_source(), source)
13 } else {
14 self.object_delete(state_key::ambient::current_source())
15 }
16 }
17
18 fn get_current_source(&self) -> Option<TransactionId> {
19 self.object_get(state_key::ambient::current_source())
20 }
21
22 fn put_mock_source(&mut self, counter: u8) {
26 self.put_current_source(Some(TransactionId([counter; 32])))
27 }
28}
29impl<T: StateWrite + ?Sized> SourceContext for T {}