From 0cb77c47f6864ce9fd1f1b326916ba3efcf89322 Mon Sep 17 00:00:00 2001 From: "Jason M. Hasperhoven" Date: Mon, 10 Feb 2025 20:04:12 +0400 Subject: [PATCH 1/8] Record transactions into pindexer --- crates/bin/pindexer/src/dex_ex/mod.rs | 37 +++++++++++++++++++++++ crates/bin/pindexer/src/dex_ex/schema.sql | 16 ++++++++++ 2 files changed, 53 insertions(+) diff --git a/crates/bin/pindexer/src/dex_ex/mod.rs b/crates/bin/pindexer/src/dex_ex/mod.rs index 2f91d1f662..27af8df5ac 100644 --- a/crates/bin/pindexer/src/dex_ex/mod.rs +++ b/crates/bin/pindexer/src/dex_ex/mod.rs @@ -703,6 +703,8 @@ struct Events { position_open_txs: BTreeMap, position_close_txs: BTreeMap, position_withdrawal_txs: BTreeMap, + // Track transactions + transactions: HashMap, } impl Events { @@ -723,6 +725,7 @@ impl Events { position_open_txs: BTreeMap::new(), position_close_txs: BTreeMap::new(), position_withdrawal_txs: BTreeMap::new(), + transactions: HashMap::new(), } } @@ -888,6 +891,8 @@ impl Events { .entry(e.trading_pair) .or_insert_with(Vec::new) .push(e); + } else if let Ok(e) = EventBlockTransaction::try_from_event(&event.event) { + out.transactions.insert(e.transaction_id, e.transaction); } } Ok(out) @@ -1397,6 +1402,32 @@ impl Component { Ok(()) } + + async fn record_transaction( + &self, + dbtx: &mut PgTransaction<'_>, + time: DateTime, + height: i32, + transaction_id: [u8; 32], + transaction: Transaction, + ) -> anyhow::Result<()> { + sqlx::query( + "INSERT INTO dex_ex_transactions ( + transaction_id, + transaction, + height, + time + ) VALUES ($1, $2, $3, $4)", + ) + .bind(transaction_id) + .bind(transaction) + .bind(height) + .bind(time) + .execute(dbtx.as_mut()) + .await?; + + Ok(()) + } } #[async_trait] @@ -1475,6 +1506,12 @@ impl AppView for Component { .await?; } + // Record transactions + for (transaction_id, transaction) in &events.transactions { + self.record_transaction(dbtx, time, events.height, transaction_id, transaction) + .await?; + } + for (pair, candle) in &events.candles { for window in Window::all() { let key = (pair.start, pair.end, window); diff --git a/crates/bin/pindexer/src/dex_ex/schema.sql b/crates/bin/pindexer/src/dex_ex/schema.sql index 8a5615a912..f12d4579bc 100644 --- a/crates/bin/pindexer/src/dex_ex/schema.sql +++ b/crates/bin/pindexer/src/dex_ex/schema.sql @@ -251,6 +251,22 @@ CREATE TABLE IF NOT EXISTS dex_ex_block_summary ( CREATE INDEX ON dex_ex_block_summary (time, height); +CREATE TABLE IF NOT EXISTS dex_ex_transactions ( + -- The primary key + rowid SERIAL PRIMARY KEY, + -- The unique identifier of the transaction + transaction_id BYTEA NOT NULL UNIQUE, + -- The raw transaction bytes + transaction BYTEA NOT NULL, + -- The block height at which this transaction was included + height INTEGER NOT NULL, + -- The timestamp when this transaction was included in a block + time TIMESTAMPTZ NOT NULL, + PRIMARY KEY (transaction_id) +); + +CREATE INDEX ON dex_ex_transactions (time, height); + ALTER TABLE dex_ex_position_executions ADD CONSTRAINT fk_position_executions FOREIGN KEY (position_id) REFERENCES dex_ex_position_state(position_id); From 1176d710313d215bbdea682933e6b80ff0031afb Mon Sep 17 00:00:00 2001 From: "Jason M. Hasperhoven" Date: Mon, 10 Feb 2025 20:16:57 +0400 Subject: [PATCH 2/8] Add EventBlockTransaction --- crates/bin/pindexer/src/dex_ex/mod.rs | 2 +- crates/core/component/dex/src/event.rs | 39 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/crates/bin/pindexer/src/dex_ex/mod.rs b/crates/bin/pindexer/src/dex_ex/mod.rs index 27af8df5ac..10ecd06dbb 100644 --- a/crates/bin/pindexer/src/dex_ex/mod.rs +++ b/crates/bin/pindexer/src/dex_ex/mod.rs @@ -1408,7 +1408,7 @@ impl Component { dbtx: &mut PgTransaction<'_>, time: DateTime, height: i32, - transaction_id: [u8; 32], + transaction_id: TransactionId, transaction: Transaction, ) -> anyhow::Result<()> { sqlx::query( diff --git a/crates/core/component/dex/src/event.rs b/crates/core/component/dex/src/event.rs index 8b39d6a7e3..b8ba02677a 100644 --- a/crates/core/component/dex/src/event.rs +++ b/crates/core/component/dex/src/event.rs @@ -661,3 +661,42 @@ impl From for pb::EventCandlestickData { impl DomainType for EventCandlestickData { type Proto = pb::EventCandlestickData; } + +#[derive(Clone, Debug)] +pub struct EventBlockTransaction { + pub transaction_id: TransactionId, + pub transaction: Transaction, +} + +impl TryFrom for EventBlockTransaction { + type Error = anyhow::Error; + + fn try_from(value: pb::EventBlockTransaction) -> Result { + fn inner(value: pb::EventBlockTransaction) -> anyhow::Result { + Ok(EventBlockTransaction { + transaction_id: value + .transaction_id + .ok_or(anyhow!("missing `transaction_id`"))? + .try_into()?, + transaction: value + .transaction + .ok_or(anyhow!("missing `transaction`"))? + .try_into()?, + }) + } + inner(value).context(format!("parsing {}", pb::EventBlockTransaction::NAME)) + } +} + +impl From for pb::EventBlockTransaction { + fn from(value: EventBlockTransaction) -> Self { + Self { + transaction_id: Some(value.transaction_id.into()), + transaction: Some(value.transaction.into()), + } + } +} + +impl DomainType for EventBlockTransaction { + type Proto = pb::EventBlockTransaction; +} From bfcc82ac99347dafe60a4afb2b849063082e2652 Mon Sep 17 00:00:00 2001 From: Atris Date: Mon, 17 Feb 2025 16:24:03 +0100 Subject: [PATCH 3/8] feat: record tx bytes into db --- crates/bin/pindexer/src/dex_ex/mod.rs | 28 +- crates/core/app/src/app/mod.rs | 16 +- crates/core/component/dex/src/event.rs | 19 +- .../src/gen/penumbra.core.transaction.v1.rs | 183 +- .../gen/penumbra.core.transaction.v1.serde.rs | 1630 +++++++++++------ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 643798 -> 646752 bytes .../core/transaction/v1/transaction.proto | 6 + 7 files changed, 1233 insertions(+), 649 deletions(-) diff --git a/crates/bin/pindexer/src/dex_ex/mod.rs b/crates/bin/pindexer/src/dex_ex/mod.rs index 10ecd06dbb..55ed5bfde2 100644 --- a/crates/bin/pindexer/src/dex_ex/mod.rs +++ b/crates/bin/pindexer/src/dex_ex/mod.rs @@ -20,6 +20,7 @@ use penumbra_sdk_dex::{ use penumbra_sdk_num::Amount; use penumbra_sdk_proto::event::EventDomainType; use penumbra_sdk_proto::DomainType; +use penumbra_sdk_proto::Message; use penumbra_sdk_sct::event::EventBlockRoot; use sqlx::types::BigDecimal; use sqlx::{prelude::Type, Row}; @@ -241,6 +242,8 @@ mod candle { } } pub use candle::{Candle, Window, WindowedCandle}; +use penumbra_sdk_dex::event::EventBlockTransaction; +use penumbra_sdk_proto::core::transaction::v1::Transaction; mod price_chart { use super::*; @@ -704,7 +707,7 @@ struct Events { position_close_txs: BTreeMap, position_withdrawal_txs: BTreeMap, // Track transactions - transactions: HashMap, + transactions: HashMap, Transaction>, } impl Events { @@ -892,7 +895,8 @@ impl Events { .or_insert_with(Vec::new) .push(e); } else if let Ok(e) = EventBlockTransaction::try_from_event(&event.event) { - out.transactions.insert(e.transaction_id, e.transaction); + out.transactions + .insert(e.transaction_id.0.to_vec(), e.transaction); } } Ok(out) @@ -1408,9 +1412,12 @@ impl Component { dbtx: &mut PgTransaction<'_>, time: DateTime, height: i32, - transaction_id: TransactionId, + transaction_id: Option<[u8; 32]>, transaction: Transaction, ) -> anyhow::Result<()> { + // Serialize the transaction to bytes using prost + let transaction_bytes = transaction.encode_to_vec(); + sqlx::query( "INSERT INTO dex_ex_transactions ( transaction_id, @@ -1419,8 +1426,8 @@ impl Component { time ) VALUES ($1, $2, $3, $4)", ) - .bind(transaction_id) - .bind(transaction) + .bind(transaction_id.map(|id| id.as_ref().to_vec())) + .bind(transaction_bytes) .bind(height) .bind(time) .execute(dbtx.as_mut()) @@ -1508,8 +1515,15 @@ impl AppView for Component { // Record transactions for (transaction_id, transaction) in &events.transactions { - self.record_transaction(dbtx, time, events.height, transaction_id, transaction) - .await?; + let tx_id_bytes: [u8; 32] = transaction_id.as_slice().try_into()?; + self.record_transaction( + dbtx, + time, + events.height, + Some(tx_id_bytes), + transaction.clone(), + ) + .await?; } for (pair, candle) in &events.candles { diff --git a/crates/core/app/src/app/mod.rs b/crates/core/app/src/app/mod.rs index db113e46e2..cfe062c1b6 100644 --- a/crates/core/app/src/app/mod.rs +++ b/crates/core/app/src/app/mod.rs @@ -22,7 +22,7 @@ use penumbra_sdk_governance::component::{Governance, StateReadExt as _, StateWri use penumbra_sdk_ibc::component::{Ibc, StateWriteExt as _}; use penumbra_sdk_ibc::StateReadExt as _; use penumbra_sdk_proto::core::app::v1::TransactionsByHeightResponse; -use penumbra_sdk_proto::DomainType; +use penumbra_sdk_proto::{DomainType, StateWriteProto}; use penumbra_sdk_sct::component::clock::EpochRead; use penumbra_sdk_sct::component::sct::Sct; use penumbra_sdk_sct::component::{StateReadExt as _, StateWriteExt as _}; @@ -35,16 +35,16 @@ use penumbra_sdk_transaction::Transaction; use prost::Message as _; use tendermint::abci::{self, Event}; -use tendermint::v0_37::abci::{request, response}; -use tendermint::validator::Update; -use tokio::time::sleep; -use tracing::{instrument, Instrument}; - use crate::action_handler::AppActionHandler; use crate::genesis::AppState; use crate::params::change::ParameterChangeExt as _; use crate::params::AppParameters; use crate::{CommunityPoolStateReadExt, PenumbraHost}; +use penumbra_sdk_proto::core::transaction::v1::EventBlockTransaction; +use tendermint::v0_37::abci::{request, response}; +use tendermint::validator::Update; +use tokio::time::sleep; +use tracing::{instrument, Instrument}; pub mod state_key; @@ -451,6 +451,10 @@ impl App { .put_block_transaction(height, transaction.into()) .await .context("storing transactions")?; + state_tx.record_proto(EventBlockTransaction { + transaction_id: Some(tx.id().into()), + transaction: Some(Arc::as_ref(&tx).clone().into()), + }); tx.check_and_execute(&mut state_tx) .await diff --git a/crates/core/component/dex/src/event.rs b/crates/core/component/dex/src/event.rs index b8ba02677a..cd8eb9f63d 100644 --- a/crates/core/component/dex/src/event.rs +++ b/crates/core/component/dex/src/event.rs @@ -7,9 +7,14 @@ use crate::{ use anyhow::{anyhow, Context}; use penumbra_sdk_asset::asset; use penumbra_sdk_num::Amount; -use penumbra_sdk_proto::{penumbra::core::component::dex::v1 as pb, DomainType}; +use penumbra_sdk_proto::core::transaction::v1::Transaction; +use penumbra_sdk_proto::{ + penumbra::core::{component::dex::v1 as pb, transaction::v1 as pb_tx}, + DomainType, +}; use penumbra_sdk_sct::Nullifier; use penumbra_sdk_tct::StateCommitment; +use penumbra_sdk_txhash::TransactionId; use prost::Name as _; #[derive(Clone, Debug)] @@ -668,11 +673,11 @@ pub struct EventBlockTransaction { pub transaction: Transaction, } -impl TryFrom for EventBlockTransaction { +impl TryFrom for EventBlockTransaction { type Error = anyhow::Error; - fn try_from(value: pb::EventBlockTransaction) -> Result { - fn inner(value: pb::EventBlockTransaction) -> anyhow::Result { + fn try_from(value: pb_tx::EventBlockTransaction) -> Result { + fn inner(value: pb_tx::EventBlockTransaction) -> anyhow::Result { Ok(EventBlockTransaction { transaction_id: value .transaction_id @@ -684,11 +689,11 @@ impl TryFrom for EventBlockTransaction { .try_into()?, }) } - inner(value).context(format!("parsing {}", pb::EventBlockTransaction::NAME)) + inner(value).context(format!("parsing {}", pb_tx::EventBlockTransaction::NAME)) } } -impl From for pb::EventBlockTransaction { +impl From for pb_tx::EventBlockTransaction { fn from(value: EventBlockTransaction) -> Self { Self { transaction_id: Some(value.transaction_id.into()), @@ -698,5 +703,5 @@ impl From for pb::EventBlockTransaction { } impl DomainType for EventBlockTransaction { - type Proto = pb::EventBlockTransaction; + type Proto = pb_tx::EventBlockTransaction; } diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1.rs index 2295d26332..9c9e16f51b 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1.rs @@ -6,9 +6,8 @@ pub struct Transaction { pub body: ::core::option::Option, /// The binding signature is stored separately from the transaction body that it signs. #[prost(message, optional, tag = "2")] - pub binding_sig: ::core::option::Option< - super::super::super::crypto::decaf377_rdsa::v1::BindingSignature, - >, + pub binding_sig: + ::core::option::Option, /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] @@ -120,9 +119,7 @@ impl ::prost::Name for TransactionSummary { pub struct DetectionData { /// A list of clues for use with Fuzzy Message Detection. #[prost(message, repeated, tag = "4")] - pub fmd_clues: ::prost::alloc::vec::Vec< - super::super::super::crypto::decaf377_fmd::v1::Clue, - >, + pub fmd_clues: ::prost::alloc::vec::Vec, } impl ::prost::Name for DetectionData { const NAME: &'static str = "DetectionData"; @@ -157,26 +154,20 @@ pub mod action { #[prost(message, tag = "4")] SwapClaim(super::super::super::component::dex::v1::SwapClaim), #[prost(message, tag = "16")] - ValidatorDefinition( - super::super::super::component::stake::v1::ValidatorDefinition, - ), + ValidatorDefinition(super::super::super::component::stake::v1::ValidatorDefinition), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay), /// Governance: #[prost(message, tag = "18")] ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw( - super::super::super::component::governance::v1::ProposalWithdraw, - ), + ProposalWithdraw(super::super::super::component::governance::v1::ProposalWithdraw), #[prost(message, tag = "20")] ValidatorVote(super::super::super::component::governance::v1::ValidatorVote), #[prost(message, tag = "21")] DelegatorVote(super::super::super::component::governance::v1::DelegatorVote), #[prost(message, tag = "22")] - ProposalDepositClaim( - super::super::super::component::governance::v1::ProposalDepositClaim, - ), + ProposalDepositClaim(super::super::super::component::governance::v1::ProposalDepositClaim), /// Positions #[prost(message, tag = "30")] PositionOpen(super::super::super::component::dex::v1::PositionOpen), @@ -185,9 +176,7 @@ pub mod action { #[prost(message, tag = "32")] PositionWithdraw(super::super::super::component::dex::v1::PositionWithdraw), #[prost(message, tag = "34")] - PositionRewardClaim( - super::super::super::component::dex::v1::PositionRewardClaim, - ), + PositionRewardClaim(super::super::super::component::dex::v1::PositionRewardClaim), /// (un)delegation #[prost(message, tag = "40")] Delegate(super::super::super::component::stake::v1::Delegate), @@ -197,26 +186,18 @@ pub mod action { UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaim), /// Community Pool #[prost(message, tag = "50")] - CommunityPoolSpend( - super::super::super::component::governance::v1::CommunityPoolSpend, - ), + CommunityPoolSpend(super::super::super::component::governance::v1::CommunityPoolSpend), #[prost(message, tag = "51")] - CommunityPoolOutput( - super::super::super::component::governance::v1::CommunityPoolOutput, - ), + CommunityPoolOutput(super::super::super::component::governance::v1::CommunityPoolOutput), #[prost(message, tag = "52")] - CommunityPoolDeposit( - super::super::super::component::governance::v1::CommunityPoolDeposit, - ), + CommunityPoolDeposit(super::super::super::component::governance::v1::CommunityPoolDeposit), /// Dutch auctions #[prost(message, tag = "53")] ActionDutchAuctionSchedule( super::super::super::component::auction::v1::ActionDutchAuctionSchedule, ), #[prost(message, tag = "54")] - ActionDutchAuctionEnd( - super::super::super::component::auction::v1::ActionDutchAuctionEnd, - ), + ActionDutchAuctionEnd(super::super::super::component::auction::v1::ActionDutchAuctionEnd), #[prost(message, tag = "55")] ActionDutchAuctionWithdraw( super::super::super::component::auction::v1::ActionDutchAuctionWithdraw, @@ -246,9 +227,7 @@ pub struct TransactionPerspective { /// The openings of note commitments referred to in the transaction /// but not included in the transaction. #[prost(message, repeated, tag = "3")] - pub advice_notes: ::prost::alloc::vec::Vec< - super::super::component::shielded_pool::v1::Note, - >, + pub advice_notes: ::prost::alloc::vec::Vec, /// Any relevant address views. #[prost(message, repeated, tag = "4")] pub address_views: ::prost::alloc::vec::Vec, @@ -263,24 +242,19 @@ pub struct TransactionPerspective { pub prices: ::prost::alloc::vec::Vec, /// Any relevant extended metadata, indexed by asset id. #[prost(message, repeated, tag = "30")] - pub extended_metadata: ::prost::alloc::vec::Vec< - transaction_perspective::ExtendedMetadataById, - >, + pub extended_metadata: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "40")] - pub creation_transaction_ids_by_nullifier: ::prost::alloc::vec::Vec< - transaction_perspective::CreationTransactionIdByNullifier, - >, + pub creation_transaction_ids_by_nullifier: + ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "50")] - pub nullification_transaction_ids_by_commitment: ::prost::alloc::vec::Vec< - transaction_perspective::NullificationTransactionIdByCommitment, - >, + pub nullification_transaction_ids_by_commitment: + ::prost::alloc::vec::Vec, /// Any relevant BatchSwapOutputData to the transaction. /// /// This can be used to fill in information about swap outputs. #[prost(message, repeated, tag = "60")] - pub batch_swap_output_data: ::prost::alloc::vec::Vec< - super::super::component::dex::v1::BatchSwapOutputData, - >, + pub batch_swap_output_data: + ::prost::alloc::vec::Vec, } /// Nested message and enum types in `TransactionPerspective`. pub mod transaction_perspective { @@ -295,12 +269,10 @@ pub mod transaction_perspective { const NAME: &'static str = "ExtendedMetadataById"; const PACKAGE: &'static str = "penumbra.core.transaction.v1"; fn full_name() -> ::prost::alloc::string::String { - "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById" - .into() + "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById".into() } fn type_url() -> ::prost::alloc::string::String { - "/penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById" - .into() + "/penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById".into() } } /// Associates a nullifier with the transaction ID that created the nullified state commitment. @@ -311,13 +283,9 @@ pub mod transaction_perspective { #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreationTransactionIdByNullifier { #[prost(message, optional, tag = "1")] - pub nullifier: ::core::option::Option< - super::super::super::component::sct::v1::Nullifier, - >, + pub nullifier: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub transaction_id: ::core::option::Option< - super::super::super::txhash::v1::TransactionId, - >, + pub transaction_id: ::core::option::Option, } impl ::prost::Name for CreationTransactionIdByNullifier { const NAME: &'static str = "CreationTransactionIdByNullifier"; @@ -337,13 +305,10 @@ pub mod transaction_perspective { #[derive(Clone, PartialEq, ::prost::Message)] pub struct NullificationTransactionIdByCommitment { #[prost(message, optional, tag = "1")] - pub commitment: ::core::option::Option< - super::super::super::super::crypto::tct::v1::StateCommitment, - >, + pub commitment: + ::core::option::Option, #[prost(message, optional, tag = "2")] - pub transaction_id: ::core::option::Option< - super::super::super::txhash::v1::TransactionId, - >, + pub transaction_id: ::core::option::Option, } impl ::prost::Name for NullificationTransactionIdByCommitment { const NAME: &'static str = "NullificationTransactionIdByCommitment"; @@ -373,9 +338,7 @@ pub struct PayloadKeyWithCommitment { #[prost(message, optional, tag = "1")] pub payload_key: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub commitment: ::core::option::Option< - super::super::super::crypto::tct::v1::StateCommitment, - >, + pub commitment: ::core::option::Option, } impl ::prost::Name for PayloadKeyWithCommitment { const NAME: &'static str = "PayloadKeyWithCommitment"; @@ -412,9 +375,8 @@ pub struct TransactionView { pub body_view: ::core::option::Option, /// The binding signature is stored separately from the transaction body that it signs. #[prost(message, optional, tag = "2")] - pub binding_sig: ::core::option::Option< - super::super::super::crypto::decaf377_rdsa::v1::BindingSignature, - >, + pub binding_sig: + ::core::option::Option, /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] @@ -483,24 +445,18 @@ pub mod action_view { DelegatorVote(super::super::super::component::governance::v1::DelegatorVoteView), /// Action types without visible/opaque variants #[prost(message, tag = "16")] - ValidatorDefinition( - super::super::super::component::stake::v1::ValidatorDefinition, - ), + ValidatorDefinition(super::super::super::component::stake::v1::ValidatorDefinition), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay), /// Governance: #[prost(message, tag = "18")] ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw( - super::super::super::component::governance::v1::ProposalWithdraw, - ), + ProposalWithdraw(super::super::super::component::governance::v1::ProposalWithdraw), #[prost(message, tag = "20")] ValidatorVote(super::super::super::component::governance::v1::ValidatorVote), #[prost(message, tag = "22")] - ProposalDepositClaim( - super::super::super::component::governance::v1::ProposalDepositClaim, - ), + ProposalDepositClaim(super::super::super::component::governance::v1::ProposalDepositClaim), #[prost(message, tag = "30")] PositionOpen(super::super::super::component::dex::v1::PositionOpen), #[prost(message, tag = "31")] @@ -508,35 +464,25 @@ pub mod action_view { #[prost(message, tag = "32")] PositionWithdraw(super::super::super::component::dex::v1::PositionWithdraw), #[prost(message, tag = "34")] - PositionRewardClaim( - super::super::super::component::dex::v1::PositionRewardClaim, - ), + PositionRewardClaim(super::super::super::component::dex::v1::PositionRewardClaim), #[prost(message, tag = "41")] Delegate(super::super::super::component::stake::v1::Delegate), #[prost(message, tag = "42")] Undelegate(super::super::super::component::stake::v1::Undelegate), /// Community Pool #[prost(message, tag = "50")] - CommunityPoolSpend( - super::super::super::component::governance::v1::CommunityPoolSpend, - ), + CommunityPoolSpend(super::super::super::component::governance::v1::CommunityPoolSpend), #[prost(message, tag = "51")] - CommunityPoolOutput( - super::super::super::component::governance::v1::CommunityPoolOutput, - ), + CommunityPoolOutput(super::super::super::component::governance::v1::CommunityPoolOutput), #[prost(message, tag = "52")] - CommunityPoolDeposit( - super::super::super::component::governance::v1::CommunityPoolDeposit, - ), + CommunityPoolDeposit(super::super::super::component::governance::v1::CommunityPoolDeposit), /// Dutch auctions #[prost(message, tag = "53")] ActionDutchAuctionSchedule( super::super::super::component::auction::v1::ActionDutchAuctionScheduleView, ), #[prost(message, tag = "54")] - ActionDutchAuctionEnd( - super::super::super::component::auction::v1::ActionDutchAuctionEnd, - ), + ActionDutchAuctionEnd(super::super::super::component::auction::v1::ActionDutchAuctionEnd), #[prost(message, tag = "55")] ActionDutchAuctionWithdraw( super::super::super::component::auction::v1::ActionDutchAuctionWithdrawView, @@ -598,9 +544,8 @@ pub struct WitnessData { /// The auth paths for the notes the transaction spends, in the /// same order as the spends in the transaction plan. #[prost(message, repeated, tag = "2")] - pub state_commitment_proofs: ::prost::alloc::vec::Vec< - super::super::super::crypto::tct::v1::StateCommitmentProof, - >, + pub state_commitment_proofs: + ::prost::alloc::vec::Vec, } impl ::prost::Name for WitnessData { const NAME: &'static str = "WitnessData"; @@ -683,9 +628,7 @@ pub mod action_plan { SwapClaim(super::super::super::component::dex::v1::SwapClaimPlan), /// This is just a message relayed to the chain. #[prost(message, tag = "16")] - ValidatorDefinition( - super::super::super::component::stake::v1::ValidatorDefinition, - ), + ValidatorDefinition(super::super::super::component::stake::v1::ValidatorDefinition), /// This is just a message relayed to the chain. #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay), @@ -693,17 +636,13 @@ pub mod action_plan { #[prost(message, tag = "18")] ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw( - super::super::super::component::governance::v1::ProposalWithdraw, - ), + ProposalWithdraw(super::super::super::component::governance::v1::ProposalWithdraw), #[prost(message, tag = "20")] ValidatorVote(super::super::super::component::governance::v1::ValidatorVote), #[prost(message, tag = "21")] DelegatorVote(super::super::super::component::governance::v1::DelegatorVotePlan), #[prost(message, tag = "22")] - ProposalDepositClaim( - super::super::super::component::governance::v1::ProposalDepositClaim, - ), + ProposalDepositClaim(super::super::super::component::governance::v1::ProposalDepositClaim), #[prost(message, tag = "200")] Ics20Withdrawal(super::super::super::component::ibc::v1::Ics20Withdrawal), #[prost(message, tag = "30")] @@ -714,9 +653,7 @@ pub mod action_plan { #[prost(message, tag = "32")] PositionWithdraw(super::super::super::component::dex::v1::PositionWithdrawPlan), #[prost(message, tag = "34")] - PositionRewardClaim( - super::super::super::component::dex::v1::PositionRewardClaimPlan, - ), + PositionRewardClaim(super::super::super::component::dex::v1::PositionRewardClaimPlan), /// We don't need any extra information (yet) to understand delegations, /// because we don't yet use flow encryption. #[prost(message, tag = "40")] @@ -729,26 +666,18 @@ pub mod action_plan { UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaimPlan), /// Community Pool #[prost(message, tag = "50")] - CommunityPoolSpend( - super::super::super::component::governance::v1::CommunityPoolSpend, - ), + CommunityPoolSpend(super::super::super::component::governance::v1::CommunityPoolSpend), #[prost(message, tag = "51")] - CommunityPoolOutput( - super::super::super::component::governance::v1::CommunityPoolOutput, - ), + CommunityPoolOutput(super::super::super::component::governance::v1::CommunityPoolOutput), #[prost(message, tag = "52")] - CommunityPoolDeposit( - super::super::super::component::governance::v1::CommunityPoolDeposit, - ), + CommunityPoolDeposit(super::super::super::component::governance::v1::CommunityPoolDeposit), /// Dutch auctions #[prost(message, tag = "53")] ActionDutchAuctionSchedule( super::super::super::component::auction::v1::ActionDutchAuctionSchedule, ), #[prost(message, tag = "54")] - ActionDutchAuctionEnd( - super::super::super::component::auction::v1::ActionDutchAuctionEnd, - ), + ActionDutchAuctionEnd(super::super::super::component::auction::v1::ActionDutchAuctionEnd), #[prost(message, tag = "55")] ActionDutchAuctionWithdraw( super::super::super::component::auction::v1::ActionDutchAuctionWithdrawPlan, @@ -922,3 +851,21 @@ impl ::prost::Name for MemoView { "/penumbra.core.transaction.v1.MemoView".into() } } +/// Event emitted when a transaction is included in a block +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct EventBlockTransaction { + #[prost(message, optional, tag = "1")] + pub transaction_id: ::core::option::Option, + #[prost(message, optional, tag = "2")] + pub transaction: ::core::option::Option, +} +impl ::prost::Name for EventBlockTransaction { + const NAME: &'static str = "EventBlockTransaction"; + const PACKAGE: &'static str = "penumbra.core.transaction.v1"; + fn full_name() -> ::prost::alloc::string::String { + "penumbra.core.transaction.v1.EventBlockTransaction".into() + } + fn type_url() -> ::prost::alloc::string::String { + "/penumbra.core.transaction.v1.EventBlockTransaction".into() + } +} diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs index ba9d7347a8..ce634f9c98 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs @@ -9,7 +9,8 @@ impl serde::Serialize for Action { if self.action.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.Action", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.Action", len)?; if let Some(v) = self.action.as_ref() { match v { action::Action::Spend(v) => { @@ -185,7 +186,10 @@ impl<'de> serde::Deserialize<'de> for Action { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -199,27 +203,57 @@ impl<'de> serde::Deserialize<'de> for Action { "output" => Ok(GeneratedField::Output), "swap" => Ok(GeneratedField::Swap), "swapClaim" | "swap_claim" => Ok(GeneratedField::SwapClaim), - "validatorDefinition" | "validator_definition" => Ok(GeneratedField::ValidatorDefinition), - "ibcRelayAction" | "ibc_relay_action" => Ok(GeneratedField::IbcRelayAction), - "proposalSubmit" | "proposal_submit" => Ok(GeneratedField::ProposalSubmit), - "proposalWithdraw" | "proposal_withdraw" => Ok(GeneratedField::ProposalWithdraw), + "validatorDefinition" | "validator_definition" => { + Ok(GeneratedField::ValidatorDefinition) + } + "ibcRelayAction" | "ibc_relay_action" => { + Ok(GeneratedField::IbcRelayAction) + } + "proposalSubmit" | "proposal_submit" => { + Ok(GeneratedField::ProposalSubmit) + } + "proposalWithdraw" | "proposal_withdraw" => { + Ok(GeneratedField::ProposalWithdraw) + } "validatorVote" | "validator_vote" => Ok(GeneratedField::ValidatorVote), "delegatorVote" | "delegator_vote" => Ok(GeneratedField::DelegatorVote), - "proposalDepositClaim" | "proposal_deposit_claim" => Ok(GeneratedField::ProposalDepositClaim), + "proposalDepositClaim" | "proposal_deposit_claim" => { + Ok(GeneratedField::ProposalDepositClaim) + } "positionOpen" | "position_open" => Ok(GeneratedField::PositionOpen), "positionClose" | "position_close" => Ok(GeneratedField::PositionClose), - "positionWithdraw" | "position_withdraw" => Ok(GeneratedField::PositionWithdraw), - "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), + "positionWithdraw" | "position_withdraw" => { + Ok(GeneratedField::PositionWithdraw) + } + "positionRewardClaim" | "position_reward_claim" => { + Ok(GeneratedField::PositionRewardClaim) + } "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), - "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), - "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), - "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), - "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => Ok(GeneratedField::ActionDutchAuctionSchedule), - "actionDutchAuctionEnd" | "action_dutch_auction_end" => Ok(GeneratedField::ActionDutchAuctionEnd), - "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => Ok(GeneratedField::ActionDutchAuctionWithdraw), - "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), + "undelegateClaim" | "undelegate_claim" => { + Ok(GeneratedField::UndelegateClaim) + } + "communityPoolSpend" | "community_pool_spend" => { + Ok(GeneratedField::CommunityPoolSpend) + } + "communityPoolOutput" | "community_pool_output" => { + Ok(GeneratedField::CommunityPoolOutput) + } + "communityPoolDeposit" | "community_pool_deposit" => { + Ok(GeneratedField::CommunityPoolDeposit) + } + "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => { + Ok(GeneratedField::ActionDutchAuctionSchedule) + } + "actionDutchAuctionEnd" | "action_dutch_auction_end" => { + Ok(GeneratedField::ActionDutchAuctionEnd) + } + "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => { + Ok(GeneratedField::ActionDutchAuctionWithdraw) + } + "ics20Withdrawal" | "ics20_withdrawal" => { + Ok(GeneratedField::Ics20Withdrawal) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -236,8 +270,8 @@ impl<'de> serde::Deserialize<'de> for Action { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action__ = None; while let Some(k) = map_.next_key()? { @@ -246,188 +280,233 @@ impl<'de> serde::Deserialize<'de> for Action { if action__.is_some() { return Err(serde::de::Error::duplicate_field("spend")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Spend) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::Spend); } GeneratedField::Output => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("output")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Output) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::Output); } GeneratedField::Swap => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swap")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Swap) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::Swap); } GeneratedField::SwapClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swapClaim")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::SwapClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::SwapClaim); } GeneratedField::ValidatorDefinition => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("validatorDefinition")); + return Err(serde::de::Error::duplicate_field( + "validatorDefinition", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ValidatorDefinition) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ValidatorDefinition); } GeneratedField::IbcRelayAction => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ibcRelayAction")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::IbcRelayAction) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::IbcRelayAction); } GeneratedField::ProposalSubmit => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalSubmit")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ProposalSubmit) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ProposalSubmit); } GeneratedField::ProposalWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalWithdraw")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ProposalWithdraw) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ProposalWithdraw); } GeneratedField::ValidatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("validatorVote")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ValidatorVote) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ValidatorVote); } GeneratedField::DelegatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegatorVote")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::DelegatorVote) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::DelegatorVote); } GeneratedField::ProposalDepositClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalDepositClaim")); + return Err(serde::de::Error::duplicate_field( + "proposalDepositClaim", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ProposalDepositClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ProposalDepositClaim); } GeneratedField::PositionOpen => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionOpen")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionOpen) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::PositionOpen); } GeneratedField::PositionClose => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionClose")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionClose) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::PositionClose); } GeneratedField::PositionWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionWithdraw")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionWithdraw) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::PositionWithdraw); } GeneratedField::PositionRewardClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("positionRewardClaim")); + return Err(serde::de::Error::duplicate_field( + "positionRewardClaim", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionRewardClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::PositionRewardClaim); } GeneratedField::Delegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegate")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Delegate) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::Delegate); } GeneratedField::Undelegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegate")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Undelegate) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::Undelegate); } GeneratedField::UndelegateClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegateClaim")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::UndelegateClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::UndelegateClaim); } GeneratedField::CommunityPoolSpend => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolSpend")); + return Err(serde::de::Error::duplicate_field( + "communityPoolSpend", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolSpend) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::CommunityPoolSpend); } GeneratedField::CommunityPoolOutput => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolOutput")); + return Err(serde::de::Error::duplicate_field( + "communityPoolOutput", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolOutput) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::CommunityPoolOutput); } GeneratedField::CommunityPoolDeposit => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); + return Err(serde::de::Error::duplicate_field( + "communityPoolDeposit", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolDeposit) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::CommunityPoolDeposit); } GeneratedField::ActionDutchAuctionSchedule => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionSchedule")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionSchedule", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ActionDutchAuctionSchedule) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ActionDutchAuctionSchedule); } GeneratedField::ActionDutchAuctionEnd => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionEnd")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionEnd", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ActionDutchAuctionEnd) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ActionDutchAuctionEnd); } GeneratedField::ActionDutchAuctionWithdraw => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionWithdraw")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionWithdraw", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ActionDutchAuctionWithdraw) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::ActionDutchAuctionWithdraw); } GeneratedField::Ics20Withdrawal => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ics20Withdrawal")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Ics20Withdrawal) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action::Action::Ics20Withdrawal); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } } } - Ok(Action { - action: action__, - }) + Ok(Action { action: action__ }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.Action", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.Action", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for ActionPlan { @@ -441,7 +520,8 @@ impl serde::Serialize for ActionPlan { if self.action.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.ActionPlan", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.ActionPlan", len)?; if let Some(v) = self.action.as_ref() { match v { action_plan::Action::Spend(v) => { @@ -617,7 +697,10 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -631,27 +714,57 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { "output" => Ok(GeneratedField::Output), "swap" => Ok(GeneratedField::Swap), "swapClaim" | "swap_claim" => Ok(GeneratedField::SwapClaim), - "validatorDefinition" | "validator_definition" => Ok(GeneratedField::ValidatorDefinition), - "ibcRelayAction" | "ibc_relay_action" => Ok(GeneratedField::IbcRelayAction), - "proposalSubmit" | "proposal_submit" => Ok(GeneratedField::ProposalSubmit), - "proposalWithdraw" | "proposal_withdraw" => Ok(GeneratedField::ProposalWithdraw), + "validatorDefinition" | "validator_definition" => { + Ok(GeneratedField::ValidatorDefinition) + } + "ibcRelayAction" | "ibc_relay_action" => { + Ok(GeneratedField::IbcRelayAction) + } + "proposalSubmit" | "proposal_submit" => { + Ok(GeneratedField::ProposalSubmit) + } + "proposalWithdraw" | "proposal_withdraw" => { + Ok(GeneratedField::ProposalWithdraw) + } "validatorVote" | "validator_vote" => Ok(GeneratedField::ValidatorVote), "delegatorVote" | "delegator_vote" => Ok(GeneratedField::DelegatorVote), - "proposalDepositClaim" | "proposal_deposit_claim" => Ok(GeneratedField::ProposalDepositClaim), - "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), + "proposalDepositClaim" | "proposal_deposit_claim" => { + Ok(GeneratedField::ProposalDepositClaim) + } + "ics20Withdrawal" | "ics20_withdrawal" => { + Ok(GeneratedField::Ics20Withdrawal) + } "positionOpen" | "position_open" => Ok(GeneratedField::PositionOpen), "positionClose" | "position_close" => Ok(GeneratedField::PositionClose), - "positionWithdraw" | "position_withdraw" => Ok(GeneratedField::PositionWithdraw), - "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), + "positionWithdraw" | "position_withdraw" => { + Ok(GeneratedField::PositionWithdraw) + } + "positionRewardClaim" | "position_reward_claim" => { + Ok(GeneratedField::PositionRewardClaim) + } "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), - "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), - "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), - "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), - "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => Ok(GeneratedField::ActionDutchAuctionSchedule), - "actionDutchAuctionEnd" | "action_dutch_auction_end" => Ok(GeneratedField::ActionDutchAuctionEnd), - "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => Ok(GeneratedField::ActionDutchAuctionWithdraw), + "undelegateClaim" | "undelegate_claim" => { + Ok(GeneratedField::UndelegateClaim) + } + "communityPoolSpend" | "community_pool_spend" => { + Ok(GeneratedField::CommunityPoolSpend) + } + "communityPoolOutput" | "community_pool_output" => { + Ok(GeneratedField::CommunityPoolOutput) + } + "communityPoolDeposit" | "community_pool_deposit" => { + Ok(GeneratedField::CommunityPoolDeposit) + } + "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => { + Ok(GeneratedField::ActionDutchAuctionSchedule) + } + "actionDutchAuctionEnd" | "action_dutch_auction_end" => { + Ok(GeneratedField::ActionDutchAuctionEnd) + } + "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => { + Ok(GeneratedField::ActionDutchAuctionWithdraw) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -668,8 +781,8 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action__ = None; while let Some(k) = map_.next_key()? { @@ -678,188 +791,233 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { if action__.is_some() { return Err(serde::de::Error::duplicate_field("spend")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Spend) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::Spend); } GeneratedField::Output => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("output")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Output) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::Output); } GeneratedField::Swap => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swap")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Swap) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::Swap); } GeneratedField::SwapClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swapClaim")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::SwapClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::SwapClaim); } GeneratedField::ValidatorDefinition => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("validatorDefinition")); + return Err(serde::de::Error::duplicate_field( + "validatorDefinition", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ValidatorDefinition) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ValidatorDefinition); } GeneratedField::IbcRelayAction => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ibcRelayAction")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::IbcRelayAction) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::IbcRelayAction); } GeneratedField::ProposalSubmit => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalSubmit")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ProposalSubmit) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ProposalSubmit); } GeneratedField::ProposalWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalWithdraw")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ProposalWithdraw) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ProposalWithdraw); } GeneratedField::ValidatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("validatorVote")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ValidatorVote) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ValidatorVote); } GeneratedField::DelegatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegatorVote")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::DelegatorVote) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::DelegatorVote); } GeneratedField::ProposalDepositClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalDepositClaim")); + return Err(serde::de::Error::duplicate_field( + "proposalDepositClaim", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ProposalDepositClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ProposalDepositClaim); } GeneratedField::Ics20Withdrawal => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ics20Withdrawal")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Ics20Withdrawal) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::Ics20Withdrawal); } GeneratedField::PositionOpen => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionOpen")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionOpen) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::PositionOpen); } GeneratedField::PositionClose => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionClose")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionClose) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::PositionClose); } GeneratedField::PositionWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionWithdraw")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionWithdraw) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::PositionWithdraw); } GeneratedField::PositionRewardClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("positionRewardClaim")); + return Err(serde::de::Error::duplicate_field( + "positionRewardClaim", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionRewardClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::PositionRewardClaim); } GeneratedField::Delegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegate")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Delegate) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::Delegate); } GeneratedField::Undelegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegate")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Undelegate) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::Undelegate); } GeneratedField::UndelegateClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegateClaim")); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::UndelegateClaim) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::UndelegateClaim); } GeneratedField::CommunityPoolSpend => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolSpend")); + return Err(serde::de::Error::duplicate_field( + "communityPoolSpend", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolSpend) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::CommunityPoolSpend); } GeneratedField::CommunityPoolOutput => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolOutput")); + return Err(serde::de::Error::duplicate_field( + "communityPoolOutput", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolOutput) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::CommunityPoolOutput); } GeneratedField::CommunityPoolDeposit => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); + return Err(serde::de::Error::duplicate_field( + "communityPoolDeposit", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolDeposit) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::CommunityPoolDeposit); } GeneratedField::ActionDutchAuctionSchedule => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionSchedule")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionSchedule", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ActionDutchAuctionSchedule) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ActionDutchAuctionSchedule); } GeneratedField::ActionDutchAuctionEnd => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionEnd")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionEnd", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ActionDutchAuctionEnd) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ActionDutchAuctionEnd); } GeneratedField::ActionDutchAuctionWithdraw => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionWithdraw")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionWithdraw", + )); } - action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ActionDutchAuctionWithdraw) -; + action__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_plan::Action::ActionDutchAuctionWithdraw); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } } } - Ok(ActionPlan { - action: action__, - }) + Ok(ActionPlan { action: action__ }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.ActionPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.ActionPlan", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for ActionView { @@ -873,7 +1031,8 @@ impl serde::Serialize for ActionView { if self.action_view.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.ActionView", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.ActionView", len)?; if let Some(v) = self.action_view.as_ref() { match v { action_view::ActionView::Spend(v) => { @@ -1049,7 +1208,10 @@ impl<'de> serde::Deserialize<'de> for ActionView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1064,26 +1226,56 @@ impl<'de> serde::Deserialize<'de> for ActionView { "swap" => Ok(GeneratedField::Swap), "swapClaim" | "swap_claim" => Ok(GeneratedField::SwapClaim), "delegatorVote" | "delegator_vote" => Ok(GeneratedField::DelegatorVote), - "validatorDefinition" | "validator_definition" => Ok(GeneratedField::ValidatorDefinition), - "ibcRelayAction" | "ibc_relay_action" => Ok(GeneratedField::IbcRelayAction), - "proposalSubmit" | "proposal_submit" => Ok(GeneratedField::ProposalSubmit), - "proposalWithdraw" | "proposal_withdraw" => Ok(GeneratedField::ProposalWithdraw), + "validatorDefinition" | "validator_definition" => { + Ok(GeneratedField::ValidatorDefinition) + } + "ibcRelayAction" | "ibc_relay_action" => { + Ok(GeneratedField::IbcRelayAction) + } + "proposalSubmit" | "proposal_submit" => { + Ok(GeneratedField::ProposalSubmit) + } + "proposalWithdraw" | "proposal_withdraw" => { + Ok(GeneratedField::ProposalWithdraw) + } "validatorVote" | "validator_vote" => Ok(GeneratedField::ValidatorVote), - "proposalDepositClaim" | "proposal_deposit_claim" => Ok(GeneratedField::ProposalDepositClaim), + "proposalDepositClaim" | "proposal_deposit_claim" => { + Ok(GeneratedField::ProposalDepositClaim) + } "positionOpen" | "position_open" => Ok(GeneratedField::PositionOpen), "positionClose" | "position_close" => Ok(GeneratedField::PositionClose), - "positionWithdraw" | "position_withdraw" => Ok(GeneratedField::PositionWithdraw), - "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), + "positionWithdraw" | "position_withdraw" => { + Ok(GeneratedField::PositionWithdraw) + } + "positionRewardClaim" | "position_reward_claim" => { + Ok(GeneratedField::PositionRewardClaim) + } "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), - "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), - "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), - "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => Ok(GeneratedField::ActionDutchAuctionSchedule), - "actionDutchAuctionEnd" | "action_dutch_auction_end" => Ok(GeneratedField::ActionDutchAuctionEnd), - "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => Ok(GeneratedField::ActionDutchAuctionWithdraw), - "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), - "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), + "communityPoolSpend" | "community_pool_spend" => { + Ok(GeneratedField::CommunityPoolSpend) + } + "communityPoolOutput" | "community_pool_output" => { + Ok(GeneratedField::CommunityPoolOutput) + } + "communityPoolDeposit" | "community_pool_deposit" => { + Ok(GeneratedField::CommunityPoolDeposit) + } + "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => { + Ok(GeneratedField::ActionDutchAuctionSchedule) + } + "actionDutchAuctionEnd" | "action_dutch_auction_end" => { + Ok(GeneratedField::ActionDutchAuctionEnd) + } + "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => { + Ok(GeneratedField::ActionDutchAuctionWithdraw) + } + "undelegateClaim" | "undelegate_claim" => { + Ok(GeneratedField::UndelegateClaim) + } + "ics20Withdrawal" | "ics20_withdrawal" => { + Ok(GeneratedField::Ics20Withdrawal) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -1100,8 +1292,8 @@ impl<'de> serde::Deserialize<'de> for ActionView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action_view__ = None; while let Some(k) = map_.next_key()? { @@ -1110,176 +1302,219 @@ impl<'de> serde::Deserialize<'de> for ActionView { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("spend")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Spend) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::Spend); } GeneratedField::Output => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("output")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Output) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::Output); } GeneratedField::Swap => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("swap")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Swap) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::Swap); } GeneratedField::SwapClaim => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("swapClaim")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::SwapClaim) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::SwapClaim); } GeneratedField::DelegatorVote => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("delegatorVote")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::DelegatorVote) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::DelegatorVote); } GeneratedField::ValidatorDefinition => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("validatorDefinition")); + return Err(serde::de::Error::duplicate_field( + "validatorDefinition", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ValidatorDefinition) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ValidatorDefinition); } GeneratedField::IbcRelayAction => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("ibcRelayAction")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::IbcRelayAction) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::IbcRelayAction); } GeneratedField::ProposalSubmit => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("proposalSubmit")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ProposalSubmit) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ProposalSubmit); } GeneratedField::ProposalWithdraw => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("proposalWithdraw")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ProposalWithdraw) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ProposalWithdraw); } GeneratedField::ValidatorVote => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("validatorVote")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ValidatorVote) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ValidatorVote); } GeneratedField::ProposalDepositClaim => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalDepositClaim")); + return Err(serde::de::Error::duplicate_field( + "proposalDepositClaim", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ProposalDepositClaim) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ProposalDepositClaim); } GeneratedField::PositionOpen => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("positionOpen")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionOpen) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::PositionOpen); } GeneratedField::PositionClose => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("positionClose")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionClose) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::PositionClose); } GeneratedField::PositionWithdraw => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("positionWithdraw")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionWithdraw) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::PositionWithdraw); } GeneratedField::PositionRewardClaim => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("positionRewardClaim")); + return Err(serde::de::Error::duplicate_field( + "positionRewardClaim", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionRewardClaim) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::PositionRewardClaim); } GeneratedField::Delegate => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("delegate")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Delegate) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::Delegate); } GeneratedField::Undelegate => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("undelegate")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Undelegate) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::Undelegate); } GeneratedField::CommunityPoolSpend => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolSpend")); + return Err(serde::de::Error::duplicate_field( + "communityPoolSpend", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolSpend) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::CommunityPoolSpend); } GeneratedField::CommunityPoolOutput => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolOutput")); + return Err(serde::de::Error::duplicate_field( + "communityPoolOutput", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolOutput) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::CommunityPoolOutput); } GeneratedField::CommunityPoolDeposit => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); + return Err(serde::de::Error::duplicate_field( + "communityPoolDeposit", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolDeposit) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::CommunityPoolDeposit); } GeneratedField::ActionDutchAuctionSchedule => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionSchedule")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionSchedule", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ActionDutchAuctionSchedule) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ActionDutchAuctionSchedule); } GeneratedField::ActionDutchAuctionEnd => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionEnd")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionEnd", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ActionDutchAuctionEnd) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ActionDutchAuctionEnd); } GeneratedField::ActionDutchAuctionWithdraw => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field("actionDutchAuctionWithdraw")); + return Err(serde::de::Error::duplicate_field( + "actionDutchAuctionWithdraw", + )); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ActionDutchAuctionWithdraw) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::ActionDutchAuctionWithdraw); } GeneratedField::UndelegateClaim => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("undelegateClaim")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::UndelegateClaim) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::UndelegateClaim); } GeneratedField::Ics20Withdrawal => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("ics20Withdrawal")); } - action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Ics20Withdrawal) -; + action_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(action_view::ActionView::Ics20Withdrawal); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -1291,7 +1526,11 @@ impl<'de> serde::Deserialize<'de> for ActionView { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.ActionView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.ActionView", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for AuthorizationData { @@ -1311,7 +1550,8 @@ impl serde::Serialize for AuthorizationData { if !self.delegator_vote_auths.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.AuthorizationData", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.AuthorizationData", len)?; if let Some(v) = self.effect_hash.as_ref() { struct_ser.serialize_field("effectHash", v)?; } @@ -1356,7 +1596,10 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1368,7 +1611,9 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { match value { "effectHash" | "effect_hash" => Ok(GeneratedField::EffectHash), "spendAuths" | "spend_auths" => Ok(GeneratedField::SpendAuths), - "delegatorVoteAuths" | "delegator_vote_auths" => Ok(GeneratedField::DelegatorVoteAuths), + "delegatorVoteAuths" | "delegator_vote_auths" => { + Ok(GeneratedField::DelegatorVoteAuths) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -1385,8 +1630,8 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut effect_hash__ = None; let mut spend_auths__ = None; @@ -1407,7 +1652,9 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { } GeneratedField::DelegatorVoteAuths => { if delegator_vote_auths__.is_some() { - return Err(serde::de::Error::duplicate_field("delegatorVoteAuths")); + return Err(serde::de::Error::duplicate_field( + "delegatorVoteAuths", + )); } delegator_vote_auths__ = Some(map_.next_value()?); } @@ -1423,7 +1670,11 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.AuthorizationData", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.AuthorizationData", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for CluePlan { @@ -1443,19 +1694,26 @@ impl serde::Serialize for CluePlan { if self.precision_bits != 0 { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.CluePlan", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.CluePlan", len)?; if let Some(v) = self.address.as_ref() { struct_ser.serialize_field("address", v)?; } if !self.rseed.is_empty() { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field("rseed", pbjson::private::base64::encode(&self.rseed).as_str())?; + struct_ser.serialize_field( + "rseed", + pbjson::private::base64::encode(&self.rseed).as_str(), + )?; } if self.precision_bits != 0 { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field("precisionBits", ToString::to_string(&self.precision_bits).as_str())?; + struct_ser.serialize_field( + "precisionBits", + ToString::to_string(&self.precision_bits).as_str(), + )?; } struct_ser.end() } @@ -1466,12 +1724,7 @@ impl<'de> serde::Deserialize<'de> for CluePlan { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "address", - "rseed", - "precision_bits", - "precisionBits", - ]; + const FIELDS: &[&str] = &["address", "rseed", "precision_bits", "precisionBits"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1490,7 +1743,10 @@ impl<'de> serde::Deserialize<'de> for CluePlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1519,8 +1775,8 @@ impl<'de> serde::Deserialize<'de> for CluePlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut address__ = None; let mut rseed__ = None; @@ -1537,17 +1793,19 @@ impl<'de> serde::Deserialize<'de> for CluePlan { if rseed__.is_some() { return Err(serde::de::Error::duplicate_field("rseed")); } - rseed__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + rseed__ = Some( + map_.next_value::<::pbjson::private::BytesDeserialize<_>>()? + .0, + ); } GeneratedField::PrecisionBits => { if precision_bits__.is_some() { return Err(serde::de::Error::duplicate_field("precisionBits")); } - precision_bits__ = - Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; + precision_bits__ = Some( + map_.next_value::<::pbjson::private::NumberDeserialize<_>>()? + .0, + ); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -1561,7 +1819,11 @@ impl<'de> serde::Deserialize<'de> for CluePlan { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.CluePlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.CluePlan", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for DetectionData { @@ -1575,7 +1837,8 @@ impl serde::Serialize for DetectionData { if !self.fmd_clues.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.DetectionData", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.DetectionData", len)?; if !self.fmd_clues.is_empty() { struct_ser.serialize_field("fmdClues", &self.fmd_clues)?; } @@ -1588,10 +1851,7 @@ impl<'de> serde::Deserialize<'de> for DetectionData { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "fmd_clues", - "fmdClues", - ]; + const FIELDS: &[&str] = &["fmd_clues", "fmdClues"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1608,7 +1868,10 @@ impl<'de> serde::Deserialize<'de> for DetectionData { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1635,8 +1898,8 @@ impl<'de> serde::Deserialize<'de> for DetectionData { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut fmd_clues__ = None; while let Some(k) = map_.next_key()? { @@ -1657,7 +1920,11 @@ impl<'de> serde::Deserialize<'de> for DetectionData { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.DetectionData", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.DetectionData", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for DetectionDataPlan { @@ -1671,7 +1938,8 @@ impl serde::Serialize for DetectionDataPlan { if !self.clue_plans.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.DetectionDataPlan", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.DetectionDataPlan", len)?; if !self.clue_plans.is_empty() { struct_ser.serialize_field("cluePlans", &self.clue_plans)?; } @@ -1684,10 +1952,7 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "clue_plans", - "cluePlans", - ]; + const FIELDS: &[&str] = &["clue_plans", "cluePlans"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1704,7 +1969,10 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1731,8 +1999,8 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut clue_plans__ = None; while let Some(k) = map_.next_key()? { @@ -1753,7 +2021,131 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.DetectionDataPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.DetectionDataPlan", + FIELDS, + GeneratedVisitor, + ) + } +} +impl serde::Serialize for EventBlockTransaction { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.transaction_id.is_some() { + len += 1; + } + if self.transaction.is_some() { + len += 1; + } + let mut struct_ser = serializer + .serialize_struct("penumbra.core.transaction.v1.EventBlockTransaction", len)?; + if let Some(v) = self.transaction_id.as_ref() { + struct_ser.serialize_field("transactionId", v)?; + } + if let Some(v) = self.transaction.as_ref() { + struct_ser.serialize_field("transaction", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for EventBlockTransaction { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &["transaction_id", "transactionId", "transaction"]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + TransactionId, + Transaction, + __SkipField__, + } + impl<'de> serde::Deserialize<'de> for GeneratedField { + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + struct GeneratedVisitor; + + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GeneratedField; + + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { + write!(formatter, "expected one of: {:?}", &FIELDS) + } + + #[allow(unused_variables)] + fn visit_str(self, value: &str) -> std::result::Result + where + E: serde::de::Error, + { + match value { + "transactionId" | "transaction_id" => Ok(GeneratedField::TransactionId), + "transaction" => Ok(GeneratedField::Transaction), + _ => Ok(GeneratedField::__SkipField__), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = EventBlockTransaction; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.transaction.v1.EventBlockTransaction") + } + + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut transaction_id__ = None; + let mut transaction__ = None; + while let Some(k) = map_.next_key()? { + match k { + GeneratedField::TransactionId => { + if transaction_id__.is_some() { + return Err(serde::de::Error::duplicate_field("transactionId")); + } + transaction_id__ = map_.next_value()?; + } + GeneratedField::Transaction => { + if transaction__.is_some() { + return Err(serde::de::Error::duplicate_field("transaction")); + } + transaction__ = map_.next_value()?; + } + GeneratedField::__SkipField__ => { + let _ = map_.next_value::()?; + } + } + } + Ok(EventBlockTransaction { + transaction_id: transaction_id__, + transaction: transaction__, + }) + } + } + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.EventBlockTransaction", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for MemoCiphertext { @@ -1767,11 +2159,15 @@ impl serde::Serialize for MemoCiphertext { if !self.inner.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoCiphertext", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoCiphertext", len)?; if !self.inner.is_empty() { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; + struct_ser.serialize_field( + "inner", + pbjson::private::base64::encode(&self.inner).as_str(), + )?; } struct_ser.end() } @@ -1782,9 +2178,7 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "inner", - ]; + const FIELDS: &[&str] = &["inner"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1801,7 +2195,10 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1828,8 +2225,8 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut inner__ = None; while let Some(k) = map_.next_key()? { @@ -1838,9 +2235,10 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { if inner__.is_some() { return Err(serde::de::Error::duplicate_field("inner")); } - inner__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + inner__ = Some( + map_.next_value::<::pbjson::private::BytesDeserialize<_>>()? + .0, + ); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -1852,7 +2250,11 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoCiphertext", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoCiphertext", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for MemoPlaintext { @@ -1869,7 +2271,8 @@ impl serde::Serialize for MemoPlaintext { if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintext", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintext", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -1885,11 +2288,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "return_address", - "returnAddress", - "text", - ]; + const FIELDS: &[&str] = &["return_address", "returnAddress", "text"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1907,7 +2306,10 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1935,8 +2337,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut return_address__ = None; let mut text__ = None; @@ -1965,7 +2367,11 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoPlaintext", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoPlaintext", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for MemoPlaintextView { @@ -1982,7 +2388,8 @@ impl serde::Serialize for MemoPlaintextView { if !self.text.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintextView", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintextView", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -1998,11 +2405,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "return_address", - "returnAddress", - "text", - ]; + const FIELDS: &[&str] = &["return_address", "returnAddress", "text"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2020,7 +2423,10 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2048,8 +2454,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut return_address__ = None; let mut text__ = None; @@ -2078,7 +2484,11 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoPlaintextView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoPlaintextView", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for MemoPlan { @@ -2095,14 +2505,16 @@ impl serde::Serialize for MemoPlan { if !self.key.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlan", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlan", len)?; if let Some(v) = self.plaintext.as_ref() { struct_ser.serialize_field("plaintext", v)?; } if !self.key.is_empty() { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + struct_ser + .serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; } struct_ser.end() } @@ -2113,10 +2525,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "plaintext", - "key", - ]; + const FIELDS: &[&str] = &["plaintext", "key"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2134,7 +2543,10 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2162,8 +2574,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut plaintext__ = None; let mut key__ = None; @@ -2179,9 +2591,10 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { if key__.is_some() { return Err(serde::de::Error::duplicate_field("key")); } - key__ = - Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) - ; + key__ = Some( + map_.next_value::<::pbjson::private::BytesDeserialize<_>>()? + .0, + ); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -2194,7 +2607,11 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoPlan", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for MemoView { @@ -2208,7 +2625,8 @@ impl serde::Serialize for MemoView { if self.memo_view.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoView", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoView", len)?; if let Some(v) = self.memo_view.as_ref() { match v { memo_view::MemoView::Visible(v) => { @@ -2228,10 +2646,7 @@ impl<'de> serde::Deserialize<'de> for MemoView { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "visible", - "opaque", - ]; + const FIELDS: &[&str] = &["visible", "opaque"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2249,7 +2664,10 @@ impl<'de> serde::Deserialize<'de> for MemoView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2277,8 +2695,8 @@ impl<'de> serde::Deserialize<'de> for MemoView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut memo_view__ = None; while let Some(k) = map_.next_key()? { @@ -2287,15 +2705,17 @@ impl<'de> serde::Deserialize<'de> for MemoView { if memo_view__.is_some() { return Err(serde::de::Error::duplicate_field("visible")); } - memo_view__ = map_.next_value::<::std::option::Option<_>>()?.map(memo_view::MemoView::Visible) -; + memo_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(memo_view::MemoView::Visible); } GeneratedField::Opaque => { if memo_view__.is_some() { return Err(serde::de::Error::duplicate_field("opaque")); } - memo_view__ = map_.next_value::<::std::option::Option<_>>()?.map(memo_view::MemoView::Opaque) -; + memo_view__ = map_ + .next_value::<::std::option::Option<_>>()? + .map(memo_view::MemoView::Opaque); } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -2307,7 +2727,11 @@ impl<'de> serde::Deserialize<'de> for MemoView { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoView", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for memo_view::Opaque { @@ -2321,7 +2745,8 @@ impl serde::Serialize for memo_view::Opaque { if self.ciphertext.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Opaque", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Opaque", len)?; if let Some(v) = self.ciphertext.as_ref() { struct_ser.serialize_field("ciphertext", v)?; } @@ -2334,9 +2759,7 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "ciphertext", - ]; + const FIELDS: &[&str] = &["ciphertext"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2353,7 +2776,10 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2380,8 +2806,8 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut ciphertext__ = None; while let Some(k) = map_.next_key()? { @@ -2402,7 +2828,11 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoView.Opaque", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoView.Opaque", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for memo_view::Visible { @@ -2419,7 +2849,8 @@ impl serde::Serialize for memo_view::Visible { if self.plaintext.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Visible", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Visible", len)?; if let Some(v) = self.ciphertext.as_ref() { struct_ser.serialize_field("ciphertext", v)?; } @@ -2435,10 +2866,7 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "ciphertext", - "plaintext", - ]; + const FIELDS: &[&str] = &["ciphertext", "plaintext"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2456,7 +2884,10 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2484,8 +2915,8 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut ciphertext__ = None; let mut plaintext__ = None; @@ -2514,7 +2945,11 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoView.Visible", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.MemoView.Visible", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for NullifierWithNote { @@ -2531,7 +2966,8 @@ impl serde::Serialize for NullifierWithNote { if self.note.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.NullifierWithNote", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.NullifierWithNote", len)?; if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; } @@ -2547,10 +2983,7 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "nullifier", - "note", - ]; + const FIELDS: &[&str] = &["nullifier", "note"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2568,7 +3001,10 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2596,8 +3032,8 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut nullifier__ = None; let mut note__ = None; @@ -2626,7 +3062,11 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.NullifierWithNote", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.NullifierWithNote", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for PayloadKeyWithCommitment { @@ -2643,7 +3083,8 @@ impl serde::Serialize for PayloadKeyWithCommitment { if self.commitment.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.PayloadKeyWithCommitment", len)?; + let mut struct_ser = serializer + .serialize_struct("penumbra.core.transaction.v1.PayloadKeyWithCommitment", len)?; if let Some(v) = self.payload_key.as_ref() { struct_ser.serialize_field("payloadKey", v)?; } @@ -2659,11 +3100,7 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "payload_key", - "payloadKey", - "commitment", - ]; + const FIELDS: &[&str] = &["payload_key", "payloadKey", "commitment"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2681,7 +3118,10 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2708,9 +3148,12 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { formatter.write_str("struct penumbra.core.transaction.v1.PayloadKeyWithCommitment") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut payload_key__ = None; let mut commitment__ = None; @@ -2739,7 +3182,11 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.PayloadKeyWithCommitment", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.PayloadKeyWithCommitment", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for Transaction { @@ -2759,7 +3206,8 @@ impl serde::Serialize for Transaction { if self.anchor.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.Transaction", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.Transaction", len)?; if let Some(v) = self.body.as_ref() { struct_ser.serialize_field("body", v)?; } @@ -2778,12 +3226,7 @@ impl<'de> serde::Deserialize<'de> for Transaction { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "body", - "binding_sig", - "bindingSig", - "anchor", - ]; + const FIELDS: &[&str] = &["body", "binding_sig", "bindingSig", "anchor"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2802,7 +3245,10 @@ impl<'de> serde::Deserialize<'de> for Transaction { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2831,8 +3277,8 @@ impl<'de> serde::Deserialize<'de> for Transaction { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut body__ = None; let mut binding_sig__ = None; @@ -2869,7 +3315,11 @@ impl<'de> serde::Deserialize<'de> for Transaction { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.Transaction", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.Transaction", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for TransactionBody { @@ -2892,7 +3342,8 @@ impl serde::Serialize for TransactionBody { if self.memo.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBody", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBody", len)?; if !self.actions.is_empty() { struct_ser.serialize_field("actions", &self.actions)?; } @@ -2941,7 +3392,10 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2952,7 +3406,9 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { { match value { "actions" => Ok(GeneratedField::Actions), - "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), + "transactionParameters" | "transaction_parameters" => { + Ok(GeneratedField::TransactionParameters) + } "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memo" => Ok(GeneratedField::Memo), _ => Ok(GeneratedField::__SkipField__), @@ -2971,8 +3427,8 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut actions__ = None; let mut transaction_parameters__ = None; @@ -2988,7 +3444,9 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } GeneratedField::TransactionParameters => { if transaction_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field("transactionParameters")); + return Err(serde::de::Error::duplicate_field( + "transactionParameters", + )); } transaction_parameters__ = map_.next_value()?; } @@ -3017,7 +3475,11 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionBody", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionBody", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for TransactionBodyView { @@ -3040,7 +3502,8 @@ impl serde::Serialize for TransactionBodyView { if self.memo_view.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBodyView", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBodyView", len)?; if !self.action_views.is_empty() { struct_ser.serialize_field("actionViews", &self.action_views)?; } @@ -3091,7 +3554,10 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3102,7 +3568,9 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { { match value { "actionViews" | "action_views" => Ok(GeneratedField::ActionViews), - "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), + "transactionParameters" | "transaction_parameters" => { + Ok(GeneratedField::TransactionParameters) + } "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memoView" | "memo_view" => Ok(GeneratedField::MemoView), _ => Ok(GeneratedField::__SkipField__), @@ -3121,8 +3589,8 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action_views__ = None; let mut transaction_parameters__ = None; @@ -3138,7 +3606,9 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { } GeneratedField::TransactionParameters => { if transaction_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field("transactionParameters")); + return Err(serde::de::Error::duplicate_field( + "transactionParameters", + )); } transaction_parameters__ = map_.next_value()?; } @@ -3167,7 +3637,11 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionBodyView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionBodyView", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for TransactionParameters { @@ -3187,11 +3661,15 @@ impl serde::Serialize for TransactionParameters { if self.fee.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionParameters", len)?; + let mut struct_ser = serializer + .serialize_struct("penumbra.core.transaction.v1.TransactionParameters", len)?; if self.expiry_height != 0 { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field("expiryHeight", ToString::to_string(&self.expiry_height).as_str())?; + struct_ser.serialize_field( + "expiryHeight", + ToString::to_string(&self.expiry_height).as_str(), + )?; } if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; @@ -3233,7 +3711,10 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3261,9 +3742,12 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { formatter.write_str("struct penumbra.core.transaction.v1.TransactionParameters") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut expiry_height__ = None; let mut chain_id__ = None; @@ -3274,9 +3758,10 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { if expiry_height__.is_some() { return Err(serde::de::Error::duplicate_field("expiryHeight")); } - expiry_height__ = - Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; + expiry_height__ = Some( + map_.next_value::<::pbjson::private::NumberDeserialize<_>>()? + .0, + ); } GeneratedField::ChainId => { if chain_id__.is_some() { @@ -3302,7 +3787,11 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionParameters", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionParameters", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for TransactionPerspective { @@ -3346,7 +3835,8 @@ impl serde::Serialize for TransactionPerspective { if !self.batch_swap_output_data.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPerspective", len)?; + let mut struct_ser = serializer + .serialize_struct("penumbra.core.transaction.v1.TransactionPerspective", len)?; if !self.payload_keys.is_empty() { struct_ser.serialize_field("payloadKeys", &self.payload_keys)?; } @@ -3372,10 +3862,16 @@ impl serde::Serialize for TransactionPerspective { struct_ser.serialize_field("extendedMetadata", &self.extended_metadata)?; } if !self.creation_transaction_ids_by_nullifier.is_empty() { - struct_ser.serialize_field("creationTransactionIdsByNullifier", &self.creation_transaction_ids_by_nullifier)?; + struct_ser.serialize_field( + "creationTransactionIdsByNullifier", + &self.creation_transaction_ids_by_nullifier, + )?; } if !self.nullification_transaction_ids_by_commitment.is_empty() { - struct_ser.serialize_field("nullificationTransactionIdsByCommitment", &self.nullification_transaction_ids_by_commitment)?; + struct_ser.serialize_field( + "nullificationTransactionIdsByCommitment", + &self.nullification_transaction_ids_by_commitment, + )?; } if !self.batch_swap_output_data.is_empty() { struct_ser.serialize_field("batchSwapOutputData", &self.batch_swap_output_data)?; @@ -3437,7 +3933,10 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3448,16 +3947,28 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { { match value { "payloadKeys" | "payload_keys" => Ok(GeneratedField::PayloadKeys), - "spendNullifiers" | "spend_nullifiers" => Ok(GeneratedField::SpendNullifiers), + "spendNullifiers" | "spend_nullifiers" => { + Ok(GeneratedField::SpendNullifiers) + } "adviceNotes" | "advice_notes" => Ok(GeneratedField::AdviceNotes), "addressViews" | "address_views" => Ok(GeneratedField::AddressViews), "denoms" => Ok(GeneratedField::Denoms), "transactionId" | "transaction_id" => Ok(GeneratedField::TransactionId), "prices" => Ok(GeneratedField::Prices), - "extendedMetadata" | "extended_metadata" => Ok(GeneratedField::ExtendedMetadata), - "creationTransactionIdsByNullifier" | "creation_transaction_ids_by_nullifier" => Ok(GeneratedField::CreationTransactionIdsByNullifier), - "nullificationTransactionIdsByCommitment" | "nullification_transaction_ids_by_commitment" => Ok(GeneratedField::NullificationTransactionIdsByCommitment), - "batchSwapOutputData" | "batch_swap_output_data" => Ok(GeneratedField::BatchSwapOutputData), + "extendedMetadata" | "extended_metadata" => { + Ok(GeneratedField::ExtendedMetadata) + } + "creationTransactionIdsByNullifier" + | "creation_transaction_ids_by_nullifier" => { + Ok(GeneratedField::CreationTransactionIdsByNullifier) + } + "nullificationTransactionIdsByCommitment" + | "nullification_transaction_ids_by_commitment" => { + Ok(GeneratedField::NullificationTransactionIdsByCommitment) + } + "batchSwapOutputData" | "batch_swap_output_data" => { + Ok(GeneratedField::BatchSwapOutputData) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -3473,9 +3984,12 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut payload_keys__ = None; let mut spend_nullifiers__ = None; @@ -3540,19 +4054,26 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { } GeneratedField::CreationTransactionIdsByNullifier => { if creation_transaction_ids_by_nullifier__.is_some() { - return Err(serde::de::Error::duplicate_field("creationTransactionIdsByNullifier")); + return Err(serde::de::Error::duplicate_field( + "creationTransactionIdsByNullifier", + )); } creation_transaction_ids_by_nullifier__ = Some(map_.next_value()?); } GeneratedField::NullificationTransactionIdsByCommitment => { if nullification_transaction_ids_by_commitment__.is_some() { - return Err(serde::de::Error::duplicate_field("nullificationTransactionIdsByCommitment")); + return Err(serde::de::Error::duplicate_field( + "nullificationTransactionIdsByCommitment", + )); } - nullification_transaction_ids_by_commitment__ = Some(map_.next_value()?); + nullification_transaction_ids_by_commitment__ = + Some(map_.next_value()?); } GeneratedField::BatchSwapOutputData => { if batch_swap_output_data__.is_some() { - return Err(serde::de::Error::duplicate_field("batchSwapOutputData")); + return Err(serde::de::Error::duplicate_field( + "batchSwapOutputData", + )); } batch_swap_output_data__ = Some(map_.next_value()?); } @@ -3570,13 +4091,19 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { transaction_id: transaction_id__, prices: prices__.unwrap_or_default(), extended_metadata: extended_metadata__.unwrap_or_default(), - creation_transaction_ids_by_nullifier: creation_transaction_ids_by_nullifier__.unwrap_or_default(), - nullification_transaction_ids_by_commitment: nullification_transaction_ids_by_commitment__.unwrap_or_default(), + creation_transaction_ids_by_nullifier: creation_transaction_ids_by_nullifier__ + .unwrap_or_default(), + nullification_transaction_ids_by_commitment: + nullification_transaction_ids_by_commitment__.unwrap_or_default(), batch_swap_output_data: batch_swap_output_data__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionPerspective", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for transaction_perspective::CreationTransactionIdByNullifier { @@ -3593,7 +4120,10 @@ impl serde::Serialize for transaction_perspective::CreationTransactionIdByNullif if self.transaction_id.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", len)?; + let mut struct_ser = serializer.serialize_struct( + "penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", + len, + )?; if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; } @@ -3609,11 +4139,7 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "nullifier", - "transaction_id", - "transactionId", - ]; + const FIELDS: &[&str] = &["nullifier", "transaction_id", "transactionId"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -3631,7 +4157,10 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3658,9 +4187,15 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result< + transaction_perspective::CreationTransactionIdByNullifier, + V::Error, + > + where + V: serde::de::MapAccess<'de>, { let mut nullifier__ = None; let mut transaction_id__ = None; @@ -3689,7 +4224,11 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for transaction_perspective::ExtendedMetadataById { @@ -3706,7 +4245,10 @@ impl serde::Serialize for transaction_perspective::ExtendedMetadataById { if self.extended_metadata.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", len)?; + let mut struct_ser = serializer.serialize_struct( + "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", + len, + )?; if let Some(v) = self.asset_id.as_ref() { struct_ser.serialize_field("assetId", v)?; } @@ -3745,7 +4287,10 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3756,7 +4301,9 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB { match value { "assetId" | "asset_id" => Ok(GeneratedField::AssetId), - "extendedMetadata" | "extended_metadata" => Ok(GeneratedField::ExtendedMetadata), + "extendedMetadata" | "extended_metadata" => { + Ok(GeneratedField::ExtendedMetadata) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -3772,9 +4319,12 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut asset_id__ = None; let mut extended_metadata__ = None; @@ -3803,7 +4353,11 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for transaction_perspective::NullificationTransactionIdByCommitment { @@ -3830,17 +4384,15 @@ impl serde::Serialize for transaction_perspective::NullificationTransactionIdByC struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for transaction_perspective::NullificationTransactionIdByCommitment { +impl<'de> serde::Deserialize<'de> + for transaction_perspective::NullificationTransactionIdByCommitment +{ #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "commitment", - "transaction_id", - "transactionId", - ]; + const FIELDS: &[&str] = &["commitment", "transaction_id", "transactionId"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -3858,7 +4410,10 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::NullificationTran impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3885,9 +4440,15 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::NullificationTran formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective.NullificationTransactionIdByCommitment") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result< + transaction_perspective::NullificationTransactionIdByCommitment, + V::Error, + > + where + V: serde::de::MapAccess<'de>, { let mut commitment__ = None; let mut transaction_id__ = None; @@ -3910,10 +4471,12 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::NullificationTran } } } - Ok(transaction_perspective::NullificationTransactionIdByCommitment { - commitment: commitment__, - transaction_id: transaction_id__, - }) + Ok( + transaction_perspective::NullificationTransactionIdByCommitment { + commitment: commitment__, + transaction_id: transaction_id__, + }, + ) } } deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective.NullificationTransactionIdByCommitment", FIELDS, GeneratedVisitor) @@ -3939,7 +4502,8 @@ impl serde::Serialize for TransactionPlan { if self.memo.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPlan", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPlan", len)?; if !self.actions.is_empty() { struct_ser.serialize_field("actions", &self.actions)?; } @@ -3988,7 +4552,10 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3999,7 +4566,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { { match value { "actions" => Ok(GeneratedField::Actions), - "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), + "transactionParameters" | "transaction_parameters" => { + Ok(GeneratedField::TransactionParameters) + } "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memo" => Ok(GeneratedField::Memo), _ => Ok(GeneratedField::__SkipField__), @@ -4018,8 +4587,8 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut actions__ = None; let mut transaction_parameters__ = None; @@ -4035,7 +4604,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } GeneratedField::TransactionParameters => { if transaction_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field("transactionParameters")); + return Err(serde::de::Error::duplicate_field( + "transactionParameters", + )); } transaction_parameters__ = map_.next_value()?; } @@ -4064,7 +4635,11 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPlan", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionPlan", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for TransactionSummary { @@ -4078,7 +4653,8 @@ impl serde::Serialize for TransactionSummary { if !self.effects.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionSummary", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.TransactionSummary", len)?; if !self.effects.is_empty() { struct_ser.serialize_field("effects", &self.effects)?; } @@ -4091,9 +4667,7 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "effects", - ]; + const FIELDS: &[&str] = &["effects"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4110,7 +4684,10 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4137,8 +4714,8 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut effects__ = None; while let Some(k) = map_.next_key()? { @@ -4159,7 +4736,11 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionSummary", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionSummary", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for transaction_summary::Effects { @@ -4176,7 +4757,10 @@ impl serde::Serialize for transaction_summary::Effects { if self.balance.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionSummary.Effects", len)?; + let mut struct_ser = serializer.serialize_struct( + "penumbra.core.transaction.v1.TransactionSummary.Effects", + len, + )?; if let Some(v) = self.address.as_ref() { struct_ser.serialize_field("address", v)?; } @@ -4192,10 +4776,7 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "address", - "balance", - ]; + const FIELDS: &[&str] = &["address", "balance"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4213,7 +4794,10 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4237,12 +4821,16 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { type Value = transaction_summary::Effects; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1.TransactionSummary.Effects") + formatter + .write_str("struct penumbra.core.transaction.v1.TransactionSummary.Effects") } - fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map( + self, + mut map_: V, + ) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut address__ = None; let mut balance__ = None; @@ -4271,7 +4859,11 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionSummary.Effects", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionSummary.Effects", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for TransactionView { @@ -4291,7 +4883,8 @@ impl serde::Serialize for TransactionView { if self.anchor.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionView", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.TransactionView", len)?; if let Some(v) = self.body_view.as_ref() { struct_ser.serialize_field("bodyView", v)?; } @@ -4335,7 +4928,10 @@ impl<'de> serde::Deserialize<'de> for TransactionView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4364,8 +4960,8 @@ impl<'de> serde::Deserialize<'de> for TransactionView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut body_view__ = None; let mut binding_sig__ = None; @@ -4402,7 +4998,11 @@ impl<'de> serde::Deserialize<'de> for TransactionView { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionView", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.TransactionView", + FIELDS, + GeneratedVisitor, + ) } } impl serde::Serialize for WitnessData { @@ -4419,7 +5019,8 @@ impl serde::Serialize for WitnessData { if !self.state_commitment_proofs.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.WitnessData", len)?; + let mut struct_ser = + serializer.serialize_struct("penumbra.core.transaction.v1.WitnessData", len)?; if let Some(v) = self.anchor.as_ref() { struct_ser.serialize_field("anchor", v)?; } @@ -4435,11 +5036,7 @@ impl<'de> serde::Deserialize<'de> for WitnessData { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &[ - "anchor", - "state_commitment_proofs", - "stateCommitmentProofs", - ]; + const FIELDS: &[&str] = &["anchor", "state_commitment_proofs", "stateCommitmentProofs"]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4457,7 +5054,10 @@ impl<'de> serde::Deserialize<'de> for WitnessData { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn expecting( + &self, + formatter: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4468,7 +5068,9 @@ impl<'de> serde::Deserialize<'de> for WitnessData { { match value { "anchor" => Ok(GeneratedField::Anchor), - "stateCommitmentProofs" | "state_commitment_proofs" => Ok(GeneratedField::StateCommitmentProofs), + "stateCommitmentProofs" | "state_commitment_proofs" => { + Ok(GeneratedField::StateCommitmentProofs) + } _ => Ok(GeneratedField::__SkipField__), } } @@ -4485,8 +5087,8 @@ impl<'de> serde::Deserialize<'de> for WitnessData { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut anchor__ = None; let mut state_commitment_proofs__ = None; @@ -4500,7 +5102,9 @@ impl<'de> serde::Deserialize<'de> for WitnessData { } GeneratedField::StateCommitmentProofs => { if state_commitment_proofs__.is_some() { - return Err(serde::de::Error::duplicate_field("stateCommitmentProofs")); + return Err(serde::de::Error::duplicate_field( + "stateCommitmentProofs", + )); } state_commitment_proofs__ = Some(map_.next_value()?); } @@ -4515,6 +5119,10 @@ impl<'de> serde::Deserialize<'de> for WitnessData { }) } } - deserializer.deserialize_struct("penumbra.core.transaction.v1.WitnessData", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct( + "penumbra.core.transaction.v1.WitnessData", + FIELDS, + GeneratedVisitor, + ) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index f613403ab9be6e66c341fd681cd9f41366432053..d10fd2aa82043e666a4534d3f972175b24e303aa 100644 GIT binary patch delta 23892 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 delta 21127 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 diff --git a/proto/penumbra/penumbra/core/transaction/v1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1/transaction.proto index beffedd441..0ad1e025d3 100644 --- a/proto/penumbra/penumbra/core/transaction/v1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1/transaction.proto @@ -391,3 +391,9 @@ message MemoView { Opaque opaque = 2; } } + +// Event emitted when a transaction is included in a block +message EventBlockTransaction { + txhash.v1.TransactionId transaction_id = 1; + Transaction transaction = 2; +} From 1972203097bc7416b6b4b14c37a41656f87286d3 Mon Sep 17 00:00:00 2001 From: Atris Date: Tue, 18 Feb 2025 20:27:52 +0100 Subject: [PATCH 4/8] feat: move transaction recording into the transaction action handler txs are now correctly written into the cometbft raw events db --- crates/core/app/src/action_handler/transaction.rs | 9 +++++++-- crates/core/app/src/app/mod.rs | 7 +------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index 0a4b6a6cb1..d269d2fb12 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -1,17 +1,18 @@ use std::sync::Arc; +use super::AppActionHandler; use anyhow::Result; use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; use penumbra_sdk_fee::component::FeePay as _; +use penumbra_sdk_proto::core::transaction::v1::EventBlockTransaction; +use penumbra_sdk_proto::StateWriteProto; use penumbra_sdk_sct::{component::source::SourceContext, CommitmentSource}; use penumbra_sdk_shielded_pool::component::ClueManager; use penumbra_sdk_transaction::{gas::GasCost as _, Transaction}; use tokio::task::JoinSet; use tracing::{instrument, Instrument}; -use super::AppActionHandler; - mod stateful; mod stateless; @@ -117,6 +118,10 @@ impl AppActionHandler for Transaction { let gas_used = self.gas_cost(); let fee = self.transaction_body.transaction_parameters.fee; state.pay_fee(gas_used, fee).await?; + state.record_proto(EventBlockTransaction { + transaction_id: Some(self.id().into()), + transaction: Some(self.into()), + }); for (i, action) in self.actions().enumerate() { let span = action.create_span(i); diff --git a/crates/core/app/src/app/mod.rs b/crates/core/app/src/app/mod.rs index cfe062c1b6..044c811d15 100644 --- a/crates/core/app/src/app/mod.rs +++ b/crates/core/app/src/app/mod.rs @@ -22,7 +22,7 @@ use penumbra_sdk_governance::component::{Governance, StateReadExt as _, StateWri use penumbra_sdk_ibc::component::{Ibc, StateWriteExt as _}; use penumbra_sdk_ibc::StateReadExt as _; use penumbra_sdk_proto::core::app::v1::TransactionsByHeightResponse; -use penumbra_sdk_proto::{DomainType, StateWriteProto}; +use penumbra_sdk_proto::DomainType; use penumbra_sdk_sct::component::clock::EpochRead; use penumbra_sdk_sct::component::sct::Sct; use penumbra_sdk_sct::component::{StateReadExt as _, StateWriteExt as _}; @@ -40,7 +40,6 @@ use crate::genesis::AppState; use crate::params::change::ParameterChangeExt as _; use crate::params::AppParameters; use crate::{CommunityPoolStateReadExt, PenumbraHost}; -use penumbra_sdk_proto::core::transaction::v1::EventBlockTransaction; use tendermint::v0_37::abci::{request, response}; use tendermint::validator::Update; use tokio::time::sleep; @@ -451,10 +450,6 @@ impl App { .put_block_transaction(height, transaction.into()) .await .context("storing transactions")?; - state_tx.record_proto(EventBlockTransaction { - transaction_id: Some(tx.id().into()), - transaction: Some(Arc::as_ref(&tx).clone().into()), - }); tx.check_and_execute(&mut state_tx) .await From 2f31c7b78b3e926c86b5912613a13dfd29e4d1d4 Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Tue, 18 Feb 2025 16:37:50 -0800 Subject: [PATCH 5/8] Back out "feat: move transaction recording into the transaction action handler" This backs out commit 1972203097bc7416b6b4b14c37a41656f87286d3. --- crates/core/app/src/action_handler/transaction.rs | 9 ++------- crates/core/app/src/app/mod.rs | 7 ++++++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/crates/core/app/src/action_handler/transaction.rs b/crates/core/app/src/action_handler/transaction.rs index d269d2fb12..0a4b6a6cb1 100644 --- a/crates/core/app/src/action_handler/transaction.rs +++ b/crates/core/app/src/action_handler/transaction.rs @@ -1,18 +1,17 @@ use std::sync::Arc; -use super::AppActionHandler; use anyhow::Result; use async_trait::async_trait; use cnidarium::{StateRead, StateWrite}; use penumbra_sdk_fee::component::FeePay as _; -use penumbra_sdk_proto::core::transaction::v1::EventBlockTransaction; -use penumbra_sdk_proto::StateWriteProto; use penumbra_sdk_sct::{component::source::SourceContext, CommitmentSource}; use penumbra_sdk_shielded_pool::component::ClueManager; use penumbra_sdk_transaction::{gas::GasCost as _, Transaction}; use tokio::task::JoinSet; use tracing::{instrument, Instrument}; +use super::AppActionHandler; + mod stateful; mod stateless; @@ -118,10 +117,6 @@ impl AppActionHandler for Transaction { let gas_used = self.gas_cost(); let fee = self.transaction_body.transaction_parameters.fee; state.pay_fee(gas_used, fee).await?; - state.record_proto(EventBlockTransaction { - transaction_id: Some(self.id().into()), - transaction: Some(self.into()), - }); for (i, action) in self.actions().enumerate() { let span = action.create_span(i); diff --git a/crates/core/app/src/app/mod.rs b/crates/core/app/src/app/mod.rs index 044c811d15..cfe062c1b6 100644 --- a/crates/core/app/src/app/mod.rs +++ b/crates/core/app/src/app/mod.rs @@ -22,7 +22,7 @@ use penumbra_sdk_governance::component::{Governance, StateReadExt as _, StateWri use penumbra_sdk_ibc::component::{Ibc, StateWriteExt as _}; use penumbra_sdk_ibc::StateReadExt as _; use penumbra_sdk_proto::core::app::v1::TransactionsByHeightResponse; -use penumbra_sdk_proto::DomainType; +use penumbra_sdk_proto::{DomainType, StateWriteProto}; use penumbra_sdk_sct::component::clock::EpochRead; use penumbra_sdk_sct::component::sct::Sct; use penumbra_sdk_sct::component::{StateReadExt as _, StateWriteExt as _}; @@ -40,6 +40,7 @@ use crate::genesis::AppState; use crate::params::change::ParameterChangeExt as _; use crate::params::AppParameters; use crate::{CommunityPoolStateReadExt, PenumbraHost}; +use penumbra_sdk_proto::core::transaction::v1::EventBlockTransaction; use tendermint::v0_37::abci::{request, response}; use tendermint::validator::Update; use tokio::time::sleep; @@ -450,6 +451,10 @@ impl App { .put_block_transaction(height, transaction.into()) .await .context("storing transactions")?; + state_tx.record_proto(EventBlockTransaction { + transaction_id: Some(tx.id().into()), + transaction: Some(Arc::as_ref(&tx).clone().into()), + }); tx.check_and_execute(&mut state_tx) .await From d3a677d875300ca15b14545d832ee079658f048c Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Tue, 18 Feb 2025 16:37:50 -0800 Subject: [PATCH 6/8] Back out "feat: record tx bytes into db" This backs out commit bfcc82ac99347dafe60a4afb2b849063082e2652. --- crates/bin/pindexer/src/dex_ex/mod.rs | 28 +- crates/core/app/src/app/mod.rs | 16 +- crates/core/component/dex/src/event.rs | 19 +- .../src/gen/penumbra.core.transaction.v1.rs | 183 +- .../gen/penumbra.core.transaction.v1.serde.rs | 1630 ++++++----------- .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 646752 -> 643798 bytes .../core/transaction/v1/transaction.proto | 6 - 7 files changed, 649 insertions(+), 1233 deletions(-) diff --git a/crates/bin/pindexer/src/dex_ex/mod.rs b/crates/bin/pindexer/src/dex_ex/mod.rs index 55ed5bfde2..10ecd06dbb 100644 --- a/crates/bin/pindexer/src/dex_ex/mod.rs +++ b/crates/bin/pindexer/src/dex_ex/mod.rs @@ -20,7 +20,6 @@ use penumbra_sdk_dex::{ use penumbra_sdk_num::Amount; use penumbra_sdk_proto::event::EventDomainType; use penumbra_sdk_proto::DomainType; -use penumbra_sdk_proto::Message; use penumbra_sdk_sct::event::EventBlockRoot; use sqlx::types::BigDecimal; use sqlx::{prelude::Type, Row}; @@ -242,8 +241,6 @@ mod candle { } } pub use candle::{Candle, Window, WindowedCandle}; -use penumbra_sdk_dex::event::EventBlockTransaction; -use penumbra_sdk_proto::core::transaction::v1::Transaction; mod price_chart { use super::*; @@ -707,7 +704,7 @@ struct Events { position_close_txs: BTreeMap, position_withdrawal_txs: BTreeMap, // Track transactions - transactions: HashMap, Transaction>, + transactions: HashMap, } impl Events { @@ -895,8 +892,7 @@ impl Events { .or_insert_with(Vec::new) .push(e); } else if let Ok(e) = EventBlockTransaction::try_from_event(&event.event) { - out.transactions - .insert(e.transaction_id.0.to_vec(), e.transaction); + out.transactions.insert(e.transaction_id, e.transaction); } } Ok(out) @@ -1412,12 +1408,9 @@ impl Component { dbtx: &mut PgTransaction<'_>, time: DateTime, height: i32, - transaction_id: Option<[u8; 32]>, + transaction_id: TransactionId, transaction: Transaction, ) -> anyhow::Result<()> { - // Serialize the transaction to bytes using prost - let transaction_bytes = transaction.encode_to_vec(); - sqlx::query( "INSERT INTO dex_ex_transactions ( transaction_id, @@ -1426,8 +1419,8 @@ impl Component { time ) VALUES ($1, $2, $3, $4)", ) - .bind(transaction_id.map(|id| id.as_ref().to_vec())) - .bind(transaction_bytes) + .bind(transaction_id) + .bind(transaction) .bind(height) .bind(time) .execute(dbtx.as_mut()) @@ -1515,15 +1508,8 @@ impl AppView for Component { // Record transactions for (transaction_id, transaction) in &events.transactions { - let tx_id_bytes: [u8; 32] = transaction_id.as_slice().try_into()?; - self.record_transaction( - dbtx, - time, - events.height, - Some(tx_id_bytes), - transaction.clone(), - ) - .await?; + self.record_transaction(dbtx, time, events.height, transaction_id, transaction) + .await?; } for (pair, candle) in &events.candles { diff --git a/crates/core/app/src/app/mod.rs b/crates/core/app/src/app/mod.rs index cfe062c1b6..db113e46e2 100644 --- a/crates/core/app/src/app/mod.rs +++ b/crates/core/app/src/app/mod.rs @@ -22,7 +22,7 @@ use penumbra_sdk_governance::component::{Governance, StateReadExt as _, StateWri use penumbra_sdk_ibc::component::{Ibc, StateWriteExt as _}; use penumbra_sdk_ibc::StateReadExt as _; use penumbra_sdk_proto::core::app::v1::TransactionsByHeightResponse; -use penumbra_sdk_proto::{DomainType, StateWriteProto}; +use penumbra_sdk_proto::DomainType; use penumbra_sdk_sct::component::clock::EpochRead; use penumbra_sdk_sct::component::sct::Sct; use penumbra_sdk_sct::component::{StateReadExt as _, StateWriteExt as _}; @@ -35,16 +35,16 @@ use penumbra_sdk_transaction::Transaction; use prost::Message as _; use tendermint::abci::{self, Event}; +use tendermint::v0_37::abci::{request, response}; +use tendermint::validator::Update; +use tokio::time::sleep; +use tracing::{instrument, Instrument}; + use crate::action_handler::AppActionHandler; use crate::genesis::AppState; use crate::params::change::ParameterChangeExt as _; use crate::params::AppParameters; use crate::{CommunityPoolStateReadExt, PenumbraHost}; -use penumbra_sdk_proto::core::transaction::v1::EventBlockTransaction; -use tendermint::v0_37::abci::{request, response}; -use tendermint::validator::Update; -use tokio::time::sleep; -use tracing::{instrument, Instrument}; pub mod state_key; @@ -451,10 +451,6 @@ impl App { .put_block_transaction(height, transaction.into()) .await .context("storing transactions")?; - state_tx.record_proto(EventBlockTransaction { - transaction_id: Some(tx.id().into()), - transaction: Some(Arc::as_ref(&tx).clone().into()), - }); tx.check_and_execute(&mut state_tx) .await diff --git a/crates/core/component/dex/src/event.rs b/crates/core/component/dex/src/event.rs index cd8eb9f63d..b8ba02677a 100644 --- a/crates/core/component/dex/src/event.rs +++ b/crates/core/component/dex/src/event.rs @@ -7,14 +7,9 @@ use crate::{ use anyhow::{anyhow, Context}; use penumbra_sdk_asset::asset; use penumbra_sdk_num::Amount; -use penumbra_sdk_proto::core::transaction::v1::Transaction; -use penumbra_sdk_proto::{ - penumbra::core::{component::dex::v1 as pb, transaction::v1 as pb_tx}, - DomainType, -}; +use penumbra_sdk_proto::{penumbra::core::component::dex::v1 as pb, DomainType}; use penumbra_sdk_sct::Nullifier; use penumbra_sdk_tct::StateCommitment; -use penumbra_sdk_txhash::TransactionId; use prost::Name as _; #[derive(Clone, Debug)] @@ -673,11 +668,11 @@ pub struct EventBlockTransaction { pub transaction: Transaction, } -impl TryFrom for EventBlockTransaction { +impl TryFrom for EventBlockTransaction { type Error = anyhow::Error; - fn try_from(value: pb_tx::EventBlockTransaction) -> Result { - fn inner(value: pb_tx::EventBlockTransaction) -> anyhow::Result { + fn try_from(value: pb::EventBlockTransaction) -> Result { + fn inner(value: pb::EventBlockTransaction) -> anyhow::Result { Ok(EventBlockTransaction { transaction_id: value .transaction_id @@ -689,11 +684,11 @@ impl TryFrom for EventBlockTransaction { .try_into()?, }) } - inner(value).context(format!("parsing {}", pb_tx::EventBlockTransaction::NAME)) + inner(value).context(format!("parsing {}", pb::EventBlockTransaction::NAME)) } } -impl From for pb_tx::EventBlockTransaction { +impl From for pb::EventBlockTransaction { fn from(value: EventBlockTransaction) -> Self { Self { transaction_id: Some(value.transaction_id.into()), @@ -703,5 +698,5 @@ impl From for pb_tx::EventBlockTransaction { } impl DomainType for EventBlockTransaction { - type Proto = pb_tx::EventBlockTransaction; + type Proto = pb::EventBlockTransaction; } diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1.rs b/crates/proto/src/gen/penumbra.core.transaction.v1.rs index 9c9e16f51b..2295d26332 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1.rs @@ -6,8 +6,9 @@ pub struct Transaction { pub body: ::core::option::Option, /// The binding signature is stored separately from the transaction body that it signs. #[prost(message, optional, tag = "2")] - pub binding_sig: - ::core::option::Option, + pub binding_sig: ::core::option::Option< + super::super::super::crypto::decaf377_rdsa::v1::BindingSignature, + >, /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] @@ -119,7 +120,9 @@ impl ::prost::Name for TransactionSummary { pub struct DetectionData { /// A list of clues for use with Fuzzy Message Detection. #[prost(message, repeated, tag = "4")] - pub fmd_clues: ::prost::alloc::vec::Vec, + pub fmd_clues: ::prost::alloc::vec::Vec< + super::super::super::crypto::decaf377_fmd::v1::Clue, + >, } impl ::prost::Name for DetectionData { const NAME: &'static str = "DetectionData"; @@ -154,20 +157,26 @@ pub mod action { #[prost(message, tag = "4")] SwapClaim(super::super::super::component::dex::v1::SwapClaim), #[prost(message, tag = "16")] - ValidatorDefinition(super::super::super::component::stake::v1::ValidatorDefinition), + ValidatorDefinition( + super::super::super::component::stake::v1::ValidatorDefinition, + ), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay), /// Governance: #[prost(message, tag = "18")] ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw(super::super::super::component::governance::v1::ProposalWithdraw), + ProposalWithdraw( + super::super::super::component::governance::v1::ProposalWithdraw, + ), #[prost(message, tag = "20")] ValidatorVote(super::super::super::component::governance::v1::ValidatorVote), #[prost(message, tag = "21")] DelegatorVote(super::super::super::component::governance::v1::DelegatorVote), #[prost(message, tag = "22")] - ProposalDepositClaim(super::super::super::component::governance::v1::ProposalDepositClaim), + ProposalDepositClaim( + super::super::super::component::governance::v1::ProposalDepositClaim, + ), /// Positions #[prost(message, tag = "30")] PositionOpen(super::super::super::component::dex::v1::PositionOpen), @@ -176,7 +185,9 @@ pub mod action { #[prost(message, tag = "32")] PositionWithdraw(super::super::super::component::dex::v1::PositionWithdraw), #[prost(message, tag = "34")] - PositionRewardClaim(super::super::super::component::dex::v1::PositionRewardClaim), + PositionRewardClaim( + super::super::super::component::dex::v1::PositionRewardClaim, + ), /// (un)delegation #[prost(message, tag = "40")] Delegate(super::super::super::component::stake::v1::Delegate), @@ -186,18 +197,26 @@ pub mod action { UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaim), /// Community Pool #[prost(message, tag = "50")] - CommunityPoolSpend(super::super::super::component::governance::v1::CommunityPoolSpend), + CommunityPoolSpend( + super::super::super::component::governance::v1::CommunityPoolSpend, + ), #[prost(message, tag = "51")] - CommunityPoolOutput(super::super::super::component::governance::v1::CommunityPoolOutput), + CommunityPoolOutput( + super::super::super::component::governance::v1::CommunityPoolOutput, + ), #[prost(message, tag = "52")] - CommunityPoolDeposit(super::super::super::component::governance::v1::CommunityPoolDeposit), + CommunityPoolDeposit( + super::super::super::component::governance::v1::CommunityPoolDeposit, + ), /// Dutch auctions #[prost(message, tag = "53")] ActionDutchAuctionSchedule( super::super::super::component::auction::v1::ActionDutchAuctionSchedule, ), #[prost(message, tag = "54")] - ActionDutchAuctionEnd(super::super::super::component::auction::v1::ActionDutchAuctionEnd), + ActionDutchAuctionEnd( + super::super::super::component::auction::v1::ActionDutchAuctionEnd, + ), #[prost(message, tag = "55")] ActionDutchAuctionWithdraw( super::super::super::component::auction::v1::ActionDutchAuctionWithdraw, @@ -227,7 +246,9 @@ pub struct TransactionPerspective { /// The openings of note commitments referred to in the transaction /// but not included in the transaction. #[prost(message, repeated, tag = "3")] - pub advice_notes: ::prost::alloc::vec::Vec, + pub advice_notes: ::prost::alloc::vec::Vec< + super::super::component::shielded_pool::v1::Note, + >, /// Any relevant address views. #[prost(message, repeated, tag = "4")] pub address_views: ::prost::alloc::vec::Vec, @@ -242,19 +263,24 @@ pub struct TransactionPerspective { pub prices: ::prost::alloc::vec::Vec, /// Any relevant extended metadata, indexed by asset id. #[prost(message, repeated, tag = "30")] - pub extended_metadata: ::prost::alloc::vec::Vec, + pub extended_metadata: ::prost::alloc::vec::Vec< + transaction_perspective::ExtendedMetadataById, + >, #[prost(message, repeated, tag = "40")] - pub creation_transaction_ids_by_nullifier: - ::prost::alloc::vec::Vec, + pub creation_transaction_ids_by_nullifier: ::prost::alloc::vec::Vec< + transaction_perspective::CreationTransactionIdByNullifier, + >, #[prost(message, repeated, tag = "50")] - pub nullification_transaction_ids_by_commitment: - ::prost::alloc::vec::Vec, + pub nullification_transaction_ids_by_commitment: ::prost::alloc::vec::Vec< + transaction_perspective::NullificationTransactionIdByCommitment, + >, /// Any relevant BatchSwapOutputData to the transaction. /// /// This can be used to fill in information about swap outputs. #[prost(message, repeated, tag = "60")] - pub batch_swap_output_data: - ::prost::alloc::vec::Vec, + pub batch_swap_output_data: ::prost::alloc::vec::Vec< + super::super::component::dex::v1::BatchSwapOutputData, + >, } /// Nested message and enum types in `TransactionPerspective`. pub mod transaction_perspective { @@ -269,10 +295,12 @@ pub mod transaction_perspective { const NAME: &'static str = "ExtendedMetadataById"; const PACKAGE: &'static str = "penumbra.core.transaction.v1"; fn full_name() -> ::prost::alloc::string::String { - "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById".into() + "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById" + .into() } fn type_url() -> ::prost::alloc::string::String { - "/penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById".into() + "/penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById" + .into() } } /// Associates a nullifier with the transaction ID that created the nullified state commitment. @@ -283,9 +311,13 @@ pub mod transaction_perspective { #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreationTransactionIdByNullifier { #[prost(message, optional, tag = "1")] - pub nullifier: ::core::option::Option, + pub nullifier: ::core::option::Option< + super::super::super::component::sct::v1::Nullifier, + >, #[prost(message, optional, tag = "2")] - pub transaction_id: ::core::option::Option, + pub transaction_id: ::core::option::Option< + super::super::super::txhash::v1::TransactionId, + >, } impl ::prost::Name for CreationTransactionIdByNullifier { const NAME: &'static str = "CreationTransactionIdByNullifier"; @@ -305,10 +337,13 @@ pub mod transaction_perspective { #[derive(Clone, PartialEq, ::prost::Message)] pub struct NullificationTransactionIdByCommitment { #[prost(message, optional, tag = "1")] - pub commitment: - ::core::option::Option, + pub commitment: ::core::option::Option< + super::super::super::super::crypto::tct::v1::StateCommitment, + >, #[prost(message, optional, tag = "2")] - pub transaction_id: ::core::option::Option, + pub transaction_id: ::core::option::Option< + super::super::super::txhash::v1::TransactionId, + >, } impl ::prost::Name for NullificationTransactionIdByCommitment { const NAME: &'static str = "NullificationTransactionIdByCommitment"; @@ -338,7 +373,9 @@ pub struct PayloadKeyWithCommitment { #[prost(message, optional, tag = "1")] pub payload_key: ::core::option::Option, #[prost(message, optional, tag = "2")] - pub commitment: ::core::option::Option, + pub commitment: ::core::option::Option< + super::super::super::crypto::tct::v1::StateCommitment, + >, } impl ::prost::Name for PayloadKeyWithCommitment { const NAME: &'static str = "PayloadKeyWithCommitment"; @@ -375,8 +412,9 @@ pub struct TransactionView { pub body_view: ::core::option::Option, /// The binding signature is stored separately from the transaction body that it signs. #[prost(message, optional, tag = "2")] - pub binding_sig: - ::core::option::Option, + pub binding_sig: ::core::option::Option< + super::super::super::crypto::decaf377_rdsa::v1::BindingSignature, + >, /// The root of some previous state of the state commitment tree, used as an anchor for all /// ZK state transition proofs. #[prost(message, optional, tag = "3")] @@ -445,18 +483,24 @@ pub mod action_view { DelegatorVote(super::super::super::component::governance::v1::DelegatorVoteView), /// Action types without visible/opaque variants #[prost(message, tag = "16")] - ValidatorDefinition(super::super::super::component::stake::v1::ValidatorDefinition), + ValidatorDefinition( + super::super::super::component::stake::v1::ValidatorDefinition, + ), #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay), /// Governance: #[prost(message, tag = "18")] ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw(super::super::super::component::governance::v1::ProposalWithdraw), + ProposalWithdraw( + super::super::super::component::governance::v1::ProposalWithdraw, + ), #[prost(message, tag = "20")] ValidatorVote(super::super::super::component::governance::v1::ValidatorVote), #[prost(message, tag = "22")] - ProposalDepositClaim(super::super::super::component::governance::v1::ProposalDepositClaim), + ProposalDepositClaim( + super::super::super::component::governance::v1::ProposalDepositClaim, + ), #[prost(message, tag = "30")] PositionOpen(super::super::super::component::dex::v1::PositionOpen), #[prost(message, tag = "31")] @@ -464,25 +508,35 @@ pub mod action_view { #[prost(message, tag = "32")] PositionWithdraw(super::super::super::component::dex::v1::PositionWithdraw), #[prost(message, tag = "34")] - PositionRewardClaim(super::super::super::component::dex::v1::PositionRewardClaim), + PositionRewardClaim( + super::super::super::component::dex::v1::PositionRewardClaim, + ), #[prost(message, tag = "41")] Delegate(super::super::super::component::stake::v1::Delegate), #[prost(message, tag = "42")] Undelegate(super::super::super::component::stake::v1::Undelegate), /// Community Pool #[prost(message, tag = "50")] - CommunityPoolSpend(super::super::super::component::governance::v1::CommunityPoolSpend), + CommunityPoolSpend( + super::super::super::component::governance::v1::CommunityPoolSpend, + ), #[prost(message, tag = "51")] - CommunityPoolOutput(super::super::super::component::governance::v1::CommunityPoolOutput), + CommunityPoolOutput( + super::super::super::component::governance::v1::CommunityPoolOutput, + ), #[prost(message, tag = "52")] - CommunityPoolDeposit(super::super::super::component::governance::v1::CommunityPoolDeposit), + CommunityPoolDeposit( + super::super::super::component::governance::v1::CommunityPoolDeposit, + ), /// Dutch auctions #[prost(message, tag = "53")] ActionDutchAuctionSchedule( super::super::super::component::auction::v1::ActionDutchAuctionScheduleView, ), #[prost(message, tag = "54")] - ActionDutchAuctionEnd(super::super::super::component::auction::v1::ActionDutchAuctionEnd), + ActionDutchAuctionEnd( + super::super::super::component::auction::v1::ActionDutchAuctionEnd, + ), #[prost(message, tag = "55")] ActionDutchAuctionWithdraw( super::super::super::component::auction::v1::ActionDutchAuctionWithdrawView, @@ -544,8 +598,9 @@ pub struct WitnessData { /// The auth paths for the notes the transaction spends, in the /// same order as the spends in the transaction plan. #[prost(message, repeated, tag = "2")] - pub state_commitment_proofs: - ::prost::alloc::vec::Vec, + pub state_commitment_proofs: ::prost::alloc::vec::Vec< + super::super::super::crypto::tct::v1::StateCommitmentProof, + >, } impl ::prost::Name for WitnessData { const NAME: &'static str = "WitnessData"; @@ -628,7 +683,9 @@ pub mod action_plan { SwapClaim(super::super::super::component::dex::v1::SwapClaimPlan), /// This is just a message relayed to the chain. #[prost(message, tag = "16")] - ValidatorDefinition(super::super::super::component::stake::v1::ValidatorDefinition), + ValidatorDefinition( + super::super::super::component::stake::v1::ValidatorDefinition, + ), /// This is just a message relayed to the chain. #[prost(message, tag = "17")] IbcRelayAction(super::super::super::component::ibc::v1::IbcRelay), @@ -636,13 +693,17 @@ pub mod action_plan { #[prost(message, tag = "18")] ProposalSubmit(super::super::super::component::governance::v1::ProposalSubmit), #[prost(message, tag = "19")] - ProposalWithdraw(super::super::super::component::governance::v1::ProposalWithdraw), + ProposalWithdraw( + super::super::super::component::governance::v1::ProposalWithdraw, + ), #[prost(message, tag = "20")] ValidatorVote(super::super::super::component::governance::v1::ValidatorVote), #[prost(message, tag = "21")] DelegatorVote(super::super::super::component::governance::v1::DelegatorVotePlan), #[prost(message, tag = "22")] - ProposalDepositClaim(super::super::super::component::governance::v1::ProposalDepositClaim), + ProposalDepositClaim( + super::super::super::component::governance::v1::ProposalDepositClaim, + ), #[prost(message, tag = "200")] Ics20Withdrawal(super::super::super::component::ibc::v1::Ics20Withdrawal), #[prost(message, tag = "30")] @@ -653,7 +714,9 @@ pub mod action_plan { #[prost(message, tag = "32")] PositionWithdraw(super::super::super::component::dex::v1::PositionWithdrawPlan), #[prost(message, tag = "34")] - PositionRewardClaim(super::super::super::component::dex::v1::PositionRewardClaimPlan), + PositionRewardClaim( + super::super::super::component::dex::v1::PositionRewardClaimPlan, + ), /// We don't need any extra information (yet) to understand delegations, /// because we don't yet use flow encryption. #[prost(message, tag = "40")] @@ -666,18 +729,26 @@ pub mod action_plan { UndelegateClaim(super::super::super::component::stake::v1::UndelegateClaimPlan), /// Community Pool #[prost(message, tag = "50")] - CommunityPoolSpend(super::super::super::component::governance::v1::CommunityPoolSpend), + CommunityPoolSpend( + super::super::super::component::governance::v1::CommunityPoolSpend, + ), #[prost(message, tag = "51")] - CommunityPoolOutput(super::super::super::component::governance::v1::CommunityPoolOutput), + CommunityPoolOutput( + super::super::super::component::governance::v1::CommunityPoolOutput, + ), #[prost(message, tag = "52")] - CommunityPoolDeposit(super::super::super::component::governance::v1::CommunityPoolDeposit), + CommunityPoolDeposit( + super::super::super::component::governance::v1::CommunityPoolDeposit, + ), /// Dutch auctions #[prost(message, tag = "53")] ActionDutchAuctionSchedule( super::super::super::component::auction::v1::ActionDutchAuctionSchedule, ), #[prost(message, tag = "54")] - ActionDutchAuctionEnd(super::super::super::component::auction::v1::ActionDutchAuctionEnd), + ActionDutchAuctionEnd( + super::super::super::component::auction::v1::ActionDutchAuctionEnd, + ), #[prost(message, tag = "55")] ActionDutchAuctionWithdraw( super::super::super::component::auction::v1::ActionDutchAuctionWithdrawPlan, @@ -851,21 +922,3 @@ impl ::prost::Name for MemoView { "/penumbra.core.transaction.v1.MemoView".into() } } -/// Event emitted when a transaction is included in a block -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct EventBlockTransaction { - #[prost(message, optional, tag = "1")] - pub transaction_id: ::core::option::Option, - #[prost(message, optional, tag = "2")] - pub transaction: ::core::option::Option, -} -impl ::prost::Name for EventBlockTransaction { - const NAME: &'static str = "EventBlockTransaction"; - const PACKAGE: &'static str = "penumbra.core.transaction.v1"; - fn full_name() -> ::prost::alloc::string::String { - "penumbra.core.transaction.v1.EventBlockTransaction".into() - } - fn type_url() -> ::prost::alloc::string::String { - "/penumbra.core.transaction.v1.EventBlockTransaction".into() - } -} diff --git a/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs b/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs index ce634f9c98..ba9d7347a8 100644 --- a/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.transaction.v1.serde.rs @@ -9,8 +9,7 @@ impl serde::Serialize for Action { if self.action.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.Action", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.Action", len)?; if let Some(v) = self.action.as_ref() { match v { action::Action::Spend(v) => { @@ -186,10 +185,7 @@ impl<'de> serde::Deserialize<'de> for Action { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -203,57 +199,27 @@ impl<'de> serde::Deserialize<'de> for Action { "output" => Ok(GeneratedField::Output), "swap" => Ok(GeneratedField::Swap), "swapClaim" | "swap_claim" => Ok(GeneratedField::SwapClaim), - "validatorDefinition" | "validator_definition" => { - Ok(GeneratedField::ValidatorDefinition) - } - "ibcRelayAction" | "ibc_relay_action" => { - Ok(GeneratedField::IbcRelayAction) - } - "proposalSubmit" | "proposal_submit" => { - Ok(GeneratedField::ProposalSubmit) - } - "proposalWithdraw" | "proposal_withdraw" => { - Ok(GeneratedField::ProposalWithdraw) - } + "validatorDefinition" | "validator_definition" => Ok(GeneratedField::ValidatorDefinition), + "ibcRelayAction" | "ibc_relay_action" => Ok(GeneratedField::IbcRelayAction), + "proposalSubmit" | "proposal_submit" => Ok(GeneratedField::ProposalSubmit), + "proposalWithdraw" | "proposal_withdraw" => Ok(GeneratedField::ProposalWithdraw), "validatorVote" | "validator_vote" => Ok(GeneratedField::ValidatorVote), "delegatorVote" | "delegator_vote" => Ok(GeneratedField::DelegatorVote), - "proposalDepositClaim" | "proposal_deposit_claim" => { - Ok(GeneratedField::ProposalDepositClaim) - } + "proposalDepositClaim" | "proposal_deposit_claim" => Ok(GeneratedField::ProposalDepositClaim), "positionOpen" | "position_open" => Ok(GeneratedField::PositionOpen), "positionClose" | "position_close" => Ok(GeneratedField::PositionClose), - "positionWithdraw" | "position_withdraw" => { - Ok(GeneratedField::PositionWithdraw) - } - "positionRewardClaim" | "position_reward_claim" => { - Ok(GeneratedField::PositionRewardClaim) - } + "positionWithdraw" | "position_withdraw" => Ok(GeneratedField::PositionWithdraw), + "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "undelegateClaim" | "undelegate_claim" => { - Ok(GeneratedField::UndelegateClaim) - } - "communityPoolSpend" | "community_pool_spend" => { - Ok(GeneratedField::CommunityPoolSpend) - } - "communityPoolOutput" | "community_pool_output" => { - Ok(GeneratedField::CommunityPoolOutput) - } - "communityPoolDeposit" | "community_pool_deposit" => { - Ok(GeneratedField::CommunityPoolDeposit) - } - "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => { - Ok(GeneratedField::ActionDutchAuctionSchedule) - } - "actionDutchAuctionEnd" | "action_dutch_auction_end" => { - Ok(GeneratedField::ActionDutchAuctionEnd) - } - "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => { - Ok(GeneratedField::ActionDutchAuctionWithdraw) - } - "ics20Withdrawal" | "ics20_withdrawal" => { - Ok(GeneratedField::Ics20Withdrawal) - } + "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), + "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), + "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => Ok(GeneratedField::ActionDutchAuctionSchedule), + "actionDutchAuctionEnd" | "action_dutch_auction_end" => Ok(GeneratedField::ActionDutchAuctionEnd), + "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => Ok(GeneratedField::ActionDutchAuctionWithdraw), + "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), _ => Ok(GeneratedField::__SkipField__), } } @@ -270,8 +236,8 @@ impl<'de> serde::Deserialize<'de> for Action { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action__ = None; while let Some(k) = map_.next_key()? { @@ -280,233 +246,188 @@ impl<'de> serde::Deserialize<'de> for Action { if action__.is_some() { return Err(serde::de::Error::duplicate_field("spend")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::Spend); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Spend) +; } GeneratedField::Output => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("output")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::Output); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Output) +; } GeneratedField::Swap => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swap")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::Swap); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Swap) +; } GeneratedField::SwapClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swapClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::SwapClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::SwapClaim) +; } GeneratedField::ValidatorDefinition => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "validatorDefinition", - )); + return Err(serde::de::Error::duplicate_field("validatorDefinition")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ValidatorDefinition); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ValidatorDefinition) +; } GeneratedField::IbcRelayAction => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ibcRelayAction")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::IbcRelayAction); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::IbcRelayAction) +; } GeneratedField::ProposalSubmit => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalSubmit")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ProposalSubmit); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ProposalSubmit) +; } GeneratedField::ProposalWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalWithdraw")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ProposalWithdraw); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ProposalWithdraw) +; } GeneratedField::ValidatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("validatorVote")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ValidatorVote); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ValidatorVote) +; } GeneratedField::DelegatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegatorVote")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::DelegatorVote); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::DelegatorVote) +; } GeneratedField::ProposalDepositClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "proposalDepositClaim", - )); + return Err(serde::de::Error::duplicate_field("proposalDepositClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ProposalDepositClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ProposalDepositClaim) +; } GeneratedField::PositionOpen => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionOpen")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::PositionOpen); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionOpen) +; } GeneratedField::PositionClose => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionClose")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::PositionClose); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionClose) +; } GeneratedField::PositionWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionWithdraw")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::PositionWithdraw); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionWithdraw) +; } GeneratedField::PositionRewardClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "positionRewardClaim", - )); + return Err(serde::de::Error::duplicate_field("positionRewardClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::PositionRewardClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::PositionRewardClaim) +; } GeneratedField::Delegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegate")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::Delegate); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Delegate) +; } GeneratedField::Undelegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegate")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::Undelegate); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Undelegate) +; } GeneratedField::UndelegateClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegateClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::UndelegateClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::UndelegateClaim) +; } GeneratedField::CommunityPoolSpend => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolSpend", - )); + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::CommunityPoolSpend); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolSpend) +; } GeneratedField::CommunityPoolOutput => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolOutput", - )); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::CommunityPoolOutput); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolOutput) +; } GeneratedField::CommunityPoolDeposit => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolDeposit", - )); + return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::CommunityPoolDeposit); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::CommunityPoolDeposit) +; } GeneratedField::ActionDutchAuctionSchedule => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionSchedule", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionSchedule")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ActionDutchAuctionSchedule); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ActionDutchAuctionSchedule) +; } GeneratedField::ActionDutchAuctionEnd => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionEnd", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionEnd")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ActionDutchAuctionEnd); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ActionDutchAuctionEnd) +; } GeneratedField::ActionDutchAuctionWithdraw => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionWithdraw", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionWithdraw")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::ActionDutchAuctionWithdraw); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::ActionDutchAuctionWithdraw) +; } GeneratedField::Ics20Withdrawal => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ics20Withdrawal")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action::Action::Ics20Withdrawal); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action::Action::Ics20Withdrawal) +; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } } } - Ok(Action { action: action__ }) + Ok(Action { + action: action__, + }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.Action", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.Action", FIELDS, GeneratedVisitor) } } impl serde::Serialize for ActionPlan { @@ -520,8 +441,7 @@ impl serde::Serialize for ActionPlan { if self.action.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.ActionPlan", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.ActionPlan", len)?; if let Some(v) = self.action.as_ref() { match v { action_plan::Action::Spend(v) => { @@ -697,10 +617,7 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -714,57 +631,27 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { "output" => Ok(GeneratedField::Output), "swap" => Ok(GeneratedField::Swap), "swapClaim" | "swap_claim" => Ok(GeneratedField::SwapClaim), - "validatorDefinition" | "validator_definition" => { - Ok(GeneratedField::ValidatorDefinition) - } - "ibcRelayAction" | "ibc_relay_action" => { - Ok(GeneratedField::IbcRelayAction) - } - "proposalSubmit" | "proposal_submit" => { - Ok(GeneratedField::ProposalSubmit) - } - "proposalWithdraw" | "proposal_withdraw" => { - Ok(GeneratedField::ProposalWithdraw) - } + "validatorDefinition" | "validator_definition" => Ok(GeneratedField::ValidatorDefinition), + "ibcRelayAction" | "ibc_relay_action" => Ok(GeneratedField::IbcRelayAction), + "proposalSubmit" | "proposal_submit" => Ok(GeneratedField::ProposalSubmit), + "proposalWithdraw" | "proposal_withdraw" => Ok(GeneratedField::ProposalWithdraw), "validatorVote" | "validator_vote" => Ok(GeneratedField::ValidatorVote), "delegatorVote" | "delegator_vote" => Ok(GeneratedField::DelegatorVote), - "proposalDepositClaim" | "proposal_deposit_claim" => { - Ok(GeneratedField::ProposalDepositClaim) - } - "ics20Withdrawal" | "ics20_withdrawal" => { - Ok(GeneratedField::Ics20Withdrawal) - } + "proposalDepositClaim" | "proposal_deposit_claim" => Ok(GeneratedField::ProposalDepositClaim), + "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), "positionOpen" | "position_open" => Ok(GeneratedField::PositionOpen), "positionClose" | "position_close" => Ok(GeneratedField::PositionClose), - "positionWithdraw" | "position_withdraw" => { - Ok(GeneratedField::PositionWithdraw) - } - "positionRewardClaim" | "position_reward_claim" => { - Ok(GeneratedField::PositionRewardClaim) - } + "positionWithdraw" | "position_withdraw" => Ok(GeneratedField::PositionWithdraw), + "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "undelegateClaim" | "undelegate_claim" => { - Ok(GeneratedField::UndelegateClaim) - } - "communityPoolSpend" | "community_pool_spend" => { - Ok(GeneratedField::CommunityPoolSpend) - } - "communityPoolOutput" | "community_pool_output" => { - Ok(GeneratedField::CommunityPoolOutput) - } - "communityPoolDeposit" | "community_pool_deposit" => { - Ok(GeneratedField::CommunityPoolDeposit) - } - "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => { - Ok(GeneratedField::ActionDutchAuctionSchedule) - } - "actionDutchAuctionEnd" | "action_dutch_auction_end" => { - Ok(GeneratedField::ActionDutchAuctionEnd) - } - "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => { - Ok(GeneratedField::ActionDutchAuctionWithdraw) - } + "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), + "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), + "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => Ok(GeneratedField::ActionDutchAuctionSchedule), + "actionDutchAuctionEnd" | "action_dutch_auction_end" => Ok(GeneratedField::ActionDutchAuctionEnd), + "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => Ok(GeneratedField::ActionDutchAuctionWithdraw), _ => Ok(GeneratedField::__SkipField__), } } @@ -781,8 +668,8 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action__ = None; while let Some(k) = map_.next_key()? { @@ -791,233 +678,188 @@ impl<'de> serde::Deserialize<'de> for ActionPlan { if action__.is_some() { return Err(serde::de::Error::duplicate_field("spend")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::Spend); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Spend) +; } GeneratedField::Output => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("output")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::Output); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Output) +; } GeneratedField::Swap => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swap")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::Swap); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Swap) +; } GeneratedField::SwapClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("swapClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::SwapClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::SwapClaim) +; } GeneratedField::ValidatorDefinition => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "validatorDefinition", - )); + return Err(serde::de::Error::duplicate_field("validatorDefinition")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ValidatorDefinition); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ValidatorDefinition) +; } GeneratedField::IbcRelayAction => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ibcRelayAction")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::IbcRelayAction); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::IbcRelayAction) +; } GeneratedField::ProposalSubmit => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalSubmit")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ProposalSubmit); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ProposalSubmit) +; } GeneratedField::ProposalWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("proposalWithdraw")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ProposalWithdraw); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ProposalWithdraw) +; } GeneratedField::ValidatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("validatorVote")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ValidatorVote); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ValidatorVote) +; } GeneratedField::DelegatorVote => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegatorVote")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::DelegatorVote); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::DelegatorVote) +; } GeneratedField::ProposalDepositClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "proposalDepositClaim", - )); + return Err(serde::de::Error::duplicate_field("proposalDepositClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ProposalDepositClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ProposalDepositClaim) +; } GeneratedField::Ics20Withdrawal => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("ics20Withdrawal")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::Ics20Withdrawal); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Ics20Withdrawal) +; } GeneratedField::PositionOpen => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionOpen")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::PositionOpen); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionOpen) +; } GeneratedField::PositionClose => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionClose")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::PositionClose); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionClose) +; } GeneratedField::PositionWithdraw => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("positionWithdraw")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::PositionWithdraw); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionWithdraw) +; } GeneratedField::PositionRewardClaim => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "positionRewardClaim", - )); + return Err(serde::de::Error::duplicate_field("positionRewardClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::PositionRewardClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::PositionRewardClaim) +; } GeneratedField::Delegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("delegate")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::Delegate); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Delegate) +; } GeneratedField::Undelegate => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegate")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::Undelegate); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::Undelegate) +; } GeneratedField::UndelegateClaim => { if action__.is_some() { return Err(serde::de::Error::duplicate_field("undelegateClaim")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::UndelegateClaim); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::UndelegateClaim) +; } GeneratedField::CommunityPoolSpend => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolSpend", - )); + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::CommunityPoolSpend); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolSpend) +; } GeneratedField::CommunityPoolOutput => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolOutput", - )); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::CommunityPoolOutput); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolOutput) +; } GeneratedField::CommunityPoolDeposit => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolDeposit", - )); + return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::CommunityPoolDeposit); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::CommunityPoolDeposit) +; } GeneratedField::ActionDutchAuctionSchedule => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionSchedule", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionSchedule")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ActionDutchAuctionSchedule); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ActionDutchAuctionSchedule) +; } GeneratedField::ActionDutchAuctionEnd => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionEnd", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionEnd")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ActionDutchAuctionEnd); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ActionDutchAuctionEnd) +; } GeneratedField::ActionDutchAuctionWithdraw => { if action__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionWithdraw", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionWithdraw")); } - action__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_plan::Action::ActionDutchAuctionWithdraw); + action__ = map_.next_value::<::std::option::Option<_>>()?.map(action_plan::Action::ActionDutchAuctionWithdraw) +; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; } } } - Ok(ActionPlan { action: action__ }) + Ok(ActionPlan { + action: action__, + }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.ActionPlan", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.ActionPlan", FIELDS, GeneratedVisitor) } } impl serde::Serialize for ActionView { @@ -1031,8 +873,7 @@ impl serde::Serialize for ActionView { if self.action_view.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.ActionView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.ActionView", len)?; if let Some(v) = self.action_view.as_ref() { match v { action_view::ActionView::Spend(v) => { @@ -1208,10 +1049,7 @@ impl<'de> serde::Deserialize<'de> for ActionView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1226,56 +1064,26 @@ impl<'de> serde::Deserialize<'de> for ActionView { "swap" => Ok(GeneratedField::Swap), "swapClaim" | "swap_claim" => Ok(GeneratedField::SwapClaim), "delegatorVote" | "delegator_vote" => Ok(GeneratedField::DelegatorVote), - "validatorDefinition" | "validator_definition" => { - Ok(GeneratedField::ValidatorDefinition) - } - "ibcRelayAction" | "ibc_relay_action" => { - Ok(GeneratedField::IbcRelayAction) - } - "proposalSubmit" | "proposal_submit" => { - Ok(GeneratedField::ProposalSubmit) - } - "proposalWithdraw" | "proposal_withdraw" => { - Ok(GeneratedField::ProposalWithdraw) - } + "validatorDefinition" | "validator_definition" => Ok(GeneratedField::ValidatorDefinition), + "ibcRelayAction" | "ibc_relay_action" => Ok(GeneratedField::IbcRelayAction), + "proposalSubmit" | "proposal_submit" => Ok(GeneratedField::ProposalSubmit), + "proposalWithdraw" | "proposal_withdraw" => Ok(GeneratedField::ProposalWithdraw), "validatorVote" | "validator_vote" => Ok(GeneratedField::ValidatorVote), - "proposalDepositClaim" | "proposal_deposit_claim" => { - Ok(GeneratedField::ProposalDepositClaim) - } + "proposalDepositClaim" | "proposal_deposit_claim" => Ok(GeneratedField::ProposalDepositClaim), "positionOpen" | "position_open" => Ok(GeneratedField::PositionOpen), "positionClose" | "position_close" => Ok(GeneratedField::PositionClose), - "positionWithdraw" | "position_withdraw" => { - Ok(GeneratedField::PositionWithdraw) - } - "positionRewardClaim" | "position_reward_claim" => { - Ok(GeneratedField::PositionRewardClaim) - } + "positionWithdraw" | "position_withdraw" => Ok(GeneratedField::PositionWithdraw), + "positionRewardClaim" | "position_reward_claim" => Ok(GeneratedField::PositionRewardClaim), "delegate" => Ok(GeneratedField::Delegate), "undelegate" => Ok(GeneratedField::Undelegate), - "communityPoolSpend" | "community_pool_spend" => { - Ok(GeneratedField::CommunityPoolSpend) - } - "communityPoolOutput" | "community_pool_output" => { - Ok(GeneratedField::CommunityPoolOutput) - } - "communityPoolDeposit" | "community_pool_deposit" => { - Ok(GeneratedField::CommunityPoolDeposit) - } - "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => { - Ok(GeneratedField::ActionDutchAuctionSchedule) - } - "actionDutchAuctionEnd" | "action_dutch_auction_end" => { - Ok(GeneratedField::ActionDutchAuctionEnd) - } - "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => { - Ok(GeneratedField::ActionDutchAuctionWithdraw) - } - "undelegateClaim" | "undelegate_claim" => { - Ok(GeneratedField::UndelegateClaim) - } - "ics20Withdrawal" | "ics20_withdrawal" => { - Ok(GeneratedField::Ics20Withdrawal) - } + "communityPoolSpend" | "community_pool_spend" => Ok(GeneratedField::CommunityPoolSpend), + "communityPoolOutput" | "community_pool_output" => Ok(GeneratedField::CommunityPoolOutput), + "communityPoolDeposit" | "community_pool_deposit" => Ok(GeneratedField::CommunityPoolDeposit), + "actionDutchAuctionSchedule" | "action_dutch_auction_schedule" => Ok(GeneratedField::ActionDutchAuctionSchedule), + "actionDutchAuctionEnd" | "action_dutch_auction_end" => Ok(GeneratedField::ActionDutchAuctionEnd), + "actionDutchAuctionWithdraw" | "action_dutch_auction_withdraw" => Ok(GeneratedField::ActionDutchAuctionWithdraw), + "undelegateClaim" | "undelegate_claim" => Ok(GeneratedField::UndelegateClaim), + "ics20Withdrawal" | "ics20_withdrawal" => Ok(GeneratedField::Ics20Withdrawal), _ => Ok(GeneratedField::__SkipField__), } } @@ -1292,8 +1100,8 @@ impl<'de> serde::Deserialize<'de> for ActionView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action_view__ = None; while let Some(k) = map_.next_key()? { @@ -1302,219 +1110,176 @@ impl<'de> serde::Deserialize<'de> for ActionView { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("spend")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::Spend); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Spend) +; } GeneratedField::Output => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("output")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::Output); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Output) +; } GeneratedField::Swap => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("swap")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::Swap); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Swap) +; } GeneratedField::SwapClaim => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("swapClaim")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::SwapClaim); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::SwapClaim) +; } GeneratedField::DelegatorVote => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("delegatorVote")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::DelegatorVote); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::DelegatorVote) +; } GeneratedField::ValidatorDefinition => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "validatorDefinition", - )); + return Err(serde::de::Error::duplicate_field("validatorDefinition")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ValidatorDefinition); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ValidatorDefinition) +; } GeneratedField::IbcRelayAction => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("ibcRelayAction")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::IbcRelayAction); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::IbcRelayAction) +; } GeneratedField::ProposalSubmit => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("proposalSubmit")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ProposalSubmit); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ProposalSubmit) +; } GeneratedField::ProposalWithdraw => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("proposalWithdraw")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ProposalWithdraw); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ProposalWithdraw) +; } GeneratedField::ValidatorVote => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("validatorVote")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ValidatorVote); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ValidatorVote) +; } GeneratedField::ProposalDepositClaim => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "proposalDepositClaim", - )); + return Err(serde::de::Error::duplicate_field("proposalDepositClaim")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ProposalDepositClaim); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ProposalDepositClaim) +; } GeneratedField::PositionOpen => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("positionOpen")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::PositionOpen); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionOpen) +; } GeneratedField::PositionClose => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("positionClose")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::PositionClose); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionClose) +; } GeneratedField::PositionWithdraw => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("positionWithdraw")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::PositionWithdraw); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionWithdraw) +; } GeneratedField::PositionRewardClaim => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "positionRewardClaim", - )); + return Err(serde::de::Error::duplicate_field("positionRewardClaim")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::PositionRewardClaim); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::PositionRewardClaim) +; } GeneratedField::Delegate => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("delegate")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::Delegate); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Delegate) +; } GeneratedField::Undelegate => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("undelegate")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::Undelegate); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Undelegate) +; } GeneratedField::CommunityPoolSpend => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolSpend", - )); + return Err(serde::de::Error::duplicate_field("communityPoolSpend")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::CommunityPoolSpend); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolSpend) +; } GeneratedField::CommunityPoolOutput => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolOutput", - )); + return Err(serde::de::Error::duplicate_field("communityPoolOutput")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::CommunityPoolOutput); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolOutput) +; } GeneratedField::CommunityPoolDeposit => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "communityPoolDeposit", - )); + return Err(serde::de::Error::duplicate_field("communityPoolDeposit")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::CommunityPoolDeposit); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::CommunityPoolDeposit) +; } GeneratedField::ActionDutchAuctionSchedule => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionSchedule", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionSchedule")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ActionDutchAuctionSchedule); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ActionDutchAuctionSchedule) +; } GeneratedField::ActionDutchAuctionEnd => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionEnd", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionEnd")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ActionDutchAuctionEnd); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ActionDutchAuctionEnd) +; } GeneratedField::ActionDutchAuctionWithdraw => { if action_view__.is_some() { - return Err(serde::de::Error::duplicate_field( - "actionDutchAuctionWithdraw", - )); + return Err(serde::de::Error::duplicate_field("actionDutchAuctionWithdraw")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::ActionDutchAuctionWithdraw); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::ActionDutchAuctionWithdraw) +; } GeneratedField::UndelegateClaim => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("undelegateClaim")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::UndelegateClaim); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::UndelegateClaim) +; } GeneratedField::Ics20Withdrawal => { if action_view__.is_some() { return Err(serde::de::Error::duplicate_field("ics20Withdrawal")); } - action_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(action_view::ActionView::Ics20Withdrawal); + action_view__ = map_.next_value::<::std::option::Option<_>>()?.map(action_view::ActionView::Ics20Withdrawal) +; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -1526,11 +1291,7 @@ impl<'de> serde::Deserialize<'de> for ActionView { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.ActionView", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.ActionView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for AuthorizationData { @@ -1550,8 +1311,7 @@ impl serde::Serialize for AuthorizationData { if !self.delegator_vote_auths.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.AuthorizationData", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.AuthorizationData", len)?; if let Some(v) = self.effect_hash.as_ref() { struct_ser.serialize_field("effectHash", v)?; } @@ -1596,10 +1356,7 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1611,9 +1368,7 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { match value { "effectHash" | "effect_hash" => Ok(GeneratedField::EffectHash), "spendAuths" | "spend_auths" => Ok(GeneratedField::SpendAuths), - "delegatorVoteAuths" | "delegator_vote_auths" => { - Ok(GeneratedField::DelegatorVoteAuths) - } + "delegatorVoteAuths" | "delegator_vote_auths" => Ok(GeneratedField::DelegatorVoteAuths), _ => Ok(GeneratedField::__SkipField__), } } @@ -1630,8 +1385,8 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut effect_hash__ = None; let mut spend_auths__ = None; @@ -1652,9 +1407,7 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { } GeneratedField::DelegatorVoteAuths => { if delegator_vote_auths__.is_some() { - return Err(serde::de::Error::duplicate_field( - "delegatorVoteAuths", - )); + return Err(serde::de::Error::duplicate_field("delegatorVoteAuths")); } delegator_vote_auths__ = Some(map_.next_value()?); } @@ -1670,11 +1423,7 @@ impl<'de> serde::Deserialize<'de> for AuthorizationData { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.AuthorizationData", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.AuthorizationData", FIELDS, GeneratedVisitor) } } impl serde::Serialize for CluePlan { @@ -1694,26 +1443,19 @@ impl serde::Serialize for CluePlan { if self.precision_bits != 0 { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.CluePlan", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.CluePlan", len)?; if let Some(v) = self.address.as_ref() { struct_ser.serialize_field("address", v)?; } if !self.rseed.is_empty() { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field( - "rseed", - pbjson::private::base64::encode(&self.rseed).as_str(), - )?; + struct_ser.serialize_field("rseed", pbjson::private::base64::encode(&self.rseed).as_str())?; } if self.precision_bits != 0 { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field( - "precisionBits", - ToString::to_string(&self.precision_bits).as_str(), - )?; + struct_ser.serialize_field("precisionBits", ToString::to_string(&self.precision_bits).as_str())?; } struct_ser.end() } @@ -1724,7 +1466,12 @@ impl<'de> serde::Deserialize<'de> for CluePlan { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["address", "rseed", "precision_bits", "precisionBits"]; + const FIELDS: &[&str] = &[ + "address", + "rseed", + "precision_bits", + "precisionBits", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1743,10 +1490,7 @@ impl<'de> serde::Deserialize<'de> for CluePlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1775,8 +1519,8 @@ impl<'de> serde::Deserialize<'de> for CluePlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut address__ = None; let mut rseed__ = None; @@ -1793,19 +1537,17 @@ impl<'de> serde::Deserialize<'de> for CluePlan { if rseed__.is_some() { return Err(serde::de::Error::duplicate_field("rseed")); } - rseed__ = Some( - map_.next_value::<::pbjson::private::BytesDeserialize<_>>()? - .0, - ); + rseed__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; } GeneratedField::PrecisionBits => { if precision_bits__.is_some() { return Err(serde::de::Error::duplicate_field("precisionBits")); } - precision_bits__ = Some( - map_.next_value::<::pbjson::private::NumberDeserialize<_>>()? - .0, - ); + precision_bits__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -1819,11 +1561,7 @@ impl<'de> serde::Deserialize<'de> for CluePlan { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.CluePlan", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.CluePlan", FIELDS, GeneratedVisitor) } } impl serde::Serialize for DetectionData { @@ -1837,8 +1575,7 @@ impl serde::Serialize for DetectionData { if !self.fmd_clues.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.DetectionData", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.DetectionData", len)?; if !self.fmd_clues.is_empty() { struct_ser.serialize_field("fmdClues", &self.fmd_clues)?; } @@ -1851,7 +1588,10 @@ impl<'de> serde::Deserialize<'de> for DetectionData { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["fmd_clues", "fmdClues"]; + const FIELDS: &[&str] = &[ + "fmd_clues", + "fmdClues", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1868,10 +1608,7 @@ impl<'de> serde::Deserialize<'de> for DetectionData { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1898,8 +1635,8 @@ impl<'de> serde::Deserialize<'de> for DetectionData { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut fmd_clues__ = None; while let Some(k) = map_.next_key()? { @@ -1920,11 +1657,7 @@ impl<'de> serde::Deserialize<'de> for DetectionData { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.DetectionData", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.DetectionData", FIELDS, GeneratedVisitor) } } impl serde::Serialize for DetectionDataPlan { @@ -1938,8 +1671,7 @@ impl serde::Serialize for DetectionDataPlan { if !self.clue_plans.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.DetectionDataPlan", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.DetectionDataPlan", len)?; if !self.clue_plans.is_empty() { struct_ser.serialize_field("cluePlans", &self.clue_plans)?; } @@ -1952,7 +1684,10 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["clue_plans", "cluePlans"]; + const FIELDS: &[&str] = &[ + "clue_plans", + "cluePlans", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -1969,10 +1704,7 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -1999,8 +1731,8 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut clue_plans__ = None; while let Some(k) = map_.next_key()? { @@ -2021,131 +1753,7 @@ impl<'de> serde::Deserialize<'de> for DetectionDataPlan { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.DetectionDataPlan", - FIELDS, - GeneratedVisitor, - ) - } -} -impl serde::Serialize for EventBlockTransaction { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if self.transaction_id.is_some() { - len += 1; - } - if self.transaction.is_some() { - len += 1; - } - let mut struct_ser = serializer - .serialize_struct("penumbra.core.transaction.v1.EventBlockTransaction", len)?; - if let Some(v) = self.transaction_id.as_ref() { - struct_ser.serialize_field("transactionId", v)?; - } - if let Some(v) = self.transaction.as_ref() { - struct_ser.serialize_field("transaction", v)?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for EventBlockTransaction { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &["transaction_id", "transactionId", "transaction"]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - TransactionId, - Transaction, - __SkipField__, - } - impl<'de> serde::Deserialize<'de> for GeneratedField { - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - struct GeneratedVisitor; - - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GeneratedField; - - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { - write!(formatter, "expected one of: {:?}", &FIELDS) - } - - #[allow(unused_variables)] - fn visit_str(self, value: &str) -> std::result::Result - where - E: serde::de::Error, - { - match value { - "transactionId" | "transaction_id" => Ok(GeneratedField::TransactionId), - "transaction" => Ok(GeneratedField::Transaction), - _ => Ok(GeneratedField::__SkipField__), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = EventBlockTransaction; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.transaction.v1.EventBlockTransaction") - } - - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut transaction_id__ = None; - let mut transaction__ = None; - while let Some(k) = map_.next_key()? { - match k { - GeneratedField::TransactionId => { - if transaction_id__.is_some() { - return Err(serde::de::Error::duplicate_field("transactionId")); - } - transaction_id__ = map_.next_value()?; - } - GeneratedField::Transaction => { - if transaction__.is_some() { - return Err(serde::de::Error::duplicate_field("transaction")); - } - transaction__ = map_.next_value()?; - } - GeneratedField::__SkipField__ => { - let _ = map_.next_value::()?; - } - } - } - Ok(EventBlockTransaction { - transaction_id: transaction_id__, - transaction: transaction__, - }) - } - } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.EventBlockTransaction", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.DetectionDataPlan", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoCiphertext { @@ -2159,15 +1767,11 @@ impl serde::Serialize for MemoCiphertext { if !self.inner.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoCiphertext", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoCiphertext", len)?; if !self.inner.is_empty() { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field( - "inner", - pbjson::private::base64::encode(&self.inner).as_str(), - )?; + struct_ser.serialize_field("inner", pbjson::private::base64::encode(&self.inner).as_str())?; } struct_ser.end() } @@ -2178,7 +1782,9 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["inner"]; + const FIELDS: &[&str] = &[ + "inner", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2195,10 +1801,7 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2225,8 +1828,8 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut inner__ = None; while let Some(k) = map_.next_key()? { @@ -2235,10 +1838,9 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { if inner__.is_some() { return Err(serde::de::Error::duplicate_field("inner")); } - inner__ = Some( - map_.next_value::<::pbjson::private::BytesDeserialize<_>>()? - .0, - ); + inner__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -2250,11 +1852,7 @@ impl<'de> serde::Deserialize<'de> for MemoCiphertext { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoCiphertext", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoCiphertext", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoPlaintext { @@ -2271,8 +1869,7 @@ impl serde::Serialize for MemoPlaintext { if !self.text.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintext", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintext", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -2288,7 +1885,11 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["return_address", "returnAddress", "text"]; + const FIELDS: &[&str] = &[ + "return_address", + "returnAddress", + "text", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2306,10 +1907,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2337,8 +1935,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut return_address__ = None; let mut text__ = None; @@ -2367,11 +1965,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintext { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoPlaintext", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoPlaintext", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoPlaintextView { @@ -2388,8 +1982,7 @@ impl serde::Serialize for MemoPlaintextView { if !self.text.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintextView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlaintextView", len)?; if let Some(v) = self.return_address.as_ref() { struct_ser.serialize_field("returnAddress", v)?; } @@ -2405,7 +1998,11 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["return_address", "returnAddress", "text"]; + const FIELDS: &[&str] = &[ + "return_address", + "returnAddress", + "text", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2423,10 +2020,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2454,8 +2048,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut return_address__ = None; let mut text__ = None; @@ -2484,11 +2078,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlaintextView { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoPlaintextView", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoPlaintextView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoPlan { @@ -2505,16 +2095,14 @@ impl serde::Serialize for MemoPlan { if !self.key.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlan", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoPlan", len)?; if let Some(v) = self.plaintext.as_ref() { struct_ser.serialize_field("plaintext", v)?; } if !self.key.is_empty() { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser - .serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; + struct_ser.serialize_field("key", pbjson::private::base64::encode(&self.key).as_str())?; } struct_ser.end() } @@ -2525,7 +2113,10 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["plaintext", "key"]; + const FIELDS: &[&str] = &[ + "plaintext", + "key", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2543,10 +2134,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2574,8 +2162,8 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut plaintext__ = None; let mut key__ = None; @@ -2591,10 +2179,9 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { if key__.is_some() { return Err(serde::de::Error::duplicate_field("key")); } - key__ = Some( - map_.next_value::<::pbjson::private::BytesDeserialize<_>>()? - .0, - ); + key__ = + Some(map_.next_value::<::pbjson::private::BytesDeserialize<_>>()?.0) + ; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -2607,11 +2194,7 @@ impl<'de> serde::Deserialize<'de> for MemoPlan { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoPlan", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoPlan", FIELDS, GeneratedVisitor) } } impl serde::Serialize for MemoView { @@ -2625,8 +2208,7 @@ impl serde::Serialize for MemoView { if self.memo_view.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoView", len)?; if let Some(v) = self.memo_view.as_ref() { match v { memo_view::MemoView::Visible(v) => { @@ -2646,7 +2228,10 @@ impl<'de> serde::Deserialize<'de> for MemoView { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["visible", "opaque"]; + const FIELDS: &[&str] = &[ + "visible", + "opaque", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2664,10 +2249,7 @@ impl<'de> serde::Deserialize<'de> for MemoView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2695,8 +2277,8 @@ impl<'de> serde::Deserialize<'de> for MemoView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut memo_view__ = None; while let Some(k) = map_.next_key()? { @@ -2705,17 +2287,15 @@ impl<'de> serde::Deserialize<'de> for MemoView { if memo_view__.is_some() { return Err(serde::de::Error::duplicate_field("visible")); } - memo_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(memo_view::MemoView::Visible); + memo_view__ = map_.next_value::<::std::option::Option<_>>()?.map(memo_view::MemoView::Visible) +; } GeneratedField::Opaque => { if memo_view__.is_some() { return Err(serde::de::Error::duplicate_field("opaque")); } - memo_view__ = map_ - .next_value::<::std::option::Option<_>>()? - .map(memo_view::MemoView::Opaque); + memo_view__ = map_.next_value::<::std::option::Option<_>>()?.map(memo_view::MemoView::Opaque) +; } GeneratedField::__SkipField__ => { let _ = map_.next_value::()?; @@ -2727,11 +2307,7 @@ impl<'de> serde::Deserialize<'de> for MemoView { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoView", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for memo_view::Opaque { @@ -2745,8 +2321,7 @@ impl serde::Serialize for memo_view::Opaque { if self.ciphertext.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Opaque", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Opaque", len)?; if let Some(v) = self.ciphertext.as_ref() { struct_ser.serialize_field("ciphertext", v)?; } @@ -2759,7 +2334,9 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["ciphertext"]; + const FIELDS: &[&str] = &[ + "ciphertext", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2776,10 +2353,7 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2806,8 +2380,8 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut ciphertext__ = None; while let Some(k) = map_.next_key()? { @@ -2828,11 +2402,7 @@ impl<'de> serde::Deserialize<'de> for memo_view::Opaque { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoView.Opaque", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoView.Opaque", FIELDS, GeneratedVisitor) } } impl serde::Serialize for memo_view::Visible { @@ -2849,8 +2419,7 @@ impl serde::Serialize for memo_view::Visible { if self.plaintext.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Visible", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.MemoView.Visible", len)?; if let Some(v) = self.ciphertext.as_ref() { struct_ser.serialize_field("ciphertext", v)?; } @@ -2866,7 +2435,10 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["ciphertext", "plaintext"]; + const FIELDS: &[&str] = &[ + "ciphertext", + "plaintext", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -2884,10 +2456,7 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -2915,8 +2484,8 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut ciphertext__ = None; let mut plaintext__ = None; @@ -2945,11 +2514,7 @@ impl<'de> serde::Deserialize<'de> for memo_view::Visible { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.MemoView.Visible", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.MemoView.Visible", FIELDS, GeneratedVisitor) } } impl serde::Serialize for NullifierWithNote { @@ -2966,8 +2531,7 @@ impl serde::Serialize for NullifierWithNote { if self.note.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.NullifierWithNote", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.NullifierWithNote", len)?; if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; } @@ -2983,7 +2547,10 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["nullifier", "note"]; + const FIELDS: &[&str] = &[ + "nullifier", + "note", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -3001,10 +2568,7 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3032,8 +2596,8 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut nullifier__ = None; let mut note__ = None; @@ -3062,11 +2626,7 @@ impl<'de> serde::Deserialize<'de> for NullifierWithNote { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.NullifierWithNote", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.NullifierWithNote", FIELDS, GeneratedVisitor) } } impl serde::Serialize for PayloadKeyWithCommitment { @@ -3083,8 +2643,7 @@ impl serde::Serialize for PayloadKeyWithCommitment { if self.commitment.is_some() { len += 1; } - let mut struct_ser = serializer - .serialize_struct("penumbra.core.transaction.v1.PayloadKeyWithCommitment", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.PayloadKeyWithCommitment", len)?; if let Some(v) = self.payload_key.as_ref() { struct_ser.serialize_field("payloadKey", v)?; } @@ -3100,7 +2659,11 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["payload_key", "payloadKey", "commitment"]; + const FIELDS: &[&str] = &[ + "payload_key", + "payloadKey", + "commitment", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -3118,10 +2681,7 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3148,12 +2708,9 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { formatter.write_str("struct penumbra.core.transaction.v1.PayloadKeyWithCommitment") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut payload_key__ = None; let mut commitment__ = None; @@ -3182,11 +2739,7 @@ impl<'de> serde::Deserialize<'de> for PayloadKeyWithCommitment { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.PayloadKeyWithCommitment", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.PayloadKeyWithCommitment", FIELDS, GeneratedVisitor) } } impl serde::Serialize for Transaction { @@ -3206,8 +2759,7 @@ impl serde::Serialize for Transaction { if self.anchor.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.Transaction", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.Transaction", len)?; if let Some(v) = self.body.as_ref() { struct_ser.serialize_field("body", v)?; } @@ -3226,7 +2778,12 @@ impl<'de> serde::Deserialize<'de> for Transaction { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["body", "binding_sig", "bindingSig", "anchor"]; + const FIELDS: &[&str] = &[ + "body", + "binding_sig", + "bindingSig", + "anchor", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -3245,10 +2802,7 @@ impl<'de> serde::Deserialize<'de> for Transaction { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3277,8 +2831,8 @@ impl<'de> serde::Deserialize<'de> for Transaction { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut body__ = None; let mut binding_sig__ = None; @@ -3315,11 +2869,7 @@ impl<'de> serde::Deserialize<'de> for Transaction { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.Transaction", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.Transaction", FIELDS, GeneratedVisitor) } } impl serde::Serialize for TransactionBody { @@ -3342,8 +2892,7 @@ impl serde::Serialize for TransactionBody { if self.memo.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBody", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBody", len)?; if !self.actions.is_empty() { struct_ser.serialize_field("actions", &self.actions)?; } @@ -3392,10 +2941,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3406,9 +2952,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { { match value { "actions" => Ok(GeneratedField::Actions), - "transactionParameters" | "transaction_parameters" => { - Ok(GeneratedField::TransactionParameters) - } + "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memo" => Ok(GeneratedField::Memo), _ => Ok(GeneratedField::__SkipField__), @@ -3427,8 +2971,8 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut actions__ = None; let mut transaction_parameters__ = None; @@ -3444,9 +2988,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { } GeneratedField::TransactionParameters => { if transaction_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field( - "transactionParameters", - )); + return Err(serde::de::Error::duplicate_field("transactionParameters")); } transaction_parameters__ = map_.next_value()?; } @@ -3475,11 +3017,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBody { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionBody", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionBody", FIELDS, GeneratedVisitor) } } impl serde::Serialize for TransactionBodyView { @@ -3502,8 +3040,7 @@ impl serde::Serialize for TransactionBodyView { if self.memo_view.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBodyView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionBodyView", len)?; if !self.action_views.is_empty() { struct_ser.serialize_field("actionViews", &self.action_views)?; } @@ -3554,10 +3091,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3568,9 +3102,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { { match value { "actionViews" | "action_views" => Ok(GeneratedField::ActionViews), - "transactionParameters" | "transaction_parameters" => { - Ok(GeneratedField::TransactionParameters) - } + "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memoView" | "memo_view" => Ok(GeneratedField::MemoView), _ => Ok(GeneratedField::__SkipField__), @@ -3589,8 +3121,8 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut action_views__ = None; let mut transaction_parameters__ = None; @@ -3606,9 +3138,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { } GeneratedField::TransactionParameters => { if transaction_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field( - "transactionParameters", - )); + return Err(serde::de::Error::duplicate_field("transactionParameters")); } transaction_parameters__ = map_.next_value()?; } @@ -3637,11 +3167,7 @@ impl<'de> serde::Deserialize<'de> for TransactionBodyView { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionBodyView", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionBodyView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for TransactionParameters { @@ -3661,15 +3187,11 @@ impl serde::Serialize for TransactionParameters { if self.fee.is_some() { len += 1; } - let mut struct_ser = serializer - .serialize_struct("penumbra.core.transaction.v1.TransactionParameters", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionParameters", len)?; if self.expiry_height != 0 { #[allow(clippy::needless_borrow)] #[allow(clippy::needless_borrows_for_generic_args)] - struct_ser.serialize_field( - "expiryHeight", - ToString::to_string(&self.expiry_height).as_str(), - )?; + struct_ser.serialize_field("expiryHeight", ToString::to_string(&self.expiry_height).as_str())?; } if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; @@ -3711,10 +3233,7 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3742,12 +3261,9 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { formatter.write_str("struct penumbra.core.transaction.v1.TransactionParameters") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut expiry_height__ = None; let mut chain_id__ = None; @@ -3758,10 +3274,9 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { if expiry_height__.is_some() { return Err(serde::de::Error::duplicate_field("expiryHeight")); } - expiry_height__ = Some( - map_.next_value::<::pbjson::private::NumberDeserialize<_>>()? - .0, - ); + expiry_height__ = + Some(map_.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; } GeneratedField::ChainId => { if chain_id__.is_some() { @@ -3787,11 +3302,7 @@ impl<'de> serde::Deserialize<'de> for TransactionParameters { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionParameters", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionParameters", FIELDS, GeneratedVisitor) } } impl serde::Serialize for TransactionPerspective { @@ -3835,8 +3346,7 @@ impl serde::Serialize for TransactionPerspective { if !self.batch_swap_output_data.is_empty() { len += 1; } - let mut struct_ser = serializer - .serialize_struct("penumbra.core.transaction.v1.TransactionPerspective", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPerspective", len)?; if !self.payload_keys.is_empty() { struct_ser.serialize_field("payloadKeys", &self.payload_keys)?; } @@ -3862,16 +3372,10 @@ impl serde::Serialize for TransactionPerspective { struct_ser.serialize_field("extendedMetadata", &self.extended_metadata)?; } if !self.creation_transaction_ids_by_nullifier.is_empty() { - struct_ser.serialize_field( - "creationTransactionIdsByNullifier", - &self.creation_transaction_ids_by_nullifier, - )?; + struct_ser.serialize_field("creationTransactionIdsByNullifier", &self.creation_transaction_ids_by_nullifier)?; } if !self.nullification_transaction_ids_by_commitment.is_empty() { - struct_ser.serialize_field( - "nullificationTransactionIdsByCommitment", - &self.nullification_transaction_ids_by_commitment, - )?; + struct_ser.serialize_field("nullificationTransactionIdsByCommitment", &self.nullification_transaction_ids_by_commitment)?; } if !self.batch_swap_output_data.is_empty() { struct_ser.serialize_field("batchSwapOutputData", &self.batch_swap_output_data)?; @@ -3933,10 +3437,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -3947,28 +3448,16 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { { match value { "payloadKeys" | "payload_keys" => Ok(GeneratedField::PayloadKeys), - "spendNullifiers" | "spend_nullifiers" => { - Ok(GeneratedField::SpendNullifiers) - } + "spendNullifiers" | "spend_nullifiers" => Ok(GeneratedField::SpendNullifiers), "adviceNotes" | "advice_notes" => Ok(GeneratedField::AdviceNotes), "addressViews" | "address_views" => Ok(GeneratedField::AddressViews), "denoms" => Ok(GeneratedField::Denoms), "transactionId" | "transaction_id" => Ok(GeneratedField::TransactionId), "prices" => Ok(GeneratedField::Prices), - "extendedMetadata" | "extended_metadata" => { - Ok(GeneratedField::ExtendedMetadata) - } - "creationTransactionIdsByNullifier" - | "creation_transaction_ids_by_nullifier" => { - Ok(GeneratedField::CreationTransactionIdsByNullifier) - } - "nullificationTransactionIdsByCommitment" - | "nullification_transaction_ids_by_commitment" => { - Ok(GeneratedField::NullificationTransactionIdsByCommitment) - } - "batchSwapOutputData" | "batch_swap_output_data" => { - Ok(GeneratedField::BatchSwapOutputData) - } + "extendedMetadata" | "extended_metadata" => Ok(GeneratedField::ExtendedMetadata), + "creationTransactionIdsByNullifier" | "creation_transaction_ids_by_nullifier" => Ok(GeneratedField::CreationTransactionIdsByNullifier), + "nullificationTransactionIdsByCommitment" | "nullification_transaction_ids_by_commitment" => Ok(GeneratedField::NullificationTransactionIdsByCommitment), + "batchSwapOutputData" | "batch_swap_output_data" => Ok(GeneratedField::BatchSwapOutputData), _ => Ok(GeneratedField::__SkipField__), } } @@ -3984,12 +3473,9 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut payload_keys__ = None; let mut spend_nullifiers__ = None; @@ -4054,26 +3540,19 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { } GeneratedField::CreationTransactionIdsByNullifier => { if creation_transaction_ids_by_nullifier__.is_some() { - return Err(serde::de::Error::duplicate_field( - "creationTransactionIdsByNullifier", - )); + return Err(serde::de::Error::duplicate_field("creationTransactionIdsByNullifier")); } creation_transaction_ids_by_nullifier__ = Some(map_.next_value()?); } GeneratedField::NullificationTransactionIdsByCommitment => { if nullification_transaction_ids_by_commitment__.is_some() { - return Err(serde::de::Error::duplicate_field( - "nullificationTransactionIdsByCommitment", - )); + return Err(serde::de::Error::duplicate_field("nullificationTransactionIdsByCommitment")); } - nullification_transaction_ids_by_commitment__ = - Some(map_.next_value()?); + nullification_transaction_ids_by_commitment__ = Some(map_.next_value()?); } GeneratedField::BatchSwapOutputData => { if batch_swap_output_data__.is_some() { - return Err(serde::de::Error::duplicate_field( - "batchSwapOutputData", - )); + return Err(serde::de::Error::duplicate_field("batchSwapOutputData")); } batch_swap_output_data__ = Some(map_.next_value()?); } @@ -4091,19 +3570,13 @@ impl<'de> serde::Deserialize<'de> for TransactionPerspective { transaction_id: transaction_id__, prices: prices__.unwrap_or_default(), extended_metadata: extended_metadata__.unwrap_or_default(), - creation_transaction_ids_by_nullifier: creation_transaction_ids_by_nullifier__ - .unwrap_or_default(), - nullification_transaction_ids_by_commitment: - nullification_transaction_ids_by_commitment__.unwrap_or_default(), + creation_transaction_ids_by_nullifier: creation_transaction_ids_by_nullifier__.unwrap_or_default(), + nullification_transaction_ids_by_commitment: nullification_transaction_ids_by_commitment__.unwrap_or_default(), batch_swap_output_data: batch_swap_output_data__.unwrap_or_default(), }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionPerspective", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective", FIELDS, GeneratedVisitor) } } impl serde::Serialize for transaction_perspective::CreationTransactionIdByNullifier { @@ -4120,10 +3593,7 @@ impl serde::Serialize for transaction_perspective::CreationTransactionIdByNullif if self.transaction_id.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct( - "penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", - len, - )?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", len)?; if let Some(v) = self.nullifier.as_ref() { struct_ser.serialize_field("nullifier", v)?; } @@ -4139,7 +3609,11 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["nullifier", "transaction_id", "transactionId"]; + const FIELDS: &[&str] = &[ + "nullifier", + "transaction_id", + "transactionId", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4157,10 +3631,7 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4187,15 +3658,9 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result< - transaction_perspective::CreationTransactionIdByNullifier, - V::Error, - > - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut nullifier__ = None; let mut transaction_id__ = None; @@ -4224,11 +3689,7 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::CreationTransacti }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective.CreationTransactionIdByNullifier", FIELDS, GeneratedVisitor) } } impl serde::Serialize for transaction_perspective::ExtendedMetadataById { @@ -4245,10 +3706,7 @@ impl serde::Serialize for transaction_perspective::ExtendedMetadataById { if self.extended_metadata.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct( - "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", - len, - )?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", len)?; if let Some(v) = self.asset_id.as_ref() { struct_ser.serialize_field("assetId", v)?; } @@ -4287,10 +3745,7 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4301,9 +3756,7 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB { match value { "assetId" | "asset_id" => Ok(GeneratedField::AssetId), - "extendedMetadata" | "extended_metadata" => { - Ok(GeneratedField::ExtendedMetadata) - } + "extendedMetadata" | "extended_metadata" => Ok(GeneratedField::ExtendedMetadata), _ => Ok(GeneratedField::__SkipField__), } } @@ -4319,12 +3772,9 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut asset_id__ = None; let mut extended_metadata__ = None; @@ -4353,11 +3803,7 @@ impl<'de> serde::Deserialize<'de> for transaction_perspective::ExtendedMetadataB }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective.ExtendedMetadataById", FIELDS, GeneratedVisitor) } } impl serde::Serialize for transaction_perspective::NullificationTransactionIdByCommitment { @@ -4384,15 +3830,17 @@ impl serde::Serialize for transaction_perspective::NullificationTransactionIdByC struct_ser.end() } } -impl<'de> serde::Deserialize<'de> - for transaction_perspective::NullificationTransactionIdByCommitment -{ +impl<'de> serde::Deserialize<'de> for transaction_perspective::NullificationTransactionIdByCommitment { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["commitment", "transaction_id", "transactionId"]; + const FIELDS: &[&str] = &[ + "commitment", + "transaction_id", + "transactionId", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4410,10 +3858,7 @@ impl<'de> serde::Deserialize<'de> impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4440,15 +3885,9 @@ impl<'de> serde::Deserialize<'de> formatter.write_str("struct penumbra.core.transaction.v1.TransactionPerspective.NullificationTransactionIdByCommitment") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result< - transaction_perspective::NullificationTransactionIdByCommitment, - V::Error, - > - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut commitment__ = None; let mut transaction_id__ = None; @@ -4471,12 +3910,10 @@ impl<'de> serde::Deserialize<'de> } } } - Ok( - transaction_perspective::NullificationTransactionIdByCommitment { - commitment: commitment__, - transaction_id: transaction_id__, - }, - ) + Ok(transaction_perspective::NullificationTransactionIdByCommitment { + commitment: commitment__, + transaction_id: transaction_id__, + }) } } deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPerspective.NullificationTransactionIdByCommitment", FIELDS, GeneratedVisitor) @@ -4502,8 +3939,7 @@ impl serde::Serialize for TransactionPlan { if self.memo.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPlan", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionPlan", len)?; if !self.actions.is_empty() { struct_ser.serialize_field("actions", &self.actions)?; } @@ -4552,10 +3988,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4566,9 +3999,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { { match value { "actions" => Ok(GeneratedField::Actions), - "transactionParameters" | "transaction_parameters" => { - Ok(GeneratedField::TransactionParameters) - } + "transactionParameters" | "transaction_parameters" => Ok(GeneratedField::TransactionParameters), "detectionData" | "detection_data" => Ok(GeneratedField::DetectionData), "memo" => Ok(GeneratedField::Memo), _ => Ok(GeneratedField::__SkipField__), @@ -4587,8 +4018,8 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut actions__ = None; let mut transaction_parameters__ = None; @@ -4604,9 +4035,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { } GeneratedField::TransactionParameters => { if transaction_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field( - "transactionParameters", - )); + return Err(serde::de::Error::duplicate_field("transactionParameters")); } transaction_parameters__ = map_.next_value()?; } @@ -4635,11 +4064,7 @@ impl<'de> serde::Deserialize<'de> for TransactionPlan { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionPlan", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionPlan", FIELDS, GeneratedVisitor) } } impl serde::Serialize for TransactionSummary { @@ -4653,8 +4078,7 @@ impl serde::Serialize for TransactionSummary { if !self.effects.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.TransactionSummary", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionSummary", len)?; if !self.effects.is_empty() { struct_ser.serialize_field("effects", &self.effects)?; } @@ -4667,7 +4091,9 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["effects"]; + const FIELDS: &[&str] = &[ + "effects", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4684,10 +4110,7 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4714,8 +4137,8 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut effects__ = None; while let Some(k) = map_.next_key()? { @@ -4736,11 +4159,7 @@ impl<'de> serde::Deserialize<'de> for TransactionSummary { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionSummary", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionSummary", FIELDS, GeneratedVisitor) } } impl serde::Serialize for transaction_summary::Effects { @@ -4757,10 +4176,7 @@ impl serde::Serialize for transaction_summary::Effects { if self.balance.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct( - "penumbra.core.transaction.v1.TransactionSummary.Effects", - len, - )?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionSummary.Effects", len)?; if let Some(v) = self.address.as_ref() { struct_ser.serialize_field("address", v)?; } @@ -4776,7 +4192,10 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["address", "balance"]; + const FIELDS: &[&str] = &[ + "address", + "balance", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -4794,10 +4213,7 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4821,16 +4237,12 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { type Value = transaction_summary::Effects; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter - .write_str("struct penumbra.core.transaction.v1.TransactionSummary.Effects") + formatter.write_str("struct penumbra.core.transaction.v1.TransactionSummary.Effects") } - fn visit_map( - self, - mut map_: V, - ) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + fn visit_map(self, mut map_: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, { let mut address__ = None; let mut balance__ = None; @@ -4859,11 +4271,7 @@ impl<'de> serde::Deserialize<'de> for transaction_summary::Effects { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionSummary.Effects", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionSummary.Effects", FIELDS, GeneratedVisitor) } } impl serde::Serialize for TransactionView { @@ -4883,8 +4291,7 @@ impl serde::Serialize for TransactionView { if self.anchor.is_some() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.TransactionView", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.TransactionView", len)?; if let Some(v) = self.body_view.as_ref() { struct_ser.serialize_field("bodyView", v)?; } @@ -4928,10 +4335,7 @@ impl<'de> serde::Deserialize<'de> for TransactionView { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -4960,8 +4364,8 @@ impl<'de> serde::Deserialize<'de> for TransactionView { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut body_view__ = None; let mut binding_sig__ = None; @@ -4998,11 +4402,7 @@ impl<'de> serde::Deserialize<'de> for TransactionView { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.TransactionView", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.TransactionView", FIELDS, GeneratedVisitor) } } impl serde::Serialize for WitnessData { @@ -5019,8 +4419,7 @@ impl serde::Serialize for WitnessData { if !self.state_commitment_proofs.is_empty() { len += 1; } - let mut struct_ser = - serializer.serialize_struct("penumbra.core.transaction.v1.WitnessData", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.transaction.v1.WitnessData", len)?; if let Some(v) = self.anchor.as_ref() { struct_ser.serialize_field("anchor", v)?; } @@ -5036,7 +4435,11 @@ impl<'de> serde::Deserialize<'de> for WitnessData { where D: serde::Deserializer<'de>, { - const FIELDS: &[&str] = &["anchor", "state_commitment_proofs", "stateCommitmentProofs"]; + const FIELDS: &[&str] = &[ + "anchor", + "state_commitment_proofs", + "stateCommitmentProofs", + ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { @@ -5054,10 +4457,7 @@ impl<'de> serde::Deserialize<'de> for WitnessData { impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { type Value = GeneratedField; - fn expecting( - &self, - formatter: &mut std::fmt::Formatter<'_>, - ) -> std::fmt::Result { + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(formatter, "expected one of: {:?}", &FIELDS) } @@ -5068,9 +4468,7 @@ impl<'de> serde::Deserialize<'de> for WitnessData { { match value { "anchor" => Ok(GeneratedField::Anchor), - "stateCommitmentProofs" | "state_commitment_proofs" => { - Ok(GeneratedField::StateCommitmentProofs) - } + "stateCommitmentProofs" | "state_commitment_proofs" => Ok(GeneratedField::StateCommitmentProofs), _ => Ok(GeneratedField::__SkipField__), } } @@ -5087,8 +4485,8 @@ impl<'de> serde::Deserialize<'de> for WitnessData { } fn visit_map(self, mut map_: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, + where + V: serde::de::MapAccess<'de>, { let mut anchor__ = None; let mut state_commitment_proofs__ = None; @@ -5102,9 +4500,7 @@ impl<'de> serde::Deserialize<'de> for WitnessData { } GeneratedField::StateCommitmentProofs => { if state_commitment_proofs__.is_some() { - return Err(serde::de::Error::duplicate_field( - "stateCommitmentProofs", - )); + return Err(serde::de::Error::duplicate_field("stateCommitmentProofs")); } state_commitment_proofs__ = Some(map_.next_value()?); } @@ -5119,10 +4515,6 @@ impl<'de> serde::Deserialize<'de> for WitnessData { }) } } - deserializer.deserialize_struct( - "penumbra.core.transaction.v1.WitnessData", - FIELDS, - GeneratedVisitor, - ) + deserializer.deserialize_struct("penumbra.core.transaction.v1.WitnessData", FIELDS, GeneratedVisitor) } } diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index d10fd2aa82043e666a4534d3f972175b24e303aa..f613403ab9be6e66c341fd681cd9f41366432053 100644 GIT binary patch delta 21127 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 delta 23892 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 diff --git a/proto/penumbra/penumbra/core/transaction/v1/transaction.proto b/proto/penumbra/penumbra/core/transaction/v1/transaction.proto index 0ad1e025d3..beffedd441 100644 --- a/proto/penumbra/penumbra/core/transaction/v1/transaction.proto +++ b/proto/penumbra/penumbra/core/transaction/v1/transaction.proto @@ -391,9 +391,3 @@ message MemoView { Opaque opaque = 2; } } - -// Event emitted when a transaction is included in a block -message EventBlockTransaction { - txhash.v1.TransactionId transaction_id = 1; - Transaction transaction = 2; -} From 28d66521fd4e3e0d6e840e9bc723b921bfabd05b Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Tue, 18 Feb 2025 16:37:50 -0800 Subject: [PATCH 7/8] Back out "Add EventBlockTransaction" This backs out commit 1176d710313d215bbdea682933e6b80ff0031afb. --- crates/bin/pindexer/src/dex_ex/mod.rs | 2 +- crates/core/component/dex/src/event.rs | 39 ------------------ .../proto/src/gen/proto_descriptor.bin.no_lfs | Bin 643798 -> 646381 bytes 3 files changed, 1 insertion(+), 40 deletions(-) diff --git a/crates/bin/pindexer/src/dex_ex/mod.rs b/crates/bin/pindexer/src/dex_ex/mod.rs index 10ecd06dbb..27af8df5ac 100644 --- a/crates/bin/pindexer/src/dex_ex/mod.rs +++ b/crates/bin/pindexer/src/dex_ex/mod.rs @@ -1408,7 +1408,7 @@ impl Component { dbtx: &mut PgTransaction<'_>, time: DateTime, height: i32, - transaction_id: TransactionId, + transaction_id: [u8; 32], transaction: Transaction, ) -> anyhow::Result<()> { sqlx::query( diff --git a/crates/core/component/dex/src/event.rs b/crates/core/component/dex/src/event.rs index b8ba02677a..8b39d6a7e3 100644 --- a/crates/core/component/dex/src/event.rs +++ b/crates/core/component/dex/src/event.rs @@ -661,42 +661,3 @@ impl From for pb::EventCandlestickData { impl DomainType for EventCandlestickData { type Proto = pb::EventCandlestickData; } - -#[derive(Clone, Debug)] -pub struct EventBlockTransaction { - pub transaction_id: TransactionId, - pub transaction: Transaction, -} - -impl TryFrom for EventBlockTransaction { - type Error = anyhow::Error; - - fn try_from(value: pb::EventBlockTransaction) -> Result { - fn inner(value: pb::EventBlockTransaction) -> anyhow::Result { - Ok(EventBlockTransaction { - transaction_id: value - .transaction_id - .ok_or(anyhow!("missing `transaction_id`"))? - .try_into()?, - transaction: value - .transaction - .ok_or(anyhow!("missing `transaction`"))? - .try_into()?, - }) - } - inner(value).context(format!("parsing {}", pb::EventBlockTransaction::NAME)) - } -} - -impl From for pb::EventBlockTransaction { - fn from(value: EventBlockTransaction) -> Self { - Self { - transaction_id: Some(value.transaction_id.into()), - transaction: Some(value.transaction.into()), - } - } -} - -impl DomainType for EventBlockTransaction { - type Proto = pb::EventBlockTransaction; -} diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index f613403ab9be6e66c341fd681cd9f41366432053..6dc78d95fc02e51847238bed50833fa4eea97aea 100644 GIT binary patch delta 23276 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 U_%rcm;m^jO^QSsHGUmPi1{>{j(EtDd delta 20761 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 Date: Tue, 18 Feb 2025 17:13:36 -0800 Subject: [PATCH 8/8] pindexer: properly record transactions in dex_ex table --- Cargo.lock | 1 + crates/bin/pindexer/Cargo.toml | 1 + crates/bin/pindexer/src/dex_ex/mod.rs | 35 ++++++++++++++--------- crates/bin/pindexer/src/dex_ex/schema.sql | 7 ++--- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 91dd894a17..461d47bae5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6110,6 +6110,7 @@ dependencies = [ "penumbra-sdk-sct", "penumbra-sdk-shielded-pool", "penumbra-sdk-stake", + "penumbra-sdk-transaction", "predicates 2.1.5", "prost 0.13.4", "prost-reflect", diff --git a/crates/bin/pindexer/Cargo.toml b/crates/bin/pindexer/Cargo.toml index c8d5af4f00..65f417a369 100644 --- a/crates/bin/pindexer/Cargo.toml +++ b/crates/bin/pindexer/Cargo.toml @@ -38,6 +38,7 @@ penumbra-sdk-num = {workspace = true, default-features = false} penumbra-sdk-asset = {workspace = true, default-features = false} penumbra-sdk-proto = {workspace = true, default-features = false} penumbra-sdk-sct = {workspace = true, default-features = false} +penumbra-sdk-transaction = {workspace = true, default-features = false} prost = {workspace = true} tracing = {workspace = true} tokio = {workspace = true, features = ["full"]} diff --git a/crates/bin/pindexer/src/dex_ex/mod.rs b/crates/bin/pindexer/src/dex_ex/mod.rs index 27af8df5ac..de0215eb23 100644 --- a/crates/bin/pindexer/src/dex_ex/mod.rs +++ b/crates/bin/pindexer/src/dex_ex/mod.rs @@ -21,6 +21,7 @@ use penumbra_sdk_num::Amount; use penumbra_sdk_proto::event::EventDomainType; use penumbra_sdk_proto::DomainType; use penumbra_sdk_sct::event::EventBlockRoot; +use penumbra_sdk_transaction::Transaction; use sqlx::types::BigDecimal; use sqlx::{prelude::Type, Row}; use std::collections::{BTreeMap, HashMap, HashSet}; @@ -703,8 +704,6 @@ struct Events { position_open_txs: BTreeMap, position_close_txs: BTreeMap, position_withdrawal_txs: BTreeMap, - // Track transactions - transactions: HashMap, } impl Events { @@ -725,7 +724,6 @@ impl Events { position_open_txs: BTreeMap::new(), position_close_txs: BTreeMap::new(), position_withdrawal_txs: BTreeMap::new(), - transactions: HashMap::new(), } } @@ -891,8 +889,6 @@ impl Events { .entry(e.trading_pair) .or_insert_with(Vec::new) .push(e); - } else if let Ok(e) = EventBlockTransaction::try_from_event(&event.event) { - out.transactions.insert(e.transaction_id, e.transaction); } } Ok(out) @@ -1407,7 +1403,7 @@ impl Component { &self, dbtx: &mut PgTransaction<'_>, time: DateTime, - height: i32, + height: u64, transaction_id: [u8; 32], transaction: Transaction, ) -> anyhow::Result<()> { @@ -1420,14 +1416,29 @@ impl Component { ) VALUES ($1, $2, $3, $4)", ) .bind(transaction_id) - .bind(transaction) - .bind(height) + .bind(transaction.encode_to_vec()) + .bind(i32::try_from(height)?) .bind(time) .execute(dbtx.as_mut()) .await?; Ok(()) } + + async fn record_all_transactions( + &self, + dbtx: &mut PgTransaction<'_>, + time: DateTime, + block: &BlockEvents, + ) -> anyhow::Result<()> { + for (tx_id, tx_bytes) in block.transactions() { + let tx = Transaction::try_from(tx_bytes)?; + let height = block.height(); + self.record_transaction(dbtx, time, height, tx_id, tx) + .await?; + } + Ok(()) + } } #[async_trait] @@ -1463,6 +1474,8 @@ impl AppView for Component { .expect(&format!("no block root event at height {}", block.height)); last_time = Some(time); + self.record_all_transactions(dbtx, time, block).await?; + // Load any missing positions before processing events events.load_positions(dbtx).await?; @@ -1506,12 +1519,6 @@ impl AppView for Component { .await?; } - // Record transactions - for (transaction_id, transaction) in &events.transactions { - self.record_transaction(dbtx, time, events.height, transaction_id, transaction) - .await?; - } - for (pair, candle) in &events.candles { for window in Window::all() { let key = (pair.start, pair.end, window); diff --git a/crates/bin/pindexer/src/dex_ex/schema.sql b/crates/bin/pindexer/src/dex_ex/schema.sql index f12d4579bc..48d00957eb 100644 --- a/crates/bin/pindexer/src/dex_ex/schema.sql +++ b/crates/bin/pindexer/src/dex_ex/schema.sql @@ -252,17 +252,14 @@ CREATE TABLE IF NOT EXISTS dex_ex_block_summary ( CREATE INDEX ON dex_ex_block_summary (time, height); CREATE TABLE IF NOT EXISTS dex_ex_transactions ( - -- The primary key - rowid SERIAL PRIMARY KEY, -- The unique identifier of the transaction - transaction_id BYTEA NOT NULL UNIQUE, + transaction_id BYTEA NOT NULL PRIMARY KEY, -- The raw transaction bytes transaction BYTEA NOT NULL, -- The block height at which this transaction was included height INTEGER NOT NULL, -- The timestamp when this transaction was included in a block - time TIMESTAMPTZ NOT NULL, - PRIMARY KEY (transaction_id) + time TIMESTAMPTZ NOT NULL ); CREATE INDEX ON dex_ex_transactions (time, height);