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