penumbra_sdk_transaction/
parameters.rs1use anyhow::Error;
2use penumbra_sdk_fee::Fee;
3use penumbra_sdk_proto::core::transaction::v1 as pbt;
4use penumbra_sdk_proto::DomainType;
5use penumbra_sdk_txhash::{EffectHash, EffectingData};
6
7#[derive(Clone, Debug, Default)]
9pub struct TransactionParameters {
10 pub expiry_height: u64,
11 pub chain_id: String,
12 pub fee: Fee,
13}
14
15impl EffectingData for TransactionParameters {
16 fn effect_hash(&self) -> EffectHash {
17 EffectHash::from_proto_effecting_data(&self.to_proto())
18 }
19}
20
21impl DomainType for TransactionParameters {
22 type Proto = pbt::TransactionParameters;
23}
24
25impl TryFrom<pbt::TransactionParameters> for TransactionParameters {
26 type Error = Error;
27
28 fn try_from(proto: pbt::TransactionParameters) -> anyhow::Result<Self, Self::Error> {
29 Ok(TransactionParameters {
30 expiry_height: proto.expiry_height,
31 chain_id: proto.chain_id,
32 fee: proto
33 .fee
34 .ok_or_else(|| anyhow::anyhow!("transaction parameters missing fee"))?
35 .try_into()?,
36 })
37 }
38}
39
40impl From<TransactionParameters> for pbt::TransactionParameters {
41 fn from(msg: TransactionParameters) -> Self {
42 pbt::TransactionParameters {
43 expiry_height: msg.expiry_height,
44 chain_id: msg.chain_id,
45 fee: Some(msg.fee.into()),
46 }
47 }
48}