diff --git a/Cargo.lock b/Cargo.lock index 1bd5fc5fcf..d53274882b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3967,6 +3967,7 @@ dependencies = [ "metrics-exporter-prometheus", "metrics-tracing-context", "metrics-util", + "penumbra-app", "penumbra-chain", "penumbra-proto", "penumbra-storage", @@ -5166,6 +5167,7 @@ dependencies = [ "bytesize", "clap 3.2.25", "indicatif", + "penumbra-app", "penumbra-chain", "penumbra-compact-block", "penumbra-proto", diff --git a/crates/bin/pcli/src/command/query/chain.rs b/crates/bin/pcli/src/command/query/chain.rs index 67dd2ee7fc..7993855192 100644 --- a/crates/bin/pcli/src/command/query/chain.rs +++ b/crates/bin/pcli/src/command/query/chain.rs @@ -1,10 +1,10 @@ use anyhow::{anyhow, Context, Result}; use comfy_table::{presets, Table}; use futures::TryStreamExt; -use penumbra_chain::params::ChainParameters; +use penumbra_app::params::AppParameters; use penumbra_proto::{ core::app::v1alpha1::{ - query_service_client::QueryServiceClient as AppQueryServiceClient, ChainParametersRequest, + query_service_client::QueryServiceClient as AppQueryServiceClient, AppParametersRequest, }, core::component::chain::v1alpha1::{ query_service_client::QueryServiceClient as ChainQueryServiceClient, EpochByHeightRequest, @@ -46,16 +46,16 @@ pub struct Stats { } impl ChainCmd { - pub async fn print_chain_params(&self, app: &mut App) -> Result<()> { + pub async fn print_app_params(&self, app: &mut App) -> Result<()> { let mut client = AppQueryServiceClient::new(app.pd_channel().await?); - let params: ChainParameters = client - .chain_parameters(tonic::Request::new(ChainParametersRequest { + let params: AppParameters = client + .app_parameters(tonic::Request::new(AppParametersRequest { chain_id: "".to_string(), })) .await? .into_inner() - .chain_parameters - .ok_or_else(|| anyhow::anyhow!("empty ChainParametersResponse message"))? + .app_parameters + .ok_or_else(|| anyhow::anyhow!("empty AppParametersResponse message"))? .try_into()?; println!("Chain Parameters:"); @@ -63,51 +63,54 @@ impl ChainCmd { table.load_preset(presets::NOTHING); table .set_header(vec!["", ""]) - .add_row(vec!["Chain ID", ¶ms.chain_id]) + .add_row(vec!["Chain ID", ¶ms.chain_params.chain_id]) .add_row(vec![ "Epoch Duration", - &format!("{}", params.epoch_duration), + &format!("{}", params.chain_params.epoch_duration), ]) .add_row(vec![ "Unbonding Epochs", - &format!("{}", params.unbonding_epochs), + &format!("{}", params.stake_params.unbonding_epochs), ]) .add_row(vec![ "Active Validator Limit", - &format!("{}", params.active_validator_limit), + &format!("{}", params.stake_params.active_validator_limit), ]) .add_row(vec![ "Base Reward Rate (bps^2)", - &format!("{}", params.base_reward_rate), + &format!("{}", params.stake_params.base_reward_rate), ]) .add_row(vec![ "Slashing Penalty (Misbehavior) (bps^2)", - &format!("{}", params.slashing_penalty_misbehavior), + &format!("{}", params.stake_params.slashing_penalty_misbehavior), ]) .add_row(vec![ "Slashing Penalty (Downtime) (bps^2)", - &format!("{}", params.slashing_penalty_downtime), + &format!("{}", params.stake_params.slashing_penalty_downtime), ]) .add_row(vec![ "Signed Blocks Window (blocks)", - &format!("{}", params.signed_blocks_window_len), + &format!("{}", params.stake_params.signed_blocks_window_len), ]) .add_row(vec![ "Missed Blocks Max", - &format!("{}", params.missed_blocks_maximum), + &format!("{}", params.stake_params.missed_blocks_maximum), ]) .add_row(vec![ "Proposal Deposit Amount (upenumbra)", - &format!("{}", params.proposal_deposit_amount), + &format!("{}", params.governance_params.proposal_deposit_amount), + ]) + .add_row(vec![ + "IBC Enabled", + &format!("{}", params.ibc_params.ibc_enabled), ]) - .add_row(vec!["IBC Enabled", &format!("{}", params.ibc_enabled)]) .add_row(vec![ "Inbound ICS-20 Enabled", - &format!("{}", params.inbound_ics20_transfers_enabled), + &format!("{}", params.ibc_params.inbound_ics20_transfers_enabled), ]) .add_row(vec![ "Outbound ICS-20 Enabled", - &format!("{}", params.outbound_ics20_transfers_enabled), + &format!("{}", params.ibc_params.outbound_ics20_transfers_enabled), ]); println!("{table}"); @@ -139,21 +142,24 @@ impl ChainCmd { .index; let mut client = AppQueryServiceClient::new(channel.clone()); - let chain_params = client - .chain_parameters(tonic::Request::new(ChainParametersRequest { + let app_params = client + .app_parameters(tonic::Request::new(AppParametersRequest { chain_id: "".to_string(), })) .await? .into_inner() - .chain_parameters - .ok_or_else(|| anyhow::anyhow!("empty ChainParametersResponse message"))?; + .app_parameters + .ok_or_else(|| anyhow::anyhow!("empty AppParametersResponse message"))?; // Fetch validators. let mut client = StakeQueryServiceClient::new(channel.clone()); let validators = client .validator_info(ValidatorInfoRequest { show_inactive: true, - chain_id: chain_params.chain_id, + chain_id: app_params + .chain_params + .ok_or_else(|| anyhow::anyhow!("missing chain_params in app params"))? + .chain_id, }) .await? .into_inner() @@ -200,14 +206,14 @@ impl ChainCmd { pub async fn exec(&self, app: &mut App) -> Result<()> { match self { ChainCmd::Params => { - self.print_chain_params(app).await?; + self.print_app_params(app).await?; } // TODO: we could implement this as an RPC call using the metrics // subsystems once #829 is complete // OR (hdevalence): fold it into pcli q ChainCmd::Info { verbose } => { if *verbose { - self.print_chain_params(app).await?; + self.print_app_params(app).await?; } let stats = self.get_stats(app).await?; diff --git a/crates/bin/pcli/src/command/query/dex.rs b/crates/bin/pcli/src/command/query/dex.rs index 35ccddb748..bf4176113c 100644 --- a/crates/bin/pcli/src/command/query/dex.rs +++ b/crates/bin/pcli/src/command/query/dex.rs @@ -312,7 +312,7 @@ impl DexCmd { ) -> Result<()> { let mut client = ShieldedPoolQueryServiceClient::new(app.pd_channel().await?); - let chain_id = app.view().chain_params().await?.chain_id; + let chain_id = app.view().app_params().await?.chain_params.chain_id; let outputs = self .get_batch_outputs(app, chain_id.clone(), height, trading_pair) @@ -408,7 +408,7 @@ impl DexCmd { } DexCmd::AllPositions { include_closed } => { let client = DexQueryServiceClient::new(app.pd_channel().await?); - let chain_id = app.view().chain_params().await?.chain_id; + let chain_id = app.view().app_params().await?.chain_params.chain_id; let positions_stream = self .get_all_liquidity_positions(client.clone(), *include_closed, Some(chain_id)) diff --git a/crates/bin/pcli/src/command/tx.rs b/crates/bin/pcli/src/command/tx.rs index b576a6f194..363e2bde11 100644 --- a/crates/bin/pcli/src/command/tx.rs +++ b/crates/bin/pcli/src/command/tx.rs @@ -426,7 +426,7 @@ impl TxCmd { .view .as_mut() .context("view service must be initialized")? - .chain_params() + .app_params() .await?; let account_group_id = app.fvk.account_group_id(); @@ -437,7 +437,7 @@ impl TxCmd { swap_plaintext, position: swap_record.position, output_data: swap_record.output_data, - epoch_duration: params.epoch_duration, + epoch_duration: params.chain_params.epoch_duration, proof_blinding_r: Fq::rand(&mut OsRng), proof_blinding_s: Fq::rand(&mut OsRng), }) @@ -549,7 +549,7 @@ impl TxCmd { .as_mut() .context("view service must be initialized")?; - let params = view.chain_params().await?; + let params = view.app_params().await?; let current_height = view.status(account_group_id).await?.sync_height; let mut client = ChainQueryServiceClient::new(channel.clone()); let current_epoch = client @@ -590,7 +590,7 @@ impl TxCmd { let mut client = StakeQueryServiceClient::new(channel.clone()); let penalty: Penalty = client .validator_penalty(tonic::Request::new(ValidatorPenaltyRequest { - chain_id: params.chain_id.to_string(), + chain_id: params.chain_params.chain_id.to_string(), identity_key: Some(validator_identity.into()), start_epoch_index, end_epoch_index, @@ -781,7 +781,7 @@ impl TxCmd { start_position, } = client .proposal_info(ProposalInfoRequest { - chain_id: app.view().chain_params().await?.chain_id, + chain_id: app.view().app_params().await?.chain_params.chain_id, proposal_id, }) .await? @@ -790,7 +790,7 @@ impl TxCmd { let mut rate_data_stream = client .proposal_rate_data(ProposalRateDataRequest { - chain_id: app.view().chain_params().await?.chain_id, + chain_id: app.view().app_params().await?.chain_params.chain_id, proposal_id, }) .await? @@ -1013,14 +1013,14 @@ impl TxCmd { .view .as_mut() .context("view service must be initialized")?; - let params = view.chain_params().await?; + let params = view.app_params().await?; for position_id in owned_position_ids { // Withdraw the position // Fetch the information regarding the position from the view service. let position = client .liquidity_position_by_id(LiquidityPositionByIdRequest { - chain_id: params.chain_id.to_string(), + chain_id: params.chain_params.chain_id.to_string(), position_id: Some(position_id.into()), }) .await? @@ -1069,12 +1069,12 @@ impl TxCmd { .view .as_mut() .context("view service must be initialized")?; - let params = view.chain_params().await?; + let params = view.app_params().await?; // Fetch the information regarding the position from the view service. let position = client .liquidity_position_by_id(LiquidityPositionByIdRequest { - chain_id: params.chain_id.to_string(), + chain_id: params.chain_params.chain_id.to_string(), position_id: Some(PositionId::from(*position_id)), }) .await? diff --git a/crates/bin/pclientd/src/lib.rs b/crates/bin/pclientd/src/lib.rs index 1b342904a5..81e5c63def 100644 --- a/crates/bin/pclientd/src/lib.rs +++ b/crates/bin/pclientd/src/lib.rs @@ -12,7 +12,7 @@ use penumbra_keys::keys::{SeedPhrase, SpendKey}; use penumbra_keys::FullViewingKey; use penumbra_proto::{ core::app::v1alpha1::{ - query_service_client::QueryServiceClient as AppQueryServiceClient, ChainParametersRequest, + query_service_client::QueryServiceClient as AppQueryServiceClient, AppParametersRequest, }, custody::v1alpha1::custody_protocol_service_server::CustodyProtocolServiceServer, view::v1alpha1::view_protocol_service_server::ViewProtocolServiceServer, @@ -150,7 +150,7 @@ impl Opt { let mut client = AppQueryServiceClient::connect(grpc_url.to_string()).await?; let params = client - .chain_parameters(tonic::Request::new(ChainParametersRequest { + .app_parameters(tonic::Request::new(AppParametersRequest { chain_id: String::new(), })) .await? diff --git a/crates/bin/pd/src/consensus.rs b/crates/bin/pd/src/consensus.rs index d5772069ff..534445c5dc 100644 --- a/crates/bin/pd/src/consensus.rs +++ b/crates/bin/pd/src/consensus.rs @@ -1,6 +1,6 @@ use anyhow::Result; -use penumbra_chain::genesis; +use penumbra_app::genesis; use penumbra_storage::Storage; use tendermint::abci::Event; use tendermint::v0_34::abci::{ diff --git a/crates/bin/pd/src/testnet/config.rs b/crates/bin/pd/src/testnet/config.rs index 03705b4af4..cabc12dbdd 100644 --- a/crates/bin/pd/src/testnet/config.rs +++ b/crates/bin/pd/src/testnet/config.rs @@ -1,7 +1,7 @@ use anyhow::Context; use decaf377_rdsa::{SigningKey, SpendAuth, VerificationKey}; use directories::UserDirs; -use penumbra_chain::genesis::AppState; +use penumbra_app::genesis::AppState; use penumbra_keys::keys::{SpendKey, SpendKeyBytes}; use penumbra_wallet::KeyStore; use rand::Rng; diff --git a/crates/bin/pd/src/testnet/generate.rs b/crates/bin/pd/src/testnet/generate.rs index 75a8d1fd13..dc8a1c3798 100644 --- a/crates/bin/pd/src/testnet/generate.rs +++ b/crates/bin/pd/src/testnet/generate.rs @@ -3,12 +3,15 @@ //! for Penumbra. use crate::testnet::config::{get_testnet_dir, TestnetTendermintConfig, ValidatorKeys}; use anyhow::{Context, Result}; -use penumbra_chain::genesis; -use penumbra_chain::{genesis::Allocation, params::ChainParameters}; +use penumbra_app::{genesis, params::AppParameters}; +use penumbra_chain::{genesis::Content as ChainContent, params::ChainParameters}; use penumbra_keys::{keys::SpendKey, Address}; +use penumbra_shielded_pool::genesis::{ + self as shielded_pool_genesis, Allocation, Content as ShieldedPoolContent, +}; use penumbra_stake::{ - validator::Validator, DelegationToken, FundingStream, FundingStreams, GovernanceKey, - IdentityKey, + genesis::Content as StakeContent, params::StakeParameters, validator::Validator, + DelegationToken, FundingStream, FundingStreams, GovernanceKey, IdentityKey, }; use serde::{de, Deserialize}; use std::{ @@ -178,21 +181,31 @@ impl TestnetConfig { epoch_duration: Option, unbonding_epochs: Option, ) -> anyhow::Result { - // Look up default chain params, so we can fill in defaults. - let default_params = ChainParameters::default(); + // Look up default app params, so we can fill in defaults. + let default_params = AppParameters::default(); let app_state = genesis::Content { - allocations: allocations.clone(), - chain_params: ChainParameters { - chain_id: chain_id.to_string(), - // Fall back to chain param defaults - active_validator_limit: active_validator_limit - .unwrap_or(default_params.active_validator_limit), - epoch_duration: epoch_duration.unwrap_or(default_params.epoch_duration), - unbonding_epochs: unbonding_epochs.unwrap_or(default_params.unbonding_epochs), - ..Default::default() + stake_content: StakeContent { + validators: validators.into_iter().map(Into::into).collect(), + stake_params: StakeParameters { + active_validator_limit: active_validator_limit + .unwrap_or(default_params.stake_params.active_validator_limit), + unbonding_epochs: unbonding_epochs + .unwrap_or(default_params.stake_params.unbonding_epochs), + ..Default::default() + }, + }, + shielded_pool_content: ShieldedPoolContent { + allocations: allocations.clone(), + }, + chain_content: ChainContent { + chain_params: ChainParameters { + chain_id: chain_id.to_string(), + // Fall back to chain param defaults + epoch_duration: epoch_duration + .unwrap_or(default_params.chain_params.epoch_duration), + }, }, - // Convert to protobuf types - validators: validators.into_iter().map(Into::into).collect(), + ..Default::default() }; Ok(app_state) } @@ -215,6 +228,7 @@ impl TestnetConfig { let genesis = Genesis { genesis_time, chain_id: app_state + .chain_content .chain_params .chain_id .parse::() @@ -367,9 +381,10 @@ impl TestnetAllocation { let mut res = vec![]; for (line, result) in rdr.deserialize().enumerate() { let record: TestnetAllocation = result?; - let record: genesis::Allocation = record.try_into().with_context(|| { - format!("invalid allocation in entry {line} of allocations file") - })?; + let record: shielded_pool_genesis::Allocation = + record.try_into().with_context(|| { + format!("invalid allocation in entry {line} of allocations file") + })?; res.push(record); } @@ -532,11 +547,11 @@ impl TryFrom<&TestnetValidator> for Validator { } } -impl TryFrom for genesis::Allocation { +impl TryFrom for shielded_pool_genesis::Allocation { type Error = anyhow::Error; - fn try_from(a: TestnetAllocation) -> anyhow::Result { - Ok(genesis::Allocation { + fn try_from(a: TestnetAllocation) -> anyhow::Result { + Ok(shielded_pool_genesis::Allocation { amount: a.amount.into(), denom: a.denom.clone(), address: Address::from_str(&a.address) @@ -641,7 +656,7 @@ mod tests { let genesis::AppState::Content(app_state) = testnet_config.genesis.app_state else { unimplemented!("TODO: support checkpointed app state") }; - assert_eq!(app_state.validators.len(), 1); + assert_eq!(app_state.stake_content.validators.len(), 1); Ok(()) } @@ -667,7 +682,7 @@ mod tests { let genesis::AppState::Content(app_state) = testnet_config.genesis.app_state else { unimplemented!("TODO: support checkpointed app state") }; - assert_eq!(app_state.validators.len(), 2); + assert_eq!(app_state.stake_content.validators.len(), 2); Ok(()) } diff --git a/crates/bin/pd/src/upgrade.rs b/crates/bin/pd/src/upgrade.rs index c939016b58..c00a3e308e 100644 --- a/crates/bin/pd/src/upgrade.rs +++ b/crates/bin/pd/src/upgrade.rs @@ -1,7 +1,11 @@ use std::path::PathBuf; -use penumbra_chain::component::{AppHash, StateReadExt, StateWriteExt}; -use penumbra_stake::StateReadExt as _; +use penumbra_app::genesis; +use penumbra_chain::{ + component::{AppHash, StateReadExt, StateWriteExt}, + genesis::Content as ChainContent, +}; +use penumbra_stake::{genesis::Content as StakeContent, StateReadExt as _}; use penumbra_storage::{StateDelta, StateWrite, Storage}; use crate::testnet::generate::TestnetConfig; @@ -51,9 +55,12 @@ pub async fn migrate(path_to_export: PathBuf, upgrade: Upgrade) -> anyhow::Resul /* ---------- genereate genesis ------------ */ let validators = migrated_state.validator_list().await?; - let app_state = penumbra_chain::genesis::Content { - chain_params, - validators: validators.into_iter().map(Into::into).collect(), + let app_state = genesis::Content { + chain_content: ChainContent { chain_params }, + stake_content: StakeContent { + validators: validators.into_iter().map(Into::into).collect(), + ..Default::default() + }, ..Default::default() }; let mut genesis = diff --git a/crates/core/app/src/action_handler/actions.rs b/crates/core/app/src/action_handler/actions.rs index add9a61881..bef6fdfde2 100644 --- a/crates/core/app/src/action_handler/actions.rs +++ b/crates/core/app/src/action_handler/actions.rs @@ -2,8 +2,8 @@ use std::sync::Arc; use anyhow::Result; use async_trait::async_trait; -use penumbra_chain::component::StateReadExt as _; use penumbra_chain::TransactionContext; +use penumbra_ibc::component::StateReadExt as _; use penumbra_storage::{StateRead, StateWrite}; use penumbra_transaction::Action; @@ -66,7 +66,7 @@ impl ActionHandler for Action { Action::Spend(action) => action.check_stateful(state).await, Action::Output(action) => action.check_stateful(state).await, Action::IbcAction(action) => { - if !state.get_chain_params().await?.ibc_enabled { + if !state.get_ibc_params().await?.ibc_enabled { anyhow::bail!("transaction contains IBC actions, but IBC is not enabled"); } diff --git a/crates/core/app/src/action_handler/actions/submit.rs b/crates/core/app/src/action_handler/actions/submit.rs index 4b0079bb71..9019881a71 100644 --- a/crates/core/app/src/action_handler/actions/submit.rs +++ b/crates/core/app/src/action_handler/actions/submit.rs @@ -8,6 +8,7 @@ use decaf377_rdsa::{VerificationKey, VerificationKeyBytes}; use once_cell::sync::Lazy; use penumbra_asset::STAKING_TOKEN_DENOM; use penumbra_chain::component::StateReadExt as _; +use penumbra_dao::component::StateReadExt as _; use penumbra_keys::keys::{FullViewingKey, NullifierKey}; use penumbra_proto::DomainType; use penumbra_sct::component::StateReadExt as _; @@ -70,9 +71,11 @@ impl ActionHandler for ProposalSubmit { match payload { Signaling { commit: _ } => { /* all signaling proposals are valid */ } Emergency { halt_chain: _ } => { /* all emergency proposals are valid */ } - ParameterChange { old, new } => { - old.check_valid_update(new) - .context("invalid change to chain parameters")?; + ParameterChange { old: _, new: _ } => { + // TODO: re-enable (https://github.com/penumbra-zone/penumbra/issues/3107) + tracing::warn!("parameter change proposals are currently disabled (see #3107)"); + // old.check_valid_update(new) + // .context("invalid change to chain parameters")?; } DaoSpend { transaction_plan } => { // Check to make sure that the transaction plan contains only valid actions for the @@ -132,14 +135,14 @@ impl ActionHandler for ProposalSubmit { proposal, // statelessly verified } = self; - // Check that the deposit amount agrees with the chain parameters - let chain_parameters = state.get_chain_params().await?; - if *deposit_amount != chain_parameters.proposal_deposit_amount { + // Check that the deposit amount agrees with the parameters + let governance_parameters = state.get_governance_params().await?; + if *deposit_amount != governance_parameters.proposal_deposit_amount { anyhow::bail!( "submitted proposal deposit of {}{} does not match required proposal deposit of {}{}", deposit_amount, *STAKING_TOKEN_DENOM, - chain_parameters.proposal_deposit_amount, + governance_parameters.proposal_deposit_amount, *STAKING_TOKEN_DENOM, ); } @@ -162,8 +165,9 @@ impl ActionHandler for ProposalSubmit { } ProposalPayload::DaoSpend { transaction_plan } => { // If DAO spend proposals aren't enabled, then we can't allow them to be submitted + let dao_parameters = state.get_dao_params().await?; anyhow::ensure!( - chain_parameters.dao_spend_proposals_enabled, + dao_parameters.dao_spend_proposals_enabled, "DAO spend proposals are not enabled", ); @@ -240,15 +244,15 @@ impl ActionHandler for ProposalSubmit { // Determine what block it is currently, and calculate when the proposal should start voting // (now!) and finish voting (later...), then write that into the state - let chain_params = state - .get_chain_params() + let governance_params = state + .get_governance_params() .await .context("can get chain params")?; let current_block = state .get_block_height() .await .context("can get block height")?; - let voting_end = current_block + chain_params.proposal_voting_blocks; + let voting_end = current_block + governance_params.proposal_voting_blocks; state.put_proposal_voting_start(proposal_id, current_block); state.put_proposal_voting_end(proposal_id, voting_end); diff --git a/crates/core/app/src/app/mod.rs b/crates/core/app/src/app/mod.rs index 5864dcaca4..90a44ab5b2 100644 --- a/crates/core/app/src/app/mod.rs +++ b/crates/core/app/src/app/mod.rs @@ -1,22 +1,21 @@ use std::sync::Arc; use anyhow::Result; +use penumbra_chain::component::{AppHash, StateReadExt as _, StateWriteExt as _}; use penumbra_chain::params::FmdParameters; -use penumbra_chain::{ - component::{AppHash, StateReadExt as _, StateWriteExt as _}, - genesis, -}; use penumbra_compact_block::component::StateWriteExt as _; use penumbra_compact_block::CompactBlock; use penumbra_component::Component; +use penumbra_dao::component::StateWriteExt as _; use penumbra_dex::component::{Dex, SwapManager}; use penumbra_distributions::component::Distributions; use penumbra_governance::component::{Governance, StateReadExt as _}; -use penumbra_ibc::component::IBCComponent; +use penumbra_governance::StateWriteExt as _; +use penumbra_ibc::component::{IBCComponent, StateWriteExt as _}; use penumbra_proto::DomainType; use penumbra_sct::component::SctManager; use penumbra_shielded_pool::component::{NoteManager, ShieldedPool}; -use penumbra_stake::component::{Staking, ValidatorUpdates}; +use penumbra_stake::component::{Staking, StateWriteExt as _, ValidatorUpdates}; use penumbra_storage::{ArcStateDeltaExt, Snapshot, StateDelta, StateWrite, Storage}; use penumbra_transaction::Transaction; use tendermint::abci::{self, Event}; @@ -24,7 +23,7 @@ use tendermint::validator::Update; use tracing::Instrument; use crate::action_handler::ActionHandler; -use crate::DaoStateReadExt; +use crate::{genesis, DaoStateReadExt}; pub mod state_key; @@ -87,7 +86,15 @@ impl App { .expect("state Arc should not be referenced elsewhere"); match app_state { genesis::AppState::Content(app_state) => { - state_tx.put_chain_params(app_state.chain_params.clone()); + // Put all the initial component parameters in the JMT: + // TODO: should the components themselves handle this in their + // `init_chain` methods? + state_tx.put_chain_params(app_state.chain_content.chain_params.clone()); + state_tx.put_dao_params(app_state.dao_content.dao_params.clone()); + state_tx.put_stake_params(app_state.stake_content.stake_params.clone()); + state_tx + .put_governance_params(app_state.governance_content.governance_params.clone()); + state_tx.put_ibc_params(app_state.ibc_content.ibc_params.clone()); // TEMP: Hardcoding FMD parameters until we have a mechanism to change them. See issue #1226. state_tx.put_current_fmd_parameters(FmdParameters::default()); @@ -113,16 +120,26 @@ impl App { start_height: 0, }, ); + + Distributions::init_chain(&mut state_tx, Some(&())).await; + ShieldedPool::init_chain(&mut state_tx, Some(&app_state.shielded_pool_content)) + .await; + Staking::init_chain(&mut state_tx, Some(&app_state.stake_content)).await; + IBCComponent::init_chain(&mut state_tx, Some(&())).await; + Dex::init_chain(&mut state_tx, Some(&())).await; + Governance::init_chain(&mut state_tx, Some(&())).await; + } + genesis::AppState::Checkpoint(_) => { + /* perform upgrade specific check */ + Distributions::init_chain(&mut state_tx, None).await; + ShieldedPool::init_chain(&mut state_tx, None).await; + Staking::init_chain(&mut state_tx, None).await; + IBCComponent::init_chain(&mut state_tx, None).await; + Dex::init_chain(&mut state_tx, None).await; + Governance::init_chain(&mut state_tx, None).await; } - genesis::AppState::Checkpoint(_) => { /* perform upgrade specific check */ } }; - Distributions::init_chain(&mut state_tx, app_state).await; - Staking::init_chain(&mut state_tx, app_state).await; - IBCComponent::init_chain(&mut state_tx, app_state).await; - Dex::init_chain(&mut state_tx, &()).await; - Governance::init_chain(&mut state_tx, &()).await; - ShieldedPool::init_chain(&mut state_tx, app_state).await; App::finish_block(&mut state_tx).await; state_tx.apply(); } @@ -153,10 +170,10 @@ impl App { // Run each of the begin block handlers for each component, in sequence: let mut arc_state_tx = Arc::new(state_tx); Distributions::begin_block(&mut arc_state_tx, begin_block).await; - Staking::begin_block(&mut arc_state_tx, begin_block).await; IBCComponent::begin_block(&mut arc_state_tx, begin_block).await; Governance::begin_block(&mut arc_state_tx, begin_block).await; ShieldedPool::begin_block(&mut arc_state_tx, begin_block).await; + Staking::begin_block(&mut arc_state_tx, begin_block).await; let state_tx = Arc::try_unwrap(arc_state_tx) .expect("components did not retain copies of shared state"); @@ -257,11 +274,11 @@ impl App { let mut arc_state_tx = Arc::new(state_tx); Distributions::end_block(&mut arc_state_tx, end_block).await; - Staking::end_block(&mut arc_state_tx, end_block).await; IBCComponent::end_block(&mut arc_state_tx, end_block).await; Dex::end_block(&mut arc_state_tx, end_block).await; Governance::end_block(&mut arc_state_tx, end_block).await; ShieldedPool::end_block(&mut arc_state_tx, end_block).await; + Staking::end_block(&mut arc_state_tx, end_block).await; let mut state_tx = Arc::try_unwrap(arc_state_tx) .expect("components did not retain copies of shared state"); @@ -297,9 +314,6 @@ impl App { Distributions::end_epoch(&mut arc_state_tx) .await .expect("able to call end_epoch on Distributions component"); - Staking::end_epoch(&mut arc_state_tx) - .await - .expect("able to call end_epoch on Staking component"); IBCComponent::end_epoch(&mut arc_state_tx) .await .expect("able to call end_epoch on IBC component"); @@ -312,6 +326,9 @@ impl App { ShieldedPool::end_epoch(&mut arc_state_tx) .await .expect("able to call end_epoch on shielded pool component"); + Staking::end_epoch(&mut arc_state_tx) + .await + .expect("able to call end_epoch on Staking component"); let mut state_tx = Arc::try_unwrap(arc_state_tx) .expect("components did not retain copies of shared state"); diff --git a/crates/core/app/src/genesis.rs b/crates/core/app/src/genesis.rs new file mode 100644 index 0000000000..fec0c2f6c9 --- /dev/null +++ b/crates/core/app/src/genesis.rs @@ -0,0 +1,4 @@ +mod app_state; + +pub use app_state::AppState; +pub use app_state::Content; diff --git a/crates/core/app/src/genesis/app_state.rs b/crates/core/app/src/genesis/app_state.rs new file mode 100644 index 0000000000..719dc106ac --- /dev/null +++ b/crates/core/app/src/genesis/app_state.rs @@ -0,0 +1,153 @@ +use penumbra_chain::genesis::Content as ChainContent; +use penumbra_dao::genesis::Content as DaoContent; +use penumbra_governance::genesis::Content as GovernanceContent; +use penumbra_ibc::genesis::Content as IBCContent; +use penumbra_proto::{penumbra::core::app::v1alpha1 as pb, DomainType, TypeUrl}; +use penumbra_shielded_pool::genesis::Content as ShieldedPoolContent; +use penumbra_stake::genesis::Content as StakeContent; +use serde::{Deserialize, Serialize}; + +/// The application state at genesis. +#[derive(Deserialize, Serialize, Debug, Clone)] +#[serde(try_from = "pb::GenesisAppState", into = "pb::GenesisAppState")] +pub enum AppState { + /// The application state at genesis. + Content(Content), + /// The checkpointed application state at genesis, contains a free-form hash. + Checkpoint(Vec), +} + +#[derive(Deserialize, Serialize, Debug, Clone, Default)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// Stake module genesis state. + pub stake_content: StakeContent, + /// Shielded pool module genesis state. + pub shielded_pool_content: ShieldedPoolContent, + /// Governance module genesis state. + pub governance_content: GovernanceContent, + /// IBC module genesis state. + pub ibc_content: IBCContent, + /// Chain module genesis state. + pub chain_content: ChainContent, + /// DAO module genesis state. + pub dao_content: DaoContent, +} + +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.core.app.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} + +impl Default for AppState { + fn default() -> Self { + Self::Content(Default::default()) + } +} + +impl From for pb::GenesisAppState { + fn from(a: AppState) -> Self { + let genesis_state = match a { + AppState::Content(c) => { + pb::genesis_app_state::GenesisAppState::GenesisContent(c.into()) + } + AppState::Checkpoint(h) => pb::genesis_app_state::GenesisAppState::GenesisCheckpoint(h), + }; + + pb::GenesisAppState { + genesis_app_state: Some(genesis_state), + } + } +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + chain_content: Some(value.chain_content.into()), + stake_content: Some(value.stake_content.into()), + ibc_content: Some(value.ibc_content.into()), + governance_content: Some(value.governance_content.into()), + dao_content: Some(value.dao_content.into()), + shielded_pool_content: Some(value.shielded_pool_content.into()), + } + } +} + +impl TryFrom for AppState { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisAppState) -> Result { + let state = msg + .genesis_app_state + .ok_or_else(|| anyhow::anyhow!("missing genesis_app_state field in proto"))?; + match state { + pb::genesis_app_state::GenesisAppState::GenesisContent(c) => { + Ok(AppState::Content(c.try_into()?)) + } + pb::genesis_app_state::GenesisAppState::GenesisCheckpoint(h) => { + Ok(AppState::Checkpoint(h)) + } + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + stake_content: msg + .stake_content + .ok_or_else(|| anyhow::anyhow!("proto response missing stake content"))? + .try_into()?, + shielded_pool_content: msg + .shielded_pool_content + .ok_or_else(|| anyhow::anyhow!("proto response missing shielded pool content"))? + .try_into()?, + governance_content: msg + .governance_content + .ok_or_else(|| anyhow::anyhow!("proto response missing governance content"))? + .try_into()?, + ibc_content: msg + .ibc_content + .ok_or_else(|| anyhow::anyhow!("proto response missing ibc content"))? + .try_into()?, + dao_content: msg + .dao_content + .ok_or_else(|| anyhow::anyhow!("proto response missing dao content"))? + .try_into()?, + chain_content: msg + .chain_content + .ok_or_else(|| anyhow::anyhow!("proto response missing chain content"))? + .try_into()?, + }) + } +} + +impl TypeUrl for AppState { + const TYPE_URL: &'static str = "/penumbra.core.app.v1alpha1.GenesisAppState"; +} + +impl DomainType for AppState { + type Proto = pb::GenesisAppState; +} + +#[cfg(test)] +mod test { + use super::*; + /// Check that the default implementation of contains zero validators, + /// requiring validators to be passed in out of band. N.B. there's also a + /// `validators` field in the [`tendermint::Genesis`] struct, which we don't use, + /// preferring the AppState definition instead. + #[test] + fn check_validator_defaults() -> anyhow::Result<()> { + let a = Content { + ..Default::default() + }; + assert!(a.stake_content.validators.is_empty()); + Ok(()) + } +} diff --git a/crates/core/app/src/lib.rs b/crates/core/app/src/lib.rs index 75f238d807..95198590de 100644 --- a/crates/core/app/src/lib.rs +++ b/crates/core/app/src/lib.rs @@ -10,6 +10,8 @@ pub use mock_client::MockClient; pub use temp_storage_ext::TempStorageExt; pub mod app; +pub mod genesis; +pub mod params; pub mod metrics; pub mod rpc; diff --git a/crates/core/app/src/params.rs b/crates/core/app/src/params.rs new file mode 100644 index 0000000000..50f3782ba4 --- /dev/null +++ b/crates/core/app/src/params.rs @@ -0,0 +1,91 @@ +use penumbra_chain::params::ChainParameters; +use penumbra_dao::params::DaoParameters; +use penumbra_governance::params::GovernanceParameters; +use penumbra_ibc::params::IBCParameters; +use penumbra_proto::core::app::v1alpha1 as pb; +use penumbra_proto::view::v1alpha1 as pb_view; +use penumbra_proto::{DomainType, TypeUrl}; +use penumbra_stake::params::StakeParameters; +use serde::{Deserialize, Serialize}; + +pub mod change; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default)] +#[serde(try_from = "pb::AppParameters", into = "pb::AppParameters")] +pub struct AppParameters { + pub stake_params: StakeParameters, + pub ibc_params: IBCParameters, + pub governance_params: GovernanceParameters, + pub chain_params: ChainParameters, + pub dao_params: DaoParameters, +} + +impl TypeUrl for AppParameters { + const TYPE_URL: &'static str = "/penumbra.core.app.v1alpha1.AppParameters"; +} + +impl DomainType for AppParameters { + type Proto = pb::AppParameters; +} + +impl TryFrom for AppParameters { + type Error = anyhow::Error; + + fn try_from(msg: pb::AppParameters) -> anyhow::Result { + Ok(AppParameters { + chain_params: msg + .chain_params + .ok_or_else(|| anyhow::anyhow!("proto response missing chain params"))? + .try_into()?, + stake_params: msg + .stake_params + .ok_or_else(|| anyhow::anyhow!("proto response missing stake params"))? + .try_into()?, + ibc_params: msg + .ibc_params + .ok_or_else(|| anyhow::anyhow!("proto response missing ibc params"))? + .try_into()?, + governance_params: msg + .governance_params + .ok_or_else(|| anyhow::anyhow!("proto response missing governance params"))? + .try_into()?, + dao_params: msg + .dao_params + .ok_or_else(|| anyhow::anyhow!("proto response missing dao params"))? + .try_into()?, + }) + } +} + +impl From for pb::AppParameters { + fn from(params: AppParameters) -> Self { + pb::AppParameters { + chain_params: Some(params.chain_params.into()), + dao_params: Some(params.dao_params.into()), + governance_params: Some(params.governance_params.into()), + ibc_params: Some(params.ibc_params.into()), + stake_params: Some(params.stake_params.into()), + } + } +} +impl TryFrom for AppParameters { + type Error = anyhow::Error; + + fn try_from(response: pb_view::AppParametersResponse) -> Result { + response + .parameters + .ok_or_else(|| anyhow::anyhow!("empty AppParametersResponse message"))? + .try_into() + } +} + +impl TryFrom for AppParameters { + type Error = anyhow::Error; + + fn try_from(response: pb::AppParametersResponse) -> Result { + response + .app_parameters + .ok_or_else(|| anyhow::anyhow!("empty AppParametersResponse message"))? + .try_into() + } +} diff --git a/crates/core/component/chain/src/params/change.rs b/crates/core/app/src/params/change.rs similarity index 57% rename from crates/core/component/chain/src/params/change.rs rename to crates/core/app/src/params/change.rs index ca24cbc369..07ba437c52 100644 --- a/crates/core/component/chain/src/params/change.rs +++ b/crates/core/app/src/params/change.rs @@ -1,68 +1,92 @@ use std::fmt::Display; use anyhow::Result; +use penumbra_chain::params::{ChainParameters, Ratio}; +use penumbra_dao::params::DaoParameters; +use penumbra_governance::params::GovernanceParameters; +use penumbra_ibc::params::IBCParameters; +use penumbra_stake::params::StakeParameters; -use super::{ChainParameters, Ratio}; +use super::AppParameters; // The checks below validate that a parameter change is valid, since some parameter settings or // combinations are nonsensical and should be rejected outright, regardless of governance. #[deny(unused)] // We want to be really careful here to not examine fields! -impl ChainParameters { - pub fn check_valid_update(&self, new: &ChainParameters) -> Result<()> { +impl AppParameters { + pub fn check_valid_update(&self, new: &AppParameters) -> Result<()> { new.check_valid()?; + // TODO: move the checks below into their respective components - let ChainParameters { - chain_id, - epoch_duration, - unbonding_epochs: _, - active_validator_limit, - base_reward_rate: _, - slashing_penalty_misbehavior: _, - slashing_penalty_downtime: _, - signed_blocks_window_len, - missed_blocks_maximum: _, - ibc_enabled: _, - inbound_ics20_transfers_enabled: _, - outbound_ics20_transfers_enabled: _, - proposal_voting_blocks: _, - proposal_deposit_amount: _, - proposal_valid_quorum, - proposal_pass_threshold, - proposal_slash_threshold, - dao_spend_proposals_enabled: _, - // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! + let AppParameters { + chain_params: + ChainParameters { + chain_id, + epoch_duration, + }, + stake_params: + StakeParameters { + unbonding_epochs: _, + active_validator_limit, + base_reward_rate: _, + slashing_penalty_misbehavior: _, + slashing_penalty_downtime: _, + signed_blocks_window_len, + missed_blocks_maximum: _, + }, + ibc_params: + IBCParameters { + ibc_enabled: _, + inbound_ics20_transfers_enabled: _, + outbound_ics20_transfers_enabled: _, + }, + governance_params: + GovernanceParameters { + proposal_voting_blocks: _, + proposal_deposit_amount: _, + proposal_valid_quorum, + proposal_pass_threshold, + proposal_slash_threshold, + }, + dao_params: + DaoParameters { + dao_spend_proposals_enabled: _, + }, // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! } = self; // Ensure that certain parameters are not changed by the update: - check_invariant([(chain_id, &new.chain_id, "chain ID")])?; + check_invariant([(chain_id, &new.chain_params.chain_id, "chain ID")])?; check_invariant([ - (epoch_duration, &new.epoch_duration, "epoch duration"), + ( + epoch_duration, + &new.chain_params.epoch_duration, + "epoch duration", + ), ( active_validator_limit, - &new.active_validator_limit, + &new.stake_params.active_validator_limit, "active validator limit", ), ( signed_blocks_window_len, - &new.signed_blocks_window_len, + &new.stake_params.signed_blocks_window_len, "signed blocks window length", ), ])?; check_invariant([ ( proposal_valid_quorum, - &new.proposal_valid_quorum, + &new.governance_params.proposal_valid_quorum, "proposal valid quorum", ), ( proposal_pass_threshold, - &new.proposal_pass_threshold, + &new.governance_params.proposal_pass_threshold, "proposal pass threshold", ), ( proposal_slash_threshold, - &new.proposal_slash_threshold, + &new.governance_params.proposal_slash_threshold, "proposal slash threshold", ), ])?; @@ -71,26 +95,40 @@ impl ChainParameters { } pub fn check_valid(&self) -> Result<()> { - let ChainParameters { - chain_id, - epoch_duration, - unbonding_epochs, - active_validator_limit, - base_reward_rate, - slashing_penalty_misbehavior, - slashing_penalty_downtime, - signed_blocks_window_len, - missed_blocks_maximum, - ibc_enabled, - inbound_ics20_transfers_enabled, - outbound_ics20_transfers_enabled, - proposal_voting_blocks, - proposal_deposit_amount, - proposal_valid_quorum, - proposal_pass_threshold, - proposal_slash_threshold, - dao_spend_proposals_enabled: _, - // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! + let AppParameters { + chain_params: + ChainParameters { + chain_id, + epoch_duration, + }, + stake_params: + StakeParameters { + unbonding_epochs, + active_validator_limit, + base_reward_rate, + slashing_penalty_misbehavior, + slashing_penalty_downtime, + signed_blocks_window_len, + missed_blocks_maximum, + }, + ibc_params: + IBCParameters { + ibc_enabled, + inbound_ics20_transfers_enabled, + outbound_ics20_transfers_enabled, + }, + governance_params: + GovernanceParameters { + proposal_voting_blocks, + proposal_deposit_amount, + proposal_valid_quorum, + proposal_pass_threshold, + proposal_slash_threshold, + }, + dao_params: + DaoParameters { + dao_spend_proposals_enabled: _, + }, // IMPORTANT: Don't use `..` here! We want to ensure every single field is verified! } = self; check_all([ diff --git a/crates/core/app/src/rpc.rs b/crates/core/app/src/rpc.rs index f5e9bde356..e3eb26b165 100644 --- a/crates/core/app/src/rpc.rs +++ b/crates/core/app/src/rpc.rs @@ -2,15 +2,21 @@ use std::pin::Pin; use futures::{StreamExt, TryStreamExt}; use penumbra_chain::component::{AppHashRead, StateReadExt as _}; +use penumbra_dao::StateReadExt as _; +use penumbra_governance::StateReadExt as _; +use penumbra_ibc::StateReadExt as _; use penumbra_proto::core::app::v1alpha1::{ - key_value_response::Value, query_service_server::QueryService, ChainParametersRequest, - ChainParametersResponse, KeyValueRequest, KeyValueResponse, PrefixValueRequest, + key_value_response::Value, query_service_server::QueryService, AppParametersRequest, + AppParametersResponse, KeyValueRequest, KeyValueResponse, PrefixValueRequest, PrefixValueResponse, }; +use penumbra_stake::StateReadExt as _; use penumbra_storage::{StateRead, Storage}; use tonic::Status; use tracing::instrument; +use crate::params::AppParameters; + // TODO: Hide this and only expose a Router? pub struct Server { storage: Storage, @@ -25,10 +31,10 @@ impl Server { #[tonic::async_trait] impl QueryService for Server { #[instrument(skip(self, request))] - async fn chain_parameters( + async fn app_parameters( &self, - request: tonic::Request, - ) -> Result, Status> { + request: tonic::Request, + ) -> Result, Status> { let state = self.storage.latest_snapshot(); // We map the error here to avoid including `tonic` as a dependency // in the `chain` crate, to support its compilation to wasm. @@ -37,16 +43,37 @@ impl QueryService for Server { .await .map_err(|e| { tonic::Status::unknown(format!( - "failed to validate chain id during chain parameters lookup: {e}" + "failed to validate chain id during app parameters lookup: {e}" )) })?; let chain_params = state.get_chain_params().await.map_err(|e| { tonic::Status::unavailable(format!("error getting chain parameters: {e}")) })?; + let stake_params = state.get_stake_params().await.map_err(|e| { + tonic::Status::unavailable(format!("error getting stake parameters: {e}")) + })?; + let ibc_params = state.get_ibc_params().await.map_err(|e| { + tonic::Status::unavailable(format!("error getting ibc parameters: {e}")) + })?; + let governance_params = state.get_governance_params().await.map_err(|e| { + tonic::Status::unavailable(format!("error getting governance parameters: {e}")) + })?; + let dao_params = state.get_dao_params().await.map_err(|e| { + tonic::Status::unavailable(format!("error getting dao parameters: {e}")) + })?; - Ok(tonic::Response::new(ChainParametersResponse { - chain_parameters: Some(chain_params.into()), + Ok(tonic::Response::new(AppParametersResponse { + app_parameters: Some( + AppParameters { + chain_params, + stake_params, + ibc_params, + governance_params, + dao_params, + } + .into(), + ), })) } diff --git a/crates/core/app/src/temp_storage_ext.rs b/crates/core/app/src/temp_storage_ext.rs index 69ba1726d4..3688b7524c 100644 --- a/crates/core/app/src/temp_storage_ext.rs +++ b/crates/core/app/src/temp_storage_ext.rs @@ -1,7 +1,7 @@ use std::ops::Deref; +use crate::genesis; use async_trait::async_trait; -use penumbra_chain::genesis; use penumbra_storage::TempStorage; use crate::app::App; diff --git a/crates/core/component/chain/src/component/view.rs b/crates/core/component/chain/src/component/view.rs index 724991b9cc..4cf15e118c 100644 --- a/crates/core/component/chain/src/component/view.rs +++ b/crates/core/component/chain/src/component/view.rs @@ -12,7 +12,7 @@ use crate::{ state_key, Epoch, }; -/// This trait provides read access to common parts of the Penumbra +/// This trait provides read access to chain-related parts of the Penumbra /// state store. /// /// Note: the `get_` methods in this trait assume that the state store has been @@ -20,7 +20,7 @@ use crate::{ //#[async_trait(?Send)] #[async_trait] pub trait StateReadExt: StateRead { - /// Gets the chain parameters from the JMT. + /// Gets the app chain parameters from the JMT. async fn get_chain_params(&self) -> Result { self.get(state_key::chain_params()) .await? @@ -191,15 +191,18 @@ impl StateReadExt for T {} pub trait StateWriteExt: StateWrite { /// Writes the provided chain parameters to the JMT. fn put_chain_params(&mut self, params: ChainParameters) { + // TODO: this needs to be handled on a per-component basis or possibly removed from the compact block + // entirely, currently disabled, see https://github.com/penumbra-zone/penumbra/issues/3107 // Note to the shielded pool to include the chain parameters in the next compact block: self.object_put(state_key::chain_params_changed(), ()); // Change the chain parameters: self.put(state_key::chain_params().into(), params) } + /// Writes the block height to the JMT fn put_block_height(&mut self, height: u64) { - self.put_proto("block_height".into(), height) + self.put_proto(state_key::block_height().to_string(), height) } /// Writes the epoch for the current height diff --git a/crates/core/component/chain/src/genesis.rs b/crates/core/component/chain/src/genesis.rs index ee9da22534..51088c1e50 100644 --- a/crates/core/component/chain/src/genesis.rs +++ b/crates/core/component/chain/src/genesis.rs @@ -1,6 +1,41 @@ -mod allocation; -mod app_state; +use anyhow::Context; +use penumbra_proto::{penumbra::core::component::chain::v1alpha1 as pb, DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; -pub use allocation::Allocation; -pub use app_state::AppState; -pub use app_state::Content; +use crate::params::ChainParameters; + +#[derive(Deserialize, Serialize, Debug, Clone, Default)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// The initial configuration parameters for the chain component. + pub chain_params: ChainParameters, +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + chain_params: Some(value.chain_params.into()), + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + chain_params: msg + .chain_params + .context("chain params not present in protobuf message")? + .try_into()?, + }) + } +} + +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.chain.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} diff --git a/crates/core/component/chain/src/genesis/app_state.rs b/crates/core/component/chain/src/genesis/app_state.rs deleted file mode 100644 index 59529df03f..0000000000 --- a/crates/core/component/chain/src/genesis/app_state.rs +++ /dev/null @@ -1,179 +0,0 @@ -use anyhow::Context; -use penumbra_proto::{ - // TODO: avoid this import! - core::component::stake::v1alpha1 as pb_stake, - penumbra::core::component::chain::v1alpha1 as pb, - DomainType, - TypeUrl, -}; -use serde::{Deserialize, Serialize}; - -use super::Allocation; -use crate::params::ChainParameters; - -/// The application state at genesis. -#[derive(Deserialize, Serialize, Debug, Clone)] -#[serde(try_from = "pb::GenesisAppState", into = "pb::GenesisAppState")] -pub enum AppState { - /// The application state at genesis. - Content(Content), - /// The checkpointed application state at genesis, contains a free-form hash. - Checkpoint(Vec), -} - -#[derive(Deserialize, Serialize, Debug, Clone)] -#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] -pub struct Content { - /// Global configuration for the chain, such as chain ID and epoch duration. - pub chain_params: ChainParameters, - /// The initial validator set. - pub validators: Vec, - /// The initial token allocations. - pub allocations: Vec, -} - -impl Default for AppState { - fn default() -> Self { - Self::Content(Default::default()) - } -} - -impl Default for Content { - fn default() -> Self { - Self { - chain_params: Default::default(), - // TODO: create a test validator - validators: Default::default(), - allocations: vec![ - Allocation { - amount: 1000u128.into(), - denom: "penumbra" - .parse() - .expect("hardcoded \"penumbra\" denom should be parseable"), - address: crate::test_keys::ADDRESS_0_STR - .parse() - .expect("hardcoded test address should be valid"), - }, - Allocation { - amount: 100u128.into(), - denom: "test_usd" - .parse() - .expect("hardcoded \"test_usd\" denom should be parseable"), - address: crate::test_keys::ADDRESS_0_STR - .parse() - .expect("hardcoded test address should be valid"), - }, - Allocation { - amount: 100u128.into(), - denom: "gm" - .parse() - .expect("hardcoded \"gm\" denom should be parseable"), - address: crate::test_keys::ADDRESS_1_STR - .parse() - .expect("hardcoded test address should be valid"), - }, - Allocation { - amount: 100u128.into(), - denom: "gn" - .parse() - .expect("hardcoded \"gn\" denom should be parseable"), - address: crate::test_keys::ADDRESS_1_STR - .parse() - .expect("hardcoded test address should be valid"), - }, - ], - } - } -} - -impl From for pb::GenesisAppState { - fn from(a: AppState) -> Self { - let genesis_state = match a { - AppState::Content(c) => { - pb::genesis_app_state::GenesisAppState::GenesisContent(c.into()) - } - AppState::Checkpoint(h) => pb::genesis_app_state::GenesisAppState::GenesisCheckpoint(h), - }; - - pb::GenesisAppState { - genesis_app_state: Some(genesis_state), - } - } -} - -impl From for pb::GenesisContent { - fn from(value: Content) -> Self { - pb::GenesisContent { - chain_params: Some(value.chain_params.into()), - validators: value.validators.into_iter().map(Into::into).collect(), - allocations: value.allocations.into_iter().map(Into::into).collect(), - } - } -} - -impl TryFrom for AppState { - type Error = anyhow::Error; - - fn try_from(msg: pb::GenesisAppState) -> Result { - let state = msg - .genesis_app_state - .ok_or_else(|| anyhow::anyhow!("missing genesis_app_state field in proto"))?; - match state { - pb::genesis_app_state::GenesisAppState::GenesisContent(c) => { - Ok(AppState::Content(c.try_into()?)) - } - pb::genesis_app_state::GenesisAppState::GenesisCheckpoint(h) => { - Ok(AppState::Checkpoint(h)) - } - } - } -} - -impl TryFrom for Content { - type Error = anyhow::Error; - - fn try_from(msg: pb::GenesisContent) -> Result { - Ok(Content { - chain_params: msg - .chain_params - .context("chain params not present in protobuf message")? - .try_into()?, - validators: msg - .validators - .into_iter() - .map(TryInto::try_into) - .collect::>()?, - - allocations: msg - .allocations - .into_iter() - .map(TryInto::try_into) - .collect::>()?, - }) - } -} - -impl TypeUrl for AppState { - const TYPE_URL: &'static str = "/penumbra.core.chain.v1alpha1.GenesisAppState"; -} - -impl DomainType for AppState { - type Proto = pb::GenesisAppState; -} - -#[cfg(test)] -mod test { - use super::*; - /// Check that the default implementation of contains zero validators, - /// requiring validators to be passed in out of band. N.B. there's also a - /// `validators` field in the [`tendermint::Genesis`] struct, which we don't use, - /// preferring the AppState definition instead. - #[test] - fn check_validator_defaults() -> anyhow::Result<()> { - let a = Content { - ..Default::default() - }; - assert!(a.validators.is_empty()); - Ok(()) - } -} diff --git a/crates/core/component/chain/src/params.rs b/crates/core/component/chain/src/params.rs index 3b7c23daf0..00817859cf 100644 --- a/crates/core/component/chain/src/params.rs +++ b/crates/core/component/chain/src/params.rs @@ -5,19 +5,12 @@ use std::{ str::FromStr, }; -use anyhow::Context; -use penumbra_num::Amount; // TODO(proto): eliminate these imports -use penumbra_proto::penumbra::core::app::v1alpha1 as pb_app; use penumbra_proto::penumbra::core::component::chain::v1alpha1 as pb_chain; -use penumbra_proto::view::v1alpha1 as pb_view; use penumbra_proto::{DomainType, TypeUrl}; use serde::{Deserialize, Serialize}; -pub mod change; - -// TODO: lift into the App #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde( try_from = "pb_chain::ChainParameters", @@ -26,42 +19,6 @@ pub mod change; pub struct ChainParameters { pub chain_id: String, pub epoch_duration: u64, - - pub unbonding_epochs: u64, - /// The number of validators allowed in the consensus set (Active state). - pub active_validator_limit: u64, - /// The base reward rate, expressed in basis points of basis points - pub base_reward_rate: u64, - /// The penalty for slashing due to misbehavior, expressed in basis points squared (10^-8) - pub slashing_penalty_misbehavior: u64, - /// The penalty for slashing due to downtime, expressed in basis points squared (10^-8) - pub slashing_penalty_downtime: u64, - /// The number of blocks in the window to check for downtime. - pub signed_blocks_window_len: u64, - /// The maximum number of blocks in the window each validator can miss signing without slashing. - pub missed_blocks_maximum: u64, - - /// Whether IBC (forming connections, processing IBC packets) is enabled. - pub ibc_enabled: bool, - /// Whether inbound ICS-20 transfers are enabled - pub inbound_ics20_transfers_enabled: bool, - /// Whether outbound ICS-20 transfers are enabled - pub outbound_ics20_transfers_enabled: bool, - - /// The number of blocks during which a proposal is voted on. - pub proposal_voting_blocks: u64, - /// The deposit required to create a proposal. - pub proposal_deposit_amount: Amount, - /// The quorum required for a proposal to be considered valid, as a fraction of the total stake - /// weight of the network. - pub proposal_valid_quorum: Ratio, - /// The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. - pub proposal_pass_threshold: Ratio, - /// The threshold for a proposal to be slashed, as a ratio of "no" votes over all total votes. - pub proposal_slash_threshold: Ratio, - - /// Whether DAO spend proposals are enabled. - pub dao_spend_proposals_enabled: bool, } impl TypeUrl for ChainParameters { @@ -79,81 +36,15 @@ impl TryFrom for ChainParameters { Ok(ChainParameters { chain_id: msg.chain_id, epoch_duration: msg.epoch_duration, - unbonding_epochs: msg.unbonding_epochs, - active_validator_limit: msg.active_validator_limit, - slashing_penalty_downtime: msg.slashing_penalty_downtime, - slashing_penalty_misbehavior: msg.slashing_penalty_misbehavior, - base_reward_rate: msg.base_reward_rate, - missed_blocks_maximum: msg.missed_blocks_maximum, - signed_blocks_window_len: msg.signed_blocks_window_len, - ibc_enabled: msg.ibc_enabled, - inbound_ics20_transfers_enabled: msg.inbound_ics20_transfers_enabled, - outbound_ics20_transfers_enabled: msg.outbound_ics20_transfers_enabled, - proposal_voting_blocks: msg.proposal_voting_blocks, - proposal_deposit_amount: msg - .proposal_deposit_amount - .ok_or_else(|| anyhow::anyhow!("missing proposal_deposit_amount"))? - .try_into()?, - proposal_valid_quorum: msg - .proposal_valid_quorum - .parse() - .context("couldn't parse proposal_valid_quorum")?, - proposal_pass_threshold: msg - .proposal_pass_threshold - .parse() - .context("couldn't parse proposal_pass_threshold")?, - proposal_slash_threshold: msg - .proposal_slash_threshold - .parse() - .context("couldn't parse proposal_slash_threshold")?, - dao_spend_proposals_enabled: msg.dao_spend_proposals_enabled, }) } } -impl TryFrom for ChainParameters { - type Error = anyhow::Error; - - fn try_from(response: pb_view::ChainParametersResponse) -> Result { - response - .parameters - .ok_or_else(|| anyhow::anyhow!("empty ChainParametersResponse message"))? - .try_into() - } -} - -impl TryFrom for ChainParameters { - type Error = anyhow::Error; - - fn try_from(response: pb_app::ChainParametersResponse) -> Result { - response - .chain_parameters - .ok_or_else(|| anyhow::anyhow!("empty ChainParametersResponse message"))? - .try_into() - } -} - impl From for pb_chain::ChainParameters { fn from(params: ChainParameters) -> Self { pb_chain::ChainParameters { chain_id: params.chain_id, epoch_duration: params.epoch_duration, - unbonding_epochs: params.unbonding_epochs, - active_validator_limit: params.active_validator_limit, - signed_blocks_window_len: params.signed_blocks_window_len, - missed_blocks_maximum: params.missed_blocks_maximum, - slashing_penalty_downtime: params.slashing_penalty_downtime, - slashing_penalty_misbehavior: params.slashing_penalty_misbehavior, - base_reward_rate: params.base_reward_rate, - ibc_enabled: params.ibc_enabled, - inbound_ics20_transfers_enabled: params.inbound_ics20_transfers_enabled, - outbound_ics20_transfers_enabled: params.outbound_ics20_transfers_enabled, - proposal_voting_blocks: params.proposal_voting_blocks, - proposal_deposit_amount: Some(params.proposal_deposit_amount.into()), - proposal_valid_quorum: params.proposal_valid_quorum.to_string(), - proposal_pass_threshold: params.proposal_pass_threshold.to_string(), - proposal_slash_threshold: params.proposal_slash_threshold.to_string(), - dao_spend_proposals_enabled: params.dao_spend_proposals_enabled, } } } @@ -165,29 +56,6 @@ impl Default for ChainParameters { Self { chain_id: String::new(), epoch_duration: 719, - unbonding_epochs: 2, - active_validator_limit: 80, - // copied from cosmos hub - signed_blocks_window_len: 10000, - missed_blocks_maximum: 9500, - // 1000 basis points = 10% - slashing_penalty_misbehavior: 1000_0000, - // 1 basis point = 0.01% - slashing_penalty_downtime: 1_0000, - // 3bps -> 11% return over 365 epochs - base_reward_rate: 3_0000, - ibc_enabled: true, - inbound_ics20_transfers_enabled: true, - outbound_ics20_transfers_enabled: true, - // governance - proposal_voting_blocks: 17_280, // 24 hours, at a 5 second block time - proposal_deposit_amount: 10_000_000u64.into(), // 10,000,000 upenumbra = 10 penumbra - // governance parameters copied from cosmos hub - proposal_valid_quorum: Ratio::new(40, 100), - proposal_pass_threshold: Ratio::new(50, 100), - // slash threshold means if (no / no + yes + abstain) > slash_threshold, then proposal is slashed - proposal_slash_threshold: Ratio::new(80, 100), - dao_spend_proposals_enabled: true, } } } diff --git a/crates/core/component/chain/src/state_key.rs b/crates/core/component/chain/src/state_key.rs index ad1df5aaab..aab232ed9e 100644 --- a/crates/core/component/chain/src/state_key.rs +++ b/crates/core/component/chain/src/state_key.rs @@ -1,23 +1,23 @@ use std::string::String; pub fn chain_params() -> &'static str { - "chain_params" + "chain/params" } pub fn block_height() -> &'static str { - "block_height" + "chain/block_height" } pub fn block_timestamp() -> &'static str { - "block_timestamp" + "chain/block_timestamp" } pub fn fmd_parameters_current() -> &'static str { - "fmd_parameters/current" + "chain/fmd_parameters/current" } pub fn fmd_parameters_previous() -> &'static str { - "fmd_parameters/previous" + "chain/fmd_parameters/previous" } pub fn chain_halt_count() -> &'static str { @@ -37,7 +37,7 @@ pub fn next_upgrade() -> &'static str { // These are used for the object store: pub fn chain_params_changed() -> &'static str { - "chain_params_changed" + "chain/chain_params_changed" } pub fn epoch_by_height(height: u64) -> String { @@ -49,5 +49,5 @@ pub fn epoch_change_at_height(height: u64) -> String { } pub fn end_epoch_early() -> &'static str { - "end_epoch_early" + "chain/end_epoch_early" } diff --git a/crates/core/component/component/src/component.rs b/crates/core/component/component/src/component.rs index 23fc6e89ff..babdfc9a75 100644 --- a/crates/core/component/component/src/component.rs +++ b/crates/core/component/component/src/component.rs @@ -18,7 +18,11 @@ pub trait Component { /// This method is called once per chain, and should only perform /// writes, since the backing tree for the [`State`] will /// be empty. - async fn init_chain(state: S, app_state: &Self::AppState); + /// + /// If the app is checkpointed, no genesis app state will be passed in, + /// and `app_state` will be `None`. Otherwise, `app_state` will be `Some`, + /// indicating that the chain needs to fully initialize. + async fn init_chain(state: S, app_state: Option<&Self::AppState>); /// Begins a new block, optionally inspecting the ABCI /// [`BeginBlock`](abci::request::BeginBlock) request. diff --git a/crates/core/component/dao/src/component/state_key.rs b/crates/core/component/dao/src/component/state_key.rs index e0066c5a6d..7cdc3d51eb 100644 --- a/crates/core/component/dao/src/component/state_key.rs +++ b/crates/core/component/dao/src/component/state_key.rs @@ -1,10 +1,14 @@ use penumbra_asset::asset; +pub fn dao_params() -> &'static str { + "dao/params" +} + pub fn balance_for_asset(asset_id: asset::Id) -> String { format!("dao/asset/{asset_id}") } pub fn all_assets_balance() -> &'static str { - // Note: this must be the prefix of the above. + // note: this must be the prefix of the above. "dao/asset/" } diff --git a/crates/core/component/dao/src/component/view.rs b/crates/core/component/dao/src/component/view.rs index c4737d60f7..f535e285d7 100644 --- a/crates/core/component/dao/src/component/view.rs +++ b/crates/core/component/dao/src/component/view.rs @@ -9,10 +9,19 @@ use penumbra_num::Amount; use penumbra_proto::{StateReadProto, StateWriteProto}; use penumbra_storage::{StateRead, StateWrite}; +use crate::params::DaoParameters; + use super::state_key; #[async_trait] pub trait StateReadExt: StateRead { + /// Gets the DAO parameters from the JMT. + async fn get_dao_params(&self) -> Result { + self.get(state_key::dao_params()) + .await? + .ok_or_else(|| anyhow::anyhow!("Missing DaoParameters")) + } + async fn dao_asset_balance(&self, asset_id: asset::Id) -> Result { Ok(self .get(&state_key::balance_for_asset(asset_id)) @@ -38,6 +47,17 @@ impl StateReadExt for T where T: StateRead + ?Sized {} #[async_trait] pub trait StateWriteExt: StateWrite { + /// Writes the provided DAO parameters to the JMT. + fn put_dao_params(&mut self, params: DaoParameters) { + // TODO: this needs to be handled on a per-component basis or possibly removed from the compact block + // entirely, currently disabled, see https://github.com/penumbra-zone/penumbra/issues/3107 + // Note to the shielded pool to include the chain parameters in the next compact block: + // self.object_put(state_key::chain_params_changed(), ()); + + // Change the DAO parameters: + self.put(state_key::dao_params().into(), params) + } + async fn dao_deposit(&mut self, value: Value) -> Result<()> { let key = state_key::balance_for_asset(value.asset_id); let current = self.get(&key).await?.unwrap_or_else(|| Amount::from(0u64)); diff --git a/crates/core/component/dao/src/genesis.rs b/crates/core/component/dao/src/genesis.rs new file mode 100644 index 0000000000..e80af38aa5 --- /dev/null +++ b/crates/core/component/dao/src/genesis.rs @@ -0,0 +1,41 @@ +use anyhow::Context; +use penumbra_proto::{penumbra::core::component::dao::v1alpha1 as pb, DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +use crate::params::DaoParameters; + +#[derive(Deserialize, Serialize, Debug, Clone, Default)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// The initial configuration parameters for the DAO component. + pub dao_params: DaoParameters, +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + dao_params: Some(value.dao_params.into()), + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + dao_params: msg + .dao_params + .context("dao params not present in protobuf message")? + .try_into()?, + }) + } +} + +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.dao.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} diff --git a/crates/core/component/dao/src/lib.rs b/crates/core/component/dao/src/lib.rs index cbe69bb888..7d16f3f9c3 100644 --- a/crates/core/component/dao/src/lib.rs +++ b/crates/core/component/dao/src/lib.rs @@ -9,3 +9,10 @@ pub mod event; mod action; pub use action::{DaoDeposit, DaoOutput, DaoSpend}; + +pub mod genesis; +pub mod params; + +#[cfg_attr(docsrs, doc(cfg(feature = "component")))] +#[cfg(feature = "component")] +pub use component::{StateReadExt, StateWriteExt}; diff --git a/crates/core/component/dao/src/params.rs b/crates/core/component/dao/src/params.rs new file mode 100644 index 0000000000..501c656a2d --- /dev/null +++ b/crates/core/component/dao/src/params.rs @@ -0,0 +1,44 @@ +use penumbra_proto::core::component::dao::v1alpha1 as pb; +use penumbra_proto::{DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(try_from = "pb::DaoParameters", into = "pb::DaoParameters")] +pub struct DaoParameters { + /// Whether DAO spend proposals are enabled. + pub dao_spend_proposals_enabled: bool, +} + +impl TypeUrl for DaoParameters { + const TYPE_URL: &'static str = "/penumbra.core.dao.v1alpha1.DaoParameters"; +} + +impl DomainType for DaoParameters { + type Proto = pb::DaoParameters; +} + +impl TryFrom for DaoParameters { + type Error = anyhow::Error; + + fn try_from(msg: pb::DaoParameters) -> anyhow::Result { + Ok(DaoParameters { + dao_spend_proposals_enabled: msg.dao_spend_proposals_enabled, + }) + } +} + +impl From for pb::DaoParameters { + fn from(params: DaoParameters) -> Self { + pb::DaoParameters { + dao_spend_proposals_enabled: params.dao_spend_proposals_enabled, + } + } +} + +impl Default for DaoParameters { + fn default() -> Self { + Self { + dao_spend_proposals_enabled: true, + } + } +} diff --git a/crates/core/component/dex/src/component/dex.rs b/crates/core/component/dex/src/component/dex.rs index 6d79cf8554..541cfcae01 100644 --- a/crates/core/component/dex/src/component/dex.rs +++ b/crates/core/component/dex/src/component/dex.rs @@ -27,7 +27,7 @@ impl Component for Dex { type AppState = (); #[instrument(name = "dex", skip(_state, _app_state))] - async fn init_chain(_state: S, _app_state: &()) {} + async fn init_chain(_state: S, _app_state: Option<&()>) {} #[instrument(name = "dex", skip(_state, _begin_block))] async fn begin_block( diff --git a/crates/core/component/distributions/src/component.rs b/crates/core/component/distributions/src/component.rs index 6475c011bb..573a5f6049 100644 --- a/crates/core/component/distributions/src/component.rs +++ b/crates/core/component/distributions/src/component.rs @@ -6,7 +6,6 @@ use std::sync::Arc; use anyhow::Result; use async_trait::async_trait; -use penumbra_chain::genesis; use penumbra_component::Component; use penumbra_storage::StateWrite; use tendermint::abci; @@ -16,9 +15,9 @@ pub struct Distributions {} #[async_trait] impl Component for Distributions { - type AppState = genesis::AppState; + type AppState = (); - async fn init_chain(_state: S, _app_state: &Self::AppState) {} + async fn init_chain(_state: S, _app_state: Option<&()>) {} async fn begin_block( _state: &mut Arc, diff --git a/crates/core/component/governance/src/action_handler/validator_vote.rs b/crates/core/component/governance/src/action_handler/validator_vote.rs index 88923147b2..9fa1b834f8 100644 --- a/crates/core/component/governance/src/action_handler/validator_vote.rs +++ b/crates/core/component/governance/src/action_handler/validator_vote.rs @@ -2,7 +2,6 @@ use std::sync::Arc; use anyhow::{Context, Result}; use async_trait::async_trait; -use penumbra_chain::component::StateReadExt as _; use penumbra_proto::DomainType; use penumbra_storage::{StateRead, StateWrite}; @@ -92,8 +91,8 @@ impl ActionHandler for ValidatorVote { let total_voting_power = state .total_voting_power_at_proposal_start(*proposal) .await?; - let chain_params = state.get_chain_params().await?; - if tally.emergency_pass(total_voting_power, &chain_params) { + let governance_params = state.get_governance_params().await?; + if tally.emergency_pass(total_voting_power, &governance_params) { // If the emergency pass condition is met, enact the proposal tracing::debug!(proposal = %proposal, "emergency pass condition met, trying to enact proposal"); // Try to enact the proposal based on its payload diff --git a/crates/core/component/governance/src/component.rs b/crates/core/component/governance/src/component.rs index 8f2b16fed4..51558b895d 100644 --- a/crates/core/component/governance/src/component.rs +++ b/crates/core/component/governance/src/component.rs @@ -31,7 +31,7 @@ impl Component for Governance { type AppState = (); #[instrument(name = "governance", skip(state, _app_state))] - async fn init_chain(mut state: S, _app_state: &()) { + async fn init_chain(mut state: S, _app_state: Option<&()>) { // Clients need to be able to read the next proposal number, even when no proposals have // been submitted yet state.init_proposal_counter(); @@ -104,7 +104,7 @@ pub async fn enact_all_passed_proposals(mut state: S) -> Result<( state .total_voting_power_at_proposal_start(proposal_id) .await?, - &state.get_chain_params().await?, + &state.get_governance_params().await?, ); // If the proposal passes, enact it now (or try to: if the proposal can't be diff --git a/crates/core/component/governance/src/component/view.rs b/crates/core/component/governance/src/component/view.rs index 6afde2e4db..4c43c1cecd 100644 --- a/crates/core/component/governance/src/component/view.rs +++ b/crates/core/component/governance/src/component/view.rs @@ -24,6 +24,7 @@ use tracing::instrument; use penumbra_stake::{rate::RateData, validator, StateReadExt as _}; use crate::{ + params::GovernanceParameters, proposal::{Proposal, ProposalPayload}, proposal_state::State as ProposalState, vote::Vote, @@ -32,6 +33,13 @@ use crate::{state_key, tally::Tally}; #[async_trait] pub trait StateReadExt: StateRead + penumbra_stake::StateReadExt { + /// Gets the governance parameters from the JMT. + async fn get_governance_params(&self) -> Result { + self.get(state_key::governance_params()) + .await? + .ok_or_else(|| anyhow::anyhow!("Missing GovernanceParameters")) + } + /// Get the id of the next proposal in the sequence of ids. async fn next_proposal_id(&self) -> Result { Ok(self @@ -278,7 +286,7 @@ pub trait StateReadExt: StateRead + penumbra_stake::StateReadExt { async fn check_height_in_future_of_voting_end(&self, height: u64) -> Result<()> { let block_height = self.get_block_height().await?; - let voting_blocks = self.get_chain_params().await?.proposal_voting_blocks; + let voting_blocks = self.get_governance_params().await?.proposal_voting_blocks; let voting_end_height = block_height + voting_blocks; if height < voting_end_height { @@ -540,6 +548,17 @@ impl StateReadExt for T {} #[async_trait] pub trait StateWriteExt: StateWrite { + /// Writes the provided governance parameters to the JMT. + fn put_governance_params(&mut self, params: GovernanceParameters) { + // TODO: this needs to be handled on a per-component basis or possibly removed from the compact block + // entirely, currently disabled, see https://github.com/penumbra-zone/penumbra/issues/3107 + // Note to the shielded pool to include the chain parameters in the next compact block: + // self.object_put(state_key::chain_params_changed(), ()); + + // Change the governance parameters: + self.put(state_key::governance_params().into(), params) + } + /// Initialize the proposal counter so that it can always be read. fn init_proposal_counter(&mut self) { self.put_proto(state_key::next_proposal_id().to_string(), 0); @@ -814,43 +833,45 @@ pub trait StateWriteExt: StateWrite { self.signal_halt().await?; } } - ProposalPayload::ParameterChange { old, new } => { - tracing::info!( - "parameter change proposal passed, attempting to update chain parameters" - ); - - // If there has been a chain upgrade while the proposal was pending, the stateless - // verification criteria for the parameter change proposal could have changed, so we - // should check them again here, just to be sure: - old.check_valid_update(new) - .context("final check for validity of chain parameter update failed")?; - - // Check that the old parameters are an exact match for the current parameters, or - // else abort the update. - let current = - // If there is a pending parameter change, sequence the update on top of that - // one (i.e., pretend that those new parameters are the old parameters, since - // chain parameter updates must be sequentially consistent) - if let Some(params) = self.next_block_pending_chain_parameters().await? { - params - } else { - // If no pending parameter change, use the current parameters - self.get_chain_params().await? - }; - - // The current parameters (whether pending from a previous passed proposal or just the - // current ones, unchanged) have to match the old parameters specified in the - // proposal, exactly. This prevents updates from clashing. - if **old != current { - return Ok(Err(anyhow::anyhow!( - "current chain parameters do not match the old parameters in the proposal" - ))); - } - - // Tell the app to update the chain parameters in the next block - self.schedule_chain_params_change((**new).clone()).await?; - - tracing::info!("chain parameters updated successfully"); + ProposalPayload::ParameterChange { old: _, new: _ } => { + // TODO: Renable (#3107) + tracing::info!("Parameter change proposal passed, however parameter change is currently disabled. See issue #3107"); + // tracing::info!( + // "parameter change proposal passed, attempting to update chain parameters" + // ); + + // // If there has been a chain upgrade while the proposal was pending, the stateless + // // verification criteria for the parameter change proposal could have changed, so we + // // should check them again here, just to be sure: + // old.check_valid_update(new) + // .context("final check for validity of chain parameter update failed")?; + + // // Check that the old parameters are an exact match for the current parameters, or + // // else abort the update. + // let current = + // // If there is a pending parameter change, sequence the update on top of that + // // one (i.e., pretend that those new parameters are the old parameters, since + // // chain parameter updates must be sequentially consistent) + // if let Some(params) = self.next_block_pending_chain_parameters().await? { + // params + // } else { + // // If no pending parameter change, use the current parameters + // self.get_chain_params().await? + // }; + + // // The current parameters (whether pending from a previous passed proposal or just the + // // current ones, unchanged) have to match the old parameters specified in the + // // proposal, exactly. This prevents updates from clashing. + // if **old != current { + // return Ok(Err(anyhow::anyhow!( + // "current chain parameters do not match the old parameters in the proposal" + // ))); + // } + + // // Tell the app to update the chain parameters in the next block + // self.schedule_chain_params_change((**new).clone()).await?; + + // tracing::info!("chain parameters updated successfully"); } ProposalPayload::DaoSpend { transaction_plan: _, diff --git a/crates/core/component/governance/src/genesis.rs b/crates/core/component/governance/src/genesis.rs new file mode 100644 index 0000000000..10c08d8729 --- /dev/null +++ b/crates/core/component/governance/src/genesis.rs @@ -0,0 +1,41 @@ +use anyhow::Context; +use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +use crate::params::GovernanceParameters; + +#[derive(Deserialize, Serialize, Debug, Clone, Default)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// The initial configuration parameters for the governance component. + pub governance_params: GovernanceParameters, +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + governance_params: Some(value.governance_params.into()), + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + governance_params: msg + .governance_params + .context("governance params not present in protobuf message")? + .try_into()?, + }) + } +} + +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.governance.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} diff --git a/crates/core/component/governance/src/lib.rs b/crates/core/component/governance/src/lib.rs index a859589b73..1dae9a09e5 100644 --- a/crates/core/component/governance/src/lib.rs +++ b/crates/core/component/governance/src/lib.rs @@ -53,3 +53,6 @@ pub use component::{StateReadExt, StateWriteExt}; pub mod vote; pub use vote::Vote; + +pub mod genesis; +pub mod params; diff --git a/crates/core/component/governance/src/params.rs b/crates/core/component/governance/src/params.rs new file mode 100644 index 0000000000..1846d1d8a1 --- /dev/null +++ b/crates/core/component/governance/src/params.rs @@ -0,0 +1,86 @@ +use anyhow::Context; +use penumbra_chain::params::Ratio; +use penumbra_num::Amount; +use penumbra_proto::core::component::governance::v1alpha1 as pb; +use penumbra_proto::{DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde( + try_from = "pb::GovernanceParameters", + into = "pb::GovernanceParameters" +)] +pub struct GovernanceParameters { + /// The number of blocks during which a proposal is voted on. + pub proposal_voting_blocks: u64, + /// The deposit required to create a proposal. + pub proposal_deposit_amount: Amount, + /// The quorum required for a proposal to be considered valid, as a fraction of the total stake + /// weight of the network. + pub proposal_valid_quorum: Ratio, + /// The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. + pub proposal_pass_threshold: Ratio, + /// The threshold for a proposal to be slashed, as a ratio of "no" votes over all total votes. + pub proposal_slash_threshold: Ratio, +} + +impl TypeUrl for GovernanceParameters { + const TYPE_URL: &'static str = "/penumbra.core.governance.v1alpha1.GovernanceParameters"; +} + +impl DomainType for GovernanceParameters { + type Proto = pb::GovernanceParameters; +} + +impl TryFrom for GovernanceParameters { + type Error = anyhow::Error; + + fn try_from(msg: pb::GovernanceParameters) -> anyhow::Result { + Ok(GovernanceParameters { + proposal_voting_blocks: msg.proposal_voting_blocks, + proposal_deposit_amount: msg + .proposal_deposit_amount + .ok_or_else(|| anyhow::anyhow!("missing proposal_deposit_amount"))? + .try_into()?, + proposal_valid_quorum: msg + .proposal_valid_quorum + .parse() + .context("couldn't parse proposal_valid_quorum")?, + proposal_pass_threshold: msg + .proposal_pass_threshold + .parse() + .context("couldn't parse proposal_pass_threshold")?, + proposal_slash_threshold: msg + .proposal_slash_threshold + .parse() + .context("couldn't parse proposal_slash_threshold")?, + }) + } +} + +impl From for pb::GovernanceParameters { + fn from(params: GovernanceParameters) -> Self { + pb::GovernanceParameters { + proposal_voting_blocks: params.proposal_voting_blocks, + proposal_deposit_amount: Some(params.proposal_deposit_amount.into()), + proposal_valid_quorum: params.proposal_valid_quorum.to_string(), + proposal_pass_threshold: params.proposal_pass_threshold.to_string(), + proposal_slash_threshold: params.proposal_slash_threshold.to_string(), + } + } +} + +impl Default for GovernanceParameters { + fn default() -> Self { + Self { + // governance + proposal_voting_blocks: 17_280, // 24 hours, at a 5 second block time + proposal_deposit_amount: 10_000_000u64.into(), // 10,000,000 upenumbra = 10 penumbra + // governance parameters copied from cosmos hub + proposal_valid_quorum: Ratio::new(40, 100), + proposal_pass_threshold: Ratio::new(50, 100), + // slash threshold means if (no / no + yes + abstain) > slash_threshold, then proposal is slashed + proposal_slash_threshold: Ratio::new(80, 100), + } + } +} diff --git a/crates/core/component/governance/src/state_key.rs b/crates/core/component/governance/src/state_key.rs index 6528008f30..c1fb0753e4 100644 --- a/crates/core/component/governance/src/state_key.rs +++ b/crates/core/component/governance/src/state_key.rs @@ -1,6 +1,10 @@ use penumbra_sct::Nullifier; use penumbra_stake::IdentityKey; +pub fn governance_params() -> &'static str { + "governance/params" +} + pub fn next_proposal_id() -> &'static str { "governance/next_proposal_id" } diff --git a/crates/core/component/governance/src/tally.rs b/crates/core/component/governance/src/tally.rs index c8cf21d249..402686fd43 100644 --- a/crates/core/component/governance/src/tally.rs +++ b/crates/core/component/governance/src/tally.rs @@ -1,11 +1,12 @@ use std::ops::{Add, AddAssign}; +use penumbra_chain::params::Ratio; use serde::{Deserialize, Serialize}; -use penumbra_chain::params::{ChainParameters, Ratio}; use penumbra_proto::{penumbra::core::component::governance::v1alpha1 as pb, DomainType, TypeUrl}; use crate::{ + params::GovernanceParameters, proposal_state::{Outcome as StateOutcome, Withdrawn}, vote::Vote, }; @@ -138,11 +139,11 @@ impl From for StateOutcome { } impl Tally { - fn meets_quorum(&self, total_voting_power: u64, params: &ChainParameters) -> bool { + fn meets_quorum(&self, total_voting_power: u64, params: &GovernanceParameters) -> bool { Ratio::new(self.total(), total_voting_power) >= params.proposal_valid_quorum } - fn slashed(&self, params: &ChainParameters) -> bool { + fn slashed(&self, params: &GovernanceParameters) -> bool { Ratio::new(self.no, self.total()) > params.proposal_slash_threshold } @@ -153,7 +154,7 @@ impl Tally { // desired in that situation } - pub fn outcome(self, total_voting_power: u64, params: &ChainParameters) -> Outcome { + pub fn outcome(self, total_voting_power: u64, params: &GovernanceParameters) -> Outcome { use Outcome::*; // Check to see if we've met quorum @@ -174,7 +175,7 @@ impl Tally { } } - pub fn emergency_pass(self, total_voting_power: u64, params: &ChainParameters) -> bool { + pub fn emergency_pass(self, total_voting_power: u64, params: &GovernanceParameters) -> bool { // Check to see if we've met quorum if !self.meets_quorum(total_voting_power, params) { return false; diff --git a/crates/core/component/ibc/src/component.rs b/crates/core/component/ibc/src/component.rs index 221d9f151b..0b5b7b5b2d 100644 --- a/crates/core/component/ibc/src/component.rs +++ b/crates/core/component/ibc/src/component.rs @@ -16,6 +16,7 @@ mod packet; mod proof_verification; mod state_key; mod transfer; +mod view; use msg_handler::MsgHandler; @@ -23,5 +24,6 @@ pub use self::metrics::register_metrics; pub use channel::StateReadExt as ChannelStateReadExt; pub use client::StateReadExt as ClientStateReadExt; pub use connection::StateReadExt as ConnectionStateReadExt; +pub use view::{StateReadExt, StateWriteExt}; pub use ibc_component::IBCComponent; diff --git a/crates/core/component/ibc/src/component/ibc_component.rs b/crates/core/component/ibc/src/component/ibc_component.rs index 446270f707..80803526f5 100644 --- a/crates/core/component/ibc/src/component/ibc_component.rs +++ b/crates/core/component/ibc/src/component/ibc_component.rs @@ -5,8 +5,7 @@ use async_trait::async_trait; use ibc_types::{ core::client::Height, lightclients::tendermint::ConsensusState as TendermintConsensusState, }; -use penumbra_chain::component::StateReadExt; -use penumbra_chain::genesis; +use penumbra_chain::component::StateReadExt as _; use penumbra_component::Component; use penumbra_storage::StateWrite; use tendermint::abci; @@ -18,13 +17,13 @@ pub struct IBCComponent {} #[async_trait] impl Component for IBCComponent { - type AppState = genesis::AppState; + type AppState = (); #[instrument(name = "ibc", skip(state, app_state))] - async fn init_chain(mut state: S, app_state: &genesis::AppState) { + async fn init_chain(mut state: S, app_state: Option<&()>) { match app_state { - genesis::AppState::Content(_) => state.put_client_counter(ClientCounter(0)), - genesis::AppState::Checkpoint(_) => { /* perform upgrade specific check */ } + Some(_) => state.put_client_counter(ClientCounter(0)), + None => { /* perform upgrade specific check */ } } } diff --git a/crates/core/component/ibc/src/component/state_key.rs b/crates/core/component/ibc/src/component/state_key.rs index f966c88326..bc4a370540 100644 --- a/crates/core/component/ibc/src/component/state_key.rs +++ b/crates/core/component/ibc/src/component/state_key.rs @@ -4,12 +4,16 @@ use penumbra_asset::asset; use std::string::String; +pub fn ibc_params() -> &'static str { + "ibc/params" +} + // TODO (ava): move these to ibc-types eventually pub fn client_processed_heights(client_id: &ClientId, height: &Height) -> String { - format!("clients/{client_id}/processedHeights/{height}") + format!("ibc/clients/{client_id}/processedHeights/{height}") } pub fn client_processed_times(client_id: &ClientId, height: &Height) -> String { - format!("clients/{client_id}/processedTimes/{height}") + format!("ibc/clients/{client_id}/processedTimes/{height}") } pub mod connections { @@ -22,19 +26,19 @@ pub mod connections { // https://github.com/cosmos/ibc/tree/main/spec/core/ics-003-connection-semantics #[allow(dead_code)] pub fn by_client_id_list(client_id: &ClientId) -> String { - format!("clients/{client_id}/connections/") + format!("ibc/clients/{client_id}/connections/") } pub fn by_client_id(client_id: &ClientId, connection_id: &ConnectionId) -> String { format!( - "clients/{}/connections/{}", + "ibc/clients/{}/connections/{}", client_id, connection_id.as_str() ) } pub fn by_connection_id(connection_id: &ConnectionId) -> String { - format!("connections/{}", connection_id.as_str()) + format!("ibc/connections/{}", connection_id.as_str()) } pub fn counter() -> &'static str { @@ -43,5 +47,5 @@ pub mod connections { } pub fn ics20_value_balance(channel_id: &ChannelId, asset_id: &asset::Id) -> String { - format!("ics20-value-balance/{channel_id}/{asset_id}") + format!("ibc/ics20-value-balance/{channel_id}/{asset_id}") } diff --git a/crates/core/component/ibc/src/component/view.rs b/crates/core/component/ibc/src/component/view.rs new file mode 100644 index 0000000000..217885782e --- /dev/null +++ b/crates/core/component/ibc/src/component/view.rs @@ -0,0 +1,36 @@ +use anyhow::Result; +use async_trait::async_trait; +use penumbra_proto::{StateReadProto, StateWriteProto}; +use penumbra_storage::{StateRead, StateWrite}; + +use crate::params::IBCParameters; + +use super::state_key; + +#[async_trait] +pub trait StateWriteExt: StateWrite { + /// Writes the provided IBC parameters to the JMT. + fn put_ibc_params(&mut self, params: IBCParameters) { + // TODO: this needs to be handled on a per-component basis or possibly removed from the compact block + // entirely, currently disabled, see https://github.com/penumbra-zone/penumbra/issues/3107 + // Note to the shielded pool to include the chain parameters in the next compact block: + // self.object_put(state_key::chain_params_changed(), ()); + + // Change the IBC parameters: + self.put(state_key::ibc_params().into(), params) + } +} + +impl StateWriteExt for T {} + +#[async_trait] +pub trait StateReadExt: StateRead { + /// Gets the IBC parameters from the JMT. + async fn get_ibc_params(&self) -> Result { + self.get(state_key::ibc_params()) + .await? + .ok_or_else(|| anyhow::anyhow!("Missing IBCParameters")) + } +} + +impl StateReadExt for T {} diff --git a/crates/core/component/ibc/src/genesis.rs b/crates/core/component/ibc/src/genesis.rs new file mode 100644 index 0000000000..d1c2e276a8 --- /dev/null +++ b/crates/core/component/ibc/src/genesis.rs @@ -0,0 +1,41 @@ +use anyhow::Context; +use penumbra_proto::{penumbra::core::component::ibc::v1alpha1 as pb, DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +use crate::params::IBCParameters; + +#[derive(Deserialize, Serialize, Debug, Clone, Default)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// The initial configuration parameters for the IBC component. + pub ibc_params: IBCParameters, +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + ibc_params: Some(value.ibc_params.into()), + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + ibc_params: msg + .ibc_params + .context("ibc params not present in protobuf message")? + .try_into()?, + }) + } +} + +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.ibc.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} diff --git a/crates/core/component/ibc/src/lib.rs b/crates/core/component/ibc/src/lib.rs index 798aeb9419..91e980e725 100644 --- a/crates/core/component/ibc/src/lib.rs +++ b/crates/core/component/ibc/src/lib.rs @@ -9,11 +9,17 @@ #[cfg(feature = "component")] pub mod component; +pub mod genesis; mod ibc_action; mod ibc_token; mod ics20_withdrawal; +pub mod params; mod version; pub use ibc_action::IbcAction; pub use ibc_token::IbcToken; pub use ics20_withdrawal::Ics20Withdrawal; + +#[cfg_attr(docsrs, doc(cfg(feature = "component")))] +#[cfg(feature = "component")] +pub use component::{StateReadExt, StateWriteExt}; diff --git a/crates/core/component/ibc/src/params.rs b/crates/core/component/ibc/src/params.rs new file mode 100644 index 0000000000..6e69833b08 --- /dev/null +++ b/crates/core/component/ibc/src/params.rs @@ -0,0 +1,54 @@ +use penumbra_proto::core::component::ibc::v1alpha1 as pb; +use penumbra_proto::{DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(try_from = "pb::IbcParameters", into = "pb::IbcParameters")] +pub struct IBCParameters { + /// Whether IBC (forming connections, processing IBC packets) is enabled. + pub ibc_enabled: bool, + /// Whether inbound ICS-20 transfers are enabled + pub inbound_ics20_transfers_enabled: bool, + /// Whether outbound ICS-20 transfers are enabled + pub outbound_ics20_transfers_enabled: bool, +} + +impl TypeUrl for IBCParameters { + const TYPE_URL: &'static str = "/penumbra.core.ibc.v1alpha1.IbcParameters"; +} + +impl DomainType for IBCParameters { + type Proto = pb::IbcParameters; +} + +impl TryFrom for IBCParameters { + type Error = anyhow::Error; + + fn try_from(msg: pb::IbcParameters) -> anyhow::Result { + Ok(IBCParameters { + ibc_enabled: msg.ibc_enabled, + inbound_ics20_transfers_enabled: msg.inbound_ics20_transfers_enabled, + outbound_ics20_transfers_enabled: msg.outbound_ics20_transfers_enabled, + }) + } +} + +impl From for pb::IbcParameters { + fn from(params: IBCParameters) -> Self { + pb::IbcParameters { + ibc_enabled: params.ibc_enabled, + inbound_ics20_transfers_enabled: params.inbound_ics20_transfers_enabled, + outbound_ics20_transfers_enabled: params.outbound_ics20_transfers_enabled, + } + } +} + +impl Default for IBCParameters { + fn default() -> Self { + Self { + ibc_enabled: true, + inbound_ics20_transfers_enabled: true, + outbound_ics20_transfers_enabled: true, + } + } +} diff --git a/crates/core/component/shielded-pool/src/component/shielded_pool.rs b/crates/core/component/shielded-pool/src/component/shielded_pool.rs index 7876e7f30a..fc8e3bbef9 100644 --- a/crates/core/component/shielded-pool/src/component/shielded_pool.rs +++ b/crates/core/component/shielded-pool/src/component/shielded_pool.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::Result; use async_trait::async_trait; use penumbra_asset::{asset, Value}; -use penumbra_chain::{genesis, NoteSource, SpendInfo}; +use penumbra_chain::{NoteSource, SpendInfo}; use penumbra_component::Component; use penumbra_proto::StateReadProto; use penumbra_sct::Nullifier; @@ -12,6 +12,7 @@ use penumbra_storage::StateWrite; use tendermint::v0_34::abci; use tracing::instrument; +use crate::genesis::Content as GenesisContent; use crate::state_key; use super::{NoteManager, SupplyWrite}; @@ -20,17 +21,16 @@ pub struct ShieldedPool {} #[async_trait] impl Component for ShieldedPool { - type AppState = genesis::AppState; + type AppState = GenesisContent; #[instrument(name = "shielded_pool", skip(state, app_state))] - async fn init_chain(mut state: S, app_state: &genesis::AppState) { + async fn init_chain(mut state: S, app_state: Option<&GenesisContent>) { match app_state { - genesis::AppState::Checkpoint(_) => { /* no-op */ } - genesis::AppState::Content(app_state) => { + None => { /* Checkpoint -- no-op */ } + Some(app_state) => { // Register a denom for each asset in the genesis state for allocation in &app_state.allocations { tracing::debug!(?allocation, "processing allocation"); - assert_ne!( allocation.amount, 0u128.into(), diff --git a/crates/core/component/shielded-pool/src/genesis.rs b/crates/core/component/shielded-pool/src/genesis.rs new file mode 100644 index 0000000000..10a54dd538 --- /dev/null +++ b/crates/core/component/shielded-pool/src/genesis.rs @@ -0,0 +1,90 @@ +use penumbra_proto::{ + penumbra::core::component::shielded_pool::v1alpha1 as pb, DomainType, TypeUrl, +}; +use serde::{Deserialize, Serialize}; + +mod allocation; + +pub use allocation::Allocation; + +#[derive(Deserialize, Serialize, Debug, Clone)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// The initial token allocations. + pub allocations: Vec, +} + +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.shielded_pool.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + allocations: value.allocations.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + allocations: msg + .allocations + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} + +impl Default for Content { + fn default() -> Self { + Self { + allocations: vec![ + Allocation { + amount: 1000u128.into(), + denom: "penumbra" + .parse() + .expect("hardcoded \"penumbra\" denom should be parseable"), + address: penumbra_chain::test_keys::ADDRESS_0_STR + .parse() + .expect("hardcoded test address should be valid"), + }, + Allocation { + amount: 100u128.into(), + denom: "test_usd" + .parse() + .expect("hardcoded \"test_usd\" denom should be parseable"), + address: penumbra_chain::test_keys::ADDRESS_0_STR + .parse() + .expect("hardcoded test address should be valid"), + }, + Allocation { + amount: 100u128.into(), + denom: "gm" + .parse() + .expect("hardcoded \"gm\" denom should be parseable"), + address: penumbra_chain::test_keys::ADDRESS_1_STR + .parse() + .expect("hardcoded test address should be valid"), + }, + Allocation { + amount: 100u128.into(), + denom: "gn" + .parse() + .expect("hardcoded \"gn\" denom should be parseable"), + address: penumbra_chain::test_keys::ADDRESS_1_STR + .parse() + .expect("hardcoded test address should be valid"), + }, + ], + } + } +} diff --git a/crates/core/component/chain/src/genesis/allocation.rs b/crates/core/component/shielded-pool/src/genesis/allocation.rs similarity index 94% rename from crates/core/component/chain/src/genesis/allocation.rs rename to crates/core/component/shielded-pool/src/genesis/allocation.rs index cf3f1e1943..7e10cab5cc 100644 --- a/crates/core/component/chain/src/genesis/allocation.rs +++ b/crates/core/component/shielded-pool/src/genesis/allocation.rs @@ -1,6 +1,8 @@ use penumbra_keys::Address; use penumbra_num::Amount; -use penumbra_proto::{penumbra::core::component::chain::v1alpha1 as pb, DomainType, TypeUrl}; +use penumbra_proto::{ + penumbra::core::component::shielded_pool::v1alpha1 as pb, DomainType, TypeUrl, +}; use serde::{Deserialize, Serialize}; /// A (transparent) genesis allocation. diff --git a/crates/core/component/shielded-pool/src/lib.rs b/crates/core/component/shielded-pool/src/lib.rs index 87c201a3b1..61d8ff5647 100644 --- a/crates/core/component/shielded-pool/src/lib.rs +++ b/crates/core/component/shielded-pool/src/lib.rs @@ -6,6 +6,7 @@ pub mod component; pub mod event; +pub mod genesis; pub mod state_key; pub mod note; diff --git a/crates/core/component/shielded-pool/src/note.rs b/crates/core/component/shielded-pool/src/note.rs index e7ce8c8467..c16aa6a7e9 100644 --- a/crates/core/component/shielded-pool/src/note.rs +++ b/crates/core/component/shielded-pool/src/note.rs @@ -1,12 +1,12 @@ use std::convert::{TryFrom, TryInto}; +use crate::genesis::Allocation; use ark_ff::PrimeField; use blake2b_simd; use decaf377::{FieldExt, Fq}; use decaf377_fmd as fmd; use decaf377_ka as ka; use once_cell::sync::Lazy; -use penumbra_chain::genesis::Allocation; use penumbra_keys::{ keys::{Diversifier, FullViewingKey, IncomingViewingKey, OutgoingViewingKey}, symmetric::{OutgoingCipherKey, OvkWrappedKey, PayloadKey, PayloadKind}, diff --git a/crates/core/component/stake/src/component.rs b/crates/core/component/stake/src/component.rs index bec9107557..042fde7dc9 100644 --- a/crates/core/component/stake/src/component.rs +++ b/crates/core/component/stake/src/component.rs @@ -18,7 +18,7 @@ use futures::{FutureExt, StreamExt, TryFutureExt, TryStreamExt}; use penumbra_asset::{Value, STAKING_TOKEN_ASSET_ID}; use penumbra_chain::{ component::{StateReadExt as _, StateWriteExt as _}, - genesis, Epoch, NoteSource, + Epoch, NoteSource, }; use penumbra_component::Component; use penumbra_dao::component::StateWriteExt as _; @@ -42,6 +42,8 @@ use tracing::{instrument, Instrument}; use crate::{ funding_stream::Recipient, + genesis::Content as GenesisContent, + params::StakeParameters, rate::{BaseRateData, RateData}, state_key, validator::{self, Validator}, @@ -238,7 +240,7 @@ pub(crate) trait StakingImpl: StateWriteExt { Ok(()) } (Active, Jailed) => { - let penalty = self.get_chain_params().await?.slashing_penalty_downtime; + let penalty = self.get_stake_params().await?.slashing_penalty_downtime; // Record the slashing penalty on this validator. self.record_slashing_penalty(identity_key, Penalty(penalty)) @@ -262,7 +264,7 @@ pub(crate) trait StakingImpl: StateWriteExt { Ok(()) } (Active | Inactive | Disabled | Jailed, Tombstoned) => { - let penalty = self.get_chain_params().await?.slashing_penalty_misbehavior; + let penalty = self.get_stake_params().await?.slashing_penalty_misbehavior; // Record the slashing penalty on this validator. self.record_slashing_penalty(identity_key, Penalty(penalty)) @@ -329,7 +331,7 @@ pub(crate) trait StakingImpl: StateWriteExt { .sum::(), ); - let chain_params = self.get_chain_params().await?; + let chain_params = self.get_stake_params().await?; tracing::debug!("processing base rate"); // We are transitioning to the next epoch, so set "cur_base_rate" to the previous "next_base_rate", and @@ -527,7 +529,7 @@ pub(crate) trait StakingImpl: StateWriteExt { // The top `limit` validators with nonzero power become active. // All other validators become inactive. - let limit = self.get_chain_params().await?.active_validator_limit as usize; + let limit = self.get_stake_params().await?.active_validator_limit as usize; let active = validators_by_power.iter().take(limit); let inactive = validators_by_power .iter() @@ -669,7 +671,7 @@ pub(crate) trait StakingImpl: StateWriteExt { // which is about the *last* commit, but at least it'll be consistent, // which is all we need to count signatures. let height = self.get_block_height().await?; - let params = self.get_chain_params().await?; + let params = self.get_stake_params().await?; // Build a mapping from addresses (20-byte truncated SHA256(pubkey)) to vote statuses. let did_address_vote = last_commit_info @@ -754,7 +756,7 @@ pub(crate) trait StakingImpl: StateWriteExt { /// state with power assigned. async fn add_genesis_validator( &mut self, - genesis_allocations: &BTreeMap<&String, u128>, + genesis_allocations: &BTreeMap, genesis_base_rate: &BaseRateData, validator: Validator, ) -> Result<()> { @@ -893,12 +895,12 @@ impl StakingImpl for T {} #[async_trait] impl Component for Staking { - type AppState = genesis::AppState; + type AppState = GenesisContent; #[instrument(name = "staking", skip(state, app_state))] - async fn init_chain(mut state: S, app_state: &genesis::AppState) { + async fn init_chain(mut state: S, app_state: Option<&GenesisContent>) { match app_state { - genesis::AppState::Content(app_state) => { + Some(app_state) => { let starting_height = state .get_block_height() .await @@ -929,9 +931,24 @@ impl Component for Staking { // Compile totals of genesis allocations by denom, which we can use // to compute the delegation tokens for each validator. let mut genesis_allocations = BTreeMap::new(); - for allocation in &app_state.allocations { - *genesis_allocations.entry(&allocation.denom).or_insert(0) += - u128::from(allocation.amount); + // Grab the token supply info from the staking component's state. + // Note that this requires the staking component's init_chain to be called first. + // First grab all known assets: + let known_assets = state + .known_assets() + .await + .expect("shielded pool component called first"); + for asset in known_assets.0 { + // Grab the associated denom + let denom = asset.base_denom().denom; + // Grab the token supply associated with the denom + let genesis_allocation = state + .token_supply(&asset.id()) + .await + .expect("should be able to get token supply") + .expect("should have token supply for known denom") + as u128; + genesis_allocations.insert(denom, genesis_allocation); } // Add initial validators to the JMT @@ -959,9 +976,8 @@ impl Component for Staking { ) .await; } - genesis::AppState::Checkpoint(_) => { /* perform upgrade specific check */ } + None => { /* perform upgrade specific check */ } } - // Build the initial validator set update. // First, "prime" the state with an empty set, so the build_ function can read it. state.put( @@ -1034,6 +1050,13 @@ impl Component for Staking { /// Extension trait providing read access to staking data. #[async_trait] pub trait StateReadExt: StateRead { + /// Gets the stake parameters from the JMT. + async fn get_stake_params(&self) -> Result { + self.get(state_key::stake_params()) + .await? + .ok_or_else(|| anyhow!("Missing StakeParameters")) + } + /// Delegation changes accumulated over the course of this block, to be /// persisted at the end of the block for processing at the end of the next /// epoch. @@ -1247,11 +1270,11 @@ pub trait StateReadExt: StateRead { } async fn signed_blocks_window_len(&self) -> Result { - Ok(self.get_chain_params().await?.signed_blocks_window_len) + Ok(self.get_stake_params().await?.signed_blocks_window_len) } async fn missed_blocks_maximum(&self) -> Result { - Ok(self.get_chain_params().await?.missed_blocks_maximum) + Ok(self.get_stake_params().await?.missed_blocks_maximum) } async fn unbonding_end_epoch_for( @@ -1259,7 +1282,7 @@ pub trait StateReadExt: StateRead { id: &IdentityKey, start_epoch_index: u64, ) -> Result { - let unbonding_epochs = self.get_chain_params().await?.unbonding_epochs; + let unbonding_epochs = self.get_stake_params().await?.unbonding_epochs; let default_unbonding = start_epoch_index + unbonding_epochs; @@ -1277,7 +1300,7 @@ pub trait StateReadExt: StateRead { async fn current_unbonding_end_epoch_for(&self, id: &IdentityKey) -> Result { let current_epoch = self.get_current_epoch().await?; - let unbonding_epochs = self.get_chain_params().await?.unbonding_epochs; + let unbonding_epochs = self.get_stake_params().await?.unbonding_epochs; let default_unbonding = current_epoch.index + unbonding_epochs; @@ -1299,6 +1322,17 @@ impl StateReadExt for T {} /// Extension trait providing write access to staking data. #[async_trait] pub trait StateWriteExt: StateWrite { + /// Writes the provided stake parameters to the JMT. + fn put_stake_params(&mut self, params: StakeParameters) { + // TODO: this needs to be handled on a per-component basis or possibly removed from the compact block + // entirely, currently disabled, see https://github.com/penumbra-zone/penumbra/issues/3107 + // Note to the shielded pool to include the chain parameters in the next compact block: + // self.object_put(state_key::chain_params_changed(), ()); + + // Change the stake parameters: + self.put(state_key::stake_params().into(), params) + } + /// Delegation changes accumulated over the course of this block, to be /// persisted at the end of the block for processing at the end of the next /// epoch. diff --git a/crates/core/component/stake/src/genesis.rs b/crates/core/component/stake/src/genesis.rs new file mode 100644 index 0000000000..b0f413085a --- /dev/null +++ b/crates/core/component/stake/src/genesis.rs @@ -0,0 +1,48 @@ +use anyhow::Context; +use penumbra_proto::{penumbra::core::component::stake::v1alpha1 as pb, DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +use crate::params::StakeParameters; + +#[derive(Deserialize, Serialize, Debug, Clone, Default)] +#[serde(try_from = "pb::GenesisContent", into = "pb::GenesisContent")] +pub struct Content { + /// The initial configuration parameters for the staking component. + pub stake_params: StakeParameters, + /// The initial validator set. + pub validators: Vec, +} +impl TypeUrl for Content { + const TYPE_URL: &'static str = "/penumbra.stake.v1alpha1.GenesisContent"; +} + +impl DomainType for Content { + type Proto = pb::GenesisContent; +} + +impl From for pb::GenesisContent { + fn from(value: Content) -> Self { + pb::GenesisContent { + stake_params: Some(value.stake_params.into()), + validators: value.validators.into_iter().map(Into::into).collect(), + } + } +} + +impl TryFrom for Content { + type Error = anyhow::Error; + + fn try_from(msg: pb::GenesisContent) -> Result { + Ok(Content { + stake_params: msg + .stake_params + .context("stake params not present in protobuf message")? + .try_into()?, + validators: msg + .validators + .into_iter() + .map(TryInto::try_into) + .collect::>()?, + }) + } +} diff --git a/crates/core/component/stake/src/lib.rs b/crates/core/component/stake/src/lib.rs index a7465ccc4c..bf8f09f233 100644 --- a/crates/core/component/stake/src/lib.rs +++ b/crates/core/component/stake/src/lib.rs @@ -48,3 +48,6 @@ pub use changes::DelegationChanges; pub use current_consensus_keys::CurrentConsensusKeys; pub use funding_stream::{FundingStream, FundingStreams}; pub use uptime::Uptime; + +pub mod genesis; +pub mod params; diff --git a/crates/core/component/stake/src/params.rs b/crates/core/component/stake/src/params.rs new file mode 100644 index 0000000000..967a4bb1a8 --- /dev/null +++ b/crates/core/component/stake/src/params.rs @@ -0,0 +1,79 @@ +use penumbra_proto::core::component::stake::v1alpha1 as pb; +use penumbra_proto::{DomainType, TypeUrl}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(try_from = "pb::StakeParameters", into = "pb::StakeParameters")] +pub struct StakeParameters { + pub unbonding_epochs: u64, + /// The number of validators allowed in the consensus set (Active state). + pub active_validator_limit: u64, + /// The base reward rate, expressed in basis points of basis points + pub base_reward_rate: u64, + /// The penalty for slashing due to misbehavior, expressed in basis points squared (10^-8) + pub slashing_penalty_misbehavior: u64, + /// The penalty for slashing due to downtime, expressed in basis points squared (10^-8) + pub slashing_penalty_downtime: u64, + /// The number of blocks in the window to check for downtime. + pub signed_blocks_window_len: u64, + /// The maximum number of blocks in the window each validator can miss signing without slashing. + pub missed_blocks_maximum: u64, +} + +impl TypeUrl for StakeParameters { + const TYPE_URL: &'static str = "/penumbra.core.stake.v1alpha1.StakeParameters"; +} + +impl DomainType for StakeParameters { + type Proto = pb::StakeParameters; +} + +impl TryFrom for StakeParameters { + type Error = anyhow::Error; + + fn try_from(msg: pb::StakeParameters) -> anyhow::Result { + Ok(StakeParameters { + unbonding_epochs: msg.unbonding_epochs, + active_validator_limit: msg.active_validator_limit, + slashing_penalty_downtime: msg.slashing_penalty_downtime, + slashing_penalty_misbehavior: msg.slashing_penalty_misbehavior, + base_reward_rate: msg.base_reward_rate, + missed_blocks_maximum: msg.missed_blocks_maximum, + signed_blocks_window_len: msg.signed_blocks_window_len, + }) + } +} + +impl From for pb::StakeParameters { + fn from(params: StakeParameters) -> Self { + pb::StakeParameters { + unbonding_epochs: params.unbonding_epochs, + active_validator_limit: params.active_validator_limit, + signed_blocks_window_len: params.signed_blocks_window_len, + missed_blocks_maximum: params.missed_blocks_maximum, + slashing_penalty_downtime: params.slashing_penalty_downtime, + slashing_penalty_misbehavior: params.slashing_penalty_misbehavior, + base_reward_rate: params.base_reward_rate, + } + } +} + +// TODO: defaults are implemented here as well as in the +// `pd::main` +impl Default for StakeParameters { + fn default() -> Self { + Self { + unbonding_epochs: 2, + active_validator_limit: 80, + // copied from cosmos hub + signed_blocks_window_len: 10000, + missed_blocks_maximum: 9500, + // 1000 basis points = 10% + slashing_penalty_misbehavior: 1000_0000, + // 1 basis point = 0.01% + slashing_penalty_downtime: 1_0000, + // 3bps -> 11% return over 365 epochs + base_reward_rate: 3_0000, + } + } +} diff --git a/crates/core/component/stake/src/state_key.rs b/crates/core/component/stake/src/state_key.rs index c46f7d76af..ac94222617 100644 --- a/crates/core/component/stake/src/state_key.rs +++ b/crates/core/component/stake/src/state_key.rs @@ -3,6 +3,10 @@ use tendermint::PublicKey; use crate::IdentityKey; +pub fn stake_params() -> &'static str { + "staking/params" +} + pub fn current_base_rate() -> &'static str { "staking/base_rate/current" } diff --git a/crates/misc/measure/Cargo.toml b/crates/misc/measure/Cargo.toml index ec6d18cee1..6740c45c81 100644 --- a/crates/misc/measure/Cargo.toml +++ b/crates/misc/measure/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" [dependencies] penumbra-proto = { path = "../../proto", features = ["rpc"] } penumbra-chain = { path = "../../core/component/chain" } +penumbra-app = { path = "../../core/app" } penumbra-compact-block = { path = "../../core/component/compact-block", default-features = false } tokio = { version = "1.21.1", features = ["full"] } diff --git a/crates/misc/measure/src/main.rs b/crates/misc/measure/src/main.rs index 54624707a4..42c6954778 100644 --- a/crates/misc/measure/src/main.rs +++ b/crates/misc/measure/src/main.rs @@ -5,11 +5,11 @@ use clap::Parser; use tracing::Instrument; use tracing_subscriber::EnvFilter; -use penumbra_chain::params::ChainParameters; +use penumbra_app::params::AppParameters; use penumbra_compact_block::CompactBlock; use penumbra_proto::{ penumbra::core::app::v1alpha1::{ - query_service_client::QueryServiceClient as AppQueryServiceClient, ChainParametersRequest, + query_service_client::QueryServiceClient as AppQueryServiceClient, AppParametersRequest, }, penumbra::core::component::compact_block::v1alpha1::{ query_service_client::QueryServiceClient as CompactBlockQueryServiceClient, @@ -191,8 +191,8 @@ impl Opt { let mut app_client = AppQueryServiceClient::new(channel.clone()); let mut cb_client = CompactBlockQueryServiceClient::new(channel.clone()); - let params: ChainParameters = app_client - .chain_parameters(tonic::Request::new(ChainParametersRequest { + let params: AppParameters = app_client + .app_parameters(tonic::Request::new(AppParametersRequest { chain_id: String::new(), })) .await? @@ -204,7 +204,7 @@ impl Opt { let mut stream = cb_client .compact_block_range(tonic::Request::new(CompactBlockRangeRequest { - chain_id: params.chain_id, + chain_id: params.chain_params.chain_id, start_height, end_height, keep_alive: false, diff --git a/crates/narsil/narsil/Cargo.toml b/crates/narsil/narsil/Cargo.toml index 259acbe582..a3553ba240 100644 --- a/crates/narsil/narsil/Cargo.toml +++ b/crates/narsil/narsil/Cargo.toml @@ -13,12 +13,15 @@ publish = false [dependencies] # Workspace dependencies -penumbra-proto = { path = "../../proto" , features = ["rpc"] } -penumbra-storage = { path = "../../storage" } -penumbra-tower-trace = { path = "../../util/tower-trace" } +penumbra-proto = { path = "../../proto", features = ["rpc"] } +penumbra-storage = { path = "../../storage" } +penumbra-tower-trace = { path = "../../util/tower-trace" } penumbra-tendermint-proxy = { path = "../../util/tendermint-proxy" } # TODO: remove dependency on penumbra-chain -penumbra-chain = { path = "../../core/component/chain" , features = ["component"] } +penumbra-chain = { path = "../../core/component/chain", features = [ + "component", +] } +penumbra-app = { path = "../../core/app" } # Penumbra dependencies tower-abci = "0.9.0" diff --git a/crates/narsil/narsil/src/ledger/app.rs b/crates/narsil/narsil/src/ledger/app.rs index 5a3746c616..b8cb9c523f 100644 --- a/crates/narsil/narsil/src/ledger/app.rs +++ b/crates/narsil/narsil/src/ledger/app.rs @@ -4,7 +4,8 @@ use std::sync::Arc; // TODO: we should not have dependencies on penumbra_chain in narsil // and instead implement narsil-specific state accessors or extract // the common accessors elsewhere to avoid mingling penumbra-specific logic. -use penumbra_chain::{component::AppHash, genesis}; +use penumbra_app::genesis; +use penumbra_chain::component::AppHash; use penumbra_proto::{core::transaction::v1alpha1::Transaction, Message}; use penumbra_storage::{ArcStateDeltaExt, Snapshot, StateDelta, Storage}; use tendermint::{abci, validator::Update}; diff --git a/crates/narsil/narsil/src/ledger/consensus.rs b/crates/narsil/narsil/src/ledger/consensus.rs index 3858fd4651..dcc26cb68a 100644 --- a/crates/narsil/narsil/src/ledger/consensus.rs +++ b/crates/narsil/narsil/src/ledger/consensus.rs @@ -1,6 +1,6 @@ use anyhow::Result; -use penumbra_chain::genesis; +use penumbra_app::genesis; use penumbra_storage::Storage; use tendermint::abci::Event; use tendermint::v0_34::abci::{ diff --git a/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs index 096aa139a9..acdc66362e 100644 --- a/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.app.v1alpha1.rs @@ -54,20 +54,98 @@ pub struct PrefixValueResponse { #[prost(bytes = "vec", tag = "2")] pub value: ::prost::alloc::vec::Vec, } -/// Requests the global configuration data for the chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ChainParametersRequest { +pub struct AppParameters { + /// Chain module parameters. + #[prost(message, optional, tag = "1")] + pub chain_params: ::core::option::Option< + super::super::component::chain::v1alpha1::ChainParameters, + >, + /// DAO module parameters. + #[prost(message, optional, tag = "2")] + pub dao_params: ::core::option::Option< + super::super::component::dao::v1alpha1::DaoParameters, + >, + /// Governance module parameters. + #[prost(message, optional, tag = "3")] + pub governance_params: ::core::option::Option< + super::super::component::governance::v1alpha1::GovernanceParameters, + >, + /// IBC module parameters. + #[prost(message, optional, tag = "4")] + pub ibc_params: ::core::option::Option< + super::super::component::ibc::v1alpha1::IbcParameters, + >, + /// Stake module parameters. + #[prost(message, optional, tag = "5")] + pub stake_params: ::core::option::Option< + super::super::component::stake::v1alpha1::StakeParameters, + >, +} +/// Requests the global configuration data for the app. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct AppParametersRequest { /// The expected chain id (empty string if no expectation). #[prost(string, tag = "1")] pub chain_id: ::prost::alloc::string::String, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ChainParametersResponse { +pub struct AppParametersResponse { #[prost(message, optional, tag = "1")] - pub chain_parameters: ::core::option::Option< - super::super::component::chain::v1alpha1::ChainParameters, + pub app_parameters: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisAppState { + #[prost(oneof = "genesis_app_state::GenesisAppState", tags = "1, 2")] + pub genesis_app_state: ::core::option::Option, +} +/// Nested message and enum types in `GenesisAppState`. +pub mod genesis_app_state { + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum GenesisAppState { + #[prost(message, tag = "1")] + GenesisContent(super::GenesisContent), + #[prost(bytes, tag = "2")] + GenesisCheckpoint(::prost::alloc::vec::Vec), + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisContent { + /// Stake module genesis state. + #[prost(message, optional, tag = "1")] + pub stake_content: ::core::option::Option< + super::super::component::stake::v1alpha1::GenesisContent, + >, + /// Shielded pool module genesis state. + #[prost(message, optional, tag = "2")] + pub shielded_pool_content: ::core::option::Option< + super::super::component::shielded_pool::v1alpha1::GenesisContent, + >, + /// Governance module genesis state. + #[prost(message, optional, tag = "3")] + pub governance_content: ::core::option::Option< + super::super::component::governance::v1alpha1::GenesisContent, + >, + /// IBC module genesis state. + #[prost(message, optional, tag = "4")] + pub ibc_content: ::core::option::Option< + super::super::component::ibc::v1alpha1::GenesisContent, + >, + /// Chain module genesis state. + #[prost(message, optional, tag = "5")] + pub chain_content: ::core::option::Option< + super::super::component::chain::v1alpha1::GenesisContent, + >, + /// DAO module genesis state. + #[prost(message, optional, tag = "6")] + pub dao_content: ::core::option::Option< + super::super::component::dao::v1alpha1::GenesisContent, >, } /// Generated client implementations. @@ -141,11 +219,11 @@ pub mod query_service_client { self.inner = self.inner.accept_compressed(encoding); self } - /// Gets the chain parameters. - pub async fn chain_parameters( + /// Gets the app parameters. + pub async fn app_parameters( &mut self, - request: impl tonic::IntoRequest, - ) -> Result, tonic::Status> { + request: impl tonic::IntoRequest, + ) -> Result, tonic::Status> { self.inner .ready() .await @@ -157,7 +235,7 @@ pub mod query_service_client { })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( - "/penumbra.core.app.v1alpha1.QueryService/ChainParameters", + "/penumbra.core.app.v1alpha1.QueryService/AppParameters", ); self.inner.unary(request.into_request(), path, codec).await } @@ -217,11 +295,11 @@ pub mod query_service_server { /// Generated trait containing gRPC methods that should be implemented for use with QueryServiceServer. #[async_trait] pub trait QueryService: Send + Sync + 'static { - /// Gets the chain parameters. - async fn chain_parameters( + /// Gets the app parameters. + async fn app_parameters( &self, - request: tonic::Request, - ) -> Result, tonic::Status>; + request: tonic::Request, + ) -> Result, tonic::Status>; /// General-purpose key-value state query API, that can be used to query /// arbitrary keys in the JMT storage. async fn key_value( @@ -302,25 +380,25 @@ pub mod query_service_server { fn call(&mut self, req: http::Request) -> Self::Future { let inner = self.inner.clone(); match req.uri().path() { - "/penumbra.core.app.v1alpha1.QueryService/ChainParameters" => { + "/penumbra.core.app.v1alpha1.QueryService/AppParameters" => { #[allow(non_camel_case_types)] - struct ChainParametersSvc(pub Arc); + struct AppParametersSvc(pub Arc); impl< T: QueryService, - > tonic::server::UnaryService - for ChainParametersSvc { - type Response = super::ChainParametersResponse; + > tonic::server::UnaryService + for AppParametersSvc { + type Response = super::AppParametersResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, - request: tonic::Request, + request: tonic::Request, ) -> Self::Future { let inner = self.0.clone(); let fut = async move { - (*inner).chain_parameters(request).await + (*inner).app_parameters(request).await }; Box::pin(fut) } @@ -330,7 +408,7 @@ pub mod query_service_server { let inner = self.inner.clone(); let fut = async move { let inner = inner.0; - let method = ChainParametersSvc(inner); + let method = AppParametersSvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( diff --git a/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs index cd6ca44467..6beeed712d 100644 --- a/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.app.v1alpha1.serde.rs @@ -1,4 +1,168 @@ -impl serde::Serialize for ChainParametersRequest { +impl serde::Serialize for AppParameters { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.chain_params.is_some() { + len += 1; + } + if self.dao_params.is_some() { + len += 1; + } + if self.governance_params.is_some() { + len += 1; + } + if self.ibc_params.is_some() { + len += 1; + } + if self.stake_params.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.AppParameters", len)?; + if let Some(v) = self.chain_params.as_ref() { + struct_ser.serialize_field("chainParams", v)?; + } + if let Some(v) = self.dao_params.as_ref() { + struct_ser.serialize_field("daoParams", v)?; + } + if let Some(v) = self.governance_params.as_ref() { + struct_ser.serialize_field("governanceParams", v)?; + } + if let Some(v) = self.ibc_params.as_ref() { + struct_ser.serialize_field("ibcParams", v)?; + } + if let Some(v) = self.stake_params.as_ref() { + struct_ser.serialize_field("stakeParams", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for AppParameters { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "chain_params", + "chainParams", + "dao_params", + "daoParams", + "governance_params", + "governanceParams", + "ibc_params", + "ibcParams", + "stake_params", + "stakeParams", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + ChainParams, + DaoParams, + GovernanceParams, + IbcParams, + StakeParams, + } + 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 { + "chainParams" | "chain_params" => Ok(GeneratedField::ChainParams), + "daoParams" | "dao_params" => Ok(GeneratedField::DaoParams), + "governanceParams" | "governance_params" => Ok(GeneratedField::GovernanceParams), + "ibcParams" | "ibc_params" => Ok(GeneratedField::IbcParams), + "stakeParams" | "stake_params" => Ok(GeneratedField::StakeParams), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = AppParameters; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.app.v1alpha1.AppParameters") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut chain_params__ = None; + let mut dao_params__ = None; + let mut governance_params__ = None; + let mut ibc_params__ = None; + let mut stake_params__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::ChainParams => { + if chain_params__.is_some() { + return Err(serde::de::Error::duplicate_field("chainParams")); + } + chain_params__ = map.next_value()?; + } + GeneratedField::DaoParams => { + if dao_params__.is_some() { + return Err(serde::de::Error::duplicate_field("daoParams")); + } + dao_params__ = map.next_value()?; + } + GeneratedField::GovernanceParams => { + if governance_params__.is_some() { + return Err(serde::de::Error::duplicate_field("governanceParams")); + } + governance_params__ = map.next_value()?; + } + GeneratedField::IbcParams => { + if ibc_params__.is_some() { + return Err(serde::de::Error::duplicate_field("ibcParams")); + } + ibc_params__ = map.next_value()?; + } + GeneratedField::StakeParams => { + if stake_params__.is_some() { + return Err(serde::de::Error::duplicate_field("stakeParams")); + } + stake_params__ = map.next_value()?; + } + } + } + Ok(AppParameters { + chain_params: chain_params__, + dao_params: dao_params__, + governance_params: governance_params__, + ibc_params: ibc_params__, + stake_params: stake_params__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.app.v1alpha1.AppParameters", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for AppParametersRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -9,14 +173,14 @@ impl serde::Serialize for ChainParametersRequest { if !self.chain_id.is_empty() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.ChainParametersRequest", len)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.AppParametersRequest", len)?; if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for ChainParametersRequest { +impl<'de> serde::Deserialize<'de> for AppParametersRequest { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where @@ -61,13 +225,13 @@ impl<'de> serde::Deserialize<'de> for ChainParametersRequest { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ChainParametersRequest; + type Value = AppParametersRequest; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.app.v1alpha1.ChainParametersRequest") + formatter.write_str("struct penumbra.core.app.v1alpha1.AppParametersRequest") } - fn visit_map(self, mut map: V) -> std::result::Result + fn visit_map(self, mut map: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { @@ -82,15 +246,15 @@ impl<'de> serde::Deserialize<'de> for ChainParametersRequest { } } } - Ok(ChainParametersRequest { + Ok(AppParametersRequest { chain_id: chain_id__.unwrap_or_default(), }) } } - deserializer.deserialize_struct("penumbra.core.app.v1alpha1.ChainParametersRequest", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.app.v1alpha1.AppParametersRequest", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for ChainParametersResponse { +impl serde::Serialize for AppParametersResponse { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result where @@ -98,30 +262,30 @@ impl serde::Serialize for ChainParametersResponse { { use serde::ser::SerializeStruct; let mut len = 0; - if self.chain_parameters.is_some() { + if self.app_parameters.is_some() { len += 1; } - let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.ChainParametersResponse", len)?; - if let Some(v) = self.chain_parameters.as_ref() { - struct_ser.serialize_field("chainParameters", v)?; + let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.AppParametersResponse", len)?; + if let Some(v) = self.app_parameters.as_ref() { + struct_ser.serialize_field("appParameters", v)?; } struct_ser.end() } } -impl<'de> serde::Deserialize<'de> for ChainParametersResponse { +impl<'de> serde::Deserialize<'de> for AppParametersResponse { #[allow(deprecated)] fn deserialize(deserializer: D) -> std::result::Result where D: serde::Deserializer<'de>, { const FIELDS: &[&str] = &[ - "chain_parameters", - "chainParameters", + "app_parameters", + "appParameters", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { - ChainParameters, + AppParameters, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -143,7 +307,7 @@ impl<'de> serde::Deserialize<'de> for ChainParametersResponse { E: serde::de::Error, { match value { - "chainParameters" | "chain_parameters" => Ok(GeneratedField::ChainParameters), + "appParameters" | "app_parameters" => Ok(GeneratedField::AppParameters), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -153,33 +317,325 @@ impl<'de> serde::Deserialize<'de> for ChainParametersResponse { } struct GeneratedVisitor; impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ChainParametersResponse; + type Value = AppParametersResponse; fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.app.v1alpha1.ChainParametersResponse") + formatter.write_str("struct penumbra.core.app.v1alpha1.AppParametersResponse") } - fn visit_map(self, mut map: V) -> std::result::Result + fn visit_map(self, mut map: V) -> std::result::Result where V: serde::de::MapAccess<'de>, { - let mut chain_parameters__ = None; + let mut app_parameters__ = None; while let Some(k) = map.next_key()? { match k { - GeneratedField::ChainParameters => { - if chain_parameters__.is_some() { - return Err(serde::de::Error::duplicate_field("chainParameters")); + GeneratedField::AppParameters => { + if app_parameters__.is_some() { + return Err(serde::de::Error::duplicate_field("appParameters")); + } + app_parameters__ = map.next_value()?; + } + } + } + Ok(AppParametersResponse { + app_parameters: app_parameters__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.app.v1alpha1.AppParametersResponse", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GenesisAppState { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.genesis_app_state.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.GenesisAppState", len)?; + if let Some(v) = self.genesis_app_state.as_ref() { + match v { + genesis_app_state::GenesisAppState::GenesisContent(v) => { + struct_ser.serialize_field("genesisContent", v)?; + } + genesis_app_state::GenesisAppState::GenesisCheckpoint(v) => { + struct_ser.serialize_field("genesisCheckpoint", pbjson::private::base64::encode(&v).as_str())?; + } + } + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisAppState { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "genesis_content", + "genesisContent", + "genesis_checkpoint", + "genesisCheckpoint", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + GenesisContent, + GenesisCheckpoint, + } + 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 { + "genesisContent" | "genesis_content" => Ok(GeneratedField::GenesisContent), + "genesisCheckpoint" | "genesis_checkpoint" => Ok(GeneratedField::GenesisCheckpoint), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisAppState; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.app.v1alpha1.GenesisAppState") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut genesis_app_state__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::GenesisContent => { + if genesis_app_state__.is_some() { + return Err(serde::de::Error::duplicate_field("genesisContent")); + } + genesis_app_state__ = map.next_value::<::std::option::Option<_>>()?.map(genesis_app_state::GenesisAppState::GenesisContent) +; + } + GeneratedField::GenesisCheckpoint => { + if genesis_app_state__.is_some() { + return Err(serde::de::Error::duplicate_field("genesisCheckpoint")); + } + genesis_app_state__ = map.next_value::<::std::option::Option<::pbjson::private::BytesDeserialize<_>>>()?.map(|x| genesis_app_state::GenesisAppState::GenesisCheckpoint(x.0)); + } + } + } + Ok(GenesisAppState { + genesis_app_state: genesis_app_state__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.app.v1alpha1.GenesisAppState", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GenesisContent { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.stake_content.is_some() { + len += 1; + } + if self.shielded_pool_content.is_some() { + len += 1; + } + if self.governance_content.is_some() { + len += 1; + } + if self.ibc_content.is_some() { + len += 1; + } + if self.chain_content.is_some() { + len += 1; + } + if self.dao_content.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.app.v1alpha1.GenesisContent", len)?; + if let Some(v) = self.stake_content.as_ref() { + struct_ser.serialize_field("stakeContent", v)?; + } + if let Some(v) = self.shielded_pool_content.as_ref() { + struct_ser.serialize_field("shieldedPoolContent", v)?; + } + if let Some(v) = self.governance_content.as_ref() { + struct_ser.serialize_field("governanceContent", v)?; + } + if let Some(v) = self.ibc_content.as_ref() { + struct_ser.serialize_field("ibcContent", v)?; + } + if let Some(v) = self.chain_content.as_ref() { + struct_ser.serialize_field("chainContent", v)?; + } + if let Some(v) = self.dao_content.as_ref() { + struct_ser.serialize_field("daoContent", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisContent { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "stake_content", + "stakeContent", + "shielded_pool_content", + "shieldedPoolContent", + "governance_content", + "governanceContent", + "ibc_content", + "ibcContent", + "chain_content", + "chainContent", + "dao_content", + "daoContent", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + StakeContent, + ShieldedPoolContent, + GovernanceContent, + IbcContent, + ChainContent, + DaoContent, + } + 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 { + "stakeContent" | "stake_content" => Ok(GeneratedField::StakeContent), + "shieldedPoolContent" | "shielded_pool_content" => Ok(GeneratedField::ShieldedPoolContent), + "governanceContent" | "governance_content" => Ok(GeneratedField::GovernanceContent), + "ibcContent" | "ibc_content" => Ok(GeneratedField::IbcContent), + "chainContent" | "chain_content" => Ok(GeneratedField::ChainContent), + "daoContent" | "dao_content" => Ok(GeneratedField::DaoContent), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisContent; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.app.v1alpha1.GenesisContent") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut stake_content__ = None; + let mut shielded_pool_content__ = None; + let mut governance_content__ = None; + let mut ibc_content__ = None; + let mut chain_content__ = None; + let mut dao_content__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::StakeContent => { + if stake_content__.is_some() { + return Err(serde::de::Error::duplicate_field("stakeContent")); + } + stake_content__ = map.next_value()?; + } + GeneratedField::ShieldedPoolContent => { + if shielded_pool_content__.is_some() { + return Err(serde::de::Error::duplicate_field("shieldedPoolContent")); + } + shielded_pool_content__ = map.next_value()?; + } + GeneratedField::GovernanceContent => { + if governance_content__.is_some() { + return Err(serde::de::Error::duplicate_field("governanceContent")); + } + governance_content__ = map.next_value()?; + } + GeneratedField::IbcContent => { + if ibc_content__.is_some() { + return Err(serde::de::Error::duplicate_field("ibcContent")); + } + ibc_content__ = map.next_value()?; + } + GeneratedField::ChainContent => { + if chain_content__.is_some() { + return Err(serde::de::Error::duplicate_field("chainContent")); + } + chain_content__ = map.next_value()?; + } + GeneratedField::DaoContent => { + if dao_content__.is_some() { + return Err(serde::de::Error::duplicate_field("daoContent")); } - chain_parameters__ = map.next_value()?; + dao_content__ = map.next_value()?; } } } - Ok(ChainParametersResponse { - chain_parameters: chain_parameters__, + Ok(GenesisContent { + stake_content: stake_content__, + shielded_pool_content: shielded_pool_content__, + governance_content: governance_content__, + ibc_content: ibc_content__, + chain_content: chain_content__, + dao_content: dao_content__, }) } } - deserializer.deserialize_struct("penumbra.core.app.v1alpha1.ChainParametersResponse", FIELDS, GeneratedVisitor) + deserializer.deserialize_struct("penumbra.core.app.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) } } impl serde::Serialize for KeyValueRequest { diff --git a/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.rs index 815861c32a..05bf898046 100644 --- a/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.rs @@ -15,58 +15,6 @@ pub struct ChainParameters { /// The duration of each epoch, in number of blocks. #[prost(uint64, tag = "2")] pub epoch_duration: u64, - /// The number of epochs an unbonding note for before being released. - #[prost(uint64, tag = "3")] - pub unbonding_epochs: u64, - /// The maximum number of validators in the consensus set. - #[prost(uint64, tag = "4")] - pub active_validator_limit: u64, - /// The base reward rate, expressed in basis points of basis points - #[prost(uint64, tag = "9")] - pub base_reward_rate: u64, - /// The penalty for slashing due to misbehavior. - #[prost(uint64, tag = "5")] - pub slashing_penalty_misbehavior: u64, - /// The penalty for slashing due to downtime. - #[prost(uint64, tag = "10")] - pub slashing_penalty_downtime: u64, - /// The number of blocks in the window to check for downtime. - #[prost(uint64, tag = "11")] - pub signed_blocks_window_len: u64, - /// The maximum number of blocks in the window each validator can miss signing without slashing. - #[prost(uint64, tag = "12")] - pub missed_blocks_maximum: u64, - /// Whether IBC (forming connections, processing IBC packets) is enabled. - #[prost(bool, tag = "6")] - pub ibc_enabled: bool, - /// Whether inbound ICS-20 transfers are enabled - #[prost(bool, tag = "7")] - pub inbound_ics20_transfers_enabled: bool, - /// Whether outbound ICS-20 transfers are enabled - #[prost(bool, tag = "8")] - pub outbound_ics20_transfers_enabled: bool, - /// The number of blocks during which a proposal is voted on. - #[prost(uint64, tag = "20")] - pub proposal_voting_blocks: u64, - /// The deposit required to create a proposal. - #[prost(message, optional, tag = "21")] - pub proposal_deposit_amount: ::core::option::Option< - super::super::super::num::v1alpha1::Amount, - >, - /// The quorum required for a proposal to be considered valid, as a fraction of the total stake - /// weight of the network. - #[prost(string, tag = "22")] - pub proposal_valid_quorum: ::prost::alloc::string::String, - /// The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. - #[prost(string, tag = "23")] - pub proposal_pass_threshold: ::prost::alloc::string::String, - /// The threshold for a proposal to be slashed, regardless of whether the "yes" and "no" votes - /// would have passed it, as a ratio of "no" votes over all total votes. - #[prost(string, tag = "24")] - pub proposal_slash_threshold: ::prost::alloc::string::String, - /// Whether DAO spend proposals are enabled. - #[prost(bool, tag = "25")] - pub dao_spend_proposals_enabled: bool, } /// The ratio between two numbers, used in governance to describe vote thresholds and quorums. #[allow(clippy::derive_partial_eq_without_eq)] @@ -112,49 +60,13 @@ pub struct SpendInfo { #[prost(uint64, tag = "2")] pub spend_height: u64, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct GenesisAppState { - #[prost(oneof = "genesis_app_state::GenesisAppState", tags = "1, 2")] - pub genesis_app_state: ::core::option::Option, -} -/// Nested message and enum types in `GenesisAppState`. -pub mod genesis_app_state { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum GenesisAppState { - #[prost(message, tag = "1")] - GenesisContent(super::GenesisContent), - #[prost(bytes, tag = "2")] - GenesisCheckpoint(::prost::alloc::vec::Vec), - } -} +/// Chain-specific genesis content. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GenesisContent { + /// The ChainParameters present at genesis. #[prost(message, optional, tag = "1")] pub chain_params: ::core::option::Option, - #[prost(message, repeated, tag = "2")] - pub validators: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag = "3")] - pub allocations: ::prost::alloc::vec::Vec, -} -/// Nested message and enum types in `GenesisContent`. -pub mod genesis_content { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Message)] - pub struct Allocation { - #[prost(message, optional, tag = "1")] - pub amount: ::core::option::Option< - super::super::super::super::num::v1alpha1::Amount, - >, - #[prost(string, tag = "2")] - pub denom: ::prost::alloc::string::String, - #[prost(message, optional, tag = "3")] - pub address: ::core::option::Option< - super::super::super::super::keys::v1alpha1::Address, - >, - } } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.serde.rs index fe78da5ff5..3fc773e9e6 100644 --- a/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.chain.v1alpha1.serde.rs @@ -12,54 +12,6 @@ impl serde::Serialize for ChainParameters { if self.epoch_duration != 0 { len += 1; } - if self.unbonding_epochs != 0 { - len += 1; - } - if self.active_validator_limit != 0 { - len += 1; - } - if self.base_reward_rate != 0 { - len += 1; - } - if self.slashing_penalty_misbehavior != 0 { - len += 1; - } - if self.slashing_penalty_downtime != 0 { - len += 1; - } - if self.signed_blocks_window_len != 0 { - len += 1; - } - if self.missed_blocks_maximum != 0 { - len += 1; - } - if self.ibc_enabled { - len += 1; - } - if self.inbound_ics20_transfers_enabled { - len += 1; - } - if self.outbound_ics20_transfers_enabled { - len += 1; - } - if self.proposal_voting_blocks != 0 { - len += 1; - } - if self.proposal_deposit_amount.is_some() { - len += 1; - } - if !self.proposal_valid_quorum.is_empty() { - len += 1; - } - if !self.proposal_pass_threshold.is_empty() { - len += 1; - } - if !self.proposal_slash_threshold.is_empty() { - len += 1; - } - if self.dao_spend_proposals_enabled { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.core.component.chain.v1alpha1.ChainParameters", len)?; if !self.chain_id.is_empty() { struct_ser.serialize_field("chainId", &self.chain_id)?; @@ -67,54 +19,6 @@ impl serde::Serialize for ChainParameters { if self.epoch_duration != 0 { struct_ser.serialize_field("epochDuration", ToString::to_string(&self.epoch_duration).as_str())?; } - if self.unbonding_epochs != 0 { - struct_ser.serialize_field("unbondingEpochs", ToString::to_string(&self.unbonding_epochs).as_str())?; - } - if self.active_validator_limit != 0 { - struct_ser.serialize_field("activeValidatorLimit", ToString::to_string(&self.active_validator_limit).as_str())?; - } - if self.base_reward_rate != 0 { - struct_ser.serialize_field("baseRewardRate", ToString::to_string(&self.base_reward_rate).as_str())?; - } - if self.slashing_penalty_misbehavior != 0 { - struct_ser.serialize_field("slashingPenaltyMisbehavior", ToString::to_string(&self.slashing_penalty_misbehavior).as_str())?; - } - if self.slashing_penalty_downtime != 0 { - struct_ser.serialize_field("slashingPenaltyDowntime", ToString::to_string(&self.slashing_penalty_downtime).as_str())?; - } - if self.signed_blocks_window_len != 0 { - struct_ser.serialize_field("signedBlocksWindowLen", ToString::to_string(&self.signed_blocks_window_len).as_str())?; - } - if self.missed_blocks_maximum != 0 { - struct_ser.serialize_field("missedBlocksMaximum", ToString::to_string(&self.missed_blocks_maximum).as_str())?; - } - if self.ibc_enabled { - struct_ser.serialize_field("ibcEnabled", &self.ibc_enabled)?; - } - if self.inbound_ics20_transfers_enabled { - struct_ser.serialize_field("inboundIcs20TransfersEnabled", &self.inbound_ics20_transfers_enabled)?; - } - if self.outbound_ics20_transfers_enabled { - struct_ser.serialize_field("outboundIcs20TransfersEnabled", &self.outbound_ics20_transfers_enabled)?; - } - if self.proposal_voting_blocks != 0 { - struct_ser.serialize_field("proposalVotingBlocks", ToString::to_string(&self.proposal_voting_blocks).as_str())?; - } - if let Some(v) = self.proposal_deposit_amount.as_ref() { - struct_ser.serialize_field("proposalDepositAmount", v)?; - } - if !self.proposal_valid_quorum.is_empty() { - struct_ser.serialize_field("proposalValidQuorum", &self.proposal_valid_quorum)?; - } - if !self.proposal_pass_threshold.is_empty() { - struct_ser.serialize_field("proposalPassThreshold", &self.proposal_pass_threshold)?; - } - if !self.proposal_slash_threshold.is_empty() { - struct_ser.serialize_field("proposalSlashThreshold", &self.proposal_slash_threshold)?; - } - if self.dao_spend_proposals_enabled { - struct_ser.serialize_field("daoSpendProposalsEnabled", &self.dao_spend_proposals_enabled)?; - } struct_ser.end() } } @@ -129,60 +33,12 @@ impl<'de> serde::Deserialize<'de> for ChainParameters { "chainId", "epoch_duration", "epochDuration", - "unbonding_epochs", - "unbondingEpochs", - "active_validator_limit", - "activeValidatorLimit", - "base_reward_rate", - "baseRewardRate", - "slashing_penalty_misbehavior", - "slashingPenaltyMisbehavior", - "slashing_penalty_downtime", - "slashingPenaltyDowntime", - "signed_blocks_window_len", - "signedBlocksWindowLen", - "missed_blocks_maximum", - "missedBlocksMaximum", - "ibc_enabled", - "ibcEnabled", - "inbound_ics20_transfers_enabled", - "inboundIcs20TransfersEnabled", - "outbound_ics20_transfers_enabled", - "outboundIcs20TransfersEnabled", - "proposal_voting_blocks", - "proposalVotingBlocks", - "proposal_deposit_amount", - "proposalDepositAmount", - "proposal_valid_quorum", - "proposalValidQuorum", - "proposal_pass_threshold", - "proposalPassThreshold", - "proposal_slash_threshold", - "proposalSlashThreshold", - "dao_spend_proposals_enabled", - "daoSpendProposalsEnabled", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { ChainId, EpochDuration, - UnbondingEpochs, - ActiveValidatorLimit, - BaseRewardRate, - SlashingPenaltyMisbehavior, - SlashingPenaltyDowntime, - SignedBlocksWindowLen, - MissedBlocksMaximum, - IbcEnabled, - InboundIcs20TransfersEnabled, - OutboundIcs20TransfersEnabled, - ProposalVotingBlocks, - ProposalDepositAmount, - ProposalValidQuorum, - ProposalPassThreshold, - ProposalSlashThreshold, - DaoSpendProposalsEnabled, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -206,22 +62,6 @@ impl<'de> serde::Deserialize<'de> for ChainParameters { match value { "chainId" | "chain_id" => Ok(GeneratedField::ChainId), "epochDuration" | "epoch_duration" => Ok(GeneratedField::EpochDuration), - "unbondingEpochs" | "unbonding_epochs" => Ok(GeneratedField::UnbondingEpochs), - "activeValidatorLimit" | "active_validator_limit" => Ok(GeneratedField::ActiveValidatorLimit), - "baseRewardRate" | "base_reward_rate" => Ok(GeneratedField::BaseRewardRate), - "slashingPenaltyMisbehavior" | "slashing_penalty_misbehavior" => Ok(GeneratedField::SlashingPenaltyMisbehavior), - "slashingPenaltyDowntime" | "slashing_penalty_downtime" => Ok(GeneratedField::SlashingPenaltyDowntime), - "signedBlocksWindowLen" | "signed_blocks_window_len" => Ok(GeneratedField::SignedBlocksWindowLen), - "missedBlocksMaximum" | "missed_blocks_maximum" => Ok(GeneratedField::MissedBlocksMaximum), - "ibcEnabled" | "ibc_enabled" => Ok(GeneratedField::IbcEnabled), - "inboundIcs20TransfersEnabled" | "inbound_ics20_transfers_enabled" => Ok(GeneratedField::InboundIcs20TransfersEnabled), - "outboundIcs20TransfersEnabled" | "outbound_ics20_transfers_enabled" => Ok(GeneratedField::OutboundIcs20TransfersEnabled), - "proposalVotingBlocks" | "proposal_voting_blocks" => Ok(GeneratedField::ProposalVotingBlocks), - "proposalDepositAmount" | "proposal_deposit_amount" => Ok(GeneratedField::ProposalDepositAmount), - "proposalValidQuorum" | "proposal_valid_quorum" => Ok(GeneratedField::ProposalValidQuorum), - "proposalPassThreshold" | "proposal_pass_threshold" => Ok(GeneratedField::ProposalPassThreshold), - "proposalSlashThreshold" | "proposal_slash_threshold" => Ok(GeneratedField::ProposalSlashThreshold), - "daoSpendProposalsEnabled" | "dao_spend_proposals_enabled" => Ok(GeneratedField::DaoSpendProposalsEnabled), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -243,22 +83,6 @@ impl<'de> serde::Deserialize<'de> for ChainParameters { { let mut chain_id__ = None; let mut epoch_duration__ = None; - let mut unbonding_epochs__ = None; - let mut active_validator_limit__ = None; - let mut base_reward_rate__ = None; - let mut slashing_penalty_misbehavior__ = None; - let mut slashing_penalty_downtime__ = None; - let mut signed_blocks_window_len__ = None; - let mut missed_blocks_maximum__ = None; - let mut ibc_enabled__ = None; - let mut inbound_ics20_transfers_enabled__ = None; - let mut outbound_ics20_transfers_enabled__ = None; - let mut proposal_voting_blocks__ = None; - let mut proposal_deposit_amount__ = None; - let mut proposal_valid_quorum__ = None; - let mut proposal_pass_threshold__ = None; - let mut proposal_slash_threshold__ = None; - let mut dao_spend_proposals_enabled__ = None; while let Some(k) = map.next_key()? { match k { GeneratedField::ChainId => { @@ -275,139 +99,11 @@ impl<'de> serde::Deserialize<'de> for ChainParameters { Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) ; } - GeneratedField::UnbondingEpochs => { - if unbonding_epochs__.is_some() { - return Err(serde::de::Error::duplicate_field("unbondingEpochs")); - } - unbonding_epochs__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::ActiveValidatorLimit => { - if active_validator_limit__.is_some() { - return Err(serde::de::Error::duplicate_field("activeValidatorLimit")); - } - active_validator_limit__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::BaseRewardRate => { - if base_reward_rate__.is_some() { - return Err(serde::de::Error::duplicate_field("baseRewardRate")); - } - base_reward_rate__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::SlashingPenaltyMisbehavior => { - if slashing_penalty_misbehavior__.is_some() { - return Err(serde::de::Error::duplicate_field("slashingPenaltyMisbehavior")); - } - slashing_penalty_misbehavior__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::SlashingPenaltyDowntime => { - if slashing_penalty_downtime__.is_some() { - return Err(serde::de::Error::duplicate_field("slashingPenaltyDowntime")); - } - slashing_penalty_downtime__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::SignedBlocksWindowLen => { - if signed_blocks_window_len__.is_some() { - return Err(serde::de::Error::duplicate_field("signedBlocksWindowLen")); - } - signed_blocks_window_len__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::MissedBlocksMaximum => { - if missed_blocks_maximum__.is_some() { - return Err(serde::de::Error::duplicate_field("missedBlocksMaximum")); - } - missed_blocks_maximum__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::IbcEnabled => { - if ibc_enabled__.is_some() { - return Err(serde::de::Error::duplicate_field("ibcEnabled")); - } - ibc_enabled__ = Some(map.next_value()?); - } - GeneratedField::InboundIcs20TransfersEnabled => { - if inbound_ics20_transfers_enabled__.is_some() { - return Err(serde::de::Error::duplicate_field("inboundIcs20TransfersEnabled")); - } - inbound_ics20_transfers_enabled__ = Some(map.next_value()?); - } - GeneratedField::OutboundIcs20TransfersEnabled => { - if outbound_ics20_transfers_enabled__.is_some() { - return Err(serde::de::Error::duplicate_field("outboundIcs20TransfersEnabled")); - } - outbound_ics20_transfers_enabled__ = Some(map.next_value()?); - } - GeneratedField::ProposalVotingBlocks => { - if proposal_voting_blocks__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalVotingBlocks")); - } - proposal_voting_blocks__ = - Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) - ; - } - GeneratedField::ProposalDepositAmount => { - if proposal_deposit_amount__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalDepositAmount")); - } - proposal_deposit_amount__ = map.next_value()?; - } - GeneratedField::ProposalValidQuorum => { - if proposal_valid_quorum__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalValidQuorum")); - } - proposal_valid_quorum__ = Some(map.next_value()?); - } - GeneratedField::ProposalPassThreshold => { - if proposal_pass_threshold__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalPassThreshold")); - } - proposal_pass_threshold__ = Some(map.next_value()?); - } - GeneratedField::ProposalSlashThreshold => { - if proposal_slash_threshold__.is_some() { - return Err(serde::de::Error::duplicate_field("proposalSlashThreshold")); - } - proposal_slash_threshold__ = Some(map.next_value()?); - } - GeneratedField::DaoSpendProposalsEnabled => { - if dao_spend_proposals_enabled__.is_some() { - return Err(serde::de::Error::duplicate_field("daoSpendProposalsEnabled")); - } - dao_spend_proposals_enabled__ = Some(map.next_value()?); - } } } Ok(ChainParameters { chain_id: chain_id__.unwrap_or_default(), epoch_duration: epoch_duration__.unwrap_or_default(), - unbonding_epochs: unbonding_epochs__.unwrap_or_default(), - active_validator_limit: active_validator_limit__.unwrap_or_default(), - base_reward_rate: base_reward_rate__.unwrap_or_default(), - slashing_penalty_misbehavior: slashing_penalty_misbehavior__.unwrap_or_default(), - slashing_penalty_downtime: slashing_penalty_downtime__.unwrap_or_default(), - signed_blocks_window_len: signed_blocks_window_len__.unwrap_or_default(), - missed_blocks_maximum: missed_blocks_maximum__.unwrap_or_default(), - ibc_enabled: ibc_enabled__.unwrap_or_default(), - inbound_ics20_transfers_enabled: inbound_ics20_transfers_enabled__.unwrap_or_default(), - outbound_ics20_transfers_enabled: outbound_ics20_transfers_enabled__.unwrap_or_default(), - proposal_voting_blocks: proposal_voting_blocks__.unwrap_or_default(), - proposal_deposit_amount: proposal_deposit_amount__, - proposal_valid_quorum: proposal_valid_quorum__.unwrap_or_default(), - proposal_pass_threshold: proposal_pass_threshold__.unwrap_or_default(), - proposal_slash_threshold: proposal_slash_threshold__.unwrap_or_default(), - dao_spend_proposals_enabled: dao_spend_proposals_enabled__.unwrap_or_default(), }) } } @@ -918,116 +614,6 @@ impl<'de> serde::Deserialize<'de> for FmdParameters { deserializer.deserialize_struct("penumbra.core.component.chain.v1alpha1.FmdParameters", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for GenesisAppState { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if self.genesis_app_state.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.chain.v1alpha1.GenesisAppState", len)?; - if let Some(v) = self.genesis_app_state.as_ref() { - match v { - genesis_app_state::GenesisAppState::GenesisContent(v) => { - struct_ser.serialize_field("genesisContent", v)?; - } - genesis_app_state::GenesisAppState::GenesisCheckpoint(v) => { - struct_ser.serialize_field("genesisCheckpoint", pbjson::private::base64::encode(&v).as_str())?; - } - } - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for GenesisAppState { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "genesis_content", - "genesisContent", - "genesis_checkpoint", - "genesisCheckpoint", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - GenesisContent, - GenesisCheckpoint, - } - 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 { - "genesisContent" | "genesis_content" => Ok(GeneratedField::GenesisContent), - "genesisCheckpoint" | "genesis_checkpoint" => Ok(GeneratedField::GenesisCheckpoint), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = GenesisAppState; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.chain.v1alpha1.GenesisAppState") - } - - fn visit_map(self, mut map: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut genesis_app_state__ = None; - while let Some(k) = map.next_key()? { - match k { - GeneratedField::GenesisContent => { - if genesis_app_state__.is_some() { - return Err(serde::de::Error::duplicate_field("genesisContent")); - } - genesis_app_state__ = map.next_value::<::std::option::Option<_>>()?.map(genesis_app_state::GenesisAppState::GenesisContent) -; - } - GeneratedField::GenesisCheckpoint => { - if genesis_app_state__.is_some() { - return Err(serde::de::Error::duplicate_field("genesisCheckpoint")); - } - genesis_app_state__ = map.next_value::<::std::option::Option<::pbjson::private::BytesDeserialize<_>>>()?.map(|x| genesis_app_state::GenesisAppState::GenesisCheckpoint(x.0)); - } - } - } - Ok(GenesisAppState { - genesis_app_state: genesis_app_state__, - }) - } - } - deserializer.deserialize_struct("penumbra.core.component.chain.v1alpha1.GenesisAppState", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for GenesisContent { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -1039,22 +625,10 @@ impl serde::Serialize for GenesisContent { if self.chain_params.is_some() { len += 1; } - if !self.validators.is_empty() { - len += 1; - } - if !self.allocations.is_empty() { - len += 1; - } let mut struct_ser = serializer.serialize_struct("penumbra.core.component.chain.v1alpha1.GenesisContent", len)?; if let Some(v) = self.chain_params.as_ref() { struct_ser.serialize_field("chainParams", v)?; } - if !self.validators.is_empty() { - struct_ser.serialize_field("validators", &self.validators)?; - } - if !self.allocations.is_empty() { - struct_ser.serialize_field("allocations", &self.allocations)?; - } struct_ser.end() } } @@ -1067,15 +641,11 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { const FIELDS: &[&str] = &[ "chain_params", "chainParams", - "validators", - "allocations", ]; #[allow(clippy::enum_variant_names)] enum GeneratedField { ChainParams, - Validators, - Allocations, } impl<'de> serde::Deserialize<'de> for GeneratedField { fn deserialize(deserializer: D) -> std::result::Result @@ -1098,8 +668,6 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { { match value { "chainParams" | "chain_params" => Ok(GeneratedField::ChainParams), - "validators" => Ok(GeneratedField::Validators), - "allocations" => Ok(GeneratedField::Allocations), _ => Err(serde::de::Error::unknown_field(value, FIELDS)), } } @@ -1120,8 +688,6 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { V: serde::de::MapAccess<'de>, { let mut chain_params__ = None; - let mut validators__ = None; - let mut allocations__ = None; while let Some(k) = map.next_key()? { match k { GeneratedField::ChainParams => { @@ -1130,155 +696,16 @@ impl<'de> serde::Deserialize<'de> for GenesisContent { } chain_params__ = map.next_value()?; } - GeneratedField::Validators => { - if validators__.is_some() { - return Err(serde::de::Error::duplicate_field("validators")); - } - validators__ = Some(map.next_value()?); - } - GeneratedField::Allocations => { - if allocations__.is_some() { - return Err(serde::de::Error::duplicate_field("allocations")); - } - allocations__ = Some(map.next_value()?); - } } } Ok(GenesisContent { chain_params: chain_params__, - validators: validators__.unwrap_or_default(), - allocations: allocations__.unwrap_or_default(), }) } } deserializer.deserialize_struct("penumbra.core.component.chain.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for genesis_content::Allocation { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if self.amount.is_some() { - len += 1; - } - if !self.denom.is_empty() { - len += 1; - } - if self.address.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation", len)?; - if let Some(v) = self.amount.as_ref() { - struct_ser.serialize_field("amount", v)?; - } - if !self.denom.is_empty() { - struct_ser.serialize_field("denom", &self.denom)?; - } - if let Some(v) = self.address.as_ref() { - struct_ser.serialize_field("address", v)?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for genesis_content::Allocation { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "amount", - "denom", - "address", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Amount, - Denom, - Address, - } - 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 { - "amount" => Ok(GeneratedField::Amount), - "denom" => Ok(GeneratedField::Denom), - "address" => Ok(GeneratedField::Address), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = genesis_content::Allocation; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation") - } - - fn visit_map(self, mut map: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut amount__ = None; - let mut denom__ = None; - let mut address__ = None; - while let Some(k) = map.next_key()? { - match k { - GeneratedField::Amount => { - if amount__.is_some() { - return Err(serde::de::Error::duplicate_field("amount")); - } - amount__ = map.next_value()?; - } - GeneratedField::Denom => { - if denom__.is_some() { - return Err(serde::de::Error::duplicate_field("denom")); - } - denom__ = Some(map.next_value()?); - } - GeneratedField::Address => { - if address__.is_some() { - return Err(serde::de::Error::duplicate_field("address")); - } - address__ = map.next_value()?; - } - } - } - Ok(genesis_content::Allocation { - amount: amount__, - denom: denom__.unwrap_or_default(), - address: address__, - }) - } - } - deserializer.deserialize_struct("penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for KnownAssets { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.rs new file mode 100644 index 0000000000..f8f0e2e3a5 --- /dev/null +++ b/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.rs @@ -0,0 +1,16 @@ +/// Dao parameter data. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DaoParameters { + /// Whether DAO spend proposals are enabled. + #[prost(bool, tag = "1")] + pub dao_spend_proposals_enabled: bool, +} +/// Dao genesis state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisContent { + /// Dao parameters. + #[prost(message, optional, tag = "1")] + pub dao_params: ::core::option::Option, +} diff --git a/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.serde.rs new file mode 100644 index 0000000000..acd6a5a999 --- /dev/null +++ b/crates/proto/src/gen/penumbra.core.component.dao.v1alpha1.serde.rs @@ -0,0 +1,184 @@ +impl serde::Serialize for DaoParameters { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.dao_spend_proposals_enabled { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dao.v1alpha1.DaoParameters", len)?; + if self.dao_spend_proposals_enabled { + struct_ser.serialize_field("daoSpendProposalsEnabled", &self.dao_spend_proposals_enabled)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for DaoParameters { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "dao_spend_proposals_enabled", + "daoSpendProposalsEnabled", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + DaoSpendProposalsEnabled, + } + 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 { + "daoSpendProposalsEnabled" | "dao_spend_proposals_enabled" => Ok(GeneratedField::DaoSpendProposalsEnabled), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = DaoParameters; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.dao.v1alpha1.DaoParameters") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut dao_spend_proposals_enabled__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::DaoSpendProposalsEnabled => { + if dao_spend_proposals_enabled__.is_some() { + return Err(serde::de::Error::duplicate_field("daoSpendProposalsEnabled")); + } + dao_spend_proposals_enabled__ = Some(map.next_value()?); + } + } + } + Ok(DaoParameters { + dao_spend_proposals_enabled: dao_spend_proposals_enabled__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.dao.v1alpha1.DaoParameters", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GenesisContent { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.dao_params.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.dao.v1alpha1.GenesisContent", len)?; + if let Some(v) = self.dao_params.as_ref() { + struct_ser.serialize_field("daoParams", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisContent { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "dao_params", + "daoParams", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + DaoParams, + } + 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 { + "daoParams" | "dao_params" => Ok(GeneratedField::DaoParams), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisContent; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.dao.v1alpha1.GenesisContent") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut dao_params__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::DaoParams => { + if dao_params__.is_some() { + return Err(serde::de::Error::duplicate_field("daoParams")); + } + dao_params__ = map.next_value()?; + } + } + } + Ok(GenesisContent { + dao_params: dao_params__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.dao.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) + } +} diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs index f198ceadfd..ba0b49f240 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.rs @@ -500,6 +500,38 @@ pub struct ProposalRateDataResponse { #[prost(message, optional, tag = "1")] pub rate_data: ::core::option::Option, } +/// Governance configuration data. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GovernanceParameters { + /// The number of blocks during which a proposal is voted on. + #[prost(uint64, tag = "1")] + pub proposal_voting_blocks: u64, + /// The deposit required to create a proposal. + #[prost(message, optional, tag = "2")] + pub proposal_deposit_amount: ::core::option::Option< + super::super::super::num::v1alpha1::Amount, + >, + /// The quorum required for a proposal to be considered valid, as a fraction of the total stake + /// weight of the network. + #[prost(string, tag = "3")] + pub proposal_valid_quorum: ::prost::alloc::string::String, + /// The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. + #[prost(string, tag = "4")] + pub proposal_pass_threshold: ::prost::alloc::string::String, + /// The threshold for a proposal to be slashed, regardless of whether the "yes" and "no" votes + /// would have passed it, as a ratio of "no" votes over all total votes. + #[prost(string, tag = "5")] + pub proposal_slash_threshold: ::prost::alloc::string::String, +} +/// Governance genesis state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisContent { + /// Governance parameters. + #[prost(message, optional, tag = "1")] + pub governance_params: ::core::option::Option, +} /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { diff --git a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs index 51837a955f..c3ec3f29df 100644 --- a/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.governance.v1alpha1.serde.rs @@ -1172,6 +1172,264 @@ impl<'de> serde::Deserialize<'de> for delegator_vote_view::Visible { deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for GenesisContent { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.governance_params.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.GenesisContent", len)?; + if let Some(v) = self.governance_params.as_ref() { + struct_ser.serialize_field("governanceParams", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisContent { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "governance_params", + "governanceParams", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + GovernanceParams, + } + 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 { + "governanceParams" | "governance_params" => Ok(GeneratedField::GovernanceParams), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisContent; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.governance.v1alpha1.GenesisContent") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut governance_params__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::GovernanceParams => { + if governance_params__.is_some() { + return Err(serde::de::Error::duplicate_field("governanceParams")); + } + governance_params__ = map.next_value()?; + } + } + } + Ok(GenesisContent { + governance_params: governance_params__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for GovernanceParameters { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.proposal_voting_blocks != 0 { + len += 1; + } + if self.proposal_deposit_amount.is_some() { + len += 1; + } + if !self.proposal_valid_quorum.is_empty() { + len += 1; + } + if !self.proposal_pass_threshold.is_empty() { + len += 1; + } + if !self.proposal_slash_threshold.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.governance.v1alpha1.GovernanceParameters", len)?; + if self.proposal_voting_blocks != 0 { + struct_ser.serialize_field("proposalVotingBlocks", ToString::to_string(&self.proposal_voting_blocks).as_str())?; + } + if let Some(v) = self.proposal_deposit_amount.as_ref() { + struct_ser.serialize_field("proposalDepositAmount", v)?; + } + if !self.proposal_valid_quorum.is_empty() { + struct_ser.serialize_field("proposalValidQuorum", &self.proposal_valid_quorum)?; + } + if !self.proposal_pass_threshold.is_empty() { + struct_ser.serialize_field("proposalPassThreshold", &self.proposal_pass_threshold)?; + } + if !self.proposal_slash_threshold.is_empty() { + struct_ser.serialize_field("proposalSlashThreshold", &self.proposal_slash_threshold)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GovernanceParameters { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "proposal_voting_blocks", + "proposalVotingBlocks", + "proposal_deposit_amount", + "proposalDepositAmount", + "proposal_valid_quorum", + "proposalValidQuorum", + "proposal_pass_threshold", + "proposalPassThreshold", + "proposal_slash_threshold", + "proposalSlashThreshold", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + ProposalVotingBlocks, + ProposalDepositAmount, + ProposalValidQuorum, + ProposalPassThreshold, + ProposalSlashThreshold, + } + 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 { + "proposalVotingBlocks" | "proposal_voting_blocks" => Ok(GeneratedField::ProposalVotingBlocks), + "proposalDepositAmount" | "proposal_deposit_amount" => Ok(GeneratedField::ProposalDepositAmount), + "proposalValidQuorum" | "proposal_valid_quorum" => Ok(GeneratedField::ProposalValidQuorum), + "proposalPassThreshold" | "proposal_pass_threshold" => Ok(GeneratedField::ProposalPassThreshold), + "proposalSlashThreshold" | "proposal_slash_threshold" => Ok(GeneratedField::ProposalSlashThreshold), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GovernanceParameters; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.governance.v1alpha1.GovernanceParameters") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut proposal_voting_blocks__ = None; + let mut proposal_deposit_amount__ = None; + let mut proposal_valid_quorum__ = None; + let mut proposal_pass_threshold__ = None; + let mut proposal_slash_threshold__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::ProposalVotingBlocks => { + if proposal_voting_blocks__.is_some() { + return Err(serde::de::Error::duplicate_field("proposalVotingBlocks")); + } + proposal_voting_blocks__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::ProposalDepositAmount => { + if proposal_deposit_amount__.is_some() { + return Err(serde::de::Error::duplicate_field("proposalDepositAmount")); + } + proposal_deposit_amount__ = map.next_value()?; + } + GeneratedField::ProposalValidQuorum => { + if proposal_valid_quorum__.is_some() { + return Err(serde::de::Error::duplicate_field("proposalValidQuorum")); + } + proposal_valid_quorum__ = Some(map.next_value()?); + } + GeneratedField::ProposalPassThreshold => { + if proposal_pass_threshold__.is_some() { + return Err(serde::de::Error::duplicate_field("proposalPassThreshold")); + } + proposal_pass_threshold__ = Some(map.next_value()?); + } + GeneratedField::ProposalSlashThreshold => { + if proposal_slash_threshold__.is_some() { + return Err(serde::de::Error::duplicate_field("proposalSlashThreshold")); + } + proposal_slash_threshold__ = Some(map.next_value()?); + } + } + } + Ok(GovernanceParameters { + proposal_voting_blocks: proposal_voting_blocks__.unwrap_or_default(), + proposal_deposit_amount: proposal_deposit_amount__, + proposal_valid_quorum: proposal_valid_quorum__.unwrap_or_default(), + proposal_pass_threshold: proposal_pass_threshold__.unwrap_or_default(), + proposal_slash_threshold: proposal_slash_threshold__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.governance.v1alpha1.GovernanceParameters", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for Proposal { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.rs index 514a2862e6..3715a77861 100644 --- a/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.rs @@ -96,3 +96,25 @@ pub struct ClientConnections { #[prost(string, repeated, tag = "1")] pub connections: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } +/// IBC configuration data. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct IbcParameters { + /// Whether IBC (forming connections, processing IBC packets) is enabled. + #[prost(bool, tag = "1")] + pub ibc_enabled: bool, + /// Whether inbound ICS-20 transfers are enabled + #[prost(bool, tag = "2")] + pub inbound_ics20_transfers_enabled: bool, + /// Whether outbound ICS-20 transfers are enabled + #[prost(bool, tag = "3")] + pub outbound_ics20_transfers_enabled: bool, +} +/// IBC genesis state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisContent { + /// IBC parameters. + #[prost(message, optional, tag = "1")] + pub ibc_params: ::core::option::Option, +} diff --git a/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.serde.rs index f900ba364b..90decca364 100644 --- a/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.ibc.v1alpha1.serde.rs @@ -657,6 +657,98 @@ impl<'de> serde::Deserialize<'de> for FungibleTokenPacketData { deserializer.deserialize_struct("penumbra.core.component.ibc.v1alpha1.FungibleTokenPacketData", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for GenesisContent { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.ibc_params.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.ibc.v1alpha1.GenesisContent", len)?; + if let Some(v) = self.ibc_params.as_ref() { + struct_ser.serialize_field("ibcParams", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisContent { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "ibc_params", + "ibcParams", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + IbcParams, + } + 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 { + "ibcParams" | "ibc_params" => Ok(GeneratedField::IbcParams), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisContent; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.ibc.v1alpha1.GenesisContent") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut ibc_params__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::IbcParams => { + if ibc_params__.is_some() { + return Err(serde::de::Error::duplicate_field("ibcParams")); + } + ibc_params__ = map.next_value()?; + } + } + } + Ok(GenesisContent { + ibc_params: ibc_params__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.ibc.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for IbcAction { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -749,6 +841,134 @@ impl<'de> serde::Deserialize<'de> for IbcAction { deserializer.deserialize_struct("penumbra.core.component.ibc.v1alpha1.IbcAction", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for IbcParameters { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.ibc_enabled { + len += 1; + } + if self.inbound_ics20_transfers_enabled { + len += 1; + } + if self.outbound_ics20_transfers_enabled { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.ibc.v1alpha1.IbcParameters", len)?; + if self.ibc_enabled { + struct_ser.serialize_field("ibcEnabled", &self.ibc_enabled)?; + } + if self.inbound_ics20_transfers_enabled { + struct_ser.serialize_field("inboundIcs20TransfersEnabled", &self.inbound_ics20_transfers_enabled)?; + } + if self.outbound_ics20_transfers_enabled { + struct_ser.serialize_field("outboundIcs20TransfersEnabled", &self.outbound_ics20_transfers_enabled)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for IbcParameters { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "ibc_enabled", + "ibcEnabled", + "inbound_ics20_transfers_enabled", + "inboundIcs20TransfersEnabled", + "outbound_ics20_transfers_enabled", + "outboundIcs20TransfersEnabled", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + IbcEnabled, + InboundIcs20TransfersEnabled, + OutboundIcs20TransfersEnabled, + } + 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 { + "ibcEnabled" | "ibc_enabled" => Ok(GeneratedField::IbcEnabled), + "inboundIcs20TransfersEnabled" | "inbound_ics20_transfers_enabled" => Ok(GeneratedField::InboundIcs20TransfersEnabled), + "outboundIcs20TransfersEnabled" | "outbound_ics20_transfers_enabled" => Ok(GeneratedField::OutboundIcs20TransfersEnabled), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = IbcParameters; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.ibc.v1alpha1.IbcParameters") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut ibc_enabled__ = None; + let mut inbound_ics20_transfers_enabled__ = None; + let mut outbound_ics20_transfers_enabled__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::IbcEnabled => { + if ibc_enabled__.is_some() { + return Err(serde::de::Error::duplicate_field("ibcEnabled")); + } + ibc_enabled__ = Some(map.next_value()?); + } + GeneratedField::InboundIcs20TransfersEnabled => { + if inbound_ics20_transfers_enabled__.is_some() { + return Err(serde::de::Error::duplicate_field("inboundIcs20TransfersEnabled")); + } + inbound_ics20_transfers_enabled__ = Some(map.next_value()?); + } + GeneratedField::OutboundIcs20TransfersEnabled => { + if outbound_ics20_transfers_enabled__.is_some() { + return Err(serde::de::Error::duplicate_field("outboundIcs20TransfersEnabled")); + } + outbound_ics20_transfers_enabled__ = Some(map.next_value()?); + } + } + } + Ok(IbcParameters { + ibc_enabled: ibc_enabled__.unwrap_or_default(), + inbound_ics20_transfers_enabled: inbound_ics20_transfers_enabled__.unwrap_or_default(), + outbound_ics20_transfers_enabled: outbound_ics20_transfers_enabled__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.ibc.v1alpha1.IbcParameters", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for Ics20Withdrawal { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs index 65b33bae00..f199f068ea 100644 --- a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.rs @@ -268,6 +268,31 @@ pub struct DenomMetadataByIdResponse { super::super::super::asset::v1alpha1::DenomMetadata, >, } +/// Genesis data for the shielded pool component. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisContent { + /// The allocations present at genesis + #[prost(message, repeated, tag = "2")] + pub allocations: ::prost::alloc::vec::Vec, +} +/// Nested message and enum types in `GenesisContent`. +pub mod genesis_content { + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Message)] + pub struct Allocation { + #[prost(message, optional, tag = "1")] + pub amount: ::core::option::Option< + super::super::super::super::num::v1alpha1::Amount, + >, + #[prost(string, tag = "2")] + pub denom: ::prost::alloc::string::String, + #[prost(message, optional, tag = "3")] + pub address: ::core::option::Option< + super::super::super::super::keys::v1alpha1::Address, + >, + } +} /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { diff --git a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs index f363d7fcdc..9f9f190a71 100644 --- a/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.shielded_pool.v1alpha1.serde.rs @@ -200,6 +200,222 @@ impl<'de> serde::Deserialize<'de> for DenomMetadataByIdResponse { deserializer.deserialize_struct("penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for GenesisContent { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if !self.allocations.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.shielded_pool.v1alpha1.GenesisContent", len)?; + if !self.allocations.is_empty() { + struct_ser.serialize_field("allocations", &self.allocations)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisContent { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "allocations", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Allocations, + } + 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 { + "allocations" => Ok(GeneratedField::Allocations), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisContent; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.shielded_pool.v1alpha1.GenesisContent") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut allocations__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::Allocations => { + if allocations__.is_some() { + return Err(serde::de::Error::duplicate_field("allocations")); + } + allocations__ = Some(map.next_value()?); + } + } + } + Ok(GenesisContent { + allocations: allocations__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.shielded_pool.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for genesis_content::Allocation { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.amount.is_some() { + len += 1; + } + if !self.denom.is_empty() { + len += 1; + } + if self.address.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation", len)?; + if let Some(v) = self.amount.as_ref() { + struct_ser.serialize_field("amount", v)?; + } + if !self.denom.is_empty() { + struct_ser.serialize_field("denom", &self.denom)?; + } + if let Some(v) = self.address.as_ref() { + struct_ser.serialize_field("address", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for genesis_content::Allocation { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "amount", + "denom", + "address", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Amount, + Denom, + Address, + } + 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 { + "amount" => Ok(GeneratedField::Amount), + "denom" => Ok(GeneratedField::Denom), + "address" => Ok(GeneratedField::Address), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = genesis_content::Allocation; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut amount__ = None; + let mut denom__ = None; + let mut address__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::Amount => { + if amount__.is_some() { + return Err(serde::de::Error::duplicate_field("amount")); + } + amount__ = map.next_value()?; + } + GeneratedField::Denom => { + if denom__.is_some() { + return Err(serde::de::Error::duplicate_field("denom")); + } + denom__ = Some(map.next_value()?); + } + GeneratedField::Address => { + if address__.is_some() { + return Err(serde::de::Error::duplicate_field("address")); + } + address__ = map.next_value()?; + } + } + } + Ok(genesis_content::Allocation { + amount: amount__, + denom: denom__.unwrap_or_default(), + address: address__, + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for Note { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs index a1266c0111..6c911d2db6 100644 --- a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.rs @@ -513,6 +513,43 @@ pub struct NextValidatorRateResponse { #[prost(message, optional, tag = "1")] pub data: ::core::option::Option, } +/// Staking configuration data. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct StakeParameters { + /// The number of epochs an unbonding note for before being released. + #[prost(uint64, tag = "1")] + pub unbonding_epochs: u64, + /// The maximum number of validators in the consensus set. + #[prost(uint64, tag = "2")] + pub active_validator_limit: u64, + /// The base reward rate, expressed in basis points of basis points + #[prost(uint64, tag = "3")] + pub base_reward_rate: u64, + /// The penalty for slashing due to misbehavior. + #[prost(uint64, tag = "4")] + pub slashing_penalty_misbehavior: u64, + /// The penalty for slashing due to downtime. + #[prost(uint64, tag = "5")] + pub slashing_penalty_downtime: u64, + /// The number of blocks in the window to check for downtime. + #[prost(uint64, tag = "6")] + pub signed_blocks_window_len: u64, + /// The maximum number of blocks in the window each validator can miss signing without slashing. + #[prost(uint64, tag = "7")] + pub missed_blocks_maximum: u64, +} +/// Genesis data for the staking component. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenesisContent { + /// The configuration parameters for the staking component present at genesis + #[prost(message, optional, tag = "1")] + pub stake_params: ::core::option::Option, + /// The list of validators present at genesis. + #[prost(message, repeated, tag = "2")] + pub validators: ::prost::alloc::vec::Vec, +} /// Generated client implementations. #[cfg(feature = "rpc")] pub mod query_service_client { diff --git a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs index 25d96c32f8..96c3c010cd 100644 --- a/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.core.component.stake.v1alpha1.serde.rs @@ -1189,6 +1189,115 @@ impl<'de> serde::Deserialize<'de> for funding_stream::ToDao { deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.FundingStream.ToDao", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for GenesisContent { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.stake_params.is_some() { + len += 1; + } + if !self.validators.is_empty() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.stake.v1alpha1.GenesisContent", len)?; + if let Some(v) = self.stake_params.as_ref() { + struct_ser.serialize_field("stakeParams", v)?; + } + if !self.validators.is_empty() { + struct_ser.serialize_field("validators", &self.validators)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for GenesisContent { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "stake_params", + "stakeParams", + "validators", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + StakeParams, + Validators, + } + 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 { + "stakeParams" | "stake_params" => Ok(GeneratedField::StakeParams), + "validators" => Ok(GeneratedField::Validators), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = GenesisContent; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.stake.v1alpha1.GenesisContent") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut stake_params__ = None; + let mut validators__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::StakeParams => { + if stake_params__.is_some() { + return Err(serde::de::Error::duplicate_field("stakeParams")); + } + stake_params__ = map.next_value()?; + } + GeneratedField::Validators => { + if validators__.is_some() { + return Err(serde::de::Error::duplicate_field("validators")); + } + validators__ = Some(map.next_value()?); + } + } + } + Ok(GenesisContent { + stake_params: stake_params__, + validators: validators__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.GenesisContent", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for NextValidatorRateRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -1635,6 +1744,220 @@ impl<'de> serde::Deserialize<'de> for RateData { deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.RateData", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for StakeParameters { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.unbonding_epochs != 0 { + len += 1; + } + if self.active_validator_limit != 0 { + len += 1; + } + if self.base_reward_rate != 0 { + len += 1; + } + if self.slashing_penalty_misbehavior != 0 { + len += 1; + } + if self.slashing_penalty_downtime != 0 { + len += 1; + } + if self.signed_blocks_window_len != 0 { + len += 1; + } + if self.missed_blocks_maximum != 0 { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.core.component.stake.v1alpha1.StakeParameters", len)?; + if self.unbonding_epochs != 0 { + struct_ser.serialize_field("unbondingEpochs", ToString::to_string(&self.unbonding_epochs).as_str())?; + } + if self.active_validator_limit != 0 { + struct_ser.serialize_field("activeValidatorLimit", ToString::to_string(&self.active_validator_limit).as_str())?; + } + if self.base_reward_rate != 0 { + struct_ser.serialize_field("baseRewardRate", ToString::to_string(&self.base_reward_rate).as_str())?; + } + if self.slashing_penalty_misbehavior != 0 { + struct_ser.serialize_field("slashingPenaltyMisbehavior", ToString::to_string(&self.slashing_penalty_misbehavior).as_str())?; + } + if self.slashing_penalty_downtime != 0 { + struct_ser.serialize_field("slashingPenaltyDowntime", ToString::to_string(&self.slashing_penalty_downtime).as_str())?; + } + if self.signed_blocks_window_len != 0 { + struct_ser.serialize_field("signedBlocksWindowLen", ToString::to_string(&self.signed_blocks_window_len).as_str())?; + } + if self.missed_blocks_maximum != 0 { + struct_ser.serialize_field("missedBlocksMaximum", ToString::to_string(&self.missed_blocks_maximum).as_str())?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for StakeParameters { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "unbonding_epochs", + "unbondingEpochs", + "active_validator_limit", + "activeValidatorLimit", + "base_reward_rate", + "baseRewardRate", + "slashing_penalty_misbehavior", + "slashingPenaltyMisbehavior", + "slashing_penalty_downtime", + "slashingPenaltyDowntime", + "signed_blocks_window_len", + "signedBlocksWindowLen", + "missed_blocks_maximum", + "missedBlocksMaximum", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + UnbondingEpochs, + ActiveValidatorLimit, + BaseRewardRate, + SlashingPenaltyMisbehavior, + SlashingPenaltyDowntime, + SignedBlocksWindowLen, + MissedBlocksMaximum, + } + 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 { + "unbondingEpochs" | "unbonding_epochs" => Ok(GeneratedField::UnbondingEpochs), + "activeValidatorLimit" | "active_validator_limit" => Ok(GeneratedField::ActiveValidatorLimit), + "baseRewardRate" | "base_reward_rate" => Ok(GeneratedField::BaseRewardRate), + "slashingPenaltyMisbehavior" | "slashing_penalty_misbehavior" => Ok(GeneratedField::SlashingPenaltyMisbehavior), + "slashingPenaltyDowntime" | "slashing_penalty_downtime" => Ok(GeneratedField::SlashingPenaltyDowntime), + "signedBlocksWindowLen" | "signed_blocks_window_len" => Ok(GeneratedField::SignedBlocksWindowLen), + "missedBlocksMaximum" | "missed_blocks_maximum" => Ok(GeneratedField::MissedBlocksMaximum), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = StakeParameters; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.core.component.stake.v1alpha1.StakeParameters") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut unbonding_epochs__ = None; + let mut active_validator_limit__ = None; + let mut base_reward_rate__ = None; + let mut slashing_penalty_misbehavior__ = None; + let mut slashing_penalty_downtime__ = None; + let mut signed_blocks_window_len__ = None; + let mut missed_blocks_maximum__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::UnbondingEpochs => { + if unbonding_epochs__.is_some() { + return Err(serde::de::Error::duplicate_field("unbondingEpochs")); + } + unbonding_epochs__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::ActiveValidatorLimit => { + if active_validator_limit__.is_some() { + return Err(serde::de::Error::duplicate_field("activeValidatorLimit")); + } + active_validator_limit__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::BaseRewardRate => { + if base_reward_rate__.is_some() { + return Err(serde::de::Error::duplicate_field("baseRewardRate")); + } + base_reward_rate__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::SlashingPenaltyMisbehavior => { + if slashing_penalty_misbehavior__.is_some() { + return Err(serde::de::Error::duplicate_field("slashingPenaltyMisbehavior")); + } + slashing_penalty_misbehavior__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::SlashingPenaltyDowntime => { + if slashing_penalty_downtime__.is_some() { + return Err(serde::de::Error::duplicate_field("slashingPenaltyDowntime")); + } + slashing_penalty_downtime__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::SignedBlocksWindowLen => { + if signed_blocks_window_len__.is_some() { + return Err(serde::de::Error::duplicate_field("signedBlocksWindowLen")); + } + signed_blocks_window_len__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + GeneratedField::MissedBlocksMaximum => { + if missed_blocks_maximum__.is_some() { + return Err(serde::de::Error::duplicate_field("missedBlocksMaximum")); + } + missed_blocks_maximum__ = + Some(map.next_value::<::pbjson::private::NumberDeserialize<_>>()?.0) + ; + } + } + } + Ok(StakeParameters { + unbonding_epochs: unbonding_epochs__.unwrap_or_default(), + active_validator_limit: active_validator_limit__.unwrap_or_default(), + base_reward_rate: base_reward_rate__.unwrap_or_default(), + slashing_penalty_misbehavior: slashing_penalty_misbehavior__.unwrap_or_default(), + slashing_penalty_downtime: slashing_penalty_downtime__.unwrap_or_default(), + signed_blocks_window_len: signed_blocks_window_len__.unwrap_or_default(), + missed_blocks_maximum: missed_blocks_maximum__.unwrap_or_default(), + }) + } + } + deserializer.deserialize_struct("penumbra.core.component.stake.v1alpha1.StakeParameters", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for Undelegate { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.rs index 2d7301c72b..bb07b85248 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.rs @@ -484,16 +484,16 @@ pub struct AssetsResponse { super::super::core::asset::v1alpha1::DenomMetadata, >, } -/// Requests the current chain parameters from the view service. +/// Requests the current app parameters from the view service. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ChainParametersRequest {} +pub struct AppParametersRequest {} #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ChainParametersResponse { +pub struct AppParametersResponse { #[prost(message, optional, tag = "1")] pub parameters: ::core::option::Option< - super::super::core::component::chain::v1alpha1::ChainParameters, + super::super::core::app::v1alpha1::AppParameters, >, } /// Requests the current FMD parameters from the view service. @@ -983,11 +983,11 @@ pub mod view_protocol_service_client { ); self.inner.server_streaming(request.into_request(), path, codec).await } - /// Query for the current chain parameters. - pub async fn chain_parameters( + /// Query for the current app parameters. + pub async fn app_parameters( &mut self, - request: impl tonic::IntoRequest, - ) -> Result, tonic::Status> { + request: impl tonic::IntoRequest, + ) -> Result, tonic::Status> { self.inner .ready() .await @@ -999,7 +999,7 @@ pub mod view_protocol_service_client { })?; let codec = tonic::codec::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( - "/penumbra.view.v1alpha1.ViewProtocolService/ChainParameters", + "/penumbra.view.v1alpha1.ViewProtocolService/AppParameters", ); self.inner.unary(request.into_request(), path, codec).await } @@ -1490,11 +1490,11 @@ pub mod view_protocol_service_server { &self, request: tonic::Request, ) -> Result, tonic::Status>; - /// Query for the current chain parameters. - async fn chain_parameters( + /// Query for the current app parameters. + async fn app_parameters( &self, - request: tonic::Request, - ) -> Result, tonic::Status>; + request: tonic::Request, + ) -> Result, tonic::Status>; /// Query for the current FMD parameters. async fn fmd_parameters( &self, @@ -1942,25 +1942,25 @@ pub mod view_protocol_service_server { }; Box::pin(fut) } - "/penumbra.view.v1alpha1.ViewProtocolService/ChainParameters" => { + "/penumbra.view.v1alpha1.ViewProtocolService/AppParameters" => { #[allow(non_camel_case_types)] - struct ChainParametersSvc(pub Arc); + struct AppParametersSvc(pub Arc); impl< T: ViewProtocolService, - > tonic::server::UnaryService - for ChainParametersSvc { - type Response = super::ChainParametersResponse; + > tonic::server::UnaryService + for AppParametersSvc { + type Response = super::AppParametersResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, - request: tonic::Request, + request: tonic::Request, ) -> Self::Future { let inner = self.0.clone(); let fut = async move { - (*inner).chain_parameters(request).await + (*inner).app_parameters(request).await }; Box::pin(fut) } @@ -1970,7 +1970,7 @@ pub mod view_protocol_service_server { let inner = self.inner.clone(); let fut = async move { let inner = inner.0; - let method = ChainParametersSvc(inner); + let method = AppParametersSvc(inner); let codec = tonic::codec::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( diff --git a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs index 5d4a729441..028f830ec4 100644 --- a/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs +++ b/crates/proto/src/gen/penumbra.view.v1alpha1.serde.rs @@ -199,6 +199,168 @@ impl<'de> serde::Deserialize<'de> for AddressByIndexResponse { deserializer.deserialize_struct("penumbra.view.v1alpha1.AddressByIndexResponse", FIELDS, GeneratedVisitor) } } +impl serde::Serialize for AppParametersRequest { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let len = 0; + let struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.AppParametersRequest", len)?; + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for AppParametersRequest { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + } + 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, + { + Err(serde::de::Error::unknown_field(value, FIELDS)) + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = AppParametersRequest; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1alpha1.AppParametersRequest") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + while map.next_key::()?.is_some() { + let _ = map.next_value::()?; + } + Ok(AppParametersRequest { + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1alpha1.AppParametersRequest", FIELDS, GeneratedVisitor) + } +} +impl serde::Serialize for AppParametersResponse { + #[allow(deprecated)] + fn serialize(&self, serializer: S) -> std::result::Result + where + S: serde::Serializer, + { + use serde::ser::SerializeStruct; + let mut len = 0; + if self.parameters.is_some() { + len += 1; + } + let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.AppParametersResponse", len)?; + if let Some(v) = self.parameters.as_ref() { + struct_ser.serialize_field("parameters", v)?; + } + struct_ser.end() + } +} +impl<'de> serde::Deserialize<'de> for AppParametersResponse { + #[allow(deprecated)] + fn deserialize(deserializer: D) -> std::result::Result + where + D: serde::Deserializer<'de>, + { + const FIELDS: &[&str] = &[ + "parameters", + ]; + + #[allow(clippy::enum_variant_names)] + enum GeneratedField { + Parameters, + } + 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 { + "parameters" => Ok(GeneratedField::Parameters), + _ => Err(serde::de::Error::unknown_field(value, FIELDS)), + } + } + } + deserializer.deserialize_identifier(GeneratedVisitor) + } + } + struct GeneratedVisitor; + impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { + type Value = AppParametersResponse; + + fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + formatter.write_str("struct penumbra.view.v1alpha1.AppParametersResponse") + } + + fn visit_map(self, mut map: V) -> std::result::Result + where + V: serde::de::MapAccess<'de>, + { + let mut parameters__ = None; + while let Some(k) = map.next_key()? { + match k { + GeneratedField::Parameters => { + if parameters__.is_some() { + return Err(serde::de::Error::duplicate_field("parameters")); + } + parameters__ = map.next_value()?; + } + } + } + Ok(AppParametersResponse { + parameters: parameters__, + }) + } + } + deserializer.deserialize_struct("penumbra.view.v1alpha1.AppParametersResponse", FIELDS, GeneratedVisitor) + } +} impl serde::Serialize for AssetsRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result @@ -1129,168 +1291,6 @@ impl<'de> serde::Deserialize<'de> for BroadcastTransactionResponse { deserializer.deserialize_struct("penumbra.view.v1alpha1.BroadcastTransactionResponse", FIELDS, GeneratedVisitor) } } -impl serde::Serialize for ChainParametersRequest { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let len = 0; - let struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.ChainParametersRequest", len)?; - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for ChainParametersRequest { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - } - 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, - { - Err(serde::de::Error::unknown_field(value, FIELDS)) - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ChainParametersRequest; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.view.v1alpha1.ChainParametersRequest") - } - - fn visit_map(self, mut map: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - while map.next_key::()?.is_some() { - let _ = map.next_value::()?; - } - Ok(ChainParametersRequest { - }) - } - } - deserializer.deserialize_struct("penumbra.view.v1alpha1.ChainParametersRequest", FIELDS, GeneratedVisitor) - } -} -impl serde::Serialize for ChainParametersResponse { - #[allow(deprecated)] - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - use serde::ser::SerializeStruct; - let mut len = 0; - if self.parameters.is_some() { - len += 1; - } - let mut struct_ser = serializer.serialize_struct("penumbra.view.v1alpha1.ChainParametersResponse", len)?; - if let Some(v) = self.parameters.as_ref() { - struct_ser.serialize_field("parameters", v)?; - } - struct_ser.end() - } -} -impl<'de> serde::Deserialize<'de> for ChainParametersResponse { - #[allow(deprecated)] - fn deserialize(deserializer: D) -> std::result::Result - where - D: serde::Deserializer<'de>, - { - const FIELDS: &[&str] = &[ - "parameters", - ]; - - #[allow(clippy::enum_variant_names)] - enum GeneratedField { - Parameters, - } - 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 { - "parameters" => Ok(GeneratedField::Parameters), - _ => Err(serde::de::Error::unknown_field(value, FIELDS)), - } - } - } - deserializer.deserialize_identifier(GeneratedVisitor) - } - } - struct GeneratedVisitor; - impl<'de> serde::de::Visitor<'de> for GeneratedVisitor { - type Value = ChainParametersResponse; - - fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - formatter.write_str("struct penumbra.view.v1alpha1.ChainParametersResponse") - } - - fn visit_map(self, mut map: V) -> std::result::Result - where - V: serde::de::MapAccess<'de>, - { - let mut parameters__ = None; - while let Some(k) = map.next_key()? { - match k { - GeneratedField::Parameters => { - if parameters__.is_some() { - return Err(serde::de::Error::duplicate_field("parameters")); - } - parameters__ = map.next_value()?; - } - } - } - Ok(ChainParametersResponse { - parameters: parameters__, - }) - } - } - deserializer.deserialize_struct("penumbra.view.v1alpha1.ChainParametersResponse", FIELDS, GeneratedVisitor) - } -} impl serde::Serialize for EphemeralAddressRequest { #[allow(deprecated)] fn serialize(&self, serializer: S) -> std::result::Result diff --git a/crates/proto/src/gen/proto_descriptor.bin.no_lfs b/crates/proto/src/gen/proto_descriptor.bin.no_lfs index 34b86dcb4b..5e765a788e 100644 Binary files a/crates/proto/src/gen/proto_descriptor.bin.no_lfs and b/crates/proto/src/gen/proto_descriptor.bin.no_lfs differ diff --git a/crates/proto/src/lib.rs b/crates/proto/src/lib.rs index 827157063b..8052ad6c02 100644 --- a/crates/proto/src/lib.rs +++ b/crates/proto/src/lib.rs @@ -203,14 +203,12 @@ pub mod penumbra { } } - /* pub mod dao { pub mod v1alpha1 { include!("gen/penumbra.core.component.dao.v1alpha1.rs"); include!("gen/penumbra.core.component.dao.v1alpha1.serde.rs"); } } - */ pub mod dex { pub mod v1alpha1 { diff --git a/crates/view/src/client.rs b/crates/view/src/client.rs index 8aa7eec8e8..e37576af7d 100644 --- a/crates/view/src/client.rs +++ b/crates/view/src/client.rs @@ -2,8 +2,9 @@ use std::{collections::BTreeMap, future::Future, pin::Pin}; use anyhow::Result; use futures::{FutureExt, Stream, StreamExt, TryStreamExt}; +use penumbra_app::params::AppParameters; use penumbra_asset::asset::{self, DenomMetadata, Id}; -use penumbra_chain::params::{ChainParameters, FmdParameters}; +use penumbra_chain::params::FmdParameters; use penumbra_dex::{ lp::position::{self}, TradingPair, @@ -63,10 +64,10 @@ pub trait ViewClient { >, >; - /// Get a copy of the chain parameters. - fn chain_params( + /// Get a copy of the app parameters. + fn app_params( &mut self, - ) -> Pin> + Send + 'static>>; + ) -> Pin> + Send + 'static>>; /// Get a copy of the FMD parameters. fn fmd_parameters( @@ -331,16 +332,16 @@ where .boxed() } - fn chain_params( + fn app_params( &mut self, - ) -> Pin> + Send + 'static>> { + ) -> Pin> + Send + 'static>> { let mut self2 = self.clone(); async move { // We have to manually invoke the method on the type, because it has the // same name as the one we're implementing. - let rsp = ViewProtocolServiceClient::chain_parameters( + let rsp = ViewProtocolServiceClient::app_parameters( &mut self2, - tonic::Request::new(pb::ChainParametersRequest {}), + tonic::Request::new(pb::AppParametersRequest {}), ); rsp.await?.into_inner().try_into() } diff --git a/crates/view/src/planner.rs b/crates/view/src/planner.rs index 37f879002b..ee4b685209 100644 --- a/crates/view/src/planner.rs +++ b/crates/view/src/planner.rs @@ -429,7 +429,7 @@ impl Planner { source: AddressIndex, ) -> anyhow::Result { // Gather all the information needed from the view service - let chain_params = view.chain_params().await?; + let chain_params = view.app_params().await?.chain_params; let fmd_params = view.fmd_parameters().await?; let mut spendable_notes = Vec::new(); let mut voting_notes = Vec::new(); diff --git a/crates/view/src/service.rs b/crates/view/src/service.rs index 1f908959af..59e163184f 100644 --- a/crates/view/src/service.rs +++ b/crates/view/src/service.rs @@ -35,7 +35,7 @@ use penumbra_proto::{ self as pb, view_protocol_service_client::ViewProtocolServiceClient, view_protocol_service_server::{ViewProtocolService, ViewProtocolServiceServer}, - ChainParametersResponse, FmdParametersResponse, NoteByCommitmentResponse, StatusResponse, + AppParametersResponse, FmdParametersResponse, NoteByCommitmentResponse, StatusResponse, SwapByCommitmentResponse, TransactionPlannerResponse, WitnessResponse, }, DomainType, @@ -379,9 +379,9 @@ impl ViewProtocolService for ViewService { ) -> Result, tonic::Status> { let prq = request.into_inner(); - let chain_params = - self.storage.chain_params().await.map_err(|e| { - tonic::Status::internal(format!("could not get chain params: {:#}", e)) + let app_params = + self.storage.app_params().await.map_err(|e| { + tonic::Status::internal(format!("could not get app params: {:#}", e)) })?; let mut planner = Planner::new(OsRng); @@ -483,7 +483,7 @@ impl ViewProtocolService for ViewService { swap_plaintext: swap_record.swap, position: swap_record.position, output_data: swap_record.output_data, - epoch_duration: chain_params.epoch_duration, + epoch_duration: app_params.chain_params.epoch_duration, proof_blinding_r: Fq::rand(&mut OsRng), proof_blinding_s: Fq::rand(&mut OsRng), }); @@ -1408,18 +1408,18 @@ impl ViewProtocolService for ViewService { })) } - async fn chain_parameters( + async fn app_parameters( &self, - _request: tonic::Request, - ) -> Result, tonic::Status> { + _request: tonic::Request, + ) -> Result, tonic::Status> { self.check_worker().await?; let parameters = - self.storage.chain_params().await.map_err(|e| { - tonic::Status::unavailable(format!("error getting chain params: {e}")) + self.storage.app_params().await.map_err(|e| { + tonic::Status::unavailable(format!("error getting app params: {e}")) })?; - let response = ChainParametersResponse { + let response = AppParametersResponse { parameters: Some(parameters.into()), }; diff --git a/crates/view/src/storage.rs b/crates/view/src/storage.rs index 8334a0bb97..61ec585e50 100644 --- a/crates/view/src/storage.rs +++ b/crates/view/src/storage.rs @@ -3,8 +3,9 @@ use camino::Utf8Path; use decaf377::{FieldExt, Fq}; use once_cell::sync::Lazy; use parking_lot::Mutex; +use penumbra_app::params::AppParameters; use penumbra_asset::{asset, asset::DenomMetadata, asset::Id, Value}; -use penumbra_chain::params::{ChainParameters, FmdParameters}; +use penumbra_chain::params::FmdParameters; use penumbra_dex::{ lp::position::{self, Position, State}, TradingPair, @@ -13,7 +14,7 @@ use penumbra_keys::{keys::AddressIndex, Address, FullViewingKey}; use penumbra_num::Amount; use penumbra_proto::{ core::app::v1alpha1::{ - query_service_client::QueryServiceClient as AppQueryServiceClient, ChainParametersRequest, + query_service_client::QueryServiceClient as AppQueryServiceClient, AppParametersRequest, }, DomainType, }; @@ -82,7 +83,7 @@ impl Storage { let mut client = AppQueryServiceClient::connect(node.to_string()).await?; let params = client - .chain_parameters(tonic::Request::new(ChainParametersRequest { + .app_parameters(tonic::Request::new(AppParametersRequest { chain_id: String::new(), })) .await? @@ -169,7 +170,7 @@ impl Storage { pub async fn initialize( storage_path: Option>, fvk: FullViewingKey, - params: ChainParameters, + params: AppParameters, ) -> anyhow::Result { tracing::debug!(storage_path = ?storage_path.as_ref().map(AsRef::as_ref), ?fvk, ?params); @@ -184,10 +185,10 @@ impl Storage { // Create the tables tx.execute_batch(include_str!("storage/schema.sql"))?; - let chain_params_bytes = &ChainParameters::encode_to_vec(¶ms)[..]; + let app_params_bytes = &AppParameters::encode_to_vec(¶ms)[..]; tx.execute( - "INSERT INTO chain_params (bytes) VALUES (?1)", - [chain_params_bytes], + "INSERT INTO app_params (bytes) VALUES (?1)", + [app_params_bytes], )?; let fvk_bytes = &FullViewingKey::encode_to_vec(&fvk)[..]; @@ -512,17 +513,17 @@ impl Storage { .await? } - pub async fn chain_params(&self) -> anyhow::Result { + pub async fn app_params(&self) -> anyhow::Result { let pool = self.pool.clone(); spawn_blocking(move || { let bytes = pool .get()? - .prepare_cached("SELECT bytes FROM chain_params LIMIT 1")? + .prepare_cached("SELECT bytes FROM app_params LIMIT 1")? .query_row([], |row| row.get::<_, Option>>("bytes"))? - .ok_or_else(|| anyhow!("missing chain params"))?; + .ok_or_else(|| anyhow!("missing app params"))?; - ChainParameters::decode(bytes.as_slice()) + AppParameters::decode(bytes.as_slice()) }) .await? } @@ -1233,13 +1234,14 @@ impl Storage { let mut dbtx = lock.transaction()?; // If the chain parameters have changed, update them. - if let Some(params) = filtered_block.chain_parameters { - let chain_params_bytes = &ChainParameters::encode_to_vec(¶ms)[..]; - dbtx.execute( - "INSERT INTO chain_params (bytes) VALUES (?1)", - [chain_params_bytes], - )?; - } + // TODO: disabled for now, see https://github.com/penumbra-zone/penumbra/issues/3107 + // if let Some(params) = filtered_block.chain_parameters { + // let chain_params_bytes = &ChainParameters::encode_to_vec(¶ms)[..]; + // dbtx.execute( + // "INSERT INTO chain_params (bytes) VALUES (?1)", + // [chain_params_bytes], + // )?; + // } // Insert new note records into storage for note_record in &filtered_block.new_notes { diff --git a/crates/view/src/storage/schema.sql b/crates/view/src/storage/schema.sql index 506bd4e451..eaaae6b671 100644 --- a/crates/view/src/storage/schema.sql +++ b/crates/view/src/storage/schema.sql @@ -5,7 +5,7 @@ CREATE TABLE schema_hash (schema_hash TEXT NOT NULL); CREATE TABLE client_version (client_version TEXT NOT NULL); -- Application state, stored in single-row tables -CREATE TABLE chain_params (bytes BLOB NOT NULL); +CREATE TABLE app_params (bytes BLOB NOT NULL); CREATE TABLE fmd_parameters (bytes BLOB NOT NULL); CREATE TABLE full_viewing_key (bytes BLOB NOT NULL); CREATE TABLE sync_height (height BIGINT NOT NULL); diff --git a/crates/view/src/worker.rs b/crates/view/src/worker.rs index a13200f3e4..e79b37f50b 100644 --- a/crates/view/src/worker.rs +++ b/crates/view/src/worker.rs @@ -153,7 +153,7 @@ impl Worker { // Do a single sync run, up to whatever the latest block height is tracing::info!("starting client sync"); - let chain_id = self.storage.chain_params().await?.chain_id; + let chain_id = self.storage.app_params().await?.chain_params.chain_id; let start_height = self .storage diff --git a/crates/wallet/src/plan.rs b/crates/wallet/src/plan.rs index 1962b93544..c6f8f29f0c 100644 --- a/crates/wallet/src/plan.rs +++ b/crates/wallet/src/plan.rs @@ -168,7 +168,7 @@ where // if they do, check if the associated notes are unspent // if they are, decrypt the SwapCiphertext in the Swap action and construct a SwapClaim - let chain_params = view.chain_params().await?; + let chain_params = view.app_params().await?.chain_params; let epoch_duration = chain_params.clone().epoch_duration; let unclaimed_swaps = view.unclaimed_swaps().await?; @@ -282,7 +282,13 @@ where { Planner::new(rng) .fee(fee) - .proposal_submit(proposal, view.chain_params().await?.proposal_deposit_amount) + .proposal_submit( + proposal, + view.app_params() + .await? + .governance_params + .proposal_deposit_amount, + ) .plan(view, account_group_id, source_address) .await .context("can't build proposal submit transaction") diff --git a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go index 6996b5da46..33fddf50f6 100644 --- a/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go +++ b/proto/go/gen/penumbra/core/app/v1alpha1/app.pb.go @@ -9,6 +9,11 @@ package appv1alpha1 import ( types "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" + v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dao/v1alpha1" + v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/governance/v1alpha1" + v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" + v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" + v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -261,18 +266,25 @@ func (x *PrefixValueResponse) GetValue() []byte { return nil } -// Requests the global configuration data for the chain. -type ChainParametersRequest struct { +type AppParameters struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The expected chain id (empty string if no expectation). - ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Chain module parameters. + ChainParams *v1alpha1.ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` + // DAO module parameters. + DaoParams *v1alpha11.DaoParameters `protobuf:"bytes,2,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` + // Governance module parameters. + GovernanceParams *v1alpha12.GovernanceParameters `protobuf:"bytes,3,opt,name=governance_params,json=governanceParams,proto3" json:"governance_params,omitempty"` + // IBC module parameters. + IbcParams *v1alpha13.IbcParameters `protobuf:"bytes,4,opt,name=ibc_params,json=ibcParams,proto3" json:"ibc_params,omitempty"` + // Stake module parameters. + StakeParams *v1alpha14.StakeParameters `protobuf:"bytes,5,opt,name=stake_params,json=stakeParams,proto3" json:"stake_params,omitempty"` } -func (x *ChainParametersRequest) Reset() { - *x = ChainParametersRequest{} +func (x *AppParameters) Reset() { + *x = AppParameters{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -280,13 +292,13 @@ func (x *ChainParametersRequest) Reset() { } } -func (x *ChainParametersRequest) String() string { +func (x *AppParameters) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChainParametersRequest) ProtoMessage() {} +func (*AppParameters) ProtoMessage() {} -func (x *ChainParametersRequest) ProtoReflect() protoreflect.Message { +func (x *AppParameters) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -298,28 +310,58 @@ func (x *ChainParametersRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChainParametersRequest.ProtoReflect.Descriptor instead. -func (*ChainParametersRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use AppParameters.ProtoReflect.Descriptor instead. +func (*AppParameters) Descriptor() ([]byte, []int) { return file_penumbra_core_app_v1alpha1_app_proto_rawDescGZIP(), []int{4} } -func (x *ChainParametersRequest) GetChainId() string { +func (x *AppParameters) GetChainParams() *v1alpha1.ChainParameters { if x != nil { - return x.ChainId + return x.ChainParams } - return "" + return nil +} + +func (x *AppParameters) GetDaoParams() *v1alpha11.DaoParameters { + if x != nil { + return x.DaoParams + } + return nil +} + +func (x *AppParameters) GetGovernanceParams() *v1alpha12.GovernanceParameters { + if x != nil { + return x.GovernanceParams + } + return nil +} + +func (x *AppParameters) GetIbcParams() *v1alpha13.IbcParameters { + if x != nil { + return x.IbcParams + } + return nil } -type ChainParametersResponse struct { +func (x *AppParameters) GetStakeParams() *v1alpha14.StakeParameters { + if x != nil { + return x.StakeParams + } + return nil +} + +// Requests the global configuration data for the app. +type AppParametersRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChainParameters *v1alpha1.ChainParameters `protobuf:"bytes,1,opt,name=chain_parameters,json=chainParameters,proto3" json:"chain_parameters,omitempty"` + // The expected chain id (empty string if no expectation). + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` } -func (x *ChainParametersResponse) Reset() { - *x = ChainParametersResponse{} +func (x *AppParametersRequest) Reset() { + *x = AppParametersRequest{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -327,13 +369,13 @@ func (x *ChainParametersResponse) Reset() { } } -func (x *ChainParametersResponse) String() string { +func (x *AppParametersRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChainParametersResponse) ProtoMessage() {} +func (*AppParametersRequest) ProtoMessage() {} -func (x *ChainParametersResponse) ProtoReflect() protoreflect.Message { +func (x *AppParametersRequest) ProtoReflect() protoreflect.Message { mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -345,14 +387,235 @@ func (x *ChainParametersResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChainParametersResponse.ProtoReflect.Descriptor instead. -func (*ChainParametersResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use AppParametersRequest.ProtoReflect.Descriptor instead. +func (*AppParametersRequest) Descriptor() ([]byte, []int) { return file_penumbra_core_app_v1alpha1_app_proto_rawDescGZIP(), []int{5} } -func (x *ChainParametersResponse) GetChainParameters() *v1alpha1.ChainParameters { +func (x *AppParametersRequest) GetChainId() string { + if x != nil { + return x.ChainId + } + return "" +} + +type AppParametersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppParameters *AppParameters `protobuf:"bytes,1,opt,name=app_parameters,json=appParameters,proto3" json:"app_parameters,omitempty"` +} + +func (x *AppParametersResponse) Reset() { + *x = AppParametersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppParametersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppParametersResponse) ProtoMessage() {} + +func (x *AppParametersResponse) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AppParametersResponse.ProtoReflect.Descriptor instead. +func (*AppParametersResponse) Descriptor() ([]byte, []int) { + return file_penumbra_core_app_v1alpha1_app_proto_rawDescGZIP(), []int{6} +} + +func (x *AppParametersResponse) GetAppParameters() *AppParameters { + if x != nil { + return x.AppParameters + } + return nil +} + +type GenesisAppState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to GenesisAppState: + // + // *GenesisAppState_GenesisContent + // *GenesisAppState_GenesisCheckpoint + GenesisAppState isGenesisAppState_GenesisAppState `protobuf_oneof:"genesis_app_state"` +} + +func (x *GenesisAppState) Reset() { + *x = GenesisAppState{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisAppState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisAppState) ProtoMessage() {} + +func (x *GenesisAppState) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisAppState.ProtoReflect.Descriptor instead. +func (*GenesisAppState) Descriptor() ([]byte, []int) { + return file_penumbra_core_app_v1alpha1_app_proto_rawDescGZIP(), []int{7} +} + +func (m *GenesisAppState) GetGenesisAppState() isGenesisAppState_GenesisAppState { + if m != nil { + return m.GenesisAppState + } + return nil +} + +func (x *GenesisAppState) GetGenesisContent() *GenesisContent { + if x, ok := x.GetGenesisAppState().(*GenesisAppState_GenesisContent); ok { + return x.GenesisContent + } + return nil +} + +func (x *GenesisAppState) GetGenesisCheckpoint() []byte { + if x, ok := x.GetGenesisAppState().(*GenesisAppState_GenesisCheckpoint); ok { + return x.GenesisCheckpoint + } + return nil +} + +type isGenesisAppState_GenesisAppState interface { + isGenesisAppState_GenesisAppState() +} + +type GenesisAppState_GenesisContent struct { + GenesisContent *GenesisContent `protobuf:"bytes,1,opt,name=genesis_content,json=genesisContent,proto3,oneof"` +} + +type GenesisAppState_GenesisCheckpoint struct { + GenesisCheckpoint []byte `protobuf:"bytes,2,opt,name=genesis_checkpoint,json=genesisCheckpoint,proto3,oneof"` +} + +func (*GenesisAppState_GenesisContent) isGenesisAppState_GenesisAppState() {} + +func (*GenesisAppState_GenesisCheckpoint) isGenesisAppState_GenesisAppState() {} + +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Stake module genesis state. + StakeContent *v1alpha14.GenesisContent `protobuf:"bytes,1,opt,name=stake_content,json=stakeContent,proto3" json:"stake_content,omitempty"` + // Shielded pool module genesis state. + ShieldedPoolContent *v1alpha15.GenesisContent `protobuf:"bytes,2,opt,name=shielded_pool_content,json=shieldedPoolContent,proto3" json:"shielded_pool_content,omitempty"` + // Governance module genesis state. + GovernanceContent *v1alpha12.GenesisContent `protobuf:"bytes,3,opt,name=governance_content,json=governanceContent,proto3" json:"governance_content,omitempty"` + // IBC module genesis state. + IbcContent *v1alpha13.GenesisContent `protobuf:"bytes,4,opt,name=ibc_content,json=ibcContent,proto3" json:"ibc_content,omitempty"` + // Chain module genesis state. + ChainContent *v1alpha1.GenesisContent `protobuf:"bytes,5,opt,name=chain_content,json=chainContent,proto3" json:"chain_content,omitempty"` + // DAO module genesis state. + DaoContent *v1alpha11.GenesisContent `protobuf:"bytes,6,opt,name=dao_content,json=daoContent,proto3" json:"dao_content,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_app_v1alpha1_app_proto_rawDescGZIP(), []int{8} +} + +func (x *GenesisContent) GetStakeContent() *v1alpha14.GenesisContent { + if x != nil { + return x.StakeContent + } + return nil +} + +func (x *GenesisContent) GetShieldedPoolContent() *v1alpha15.GenesisContent { if x != nil { - return x.ChainParameters + return x.ShieldedPoolContent + } + return nil +} + +func (x *GenesisContent) GetGovernanceContent() *v1alpha12.GenesisContent { + if x != nil { + return x.GovernanceContent + } + return nil +} + +func (x *GenesisContent) GetIbcContent() *v1alpha13.GenesisContent { + if x != nil { + return x.IbcContent + } + return nil +} + +func (x *GenesisContent) GetChainContent() *v1alpha1.GenesisContent { + if x != nil { + return x.ChainContent + } + return nil +} + +func (x *GenesisContent) GetDaoContent() *v1alpha11.GenesisContent { + if x != nil { + return x.DaoContent } return nil } @@ -368,7 +631,7 @@ type KeyValueResponse_Value struct { func (x *KeyValueResponse_Value) Reset() { *x = KeyValueResponse_Value{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[6] + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -381,7 +644,7 @@ func (x *KeyValueResponse_Value) String() string { func (*KeyValueResponse_Value) ProtoMessage() {} func (x *KeyValueResponse_Value) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[6] + mi := &file_penumbra_core_app_v1alpha1_app_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -414,86 +677,180 @@ var file_penumbra_core_app_v1alpha1_app_proto_rawDesc = []byte{ 0x61, 0x31, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x69, 0x62, 0x63, 0x2f, 0x63, 0x6f, 0x72, 0x65, - 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x54, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xb6, 0x01, 0x0a, 0x10, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, + 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x3c, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x61, 0x6f, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2f, 0x64, 0x61, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x69, 0x62, + 0x63, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x54, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0xb6, 0x01, 0x0a, 0x10, + 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x48, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, 0x79, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x62, 0x63, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x1a, 0x1d, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x47, 0x0a, 0x12, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x3d, 0x0a, + 0x13, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xdf, 0x03, 0x0a, + 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5a, + 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, + 0x6f, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x6e, + 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x10, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x52, + 0x0a, 0x0a, 0x69, 0x62, 0x63, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x5a, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x31, + 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x22, 0x69, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x70, + 0x70, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0d, 0x61, + 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xae, 0x01, 0x0a, + 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x55, 0x0a, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x72, - 0x6b, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x1a, - 0x1d, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x47, - 0x0a, 0x12, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x3d, 0x0a, 0x13, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x33, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0x7d, 0x0a, 0x17, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x10, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x32, 0xe3, 0x02, 0x0a, 0x0c, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7a, 0x0a, 0x0f, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x32, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x73, + 0x69, 0x73, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x67, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xd8, 0x04, + 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x5b, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, + 0x0c, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x72, 0x0a, + 0x15, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x13, 0x73, 0x68, + 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x6a, 0x0a, 0x12, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x67, 0x6f, 0x76, 0x65, + 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, + 0x0b, 0x69, 0x62, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x69, 0x62, 0x63, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x5b, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x55, 0x0a, 0x0b, 0x64, 0x61, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x64, 0x61, + 0x6f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x32, 0xdd, 0x02, 0x0a, 0x0c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x74, 0x0a, 0x0d, 0x41, 0x70, 0x70, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x65, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x8c, 0x02, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, - 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4b, 0x65, - 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, - 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, - 0x42, 0x8c, 0x02, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x08, 0x41, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, - 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x61, 0x70, 0x70, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x41, 0xaa, 0x02, 0x1a, 0x50, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, - 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x1a, 0x50, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x41, 0x70, 0x70, 0x5c, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x41, 0x70, 0x70, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, - 0x3a, 0x3a, 0x41, 0x70, 0x70, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x41, 0x70, 0x70, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x55, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, + 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x3b, 0x61, 0x70, 0x70, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, + 0x03, 0x50, 0x43, 0x41, 0xaa, 0x02, 0x1a, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0xca, 0x02, 0x1a, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, + 0x65, 0x5c, 0x41, 0x70, 0x70, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x41, + 0x70, 0x70, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x41, 0x70, 0x70, 0x3a, 0x3a, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -508,33 +865,58 @@ func file_penumbra_core_app_v1alpha1_app_proto_rawDescGZIP() []byte { return file_penumbra_core_app_v1alpha1_app_proto_rawDescData } -var file_penumbra_core_app_v1alpha1_app_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_penumbra_core_app_v1alpha1_app_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_penumbra_core_app_v1alpha1_app_proto_goTypes = []interface{}{ - (*KeyValueRequest)(nil), // 0: penumbra.core.app.v1alpha1.KeyValueRequest - (*KeyValueResponse)(nil), // 1: penumbra.core.app.v1alpha1.KeyValueResponse - (*PrefixValueRequest)(nil), // 2: penumbra.core.app.v1alpha1.PrefixValueRequest - (*PrefixValueResponse)(nil), // 3: penumbra.core.app.v1alpha1.PrefixValueResponse - (*ChainParametersRequest)(nil), // 4: penumbra.core.app.v1alpha1.ChainParametersRequest - (*ChainParametersResponse)(nil), // 5: penumbra.core.app.v1alpha1.ChainParametersResponse - (*KeyValueResponse_Value)(nil), // 6: penumbra.core.app.v1alpha1.KeyValueResponse.Value - (*types.MerkleProof)(nil), // 7: ibc.core.commitment.v1.MerkleProof - (*v1alpha1.ChainParameters)(nil), // 8: penumbra.core.component.chain.v1alpha1.ChainParameters + (*KeyValueRequest)(nil), // 0: penumbra.core.app.v1alpha1.KeyValueRequest + (*KeyValueResponse)(nil), // 1: penumbra.core.app.v1alpha1.KeyValueResponse + (*PrefixValueRequest)(nil), // 2: penumbra.core.app.v1alpha1.PrefixValueRequest + (*PrefixValueResponse)(nil), // 3: penumbra.core.app.v1alpha1.PrefixValueResponse + (*AppParameters)(nil), // 4: penumbra.core.app.v1alpha1.AppParameters + (*AppParametersRequest)(nil), // 5: penumbra.core.app.v1alpha1.AppParametersRequest + (*AppParametersResponse)(nil), // 6: penumbra.core.app.v1alpha1.AppParametersResponse + (*GenesisAppState)(nil), // 7: penumbra.core.app.v1alpha1.GenesisAppState + (*GenesisContent)(nil), // 8: penumbra.core.app.v1alpha1.GenesisContent + (*KeyValueResponse_Value)(nil), // 9: penumbra.core.app.v1alpha1.KeyValueResponse.Value + (*types.MerkleProof)(nil), // 10: ibc.core.commitment.v1.MerkleProof + (*v1alpha1.ChainParameters)(nil), // 11: penumbra.core.component.chain.v1alpha1.ChainParameters + (*v1alpha11.DaoParameters)(nil), // 12: penumbra.core.component.dao.v1alpha1.DaoParameters + (*v1alpha12.GovernanceParameters)(nil), // 13: penumbra.core.component.governance.v1alpha1.GovernanceParameters + (*v1alpha13.IbcParameters)(nil), // 14: penumbra.core.component.ibc.v1alpha1.IbcParameters + (*v1alpha14.StakeParameters)(nil), // 15: penumbra.core.component.stake.v1alpha1.StakeParameters + (*v1alpha14.GenesisContent)(nil), // 16: penumbra.core.component.stake.v1alpha1.GenesisContent + (*v1alpha15.GenesisContent)(nil), // 17: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent + (*v1alpha12.GenesisContent)(nil), // 18: penumbra.core.component.governance.v1alpha1.GenesisContent + (*v1alpha13.GenesisContent)(nil), // 19: penumbra.core.component.ibc.v1alpha1.GenesisContent + (*v1alpha1.GenesisContent)(nil), // 20: penumbra.core.component.chain.v1alpha1.GenesisContent + (*v1alpha11.GenesisContent)(nil), // 21: penumbra.core.component.dao.v1alpha1.GenesisContent } var file_penumbra_core_app_v1alpha1_app_proto_depIdxs = []int32{ - 6, // 0: penumbra.core.app.v1alpha1.KeyValueResponse.value:type_name -> penumbra.core.app.v1alpha1.KeyValueResponse.Value - 7, // 1: penumbra.core.app.v1alpha1.KeyValueResponse.proof:type_name -> ibc.core.commitment.v1.MerkleProof - 8, // 2: penumbra.core.app.v1alpha1.ChainParametersResponse.chain_parameters:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 4, // 3: penumbra.core.app.v1alpha1.QueryService.ChainParameters:input_type -> penumbra.core.app.v1alpha1.ChainParametersRequest - 0, // 4: penumbra.core.app.v1alpha1.QueryService.KeyValue:input_type -> penumbra.core.app.v1alpha1.KeyValueRequest - 2, // 5: penumbra.core.app.v1alpha1.QueryService.PrefixValue:input_type -> penumbra.core.app.v1alpha1.PrefixValueRequest - 5, // 6: penumbra.core.app.v1alpha1.QueryService.ChainParameters:output_type -> penumbra.core.app.v1alpha1.ChainParametersResponse - 1, // 7: penumbra.core.app.v1alpha1.QueryService.KeyValue:output_type -> penumbra.core.app.v1alpha1.KeyValueResponse - 3, // 8: penumbra.core.app.v1alpha1.QueryService.PrefixValue:output_type -> penumbra.core.app.v1alpha1.PrefixValueResponse - 6, // [6:9] is the sub-list for method output_type - 3, // [3:6] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 9, // 0: penumbra.core.app.v1alpha1.KeyValueResponse.value:type_name -> penumbra.core.app.v1alpha1.KeyValueResponse.Value + 10, // 1: penumbra.core.app.v1alpha1.KeyValueResponse.proof:type_name -> ibc.core.commitment.v1.MerkleProof + 11, // 2: penumbra.core.app.v1alpha1.AppParameters.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 12, // 3: penumbra.core.app.v1alpha1.AppParameters.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters + 13, // 4: penumbra.core.app.v1alpha1.AppParameters.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 14, // 5: penumbra.core.app.v1alpha1.AppParameters.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters + 15, // 6: penumbra.core.app.v1alpha1.AppParameters.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters + 4, // 7: penumbra.core.app.v1alpha1.AppParametersResponse.app_parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters + 8, // 8: penumbra.core.app.v1alpha1.GenesisAppState.genesis_content:type_name -> penumbra.core.app.v1alpha1.GenesisContent + 16, // 9: penumbra.core.app.v1alpha1.GenesisContent.stake_content:type_name -> penumbra.core.component.stake.v1alpha1.GenesisContent + 17, // 10: penumbra.core.app.v1alpha1.GenesisContent.shielded_pool_content:type_name -> penumbra.core.component.shielded_pool.v1alpha1.GenesisContent + 18, // 11: penumbra.core.app.v1alpha1.GenesisContent.governance_content:type_name -> penumbra.core.component.governance.v1alpha1.GenesisContent + 19, // 12: penumbra.core.app.v1alpha1.GenesisContent.ibc_content:type_name -> penumbra.core.component.ibc.v1alpha1.GenesisContent + 20, // 13: penumbra.core.app.v1alpha1.GenesisContent.chain_content:type_name -> penumbra.core.component.chain.v1alpha1.GenesisContent + 21, // 14: penumbra.core.app.v1alpha1.GenesisContent.dao_content:type_name -> penumbra.core.component.dao.v1alpha1.GenesisContent + 5, // 15: penumbra.core.app.v1alpha1.QueryService.AppParameters:input_type -> penumbra.core.app.v1alpha1.AppParametersRequest + 0, // 16: penumbra.core.app.v1alpha1.QueryService.KeyValue:input_type -> penumbra.core.app.v1alpha1.KeyValueRequest + 2, // 17: penumbra.core.app.v1alpha1.QueryService.PrefixValue:input_type -> penumbra.core.app.v1alpha1.PrefixValueRequest + 6, // 18: penumbra.core.app.v1alpha1.QueryService.AppParameters:output_type -> penumbra.core.app.v1alpha1.AppParametersResponse + 1, // 19: penumbra.core.app.v1alpha1.QueryService.KeyValue:output_type -> penumbra.core.app.v1alpha1.KeyValueResponse + 3, // 20: penumbra.core.app.v1alpha1.QueryService.PrefixValue:output_type -> penumbra.core.app.v1alpha1.PrefixValueResponse + 18, // [18:21] is the sub-list for method output_type + 15, // [15:18] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_penumbra_core_app_v1alpha1_app_proto_init() } @@ -592,7 +974,7 @@ func file_penumbra_core_app_v1alpha1_app_proto_init() { } } file_penumbra_core_app_v1alpha1_app_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainParametersRequest); i { + switch v := v.(*AppParameters); i { case 0: return &v.state case 1: @@ -604,7 +986,7 @@ func file_penumbra_core_app_v1alpha1_app_proto_init() { } } file_penumbra_core_app_v1alpha1_app_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainParametersResponse); i { + switch v := v.(*AppParametersRequest); i { case 0: return &v.state case 1: @@ -616,6 +998,42 @@ func file_penumbra_core_app_v1alpha1_app_proto_init() { } } file_penumbra_core_app_v1alpha1_app_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppParametersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_app_v1alpha1_app_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisAppState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_app_v1alpha1_app_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_app_v1alpha1_app_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeyValueResponse_Value); i { case 0: return &v.state @@ -628,13 +1046,17 @@ func file_penumbra_core_app_v1alpha1_app_proto_init() { } } } + file_penumbra_core_app_v1alpha1_app_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*GenesisAppState_GenesisContent)(nil), + (*GenesisAppState_GenesisCheckpoint)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_app_v1alpha1_app_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 10, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go b/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go index 2c0aec261b..7baaf43f9d 100644 --- a/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go +++ b/proto/go/gen/penumbra/core/component/chain/v1alpha1/chain.pb.go @@ -7,10 +7,7 @@ package chainv1alpha1 import ( - v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" - v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" - v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" - v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/num/v1alpha1" + v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -82,40 +79,6 @@ type ChainParameters struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` // The duration of each epoch, in number of blocks. EpochDuration uint64 `protobuf:"varint,2,opt,name=epoch_duration,json=epochDuration,proto3" json:"epoch_duration,omitempty"` - // The number of epochs an unbonding note for before being released. - UnbondingEpochs uint64 `protobuf:"varint,3,opt,name=unbonding_epochs,json=unbondingEpochs,proto3" json:"unbonding_epochs,omitempty"` - // The maximum number of validators in the consensus set. - ActiveValidatorLimit uint64 `protobuf:"varint,4,opt,name=active_validator_limit,json=activeValidatorLimit,proto3" json:"active_validator_limit,omitempty"` - // The base reward rate, expressed in basis points of basis points - BaseRewardRate uint64 `protobuf:"varint,9,opt,name=base_reward_rate,json=baseRewardRate,proto3" json:"base_reward_rate,omitempty"` - // The penalty for slashing due to misbehavior. - SlashingPenaltyMisbehavior uint64 `protobuf:"varint,5,opt,name=slashing_penalty_misbehavior,json=slashingPenaltyMisbehavior,proto3" json:"slashing_penalty_misbehavior,omitempty"` - // The penalty for slashing due to downtime. - SlashingPenaltyDowntime uint64 `protobuf:"varint,10,opt,name=slashing_penalty_downtime,json=slashingPenaltyDowntime,proto3" json:"slashing_penalty_downtime,omitempty"` - // The number of blocks in the window to check for downtime. - SignedBlocksWindowLen uint64 `protobuf:"varint,11,opt,name=signed_blocks_window_len,json=signedBlocksWindowLen,proto3" json:"signed_blocks_window_len,omitempty"` - // The maximum number of blocks in the window each validator can miss signing without slashing. - MissedBlocksMaximum uint64 `protobuf:"varint,12,opt,name=missed_blocks_maximum,json=missedBlocksMaximum,proto3" json:"missed_blocks_maximum,omitempty"` - // Whether IBC (forming connections, processing IBC packets) is enabled. - IbcEnabled bool `protobuf:"varint,6,opt,name=ibc_enabled,json=ibcEnabled,proto3" json:"ibc_enabled,omitempty"` - // Whether inbound ICS-20 transfers are enabled - InboundIcs20TransfersEnabled bool `protobuf:"varint,7,opt,name=inbound_ics20_transfers_enabled,json=inboundIcs20TransfersEnabled,proto3" json:"inbound_ics20_transfers_enabled,omitempty"` - // Whether outbound ICS-20 transfers are enabled - OutboundIcs20TransfersEnabled bool `protobuf:"varint,8,opt,name=outbound_ics20_transfers_enabled,json=outboundIcs20TransfersEnabled,proto3" json:"outbound_ics20_transfers_enabled,omitempty"` - // The number of blocks during which a proposal is voted on. - ProposalVotingBlocks uint64 `protobuf:"varint,20,opt,name=proposal_voting_blocks,json=proposalVotingBlocks,proto3" json:"proposal_voting_blocks,omitempty"` - // The deposit required to create a proposal. - ProposalDepositAmount *v1alpha1.Amount `protobuf:"bytes,21,opt,name=proposal_deposit_amount,json=proposalDepositAmount,proto3" json:"proposal_deposit_amount,omitempty"` - // The quorum required for a proposal to be considered valid, as a fraction of the total stake - // weight of the network. - ProposalValidQuorum string `protobuf:"bytes,22,opt,name=proposal_valid_quorum,json=proposalValidQuorum,proto3" json:"proposal_valid_quorum,omitempty"` - // The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. - ProposalPassThreshold string `protobuf:"bytes,23,opt,name=proposal_pass_threshold,json=proposalPassThreshold,proto3" json:"proposal_pass_threshold,omitempty"` - // The threshold for a proposal to be slashed, regardless of whether the "yes" and "no" votes - // would have passed it, as a ratio of "no" votes over all total votes. - ProposalSlashThreshold string `protobuf:"bytes,24,opt,name=proposal_slash_threshold,json=proposalSlashThreshold,proto3" json:"proposal_slash_threshold,omitempty"` - // Whether DAO spend proposals are enabled. - DaoSpendProposalsEnabled bool `protobuf:"varint,25,opt,name=dao_spend_proposals_enabled,json=daoSpendProposalsEnabled,proto3" json:"dao_spend_proposals_enabled,omitempty"` } func (x *ChainParameters) Reset() { @@ -164,118 +127,6 @@ func (x *ChainParameters) GetEpochDuration() uint64 { return 0 } -func (x *ChainParameters) GetUnbondingEpochs() uint64 { - if x != nil { - return x.UnbondingEpochs - } - return 0 -} - -func (x *ChainParameters) GetActiveValidatorLimit() uint64 { - if x != nil { - return x.ActiveValidatorLimit - } - return 0 -} - -func (x *ChainParameters) GetBaseRewardRate() uint64 { - if x != nil { - return x.BaseRewardRate - } - return 0 -} - -func (x *ChainParameters) GetSlashingPenaltyMisbehavior() uint64 { - if x != nil { - return x.SlashingPenaltyMisbehavior - } - return 0 -} - -func (x *ChainParameters) GetSlashingPenaltyDowntime() uint64 { - if x != nil { - return x.SlashingPenaltyDowntime - } - return 0 -} - -func (x *ChainParameters) GetSignedBlocksWindowLen() uint64 { - if x != nil { - return x.SignedBlocksWindowLen - } - return 0 -} - -func (x *ChainParameters) GetMissedBlocksMaximum() uint64 { - if x != nil { - return x.MissedBlocksMaximum - } - return 0 -} - -func (x *ChainParameters) GetIbcEnabled() bool { - if x != nil { - return x.IbcEnabled - } - return false -} - -func (x *ChainParameters) GetInboundIcs20TransfersEnabled() bool { - if x != nil { - return x.InboundIcs20TransfersEnabled - } - return false -} - -func (x *ChainParameters) GetOutboundIcs20TransfersEnabled() bool { - if x != nil { - return x.OutboundIcs20TransfersEnabled - } - return false -} - -func (x *ChainParameters) GetProposalVotingBlocks() uint64 { - if x != nil { - return x.ProposalVotingBlocks - } - return 0 -} - -func (x *ChainParameters) GetProposalDepositAmount() *v1alpha1.Amount { - if x != nil { - return x.ProposalDepositAmount - } - return nil -} - -func (x *ChainParameters) GetProposalValidQuorum() string { - if x != nil { - return x.ProposalValidQuorum - } - return "" -} - -func (x *ChainParameters) GetProposalPassThreshold() string { - if x != nil { - return x.ProposalPassThreshold - } - return "" -} - -func (x *ChainParameters) GetProposalSlashThreshold() string { - if x != nil { - return x.ProposalSlashThreshold - } - return "" -} - -func (x *ChainParameters) GetDaoSpendProposalsEnabled() bool { - if x != nil { - return x.DaoSpendProposalsEnabled - } - return false -} - // The ratio between two numbers, used in governance to describe vote thresholds and quorums. type Ratio struct { state protoimpl.MessageState @@ -395,7 +246,7 @@ type KnownAssets struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Assets []*v1alpha11.DenomMetadata `protobuf:"bytes,1,rep,name=assets,proto3" json:"assets,omitempty"` + Assets []*v1alpha1.DenomMetadata `protobuf:"bytes,1,rep,name=assets,proto3" json:"assets,omitempty"` } func (x *KnownAssets) Reset() { @@ -430,7 +281,7 @@ func (*KnownAssets) Descriptor() ([]byte, []int) { return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{4} } -func (x *KnownAssets) GetAssets() []*v1alpha11.DenomMetadata { +func (x *KnownAssets) GetAssets() []*v1alpha1.DenomMetadata { if x != nil { return x.Assets } @@ -541,101 +392,20 @@ func (x *SpendInfo) GetSpendHeight() uint64 { return 0 } -type GenesisAppState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to GenesisAppState: - // - // *GenesisAppState_GenesisContent - // *GenesisAppState_GenesisCheckpoint - GenesisAppState isGenesisAppState_GenesisAppState `protobuf_oneof:"genesis_app_state"` -} - -func (x *GenesisAppState) Reset() { - *x = GenesisAppState{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenesisAppState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenesisAppState) ProtoMessage() {} - -func (x *GenesisAppState) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenesisAppState.ProtoReflect.Descriptor instead. -func (*GenesisAppState) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{7} -} - -func (m *GenesisAppState) GetGenesisAppState() isGenesisAppState_GenesisAppState { - if m != nil { - return m.GenesisAppState - } - return nil -} - -func (x *GenesisAppState) GetGenesisContent() *GenesisContent { - if x, ok := x.GetGenesisAppState().(*GenesisAppState_GenesisContent); ok { - return x.GenesisContent - } - return nil -} - -func (x *GenesisAppState) GetGenesisCheckpoint() []byte { - if x, ok := x.GetGenesisAppState().(*GenesisAppState_GenesisCheckpoint); ok { - return x.GenesisCheckpoint - } - return nil -} - -type isGenesisAppState_GenesisAppState interface { - isGenesisAppState_GenesisAppState() -} - -type GenesisAppState_GenesisContent struct { - GenesisContent *GenesisContent `protobuf:"bytes,1,opt,name=genesis_content,json=genesisContent,proto3,oneof"` -} - -type GenesisAppState_GenesisCheckpoint struct { - GenesisCheckpoint []byte `protobuf:"bytes,2,opt,name=genesis_checkpoint,json=genesisCheckpoint,proto3,oneof"` -} - -func (*GenesisAppState_GenesisContent) isGenesisAppState_GenesisAppState() {} - -func (*GenesisAppState_GenesisCheckpoint) isGenesisAppState_GenesisAppState() {} - +// Chain-specific genesis content. type GenesisContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChainParams *ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` - Validators []*v1alpha12.Validator `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators,omitempty"` - Allocations []*GenesisContent_Allocation `protobuf:"bytes,3,rep,name=allocations,proto3" json:"allocations,omitempty"` + // The ChainParameters present at genesis. + ChainParams *ChainParameters `protobuf:"bytes,1,opt,name=chain_params,json=chainParams,proto3" json:"chain_params,omitempty"` } func (x *GenesisContent) Reset() { *x = GenesisContent{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[8] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -648,7 +418,7 @@ func (x *GenesisContent) String() string { func (*GenesisContent) ProtoMessage() {} func (x *GenesisContent) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[8] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -661,7 +431,7 @@ func (x *GenesisContent) ProtoReflect() protoreflect.Message { // Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. func (*GenesisContent) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{8} + return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{7} } func (x *GenesisContent) GetChainParams() *ChainParameters { @@ -671,20 +441,6 @@ func (x *GenesisContent) GetChainParams() *ChainParameters { return nil } -func (x *GenesisContent) GetValidators() []*v1alpha12.Validator { - if x != nil { - return x.Validators - } - return nil -} - -func (x *GenesisContent) GetAllocations() []*GenesisContent_Allocation { - if x != nil { - return x.Allocations - } - return nil -} - type Epoch struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -697,7 +453,7 @@ type Epoch struct { func (x *Epoch) Reset() { *x = Epoch{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[9] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -710,7 +466,7 @@ func (x *Epoch) String() string { func (*Epoch) ProtoMessage() {} func (x *Epoch) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[9] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -723,7 +479,7 @@ func (x *Epoch) ProtoReflect() protoreflect.Message { // Deprecated: Use Epoch.ProtoReflect.Descriptor instead. func (*Epoch) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{9} + return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{8} } func (x *Epoch) GetIndex() uint64 { @@ -751,7 +507,7 @@ type EpochByHeightRequest struct { func (x *EpochByHeightRequest) Reset() { *x = EpochByHeightRequest{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[10] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -764,7 +520,7 @@ func (x *EpochByHeightRequest) String() string { func (*EpochByHeightRequest) ProtoMessage() {} func (x *EpochByHeightRequest) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[10] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -777,7 +533,7 @@ func (x *EpochByHeightRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EpochByHeightRequest.ProtoReflect.Descriptor instead. func (*EpochByHeightRequest) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{10} + return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{9} } func (x *EpochByHeightRequest) GetHeight() uint64 { @@ -798,7 +554,7 @@ type EpochByHeightResponse struct { func (x *EpochByHeightResponse) Reset() { *x = EpochByHeightResponse{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[11] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -811,7 +567,7 @@ func (x *EpochByHeightResponse) String() string { func (*EpochByHeightResponse) ProtoMessage() {} func (x *EpochByHeightResponse) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[11] + mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -824,7 +580,7 @@ func (x *EpochByHeightResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EpochByHeightResponse.ProtoReflect.Descriptor instead. func (*EpochByHeightResponse) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{11} + return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{10} } func (x *EpochByHeightResponse) GetEpoch() *Epoch { @@ -834,69 +590,6 @@ func (x *EpochByHeightResponse) GetEpoch() *Epoch { return nil } -type GenesisContent_Allocation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Amount *v1alpha1.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` - Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` - Address *v1alpha13.Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` -} - -func (x *GenesisContent_Allocation) Reset() { - *x = GenesisContent_Allocation{} - if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GenesisContent_Allocation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GenesisContent_Allocation) ProtoMessage() {} - -func (x *GenesisContent_Allocation) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GenesisContent_Allocation.ProtoReflect.Descriptor instead. -func (*GenesisContent_Allocation) Descriptor() ([]byte, []int) { - return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *GenesisContent_Allocation) GetAmount() *v1alpha1.Amount { - if x != nil { - return x.Amount - } - return nil -} - -func (x *GenesisContent_Allocation) GetDenom() string { - if x != nil { - return x.Denom - } - return "" -} - -func (x *GenesisContent_Allocation) GetAddress() *v1alpha13.Address { - if x != nil { - return x.Address - } - return nil -} - var File_penumbra_core_component_chain_v1alpha1_chain_proto protoreflect.FileDescriptor var file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDesc = []byte{ @@ -905,196 +598,96 @@ var file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDesc = []byte{ 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x24, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6e, 0x75, 0x6d, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, - 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, - 0x63, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xf1, 0x07, 0x0a, - 0x0f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, - 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x12, 0x34, 0x0a, - 0x16, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, - 0x1c, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, - 0x79, 0x5f, 0x6d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x1a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, - 0x61, 0x6c, 0x74, 0x79, 0x4d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, - 0x3a, 0x0a, 0x19, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, - 0x6c, 0x74, 0x79, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x17, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, 0x61, - 0x6c, 0x74, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x73, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, - 0x77, 0x4c, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x62, 0x63, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, - 0x62, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x69, 0x6e, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1c, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x63, 0x73, 0x32, 0x30, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x12, 0x47, 0x0a, 0x20, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x63, 0x73, - 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x5f, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x6f, 0x75, 0x74, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, - 0x5a, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, - 0x6f, 0x72, 0x75, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, - 0x6f, 0x73, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, - 0x36, 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, - 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, - 0x6f, 0x6c, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x12, 0x3d, 0x0a, 0x1b, 0x64, 0x61, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x61, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x22, 0x47, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x75, 0x6d, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x6e, 0x6f, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x65, - 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x63, 0x0a, 0x0d, 0x46, 0x6d, 0x64, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, - 0x73, 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x61, - 0x73, 0x4f, 0x66, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x52, - 0x0a, 0x0b, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x43, 0x0a, - 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, - 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x73, 0x22, 0x22, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x83, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x53, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0a, 0x6e, - 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xba, 0x01, 0x0a, - 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x41, 0x70, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x61, 0x0a, 0x0f, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, - 0x00, 0x52, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, - 0x61, 0x70, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xc5, 0x03, 0x0a, 0x0e, 0x47, 0x65, - 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x5a, 0x0a, 0x0c, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x28, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x22, 0x0a, 0x0a, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x53, 0x0a, 0x0f, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x70, 0x6f, 0x63, + 0x68, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0d, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x47, 0x0a, 0x05, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x65, 0x6e, + 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x63, 0x0a, 0x0d, 0x46, 0x6d, 0x64, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x74, 0x73, + 0x12, 0x2b, 0x0a, 0x12, 0x61, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x61, 0x73, + 0x4f, 0x66, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x52, 0x0a, + 0x0b, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x06, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, + 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x73, 0x22, 0x22, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x83, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x53, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, + 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x6f, + 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x70, 0x65, 0x6e, + 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x73, 0x70, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6c, 0x0a, 0x0e, 0x47, + 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x5a, 0x0a, + 0x0c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x40, 0x0a, 0x05, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x2e, 0x0a, 0x14, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x5c, 0x0a, 0x15, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x6f, + 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x32, 0x9d, 0x01, 0x0a, 0x0c, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x63, 0x0a, 0x0b, 0x61, - 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, - 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x9e, 0x01, 0x0a, 0x0a, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3a, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, - 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, - 0x6d, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x22, 0x40, 0x0a, 0x05, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x22, 0x2e, 0x0a, 0x14, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x22, 0x5c, 0x0a, 0x15, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, - 0x68, 0x32, 0x9d, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0xda, 0x02, 0x0a, 0x2a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x42, 0x0a, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x43, 0xaa, 0x02, 0x26, 0x50, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xca, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x32, 0x50, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x5c, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x2a, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, - 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xda, 0x02, 0x0a, 0x2a, 0x63, 0x6f, + 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, + 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, + 0x43, 0x43, 0xaa, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, + 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x26, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x32, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2a, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x3a, 0x3a, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1109,44 +702,33 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescGZIP() []byt return file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDescData } -var file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_penumbra_core_component_chain_v1alpha1_chain_proto_goTypes = []interface{}{ - (*EffectHash)(nil), // 0: penumbra.core.component.chain.v1alpha1.EffectHash - (*ChainParameters)(nil), // 1: penumbra.core.component.chain.v1alpha1.ChainParameters - (*Ratio)(nil), // 2: penumbra.core.component.chain.v1alpha1.Ratio - (*FmdParameters)(nil), // 3: penumbra.core.component.chain.v1alpha1.FmdParameters - (*KnownAssets)(nil), // 4: penumbra.core.component.chain.v1alpha1.KnownAssets - (*NoteSource)(nil), // 5: penumbra.core.component.chain.v1alpha1.NoteSource - (*SpendInfo)(nil), // 6: penumbra.core.component.chain.v1alpha1.SpendInfo - (*GenesisAppState)(nil), // 7: penumbra.core.component.chain.v1alpha1.GenesisAppState - (*GenesisContent)(nil), // 8: penumbra.core.component.chain.v1alpha1.GenesisContent - (*Epoch)(nil), // 9: penumbra.core.component.chain.v1alpha1.Epoch - (*EpochByHeightRequest)(nil), // 10: penumbra.core.component.chain.v1alpha1.EpochByHeightRequest - (*EpochByHeightResponse)(nil), // 11: penumbra.core.component.chain.v1alpha1.EpochByHeightResponse - (*GenesisContent_Allocation)(nil), // 12: penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation - (*v1alpha1.Amount)(nil), // 13: penumbra.core.num.v1alpha1.Amount - (*v1alpha11.DenomMetadata)(nil), // 14: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha12.Validator)(nil), // 15: penumbra.core.component.stake.v1alpha1.Validator - (*v1alpha13.Address)(nil), // 16: penumbra.core.keys.v1alpha1.Address + (*EffectHash)(nil), // 0: penumbra.core.component.chain.v1alpha1.EffectHash + (*ChainParameters)(nil), // 1: penumbra.core.component.chain.v1alpha1.ChainParameters + (*Ratio)(nil), // 2: penumbra.core.component.chain.v1alpha1.Ratio + (*FmdParameters)(nil), // 3: penumbra.core.component.chain.v1alpha1.FmdParameters + (*KnownAssets)(nil), // 4: penumbra.core.component.chain.v1alpha1.KnownAssets + (*NoteSource)(nil), // 5: penumbra.core.component.chain.v1alpha1.NoteSource + (*SpendInfo)(nil), // 6: penumbra.core.component.chain.v1alpha1.SpendInfo + (*GenesisContent)(nil), // 7: penumbra.core.component.chain.v1alpha1.GenesisContent + (*Epoch)(nil), // 8: penumbra.core.component.chain.v1alpha1.Epoch + (*EpochByHeightRequest)(nil), // 9: penumbra.core.component.chain.v1alpha1.EpochByHeightRequest + (*EpochByHeightResponse)(nil), // 10: penumbra.core.component.chain.v1alpha1.EpochByHeightResponse + (*v1alpha1.DenomMetadata)(nil), // 11: penumbra.core.asset.v1alpha1.DenomMetadata } var file_penumbra_core_component_chain_v1alpha1_chain_proto_depIdxs = []int32{ - 13, // 0: penumbra.core.component.chain.v1alpha1.ChainParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 14, // 1: penumbra.core.component.chain.v1alpha1.KnownAssets.assets:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 5, // 2: penumbra.core.component.chain.v1alpha1.SpendInfo.note_source:type_name -> penumbra.core.component.chain.v1alpha1.NoteSource - 8, // 3: penumbra.core.component.chain.v1alpha1.GenesisAppState.genesis_content:type_name -> penumbra.core.component.chain.v1alpha1.GenesisContent - 1, // 4: penumbra.core.component.chain.v1alpha1.GenesisContent.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 15, // 5: penumbra.core.component.chain.v1alpha1.GenesisContent.validators:type_name -> penumbra.core.component.stake.v1alpha1.Validator - 12, // 6: penumbra.core.component.chain.v1alpha1.GenesisContent.allocations:type_name -> penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation - 9, // 7: penumbra.core.component.chain.v1alpha1.EpochByHeightResponse.epoch:type_name -> penumbra.core.component.chain.v1alpha1.Epoch - 13, // 8: penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 16, // 9: penumbra.core.component.chain.v1alpha1.GenesisContent.Allocation.address:type_name -> penumbra.core.keys.v1alpha1.Address - 10, // 10: penumbra.core.component.chain.v1alpha1.QueryService.EpochByHeight:input_type -> penumbra.core.component.chain.v1alpha1.EpochByHeightRequest - 11, // 11: penumbra.core.component.chain.v1alpha1.QueryService.EpochByHeight:output_type -> penumbra.core.component.chain.v1alpha1.EpochByHeightResponse - 11, // [11:12] is the sub-list for method output_type - 10, // [10:11] is the sub-list for method input_type - 10, // [10:10] is the sub-list for extension type_name - 10, // [10:10] is the sub-list for extension extendee - 0, // [0:10] is the sub-list for field type_name + 11, // 0: penumbra.core.component.chain.v1alpha1.KnownAssets.assets:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 5, // 1: penumbra.core.component.chain.v1alpha1.SpendInfo.note_source:type_name -> penumbra.core.component.chain.v1alpha1.NoteSource + 1, // 2: penumbra.core.component.chain.v1alpha1.GenesisContent.chain_params:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 8, // 3: penumbra.core.component.chain.v1alpha1.EpochByHeightResponse.epoch:type_name -> penumbra.core.component.chain.v1alpha1.Epoch + 9, // 4: penumbra.core.component.chain.v1alpha1.QueryService.EpochByHeight:input_type -> penumbra.core.component.chain.v1alpha1.EpochByHeightRequest + 10, // 5: penumbra.core.component.chain.v1alpha1.QueryService.EpochByHeight:output_type -> penumbra.core.component.chain.v1alpha1.EpochByHeightResponse + 5, // [5:6] is the sub-list for method output_type + 4, // [4:5] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_penumbra_core_component_chain_v1alpha1_chain_proto_init() } @@ -1240,18 +822,6 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_init() { } } file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenesisAppState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenesisContent); i { case 0: return &v.state @@ -1263,7 +833,7 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_init() { return nil } } - file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Epoch); i { case 0: return &v.state @@ -1275,7 +845,7 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_init() { return nil } } - file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EpochByHeightRequest); i { case 0: return &v.state @@ -1287,7 +857,7 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_init() { return nil } } - file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EpochByHeightResponse); i { case 0: return &v.state @@ -1299,22 +869,6 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_init() { return nil } } - file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenesisContent_Allocation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_penumbra_core_component_chain_v1alpha1_chain_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*GenesisAppState_GenesisContent)(nil), - (*GenesisAppState_GenesisCheckpoint)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -1322,7 +876,7 @@ func file_penumbra_core_component_chain_v1alpha1_chain_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_chain_v1alpha1_chain_proto_rawDesc, NumEnums: 0, - NumMessages: 13, + NumMessages: 11, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go index 9b6c956a7c..c5a36d4e82 100644 --- a/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go +++ b/proto/go/gen/penumbra/core/component/dao/v1alpha1/dao.pb.go @@ -10,6 +10,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + sync "sync" ) const ( @@ -19,6 +20,104 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Dao parameter data. +type DaoParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether DAO spend proposals are enabled. + DaoSpendProposalsEnabled bool `protobuf:"varint,1,opt,name=dao_spend_proposals_enabled,json=daoSpendProposalsEnabled,proto3" json:"dao_spend_proposals_enabled,omitempty"` +} + +func (x *DaoParameters) Reset() { + *x = DaoParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DaoParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DaoParameters) ProtoMessage() {} + +func (x *DaoParameters) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DaoParameters.ProtoReflect.Descriptor instead. +func (*DaoParameters) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP(), []int{0} +} + +func (x *DaoParameters) GetDaoSpendProposalsEnabled() bool { + if x != nil { + return x.DaoSpendProposalsEnabled + } + return false +} + +// Dao genesis state. +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Dao parameters. + DaoParams *DaoParameters `protobuf:"bytes,1,opt,name=dao_params,json=daoParams,proto3" json:"dao_params,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP(), []int{1} +} + +func (x *GenesisContent) GetDaoParams() *DaoParameters { + if x != nil { + return x.DaoParams + } + return nil +} + var File_penumbra_core_component_dao_v1alpha1_dao_proto protoreflect.FileDescriptor var file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc = []byte{ @@ -27,37 +126,66 @@ var file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc = []byte{ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x61, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0xca, 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x22, 0x4e, 0x0a, 0x0d, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x64, 0x61, 0x6f, 0x5f, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x5f, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x64, 0x61, + 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x64, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x64, 0x61, 0x6f, 0x5f, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x42, 0x08, 0x44, 0x61, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x61, 0x6f, 0x2f, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x3b, 0x64, 0x61, 0x6f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x44, 0xaa, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x44, 0x61, 0x6f, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, - 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x44, 0x61, 0x6f, 0x5c, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, - 0x44, 0x61, 0x6f, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x44, 0x61, 0x6f, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_penumbra_core_component_dao_v1alpha1_dao_proto_goTypes = []interface{}{} + 0x68, 0x61, 0x31, 0x2e, 0x44, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x09, 0x64, 0x61, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xca, 0x02, 0x0a, + 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x61, 0x6f, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x44, 0x61, 0x6f, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x61, + 0x6f, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x64, 0x61, 0x6f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x44, 0xaa, 0x02, 0x24, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x44, 0x61, 0x6f, 0x2e, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x44, + 0x61, 0x6f, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x44, 0x61, 0x6f, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, + 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x44, 0x61, 0x6f, 0x3a, + 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescOnce sync.Once + file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData = file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc +) + +func file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescGZIP() []byte { + file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescOnce.Do(func() { + file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData = protoimpl.X.CompressGZIP(file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData) + }) + return file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDescData +} + +var file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_penumbra_core_component_dao_v1alpha1_dao_proto_goTypes = []interface{}{ + (*DaoParameters)(nil), // 0: penumbra.core.component.dao.v1alpha1.DaoParameters + (*GenesisContent)(nil), // 1: penumbra.core.component.dao.v1alpha1.GenesisContent +} var file_penumbra_core_component_dao_v1alpha1_dao_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 0, // 0: penumbra.core.component.dao.v1alpha1.GenesisContent.dao_params:type_name -> penumbra.core.component.dao.v1alpha1.DaoParameters + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name } func init() { file_penumbra_core_component_dao_v1alpha1_dao_proto_init() } @@ -65,18 +193,45 @@ func file_penumbra_core_component_dao_v1alpha1_dao_proto_init() { if File_penumbra_core_component_dao_v1alpha1_dao_proto != nil { return } + if !protoimpl.UnsafeEnabled { + file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DaoParameters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc, NumEnums: 0, - NumMessages: 0, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, GoTypes: file_penumbra_core_component_dao_v1alpha1_dao_proto_goTypes, DependencyIndexes: file_penumbra_core_component_dao_v1alpha1_dao_proto_depIdxs, + MessageInfos: file_penumbra_core_component_dao_v1alpha1_dao_proto_msgTypes, }.Build() File_penumbra_core_component_dao_v1alpha1_dao_proto = out.File file_penumbra_core_component_dao_v1alpha1_dao_proto_rawDesc = nil diff --git a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go index ede60d644e..defe18ba6d 100644 --- a/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go +++ b/proto/go/gen/penumbra/core/component/governance/v1alpha1/governance.pb.go @@ -1615,6 +1615,142 @@ func (x *ProposalRateDataResponse) GetRateData() *v1alpha15.RateData { return nil } +// Governance configuration data. +type GovernanceParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of blocks during which a proposal is voted on. + ProposalVotingBlocks uint64 `protobuf:"varint,1,opt,name=proposal_voting_blocks,json=proposalVotingBlocks,proto3" json:"proposal_voting_blocks,omitempty"` + // The deposit required to create a proposal. + ProposalDepositAmount *v1alpha1.Amount `protobuf:"bytes,2,opt,name=proposal_deposit_amount,json=proposalDepositAmount,proto3" json:"proposal_deposit_amount,omitempty"` + // The quorum required for a proposal to be considered valid, as a fraction of the total stake + // weight of the network. + ProposalValidQuorum string `protobuf:"bytes,3,opt,name=proposal_valid_quorum,json=proposalValidQuorum,proto3" json:"proposal_valid_quorum,omitempty"` + // The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. + ProposalPassThreshold string `protobuf:"bytes,4,opt,name=proposal_pass_threshold,json=proposalPassThreshold,proto3" json:"proposal_pass_threshold,omitempty"` + // The threshold for a proposal to be slashed, regardless of whether the "yes" and "no" votes + // would have passed it, as a ratio of "no" votes over all total votes. + ProposalSlashThreshold string `protobuf:"bytes,5,opt,name=proposal_slash_threshold,json=proposalSlashThreshold,proto3" json:"proposal_slash_threshold,omitempty"` +} + +func (x *GovernanceParameters) Reset() { + *x = GovernanceParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GovernanceParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GovernanceParameters) ProtoMessage() {} + +func (x *GovernanceParameters) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GovernanceParameters.ProtoReflect.Descriptor instead. +func (*GovernanceParameters) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{22} +} + +func (x *GovernanceParameters) GetProposalVotingBlocks() uint64 { + if x != nil { + return x.ProposalVotingBlocks + } + return 0 +} + +func (x *GovernanceParameters) GetProposalDepositAmount() *v1alpha1.Amount { + if x != nil { + return x.ProposalDepositAmount + } + return nil +} + +func (x *GovernanceParameters) GetProposalValidQuorum() string { + if x != nil { + return x.ProposalValidQuorum + } + return "" +} + +func (x *GovernanceParameters) GetProposalPassThreshold() string { + if x != nil { + return x.ProposalPassThreshold + } + return "" +} + +func (x *GovernanceParameters) GetProposalSlashThreshold() string { + if x != nil { + return x.ProposalSlashThreshold + } + return "" +} + +// Governance genesis state. +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Governance parameters. + GovernanceParams *GovernanceParameters `protobuf:"bytes,1,opt,name=governance_params,json=governanceParams,proto3" json:"governance_params,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZIP(), []int{23} +} + +func (x *GenesisContent) GetGovernanceParams() *GovernanceParameters { + if x != nil { + return x.GovernanceParams + } + return nil +} + type DelegatorVoteView_Visible struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1627,7 +1763,7 @@ type DelegatorVoteView_Visible struct { func (x *DelegatorVoteView_Visible) Reset() { *x = DelegatorVoteView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[22] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1640,7 +1776,7 @@ func (x *DelegatorVoteView_Visible) String() string { func (*DelegatorVoteView_Visible) ProtoMessage() {} func (x *DelegatorVoteView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[22] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1681,7 +1817,7 @@ type DelegatorVoteView_Opaque struct { func (x *DelegatorVoteView_Opaque) Reset() { *x = DelegatorVoteView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[23] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1694,7 +1830,7 @@ func (x *DelegatorVoteView_Opaque) String() string { func (*DelegatorVoteView_Opaque) ProtoMessage() {} func (x *DelegatorVoteView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[23] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1727,7 +1863,7 @@ type ProposalState_Voting struct { func (x *ProposalState_Voting) Reset() { *x = ProposalState_Voting{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[24] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1740,7 +1876,7 @@ func (x *ProposalState_Voting) String() string { func (*ProposalState_Voting) ProtoMessage() {} func (x *ProposalState_Voting) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[24] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,7 +1905,7 @@ type ProposalState_Withdrawn struct { func (x *ProposalState_Withdrawn) Reset() { *x = ProposalState_Withdrawn{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[25] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1782,7 +1918,7 @@ func (x *ProposalState_Withdrawn) String() string { func (*ProposalState_Withdrawn) ProtoMessage() {} func (x *ProposalState_Withdrawn) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[25] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1817,7 +1953,7 @@ type ProposalState_Finished struct { func (x *ProposalState_Finished) Reset() { *x = ProposalState_Finished{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[26] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1830,7 +1966,7 @@ func (x *ProposalState_Finished) String() string { func (*ProposalState_Finished) ProtoMessage() {} func (x *ProposalState_Finished) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[26] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1865,7 +2001,7 @@ type ProposalState_Claimed struct { func (x *ProposalState_Claimed) Reset() { *x = ProposalState_Claimed{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[27] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1878,7 +2014,7 @@ func (x *ProposalState_Claimed) String() string { func (*ProposalState_Claimed) ProtoMessage() {} func (x *ProposalState_Claimed) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[27] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1914,7 +2050,7 @@ type ProposalOutcome_Withdrawn struct { func (x *ProposalOutcome_Withdrawn) Reset() { *x = ProposalOutcome_Withdrawn{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[28] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1927,7 +2063,7 @@ func (x *ProposalOutcome_Withdrawn) String() string { func (*ProposalOutcome_Withdrawn) ProtoMessage() {} func (x *ProposalOutcome_Withdrawn) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[28] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1960,7 +2096,7 @@ type ProposalOutcome_Passed struct { func (x *ProposalOutcome_Passed) Reset() { *x = ProposalOutcome_Passed{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[29] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1973,7 +2109,7 @@ func (x *ProposalOutcome_Passed) String() string { func (*ProposalOutcome_Passed) ProtoMessage() {} func (x *ProposalOutcome_Passed) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[29] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2002,7 +2138,7 @@ type ProposalOutcome_Failed struct { func (x *ProposalOutcome_Failed) Reset() { *x = ProposalOutcome_Failed{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[30] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2015,7 +2151,7 @@ func (x *ProposalOutcome_Failed) String() string { func (*ProposalOutcome_Failed) ProtoMessage() {} func (x *ProposalOutcome_Failed) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[30] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2051,7 +2187,7 @@ type ProposalOutcome_Slashed struct { func (x *ProposalOutcome_Slashed) Reset() { *x = ProposalOutcome_Slashed{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[31] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2064,7 +2200,7 @@ func (x *ProposalOutcome_Slashed) String() string { func (*ProposalOutcome_Slashed) ProtoMessage() {} func (x *ProposalOutcome_Slashed) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[31] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2103,7 +2239,7 @@ type Proposal_Signaling struct { func (x *Proposal_Signaling) Reset() { *x = Proposal_Signaling{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[32] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2116,7 +2252,7 @@ func (x *Proposal_Signaling) String() string { func (*Proposal_Signaling) ProtoMessage() {} func (x *Proposal_Signaling) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[32] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2156,7 +2292,7 @@ type Proposal_Emergency struct { func (x *Proposal_Emergency) Reset() { *x = Proposal_Emergency{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[33] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2169,7 +2305,7 @@ func (x *Proposal_Emergency) String() string { func (*Proposal_Emergency) ProtoMessage() {} func (x *Proposal_Emergency) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[33] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2211,7 +2347,7 @@ type Proposal_ParameterChange struct { func (x *Proposal_ParameterChange) Reset() { *x = Proposal_ParameterChange{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[34] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2224,7 +2360,7 @@ func (x *Proposal_ParameterChange) String() string { func (*Proposal_ParameterChange) ProtoMessage() {} func (x *Proposal_ParameterChange) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[34] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2271,7 +2407,7 @@ type Proposal_DaoSpend struct { func (x *Proposal_DaoSpend) Reset() { *x = Proposal_DaoSpend{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[35] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2284,7 +2420,7 @@ func (x *Proposal_DaoSpend) String() string { func (*Proposal_DaoSpend) ProtoMessage() {} func (x *Proposal_DaoSpend) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[35] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2320,7 +2456,7 @@ type Proposal_UpgradePlan struct { func (x *Proposal_UpgradePlan) Reset() { *x = Proposal_UpgradePlan{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[36] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2333,7 +2469,7 @@ func (x *Proposal_UpgradePlan) String() string { func (*Proposal_UpgradePlan) ProtoMessage() {} func (x *Proposal_UpgradePlan) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[36] + mi := &file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2749,53 +2885,82 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc = 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x32, - 0xc8, 0x02, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x70, 0x6f, - 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, - 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, - 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x82, 0x03, 0x0a, 0x2f, 0x63, - 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0f, - 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x67, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, - 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, - 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, - 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2f, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x47, 0x6f, 0x76, 0x65, 0x72, - 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, + 0xce, 0x02, 0x0a, 0x14, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, + 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x5a, + 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x71, 0x75, 0x6f, + 0x72, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x72, 0x6f, 0x70, 0x6f, + 0x73, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x51, 0x75, 0x6f, 0x72, 0x75, 0x6d, 0x12, 0x36, + 0x0a, 0x17, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, + 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x15, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x50, 0x61, 0x73, 0x73, 0x54, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x5f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x22, 0x80, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x11, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, + 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x6f, 0x76, + 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x52, 0x10, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x32, 0xc8, 0x02, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x10, 0x50, + 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x45, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x61, 0x74, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x82, + 0x03, 0x0a, 0x2f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x42, 0x0f, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x6d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, + 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x67, 0x6f, + 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x3b, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x47, 0xaa, 0x02, 0x2b, 0x50, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, + 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2b, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x37, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x5c, 0x47, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x5c, 0x56, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x2f, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, + 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x47, + 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2811,7 +2976,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDescGZ } var file_penumbra_core_component_governance_v1alpha1_governance_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = []interface{}{ (Vote_Vote)(0), // 0: penumbra.core.component.governance.v1alpha1.Vote.Vote (*ZKDelegatorVoteProof)(nil), // 1: penumbra.core.component.governance.v1alpha1.ZKDelegatorVoteProof @@ -2836,91 +3001,95 @@ var file_penumbra_core_component_governance_v1alpha1_governance_proto_goTypes = (*ProposalInfoResponse)(nil), // 20: penumbra.core.component.governance.v1alpha1.ProposalInfoResponse (*ProposalRateDataRequest)(nil), // 21: penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest (*ProposalRateDataResponse)(nil), // 22: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse - (*DelegatorVoteView_Visible)(nil), // 23: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible - (*DelegatorVoteView_Opaque)(nil), // 24: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque - (*ProposalState_Voting)(nil), // 25: penumbra.core.component.governance.v1alpha1.ProposalState.Voting - (*ProposalState_Withdrawn)(nil), // 26: penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn - (*ProposalState_Finished)(nil), // 27: penumbra.core.component.governance.v1alpha1.ProposalState.Finished - (*ProposalState_Claimed)(nil), // 28: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed - (*ProposalOutcome_Withdrawn)(nil), // 29: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - (*ProposalOutcome_Passed)(nil), // 30: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed - (*ProposalOutcome_Failed)(nil), // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed - (*ProposalOutcome_Slashed)(nil), // 32: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed - (*Proposal_Signaling)(nil), // 33: penumbra.core.component.governance.v1alpha1.Proposal.Signaling - (*Proposal_Emergency)(nil), // 34: penumbra.core.component.governance.v1alpha1.Proposal.Emergency - (*Proposal_ParameterChange)(nil), // 35: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange - (*Proposal_DaoSpend)(nil), // 36: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend - (*Proposal_UpgradePlan)(nil), // 37: penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan - (*v1alpha1.Amount)(nil), // 38: penumbra.core.num.v1alpha1.Amount - (*v1alpha11.SpendAuthSignature)(nil), // 39: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha12.IdentityKey)(nil), // 40: penumbra.core.keys.v1alpha1.IdentityKey - (*v1alpha12.GovernanceKey)(nil), // 41: penumbra.core.keys.v1alpha1.GovernanceKey - (*v1alpha13.Value)(nil), // 42: penumbra.core.asset.v1alpha1.Value - (*v1alpha14.Note)(nil), // 43: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha12.Address)(nil), // 44: penumbra.core.keys.v1alpha1.Address - (*v1alpha15.RateData)(nil), // 45: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha14.NoteView)(nil), // 46: penumbra.core.component.shielded_pool.v1alpha1.NoteView - (*v1alpha16.ChainParameters)(nil), // 47: penumbra.core.component.chain.v1alpha1.ChainParameters - (*anypb.Any)(nil), // 48: google.protobuf.Any + (*GovernanceParameters)(nil), // 23: penumbra.core.component.governance.v1alpha1.GovernanceParameters + (*GenesisContent)(nil), // 24: penumbra.core.component.governance.v1alpha1.GenesisContent + (*DelegatorVoteView_Visible)(nil), // 25: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible + (*DelegatorVoteView_Opaque)(nil), // 26: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque + (*ProposalState_Voting)(nil), // 27: penumbra.core.component.governance.v1alpha1.ProposalState.Voting + (*ProposalState_Withdrawn)(nil), // 28: penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn + (*ProposalState_Finished)(nil), // 29: penumbra.core.component.governance.v1alpha1.ProposalState.Finished + (*ProposalState_Claimed)(nil), // 30: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed + (*ProposalOutcome_Withdrawn)(nil), // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + (*ProposalOutcome_Passed)(nil), // 32: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed + (*ProposalOutcome_Failed)(nil), // 33: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed + (*ProposalOutcome_Slashed)(nil), // 34: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed + (*Proposal_Signaling)(nil), // 35: penumbra.core.component.governance.v1alpha1.Proposal.Signaling + (*Proposal_Emergency)(nil), // 36: penumbra.core.component.governance.v1alpha1.Proposal.Emergency + (*Proposal_ParameterChange)(nil), // 37: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange + (*Proposal_DaoSpend)(nil), // 38: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend + (*Proposal_UpgradePlan)(nil), // 39: penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan + (*v1alpha1.Amount)(nil), // 40: penumbra.core.num.v1alpha1.Amount + (*v1alpha11.SpendAuthSignature)(nil), // 41: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha12.IdentityKey)(nil), // 42: penumbra.core.keys.v1alpha1.IdentityKey + (*v1alpha12.GovernanceKey)(nil), // 43: penumbra.core.keys.v1alpha1.GovernanceKey + (*v1alpha13.Value)(nil), // 44: penumbra.core.asset.v1alpha1.Value + (*v1alpha14.Note)(nil), // 45: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha12.Address)(nil), // 46: penumbra.core.keys.v1alpha1.Address + (*v1alpha15.RateData)(nil), // 47: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha14.NoteView)(nil), // 48: penumbra.core.component.shielded_pool.v1alpha1.NoteView + (*v1alpha16.ChainParameters)(nil), // 49: penumbra.core.component.chain.v1alpha1.ChainParameters + (*anypb.Any)(nil), // 50: google.protobuf.Any } var file_penumbra_core_component_governance_v1alpha1_governance_proto_depIdxs = []int32{ 18, // 0: penumbra.core.component.governance.v1alpha1.ProposalSubmit.proposal:type_name -> penumbra.core.component.governance.v1alpha1.Proposal - 38, // 1: penumbra.core.component.governance.v1alpha1.ProposalSubmit.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 38, // 2: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 40, // 1: penumbra.core.component.governance.v1alpha1.ProposalSubmit.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 40, // 2: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim.deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount 16, // 3: penumbra.core.component.governance.v1alpha1.ProposalDepositClaim.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome 6, // 4: penumbra.core.component.governance.v1alpha1.ValidatorVote.body:type_name -> penumbra.core.component.governance.v1alpha1.ValidatorVoteBody - 39, // 5: penumbra.core.component.governance.v1alpha1.ValidatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 41, // 5: penumbra.core.component.governance.v1alpha1.ValidatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 14, // 6: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 40, // 7: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 41, // 8: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey + 42, // 7: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 43, // 8: penumbra.core.component.governance.v1alpha1.ValidatorVoteBody.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey 8, // 9: penumbra.core.component.governance.v1alpha1.DelegatorVote.body:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteBody - 39, // 10: penumbra.core.component.governance.v1alpha1.DelegatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 41, // 10: penumbra.core.component.governance.v1alpha1.DelegatorVote.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 1, // 11: penumbra.core.component.governance.v1alpha1.DelegatorVote.proof:type_name -> penumbra.core.component.governance.v1alpha1.ZKDelegatorVoteProof 14, // 12: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 42, // 13: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.value:type_name -> penumbra.core.asset.v1alpha1.Value - 38, // 14: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 23, // 15: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible - 24, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque + 44, // 13: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.value:type_name -> penumbra.core.asset.v1alpha1.Value + 40, // 14: penumbra.core.component.governance.v1alpha1.DelegatorVoteBody.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 25, // 15: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.visible:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible + 26, // 16: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.opaque:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque 14, // 17: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote - 43, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note - 38, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 42, // 20: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value - 42, // 21: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value - 42, // 22: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value - 44, // 23: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address + 45, // 18: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.staked_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note + 40, // 19: penumbra.core.component.governance.v1alpha1.DelegatorVotePlan.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 44, // 20: penumbra.core.component.governance.v1alpha1.DaoDeposit.value:type_name -> penumbra.core.asset.v1alpha1.Value + 44, // 21: penumbra.core.component.governance.v1alpha1.DaoSpend.value:type_name -> penumbra.core.asset.v1alpha1.Value + 44, // 22: penumbra.core.component.governance.v1alpha1.DaoOutput.value:type_name -> penumbra.core.asset.v1alpha1.Value + 46, // 23: penumbra.core.component.governance.v1alpha1.DaoOutput.address:type_name -> penumbra.core.keys.v1alpha1.Address 0, // 24: penumbra.core.component.governance.v1alpha1.Vote.vote:type_name -> penumbra.core.component.governance.v1alpha1.Vote.Vote - 25, // 25: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting - 26, // 26: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn - 27, // 27: penumbra.core.component.governance.v1alpha1.ProposalState.finished:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Finished - 28, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.claimed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Claimed - 30, // 29: penumbra.core.component.governance.v1alpha1.ProposalOutcome.passed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed - 31, // 30: penumbra.core.component.governance.v1alpha1.ProposalOutcome.failed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed - 32, // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.slashed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed - 33, // 32: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling - 34, // 33: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency - 35, // 34: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange - 36, // 35: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend - 37, // 36: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan - 45, // 37: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 7, // 38: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 46, // 39: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 7, // 40: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote - 16, // 41: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 16, // 42: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome - 29, // 43: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 29, // 44: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn - 47, // 45: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 47, // 46: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters - 48, // 47: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any - 19, // 48: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest - 21, // 49: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest - 20, // 50: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse - 22, // 51: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse - 50, // [50:52] is the sub-list for method output_type - 48, // [48:50] is the sub-list for method input_type - 48, // [48:48] is the sub-list for extension type_name - 48, // [48:48] is the sub-list for extension extendee - 0, // [0:48] is the sub-list for field type_name + 27, // 25: penumbra.core.component.governance.v1alpha1.ProposalState.voting:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Voting + 28, // 26: penumbra.core.component.governance.v1alpha1.ProposalState.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Withdrawn + 29, // 27: penumbra.core.component.governance.v1alpha1.ProposalState.finished:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Finished + 30, // 28: penumbra.core.component.governance.v1alpha1.ProposalState.claimed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalState.Claimed + 32, // 29: penumbra.core.component.governance.v1alpha1.ProposalOutcome.passed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Passed + 33, // 30: penumbra.core.component.governance.v1alpha1.ProposalOutcome.failed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed + 34, // 31: penumbra.core.component.governance.v1alpha1.ProposalOutcome.slashed:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed + 35, // 32: penumbra.core.component.governance.v1alpha1.Proposal.signaling:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Signaling + 36, // 33: penumbra.core.component.governance.v1alpha1.Proposal.emergency:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.Emergency + 37, // 34: penumbra.core.component.governance.v1alpha1.Proposal.parameter_change:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange + 38, // 35: penumbra.core.component.governance.v1alpha1.Proposal.dao_spend:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend + 39, // 36: penumbra.core.component.governance.v1alpha1.Proposal.upgrade_plan:type_name -> penumbra.core.component.governance.v1alpha1.Proposal.UpgradePlan + 47, // 37: penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData + 40, // 38: penumbra.core.component.governance.v1alpha1.GovernanceParameters.proposal_deposit_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 23, // 39: penumbra.core.component.governance.v1alpha1.GenesisContent.governance_params:type_name -> penumbra.core.component.governance.v1alpha1.GovernanceParameters + 7, // 40: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 48, // 41: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 7, // 42: penumbra.core.component.governance.v1alpha1.DelegatorVoteView.Opaque.delegator_vote:type_name -> penumbra.core.component.governance.v1alpha1.DelegatorVote + 16, // 43: penumbra.core.component.governance.v1alpha1.ProposalState.Finished.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 16, // 44: penumbra.core.component.governance.v1alpha1.ProposalState.Claimed.outcome:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome + 31, // 45: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Failed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 31, // 46: penumbra.core.component.governance.v1alpha1.ProposalOutcome.Slashed.withdrawn:type_name -> penumbra.core.component.governance.v1alpha1.ProposalOutcome.Withdrawn + 49, // 47: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.old_parameters:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 49, // 48: penumbra.core.component.governance.v1alpha1.Proposal.ParameterChange.new_parameters:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 50, // 49: penumbra.core.component.governance.v1alpha1.Proposal.DaoSpend.transaction_plan:type_name -> google.protobuf.Any + 19, // 50: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:input_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoRequest + 21, // 51: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:input_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataRequest + 20, // 52: penumbra.core.component.governance.v1alpha1.QueryService.ProposalInfo:output_type -> penumbra.core.component.governance.v1alpha1.ProposalInfoResponse + 22, // 53: penumbra.core.component.governance.v1alpha1.QueryService.ProposalRateData:output_type -> penumbra.core.component.governance.v1alpha1.ProposalRateDataResponse + 52, // [52:54] is the sub-list for method output_type + 50, // [50:52] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_penumbra_core_component_governance_v1alpha1_governance_proto_init() } @@ -3194,7 +3363,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DelegatorVoteView_Visible); i { + switch v := v.(*GovernanceParameters); i { case 0: return &v.state case 1: @@ -3206,7 +3375,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DelegatorVoteView_Opaque); i { + switch v := v.(*GenesisContent); i { case 0: return &v.state case 1: @@ -3218,7 +3387,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalState_Voting); i { + switch v := v.(*DelegatorVoteView_Visible); i { case 0: return &v.state case 1: @@ -3230,7 +3399,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalState_Withdrawn); i { + switch v := v.(*DelegatorVoteView_Opaque); i { case 0: return &v.state case 1: @@ -3242,7 +3411,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalState_Finished); i { + switch v := v.(*ProposalState_Voting); i { case 0: return &v.state case 1: @@ -3254,7 +3423,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalState_Claimed); i { + switch v := v.(*ProposalState_Withdrawn); i { case 0: return &v.state case 1: @@ -3266,7 +3435,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalOutcome_Withdrawn); i { + switch v := v.(*ProposalState_Finished); i { case 0: return &v.state case 1: @@ -3278,7 +3447,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalOutcome_Passed); i { + switch v := v.(*ProposalState_Claimed); i { case 0: return &v.state case 1: @@ -3290,7 +3459,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalOutcome_Failed); i { + switch v := v.(*ProposalOutcome_Withdrawn); i { case 0: return &v.state case 1: @@ -3302,7 +3471,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProposalOutcome_Slashed); i { + switch v := v.(*ProposalOutcome_Passed); i { case 0: return &v.state case 1: @@ -3314,7 +3483,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Proposal_Signaling); i { + switch v := v.(*ProposalOutcome_Failed); i { case 0: return &v.state case 1: @@ -3326,7 +3495,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Proposal_Emergency); i { + switch v := v.(*ProposalOutcome_Slashed); i { case 0: return &v.state case 1: @@ -3338,7 +3507,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Proposal_ParameterChange); i { + switch v := v.(*Proposal_Signaling); i { case 0: return &v.state case 1: @@ -3350,7 +3519,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Proposal_DaoSpend); i { + switch v := v.(*Proposal_Emergency); i { case 0: return &v.state case 1: @@ -3362,6 +3531,30 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { } } file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Proposal_ParameterChange); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Proposal_DaoSpend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_governance_v1alpha1_governance_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Proposal_UpgradePlan); i { case 0: return &v.state @@ -3395,7 +3588,7 @@ func file_penumbra_core_component_governance_v1alpha1_governance_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_governance_v1alpha1_governance_proto_rawDesc, NumEnums: 1, - NumMessages: 37, + NumMessages: 39, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go b/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go index ab20bf1e80..fad5621acd 100644 --- a/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go +++ b/proto/go/gen/penumbra/core/component/ibc/v1alpha1/ibc.pb.go @@ -559,6 +559,122 @@ func (x *ClientConnections) GetConnections() []string { return nil } +// IBC configuration data. +type IbcParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether IBC (forming connections, processing IBC packets) is enabled. + IbcEnabled bool `protobuf:"varint,1,opt,name=ibc_enabled,json=ibcEnabled,proto3" json:"ibc_enabled,omitempty"` + // Whether inbound ICS-20 transfers are enabled + InboundIcs20TransfersEnabled bool `protobuf:"varint,2,opt,name=inbound_ics20_transfers_enabled,json=inboundIcs20TransfersEnabled,proto3" json:"inbound_ics20_transfers_enabled,omitempty"` + // Whether outbound ICS-20 transfers are enabled + OutboundIcs20TransfersEnabled bool `protobuf:"varint,3,opt,name=outbound_ics20_transfers_enabled,json=outboundIcs20TransfersEnabled,proto3" json:"outbound_ics20_transfers_enabled,omitempty"` +} + +func (x *IbcParameters) Reset() { + *x = IbcParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IbcParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IbcParameters) ProtoMessage() {} + +func (x *IbcParameters) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IbcParameters.ProtoReflect.Descriptor instead. +func (*IbcParameters) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDescGZIP(), []int{9} +} + +func (x *IbcParameters) GetIbcEnabled() bool { + if x != nil { + return x.IbcEnabled + } + return false +} + +func (x *IbcParameters) GetInboundIcs20TransfersEnabled() bool { + if x != nil { + return x.InboundIcs20TransfersEnabled + } + return false +} + +func (x *IbcParameters) GetOutboundIcs20TransfersEnabled() bool { + if x != nil { + return x.OutboundIcs20TransfersEnabled + } + return false +} + +// IBC genesis state. +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // IBC parameters. + IbcParams *IbcParameters `protobuf:"bytes,1,opt,name=ibc_params,json=ibcParams,proto3" json:"ibc_params,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDescGZIP(), []int{10} +} + +func (x *GenesisContent) GetIbcParams() *IbcParameters { + if x != nil { + return x.IbcParams + } + return nil +} + var File_penumbra_core_component_ibc_v1alpha1_ibc_proto protoreflect.FileDescriptor var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDesc = []byte{ @@ -646,29 +762,47 @@ var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDesc = []byte{ 0x75, 0x6e, 0x74, 0x65, 0x72, 0x22, 0x35, 0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0xca, 0x02, 0x0a, - 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x08, 0x49, 0x62, 0x63, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, - 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x69, 0x62, 0x63, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x49, 0xaa, 0x02, 0x24, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x62, 0x63, 0x2e, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, + 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc0, 0x01, 0x0a, + 0x0d, 0x49, 0x62, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x69, 0x62, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x62, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x45, 0x0a, 0x1f, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x63, 0x73, 0x32, 0x30, + 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x69, 0x6e, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x20, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x69, 0x63, 0x73, 0x32, 0x30, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x73, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x1d, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x63, 0x73, 0x32, 0x30, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, + 0x64, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x69, 0x62, 0x63, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x69, 0x62, 0x63, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xca, 0x02, 0x0a, 0x28, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x42, 0x08, 0x49, 0x62, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x5f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x3b, 0x69, 0x62, 0x63, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, + 0x02, 0x04, 0x50, 0x43, 0x43, 0x49, 0xaa, 0x02, 0x24, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x49, 0x62, 0x63, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x24, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x49, 0x62, 0x63, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x49, - 0x62, 0x63, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x30, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x49, 0x62, 0x63, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, - 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x49, 0x62, 0x63, 0x3a, - 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x62, 0x63, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x49, 0x62, 0x63, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -683,7 +817,7 @@ func file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDescGZIP() []byte { return file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDescData } -var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_goTypes = []interface{}{ (*IbcAction)(nil), // 0: penumbra.core.component.ibc.v1alpha1.IbcAction (*FungibleTokenPacketData)(nil), // 1: penumbra.core.component.ibc.v1alpha1.FungibleTokenPacketData @@ -694,26 +828,29 @@ var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_goTypes = []interface{}{ (*VerifiedHeights)(nil), // 6: penumbra.core.component.ibc.v1alpha1.VerifiedHeights (*ConnectionCounter)(nil), // 7: penumbra.core.component.ibc.v1alpha1.ConnectionCounter (*ClientConnections)(nil), // 8: penumbra.core.component.ibc.v1alpha1.ClientConnections - (*anypb.Any)(nil), // 9: google.protobuf.Any - (*v1alpha1.Amount)(nil), // 10: penumbra.core.num.v1alpha1.Amount - (*v1alpha11.Denom)(nil), // 11: penumbra.core.asset.v1alpha1.Denom - (*v1alpha12.Address)(nil), // 12: penumbra.core.keys.v1alpha1.Address - (*types.Height)(nil), // 13: ibc.core.client.v1.Height + (*IbcParameters)(nil), // 9: penumbra.core.component.ibc.v1alpha1.IbcParameters + (*GenesisContent)(nil), // 10: penumbra.core.component.ibc.v1alpha1.GenesisContent + (*anypb.Any)(nil), // 11: google.protobuf.Any + (*v1alpha1.Amount)(nil), // 12: penumbra.core.num.v1alpha1.Amount + (*v1alpha11.Denom)(nil), // 13: penumbra.core.asset.v1alpha1.Denom + (*v1alpha12.Address)(nil), // 14: penumbra.core.keys.v1alpha1.Address + (*types.Height)(nil), // 15: ibc.core.client.v1.Height } var file_penumbra_core_component_ibc_v1alpha1_ibc_proto_depIdxs = []int32{ - 9, // 0: penumbra.core.component.ibc.v1alpha1.IbcAction.raw_action:type_name -> google.protobuf.Any - 10, // 1: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.amount:type_name -> penumbra.core.num.v1alpha1.Amount - 11, // 2: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.denom:type_name -> penumbra.core.asset.v1alpha1.Denom - 12, // 3: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.return_address:type_name -> penumbra.core.keys.v1alpha1.Address - 13, // 4: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.timeout_height:type_name -> ibc.core.client.v1.Height - 9, // 5: penumbra.core.component.ibc.v1alpha1.ClientData.client_state:type_name -> google.protobuf.Any - 9, // 6: penumbra.core.component.ibc.v1alpha1.ConsensusState.consensus_state:type_name -> google.protobuf.Any - 13, // 7: penumbra.core.component.ibc.v1alpha1.VerifiedHeights.heights:type_name -> ibc.core.client.v1.Height - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 11, // 0: penumbra.core.component.ibc.v1alpha1.IbcAction.raw_action:type_name -> google.protobuf.Any + 12, // 1: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 13, // 2: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.denom:type_name -> penumbra.core.asset.v1alpha1.Denom + 14, // 3: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.return_address:type_name -> penumbra.core.keys.v1alpha1.Address + 15, // 4: penumbra.core.component.ibc.v1alpha1.Ics20Withdrawal.timeout_height:type_name -> ibc.core.client.v1.Height + 11, // 5: penumbra.core.component.ibc.v1alpha1.ClientData.client_state:type_name -> google.protobuf.Any + 11, // 6: penumbra.core.component.ibc.v1alpha1.ConsensusState.consensus_state:type_name -> google.protobuf.Any + 15, // 7: penumbra.core.component.ibc.v1alpha1.VerifiedHeights.heights:type_name -> ibc.core.client.v1.Height + 9, // 8: penumbra.core.component.ibc.v1alpha1.GenesisContent.ibc_params:type_name -> penumbra.core.component.ibc.v1alpha1.IbcParameters + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_penumbra_core_component_ibc_v1alpha1_ibc_proto_init() } @@ -830,6 +967,30 @@ func file_penumbra_core_component_ibc_v1alpha1_ibc_proto_init() { return nil } } + file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IbcParameters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_ibc_v1alpha1_ibc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -837,7 +998,7 @@ func file_penumbra_core_component_ibc_v1alpha1_ibc_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_ibc_v1alpha1_ibc_proto_rawDesc, NumEnums: 0, - NumMessages: 9, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, diff --git a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go index 6d2db8dfd1..fd30bc040c 100644 --- a/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go +++ b/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.pb.go @@ -9,6 +9,7 @@ package shielded_poolv1alpha1 import ( v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" + v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/num/v1alpha1" v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/decaf377_rdsa/v1alpha1" v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/crypto/tct/v1alpha1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -1141,6 +1142,55 @@ func (x *DenomMetadataByIdResponse) GetDenomMetadata() *v1alpha1.DenomMetadata { return nil } +// Genesis data for the shielded pool component. +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The allocations present at genesis + Allocations []*GenesisContent_Allocation `protobuf:"bytes,2,rep,name=allocations,proto3" json:"allocations,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawDescGZIP(), []int{17} +} + +func (x *GenesisContent) GetAllocations() []*GenesisContent_Allocation { + if x != nil { + return x.Allocations + } + return nil +} + type SpendView_Visible struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1153,7 +1203,7 @@ type SpendView_Visible struct { func (x *SpendView_Visible) Reset() { *x = SpendView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[17] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1166,7 +1216,7 @@ func (x *SpendView_Visible) String() string { func (*SpendView_Visible) ProtoMessage() {} func (x *SpendView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[17] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1207,7 +1257,7 @@ type SpendView_Opaque struct { func (x *SpendView_Opaque) Reset() { *x = SpendView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[18] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1220,7 +1270,7 @@ func (x *SpendView_Opaque) String() string { func (*SpendView_Opaque) ProtoMessage() {} func (x *SpendView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[18] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1256,7 +1306,7 @@ type OutputView_Visible struct { func (x *OutputView_Visible) Reset() { *x = OutputView_Visible{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[19] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1269,7 +1319,7 @@ func (x *OutputView_Visible) String() string { func (*OutputView_Visible) ProtoMessage() {} func (x *OutputView_Visible) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[19] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1317,7 +1367,7 @@ type OutputView_Opaque struct { func (x *OutputView_Opaque) Reset() { *x = OutputView_Opaque{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[20] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1330,7 +1380,7 @@ func (x *OutputView_Opaque) String() string { func (*OutputView_Opaque) ProtoMessage() {} func (x *OutputView_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[20] + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1353,6 +1403,69 @@ func (x *OutputView_Opaque) GetOutput() *Output { return nil } +type GenesisContent_Allocation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Amount *v1alpha14.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + Address *v1alpha11.Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *GenesisContent_Allocation) Reset() { + *x = GenesisContent_Allocation{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent_Allocation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent_Allocation) ProtoMessage() {} + +func (x *GenesisContent_Allocation) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent_Allocation.ProtoReflect.Descriptor instead. +func (*GenesisContent_Allocation) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawDescGZIP(), []int{17, 0} +} + +func (x *GenesisContent_Allocation) GetAmount() *v1alpha14.Amount { + if x != nil { + return x.Amount + } + return nil +} + +func (x *GenesisContent_Allocation) GetDenom() string { + if x != nil { + return x.Denom + } + return "" +} + +func (x *GenesisContent_Allocation) GetAddress() *v1alpha11.Address { + if x != nil { + return x.Address + } + return nil +} + var File_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto protoreflect.FileDescriptor var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawDesc = []byte{ @@ -1374,259 +1487,280 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawD 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x01, 0x0a, 0x04, 0x4e, - 0x6f, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, - 0x73, 0x65, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, - 0x77, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, - 0x77, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x6f, - 0x74, 0x65, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x22, 0xf1, 0x01, 0x0a, 0x0b, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x12, - 0x65, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x43, 0x69, 0x70, - 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x24, 0x0a, - 0x0c, 0x5a, 0x4b, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, + 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6e, 0x75, 0x6d, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x97, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x08, 0x4e, + 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x56, 0x69, 0x65, 0x77, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x22, 0x26, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0xf1, 0x01, 0x0a, 0x0b, 0x4e, 0x6f, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x12, 0x65, 0x0a, 0x0e, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, + 0x6f, 0x74, 0x65, 0x43, 0x69, 0x70, 0x68, 0x65, 0x72, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0d, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x0d, + 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, - 0x6e, 0x65, 0x72, 0x22, 0x32, 0x0a, 0x1a, 0x5a, 0x4b, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x81, 0x02, 0x0a, 0x05, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, - 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x12, 0x55, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, - 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, - 0x61, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x99, 0x01, 0x0a, 0x09, - 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x72, 0x6b, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x02, 0x72, 0x6b, 0x22, 0xd2, 0x03, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, - 0x64, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5d, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x6e, 0x65, 0x72, 0x22, 0x24, 0x0a, 0x0c, 0x5a, 0x4b, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x32, 0x0a, 0x1a, 0x5a, 0x4b, 0x4e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x44, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x81, 0x02, + 0x0a, 0x05, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x4d, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, + 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x55, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, + 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x64, 0x65, 0x63, 0x61, 0x66, + 0x33, 0x37, 0x37, 0x5f, 0x72, 0x64, 0x73, 0x61, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x41, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x53, 0x69, 0x67, 0x12, 0x52, 0x0a, + 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, + 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, + 0x66, 0x22, 0x99, 0x01, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x6f, 0x64, 0x79, 0x12, + 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x02, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x72, 0x6b, 0x22, 0xd2, 0x03, + 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5d, 0x0a, 0x07, 0x76, + 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, + 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x06, 0x6f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, + 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xa4, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, + 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, + 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, + 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x55, 0x0a, + 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, - 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5a, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x56, 0x69, 0x65, 0x77, 0x2e, - 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, - 0x1a, 0xa4, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x05, - 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x22, 0x8c, 0x02, 0x0a, 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, + 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, + 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, + 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, + 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, + 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, + 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4e, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x53, 0x0a, 0x05, + 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, - 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, - 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x1a, 0x55, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x0c, - 0x0a, 0x0a, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0x8c, 0x02, 0x0a, - 0x09, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, + 0x66, 0x22, 0x9e, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, + 0x12, 0x5e, 0x0a, 0x0c, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x76, + 0x6b, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x76, 0x6b, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4b, + 0x65, 0x79, 0x22, 0xa6, 0x04, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, + 0x77, 0x12, 0x5e, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, + 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, + 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, + 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xf1, + 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, - 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x72, - 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, - 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0xad, 0x01, 0x0a, 0x06, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x4e, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, - 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x53, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x5a, 0x4b, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x9e, 0x02, 0x0a, 0x0a, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x5e, 0x0a, 0x0c, 0x6e, 0x6f, - 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0b, 0x6e, - 0x6f, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x11, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x6d, - 0x6f, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x76, 0x6b, 0x5f, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, - 0x76, 0x6b, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xa6, 0x04, 0x0a, - 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x12, 0x5e, 0x0a, 0x07, 0x76, - 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, + 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, + 0x65, 0x79, 0x1a, 0x58, 0x0a, 0x06, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, - 0x48, 0x00, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x5b, 0x0a, 0x06, 0x6f, - 0x70, 0x61, 0x71, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x65, + 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x0d, 0x0a, 0x0b, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xa1, 0x02, 0x0a, 0x0a, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, + 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, + 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, + 0x77, 0x0a, 0x18, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, + 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x19, 0x44, 0x65, 0x6e, 0x6f, + 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, + 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, + 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, 0x0e, 0x47, 0x65, + 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x0b, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x9e, 0x01, 0x0a, 0x0a, 0x41, 0x6c, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, 0xb9, 0x01, 0x0a, 0x0c, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x11, + 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, + 0x64, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x48, 0x00, - 0x52, 0x06, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x1a, 0xf1, 0x01, 0x0a, 0x07, 0x56, 0x69, 0x73, - 0x69, 0x62, 0x6c, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, - 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x6e, 0x6f, - 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, - 0x52, 0x0a, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x1a, 0x58, 0x0a, 0x06, - 0x4f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x12, 0x4e, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x76, 0x69, 0x65, 0x77, 0x22, 0xa1, 0x02, 0x0a, 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x47, 0x0a, 0x0c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x73, 0x65, 0x65, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x73, 0x65, 0x65, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x6c, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, - 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x12, - 0x28, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x62, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x42, 0x6c, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x22, 0x77, 0x0a, 0x18, 0x44, 0x65, 0x6e, + 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, - 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x49, 0x64, 0x22, 0x6f, 0x0a, 0x19, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x32, 0xb9, 0x01, 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0xa8, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x12, 0x48, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, - 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x95, 0x03, 0x0a, 0x32, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x11, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, - 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x2e, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x5c, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x5c, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x31, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, - 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, - 0x3a, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x95, 0x03, 0x0a, 0x32, 0x63, 0x6f, 0x6d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, + 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x11, 0x53, + 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x73, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, + 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, + 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x3b, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, 0xaa, 0x02, + 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, + 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, + 0x2d, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, + 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, + 0x39, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, + 0x64, 0x50, 0x6f, 0x6f, 0x6c, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x31, 0x50, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, + 0x50, 0x6f, 0x6f, 0x6c, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1641,7 +1775,7 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_raw return file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawDescData } -var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_goTypes = []interface{}{ (*Note)(nil), // 0: penumbra.core.component.shielded_pool.v1alpha1.Note (*NoteView)(nil), // 1: penumbra.core.component.shielded_pool.v1alpha1.NoteView @@ -1660,59 +1794,65 @@ var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_goTy (*OutputPlan)(nil), // 14: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan (*DenomMetadataByIdRequest)(nil), // 15: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest (*DenomMetadataByIdResponse)(nil), // 16: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse - (*SpendView_Visible)(nil), // 17: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible - (*SpendView_Opaque)(nil), // 18: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque - (*OutputView_Visible)(nil), // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible - (*OutputView_Opaque)(nil), // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque - (*v1alpha1.Value)(nil), // 21: penumbra.core.asset.v1alpha1.Value - (*v1alpha11.Address)(nil), // 22: penumbra.core.keys.v1alpha1.Address - (*v1alpha1.ValueView)(nil), // 23: penumbra.core.asset.v1alpha1.ValueView - (*v1alpha11.AddressView)(nil), // 24: penumbra.core.keys.v1alpha1.AddressView - (*v1alpha12.StateCommitment)(nil), // 25: penumbra.crypto.tct.v1alpha1.StateCommitment - (*v1alpha13.SpendAuthSignature)(nil), // 26: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature - (*v1alpha1.BalanceCommitment)(nil), // 27: penumbra.core.asset.v1alpha1.BalanceCommitment - (*v1alpha1.AssetId)(nil), // 28: penumbra.core.asset.v1alpha1.AssetId - (*v1alpha1.DenomMetadata)(nil), // 29: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha11.PayloadKey)(nil), // 30: penumbra.core.keys.v1alpha1.PayloadKey + (*GenesisContent)(nil), // 17: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent + (*SpendView_Visible)(nil), // 18: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible + (*SpendView_Opaque)(nil), // 19: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque + (*OutputView_Visible)(nil), // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible + (*OutputView_Opaque)(nil), // 21: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque + (*GenesisContent_Allocation)(nil), // 22: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation + (*v1alpha1.Value)(nil), // 23: penumbra.core.asset.v1alpha1.Value + (*v1alpha11.Address)(nil), // 24: penumbra.core.keys.v1alpha1.Address + (*v1alpha1.ValueView)(nil), // 25: penumbra.core.asset.v1alpha1.ValueView + (*v1alpha11.AddressView)(nil), // 26: penumbra.core.keys.v1alpha1.AddressView + (*v1alpha12.StateCommitment)(nil), // 27: penumbra.crypto.tct.v1alpha1.StateCommitment + (*v1alpha13.SpendAuthSignature)(nil), // 28: penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + (*v1alpha1.BalanceCommitment)(nil), // 29: penumbra.core.asset.v1alpha1.BalanceCommitment + (*v1alpha1.AssetId)(nil), // 30: penumbra.core.asset.v1alpha1.AssetId + (*v1alpha1.DenomMetadata)(nil), // 31: penumbra.core.asset.v1alpha1.DenomMetadata + (*v1alpha11.PayloadKey)(nil), // 32: penumbra.core.keys.v1alpha1.PayloadKey + (*v1alpha14.Amount)(nil), // 33: penumbra.core.num.v1alpha1.Amount } var file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_depIdxs = []int32{ - 21, // 0: penumbra.core.component.shielded_pool.v1alpha1.Note.value:type_name -> penumbra.core.asset.v1alpha1.Value - 22, // 1: penumbra.core.component.shielded_pool.v1alpha1.Note.address:type_name -> penumbra.core.keys.v1alpha1.Address - 23, // 2: penumbra.core.component.shielded_pool.v1alpha1.NoteView.value:type_name -> penumbra.core.asset.v1alpha1.ValueView - 24, // 3: penumbra.core.component.shielded_pool.v1alpha1.NoteView.address:type_name -> penumbra.core.keys.v1alpha1.AddressView - 25, // 4: penumbra.core.component.shielded_pool.v1alpha1.NotePayload.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment + 23, // 0: penumbra.core.component.shielded_pool.v1alpha1.Note.value:type_name -> penumbra.core.asset.v1alpha1.Value + 24, // 1: penumbra.core.component.shielded_pool.v1alpha1.Note.address:type_name -> penumbra.core.keys.v1alpha1.Address + 25, // 2: penumbra.core.component.shielded_pool.v1alpha1.NoteView.value:type_name -> penumbra.core.asset.v1alpha1.ValueView + 26, // 3: penumbra.core.component.shielded_pool.v1alpha1.NoteView.address:type_name -> penumbra.core.keys.v1alpha1.AddressView + 27, // 4: penumbra.core.component.shielded_pool.v1alpha1.NotePayload.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 2, // 5: penumbra.core.component.shielded_pool.v1alpha1.NotePayload.encrypted_note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteCiphertext 8, // 6: penumbra.core.component.shielded_pool.v1alpha1.Spend.body:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendBody - 26, // 7: penumbra.core.component.shielded_pool.v1alpha1.Spend.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature + 28, // 7: penumbra.core.component.shielded_pool.v1alpha1.Spend.auth_sig:type_name -> penumbra.crypto.decaf377_rdsa.v1alpha1.SpendAuthSignature 5, // 8: penumbra.core.component.shielded_pool.v1alpha1.Spend.proof:type_name -> penumbra.core.component.shielded_pool.v1alpha1.ZKSpendProof - 27, // 9: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment - 17, // 10: penumbra.core.component.shielded_pool.v1alpha1.SpendView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible - 18, // 11: penumbra.core.component.shielded_pool.v1alpha1.SpendView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque + 29, // 9: penumbra.core.component.shielded_pool.v1alpha1.SpendBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment + 18, // 10: penumbra.core.component.shielded_pool.v1alpha1.SpendView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible + 19, // 11: penumbra.core.component.shielded_pool.v1alpha1.SpendView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque 0, // 12: penumbra.core.component.shielded_pool.v1alpha1.SpendPlan.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Note 12, // 13: penumbra.core.component.shielded_pool.v1alpha1.Output.body:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputBody 4, // 14: penumbra.core.component.shielded_pool.v1alpha1.Output.proof:type_name -> penumbra.core.component.shielded_pool.v1alpha1.ZKOutputProof 3, // 15: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.note_payload:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NotePayload - 27, // 16: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment - 19, // 17: penumbra.core.component.shielded_pool.v1alpha1.OutputView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible - 20, // 18: penumbra.core.component.shielded_pool.v1alpha1.OutputView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque - 21, // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.value:type_name -> penumbra.core.asset.v1alpha1.Value - 22, // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.dest_address:type_name -> penumbra.core.keys.v1alpha1.Address - 28, // 21: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId - 29, // 22: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 7, // 23: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 1, // 24: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 7, // 25: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend - 11, // 26: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 1, // 27: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView - 30, // 28: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey - 11, // 29: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output - 15, // 30: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:input_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest - 16, // 31: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:output_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse - 31, // [31:32] is the sub-list for method output_type - 30, // [30:31] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 29, // 16: penumbra.core.component.shielded_pool.v1alpha1.OutputBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment + 20, // 17: penumbra.core.component.shielded_pool.v1alpha1.OutputView.visible:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible + 21, // 18: penumbra.core.component.shielded_pool.v1alpha1.OutputView.opaque:type_name -> penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque + 23, // 19: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.value:type_name -> penumbra.core.asset.v1alpha1.Value + 24, // 20: penumbra.core.component.shielded_pool.v1alpha1.OutputPlan.dest_address:type_name -> penumbra.core.keys.v1alpha1.Address + 30, // 21: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest.asset_id:type_name -> penumbra.core.asset.v1alpha1.AssetId + 31, // 22: penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata + 22, // 23: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.allocations:type_name -> penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation + 7, // 24: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 1, // 25: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 7, // 26: penumbra.core.component.shielded_pool.v1alpha1.SpendView.Opaque.spend:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Spend + 11, // 27: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 1, // 28: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.note:type_name -> penumbra.core.component.shielded_pool.v1alpha1.NoteView + 32, // 29: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Visible.payload_key:type_name -> penumbra.core.keys.v1alpha1.PayloadKey + 11, // 30: penumbra.core.component.shielded_pool.v1alpha1.OutputView.Opaque.output:type_name -> penumbra.core.component.shielded_pool.v1alpha1.Output + 33, // 31: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.amount:type_name -> penumbra.core.num.v1alpha1.Amount + 24, // 32: penumbra.core.component.shielded_pool.v1alpha1.GenesisContent.Allocation.address:type_name -> penumbra.core.keys.v1alpha1.Address + 15, // 33: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:input_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdRequest + 16, // 34: penumbra.core.component.shielded_pool.v1alpha1.QueryService.DenomMetadataById:output_type -> penumbra.core.component.shielded_pool.v1alpha1.DenomMetadataByIdResponse + 34, // [34:35] is the sub-list for method output_type + 33, // [33:34] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_init() } @@ -1926,7 +2066,7 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_ini } } file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpendView_Visible); i { + switch v := v.(*GenesisContent); i { case 0: return &v.state case 1: @@ -1938,7 +2078,7 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_ini } } file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SpendView_Opaque); i { + switch v := v.(*SpendView_Visible); i { case 0: return &v.state case 1: @@ -1950,7 +2090,7 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_ini } } file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutputView_Visible); i { + switch v := v.(*SpendView_Opaque); i { case 0: return &v.state case 1: @@ -1962,6 +2102,18 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_ini } } file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OutputView_Visible); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*OutputView_Opaque); i { case 0: return &v.state @@ -1973,6 +2125,18 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_ini return nil } } + file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisContent_Allocation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_msgTypes[9].OneofWrappers = []interface{}{ (*SpendView_Visible_)(nil), @@ -1988,7 +2152,7 @@ func file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_ini GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_shielded_pool_v1alpha1_shielded_pool_proto_rawDesc, NumEnums: 0, - NumMessages: 21, + NumMessages: 23, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go index 1608fb4cff..e16ae1077a 100644 --- a/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go +++ b/proto/go/gen/penumbra/core/component/stake/v1alpha1/stake.pb.go @@ -2022,6 +2022,167 @@ func (x *NextValidatorRateResponse) GetData() *RateData { return nil } +// Staking configuration data. +type StakeParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of epochs an unbonding note for before being released. + UnbondingEpochs uint64 `protobuf:"varint,1,opt,name=unbonding_epochs,json=unbondingEpochs,proto3" json:"unbonding_epochs,omitempty"` + // The maximum number of validators in the consensus set. + ActiveValidatorLimit uint64 `protobuf:"varint,2,opt,name=active_validator_limit,json=activeValidatorLimit,proto3" json:"active_validator_limit,omitempty"` + // The base reward rate, expressed in basis points of basis points + BaseRewardRate uint64 `protobuf:"varint,3,opt,name=base_reward_rate,json=baseRewardRate,proto3" json:"base_reward_rate,omitempty"` + // The penalty for slashing due to misbehavior. + SlashingPenaltyMisbehavior uint64 `protobuf:"varint,4,opt,name=slashing_penalty_misbehavior,json=slashingPenaltyMisbehavior,proto3" json:"slashing_penalty_misbehavior,omitempty"` + // The penalty for slashing due to downtime. + SlashingPenaltyDowntime uint64 `protobuf:"varint,5,opt,name=slashing_penalty_downtime,json=slashingPenaltyDowntime,proto3" json:"slashing_penalty_downtime,omitempty"` + // The number of blocks in the window to check for downtime. + SignedBlocksWindowLen uint64 `protobuf:"varint,6,opt,name=signed_blocks_window_len,json=signedBlocksWindowLen,proto3" json:"signed_blocks_window_len,omitempty"` + // The maximum number of blocks in the window each validator can miss signing without slashing. + MissedBlocksMaximum uint64 `protobuf:"varint,7,opt,name=missed_blocks_maximum,json=missedBlocksMaximum,proto3" json:"missed_blocks_maximum,omitempty"` +} + +func (x *StakeParameters) Reset() { + *x = StakeParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StakeParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StakeParameters) ProtoMessage() {} + +func (x *StakeParameters) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StakeParameters.ProtoReflect.Descriptor instead. +func (*StakeParameters) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDescGZIP(), []int{30} +} + +func (x *StakeParameters) GetUnbondingEpochs() uint64 { + if x != nil { + return x.UnbondingEpochs + } + return 0 +} + +func (x *StakeParameters) GetActiveValidatorLimit() uint64 { + if x != nil { + return x.ActiveValidatorLimit + } + return 0 +} + +func (x *StakeParameters) GetBaseRewardRate() uint64 { + if x != nil { + return x.BaseRewardRate + } + return 0 +} + +func (x *StakeParameters) GetSlashingPenaltyMisbehavior() uint64 { + if x != nil { + return x.SlashingPenaltyMisbehavior + } + return 0 +} + +func (x *StakeParameters) GetSlashingPenaltyDowntime() uint64 { + if x != nil { + return x.SlashingPenaltyDowntime + } + return 0 +} + +func (x *StakeParameters) GetSignedBlocksWindowLen() uint64 { + if x != nil { + return x.SignedBlocksWindowLen + } + return 0 +} + +func (x *StakeParameters) GetMissedBlocksMaximum() uint64 { + if x != nil { + return x.MissedBlocksMaximum + } + return 0 +} + +// Genesis data for the staking component. +type GenesisContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The configuration parameters for the staking component present at genesis + StakeParams *StakeParameters `protobuf:"bytes,1,opt,name=stake_params,json=stakeParams,proto3" json:"stake_params,omitempty"` + // The list of validators present at genesis. + Validators []*Validator `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators,omitempty"` +} + +func (x *GenesisContent) Reset() { + *x = GenesisContent{} + if protoimpl.UnsafeEnabled { + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenesisContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenesisContent) ProtoMessage() {} + +func (x *GenesisContent) ProtoReflect() protoreflect.Message { + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenesisContent.ProtoReflect.Descriptor instead. +func (*GenesisContent) Descriptor() ([]byte, []int) { + return file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDescGZIP(), []int{31} +} + +func (x *GenesisContent) GetStakeParams() *StakeParameters { + if x != nil { + return x.StakeParams + } + return nil +} + +func (x *GenesisContent) GetValidators() []*Validator { + if x != nil { + return x.Validators + } + return nil +} + type FundingStream_ToAddress struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2037,7 +2198,7 @@ type FundingStream_ToAddress struct { func (x *FundingStream_ToAddress) Reset() { *x = FundingStream_ToAddress{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[30] + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2050,7 +2211,7 @@ func (x *FundingStream_ToAddress) String() string { func (*FundingStream_ToAddress) ProtoMessage() {} func (x *FundingStream_ToAddress) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[30] + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2093,7 +2254,7 @@ type FundingStream_ToDao struct { func (x *FundingStream_ToDao) Reset() { *x = FundingStream_ToDao{} if protoimpl.UnsafeEnabled { - mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31] + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2106,7 +2267,7 @@ func (x *FundingStream_ToDao) String() string { func (*FundingStream_ToDao) ProtoMessage() {} func (x *FundingStream_ToDao) ProtoReflect() protoreflect.Message { - mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31] + mi := &file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2507,78 +2668,115 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, - 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x8b, 0x06, - 0x0a, 0x0c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, - 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x87, 0x03, + 0x0a, 0x0f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x65, + 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x12, 0x34, 0x0a, 0x16, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x1c, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x5f, 0x6d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x1a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, 0x61, + 0x6c, 0x74, 0x79, 0x4d, 0x69, 0x73, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x3a, + 0x0a, 0x19, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x65, 0x6e, 0x61, 0x6c, + 0x74, 0x79, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x17, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x50, 0x65, 0x6e, 0x61, 0x6c, + 0x74, 0x79, 0x44, 0x6f, 0x77, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x69, 0x6e, 0x64, + 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x73, 0x69, + 0x67, 0x6e, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x4c, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x13, 0x6d, 0x69, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, + 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x22, 0xbf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, + 0x73, 0x69, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x5a, 0x0a, 0x0c, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x92, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x95, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, - 0x6c, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x70, 0x65, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, - 0x61, 0x6c, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa1, 0x01, 0x0a, - 0x14, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x70, 0x65, 0x6e, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x32, 0x8b, 0x06, 0x0a, 0x0c, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x0d, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x98, 0x01, 0x0a, 0x11, 0x4e, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x92, 0x01, 0x0a, 0x0f, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x95, 0x01, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, + 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x12, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xda, 0x02, 0x0a, 0x2a, - 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x6e, 0x61, 0x6c, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x14, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, + 0x65, 0x12, 0x43, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, - 0x6e, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, - 0x50, 0x43, 0x43, 0x53, 0xaa, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, - 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x26, - 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x5c, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x32, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2a, 0x50, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x3a, 0x3a, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x98, 0x01, 0x0a, + 0x11, 0x4e, 0x65, 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, + 0x74, 0x65, 0x12, 0x40, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, 0x78, 0x74, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x65, + 0x78, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xda, 0x02, 0x0a, 0x2a, 0x63, 0x6f, 0x6d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x0a, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x63, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, + 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x04, 0x50, 0x43, 0x43, 0x53, + 0xaa, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x43, 0x6f, 0x72, 0x65, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x26, 0x50, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0xe2, 0x02, 0x32, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x43, 0x6f, + 0x72, 0x65, 0x5c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x5c, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x2a, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x3a, 0x3a, 0x43, 0x6f, 0x72, 0x65, 0x3a, 0x3a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2594,7 +2792,7 @@ func file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDescGZIP() []byt } var file_penumbra_core_component_stake_v1alpha1_stake_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_penumbra_core_component_stake_v1alpha1_stake_proto_goTypes = []interface{}{ (BondingState_BondingStateEnum)(0), // 0: penumbra.core.component.stake.v1alpha1.BondingState.BondingStateEnum (ValidatorState_ValidatorStateEnum)(0), // 1: penumbra.core.component.stake.v1alpha1.ValidatorState.ValidatorStateEnum @@ -2628,23 +2826,25 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_goTypes = []interfac (*CurrentValidatorRateResponse)(nil), // 29: penumbra.core.component.stake.v1alpha1.CurrentValidatorRateResponse (*NextValidatorRateRequest)(nil), // 30: penumbra.core.component.stake.v1alpha1.NextValidatorRateRequest (*NextValidatorRateResponse)(nil), // 31: penumbra.core.component.stake.v1alpha1.NextValidatorRateResponse - (*FundingStream_ToAddress)(nil), // 32: penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress - (*FundingStream_ToDao)(nil), // 33: penumbra.core.component.stake.v1alpha1.FundingStream.ToDao - (*v1alpha1.IdentityKey)(nil), // 34: penumbra.core.keys.v1alpha1.IdentityKey - (*v1alpha1.GovernanceKey)(nil), // 35: penumbra.core.keys.v1alpha1.GovernanceKey - (*v1alpha11.Amount)(nil), // 36: penumbra.core.num.v1alpha1.Amount - (*v1alpha12.BalanceCommitment)(nil), // 37: penumbra.core.asset.v1alpha1.BalanceCommitment - (*v1alpha1.ConsensusKey)(nil), // 38: penumbra.core.keys.v1alpha1.ConsensusKey + (*StakeParameters)(nil), // 32: penumbra.core.component.stake.v1alpha1.StakeParameters + (*GenesisContent)(nil), // 33: penumbra.core.component.stake.v1alpha1.GenesisContent + (*FundingStream_ToAddress)(nil), // 34: penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress + (*FundingStream_ToDao)(nil), // 35: penumbra.core.component.stake.v1alpha1.FundingStream.ToDao + (*v1alpha1.IdentityKey)(nil), // 36: penumbra.core.keys.v1alpha1.IdentityKey + (*v1alpha1.GovernanceKey)(nil), // 37: penumbra.core.keys.v1alpha1.GovernanceKey + (*v1alpha11.Amount)(nil), // 38: penumbra.core.num.v1alpha1.Amount + (*v1alpha12.BalanceCommitment)(nil), // 39: penumbra.core.asset.v1alpha1.BalanceCommitment + (*v1alpha1.ConsensusKey)(nil), // 40: penumbra.core.keys.v1alpha1.ConsensusKey } var file_penumbra_core_component_stake_v1alpha1_stake_proto_depIdxs = []int32{ - 34, // 0: penumbra.core.component.stake.v1alpha1.Validator.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 0: penumbra.core.component.stake.v1alpha1.Validator.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 5, // 1: penumbra.core.component.stake.v1alpha1.Validator.funding_streams:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream - 35, // 2: penumbra.core.component.stake.v1alpha1.Validator.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey - 34, // 3: penumbra.core.component.stake.v1alpha1.ValidatorList.validator_keys:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 32, // 4: penumbra.core.component.stake.v1alpha1.FundingStream.to_address:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress - 33, // 5: penumbra.core.component.stake.v1alpha1.FundingStream.to_dao:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToDao - 34, // 6: penumbra.core.component.stake.v1alpha1.RateData.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 34, // 7: penumbra.core.component.stake.v1alpha1.ValidatorStatus.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 37, // 2: penumbra.core.component.stake.v1alpha1.Validator.governance_key:type_name -> penumbra.core.keys.v1alpha1.GovernanceKey + 36, // 3: penumbra.core.component.stake.v1alpha1.ValidatorList.validator_keys:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 34, // 4: penumbra.core.component.stake.v1alpha1.FundingStream.to_address:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToAddress + 35, // 5: penumbra.core.component.stake.v1alpha1.FundingStream.to_dao:type_name -> penumbra.core.component.stake.v1alpha1.FundingStream.ToDao + 36, // 6: penumbra.core.component.stake.v1alpha1.RateData.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 7: penumbra.core.component.stake.v1alpha1.ValidatorStatus.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 10, // 8: penumbra.core.component.stake.v1alpha1.ValidatorStatus.state:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorState 9, // 9: penumbra.core.component.stake.v1alpha1.ValidatorStatus.bonding_state:type_name -> penumbra.core.component.stake.v1alpha1.BondingState 0, // 10: penumbra.core.component.stake.v1alpha1.BondingState.state:type_name -> penumbra.core.component.stake.v1alpha1.BondingState.BondingStateEnum @@ -2653,46 +2853,48 @@ var file_penumbra_core_component_stake_v1alpha1_stake_proto_depIdxs = []int32{ 8, // 13: penumbra.core.component.stake.v1alpha1.ValidatorInfo.status:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorStatus 6, // 14: penumbra.core.component.stake.v1alpha1.ValidatorInfo.rate_data:type_name -> penumbra.core.component.stake.v1alpha1.RateData 3, // 15: penumbra.core.component.stake.v1alpha1.ValidatorDefinition.validator:type_name -> penumbra.core.component.stake.v1alpha1.Validator - 34, // 16: penumbra.core.component.stake.v1alpha1.Delegate.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 36, // 17: penumbra.core.component.stake.v1alpha1.Delegate.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 36, // 18: penumbra.core.component.stake.v1alpha1.Delegate.delegation_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 34, // 19: penumbra.core.component.stake.v1alpha1.Undelegate.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey - 36, // 20: penumbra.core.component.stake.v1alpha1.Undelegate.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount - 36, // 21: penumbra.core.component.stake.v1alpha1.Undelegate.delegation_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 36, // 16: penumbra.core.component.stake.v1alpha1.Delegate.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 38, // 17: penumbra.core.component.stake.v1alpha1.Delegate.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 38, // 18: penumbra.core.component.stake.v1alpha1.Delegate.delegation_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 36, // 19: penumbra.core.component.stake.v1alpha1.Undelegate.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 38, // 20: penumbra.core.component.stake.v1alpha1.Undelegate.unbonded_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 38, // 21: penumbra.core.component.stake.v1alpha1.Undelegate.delegation_amount:type_name -> penumbra.core.num.v1alpha1.Amount 16, // 22: penumbra.core.component.stake.v1alpha1.UndelegateClaim.body:type_name -> penumbra.core.component.stake.v1alpha1.UndelegateClaimBody - 34, // 23: penumbra.core.component.stake.v1alpha1.UndelegateClaimBody.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 23: penumbra.core.component.stake.v1alpha1.UndelegateClaimBody.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 21, // 24: penumbra.core.component.stake.v1alpha1.UndelegateClaimBody.penalty:type_name -> penumbra.core.component.stake.v1alpha1.Penalty - 37, // 25: penumbra.core.component.stake.v1alpha1.UndelegateClaimBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment - 34, // 26: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 39, // 25: penumbra.core.component.stake.v1alpha1.UndelegateClaimBody.balance_commitment:type_name -> penumbra.core.asset.v1alpha1.BalanceCommitment + 36, // 26: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan.validator_identity:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 21, // 27: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan.penalty:type_name -> penumbra.core.component.stake.v1alpha1.Penalty - 36, // 28: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan.unbonding_amount:type_name -> penumbra.core.num.v1alpha1.Amount + 38, // 28: penumbra.core.component.stake.v1alpha1.UndelegateClaimPlan.unbonding_amount:type_name -> penumbra.core.num.v1alpha1.Amount 13, // 29: penumbra.core.component.stake.v1alpha1.DelegationChanges.delegations:type_name -> penumbra.core.component.stake.v1alpha1.Delegate 14, // 30: penumbra.core.component.stake.v1alpha1.DelegationChanges.undelegations:type_name -> penumbra.core.component.stake.v1alpha1.Undelegate - 38, // 31: penumbra.core.component.stake.v1alpha1.CurrentConsensusKeys.consensus_keys:type_name -> penumbra.core.keys.v1alpha1.ConsensusKey + 40, // 31: penumbra.core.component.stake.v1alpha1.CurrentConsensusKeys.consensus_keys:type_name -> penumbra.core.keys.v1alpha1.ConsensusKey 11, // 32: penumbra.core.component.stake.v1alpha1.ValidatorInfoResponse.validator_info:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorInfo - 34, // 33: penumbra.core.component.stake.v1alpha1.ValidatorStatusRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 33: penumbra.core.component.stake.v1alpha1.ValidatorStatusRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 8, // 34: penumbra.core.component.stake.v1alpha1.ValidatorStatusResponse.status:type_name -> penumbra.core.component.stake.v1alpha1.ValidatorStatus - 34, // 35: penumbra.core.component.stake.v1alpha1.ValidatorPenaltyRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 35: penumbra.core.component.stake.v1alpha1.ValidatorPenaltyRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 21, // 36: penumbra.core.component.stake.v1alpha1.ValidatorPenaltyResponse.penalty:type_name -> penumbra.core.component.stake.v1alpha1.Penalty - 34, // 37: penumbra.core.component.stake.v1alpha1.CurrentValidatorRateRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 37: penumbra.core.component.stake.v1alpha1.CurrentValidatorRateRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 6, // 38: penumbra.core.component.stake.v1alpha1.CurrentValidatorRateResponse.data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 34, // 39: penumbra.core.component.stake.v1alpha1.NextValidatorRateRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey + 36, // 39: penumbra.core.component.stake.v1alpha1.NextValidatorRateRequest.identity_key:type_name -> penumbra.core.keys.v1alpha1.IdentityKey 6, // 40: penumbra.core.component.stake.v1alpha1.NextValidatorRateResponse.data:type_name -> penumbra.core.component.stake.v1alpha1.RateData - 22, // 41: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorInfo:input_type -> penumbra.core.component.stake.v1alpha1.ValidatorInfoRequest - 24, // 42: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorStatus:input_type -> penumbra.core.component.stake.v1alpha1.ValidatorStatusRequest - 26, // 43: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorPenalty:input_type -> penumbra.core.component.stake.v1alpha1.ValidatorPenaltyRequest - 28, // 44: penumbra.core.component.stake.v1alpha1.QueryService.CurrentValidatorRate:input_type -> penumbra.core.component.stake.v1alpha1.CurrentValidatorRateRequest - 30, // 45: penumbra.core.component.stake.v1alpha1.QueryService.NextValidatorRate:input_type -> penumbra.core.component.stake.v1alpha1.NextValidatorRateRequest - 23, // 46: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorInfo:output_type -> penumbra.core.component.stake.v1alpha1.ValidatorInfoResponse - 25, // 47: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorStatus:output_type -> penumbra.core.component.stake.v1alpha1.ValidatorStatusResponse - 27, // 48: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorPenalty:output_type -> penumbra.core.component.stake.v1alpha1.ValidatorPenaltyResponse - 29, // 49: penumbra.core.component.stake.v1alpha1.QueryService.CurrentValidatorRate:output_type -> penumbra.core.component.stake.v1alpha1.CurrentValidatorRateResponse - 31, // 50: penumbra.core.component.stake.v1alpha1.QueryService.NextValidatorRate:output_type -> penumbra.core.component.stake.v1alpha1.NextValidatorRateResponse - 46, // [46:51] is the sub-list for method output_type - 41, // [41:46] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 32, // 41: penumbra.core.component.stake.v1alpha1.GenesisContent.stake_params:type_name -> penumbra.core.component.stake.v1alpha1.StakeParameters + 3, // 42: penumbra.core.component.stake.v1alpha1.GenesisContent.validators:type_name -> penumbra.core.component.stake.v1alpha1.Validator + 22, // 43: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorInfo:input_type -> penumbra.core.component.stake.v1alpha1.ValidatorInfoRequest + 24, // 44: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorStatus:input_type -> penumbra.core.component.stake.v1alpha1.ValidatorStatusRequest + 26, // 45: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorPenalty:input_type -> penumbra.core.component.stake.v1alpha1.ValidatorPenaltyRequest + 28, // 46: penumbra.core.component.stake.v1alpha1.QueryService.CurrentValidatorRate:input_type -> penumbra.core.component.stake.v1alpha1.CurrentValidatorRateRequest + 30, // 47: penumbra.core.component.stake.v1alpha1.QueryService.NextValidatorRate:input_type -> penumbra.core.component.stake.v1alpha1.NextValidatorRateRequest + 23, // 48: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorInfo:output_type -> penumbra.core.component.stake.v1alpha1.ValidatorInfoResponse + 25, // 49: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorStatus:output_type -> penumbra.core.component.stake.v1alpha1.ValidatorStatusResponse + 27, // 50: penumbra.core.component.stake.v1alpha1.QueryService.ValidatorPenalty:output_type -> penumbra.core.component.stake.v1alpha1.ValidatorPenaltyResponse + 29, // 51: penumbra.core.component.stake.v1alpha1.QueryService.CurrentValidatorRate:output_type -> penumbra.core.component.stake.v1alpha1.CurrentValidatorRateResponse + 31, // 52: penumbra.core.component.stake.v1alpha1.QueryService.NextValidatorRate:output_type -> penumbra.core.component.stake.v1alpha1.NextValidatorRateResponse + 48, // [48:53] is the sub-list for method output_type + 43, // [43:48] is the sub-list for method input_type + 43, // [43:43] is the sub-list for extension type_name + 43, // [43:43] is the sub-list for extension extendee + 0, // [0:43] is the sub-list for field type_name } func init() { file_penumbra_core_component_stake_v1alpha1_stake_proto_init() } @@ -3062,7 +3264,7 @@ func file_penumbra_core_component_stake_v1alpha1_stake_proto_init() { } } file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FundingStream_ToAddress); i { + switch v := v.(*StakeParameters); i { case 0: return &v.state case 1: @@ -3074,6 +3276,30 @@ func file_penumbra_core_component_stake_v1alpha1_stake_proto_init() { } } file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenesisContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FundingStream_ToAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_penumbra_core_component_stake_v1alpha1_stake_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FundingStream_ToDao); i { case 0: return &v.state @@ -3096,7 +3322,7 @@ func file_penumbra_core_component_stake_v1alpha1_stake_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_penumbra_core_component_stake_v1alpha1_stake_proto_rawDesc, NumEnums: 2, - NumMessages: 32, + NumMessages: 34, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go index 9a5a0a5aaf..e7e88d9c82 100644 --- a/proto/go/gen/penumbra/view/v1alpha1/view.pb.go +++ b/proto/go/gen/penumbra/view/v1alpha1/view.pb.go @@ -7,14 +7,15 @@ package viewv1alpha1 import ( + v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/app/v1alpha1" v1alpha14 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/asset/v1alpha1" - v1alpha17 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" - v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dex/v1alpha1" + v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/chain/v1alpha1" + v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/dex/v1alpha1" v1alpha11 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/fee/v1alpha1" v1alpha13 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/ibc/v1alpha1" - v1alpha18 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" - v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" - v1alpha111 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" + v1alpha19 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/sct/v1alpha1" + v1alpha110 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/shielded_pool/v1alpha1" + v1alpha112 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/component/stake/v1alpha1" v1alpha12 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/keys/v1alpha1" v1alpha15 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/num/v1alpha1" v1alpha1 "github.com/penumbra-zone/penumbra/proto/go/gen/penumbra/core/transaction/v1alpha1" @@ -1746,15 +1747,15 @@ func (x *AssetsResponse) GetDenomMetadata() *v1alpha14.DenomMetadata { return nil } -// Requests the current chain parameters from the view service. -type ChainParametersRequest struct { +// Requests the current app parameters from the view service. +type AppParametersRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *ChainParametersRequest) Reset() { - *x = ChainParametersRequest{} +func (x *AppParametersRequest) Reset() { + *x = AppParametersRequest{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1762,13 +1763,13 @@ func (x *ChainParametersRequest) Reset() { } } -func (x *ChainParametersRequest) String() string { +func (x *AppParametersRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChainParametersRequest) ProtoMessage() {} +func (*AppParametersRequest) ProtoMessage() {} -func (x *ChainParametersRequest) ProtoReflect() protoreflect.Message { +func (x *AppParametersRequest) ProtoReflect() protoreflect.Message { mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1780,21 +1781,21 @@ func (x *ChainParametersRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChainParametersRequest.ProtoReflect.Descriptor instead. -func (*ChainParametersRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use AppParametersRequest.ProtoReflect.Descriptor instead. +func (*AppParametersRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{29} } -type ChainParametersResponse struct { +type AppParametersResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Parameters *v1alpha17.ChainParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` + Parameters *v1alpha17.AppParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` } -func (x *ChainParametersResponse) Reset() { - *x = ChainParametersResponse{} +func (x *AppParametersResponse) Reset() { + *x = AppParametersResponse{} if protoimpl.UnsafeEnabled { mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1802,13 +1803,13 @@ func (x *ChainParametersResponse) Reset() { } } -func (x *ChainParametersResponse) String() string { +func (x *AppParametersResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChainParametersResponse) ProtoMessage() {} +func (*AppParametersResponse) ProtoMessage() {} -func (x *ChainParametersResponse) ProtoReflect() protoreflect.Message { +func (x *AppParametersResponse) ProtoReflect() protoreflect.Message { mi := &file_penumbra_view_v1alpha1_view_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1820,12 +1821,12 @@ func (x *ChainParametersResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChainParametersResponse.ProtoReflect.Descriptor instead. -func (*ChainParametersResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use AppParametersResponse.ProtoReflect.Descriptor instead. +func (*AppParametersResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{30} } -func (x *ChainParametersResponse) GetParameters() *v1alpha17.ChainParameters { +func (x *AppParametersResponse) GetParameters() *v1alpha17.AppParameters { if x != nil { return x.Parameters } @@ -1876,7 +1877,7 @@ type FMDParametersResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Parameters *v1alpha17.FmdParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` + Parameters *v1alpha18.FmdParameters `protobuf:"bytes,1,opt,name=parameters,proto3" json:"parameters,omitempty"` } func (x *FMDParametersResponse) Reset() { @@ -1911,7 +1912,7 @@ func (*FMDParametersResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{32} } -func (x *FMDParametersResponse) GetParameters() *v1alpha17.FmdParameters { +func (x *FMDParametersResponse) GetParameters() *v1alpha18.FmdParameters { if x != nil { return x.Parameters } @@ -2242,7 +2243,7 @@ type NullifierStatusRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Nullifier *v1alpha18.Nullifier `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Nullifier *v1alpha19.Nullifier `protobuf:"bytes,2,opt,name=nullifier,proto3" json:"nullifier,omitempty"` AwaitDetection bool `protobuf:"varint,3,opt,name=await_detection,json=awaitDetection,proto3" json:"await_detection,omitempty"` // Identifies the account group to query. AccountGroupId *v1alpha12.AccountGroupId `protobuf:"bytes,14,opt,name=account_group_id,json=accountGroupId,proto3" json:"account_group_id,omitempty"` @@ -2280,7 +2281,7 @@ func (*NullifierStatusRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{39} } -func (x *NullifierStatusRequest) GetNullifier() *v1alpha18.Nullifier { +func (x *NullifierStatusRequest) GetNullifier() *v1alpha19.Nullifier { if x != nil { return x.Nullifier } @@ -2742,11 +2743,11 @@ type SpendableNoteRecord struct { // The note commitment, identifying the note. NoteCommitment *v1alpha16.StateCommitment `protobuf:"bytes,1,opt,name=note_commitment,json=noteCommitment,proto3" json:"note_commitment,omitempty"` // The note plaintext itself. - Note *v1alpha19.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` + Note *v1alpha110.Note `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` // A precomputed decryption of the note's address incore.component.dex.v1alpha1. AddressIndex *v1alpha12.AddressIndex `protobuf:"bytes,3,opt,name=address_index,json=addressIndex,proto3" json:"address_index,omitempty"` // The note's nullifier. - Nullifier *v1alpha18.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + Nullifier *v1alpha19.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` // The height at which the note was created. HeightCreated uint64 `protobuf:"varint,5,opt,name=height_created,json=heightCreated,proto3" json:"height_created,omitempty"` // Records whether the note was spent (and if so, at what height). @@ -2754,7 +2755,7 @@ type SpendableNoteRecord struct { // The note position. Position uint64 `protobuf:"varint,7,opt,name=position,proto3" json:"position,omitempty"` // The source of the note (a tx hash or otherwise) - Source *v1alpha17.NoteSource `protobuf:"bytes,8,opt,name=source,proto3" json:"source,omitempty"` + Source *v1alpha18.NoteSource `protobuf:"bytes,8,opt,name=source,proto3" json:"source,omitempty"` } func (x *SpendableNoteRecord) Reset() { @@ -2796,7 +2797,7 @@ func (x *SpendableNoteRecord) GetNoteCommitment() *v1alpha16.StateCommitment { return nil } -func (x *SpendableNoteRecord) GetNote() *v1alpha19.Note { +func (x *SpendableNoteRecord) GetNote() *v1alpha110.Note { if x != nil { return x.Note } @@ -2810,7 +2811,7 @@ func (x *SpendableNoteRecord) GetAddressIndex() *v1alpha12.AddressIndex { return nil } -func (x *SpendableNoteRecord) GetNullifier() *v1alpha18.Nullifier { +func (x *SpendableNoteRecord) GetNullifier() *v1alpha19.Nullifier { if x != nil { return x.Nullifier } @@ -2838,7 +2839,7 @@ func (x *SpendableNoteRecord) GetPosition() uint64 { return 0 } -func (x *SpendableNoteRecord) GetSource() *v1alpha17.NoteSource { +func (x *SpendableNoteRecord) GetSource() *v1alpha18.NoteSource { if x != nil { return x.Source } @@ -2851,12 +2852,12 @@ type SwapRecord struct { unknownFields protoimpl.UnknownFields SwapCommitment *v1alpha16.StateCommitment `protobuf:"bytes,1,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` - Swap *v1alpha110.SwapPlaintext `protobuf:"bytes,2,opt,name=swap,proto3" json:"swap,omitempty"` + Swap *v1alpha111.SwapPlaintext `protobuf:"bytes,2,opt,name=swap,proto3" json:"swap,omitempty"` Position uint64 `protobuf:"varint,3,opt,name=position,proto3" json:"position,omitempty"` - Nullifier *v1alpha18.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` - OutputData *v1alpha110.BatchSwapOutputData `protobuf:"bytes,5,opt,name=output_data,json=outputData,proto3" json:"output_data,omitempty"` + Nullifier *v1alpha19.Nullifier `protobuf:"bytes,4,opt,name=nullifier,proto3" json:"nullifier,omitempty"` + OutputData *v1alpha111.BatchSwapOutputData `protobuf:"bytes,5,opt,name=output_data,json=outputData,proto3" json:"output_data,omitempty"` HeightClaimed uint64 `protobuf:"varint,6,opt,name=height_claimed,json=heightClaimed,proto3" json:"height_claimed,omitempty"` - Source *v1alpha17.NoteSource `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` + Source *v1alpha18.NoteSource `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` } func (x *SwapRecord) Reset() { @@ -2898,7 +2899,7 @@ func (x *SwapRecord) GetSwapCommitment() *v1alpha16.StateCommitment { return nil } -func (x *SwapRecord) GetSwap() *v1alpha110.SwapPlaintext { +func (x *SwapRecord) GetSwap() *v1alpha111.SwapPlaintext { if x != nil { return x.Swap } @@ -2912,14 +2913,14 @@ func (x *SwapRecord) GetPosition() uint64 { return 0 } -func (x *SwapRecord) GetNullifier() *v1alpha18.Nullifier { +func (x *SwapRecord) GetNullifier() *v1alpha19.Nullifier { if x != nil { return x.Nullifier } return nil } -func (x *SwapRecord) GetOutputData() *v1alpha110.BatchSwapOutputData { +func (x *SwapRecord) GetOutputData() *v1alpha111.BatchSwapOutputData { if x != nil { return x.OutputData } @@ -2933,7 +2934,7 @@ func (x *SwapRecord) GetHeightClaimed() uint64 { return 0 } -func (x *SwapRecord) GetSource() *v1alpha17.NoteSource { +func (x *SwapRecord) GetSource() *v1alpha18.NoteSource { if x != nil { return x.Source } @@ -2946,9 +2947,9 @@ type OwnedPositionIdsRequest struct { unknownFields protoimpl.UnknownFields // If present, return only positions with this position state. - PositionState *v1alpha110.PositionState `protobuf:"bytes,1,opt,name=position_state,json=positionState,proto3" json:"position_state,omitempty"` + PositionState *v1alpha111.PositionState `protobuf:"bytes,1,opt,name=position_state,json=positionState,proto3" json:"position_state,omitempty"` // If present, return only positions for this trading pair. - TradingPair *v1alpha110.TradingPair `protobuf:"bytes,2,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` + TradingPair *v1alpha111.TradingPair `protobuf:"bytes,2,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` } func (x *OwnedPositionIdsRequest) Reset() { @@ -2983,14 +2984,14 @@ func (*OwnedPositionIdsRequest) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{50} } -func (x *OwnedPositionIdsRequest) GetPositionState() *v1alpha110.PositionState { +func (x *OwnedPositionIdsRequest) GetPositionState() *v1alpha111.PositionState { if x != nil { return x.PositionState } return nil } -func (x *OwnedPositionIdsRequest) GetTradingPair() *v1alpha110.TradingPair { +func (x *OwnedPositionIdsRequest) GetTradingPair() *v1alpha111.TradingPair { if x != nil { return x.TradingPair } @@ -3002,7 +3003,7 @@ type OwnedPositionIdsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PositionId *v1alpha110.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` + PositionId *v1alpha111.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` } func (x *OwnedPositionIdsResponse) Reset() { @@ -3037,7 +3038,7 @@ func (*OwnedPositionIdsResponse) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{51} } -func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha110.PositionId { +func (x *OwnedPositionIdsResponse) GetPositionId() *v1alpha111.PositionId { if x != nil { return x.PositionId } @@ -3233,7 +3234,7 @@ type TransactionPlannerRequest_Delegate struct { unknownFields protoimpl.UnknownFields Amount *v1alpha15.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` - RateData *v1alpha111.RateData `protobuf:"bytes,3,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` + RateData *v1alpha112.RateData `protobuf:"bytes,3,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` } func (x *TransactionPlannerRequest_Delegate) Reset() { @@ -3275,7 +3276,7 @@ func (x *TransactionPlannerRequest_Delegate) GetAmount() *v1alpha15.Amount { return nil } -func (x *TransactionPlannerRequest_Delegate) GetRateData() *v1alpha111.RateData { +func (x *TransactionPlannerRequest_Delegate) GetRateData() *v1alpha112.RateData { if x != nil { return x.RateData } @@ -3288,7 +3289,7 @@ type TransactionPlannerRequest_Undelegate struct { unknownFields protoimpl.UnknownFields Value *v1alpha14.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - RateData *v1alpha111.RateData `protobuf:"bytes,2,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` + RateData *v1alpha112.RateData `protobuf:"bytes,2,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` } func (x *TransactionPlannerRequest_Undelegate) Reset() { @@ -3330,7 +3331,7 @@ func (x *TransactionPlannerRequest_Undelegate) GetValue() *v1alpha14.Value { return nil } -func (x *TransactionPlannerRequest_Undelegate) GetRateData() *v1alpha111.RateData { +func (x *TransactionPlannerRequest_Undelegate) GetRateData() *v1alpha112.RateData { if x != nil { return x.RateData } @@ -3346,7 +3347,7 @@ type TransactionPlannerRequest_PositionOpen struct { // // Positions are immutable, so the `PositionData` (and hence the `PositionId`) // are unchanged over the entire lifetime of the position. - Position *v1alpha110.Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"` + Position *v1alpha111.Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position,omitempty"` } func (x *TransactionPlannerRequest_PositionOpen) Reset() { @@ -3381,7 +3382,7 @@ func (*TransactionPlannerRequest_PositionOpen) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 5} } -func (x *TransactionPlannerRequest_PositionOpen) GetPosition() *v1alpha110.Position { +func (x *TransactionPlannerRequest_PositionOpen) GetPosition() *v1alpha111.Position { if x != nil { return x.Position } @@ -3394,7 +3395,7 @@ type TransactionPlannerRequest_PositionClose struct { unknownFields protoimpl.UnknownFields // The position to close. - PositionId *v1alpha110.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` + PositionId *v1alpha111.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` } func (x *TransactionPlannerRequest_PositionClose) Reset() { @@ -3429,7 +3430,7 @@ func (*TransactionPlannerRequest_PositionClose) Descriptor() ([]byte, []int) { return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 6} } -func (x *TransactionPlannerRequest_PositionClose) GetPositionId() *v1alpha110.PositionId { +func (x *TransactionPlannerRequest_PositionClose) GetPositionId() *v1alpha111.PositionId { if x != nil { return x.PositionId } @@ -3442,11 +3443,11 @@ type TransactionPlannerRequest_PositionWithdraw struct { unknownFields protoimpl.UnknownFields // The position to withdraw. - PositionId *v1alpha110.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` + PositionId *v1alpha111.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` // The position's final reserves. - Reserves *v1alpha110.Reserves `protobuf:"bytes,2,opt,name=reserves,proto3" json:"reserves,omitempty"` + Reserves *v1alpha111.Reserves `protobuf:"bytes,2,opt,name=reserves,proto3" json:"reserves,omitempty"` // The trading pair of the position. - TradingPair *v1alpha110.TradingPair `protobuf:"bytes,3,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` + TradingPair *v1alpha111.TradingPair `protobuf:"bytes,3,opt,name=trading_pair,json=tradingPair,proto3" json:"trading_pair,omitempty"` } func (x *TransactionPlannerRequest_PositionWithdraw) Reset() { @@ -3481,21 +3482,21 @@ func (*TransactionPlannerRequest_PositionWithdraw) Descriptor() ([]byte, []int) return file_penumbra_view_v1alpha1_view_proto_rawDescGZIP(), []int{4, 7} } -func (x *TransactionPlannerRequest_PositionWithdraw) GetPositionId() *v1alpha110.PositionId { +func (x *TransactionPlannerRequest_PositionWithdraw) GetPositionId() *v1alpha111.PositionId { if x != nil { return x.PositionId } return nil } -func (x *TransactionPlannerRequest_PositionWithdraw) GetReserves() *v1alpha110.Reserves { +func (x *TransactionPlannerRequest_PositionWithdraw) GetReserves() *v1alpha111.Reserves { if x != nil { return x.Reserves } return nil } -func (x *TransactionPlannerRequest_PositionWithdraw) GetTradingPair() *v1alpha110.TradingPair { +func (x *TransactionPlannerRequest_PositionWithdraw) GetTradingPair() *v1alpha111.TradingPair { if x != nil { return x.TradingPair } @@ -3516,500 +3517,479 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6e, 0x75, 0x6d, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x75, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, - 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, - 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, - 0x65, 0x78, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x78, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, - 0x65, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, - 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, - 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, - 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, - 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe0, 0x01, - 0x0a, 0x18, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x6f, 0x1a, 0x24, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x70, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x34, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x64, 0x65, 0x78, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x64, 0x65, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x65, 0x65, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x66, 0x65, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x69, 0x62, 0x63, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x69, 0x62, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x63, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2f, 0x73, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x42, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, + 0x6f, 0x6c, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x32, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xe0, 0x01, 0x0a, 0x18, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, + 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6e, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, + 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, + 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x81, 0x01, 0x0a, 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, + 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xb2, 0x13, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, + 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, - 0x22, 0x6e, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, - 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, + 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x41, 0x0a, + 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, + 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x05, 0x73, + 0x77, 0x61, 0x70, 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x52, 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x73, 0x77, 0x61, + 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x99, 0x01, 0x0a, 0x1b, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 0x01, 0x0a, - 0x1c, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, - 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x22, 0xb2, 0x13, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x0a, 0x73, 0x77, 0x61, + 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x32, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x69, 0x62, 0x63, + 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x3c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x62, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0a, 0x69, 0x62, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x18, 0x46, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, + 0x70, 0x65, 0x6e, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x0e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x12, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, + 0x77, 0x73, 0x18, 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x52, 0x11, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x1a, + 0x83, 0x01, 0x0a, 0x06, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x93, 0x02, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x39, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x12, 0x3b, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, - 0x12, 0x45, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x41, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x12, 0x49, 0x0a, 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x52, 0x0a, 0x07, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x07, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x05, 0x73, 0x77, 0x61, 0x70, 0x73, 0x18, 0x1e, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x05, 0x73, 0x77, - 0x61, 0x70, 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x77, 0x61, 0x70, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x12, 0x5c, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x28, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x62, 0x0a, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x32, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x69, 0x62, 0x63, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x3c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x69, 0x62, 0x63, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x62, 0x63, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x69, 0x62, 0x63, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x65, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x52, 0x0d, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x73, 0x12, 0x68, 0x0a, 0x0f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x18, - 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x12, 0x71, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x18, 0x48, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, - 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x52, 0x11, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x73, 0x1a, 0x83, 0x01, 0x0a, 0x06, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, - 0x93, 0x02, 0x0a, 0x04, 0x53, 0x77, 0x61, 0x70, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, - 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x3b, 0x0a, - 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x66, 0x65, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x63, 0x0a, 0x09, 0x53, 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x95, 0x01, 0x0a, 0x08, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x1a, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x09, - 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x5a, 0x0a, 0x0c, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, 0x0d, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, - 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x87, 0x02, 0x0a, 0x10, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, - 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x12, - 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0c, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x1a, 0x63, 0x0a, 0x09, 0x53, + 0x77, 0x61, 0x70, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x1a, 0x95, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, + 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x96, 0x01, 0x0a, 0x0a, 0x55, 0x6e, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x09, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, - 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x65, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, 0x61, 0x6e, 0x22, 0x90, 0x01, 0x0a, - 0x15, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, - 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, - 0x58, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x57, 0x0a, 0x15, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x68, 0x0a, 0x16, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x52, + 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x72, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x1a, 0x5a, 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, + 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x62, 0x0a, + 0x0d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x51, + 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x1a, 0x87, 0x02, 0x0a, 0x10, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, + 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, + 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x65, 0x0a, 0x1a, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x70, 0x6c, 0x61, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x04, 0x70, 0x6c, + 0x61, 0x6e, 0x22, 0x90, 0x01, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, - 0x17, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0x58, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0x57, 0x0a, 0x15, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x68, 0x0a, 0x16, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x22, 0x92, 0x01, 0x0a, 0x17, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, + 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, + 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, + 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x22, 0x5a, 0x0a, 0x18, 0x45, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, - 0x6d, 0x22, 0x5a, 0x0a, 0x18, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x49, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xb2, 0x01, - 0x0a, 0x0f, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x50, 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0d, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x0f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x49, 0x64, 0x52, 0x0d, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, + 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x66, + 0x76, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x07, - 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x22, 0x25, 0x0a, 0x0d, 0x56, - 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, - 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x69, 0x6e, 0x6e, - 0x65, 0x72, 0x22, 0x50, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x66, 0x76, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x52, - 0x03, 0x66, 0x76, 0x6b, 0x22, 0x4f, 0x0a, 0x10, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x66, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x52, 0x0a, - 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, 0x6e, 0x67, 0x55, - 0x70, 0x22, 0x6c, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, - 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, - 0x72, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x22, 0xe8, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0d, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4a, 0x0a, 0x0f, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0xea, - 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x6f, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x74, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, - 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0xa1, 0x02, 0x0a, 0x0e, - 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, - 0x0a, 0x10, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, - 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, - 0x65, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, - 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x01, 0x0a, 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, - 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, - 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, - 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, - 0x52, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x63, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, - 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x6c, 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, - 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x70, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, - 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, - 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, - 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, - 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, - 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, - 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x18, 0x0a, 0x16, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x72, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, - 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x46, 0x4d, 0x44, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x6e, 0x0a, 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, - 0xf1, 0x01, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x6e, - 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, - 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x10, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x56, 0x69, 0x65, 0x77, 0x69, + 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x66, 0x76, 0x6b, 0x22, 0x4f, 0x0a, 0x10, 0x56, 0x69, + 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x66, 0x0a, 0x0d, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6e, 0x6f, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, - 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, - 0x6f, 0x74, 0x65, 0x22, 0xf1, 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, + 0x70, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x79, 0x6e, 0x63, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x74, 0x63, 0x68, 0x69, + 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x74, + 0x63, 0x68, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x22, 0x6c, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, + 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x72, 0x0a, 0x14, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, + 0x19, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x16, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79, 0x6e, 0x63, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, + 0x79, 0x6e, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe8, 0x02, 0x0a, 0x0c, 0x4e, 0x6f, + 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, + 0x40, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, + 0x64, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x4a, 0x0a, 0x0f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x73, + 0x70, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6e, 0x75, 0x6d, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0d, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x12, 0x55, 0x0a, + 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x64, 0x22, 0xea, 0x01, 0x0a, 0x15, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, + 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, + 0x0a, 0x11, 0x76, 0x6f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x74, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x76, 0x6f, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x41, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x22, 0xa1, 0x02, 0x0a, 0x0e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x58, 0x0a, 0x10, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0f, 0x6e, + 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, + 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, + 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x55, + 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x69, 0x74, 0x6e, + 0x65, 0x73, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, + 0x0b, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0xde, 0x01, 0x0a, + 0x16, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x12, 0x64, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, + 0x17, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x03, 0x0a, 0x0d, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x12, 0x69, 0x0a, 0x1e, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x5f, 0x64, 0x65, + 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x12, 0x38, 0x0a, 0x18, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x75, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x55, 0x6e, 0x62, 0x6f, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x70, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x70, 0x4e, 0x66, + 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x6e, 0x66, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x4e, 0x66, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x1d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x76, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x64, 0x0a, 0x0e, 0x41, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x64, + 0x65, 0x6e, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x0d, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x16, 0x0a, 0x14, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x62, 0x0a, 0x15, 0x41, 0x70, 0x70, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x49, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x46, + 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x6e, 0x0a, 0x15, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0a, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x6d, 0x64, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x22, 0xf1, 0x01, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, + 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, @@ -4018,374 +3998,396 @@ var file_penumbra_view_v1alpha1_view_proto_rawDesc = []byte{ 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x18, 0x53, 0x77, 0x61, 0x70, 0x42, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x6e, 0x0a, 0x18, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0x6e, 0x0a, 0x15, 0x55, - 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0e, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x22, 0xf1, 0x01, 0x0a, 0x17, 0x53, 0x77, 0x61, 0x70, + 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, + 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, + 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x61, + 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x50, 0x0a, 0x16, 0x55, - 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, - 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, 0xe7, 0x01, - 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, - 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, - 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, 0x75, 0x6c, 0x6c, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x56, 0x0a, 0x1c, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xdb, 0x02, 0x0a, - 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x52, 0x0a, 0x18, 0x53, + 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, + 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x22, + 0x6e, 0x0a, 0x15, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, + 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, + 0x50, 0x0a, 0x16, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x77, 0x61, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x04, 0x73, 0x77, 0x61, + 0x70, 0x22, 0xe7, 0x01, 0x0a, 0x16, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x09, + 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x61, + 0x77, 0x61, 0x69, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x77, 0x61, 0x69, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, + 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x17, 0x4e, + 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x22, 0x56, 0x0a, 0x1c, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, + 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, 0x0a, 0x0d, 0x4e, 0x6f, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, - 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x16, 0x4e, 0x6f, - 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, - 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x22, - 0x88, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x65, 0x5f, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x16, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x22, 0xdb, 0x02, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x36, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x51, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, + 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x47, 0x0a, 0x04, 0x76, 0x69, 0x65, 0x77, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x52, 0x04, 0x76, 0x69, 0x65, 0x77, 0x22, 0x5b, + 0x0a, 0x17, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x74, 0x78, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x61, 0x0a, 0x1d, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, + 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, + 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x5d, + 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, + 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0xb3, 0x01, + 0x0a, 0x16, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x6e, 0x6f, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, 0x65, + 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0a, 0x6e, 0x6f, 0x74, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, + 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x52, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x4b, 0x65, 0x79, 0x22, 0x88, 0x04, 0x0a, 0x13, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x61, 0x62, 0x6c, + 0x65, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x6e, + 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x48, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, + 0x6c, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, + 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d, 0x0a, + 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, + 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x53, 0x70, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, + 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xe7, + 0x03, 0x0a, 0x0a, 0x53, 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, + 0x0f, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, + 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, + 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, + 0x6c, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, + 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x68, 0x69, 0x65, 0x6c, 0x64, 0x65, 0x64, - 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0d, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x6b, 0x65, 0x79, 0x73, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x0c, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x65, - 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, + 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xe7, 0x03, 0x0a, 0x0a, 0x53, - 0x77, 0x61, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x56, 0x0a, 0x0f, 0x73, 0x77, 0x61, - 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x74, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x47, 0x0a, 0x04, 0x73, 0x77, 0x61, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6c, 0x61, 0x69, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x04, 0x73, 0x77, 0x61, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x63, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x5a, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x5a, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x54, 0x0a, 0x0c, - 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, - 0x69, 0x72, 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, - 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, - 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, - 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x32, 0xb3, 0x14, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, - 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, - 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, - 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x77, 0x61, 0x70, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x17, 0x4f, 0x77, 0x6e, + 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x54, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x69, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, + 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x22, 0x6d, 0x0a, 0x18, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, + 0x74, 0x2e, 0x64, 0x65, 0x78, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x32, 0xad, 0x14, 0x0a, 0x13, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x57, 0x0a, + 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x07, 0x57, 0x69, - 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, - 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x12, 0x56, 0x0a, 0x05, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x0e, 0x4e, + 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, - 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, + 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x56, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5a, + 0x0a, 0x07, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x70, 0x65, - 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, + 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x57, 0x69, + 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, + 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x41, 0x6e, + 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, + 0x0a, 0x06, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, + 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x0d, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x68, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x41, 0x70, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, 0x0a, 0x0d, 0x46, 0x4d, 0x44, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x46, 0x4d, 0x44, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, + 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, + 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, + 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, + 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x79, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x45, 0x70, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2f, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, 0x74, + 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x6f, + 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, + 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x12, + 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x45, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x5f, 0x0a, 0x08, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x27, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x75, 0x0a, 0x10, 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x4e, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x10, 0x53, 0x77, 0x61, 0x70, - 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x2e, 0x70, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, + 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, + 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, 0x75, 0x6c, + 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x12, 0x34, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, + 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2e, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, 0x65, 0x6e, + 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x81, + 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x42, 0x79, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x71, 0x0a, 0x0e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, - 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, - 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x65, 0x64, 0x53, 0x77, 0x61, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x72, 0x0a, 0x0f, 0x4e, 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, - 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4e, - 0x75, 0x6c, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, - 0x12, 0x34, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x79, 0x48, 0x61, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, - 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x2e, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6c, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x70, - 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x81, 0x01, 0x0a, 0x14, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, - 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, - 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x10, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, - 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, - 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, + 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, + 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x78, 0x0a, 0x11, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x12, 0x30, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, - 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x56, 0x69, - 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x28, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, - 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, - 0x6d, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, - 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, - 0x69, 0x65, 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, - 0x77, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, - 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, - 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, - 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0xe2, 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, - 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, - 0x61, 0x3a, 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x41, 0x6e, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x70, 0x0a, 0x0f, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, + 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x56, 0x69, 0x65, 0x77, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, + 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, + 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x41, 0x75, 0x74, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xf5, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x76, 0x69, 0x65, 0x77, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x09, 0x56, 0x69, 0x65, 0x77, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x2f, 0x70, 0x65, + 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, + 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2f, 0x76, 0x69, 0x65, + 0x77, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x76, 0x69, 0x65, 0x77, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x56, 0x58, 0xaa, 0x02, 0x16, + 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x2e, 0x56, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x16, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, + 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, + 0x02, 0x22, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x5c, 0x56, 0x69, 0x65, 0x77, 0x5c, + 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x50, 0x65, 0x6e, 0x75, 0x6d, 0x62, 0x72, 0x61, 0x3a, + 0x3a, 0x56, 0x69, 0x65, 0x77, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4431,8 +4433,8 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*WitnessAndBuildResponse)(nil), // 26: penumbra.view.v1alpha1.WitnessAndBuildResponse (*AssetsRequest)(nil), // 27: penumbra.view.v1alpha1.AssetsRequest (*AssetsResponse)(nil), // 28: penumbra.view.v1alpha1.AssetsResponse - (*ChainParametersRequest)(nil), // 29: penumbra.view.v1alpha1.ChainParametersRequest - (*ChainParametersResponse)(nil), // 30: penumbra.view.v1alpha1.ChainParametersResponse + (*AppParametersRequest)(nil), // 29: penumbra.view.v1alpha1.AppParametersRequest + (*AppParametersResponse)(nil), // 30: penumbra.view.v1alpha1.AppParametersResponse (*FMDParametersRequest)(nil), // 31: penumbra.view.v1alpha1.FMDParametersRequest (*FMDParametersResponse)(nil), // 32: penumbra.view.v1alpha1.FMDParametersResponse (*NoteByCommitmentRequest)(nil), // 33: penumbra.view.v1alpha1.NoteByCommitmentRequest @@ -4480,22 +4482,22 @@ var file_penumbra_view_v1alpha1_view_proto_goTypes = []interface{}{ (*v1alpha1.WitnessData)(nil), // 75: penumbra.core.transaction.v1alpha1.WitnessData (*v1alpha14.Denom)(nil), // 76: penumbra.core.asset.v1alpha1.Denom (*v1alpha14.DenomMetadata)(nil), // 77: penumbra.core.asset.v1alpha1.DenomMetadata - (*v1alpha17.ChainParameters)(nil), // 78: penumbra.core.component.chain.v1alpha1.ChainParameters - (*v1alpha17.FmdParameters)(nil), // 79: penumbra.core.component.chain.v1alpha1.FmdParameters - (*v1alpha18.Nullifier)(nil), // 80: penumbra.core.component.sct.v1alpha1.Nullifier + (*v1alpha17.AppParameters)(nil), // 78: penumbra.core.app.v1alpha1.AppParameters + (*v1alpha18.FmdParameters)(nil), // 79: penumbra.core.component.chain.v1alpha1.FmdParameters + (*v1alpha19.Nullifier)(nil), // 80: penumbra.core.component.sct.v1alpha1.Nullifier (*v1alpha1.TransactionPerspective)(nil), // 81: penumbra.core.transaction.v1alpha1.TransactionPerspective (*v1alpha1.TransactionView)(nil), // 82: penumbra.core.transaction.v1alpha1.TransactionView (*v1alpha12.IdentityKey)(nil), // 83: penumbra.core.keys.v1alpha1.IdentityKey - (*v1alpha19.Note)(nil), // 84: penumbra.core.component.shielded_pool.v1alpha1.Note - (*v1alpha17.NoteSource)(nil), // 85: penumbra.core.component.chain.v1alpha1.NoteSource - (*v1alpha110.SwapPlaintext)(nil), // 86: penumbra.core.component.dex.v1alpha1.SwapPlaintext - (*v1alpha110.BatchSwapOutputData)(nil), // 87: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData - (*v1alpha110.PositionState)(nil), // 88: penumbra.core.component.dex.v1alpha1.PositionState - (*v1alpha110.TradingPair)(nil), // 89: penumbra.core.component.dex.v1alpha1.TradingPair - (*v1alpha110.PositionId)(nil), // 90: penumbra.core.component.dex.v1alpha1.PositionId - (*v1alpha111.RateData)(nil), // 91: penumbra.core.component.stake.v1alpha1.RateData - (*v1alpha110.Position)(nil), // 92: penumbra.core.component.dex.v1alpha1.Position - (*v1alpha110.Reserves)(nil), // 93: penumbra.core.component.dex.v1alpha1.Reserves + (*v1alpha110.Note)(nil), // 84: penumbra.core.component.shielded_pool.v1alpha1.Note + (*v1alpha18.NoteSource)(nil), // 85: penumbra.core.component.chain.v1alpha1.NoteSource + (*v1alpha111.SwapPlaintext)(nil), // 86: penumbra.core.component.dex.v1alpha1.SwapPlaintext + (*v1alpha111.BatchSwapOutputData)(nil), // 87: penumbra.core.component.dex.v1alpha1.BatchSwapOutputData + (*v1alpha111.PositionState)(nil), // 88: penumbra.core.component.dex.v1alpha1.PositionState + (*v1alpha111.TradingPair)(nil), // 89: penumbra.core.component.dex.v1alpha1.TradingPair + (*v1alpha111.PositionId)(nil), // 90: penumbra.core.component.dex.v1alpha1.PositionId + (*v1alpha112.RateData)(nil), // 91: penumbra.core.component.stake.v1alpha1.RateData + (*v1alpha111.Position)(nil), // 92: penumbra.core.component.dex.v1alpha1.Position + (*v1alpha111.Reserves)(nil), // 93: penumbra.core.component.dex.v1alpha1.Reserves } var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 60, // 0: penumbra.view.v1alpha1.AuthorizeAndBuildRequest.transaction_plan:type_name -> penumbra.core.transaction.v1alpha1.TransactionPlan @@ -4546,7 +4548,7 @@ var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 62, // 45: penumbra.view.v1alpha1.WitnessAndBuildResponse.transaction:type_name -> penumbra.core.transaction.v1alpha1.Transaction 76, // 46: penumbra.view.v1alpha1.AssetsRequest.include_specific_denominations:type_name -> penumbra.core.asset.v1alpha1.Denom 77, // 47: penumbra.view.v1alpha1.AssetsResponse.denom_metadata:type_name -> penumbra.core.asset.v1alpha1.DenomMetadata - 78, // 48: penumbra.view.v1alpha1.ChainParametersResponse.parameters:type_name -> penumbra.core.component.chain.v1alpha1.ChainParameters + 78, // 48: penumbra.view.v1alpha1.AppParametersResponse.parameters:type_name -> penumbra.core.app.v1alpha1.AppParameters 79, // 49: penumbra.view.v1alpha1.FMDParametersResponse.parameters:type_name -> penumbra.core.component.chain.v1alpha1.FmdParameters 74, // 50: penumbra.view.v1alpha1.NoteByCommitmentRequest.note_commitment:type_name -> penumbra.crypto.tct.v1alpha1.StateCommitment 67, // 51: penumbra.view.v1alpha1.NoteByCommitmentRequest.account_group_id:type_name -> penumbra.core.keys.v1alpha1.AccountGroupId @@ -4604,7 +4606,7 @@ var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 23, // 103: penumbra.view.v1alpha1.ViewProtocolService.Witness:input_type -> penumbra.view.v1alpha1.WitnessRequest 25, // 104: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:input_type -> penumbra.view.v1alpha1.WitnessAndBuildRequest 27, // 105: penumbra.view.v1alpha1.ViewProtocolService.Assets:input_type -> penumbra.view.v1alpha1.AssetsRequest - 29, // 106: penumbra.view.v1alpha1.ViewProtocolService.ChainParameters:input_type -> penumbra.view.v1alpha1.ChainParametersRequest + 29, // 106: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:input_type -> penumbra.view.v1alpha1.AppParametersRequest 31, // 107: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:input_type -> penumbra.view.v1alpha1.FMDParametersRequest 6, // 108: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:input_type -> penumbra.view.v1alpha1.AddressByIndexRequest 8, // 109: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:input_type -> penumbra.view.v1alpha1.IndexByAddressRequest @@ -4628,7 +4630,7 @@ var file_penumbra_view_v1alpha1_view_proto_depIdxs = []int32{ 24, // 127: penumbra.view.v1alpha1.ViewProtocolService.Witness:output_type -> penumbra.view.v1alpha1.WitnessResponse 26, // 128: penumbra.view.v1alpha1.ViewProtocolService.WitnessAndBuild:output_type -> penumbra.view.v1alpha1.WitnessAndBuildResponse 28, // 129: penumbra.view.v1alpha1.ViewProtocolService.Assets:output_type -> penumbra.view.v1alpha1.AssetsResponse - 30, // 130: penumbra.view.v1alpha1.ViewProtocolService.ChainParameters:output_type -> penumbra.view.v1alpha1.ChainParametersResponse + 30, // 130: penumbra.view.v1alpha1.ViewProtocolService.AppParameters:output_type -> penumbra.view.v1alpha1.AppParametersResponse 32, // 131: penumbra.view.v1alpha1.ViewProtocolService.FMDParameters:output_type -> penumbra.view.v1alpha1.FMDParametersResponse 7, // 132: penumbra.view.v1alpha1.ViewProtocolService.AddressByIndex:output_type -> penumbra.view.v1alpha1.AddressByIndexResponse 9, // 133: penumbra.view.v1alpha1.ViewProtocolService.IndexByAddress:output_type -> penumbra.view.v1alpha1.IndexByAddressResponse @@ -5007,7 +5009,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainParametersRequest); i { + switch v := v.(*AppParametersRequest); i { case 0: return &v.state case 1: @@ -5019,7 +5021,7 @@ func file_penumbra_view_v1alpha1_view_proto_init() { } } file_penumbra_view_v1alpha1_view_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChainParametersResponse); i { + switch v := v.(*AppParametersResponse); i { case 0: return &v.state case 1: diff --git a/proto/penumbra/penumbra/core/app/v1alpha1/app.proto b/proto/penumbra/penumbra/core/app/v1alpha1/app.proto index 939f4587ef..89a131c53f 100644 --- a/proto/penumbra/penumbra/core/app/v1alpha1/app.proto +++ b/proto/penumbra/penumbra/core/app/v1alpha1/app.proto @@ -2,12 +2,17 @@ syntax = "proto3"; package penumbra.core.app.v1alpha1; import "penumbra/core/component/chain/v1alpha1/chain.proto"; +import "penumbra/core/component/stake/v1alpha1/stake.proto"; +import "penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto"; +import "penumbra/core/component/governance/v1alpha1/governance.proto"; +import "penumbra/core/component/ibc/v1alpha1/ibc.proto"; +import "penumbra/core/component/dao/v1alpha1/dao.proto"; import "ibc/core/commitment/v1/commitment.proto"; // Query operations for the overall Penumbra application. service QueryService { - // Gets the chain parameters. - rpc ChainParameters(ChainParametersRequest) returns (ChainParametersResponse); + // Gets the app parameters. + rpc AppParameters(AppParametersRequest) returns (AppParametersResponse); // General-purpose key-value state query API, that can be used to query // arbitrary keys in the JMT storage. @@ -54,14 +59,47 @@ message PrefixValueResponse { bytes value = 2; } +message AppParameters { + // Chain module parameters. + core.component.chain.v1alpha1.ChainParameters chain_params = 1; + // DAO module parameters. + core.component.dao.v1alpha1.DaoParameters dao_params = 2; + // Governance module parameters. + core.component.governance.v1alpha1.GovernanceParameters governance_params = 3; + // IBC module parameters. + core.component.ibc.v1alpha1.IbcParameters ibc_params = 4; + // Stake module parameters. + core.component.stake.v1alpha1.StakeParameters stake_params = 5; +} - -// Requests the global configuration data for the chain. -message ChainParametersRequest { +// Requests the global configuration data for the app. +message AppParametersRequest { // The expected chain id (empty string if no expectation). string chain_id = 1; } -message ChainParametersResponse { - core.component.chain.v1alpha1.ChainParameters chain_parameters = 1; +message AppParametersResponse { + AppParameters app_parameters = 1; +} + +message GenesisAppState { + oneof genesis_app_state { + GenesisContent genesis_content = 1; + bytes genesis_checkpoint = 2; + } } + +message GenesisContent { + // Stake module genesis state. + core.component.stake.v1alpha1.GenesisContent stake_content = 1; + // Shielded pool module genesis state. + core.component.shielded_pool.v1alpha1.GenesisContent shielded_pool_content = 2; + // Governance module genesis state. + core.component.governance.v1alpha1.GenesisContent governance_content = 3; + // IBC module genesis state. + core.component.ibc.v1alpha1.GenesisContent ibc_content = 4; + // Chain module genesis state. + core.component.chain.v1alpha1.GenesisContent chain_content = 5; + // DAO module genesis state. + core.component.dao.v1alpha1.GenesisContent dao_content = 6; +} \ No newline at end of file diff --git a/proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto b/proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto index b2e61651c3..f45f5acd7e 100644 --- a/proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto +++ b/proto/penumbra/penumbra/core/component/chain/v1alpha1/chain.proto @@ -1,10 +1,7 @@ syntax = "proto3"; package penumbra.core.component.chain.v1alpha1; -import "penumbra/core/num/v1alpha1/num.proto"; -import "penumbra/core/keys/v1alpha1/keys.proto"; import "penumbra/core/asset/v1alpha1/asset.proto"; -import "penumbra/core/component/stake/v1alpha1/stake.proto"; // An authorization hash for a Penumbra transaction. message EffectHash { @@ -17,44 +14,6 @@ message ChainParameters { string chain_id = 1; // The duration of each epoch, in number of blocks. uint64 epoch_duration = 2; - - // The number of epochs an unbonding note for before being released. - uint64 unbonding_epochs = 3; - // The maximum number of validators in the consensus set. - uint64 active_validator_limit = 4; - // The base reward rate, expressed in basis points of basis points - uint64 base_reward_rate = 9; - // The penalty for slashing due to misbehavior. - uint64 slashing_penalty_misbehavior = 5; - // The penalty for slashing due to downtime. - uint64 slashing_penalty_downtime = 10; - // The number of blocks in the window to check for downtime. - uint64 signed_blocks_window_len = 11; - // The maximum number of blocks in the window each validator can miss signing without slashing. - uint64 missed_blocks_maximum = 12; - - // Whether IBC (forming connections, processing IBC packets) is enabled. - bool ibc_enabled = 6; - // Whether inbound ICS-20 transfers are enabled - bool inbound_ics20_transfers_enabled = 7; - // Whether outbound ICS-20 transfers are enabled - bool outbound_ics20_transfers_enabled = 8; - - // The number of blocks during which a proposal is voted on. - uint64 proposal_voting_blocks = 20; - // The deposit required to create a proposal. - penumbra.core.num.v1alpha1.Amount proposal_deposit_amount = 21; - // The quorum required for a proposal to be considered valid, as a fraction of the total stake - // weight of the network. - string proposal_valid_quorum = 22; - // The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. - string proposal_pass_threshold = 23; - // The threshold for a proposal to be slashed, regardless of whether the "yes" and "no" votes - // would have passed it, as a ratio of "no" votes over all total votes. - string proposal_slash_threshold = 24; - - // Whether DAO spend proposals are enabled. - bool dao_spend_proposals_enabled = 25; } // The ratio between two numbers, used in governance to describe vote thresholds and quorums. @@ -86,23 +45,10 @@ message SpendInfo { uint64 spend_height = 2; } -message GenesisAppState { - oneof genesis_app_state { - GenesisContent genesis_content = 1; - bytes genesis_checkpoint = 2; - } -} - +// Chain-specific genesis content. message GenesisContent { - message Allocation { - penumbra.core.num.v1alpha1.Amount amount = 1; - string denom = 2; - penumbra.core.keys.v1alpha1.Address address = 3; - } - + // The ChainParameters present at genesis. ChainParameters chain_params = 1; - repeated stake.v1alpha1.Validator validators = 2; - repeated Allocation allocations = 3; } message Epoch { diff --git a/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto b/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto index 72dde814ba..45ffc8c774 100644 --- a/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto +++ b/proto/penumbra/penumbra/core/component/dao/v1alpha1/dao.proto @@ -1,3 +1,14 @@ syntax = "proto3"; package penumbra.core.component.dao.v1alpha1; +// Dao parameter data. +message DaoParameters { + // Whether DAO spend proposals are enabled. + bool dao_spend_proposals_enabled = 1; +} + +// Dao genesis state. +message GenesisContent { + // Dao parameters. + DaoParameters dao_params = 1; +} \ No newline at end of file diff --git a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto index cdc1181e0d..157ccf2ce5 100644 --- a/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto +++ b/proto/penumbra/penumbra/core/component/governance/v1alpha1/governance.proto @@ -320,3 +320,25 @@ message ProposalRateDataRequest { message ProposalRateDataResponse { core.component.stake.v1alpha1.RateData rate_data = 1; } + +// Governance configuration data. +message GovernanceParameters { + // The number of blocks during which a proposal is voted on. + uint64 proposal_voting_blocks = 1; + // The deposit required to create a proposal. + penumbra.core.num.v1alpha1.Amount proposal_deposit_amount = 2; + // The quorum required for a proposal to be considered valid, as a fraction of the total stake + // weight of the network. + string proposal_valid_quorum = 3; + // The threshold for a proposal to pass voting, as a ratio of "yes" votes over "no" votes. + string proposal_pass_threshold = 4; + // The threshold for a proposal to be slashed, regardless of whether the "yes" and "no" votes + // would have passed it, as a ratio of "no" votes over all total votes. + string proposal_slash_threshold = 5; +} + +// Governance genesis state. +message GenesisContent { + // Governance parameters. + GovernanceParameters governance_params = 1; +} \ No newline at end of file diff --git a/proto/penumbra/penumbra/core/component/ibc/v1alpha1/ibc.proto b/proto/penumbra/penumbra/core/component/ibc/v1alpha1/ibc.proto index 172e4fd456..74819f6435 100644 --- a/proto/penumbra/penumbra/core/component/ibc/v1alpha1/ibc.proto +++ b/proto/penumbra/penumbra/core/component/ibc/v1alpha1/ibc.proto @@ -74,4 +74,20 @@ message ConnectionCounter { message ClientConnections { repeated string connections = 1; +} + +// IBC configuration data. +message IbcParameters { + // Whether IBC (forming connections, processing IBC packets) is enabled. + bool ibc_enabled = 1; + // Whether inbound ICS-20 transfers are enabled + bool inbound_ics20_transfers_enabled = 2; + // Whether outbound ICS-20 transfers are enabled + bool outbound_ics20_transfers_enabled = 3; +} + +// IBC genesis state. +message GenesisContent { + // IBC parameters. + IbcParameters ibc_params = 1; } \ No newline at end of file diff --git a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto index 25436ce145..d74a640be6 100644 --- a/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto +++ b/proto/penumbra/penumbra/core/component/shielded_pool/v1alpha1/shielded_pool.proto @@ -5,6 +5,7 @@ import "penumbra/crypto/tct/v1alpha1/tct.proto"; import "penumbra/crypto/decaf377_rdsa/v1alpha1/decaf377_rdsa.proto"; import "penumbra/core/asset/v1alpha1/asset.proto"; import "penumbra/core/keys/v1alpha1/keys.proto"; +import "penumbra/core/num/v1alpha1/num.proto"; message Note { asset.v1alpha1.Value value = 1; @@ -173,4 +174,16 @@ message DenomMetadataByIdResponse { // // If the requested asset was unknown, this field will not be present. core.asset.v1alpha1.DenomMetadata denom_metadata = 1; -} \ No newline at end of file +} + +// Genesis data for the shielded pool component. +message GenesisContent { + message Allocation { + penumbra.core.num.v1alpha1.Amount amount = 1; + string denom = 2; + penumbra.core.keys.v1alpha1.Address address = 3; + } + + // The allocations present at genesis + repeated Allocation allocations = 2; +} diff --git a/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto b/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto index d68e5a662d..c75d277b4b 100644 --- a/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto +++ b/proto/penumbra/penumbra/core/component/stake/v1alpha1/stake.proto @@ -289,4 +289,30 @@ message NextValidatorRateRequest { message NextValidatorRateResponse { core.component.stake.v1alpha1.RateData data = 1; +} + +// Staking configuration data. +message StakeParameters { + // The number of epochs an unbonding note for before being released. + uint64 unbonding_epochs = 1; + // The maximum number of validators in the consensus set. + uint64 active_validator_limit = 2; + // The base reward rate, expressed in basis points of basis points + uint64 base_reward_rate = 3; + // The penalty for slashing due to misbehavior. + uint64 slashing_penalty_misbehavior = 4; + // The penalty for slashing due to downtime. + uint64 slashing_penalty_downtime = 5; + // The number of blocks in the window to check for downtime. + uint64 signed_blocks_window_len = 6; + // The maximum number of blocks in the window each validator can miss signing without slashing. + uint64 missed_blocks_maximum = 7; +} + +// Genesis data for the staking component. +message GenesisContent { + // The configuration parameters for the staking component present at genesis + StakeParameters stake_params = 1; + // The list of validators present at genesis. + repeated stake.v1alpha1.Validator validators = 2; } \ No newline at end of file diff --git a/proto/penumbra/penumbra/view/v1alpha1/view.proto b/proto/penumbra/penumbra/view/v1alpha1/view.proto index bec32554db..2f91409b50 100644 --- a/proto/penumbra/penumbra/view/v1alpha1/view.proto +++ b/proto/penumbra/penumbra/view/v1alpha1/view.proto @@ -5,6 +5,7 @@ package penumbra.view.v1alpha1; import "penumbra/crypto/tct/v1alpha1/tct.proto"; import "penumbra/core/keys/v1alpha1/keys.proto"; import "penumbra/core/num/v1alpha1/num.proto"; +import "penumbra/core/app/v1alpha1/app.proto"; import "penumbra/core/asset/v1alpha1/asset.proto"; import "penumbra/core/transaction/v1alpha1/transaction.proto"; import "penumbra/core/component/chain/v1alpha1/chain.proto"; @@ -51,8 +52,8 @@ service ViewProtocolService { // Returns a stream of `AssetsResponse`s. rpc Assets(AssetsRequest) returns (stream AssetsResponse); - // Query for the current chain parameters. - rpc ChainParameters(ChainParametersRequest) returns (ChainParametersResponse); + // Query for the current app parameters. + rpc AppParameters(AppParametersRequest) returns (AppParametersResponse); // Query for the current FMD parameters. rpc FMDParameters(FMDParametersRequest) returns (FMDParametersResponse); @@ -375,11 +376,11 @@ message AssetsResponse { core.asset.v1alpha1.DenomMetadata denom_metadata = 2; } -// Requests the current chain parameters from the view service. -message ChainParametersRequest {} +// Requests the current app parameters from the view service. +message AppParametersRequest {} -message ChainParametersResponse { - core.component.chain.v1alpha1.ChainParameters parameters = 1; +message AppParametersResponse { + core.app.v1alpha1.AppParameters parameters = 1; } // Requests the current FMD parameters from the view service.