penumbra_sdk_proto/gen/
penumbra.core.transaction.v1.rs

1// This file is @generated by prost-build.
2/// A Penumbra transaction.
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct Transaction {
5    #[prost(message, optional, tag = "1")]
6    pub body: ::core::option::Option<TransactionBody>,
7    /// The binding signature is stored separately from the transaction body that it signs.
8    #[prost(message, optional, tag = "2")]
9    pub binding_sig: ::core::option::Option<
10        super::super::super::crypto::decaf377_rdsa::v1::BindingSignature,
11    >,
12    /// The root of some previous state of the state commitment tree, used as an anchor for all
13    /// ZK state transition proofs.
14    #[prost(message, optional, tag = "3")]
15    pub anchor: ::core::option::Option<super::super::super::crypto::tct::v1::MerkleRoot>,
16}
17impl ::prost::Name for Transaction {
18    const NAME: &'static str = "Transaction";
19    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
20    fn full_name() -> ::prost::alloc::string::String {
21        "penumbra.core.transaction.v1.Transaction".into()
22    }
23    fn type_url() -> ::prost::alloc::string::String {
24        "/penumbra.core.transaction.v1.Transaction".into()
25    }
26}
27/// The body of a transaction.
28#[derive(Clone, PartialEq, ::prost::Message)]
29pub struct TransactionBody {
30    /// A list of actions (state changes) performed by this transaction.
31    #[prost(message, repeated, tag = "1")]
32    pub actions: ::prost::alloc::vec::Vec<Action>,
33    /// Parameters determining if a transaction should be accepted by this chain.
34    #[prost(message, optional, tag = "2")]
35    pub transaction_parameters: ::core::option::Option<TransactionParameters>,
36    /// Detection data for use with Fuzzy Message Detection
37    #[prost(message, optional, tag = "4")]
38    pub detection_data: ::core::option::Option<DetectionData>,
39    /// The encrypted memo for this transaction.
40    ///
41    /// This field will be present if and only if the transaction has outputs.
42    #[prost(message, optional, tag = "5")]
43    pub memo: ::core::option::Option<MemoCiphertext>,
44}
45impl ::prost::Name for TransactionBody {
46    const NAME: &'static str = "TransactionBody";
47    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
48    fn full_name() -> ::prost::alloc::string::String {
49        "penumbra.core.transaction.v1.TransactionBody".into()
50    }
51    fn type_url() -> ::prost::alloc::string::String {
52        "/penumbra.core.transaction.v1.TransactionBody".into()
53    }
54}
55/// The parameters determining if a transaction should be accepted by the chain.
56#[derive(Clone, PartialEq, ::prost::Message)]
57pub struct TransactionParameters {
58    /// The maximum height that this transaction can be included in the chain.
59    ///
60    /// If zero, there is no maximum.
61    #[prost(uint64, tag = "1")]
62    pub expiry_height: u64,
63    /// The chain this transaction is intended for.  Including this prevents
64    /// replaying a transaction on one chain onto a different chain.
65    #[prost(string, tag = "2")]
66    pub chain_id: ::prost::alloc::string::String,
67    /// The transaction fee.
68    #[prost(message, optional, tag = "3")]
69    pub fee: ::core::option::Option<super::super::component::fee::v1::Fee>,
70}
71impl ::prost::Name for TransactionParameters {
72    const NAME: &'static str = "TransactionParameters";
73    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
74    fn full_name() -> ::prost::alloc::string::String {
75        "penumbra.core.transaction.v1.TransactionParameters".into()
76    }
77    fn type_url() -> ::prost::alloc::string::String {
78        "/penumbra.core.transaction.v1.TransactionParameters".into()
79    }
80}
81/// Represents a transaction summary containing multiple effects.
82#[derive(Clone, PartialEq, ::prost::Message)]
83pub struct TransactionSummary {
84    #[prost(message, repeated, tag = "1")]
85    pub effects: ::prost::alloc::vec::Vec<transaction_summary::Effects>,
86}
87/// Nested message and enum types in `TransactionSummary`.
88pub mod transaction_summary {
89    /// Represents an individual effect of a transaction.
90    #[derive(Clone, PartialEq, ::prost::Message)]
91    pub struct Effects {
92        #[prost(message, optional, tag = "1")]
93        pub address: ::core::option::Option<super::super::super::keys::v1::AddressView>,
94        #[prost(message, optional, tag = "2")]
95        pub balance: ::core::option::Option<super::super::super::asset::v1::Balance>,
96    }
97    impl ::prost::Name for Effects {
98        const NAME: &'static str = "Effects";
99        const PACKAGE: &'static str = "penumbra.core.transaction.v1";
100        fn full_name() -> ::prost::alloc::string::String {
101            "penumbra.core.transaction.v1.TransactionSummary.Effects".into()
102        }
103        fn type_url() -> ::prost::alloc::string::String {
104            "/penumbra.core.transaction.v1.TransactionSummary.Effects".into()
105        }
106    }
107}
108impl ::prost::Name for TransactionSummary {
109    const NAME: &'static str = "TransactionSummary";
110    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
111    fn full_name() -> ::prost::alloc::string::String {
112        "penumbra.core.transaction.v1.TransactionSummary".into()
113    }
114    fn type_url() -> ::prost::alloc::string::String {
115        "/penumbra.core.transaction.v1.TransactionSummary".into()
116    }
117}
118/// Detection data used by a detection server performing Fuzzy Message Detection.
119#[derive(Clone, PartialEq, ::prost::Message)]
120pub struct DetectionData {
121    /// A list of clues for use with Fuzzy Message Detection.
122    #[prost(message, repeated, tag = "4")]
123    pub fmd_clues: ::prost::alloc::vec::Vec<
124        super::super::super::crypto::decaf377_fmd::v1::Clue,
125    >,
126}
127impl ::prost::Name for DetectionData {
128    const NAME: &'static str = "DetectionData";
129    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
130    fn full_name() -> ::prost::alloc::string::String {
131        "penumbra.core.transaction.v1.DetectionData".into()
132    }
133    fn type_url() -> ::prost::alloc::string::String {
134        "/penumbra.core.transaction.v1.DetectionData".into()
135    }
136}
137/// A state change performed by a transaction.
138#[derive(Clone, PartialEq, ::prost::Message)]
139pub struct Action {
140    #[prost(
141        oneof = "action::Action",
142        tags = "1, 2, 3, 4, 16, 17, 18, 19, 20, 21, 22, 30, 31, 32, 34, 40, 41, 42, 50, 51, 52, 53, 54, 55, 70, 200"
143    )]
144    pub action: ::core::option::Option<action::Action>,
145}
146/// Nested message and enum types in `Action`.
147pub mod action {
148    #[derive(Clone, PartialEq, ::prost::Oneof)]
149    pub enum Action {
150        /// Common actions have numbers \< 15, to save space.
151        #[prost(message, tag = "1")]
152        Spend(super::super::super::component::shielded_pool::v1::Spend),
153        #[prost(message, tag = "2")]
154        Output(super::super::super::component::shielded_pool::v1::Output),
155        #[prost(message, tag = "3")]
156        Swap(super::super::super::component::dex::v1::Swap),
157        #[prost(message, tag = "4")]
158        SwapClaim(super::super::super::component::dex::v1::SwapClaim),
159        #[prost(message, tag = "16")]
160        ValidatorDefinition(
161            super::super::super::component::stake::v1::ValidatorDefinition,
162        ),
163        #[prost(message, tag = "17")]
164        IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay),
165        /// Governance:
166        #[prost(message, tag = "18")]
167        ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit),
168        #[prost(message, tag = "19")]
169        ProposalWithdraw(
170            super::super::super::component::governance::v1::ProposalWithdraw,
171        ),
172        #[prost(message, tag = "20")]
173        ValidatorVote(super::super::super::component::governance::v1::ValidatorVote),
174        #[prost(message, tag = "21")]
175        DelegatorVote(super::super::super::component::governance::v1::DelegatorVote),
176        #[prost(message, tag = "22")]
177        ProposalDepositClaim(
178            super::super::super::component::governance::v1::ProposalDepositClaim,
179        ),
180        /// Positions
181        #[prost(message, tag = "30")]
182        PositionOpen(super::super::super::component::dex::v1::PositionOpen),
183        #[prost(message, tag = "31")]
184        PositionClose(super::super::super::component::dex::v1::PositionClose),
185        #[prost(message, tag = "32")]
186        PositionWithdraw(super::super::super::component::dex::v1::PositionWithdraw),
187        #[prost(message, tag = "34")]
188        PositionRewardClaim(
189            super::super::super::component::dex::v1::PositionRewardClaim,
190        ),
191        /// (un)delegation
192        #[prost(message, tag = "40")]
193        Delegate(super::super::super::component::stake::v1::Delegate),
194        #[prost(message, tag = "41")]
195        Undelegate(super::super::super::component::stake::v1::Undelegate),
196        #[prost(message, tag = "42")]
197        UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaim),
198        /// Community Pool
199        #[prost(message, tag = "50")]
200        CommunityPoolSpend(
201            super::super::super::component::governance::v1::CommunityPoolSpend,
202        ),
203        #[prost(message, tag = "51")]
204        CommunityPoolOutput(
205            super::super::super::component::governance::v1::CommunityPoolOutput,
206        ),
207        #[prost(message, tag = "52")]
208        CommunityPoolDeposit(
209            super::super::super::component::governance::v1::CommunityPoolDeposit,
210        ),
211        /// Dutch auctions
212        #[prost(message, tag = "53")]
213        ActionDutchAuctionSchedule(
214            super::super::super::component::auction::v1::ActionDutchAuctionSchedule,
215        ),
216        #[prost(message, tag = "54")]
217        ActionDutchAuctionEnd(
218            super::super::super::component::auction::v1::ActionDutchAuctionEnd,
219        ),
220        #[prost(message, tag = "55")]
221        ActionDutchAuctionWithdraw(
222            super::super::super::component::auction::v1::ActionDutchAuctionWithdraw,
223        ),
224        /// Funding
225        #[prost(message, tag = "70")]
226        ActionLiquidityTournamentVote(
227            super::super::super::component::funding::v1::ActionLiquidityTournamentVote,
228        ),
229        #[prost(message, tag = "200")]
230        Ics20Withdrawal(super::super::super::component::ibc::v1::Ics20Withdrawal),
231    }
232}
233impl ::prost::Name for Action {
234    const NAME: &'static str = "Action";
235    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
236    fn full_name() -> ::prost::alloc::string::String {
237        "penumbra.core.transaction.v1.Action".into()
238    }
239    fn type_url() -> ::prost::alloc::string::String {
240        "/penumbra.core.transaction.v1.Action".into()
241    }
242}
243/// A transaction perspective is a bundle of key material and commitment openings
244/// that allow generating a view of a transaction from that perspective.
245#[derive(Clone, PartialEq, ::prost::Message)]
246pub struct TransactionPerspective {
247    #[prost(message, repeated, tag = "1")]
248    pub payload_keys: ::prost::alloc::vec::Vec<PayloadKeyWithCommitment>,
249    #[prost(message, repeated, tag = "2")]
250    pub spend_nullifiers: ::prost::alloc::vec::Vec<NullifierWithNote>,
251    /// The openings of note commitments referred to in the transaction
252    /// but not included in the transaction.
253    #[prost(message, repeated, tag = "3")]
254    pub advice_notes: ::prost::alloc::vec::Vec<
255        super::super::component::shielded_pool::v1::Note,
256    >,
257    /// Any relevant address views.
258    #[prost(message, repeated, tag = "4")]
259    pub address_views: ::prost::alloc::vec::Vec<super::super::keys::v1::AddressView>,
260    /// Any relevant denoms for viewed assets.
261    #[prost(message, repeated, tag = "5")]
262    pub denoms: ::prost::alloc::vec::Vec<super::super::asset::v1::Metadata>,
263    /// The transaction ID associated with this TransactionPerspective
264    #[prost(message, optional, tag = "6")]
265    pub transaction_id: ::core::option::Option<super::super::txhash::v1::TransactionId>,
266    /// Any relevant estimated prices
267    #[prost(message, repeated, tag = "20")]
268    pub prices: ::prost::alloc::vec::Vec<super::super::asset::v1::EstimatedPrice>,
269    /// Any relevant extended metadata, indexed by asset id.
270    #[prost(message, repeated, tag = "30")]
271    pub extended_metadata: ::prost::alloc::vec::Vec<
272        transaction_perspective::ExtendedMetadataById,
273    >,
274    #[prost(message, repeated, tag = "40")]
275    pub creation_transaction_ids_by_nullifier: ::prost::alloc::vec::Vec<
276        transaction_perspective::CreationTransactionIdByNullifier,
277    >,
278    #[prost(message, repeated, tag = "50")]
279    pub nullification_transaction_ids_by_commitment: ::prost::alloc::vec::Vec<
280        transaction_perspective::NullificationTransactionIdByCommitment,
281    >,
282    /// Any relevant BatchSwapOutputData to the transaction.
283    ///
284    /// This can be used to fill in information about swap outputs.
285    #[prost(message, repeated, tag = "60")]
286    pub batch_swap_output_data: ::prost::alloc::vec::Vec<
287        super::super::component::dex::v1::BatchSwapOutputData,
288    >,
289    #[prost(message, optional, tag = "70")]
290    pub position_metadata_key: ::core::option::Option<
291        super::super::keys::v1::PositionMetadataKey,
292    >,
293}
294/// Nested message and enum types in `TransactionPerspective`.
295pub mod transaction_perspective {
296    #[derive(Clone, PartialEq, ::prost::Message)]
297    pub struct ExtendedMetadataById {
298        #[prost(message, optional, tag = "1")]
299        pub asset_id: ::core::option::Option<super::super::super::asset::v1::AssetId>,
300        #[prost(message, optional, tag = "2")]
301        pub extended_metadata: ::core::option::Option<::pbjson_types::Any>,
302    }
303    impl ::prost::Name for ExtendedMetadataById {
304        const NAME: &'static str = "ExtendedMetadataById";
305        const PACKAGE: &'static str = "penumbra.core.transaction.v1";
306        fn full_name() -> ::prost::alloc::string::String {
307            "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById"
308                .into()
309        }
310        fn type_url() -> ::prost::alloc::string::String {
311            "/penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById"
312                .into()
313        }
314    }
315    /// Associates a nullifier with the transaction ID that created the nullified state commitment.
316    ///
317    /// Note: this is *not* the transaction ID that revealed the nullifier.
318    ///
319    /// Allows walking backwards from a spend to the transaction that created the note.
320    #[derive(Clone, PartialEq, ::prost::Message)]
321    pub struct CreationTransactionIdByNullifier {
322        #[prost(message, optional, tag = "1")]
323        pub nullifier: ::core::option::Option<
324            super::super::super::component::sct::v1::Nullifier,
325        >,
326        #[prost(message, optional, tag = "2")]
327        pub transaction_id: ::core::option::Option<
328            super::super::super::txhash::v1::TransactionId,
329        >,
330    }
331    impl ::prost::Name for CreationTransactionIdByNullifier {
332        const NAME: &'static str = "CreationTransactionIdByNullifier";
333        const PACKAGE: &'static str = "penumbra.core.transaction.v1";
334        fn full_name() -> ::prost::alloc::string::String {
335            "penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier"
336                .into()
337        }
338        fn type_url() -> ::prost::alloc::string::String {
339            "/penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier"
340                .into()
341        }
342    }
343    /// Associates a commitment with the transaction ID that eventually nullified it.
344    ///
345    /// Allows walking forwards from an output to the transaction that spent the note.
346    #[derive(Clone, PartialEq, ::prost::Message)]
347    pub struct NullificationTransactionIdByCommitment {
348        #[prost(message, optional, tag = "1")]
349        pub commitment: ::core::option::Option<
350            super::super::super::super::crypto::tct::v1::StateCommitment,
351        >,
352        #[prost(message, optional, tag = "2")]
353        pub transaction_id: ::core::option::Option<
354            super::super::super::txhash::v1::TransactionId,
355        >,
356    }
357    impl ::prost::Name for NullificationTransactionIdByCommitment {
358        const NAME: &'static str = "NullificationTransactionIdByCommitment";
359        const PACKAGE: &'static str = "penumbra.core.transaction.v1";
360        fn full_name() -> ::prost::alloc::string::String {
361            "penumbra.core.transaction.v1.TransactionPerspective.NullificationTransactionIdByCommitment"
362                .into()
363        }
364        fn type_url() -> ::prost::alloc::string::String {
365            "/penumbra.core.transaction.v1.TransactionPerspective.NullificationTransactionIdByCommitment"
366                .into()
367        }
368    }
369}
370impl ::prost::Name for TransactionPerspective {
371    const NAME: &'static str = "TransactionPerspective";
372    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
373    fn full_name() -> ::prost::alloc::string::String {
374        "penumbra.core.transaction.v1.TransactionPerspective".into()
375    }
376    fn type_url() -> ::prost::alloc::string::String {
377        "/penumbra.core.transaction.v1.TransactionPerspective".into()
378    }
379}
380#[derive(Clone, PartialEq, ::prost::Message)]
381pub struct PayloadKeyWithCommitment {
382    #[prost(message, optional, tag = "1")]
383    pub payload_key: ::core::option::Option<super::super::keys::v1::PayloadKey>,
384    #[prost(message, optional, tag = "2")]
385    pub commitment: ::core::option::Option<
386        super::super::super::crypto::tct::v1::StateCommitment,
387    >,
388}
389impl ::prost::Name for PayloadKeyWithCommitment {
390    const NAME: &'static str = "PayloadKeyWithCommitment";
391    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
392    fn full_name() -> ::prost::alloc::string::String {
393        "penumbra.core.transaction.v1.PayloadKeyWithCommitment".into()
394    }
395    fn type_url() -> ::prost::alloc::string::String {
396        "/penumbra.core.transaction.v1.PayloadKeyWithCommitment".into()
397    }
398}
399#[derive(Clone, PartialEq, ::prost::Message)]
400pub struct NullifierWithNote {
401    #[prost(message, optional, tag = "1")]
402    pub nullifier: ::core::option::Option<super::super::component::sct::v1::Nullifier>,
403    #[prost(message, optional, tag = "2")]
404    pub note: ::core::option::Option<super::super::component::shielded_pool::v1::Note>,
405}
406impl ::prost::Name for NullifierWithNote {
407    const NAME: &'static str = "NullifierWithNote";
408    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
409    fn full_name() -> ::prost::alloc::string::String {
410        "penumbra.core.transaction.v1.NullifierWithNote".into()
411    }
412    fn type_url() -> ::prost::alloc::string::String {
413        "/penumbra.core.transaction.v1.NullifierWithNote".into()
414    }
415}
416/// View of a Penumbra transaction.
417#[derive(Clone, PartialEq, ::prost::Message)]
418pub struct TransactionView {
419    /// View of the transaction body
420    #[prost(message, optional, tag = "1")]
421    pub body_view: ::core::option::Option<TransactionBodyView>,
422    /// The binding signature is stored separately from the transaction body that it signs.
423    #[prost(message, optional, tag = "2")]
424    pub binding_sig: ::core::option::Option<
425        super::super::super::crypto::decaf377_rdsa::v1::BindingSignature,
426    >,
427    /// The root of some previous state of the state commitment tree, used as an anchor for all
428    /// ZK state transition proofs.
429    #[prost(message, optional, tag = "3")]
430    pub anchor: ::core::option::Option<super::super::super::crypto::tct::v1::MerkleRoot>,
431}
432impl ::prost::Name for TransactionView {
433    const NAME: &'static str = "TransactionView";
434    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
435    fn full_name() -> ::prost::alloc::string::String {
436        "penumbra.core.transaction.v1.TransactionView".into()
437    }
438    fn type_url() -> ::prost::alloc::string::String {
439        "/penumbra.core.transaction.v1.TransactionView".into()
440    }
441}
442#[derive(Clone, PartialEq, ::prost::Message)]
443pub struct TransactionBodyView {
444    /// A list views into of actions (state changes) performed by this transaction.
445    #[prost(message, repeated, tag = "1")]
446    pub action_views: ::prost::alloc::vec::Vec<ActionView>,
447    /// Transaction parameters.
448    #[prost(message, optional, tag = "2")]
449    pub transaction_parameters: ::core::option::Option<TransactionParameters>,
450    /// The detection data in this transaction, only populated if
451    /// there are outputs in the actions of this transaction.
452    #[prost(message, optional, tag = "4")]
453    pub detection_data: ::core::option::Option<DetectionData>,
454    /// An optional view of a transaction memo. It will only be populated if there are
455    /// outputs in the actions of this transaction.
456    #[prost(message, optional, tag = "5")]
457    pub memo_view: ::core::option::Option<MemoView>,
458}
459impl ::prost::Name for TransactionBodyView {
460    const NAME: &'static str = "TransactionBodyView";
461    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
462    fn full_name() -> ::prost::alloc::string::String {
463        "penumbra.core.transaction.v1.TransactionBodyView".into()
464    }
465    fn type_url() -> ::prost::alloc::string::String {
466        "/penumbra.core.transaction.v1.TransactionBodyView".into()
467    }
468}
469/// A view of a specific state change action performed by a transaction.
470#[derive(Clone, PartialEq, ::prost::Message)]
471pub struct ActionView {
472    #[prost(
473        oneof = "action_view::ActionView",
474        tags = "1, 2, 3, 4, 21, 35, 16, 17, 18, 19, 20, 22, 30, 31, 32, 34, 41, 42, 50, 51, 52, 53, 54, 55, 43, 70, 200"
475    )]
476    pub action_view: ::core::option::Option<action_view::ActionView>,
477}
478/// Nested message and enum types in `ActionView`.
479pub mod action_view {
480    #[derive(Clone, PartialEq, ::prost::Oneof)]
481    pub enum ActionView {
482        /// Action types with visible/opaque variants
483        #[prost(message, tag = "1")]
484        Spend(super::super::super::component::shielded_pool::v1::SpendView),
485        #[prost(message, tag = "2")]
486        Output(super::super::super::component::shielded_pool::v1::OutputView),
487        #[prost(message, tag = "3")]
488        Swap(super::super::super::component::dex::v1::SwapView),
489        #[prost(message, tag = "4")]
490        SwapClaim(super::super::super::component::dex::v1::SwapClaimView),
491        #[prost(message, tag = "21")]
492        DelegatorVote(super::super::super::component::governance::v1::DelegatorVoteView),
493        #[prost(message, tag = "35")]
494        PositionOpenView(super::super::super::component::dex::v1::PositionOpenView),
495        /// Action types without visible/opaque variants
496        #[prost(message, tag = "16")]
497        ValidatorDefinition(
498            super::super::super::component::stake::v1::ValidatorDefinition,
499        ),
500        #[prost(message, tag = "17")]
501        IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay),
502        /// Governance:
503        #[prost(message, tag = "18")]
504        ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit),
505        #[prost(message, tag = "19")]
506        ProposalWithdraw(
507            super::super::super::component::governance::v1::ProposalWithdraw,
508        ),
509        #[prost(message, tag = "20")]
510        ValidatorVote(super::super::super::component::governance::v1::ValidatorVote),
511        #[prost(message, tag = "22")]
512        ProposalDepositClaim(
513            super::super::super::component::governance::v1::ProposalDepositClaim,
514        ),
515        /// Deprecated: UIP-9 requires us to have an actual view here.
516        #[prost(message, tag = "30")]
517        PositionOpen(super::super::super::component::dex::v1::PositionOpen),
518        #[prost(message, tag = "31")]
519        PositionClose(super::super::super::component::dex::v1::PositionClose),
520        #[prost(message, tag = "32")]
521        PositionWithdraw(super::super::super::component::dex::v1::PositionWithdraw),
522        #[prost(message, tag = "34")]
523        PositionRewardClaim(
524            super::super::super::component::dex::v1::PositionRewardClaim,
525        ),
526        #[prost(message, tag = "41")]
527        Delegate(super::super::super::component::stake::v1::Delegate),
528        #[prost(message, tag = "42")]
529        Undelegate(super::super::super::component::stake::v1::Undelegate),
530        /// Community Pool
531        #[prost(message, tag = "50")]
532        CommunityPoolSpend(
533            super::super::super::component::governance::v1::CommunityPoolSpend,
534        ),
535        #[prost(message, tag = "51")]
536        CommunityPoolOutput(
537            super::super::super::component::governance::v1::CommunityPoolOutput,
538        ),
539        #[prost(message, tag = "52")]
540        CommunityPoolDeposit(
541            super::super::super::component::governance::v1::CommunityPoolDeposit,
542        ),
543        /// Dutch auctions
544        #[prost(message, tag = "53")]
545        ActionDutchAuctionSchedule(
546            super::super::super::component::auction::v1::ActionDutchAuctionScheduleView,
547        ),
548        #[prost(message, tag = "54")]
549        ActionDutchAuctionEnd(
550            super::super::super::component::auction::v1::ActionDutchAuctionEnd,
551        ),
552        #[prost(message, tag = "55")]
553        ActionDutchAuctionWithdraw(
554            super::super::super::component::auction::v1::ActionDutchAuctionWithdrawView,
555        ),
556        /// TODO: we have no way to recover the opening of the undelegate_claim's
557        /// balance commitment, and can only infer the value from looking at the rest
558        /// of the transaction. is that fine?
559        #[prost(message, tag = "43")]
560        UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaim),
561        #[prost(message, tag = "70")]
562        ActionLiquidityTournamentVote(
563            super::super::super::component::funding::v1::ActionLiquidityTournamentVoteView,
564        ),
565        #[prost(message, tag = "200")]
566        Ics20Withdrawal(super::super::super::component::ibc::v1::Ics20Withdrawal),
567    }
568}
569impl ::prost::Name for ActionView {
570    const NAME: &'static str = "ActionView";
571    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
572    fn full_name() -> ::prost::alloc::string::String {
573        "penumbra.core.transaction.v1.ActionView".into()
574    }
575    fn type_url() -> ::prost::alloc::string::String {
576        "/penumbra.core.transaction.v1.ActionView".into()
577    }
578}
579/// The data required to authorize a transaction plan.
580#[derive(Clone, PartialEq, ::prost::Message)]
581pub struct AuthorizationData {
582    /// The computed auth hash for the approved transaction plan.
583    #[prost(message, optional, tag = "1")]
584    pub effect_hash: ::core::option::Option<super::super::txhash::v1::EffectHash>,
585    /// The required spend authorizations, returned in the same order as the
586    /// Spend actions in the original request.
587    #[prost(message, repeated, tag = "2")]
588    pub spend_auths: ::prost::alloc::vec::Vec<
589        super::super::super::crypto::decaf377_rdsa::v1::SpendAuthSignature,
590    >,
591    /// The required delegator vote authorizations, returned in the same order as the
592    /// DelegatorVote actions in the original request.
593    #[prost(message, repeated, tag = "3")]
594    pub delegator_vote_auths: ::prost::alloc::vec::Vec<
595        super::super::super::crypto::decaf377_rdsa::v1::SpendAuthSignature,
596    >,
597    /// The required LQT vote authorizations, in the same order as the original request.
598    #[prost(message, repeated, tag = "4")]
599    pub lqt_vote_auths: ::prost::alloc::vec::Vec<
600        super::super::super::crypto::decaf377_rdsa::v1::SpendAuthSignature,
601    >,
602}
603impl ::prost::Name for AuthorizationData {
604    const NAME: &'static str = "AuthorizationData";
605    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
606    fn full_name() -> ::prost::alloc::string::String {
607        "penumbra.core.transaction.v1.AuthorizationData".into()
608    }
609    fn type_url() -> ::prost::alloc::string::String {
610        "/penumbra.core.transaction.v1.AuthorizationData".into()
611    }
612}
613/// The data required for proving when building a transaction from a plan.
614#[derive(Clone, PartialEq, ::prost::Message)]
615pub struct WitnessData {
616    /// The anchor for the state transition proofs.
617    #[prost(message, optional, tag = "1")]
618    pub anchor: ::core::option::Option<super::super::super::crypto::tct::v1::MerkleRoot>,
619    /// The auth paths for the notes the transaction spends, in the
620    /// same order as the spends in the transaction plan.
621    #[prost(message, repeated, tag = "2")]
622    pub state_commitment_proofs: ::prost::alloc::vec::Vec<
623        super::super::super::crypto::tct::v1::StateCommitmentProof,
624    >,
625}
626impl ::prost::Name for WitnessData {
627    const NAME: &'static str = "WitnessData";
628    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
629    fn full_name() -> ::prost::alloc::string::String {
630        "penumbra.core.transaction.v1.WitnessData".into()
631    }
632    fn type_url() -> ::prost::alloc::string::String {
633        "/penumbra.core.transaction.v1.WitnessData".into()
634    }
635}
636/// Describes a planned transaction. Permits clients to prepare a transaction
637/// prior submission, so that a user can review it prior to authorizing its execution.
638///
639/// The `TransactionPlan` is a fully determined bundle binding all of a transaction's effects.
640/// The only thing it does not include is the witness data used for proving.
641#[derive(Clone, PartialEq, ::prost::Message)]
642pub struct TransactionPlan {
643    /// The sequence of actions planned for this transaction.
644    #[prost(message, repeated, tag = "1")]
645    pub actions: ::prost::alloc::vec::Vec<ActionPlan>,
646    /// Parameters determining if a transaction should be accepted by this chain.
647    #[prost(message, optional, tag = "2")]
648    pub transaction_parameters: ::core::option::Option<TransactionParameters>,
649    /// Detection data for use with Fuzzy Message Detection
650    #[prost(message, optional, tag = "4")]
651    pub detection_data: ::core::option::Option<DetectionDataPlan>,
652    /// The memo plan for this transaction.
653    #[prost(message, optional, tag = "5")]
654    pub memo: ::core::option::Option<MemoPlan>,
655}
656impl ::prost::Name for TransactionPlan {
657    const NAME: &'static str = "TransactionPlan";
658    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
659    fn full_name() -> ::prost::alloc::string::String {
660        "penumbra.core.transaction.v1.TransactionPlan".into()
661    }
662    fn type_url() -> ::prost::alloc::string::String {
663        "/penumbra.core.transaction.v1.TransactionPlan".into()
664    }
665}
666#[derive(Clone, PartialEq, ::prost::Message)]
667pub struct DetectionDataPlan {
668    #[prost(message, repeated, tag = "5")]
669    pub clue_plans: ::prost::alloc::vec::Vec<CluePlan>,
670}
671impl ::prost::Name for DetectionDataPlan {
672    const NAME: &'static str = "DetectionDataPlan";
673    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
674    fn full_name() -> ::prost::alloc::string::String {
675        "penumbra.core.transaction.v1.DetectionDataPlan".into()
676    }
677    fn type_url() -> ::prost::alloc::string::String {
678        "/penumbra.core.transaction.v1.DetectionDataPlan".into()
679    }
680}
681/// Describes a planned transaction action.
682///
683/// Some transaction Actions don't have any private data and are treated as being plans
684/// themselves.
685#[derive(Clone, PartialEq, ::prost::Message)]
686pub struct ActionPlan {
687    #[prost(
688        oneof = "action_plan::Action",
689        tags = "1, 2, 3, 4, 16, 17, 18, 19, 20, 21, 22, 200, 30, 35, 31, 32, 34, 40, 41, 42, 50, 51, 52, 53, 54, 55, 70"
690    )]
691    pub action: ::core::option::Option<action_plan::Action>,
692}
693/// Nested message and enum types in `ActionPlan`.
694pub mod action_plan {
695    #[derive(Clone, PartialEq, ::prost::Oneof)]
696    pub enum Action {
697        #[prost(message, tag = "1")]
698        Spend(super::super::super::component::shielded_pool::v1::SpendPlan),
699        #[prost(message, tag = "2")]
700        Output(super::super::super::component::shielded_pool::v1::OutputPlan),
701        #[prost(message, tag = "3")]
702        Swap(super::super::super::component::dex::v1::SwapPlan),
703        #[prost(message, tag = "4")]
704        SwapClaim(super::super::super::component::dex::v1::SwapClaimPlan),
705        /// This is just a message relayed to the chain.
706        #[prost(message, tag = "16")]
707        ValidatorDefinition(
708            super::super::super::component::stake::v1::ValidatorDefinition,
709        ),
710        /// This is just a message relayed to the chain.
711        #[prost(message, tag = "17")]
712        IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay),
713        /// Governance:
714        #[prost(message, tag = "18")]
715        ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit),
716        #[prost(message, tag = "19")]
717        ProposalWithdraw(
718            super::super::super::component::governance::v1::ProposalWithdraw,
719        ),
720        #[prost(message, tag = "20")]
721        ValidatorVote(super::super::super::component::governance::v1::ValidatorVote),
722        #[prost(message, tag = "21")]
723        DelegatorVote(super::super::super::component::governance::v1::DelegatorVotePlan),
724        #[prost(message, tag = "22")]
725        ProposalDepositClaim(
726            super::super::super::component::governance::v1::ProposalDepositClaim,
727        ),
728        #[prost(message, tag = "200")]
729        Ics20Withdrawal(super::super::super::component::ibc::v1::Ics20Withdrawal),
730        #[prost(message, tag = "30")]
731        PositionOpen(super::super::super::component::dex::v1::PositionOpen),
732        #[prost(message, tag = "35")]
733        PositionOpenPlan(super::super::super::component::dex::v1::PositionOpenPlan),
734        #[prost(message, tag = "31")]
735        PositionClose(super::super::super::component::dex::v1::PositionClose),
736        /// The position withdraw/reward claim actions require balance information so they have Plan types.
737        #[prost(message, tag = "32")]
738        PositionWithdraw(super::super::super::component::dex::v1::PositionWithdrawPlan),
739        #[prost(message, tag = "34")]
740        PositionRewardClaim(
741            super::super::super::component::dex::v1::PositionRewardClaimPlan,
742        ),
743        /// We don't need any extra information (yet) to understand delegations,
744        /// because we don't yet use flow encryption.
745        #[prost(message, tag = "40")]
746        Delegate(super::super::super::component::stake::v1::Delegate),
747        /// We don't need any extra information (yet) to understand undelegations,
748        /// because we don't yet use flow encryption.
749        #[prost(message, tag = "41")]
750        Undelegate(super::super::super::component::stake::v1::Undelegate),
751        #[prost(message, tag = "42")]
752        UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaimPlan),
753        /// Community Pool
754        #[prost(message, tag = "50")]
755        CommunityPoolSpend(
756            super::super::super::component::governance::v1::CommunityPoolSpend,
757        ),
758        #[prost(message, tag = "51")]
759        CommunityPoolOutput(
760            super::super::super::component::governance::v1::CommunityPoolOutput,
761        ),
762        #[prost(message, tag = "52")]
763        CommunityPoolDeposit(
764            super::super::super::component::governance::v1::CommunityPoolDeposit,
765        ),
766        /// Dutch auctions
767        #[prost(message, tag = "53")]
768        ActionDutchAuctionSchedule(
769            super::super::super::component::auction::v1::ActionDutchAuctionSchedule,
770        ),
771        #[prost(message, tag = "54")]
772        ActionDutchAuctionEnd(
773            super::super::super::component::auction::v1::ActionDutchAuctionEnd,
774        ),
775        #[prost(message, tag = "55")]
776        ActionDutchAuctionWithdraw(
777            super::super::super::component::auction::v1::ActionDutchAuctionWithdrawPlan,
778        ),
779        /// Funding
780        #[prost(message, tag = "70")]
781        ActionLiquidityTournamentVote(
782            super::super::super::component::funding::v1::ActionLiquidityTournamentVotePlan,
783        ),
784    }
785}
786impl ::prost::Name for ActionPlan {
787    const NAME: &'static str = "ActionPlan";
788    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
789    fn full_name() -> ::prost::alloc::string::String {
790        "penumbra.core.transaction.v1.ActionPlan".into()
791    }
792    fn type_url() -> ::prost::alloc::string::String {
793        "/penumbra.core.transaction.v1.ActionPlan".into()
794    }
795}
796/// Describes a plan for forming a `Clue`.
797#[derive(Clone, PartialEq, ::prost::Message)]
798pub struct CluePlan {
799    /// The address.
800    #[prost(message, optional, tag = "1")]
801    pub address: ::core::option::Option<super::super::keys::v1::Address>,
802    /// The random seed to use for the clue plan.
803    #[prost(bytes = "vec", tag = "2")]
804    pub rseed: ::prost::alloc::vec::Vec<u8>,
805    /// The bits of precision.
806    #[prost(uint64, tag = "3")]
807    pub precision_bits: u64,
808}
809impl ::prost::Name for CluePlan {
810    const NAME: &'static str = "CluePlan";
811    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
812    fn full_name() -> ::prost::alloc::string::String {
813        "penumbra.core.transaction.v1.CluePlan".into()
814    }
815    fn type_url() -> ::prost::alloc::string::String {
816        "/penumbra.core.transaction.v1.CluePlan".into()
817    }
818}
819/// Describes a plan for forming the transaction memo.
820#[derive(Clone, PartialEq, ::prost::Message)]
821pub struct MemoPlan {
822    /// The plaintext.
823    #[prost(message, optional, tag = "1")]
824    pub plaintext: ::core::option::Option<MemoPlaintext>,
825    /// The key to use to encrypt the memo.
826    #[prost(bytes = "vec", tag = "2")]
827    pub key: ::prost::alloc::vec::Vec<u8>,
828}
829impl ::prost::Name for MemoPlan {
830    const NAME: &'static str = "MemoPlan";
831    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
832    fn full_name() -> ::prost::alloc::string::String {
833        "penumbra.core.transaction.v1.MemoPlan".into()
834    }
835    fn type_url() -> ::prost::alloc::string::String {
836        "/penumbra.core.transaction.v1.MemoPlan".into()
837    }
838}
839/// The encrypted memo data describing information about the purpose of a transaction.
840#[derive(Clone, PartialEq, ::prost::Message)]
841pub struct MemoCiphertext {
842    /// The encrypted data. 528 bytes.
843    #[prost(bytes = "vec", tag = "1")]
844    pub inner: ::prost::alloc::vec::Vec<u8>,
845}
846impl ::prost::Name for MemoCiphertext {
847    const NAME: &'static str = "MemoCiphertext";
848    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
849    fn full_name() -> ::prost::alloc::string::String {
850        "penumbra.core.transaction.v1.MemoCiphertext".into()
851    }
852    fn type_url() -> ::prost::alloc::string::String {
853        "/penumbra.core.transaction.v1.MemoCiphertext".into()
854    }
855}
856/// The plaintext describing information about the purpose of a transaction.
857#[derive(Clone, PartialEq, ::prost::Message)]
858pub struct MemoPlaintext {
859    /// The sender's return address.
860    ///
861    /// This should always be a valid address; the sender is responsible for ensuring
862    /// that if the receiver returns funds to this address, they will not be lost.
863    #[prost(message, optional, tag = "1")]
864    pub return_address: ::core::option::Option<super::super::keys::v1::Address>,
865    /// Free-form text, up to 432 bytes long.
866    #[prost(string, tag = "2")]
867    pub text: ::prost::alloc::string::String,
868}
869impl ::prost::Name for MemoPlaintext {
870    const NAME: &'static str = "MemoPlaintext";
871    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
872    fn full_name() -> ::prost::alloc::string::String {
873        "penumbra.core.transaction.v1.MemoPlaintext".into()
874    }
875    fn type_url() -> ::prost::alloc::string::String {
876        "/penumbra.core.transaction.v1.MemoPlaintext".into()
877    }
878}
879#[derive(Clone, PartialEq, ::prost::Message)]
880pub struct MemoPlaintextView {
881    #[prost(message, optional, tag = "1")]
882    pub return_address: ::core::option::Option<super::super::keys::v1::AddressView>,
883    #[prost(string, tag = "2")]
884    pub text: ::prost::alloc::string::String,
885}
886impl ::prost::Name for MemoPlaintextView {
887    const NAME: &'static str = "MemoPlaintextView";
888    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
889    fn full_name() -> ::prost::alloc::string::String {
890        "penumbra.core.transaction.v1.MemoPlaintextView".into()
891    }
892    fn type_url() -> ::prost::alloc::string::String {
893        "/penumbra.core.transaction.v1.MemoPlaintextView".into()
894    }
895}
896#[derive(Clone, PartialEq, ::prost::Message)]
897pub struct MemoView {
898    #[prost(oneof = "memo_view::MemoView", tags = "1, 2")]
899    pub memo_view: ::core::option::Option<memo_view::MemoView>,
900}
901/// Nested message and enum types in `MemoView`.
902pub mod memo_view {
903    #[derive(Clone, PartialEq, ::prost::Message)]
904    pub struct Visible {
905        #[prost(message, optional, tag = "1")]
906        pub ciphertext: ::core::option::Option<super::MemoCiphertext>,
907        #[prost(message, optional, tag = "2")]
908        pub plaintext: ::core::option::Option<super::MemoPlaintextView>,
909    }
910    impl ::prost::Name for Visible {
911        const NAME: &'static str = "Visible";
912        const PACKAGE: &'static str = "penumbra.core.transaction.v1";
913        fn full_name() -> ::prost::alloc::string::String {
914            "penumbra.core.transaction.v1.MemoView.Visible".into()
915        }
916        fn type_url() -> ::prost::alloc::string::String {
917            "/penumbra.core.transaction.v1.MemoView.Visible".into()
918        }
919    }
920    #[derive(Clone, PartialEq, ::prost::Message)]
921    pub struct Opaque {
922        #[prost(message, optional, tag = "1")]
923        pub ciphertext: ::core::option::Option<super::MemoCiphertext>,
924    }
925    impl ::prost::Name for Opaque {
926        const NAME: &'static str = "Opaque";
927        const PACKAGE: &'static str = "penumbra.core.transaction.v1";
928        fn full_name() -> ::prost::alloc::string::String {
929            "penumbra.core.transaction.v1.MemoView.Opaque".into()
930        }
931        fn type_url() -> ::prost::alloc::string::String {
932            "/penumbra.core.transaction.v1.MemoView.Opaque".into()
933        }
934    }
935    #[derive(Clone, PartialEq, ::prost::Oneof)]
936    pub enum MemoView {
937        #[prost(message, tag = "1")]
938        Visible(Visible),
939        #[prost(message, tag = "2")]
940        Opaque(Opaque),
941    }
942}
943impl ::prost::Name for MemoView {
944    const NAME: &'static str = "MemoView";
945    const PACKAGE: &'static str = "penumbra.core.transaction.v1";
946    fn full_name() -> ::prost::alloc::string::String {
947        "penumbra.core.transaction.v1.MemoView".into()
948    }
949    fn type_url() -> ::prost::alloc::string::String {
950        "/penumbra.core.transaction.v1.MemoView".into()
951    }
952}